O que é MCP (Model Context Protocol)? Guia detalhado

Publicado:

17 min de leitura

Acar Diveroli
Autor: Acar Diveroli
Conexões que partem de um cubo LLM para um servidor MCP central e dele para ferramentas de web, código e arquivos

Imagine que você quer que um assistente de IA acesse documentos internos, um banco de dados, um repositório de código e a web. Antes do MCP, o jeito de fazer isso era escrever uma integração separada para cada ferramenta em cada aplicativo de assistente: um plugin de banco de dados para o assistente do editor de código, outro plugin para o mesmo banco no aplicativo de chat e uma terceira versão para as ferramentas internas. Conforme o número de ferramentas e aplicativos crescia, o número de integrações se multiplicava.

O MCP (Model Context Protocol) resolve isso ao permitir que você escreva uma ferramenta uma única vez como "servidor MCP" e a use em todos os aplicativos de IA compatíveis com MCP. Neste artigo, explicamos o que é o MCP, qual problema ele resolve, a arquitetura host-cliente-servidor, as ferramentas, recursos e prompts que os servidores oferecem e os dois métodos de transporte padrão. Depois, vemos como um servidor MCP chega aos dados da web e onde um proxy entra, os riscos de segurança do protocolo, a diferença entre MCP e usar uma API diretamente e o menor servidor MCP funcional em Python.

O que é MCP?

O Model Context Protocol é um protocolo aberto que padroniza como aplicativos de modelos de linguagem grandes se conectam a fontes de dados e ferramentas externas. A especificação oficial do protocolo define a comunicação com mensagens JSON-RPC 2.0 e se compara ao Language Server Protocol (LSP), que padronizou o suporte a linguagens de programação nas ferramentas de desenvolvimento. Assim como o LSP permitiu escrever o suporte a uma linguagem uma vez e usá-lo em qualquer editor, o MCP busca permitir que uma ferramenta seja escrita uma vez e usada em qualquer aplicativo de IA com MCP.

Para entender o MCP, ajuda separar duas coisas:

  • O MCP não é um modelo nem um produto de IA. É um contrato de comunicação: define o formato e o significado das mensagens entre um aplicativo e uma ferramenta.
  • O MCP não escreve a ferramenta por você. Uma consulta ao banco de dados, uma requisição web ou uma operação com arquivos continuam sendo o seu código; o MCP permite expor esse código de forma que os aplicativos de IA consigam descobri-lo e chamá-lo.

As versões da especificação são nomeadas por data. Quando este artigo foi escrito, a versão atual era a 2026-07-28, que traz uma mudança importante em relação às anteriores: o protocolo é stateless (sem estado); cada requisição carrega a própria versão de protocolo e as capacidades do cliente. Nas versões anteriores, uma sessão era estabelecida com um handshake (initialize) no início da conexão. Como o protocolo evolui rápido, recomendamos conferir a especificação atual antes de escrever uma integração.

Qual problema o MCP resolve?

O problema que o MCP resolve é o das "N × M integrações". Se há cinco aplicativos de IA e dez ferramentas, são necessárias cinquenta integrações separadas para que cada aplicativo converse com cada ferramenta. Cada integração é escrita, testada e atualizada separadamente quando a ferramenta muda.

Com o MCP, isso vira "N + M":

  • Cada ferramenta é escrita uma vez como servidor MCP.
  • Cada aplicativo de IA ganha suporte a MCP uma vez.
  • Todo aplicativo compatível com MCP pode usar qualquer servidor MCP.

Na prática: quando uma empresa escreve um servidor MCP para a base de conhecimento interna, os funcionários chegam a essa base pelo mesmo servidor a partir do assistente do editor de código, de um aplicativo de chat para desktop ou de um agente que eles mesmos criaram.

Arquitetura: host, cliente e servidor

A seção de arquitetura da especificação define três papéis.

ComponenteO que é?Responsabilidades
HostO próprio aplicativo de IA (editor de código, aplicativo de chat, agente)Cria e gerencia os clientes, controla as permissões de conexão e o consentimento do usuário, chama o modelo, guarda o histórico da conversa
ClienteO conector dentro do hostConversa com exatamente um servidor, anexa a versão do protocolo e as capacidades a cada requisição, mantém a fronteira de segurança entre servidores
ServidorO programa que oferece a ferramenta ou a fonte de dadosOferece ferramentas, recursos e prompts; pode ser um processo local ou um serviço remoto

Um dos princípios de design mais importantes da arquitetura é o isolamento: um servidor não consegue ler a conversa inteira nem enxergar dentro de outros servidores. O histórico da conversa fica com o host; o servidor só recebe as informações de que precisa para fazer o trabalho. O host também controla as interações entre servidores.

A requisição de um usuário passa por essa estrutura assim:

  1. O usuário digita um pedido no aplicativo host.
  2. O host entrega ao modelo a lista de ferramentas oferecidas pelos servidores conectados, com as descrições.
  3. O modelo decide usar uma ferramenta e produz uma chamada de ferramenta.
  4. O host pede consentimento ao usuário, se necessário, e passa a chamada ao cliente correspondente.
  5. O cliente envia a requisição ao servidor; o servidor executa a ferramenta e devolve o resultado.
  6. O host entrega o resultado ao modelo, e o modelo produz uma resposta para o usuário.

Explicamos em detalhe a lógica geral do loop de chamadas de ferramentas em Agentes de IA: planejamento, ferramentas e memória.

O que um servidor MCP oferece?

Um servidor MCP pode oferecer três tipos básicos de capacidade:

  • Ferramentas (tools): funções que o modelo pode pedir para executar. Buscar uma página web, rodar uma consulta em um banco de dados, criar um registro. Cada ferramenta tem um nome, uma descrição que ajuda o modelo a entender quando usá-la e parâmetros definidos com JSON Schema.
  • Recursos (resources): dados que o usuário ou o modelo podem usar como contexto. O conteúdo de um arquivo, um esquema de banco de dados, um documento. Diferente das ferramentas, eles não executam ações; fornecem informação.
  • Prompts (modelos de prompt): modelos de mensagem e fluxos prontos que o usuário pode escolher. Por exemplo, um modelo parametrizado como "analise este log de erros".

Os servidores também podem pedir ao cliente informações adicionais para concluir uma requisição: pedir ao usuário dados que estão faltando (elicitation) ou fazer o modelo do host gerar texto (sampling). Na especificação atual, esses pedidos são transmitidos dentro da resposta do servidor.

Sobre o núcleo do protocolo, recursos como o gerenciamento de tarefas de longa duração ou elementos de interface interativos dentro de uma conversa são definidos como extensões opcionais; tanto o cliente quanto o servidor precisam suportá-las explicitamente.

Transportes: stdio e Streamable HTTP

Como as mensagens MCP são levadas entre os dois lados é definido na seção de transportes da especificação. Há dois métodos padrão:

CritériostdioStreamable HTTP
Como funciona?O cliente inicia o servidor como subprocesso; as mensagens trafegam linha a linha pela entrada e saída padrãoCada mensagem é enviada a um único endpoint MCP como HTTP POST; a resposta volta como objeto JSON ou como fluxo SSE ligado à requisição
Onde o servidor roda?No computador do usuário, na mesma máquina que o hostEm um servidor remoto ou na nuvem
AutenticaçãoRoda com as permissões do usuário do sistema operacionalNo nível HTTP, geralmente autorização baseada em OAuth
Uso típicoArquivos locais, ferramentas de desenvolvimento locais, uso pessoalServiços compartilhados por uma equipe ou pela empresa
CancelamentoÉ enviada uma notificação de cancelamentoO fluxo de resposta da requisição é fechado

O significado do protocolo é o mesmo nos dois métodos; só muda a forma de entregar as mensagens. Outros métodos de transporte também podem ser definidos para necessidades específicas.

Lembre-se de que um servidor rodando via stdio roda com todas as permissões do usuário que o iniciou. Um servidor MCP que você instala no seu computador pode acessar os seus arquivos e a sua rede na mesma medida que você.

Como um servidor MCP chega aos dados da web?

Uma das capacidades de que os aplicativos de IA mais precisam são os dados atuais da web. Um servidor MCP geralmente os oferece de uma destas três formas:

  • Ferramenta de busca: envia uma consulta a uma API de busca e devolve uma lista de títulos e endereços.
  • Ferramenta de busca de página: busca um endereço específico com um cliente HTTP e devolve o texto.
  • Ferramenta de navegador: controla um navegador headless; abre páginas que carregam com JavaScript, clica e tira capturas de tela.

A parte de rede dessas ferramentas são requisições HTTP comuns, e todas as regras do web scraping valem aqui também. Nessa configuração, o proxy fica no ponto de saída do servidor para o mundo externo:

  • Localização: o servidor usa um endereço de um país específico para ver como um produto ou conteúdo aparece dali. Para trabalhos que precisam da visão de uma conexão doméstica real, prefere-se um Proxies residenciais.
  • Distribuição de carga: uma ferramenta que busca muitas páginas públicas diferentes pode usar um Proxies rotativos para distribuir as requisições entre IPs de saída diferentes por um único endereço; os limites de taxa e as regras dos sites continuam valendo.
  • Controle e registro da saída: quais domínios o servidor alcança é monitorado e limitado a partir de um único ponto.
  • Isolamento: o tráfego web do servidor fica separado da rede interna e dos endereços IP principais da empresa.

Explicamos com um exemplo testado como tornar segura uma ferramenta de acesso à web com lista de permitidos, limites de taxa, bloqueio da rede interna e limpeza de conteúdo em Acesso seguro à web para LLMs: limites e permissões. Para a configuração geral de coleta de dados, veja a nossa página de solução de extração de dados.

O menor servidor MCP

O exemplo abaixo é um servidor MCP que oferece uma única ferramenta, escrito com o SDK oficial para Python. A ferramenta só busca páginas HTTPS de domínios permitidos e envia a requisição por um proxy de saída opcional. Na versão 2 do SDK, a classe do servidor se chama MCPServer; exemplos com FastMCP da versão 1 não rodam diretamente nesta versão.

bash
pip install mcp httpx
python
# server.py
import os
from urllib.parse import urlsplit

import httpx
from mcp.server.mcpserver import MCPServer

ALLOWED = {d.strip().lower() for d in os.environ.get("ALLOWED_DOMAINS", "example.com").split(",")}
PROXY = os.environ.get("EGRESS_PROXY")  # ex.: http://user:pass@pr.proxynet.io:8000

mcp = MCPServer("web-reader")


@mcp.tool()
async def fetch_page(url: str) -> str:
    """Retorna os primeiros 5.000 caracteres de uma página de um domínio permitido."""
    parts = urlsplit(url)
    if parts.scheme != "https" or (parts.hostname or "").lower() not in ALLOWED:
        return f"Este endereço não está na lista de permitidos: {url}"
    async with httpx.AsyncClient(proxy=PROXY, timeout=15, follow_redirects=False) as client:
        response = await client.get(url, headers={"User-Agent": "ExampleMCP/1.0"})
    return response.text[:5000]


if __name__ == "__main__":
    mcp.run(transport="stdio")

O nome da função vira o nome da ferramenta, a docstring vira a descrição e as anotações de tipo viram o esquema de parâmetros. O SDK transforma isso automaticamente em uma definição de ferramenta MCP.

Para chamar o servidor a partir de um cliente:

python
# client.py
import asyncio
import sys

from mcp.client.session import ClientSession
from mcp.client.stdio import StdioServerParameters, stdio_client

SERVER = StdioServerParameters(
    command=sys.executable,
    args=["server.py"],
    env={"ALLOWED_DOMAINS": "example.com", "EGRESS_PROXY": "http://user:pass@pr.proxynet.io:8000"},
)


async def main():
    async with stdio_client(SERVER) as (read, write):
        async with ClientSession(read, write) as session:
            await session.discover()  # descobrir a versão e as capacidades do servidor
            tools = await session.list_tools()
            print([t.name for t in tools.tools])

            result = await session.call_tool("fetch_page", {"url": "https://example.com/"})
            print(result.content[0].text[:200])


asyncio.run(main())

Repare em dois detalhes. Primeiro, antes de listar as ferramentas, o cliente usa discover() para saber qual versão de protocolo e quais capacidades o servidor suporta; quando esse passo é pulado, o servidor rejeita a requisição com um erro de parâmetros inválidos. Para servidores com versões de protocolo mais antigas, o SDK também tem a chamada initialize(). Segundo, quando o SDK inicia um servidor stdio, ele não repassa todas as variáveis de ambiente, só uma lista limitada, como PATH; os valores de que o servidor precisa, como ALLOWED_DOMAINS e EGRESS_PROXY, devem ser passados explicitamente com o parâmetro env.

No uso real, você não escreve o cliente; adiciona o servidor às configurações de um aplicativo host compatível com MCP, e o host o inicia. Este cliente de exemplo basta para testar se o servidor funciona corretamente.

O exemplo é pequeno de propósito. Em produção, essa ferramenta deveria ganhar limites de taxa, verificação de endereços da rede interna, limite de tamanho de resposta e limpeza de conteúdo.

Riscos de segurança

O fato de as ferramentas MCP poderem executar código arbitrário e buscar conteúdo de fontes externas torna o protocolo tão arriscado quanto poderoso. A própria especificação lista consentimento do usuário, privacidade de dados e segurança das ferramentas como princípios centrais e pede aos hosts que obtenham o consentimento explícito do usuário antes de chamar uma ferramenta. Os principais riscos são:

  • Envenenamento de ferramentas (tool poisoning). Como o modelo decide como usar uma ferramenta lendo a descrição dela, um servidor malicioso pode esconder na descrição instruções voltadas ao modelo. A especificação diz que descrições e anotações de ferramentas devem ser tratadas como não confiáveis, a menos que venham de um servidor confiável.
  • Permissões excessivas. Dar a um servidor mais acesso do que ele precisa: escrita para um trabalho que só exige leitura, o sistema de arquivos inteiro em vez de uma pasta, uma conta de administrador em vez de uma tabela do banco.
  • Injeção de prompt pelos resultados das ferramentas. O conteúdo devolvido por uma ferramenta de busca de página pode conter texto que parece instrução para o modelo. Seguindo essas instruções, o modelo pode chamar uma ferramenta de outro servidor.
  • Repassar tokens. Um servidor MCP que repassa a outros serviços, sem validar, o token de acesso que recebeu pode fazer com que verificações de autorização sejam contornadas. O documento de recomendações de segurança do protocolo proíbe explicitamente esse repasse de tokens e exige que os servidores só aceitem tokens emitidos para eles.
  • SSRF. Um servidor malicioso pode fazer o cliente enviar requisições a endereços da rede interna ou a endereços de metadados da nuvem durante o processo de autorização.
  • Servidores locais não confiáveis. Como servidores stdio rodam com as permissões do usuário, instalar um servidor de origem não verificada é o mesmo que executar um programa não verificado.

Medidas práticas:

  • Instale só servidores cuja origem você conhece e cujo código consegue revisar.
  • Dê a cada servidor o menor privilégio; separe em ferramentas diferentes ações como escrever e excluir.
  • Não desligue o consentimento do usuário em chamadas de ferramentas com efeitos colaterais.
  • Marque como dado não confiável a saída das ferramentas que buscam conteúdo da web.
  • Em servidores remotos, valide o público-alvo (audience) do token e não repasse tokens.
  • Registre as chamadas de ferramentas e fique atento a sequências de chamadas inesperadas.

A diferença entre MCP e API

O MCP não substitui uma API; a maioria dos servidores MCP já encapsula uma. A diferença está em para quem foram projetados.

CritérioUsar uma API diretamenteServidor MCP
ConsumidorCódigo de aplicação escrito por um desenvolvedorO aplicativo host de IA e o modelo
DescobertaUm desenvolvedor lendo a documentaçãoO host busca a lista de ferramentas e os esquemas em tempo de execução
Quem inicia a chamada?O código, com lógica predefinidaO modelo, decidindo conforme a situação
Número de integraçõesUma para cada aplicativoEscrito uma vez, usado em qualquer host MCP
PrevisibilidadeAltaDepende da decisão do modelo
Modelo de segurançaA autorização da própria aplicaçãoConsentimento do host, isolamento de servidores, menor privilégio
Trabalho adequadoFluxos fixos, integração entre sistemasDar capacidades a assistentes e agentes de IA

MCP ou API direta?

Sua situaçãoRecomendação
O código da sua aplicação chama um serviço específico em um fluxo fixoAPI direta
Você quer usar uma ferramenta em vários aplicativos de IAServidor MCP
O modelo precisa decidir qual ferramenta usar e quandoServidor MCP
A ação é irreversível e cada etapa exige controle rígidoAPI direta, ou uma ferramenta MCP com consentimento se necessário
Abrir um recurso interno para os assistentes dos funcionáriosServidor MCP remoto, com autorização
Uma única ferramenta de desenvolvimento localServidor MCP local via stdio

Casos de uso

  • Ferramentas para desenvolvedores: fazer o assistente do editor de código ler o repositório, os logs de erro e a documentação.
  • Acesso ao conhecimento interno: fazer os assistentes dos funcionários pesquisarem a wiki interna, os chamados de suporte e a documentação de produto.
  • Análise de dados: expor um banco de dados como servidor MCP somente leitura para os analistas consultarem em linguagem natural.
  • Pesquisa na web: agentes que chegam a informações atuais por uma ferramenta de busca de página com lista de permitidos e limites de taxa. Para um exemplo de como modelos de linguagem podem ser usados para extrair informações estruturadas de dados da web, veja Web scraping com GPT-6 Astra.
  • Ferramentas de operações: ler métricas dos sistemas de monitoramento e gerar resumos de incidentes; as ações de intervenção, em ferramentas separadas que exigem aprovação.

Erros comuns

  • Instalar servidores de origem desconhecida. Instalar um servidor MCP exige a mesma confiança que executar um programa.
  • Dar todas as permissões a um servidor. Não separar as ferramentas de leitura e de escrita.
  • Escrever descrições de ferramentas curtas e vagas. O modelo chama a ferramenta na situação errada.
  • Tratar os resultados das ferramentas como conteúdo confiável. Conteúdo da web e de documentos pode trazer instruções.
  • Desligar as etapas de consentimento. O consentimento do usuário é uma camada básica de segurança, sobretudo em ferramentas com efeitos colaterais.
  • Não conferir a versão da especificação. Como o protocolo evolui rápido, exemplos escritos para versões antigas podem não funcionar com os SDKs atuais.

Perguntas frequentes

Quem desenvolveu o MCP?

O MCP foi anunciado pela Anthropic como protocolo aberto e é desenvolvido como projeto de código aberto, com especificação, SDKs e documentação. Aplicativos e ferramentas de IA de empresas diferentes suportam o protocolo.

O MCP só funciona com um modelo de IA específico?

Não. O MCP define a comunicação entre um aplicativo e uma ferramenta e independe do modelo. Qualquer que seja o modelo usado pelo aplicativo host, ele oferece a esse modelo as ferramentas dos servidores MCP.

Em quais linguagens posso escrever um servidor MCP?

O projeto oferece SDKs oficiais para muitas linguagens, a começar por Python e TypeScript. Como o protocolo se baseia em JSON-RPC, também dá para escrever um servidor em uma linguagem sem SDK seguindo a especificação.

Qual é a diferença entre MCP e function calling?

Function calling é a capacidade de um modelo de produzir chamadas de ferramentas estruturadas e é específica da API de cada provedor de modelo. O MCP é o protocolo que permite definir, descobrir e chamar essas ferramentas de forma padronizada entre aplicativos. O host oferece ao modelo, via function calling, as ferramentas que obtém dos servidores MCP.

Como escolher entre servidor MCP local e remoto?

Para uso pessoal e acesso a arquivos locais, um servidor local via stdio basta. Para ferramentas que uma equipe ou empresa vai compartilhar e que precisam ser gerenciadas e autorizadas de forma central, o adequado é um servidor remoto via Streamable HTTP.

Como um proxy é usado quando um servidor MCP acessa a web?

O proxy é passado ao cliente HTTP ou ao navegador dentro do servidor; não tem nada a ver com o protocolo MCP em si. No exemplo acima, o endereço do proxy é lido de uma variável de ambiente e passado ao cliente HTTP, então todo o tráfego web do servidor sai por um ponto controlado.

Em resumo

O MCP é um protocolo aberto que conecta de forma padronizada aplicativos de IA a ferramentas e fontes de dados. Cada cliente dentro de um aplicativo host se conecta a um servidor; os servidores oferecem ferramentas, recursos e modelos de prompt; as mensagens são levadas com JSON-RPC via stdio ou Streamable HTTP. A especificação atual passou para uma estrutura sem estado, e o protocolo evolui rápido. Como as ferramentas podem executar código e buscar conteúdo externo, menor privilégio, consentimento do usuário, tratamento de conteúdo não confiável e registro precisam fazer parte do design. Para gerenciar o acesso à web dos seus servidores MCP com controle de localização e de saída, conheça os nossos serviços de proxy.