
MCP Desmistificado: O Protocolo Que Está Se Tornando o USB-C para Agentes de IA
Uma análise técnica profunda do Model Context Protocol (MCP). Entenda a arquitetura, os três primitivos (tools, resources, prompts), o formato wire...
✨TL;DR / Sumário Executivo
Uma análise técnica profunda do Model Context Protocol (MCP). Entenda a arquitetura, os três primitivos (tools, resources, prompts), o formato wire...
💡 TL;DR (Resumo)
O Model Context Protocol (MCP) é um protocolo aberto que padroniza como LLMs se conectam a ferramentas externas. Lançado pela Anthropic em novembro de 2024 e doado à Linux Foundation em dezembro de 2025, o MCP resolve o problema N×M de integrações (N modelos × M serviços) reduzindo-o para N+M. A arquitetura de três camadas (host, client, server) com três primitivos (tools, resources, prompts) e wire format JSON-RPC 2.0 permite que qualquer cliente MCP se conecte a qualquer servidor MCP sem integrações customizadas.
Se você tocou em qualquer ferramenta de desenvolvimento com IA no último ano—Claude, ChatGPT, Cursor, GitHub Copilot ou VS Code—você provavelmente interagiu com o Model Context Protocol sem saber. O MCP se tornou silenciosamente o tecido conectivo entre modelos de linguagem grandes e o mundo externo, e entendê-lo não é mais opcional para engenheiros construindo qualquer coisa que toca IA.
Este artigo remove o hype de marketing para explicar o que o MCP realmente é, por que existe e como funciona no nível do protocolo.
O Problema Que o MCP Resolve
Antes do MCP, conectar um LLM a ferramentas externas significava construir integrações customizadas para cada combinação de modelo e serviço. Quer que o Claude consulte seu banco de dados? Construa uma integração. Quer que o GPT-4 leia seu Google Drive? Construa outra integração. Quer que ambos os modelos acessem ambos os serviços? São quatro integrações, cada uma com seu próprio fluxo de autenticação, tratamento de erros e formato de dados.
Este é o clássico problema N×M. Com N modelos de linguagem e M serviços externos, você precisa de N×M integrações. Em pequena escala, isso é gerenciável. Na escala do ecossistema atual de IA—dezenas de modelos capazes e milhares de serviços úteis—torna-se insustentável.
O MCP endereça isso introduzindo uma interface padrão:
Serviços implementam a especificação do servidor MCP uma vez, e qualquer cliente compatível com MCP pode se conectar a eles. Modelos integram com a especificação do cliente MCP uma vez, e podem acessar qualquer servidor MCP. O problema N×M se torna N+M.
Arquitetura: Hosts, Clients e Servers
O MCP usa uma arquitetura de três camadas que separa responsabilidades de forma limpa.
Host
O host é a aplicação com a qual os usuários interagem diretamente. Claude Desktop, VS Code com Copilot, Cursor e aplicações customizadas funcionam como hosts. O host gerencia a interface do usuário, lida com autenticação e coordena entre o usuário, o modelo de linguagem e várias conexões MCP.
Client
O client vive dentro do host e gerencia a comunicação com servidores MCP. Um único host tipicamente executa múltiplos clients, um para cada conexão de servidor. O client gerencia o ciclo de vida da conexão, traduz entre a representação interna do host e o formato wire do MCP, e lida com negociação de capabilities.
Server
O server fornece acesso a capabilities externas. Um servidor MCP pode expor um banco de dados, um sistema de arquivos, uma API ou qualquer outro recurso que um LLM possa precisar.
Os Três Primitivos: Tools, Resources e Prompts
Servidores MCP expõem capabilities através de três primitivos, cada um projetado para um padrão de interação diferente.
Tools: Ações que o Modelo Pode Executar
Tools são funções que o LLM pode chamar. Uma tool tem um nome, uma descrição (que o LLM usa para decidir quando chamá-la) e um schema definindo seus parâmetros.
{
"name": "query_database",
"description": "Executa uma query SQL somente leitura no banco de dados de clientes. Use para recuperar informações de clientes, dados de vendas ou histórico de pedidos.",
"inputSchema": {
"type": "object",
"properties": {
"sql": {
"type": "string",
"description": "A query SQL a executar. Deve ser um SELECT."
},
"limit": {
"type": "integer",
"description": "Número máximo de linhas a retornar",
"default": 100,
"maximum": 1000
}
},
"required": ["sql"]
}
}Resources: Dados que o Modelo Pode Ler
Resources são fontes de dados que o LLM pode ler. Diferente de tools, resources não recebem parâmetros ou executam ações; simplesmente fornecem conteúdo. Um resource pode ser um arquivo, uma tabela de banco de dados, uma resposta de API ou qualquer outro dado que o LLM possa precisar para contexto.
{
"uri": "file:///projeto/config.json",
"name": "Configuração do Projeto",
"mimeType": "application/json"
}Prompts: Templates para Tarefas Comuns
Prompts são templates pré-definidos que ajudam usuários a realizar tarefas específicas. Um prompt pode ser "Resuma este pull request" ou "Gere testes unitários para esta função".
{
"name": "review_pr",
"description": "Gera uma revisão de código completa para um pull request",
"arguments": [
{ "name": "owner", "required": true },
{ "name": "repo", "required": true },
{ "name": "pr_number", "required": true },
{ "name": "focus", "description": "Áreas específicas para focar", "required": false }
]
}O Formato Wire: JSON-RPC 2.0
Mensagens MCP usam JSON-RPC 2.0, um protocolo leve de chamada de procedimento remoto. Se você trabalhou com Language Server Protocol (LSP), isso será familiar—LSP também usa JSON-RPC 2.0.
Request
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "query_database",
"arguments": {
"sql": "SELECT * FROM customers ORDER BY revenue DESC LIMIT 10"
}
}
}Response
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "| customer_id | name | revenue |..."
}
]
}
}Error
{
"jsonrpc": "2.0",
"id": 1,
"error": {
"code": -32602,
"message": "Invalid params: 'sql' field is required"
}
}Camadas de Transporte
O MCP é agnóstico de transporte. Na prática, três mecanismos dominam:
| Transporte | Uso | Prós | Contras |
|---|---|---|---|
| STDIO | Desenvolvimento local | Simples, sem configuração de rede | Apenas local |
| HTTP/SSE | Servidores remotos | Funciona em redes, múltiplos clients | Complexidade de conexão |
| Streamable HTTP | Produção moderna | Stream bidirecional único | Mais novo |
STDIO (Standard Input/Output)
O host spawna o servidor como um subprocesso e comunica através de pipes stdin/stdout:
# Claude Desktop executa:
node /path/to/mcp-server.js
# E comunica via stdin/stdoutAtenção crítica: Se seu servidor escreve mensagens de debug no stdout, elas corrompem o stream JSON-RPC. Sempre use stderr para logs!
Negociação de Capabilities
Quando um client se conecta a um server, eles realizam um handshake que estabelece versão do protocolo e capabilities:
1. Client envia initialize
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2024-11-05",
"capabilities": {
"roots": { "listChanged": true },
"sampling": {}
},
"clientInfo": {
"name": "Claude Desktop",
"version": "1.2.0"
}
}
}2. Server responde com suas capabilities
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"protocolVersion": "2024-11-05",
"capabilities": {
"tools": { "listChanged": true },
"resources": { "subscribe": true },
"prompts": { "listChanged": true }
},
"serverInfo": {
"name": "PostgreSQL MCP",
"version": "0.5.0"
}
}
}3. Client envia initialized
{
"jsonrpc": "2.0",
"method": "notifications/initialized"
}Comparando MCP com Alternativas
| Abordagem | Descrição | Limitação |
|---|---|---|
| Function Calling Nativo | OpenAI, Anthropic oferecem diretamente nas APIs | Não resolve N×M; cada app constrói integrações |
| LangChain/Frameworks | Abstrações sobre tools e workflows | São bibliotecas, não protocolos; não portáveis |
| APIs Customizadas | Você constrói exatamente o que precisa | Custo de engenharia e manutenção |
| MCP | Protocolo padronizado | Balanço entre padronização e flexibilidade |
Quem Está Usando MCP
A curva de adoção tem sido íngreme:
- 97 milhões de downloads mensais dos SDKs
- 10.000+ servidores listados em registries
- 1 milhão de pulls do Docker MCP Catalog
- Integração com Claude, ChatGPT, Cursor, VS Code Copilot, Gemini
A Linux Foundation's Agentic AI Foundation agora governa o protocolo, sinalizando que é um padrão neutro, não uma especificação controlada pela Anthropic.
O Que o MCP Não Resolve
Segurança: MCP é um protocolo, não um modelo de segurança. Não define como autenticar usuários, autorizar acesso ou prevenir abuso.
Limitações de LLMs: Modelos podem entender mal descrições de tools, gerar argumentos inválidos ou chamar tools inapropriadamente.
Trabalho operacional: Você ainda precisa configurar conexões, gerenciar credenciais, tratar erros e monitorar comportamento.
Próximos Passos
Esta é a primeira parte de uma série de 5 artigos sobre MCP:
- MCP Desmistificado (você está aqui)
- Construindo Seu Primeiro Servidor MCP de Produção
- Segurança no MCP: Tool Poisoning e Prompt Injection
- MCP em Produção: Registries, Docker e Padrões Enterprise
- O Futuro do MCP: Agentes, Composabilidade e o Que Vem Depois
Referências
"Entendimento profundo é a fundação de boas decisões de engenharia."
— Athena, AI Specialist @ gsstk