Uma análise aprofundada dos MCPs, Parte 1: Afinal, o que é MCP?

Se acompanha a área de IA, certamente já ouviu falar sobre o Protocolo de Contexto do Modelo (MCP). Desde que a Anthropic anunciou este novo padrão em novembro de 2024, a sua popularidade cresceu significativamente. Existem MCPs para enviar e-mails, MCPs para pesquisar na web e MCPs que executam outros MCPs. Os MCPs estão a permitir que os LLMs realizem solicitações de pull e reservas de voos. Em maio, a Microsoft anunciou um Registro MCP para Windows que permite que os aplicativos exponham funcionalidades aos agentes de IA. permite que as aplicações exponham funcionalidades para agentes de IA

Fantástico! Mas como? O que é MCP? Como se utiliza? Por que se tornou tão mais popular do que os esforços anteriores? Como é que permite que os chatbots realizem tarefas no mundo real? E como pode construir um seu próprio?

Quando decidimos construir nosso próprio servidor MCP para a API do DeepL, a tarefa parecia intimidante. No entanto, uma vez que compreenda verdadeiramente como os MCPs funcionam, como os MCPs permitem que os agentes descubram e utilizem ferramentas e como é possível construir um servidor MCP básico com 10 linhas de código, não é assim tão assustador. Nesta série de publicações, procuraremos esclarecer este tema. Iremos explorar:

  • O que é MCP
  • Como utilizar o MCP em um cliente de IA
  • Como configurar um servidor MCP

Vamos lá!

Qual é o significado de MCP?

MCP significa Protocolode Contextodo Modelo.

O“modelo”é um modelo de IA. Pode ser qualquer tipo de superfície de IA, mas normalmente é construída sobre um LLM. Aqui, referir-nos-emos a isso como um agente de IA ou um assistente de IA.

“Contexto”refere-se ao contexto em que o agente de IA opera. Na IA, frequentemente discutimos sobre uma "janela de contexto", que se refere a todo o contexto que um LLM incorpora quando gera a sua resposta a um prompt - o histórico da conversa, o prompt do sistema e muito mais. Para que o MCP funcione, uma superfície de IA fornece ao LLM subjacente um prompt adicional especificando quais ferramentas ele pode utilizar e como utilizá-las.

“Protocolo”é um conjunto de regras que define a forma como duas entidades comunicam através de uma rede. Um protocolo que utiliza diariamente é o HTTP - Protocolo de Transferência de Hipertexto - que rege a forma como um servidor Web e um cliente Web comunicam entre si.

Resumindo: O “Protocolo de Contexto do Modelo” é um protocolo que fornece o contexto que permite que os modelos de IA utilizem ferramentas e recursos externos.

MCP é um padrão aberto desenvolvido por dois engenheiros da Anthropic. Ele utiliza JSON-RPC, um protocolo popular para definir chamadas de função. E é inspirado no Protocolo de Servidor de Idioma, que a Microsoft criou para separar a lógica por trás do tratamento de idiomas de codificação dos IDEs.

O MCP não é um software, uma aplicação ou uma API. No entanto, isso permite que os agentes IA tenham acesso a todos esses recursos.

O que a MCP realiza?

Os LLMs podem fornecer respostas inteligentes e úteis às entradas do utilizador. No entanto, eles não têm acesso a serviços externos, não têm como se comunicar com outros softwares e não possuem meios para recuperar informações atualizadas. O MCP permite que qualquer superfície de IA envie solicitações a qualquer serviço de software e obtenha uma resposta. Ele fornece a um agente de IA de IA um meio padrão para acessar ferramentas, recursos e dados externos.

Sem o MCP, um cliente de IA é apenas um cérebro sem corpo, sem forma de acessar o mundo exterior. Com o MCP, um cliente de IA pode atuar como um agente.

Quem pode utilizar o MCP?

Uma vez que o MCP é um padrão aberto, qualquer pessoa pode implementar um cliente MCP ou um servidor MCP.

O cliente pode ser qualquer aplicação baseada em um LLM. É possível utilizar MCPs em aplicações como o Claude Desktop, VSCode, Windsurf e Cursor. Ou pode utilizar MCPs com um agente de IA que tenha criado com uma estrutura como LangChain ou CrewAI.

Por que o MCP se tornou tão popular?

Uma razão é que se trata de um padrão aberto. Qualquer agente de IA pode implementar o MCP, assim como qualquer ferramenta. Isso lhe confere um apelo mais amplo do que as soluções para o produto de uma empresa específica, como o OpenAI's Chamada de função.

Ao criar esta solução universal, os criadores do MCP inspiraram-se no Protocolo de Servidor de Idioma (LSP). Antes do LSP, quando um IDE pretendia implementar funcionalidades como autocompletar ou realçar a sintaxe para um determinado idioma de programação, era necessário desenvolver a sua própria integração. O resultado foi o que os criadores recentemente referiram como um problema problema m × n, no qual as pessoas precisavam implementar serviços de idioma separadamente para cada combinação possível de IDE/idioma. Com o LSP, cada idioma de codificação necessita apenas de uma biblioteca de integração. E um IDE que é compatível com LSP pode ser compatível com qualquer idioma desse tipo. Da mesma forma, uma vez que um serviço implemente um servidor MCP, qualquer cliente de IA que seja compatível com MCP poderá utilizá-lo. O cliente necessita apenas de ser compatível com MCP.

O MCP é flexível de outras formas. Pode ser executado localmente ou através de uma rede. E isso vem da Anthropic, que é muito respeitada e que compartilharia os benefícios de um padrão aberto.

Por que os agentes de IA necessitam de um protocolo padrão?

Uma vez que os LLMs são tão eficientes em compreender e aplicar informações, será que já não podem utilizar qualquer serviço de software cuja descrição esteja incluída nos seus dados de treino? Afinal, os LLMs já compreendem como utilizar muitas API populares, como poderá verificar se solicitar assistência a um assistente de codificação como o Copilot ou o Sourcegraph.

No entanto, se concedêssemos a um LLM acesso a todas as APIs nos seus dados de treino, o caos seria inevitável. Como ele saberia quais APIs chamar e quando? Como ele obteria a sua chave de API e credenciais, e como utilizaria serviços que requerem outros tipos de acesso? E se desejasse saber a distância de carro entre Kansas City e Des Moines ou a temperatura atual em Bangcoc? Existem várias maneiras de obter essas informações. Como utilizador, o senhor deseja ter controlo sobre as ações que o seu LLM escolhe. Isso é especialmente verdadeiro quando não se trata de recuperar informações, mas de realizar ações que afetam o mundo, como enviar um e-mail ou encomandar uma pizza.

É verdade que um agente poderia ler e compreender uma especificação OpenAPI de baixo nível ou a documentação completa da API e, em seguida, fazer chamadas de API de acordo com isso. No entanto, o MCP permite que os fabricantes de ferramentas definam serviços de nível superior que seriam especialmente úteis para um agente de IA, direcionando esse agente para uma direção útil. Até o momento, esta é uma área em que os seres humanos ainda se destacam.

Portanto, conclui-se que a melhor abordagem, por enquanto, é definir explicitamente as ferramentas e os recursos que o LLM pode utilizar e como pode utilizá-los. O MCP realiza isso de maneira tradicional, de forma determinística — não utilizando a magia do LLM, mas por meio de código e JSON.

No entanto, como um LLM pode utilizar ferramentas?

Fundamentalmente, um LLM é uma máquina que gera tokens - tokens que os humanos encontram como texto, imagens, áudio e assim por diante. Então, como é que uma máquina desse tipo pode ter acesso a ferramentas e recursos? Como é que ele sabe que tem esse acesso e como é que sabe qual usar?

O ponto principal é que, de facto, como Maximilian Schwarzmüller aponta, os LLMs só podem comunicar com o mundo exterior através de tokens. Eles recebem tokens como entrada e produzem tokens como saída. E esses tokens podem incluir entidades que significam "Desejo utilizar uma ferramenta". Portanto, para indicar que deseja utilizar uma ferramenta ou recurso, e para realmente utilizá-lo, um LLM gera tokens padrão que o software ao seu redor reconhecerá como uma chamada de ferramenta e interceptará. Esse software, então, aciona um serviço e retorna o resultado para o LLM.

O LLM poderia utilizar tokens especializados neste caso. No entanto, geralmente utiliza apenas delimitadores e idioma específicos - dessa forma, é possível adaptar essa capacidade a um LLM existente, ajustando-o. Por exemplo, pode utilizar tags de início e fim entre colchetes que envolvem JSON, como neste modelo de saída do agente:

Certamente! Posso criar uma nova folha de cálculo para si. Por favor, aguarde...

[tool-start] { "tool": "spreadsheets", "action": "create" } [tool-end]

Foi exatamente isso que os investigadores realizaram em seu artigo sobre o Toolformer de 2023, que mostrou, como o título indica, que «os modelos de linguagem podem aprender sozinhos a utilizar ferramentas». Neste estudo, os autores geraram dados de treino que incluíam representações em texto simples de chamadas de API e seus resultados. Ajustando um LLM com esses dados adicionais, eles produziram um LLM que chamaria essas APIs para gerar uma resposta promissora a um prompt.

Eles utilizaram o formato simples:

[function_name(data) → result]

Por exemplo, sabendo que os LLMs têm dificuldades com matemática, eles disponibilizaram uma ferramenta Calculadora. Em seguida, incluíram nos dados de treino cadeias como esta:

De 1.400 participantes, 400 (ou [Calculadora(400 / 1400) → 0,29] 29%) aprovados no teste.

e

O nome deriva de «la tortuga», a palavra espanhola para [MT(“tortuga”) → tartaruga] tartaruga.

Ao ajustar um LLM com esses dados, eles criaram um LLM que sabia como chamar APIs para gerar a resposta mais promissora para um determinado prompt.

No entanto, não é necessário ajustar um LLM para permitir que ele utilize ferramentas. Acontece que tudo o que precisa é de um aviso. Este artigo demonstra como ensinar um LLM a utilizar ferramentas usando JSON delimitado por [[qwen-tool-start]] e [[qwen-tool-end]], apenas fornecendo-lhe um prompt apropriado. Pode experimentar por si mesmo! Basta visitar o seu chatbot guardado e informar:

Parabéns! Agora tem a capacidade de utilizar uma ferramenta para realizar multiplicações. Quando necessitar realizar um cálculo, basta utilizar a seguinte sintaxe: 

[Matemática] { "arg1": {valor}, "arg2": {valor} } [/Math] 

onde, naturalmente, cada {valor} representa um valor que pretende multiplicar. OK? 

Em seguida, forneça ao LLM um problema matemático e observe como ele gera fielmente a sintaxe que você forneceu para a sua ferramenta matemática.

Os LLMs modernos ainda utilizam ferramentas de maneira muito semelhante. Por exemplo, a Anthropic descreve aqui a forma como eles constroem um prompt de sistema para que Claude utilize ferramentas na sua API.

Como um LLM processa os resultados de uma ferramenta?

Como um LLM recebe a saída da ferramenta? Mais uma vez, trata-se de tokens. Assim que o cliente de IA recebe a saída de uma ferramenta, ele a alimenta de volta no LLM como entrada, mas de forma que o LLM saiba que se trata da saída da ferramenta, e não da entrada do utilizador final.

Reunindo todos os elementos

Para resumir, eis o que ocorre quando um LLM utiliza uma ferramenta:

  • Tipos de utilizadores na entrada
  • O LLM processa esta entrada.
  • Ao gerar resultados, o LLM "decide" que chamar uma ferramenta é a melhor maneira de concluir a sua produção. Isto significa que ele gera um conjunto de tokens que foi treinado para reconhecer como capazes de acionar uma ferramenta.
  • O cliente de IA reconhece esses tokens como algo que deve acionar uma ferramenta, intercepta-os, analisa o JSON em parâmetros e qualquer outra informação na solicitação e envia isso para a ferramenta apropriada.
  • A ferramenta gera resultados, que podem ou não envolver o uso de uma API. Ele retorna isso para o cliente de IA, que o envia para o LLM.
  • O LLM processa a saída da ferramenta
  • O LLM utiliza esta saída para continuar a criar uma resposta para o utilizador.

E esta foi a minha breve apresentação sobre o que é o MCP e como ele é implementado em LLMs. No meu próximo post, demonstrarei como utilizar MCPs no seu próprio cliente de IA.


Sobre o autor

Como evangelista de desenvolvedores da DeepL, Ben Morss trabalha para auxiliar qualquer pessoa a utilizar a API do DeepL para acessar as suas traduções de IA de nível internacional. Anteriormente, na Google, ele atuou como Gestor de Produto do Chrome e Defensor dos Desenvolvedores para uma web melhor. Antes disso, ele foi engenheiro de software no New York Times e na AOL, e já foi músico a tempo inteiro. Ele obteve um bacharelado em Ciência da Computação pela Universidade de Harvard e um doutorado em Música pela Universidade da Califórnia em Davis. Ainda é possível encontrá-lo a fazer música com a banda Ancient Babies, analisando canções pop no Rock Theorye escrevendo um musical que não é realmente sobre Steve Jobs.

Partilhar