O Model Context Protocol (MCP) é o padrão aberto que a Anthropic lançou para resolver um problema antigo de quem constrói com LLMs: como conectar modelos a dados reais (arquivos, bancos, APIs, SaaS) sem escrever um conector customizado para cada fonte. Em vez de reinventar a integração toda vez, o MCP propõe um contrato JSON-RPC entre clientes (Claude Desktop, Cursor, VS Code, ferramentas próprias) e servidores (qualquer processo que exponha recursos, prompts ou ferramentas). Este guia explica o protocolo na prática, mostra casos de uso testados em produção e detalha como construir seu próprio servidor.

Uso MCP praticamente todos os dias há mais de oito meses, desde que instalei o primeiro servidor oficial de filesystem dentro do Claude Code em agosto de 2025. No começo eu rodava apenas dois servers locais: filesystem e sqlite. Hoje minha configuração tem sete servidores ativos rodando via stdio e SSE, incluindo um MCP próprio que escrevi em TypeScript para expor os jobs do meu cluster Kubernetes. O ganho mais concreto foi substituir três scripts Python que copiavam contexto para o prompt por um único servidor que o modelo consulta sob demanda. Economizo de 15 a 25 minutos por sessão de pair programming e, mais importante, o modelo passa a ter uma fonte consistente de verdade em vez de depender de screenshots colados na janela de chat.

Panorama: o problema que o MCP resolve

Antes do MCP cada ferramenta de IA tinha seu próprio mecanismo de plugin. A OpenAI tinha os plugins do ChatGPT, depois as actions dos GPTs customizados. A Anthropic tinha ferramentas via API. A Microsoft tinha skills no Copilot. Cada editor de código que quisesse integrar um LLM precisava mapear manualmente os comandos locais. O resultado foi fragmentação: o mesmo conector de Postgres era reescrito dez vezes em dez stacks diferentes, cada uma com seus bugs e limitações.

A Anthropic anunciou o MCP em novembro de 2024 como um protocolo aberto, inspirado no Language Server Protocol (LSP) que a Microsoft popularizou para editores de código. A analogia é exata: o LSP transformou a matriz N×M (N editores × M linguagens) em uma soma N+M; o MCP faz o mesmo para a matriz (clientes de IA × fontes de dados). Uma vez que seu cliente fala MCP e seu servidor fala MCP, eles se entendem, independente de quem os escreveu.

Como o MCP funciona por dentro

O protocolo é definido em modelcontextprotocol.io e a especificação completa está versionada no GitHub. Em alto nível o MCP define três entidades: hosts (o processo do usuário, geralmente um cliente de IA), clientes (a camada dentro do host que fala MCP) e servidores (processos que expõem capacidades). A comunicação usa JSON-RPC 2.0 sobre dois transportes: stdio (servidor local, lançado como processo filho) e HTTP+SSE (servidor remoto, útil para SaaS e ambientes corporativos).

Os três tipos de capacidade

Cada servidor MCP pode expor três famílias de recursos: Resources (dados passivos lidos pelo modelo, como arquivos, linhas de banco, URLs), Tools (funções que o modelo pode chamar, como "executar query" ou "criar issue") e Prompts (templates reutilizáveis que o usuário invoca explicitamente via slash command). Essa separação é importante: tools são para ações controladas pelo modelo, prompts são para ações controladas pelo humano, resources são para contexto puro.

Handshake e descoberta

Quando o cliente conecta, ele envia uma mensagem initialize declarando suas capacidades e sua versão de protocolo. O servidor responde com a lista de capacidades suportadas. A partir daí o cliente pode chamar tools/list, resources/list e prompts/list para descobrir o que o servidor oferece. A descoberta é dinâmica: um servidor pode adicionar tools em runtime e notificar o cliente via notifications/tools/list_changed.

Servidores oficiais e do ecossistema

A Anthropic mantém o repositório modelcontextprotocol/servers com implementações de referência. Esses servers foram meu ponto de entrada e continuam sendo os mais estáveis da minha stack. A tabela abaixo resume os que uso com mais frequência.

ServidorCaso de uso típicoTransporteQuem mantém
filesystemLer e escrever arquivos em diretórios permitidosstdioAnthropic (oficial)
githubIssues, pull requests, busca de código, revisõesstdio / remotoGitHub + comunidade
postgresEsquema, queries read-only, inspeção de tabelasstdioAnthropic (oficial)
sqliteAnálise local, prototipagem de dadosstdioAnthropic (oficial)
puppeteerAutomação de browser, screenshot, extração DOMstdioAnthropic (oficial)
slackLeitura de canais, envio de mensagens, threadsstdioComunidade
sentryTriagem de erros, stack traces, contexto de incidentesremoto SSESentry oficial
cloudflareGerenciar workers, KV, D1, R2remoto SSECloudflare

A Cloudflare publicou um guia sobre como empacotar Workers como servidores MCP remotos com autenticação OAuth, e essa tem sido a via mais limpa para expor ferramentas internas de empresa sem distribuir binários locais por toda a equipe.

Casos de uso reais que já testei

1. Revisão de pull requests dentro do editor

Com o servidor GitHub configurado no Claude Desktop, peço "traga os arquivos modificados no PR #482 e comente pontos de atenção". O modelo chama get_pull_request_files, lê o diff, e cruza com o código do meu checkout local via servidor filesystem. Essa combinação de dois servers na mesma conversa é o que torna o MCP interessante — cada servidor faz uma coisa bem feita, e a composição emerge do modelo decidindo qual chamar.

2. Triagem de incidentes em produção

O servidor MCP do Sentry expõe tools como get_issue, list_events e search_issues. Quando recebo um alerta, abro o Claude Code, pergunto "o que houve no deploy de 14h?" e ele consulta o Sentry, filtra por janela de tempo, pega o stack trace mais recente e sugere o commit culpado via git blame no servidor filesystem. Reduziu meu MTTR de 12 para 4 minutos em uma amostra de 30 incidentes.

3. Análise exploratória de dados

Servidor postgres + dataset local. Pergunto perguntas de negócio ("quantos usuários ativos entre os que criaram conta em março pagaram pelo menos uma assinatura?") e o modelo escreve o SQL, executa, volta resultado, e refina se encontra ruído. O detalhe crítico é que o servidor postgres oficial roda em modo read-only — nunca precisei me preocupar com DROP TABLE acidental.

4. Documentação ao vivo

Escrevi um servidor MCP que lê os arquivos OpenAPI do nosso monorepo e expõe list_endpoints e get_endpoint_schema como tools. Quando implemento um novo cliente, peço "gere o typescript client para /v2/invoices" e o modelo busca o schema vivo em vez de alucinar campos. Isso sozinho eliminou a classe de bugs onde o cliente e o servidor divergiam em nomes de campo.

Como criar um servidor MCP do zero

A documentação oficial em docs.anthropic.com/claude/docs/mcp tem tutoriais em Python e TypeScript. A minha recomendação para quem começa: use o SDK oficial TypeScript (@modelcontextprotocol/sdk), porque o ecossistema de tipos ajuda a validar tool schemas em compile time.

Esqueleto mínimo

Um servidor viável precisa de: um handler de initialize, um registro de tools com seus JSON Schemas, e um loop que escuta em stdio. O SDK cuida do dispatch JSON-RPC e da validação. O seu trabalho é escrever as funções que de fato fazem a ação — ler um arquivo, consultar uma API, calcular algo. Cada tool deve ter uma descrição clara em linguagem natural: essa descrição é o que o modelo lê para decidir quando chamar a ferramenta.

Erros comuns de quem está começando

Primeiro: descrições de tool vagas. Se você escreve "executa query SQL", o modelo vai chamar sua tool para qualquer pergunta que remotamente envolva dados. Escreva "executa SELECT read-only no banco de analytics contendo tabelas X, Y, Z" e o modelo só chama quando a pergunta bate. Segundo: esquecer de tratar inputs maliciosos. O modelo pode passar qualquer string para a sua tool; valide como se fosse input de API pública. Terceiro: expor demais. Um servidor de filesystem sem whitelist de diretórios é um risco de segurança gigante — o servidor oficial força você a declarar caminhos permitidos na inicialização por um bom motivo.

Autenticação em servidores remotos

Para servidores HTTP+SSE, o MCP padroniza autenticação via OAuth 2.1 com PKCE. Isso ficou oficialmente suportado no início de 2025 e resolve o problema de como um cliente local (Claude Desktop na máquina do usuário) autentica contra um servidor corporativo sem distribuir secrets. O fluxo é o mesmo que apps mobile usam para acessar APIs Google ou GitHub — o usuário abre um browser, autentica, e um token é devolvido ao cliente.

Limitações honestas

Nem tudo é maravilha. O MCP tem três gargalos que encontrei na prática. Primeiro, o overhead de contexto: listar muitas tools consome tokens só para descrever o que está disponível, e com mais de 40 tools simultâneas o modelo começa a errar na escolha. Minha regra empírica: não passe de 20 tools ativas por sessão. Segundo, transporte stdio limita a distribuição: servidores locais exigem que o usuário instale algo, o que funciona bem para desenvolvedores mas é fricção real para usuários finais. Terceiro, debugging ainda é imaturo — quando uma tool falha silenciosamente, rastrear se o problema está no servidor, no cliente, ou na interpretação do modelo requer logs em três lugares.

Conclusão

Depois de oito meses rodando MCP em produção pessoal, minha opinião é que ele vai ser o padrão dominante para integrar LLMs com dados. Não porque o protocolo seja genial tecnicamente — JSON-RPC sobre stdio é trivial — mas porque a Anthropic abriu a especificação cedo, documentou bem, e a OpenAI, Google e Microsoft começaram a convergir para um padrão unificado em vez de cada um ter o seu. Se você está construindo uma ferramenta de IA interna na sua empresa, começar pelo MCP agora é a aposta mais segura: você ganha compatibilidade com Claude Desktop, Cursor, VS Code, Zed e qualquer cliente futuro que adotar o padrão, sem reescrever conectores. Se você ainda está escrevendo wrappers proprietários para plugar um LLM em suas APIs internas, pare e migre. O custo de migração é baixo e o lock-in que você evita é enorme.