Model Context Protocol (MCP)

O que é?
O MCP padroniza o jeito de conectar uma IA (como o Claude ou o ChatGPT) a fontes de dados, ferramentas e fluxos externos.
Tecnicamente, é uma camada de comunicação que fornece à LLM contexto e ferramentas sem o cliente precisar construir a infraestrutura de integração do zero.
Para quem desenvolve, reduz o tempo e a complexidade de integração
Para a aplicação de IA, dá acesso a um ecossistema pronto de dados e ferramentas
Para o usuário final, resulta em assistentes mais capazes, que acessam seus dados e agem em seu nome.

MCP Client: Sua LLM que fornece o meio de comunicação entre o seu servidor e o servidor MCP.
MCP Server: Recebe a requisição, consulta suas ferramentas, recursos e prompts disponíveis e retorna um resultado.
Como funciona a conexão?
Uma vez conectados, o cliente e o servidor trocam tipos de mensagens especificadas no MCP. Os principais são:

ListToolsRequest/ListToolsResult: O cliente pergunta ao servidor “quais ferramentas vocês fornecem?” e recebe uma lista das ferramentas disponíveis.
CallToolRequest/CallToolResult: O cliente solicita ao servidor que execute uma ferramenta específica com argumentos fornecidos e, em seguida, recebe os resultados.
O diagrama abaixo mostra, na prática, um exemplo de como funciona a comunicação quando o cliente faz um prompt perguntando “Quais repositórios eu tenho?”

Funcionalidades do Servidor (Server Features)
Um MCP tem dois lados que trocam funcionalidades: o servidor e o cliente. O servidor expõe três coisas para o cliente usar — Resources, Prompts e Tools. Começando por elas:
Resources
Os recursos nos servidores MCP permitem expor dados aos clientes, de forma semelhante aos manipuladores de requisições GET em um servidor HTTP típico. Eles são perfeitos para cenários em que você precisa buscar informações em vez de executar ações.
Os recursos seguem um padrão de solicitação-resposta. Quando seu cliente precisa de dados, ele envia uma solicitação ReadResourceRequest com um URI para identificar qual recurso deseja. O servidor MCP processa essa solicitação e retorna os dados em um objeto ReadResourceResult.

Recursos Diretos: Recursos diretos possuem URIs estáticas que nunca mudam. São perfeitos para operações que não precisam de parâmetros.
Recursos com modelos: Os recursos com modelos incluem parâmetros em seus URIs. O SDK do Python analisa automaticamente esses parâmetros e os passa como argumentos nomeados para sua função.
Prompts
Os prompts nos servidores MCP permitem que você defina instruções pré-construídas e de alta qualidade que os clientes podem usar em vez de escrever seus próprios prompts do zero. Pense neles como modelos cuidadosamente elaborados que oferecem resultados melhores do que aqueles que os usuários poderiam criar por conta própria.
O fluxo de trabalho é o seguinte:
O usuário digita
/para ver os comandos disponíveis.Eles selecionam a função e especificam se necessário.
Claude usa o seu prompt predefinido para ler e agir.
O resultado é geralmente melhor que um prompt simples.
Principais benefícios
Consistência - Os usuários obtêm resultados confiáveis sempre.
Especialização - Você pode codificar conhecimento de domínio em instruções.
Reutilização - Vários aplicativos cliente podem usar os mesmos prompts.
Manutenção - Atualize os prompts em um único local para melhorar o atendimento a todos os clientes.
Tools
O MCP permite que servidores exponham ferramentas que podem ser invocadas por modelos de linguagem. Essas ferramentas permitem que os modelos interajam com sistemas externos, como consultar bancos de dados, chamar APIs ou realizar cálculos. Cada ferramenta é identificada exclusivamente por um nome e inclui metadados que descrevem seu esquema.
As ferramentas do MCP são projetadas para serem controladas por modelo, o que significa que o modelo de linguagem pode descobrir e invocar ferramentas automaticamente com base em sua compreensão contextual e nas instruções do usuário.
Funcionalidades do Cliente (Client Features)
Agora o outro lado. O cliente também expõe funcionalidades que o servidor pode acionar — Roots, Sampling e Elicitation.
Roots
As raízes definem os limites de onde os servidores podem operar dentro do sistema de arquivos, permitindo que eles entendam a quais diretórios e arquivos têm acesso. Os servidores podem solicitar a lista de raízes de clientes compatíveis e receber notificações quando essa lista for alterada.
Sampling
O Sampling permite que o servidor peça ao cliente para rodar uma geração no modelo de IA, em vez de o servidor manter a própria conexão (e a própria conta) com um modelo. Na prática, o servidor diz: “cliente, você já tem acesso ao Claude ou ao GPT, roda esse raciocínio pra mim e me devolve o resultado”. Para um designer, isto é um ponto de tela: alguém precisa desenhar onde o usuário aprova, edita ou rejeita o que o servidor está pedindo para gerar.
Elicitation
A Elicitation é o servidor pedindo mais informação ao usuário no meio de uma tarefa — um dado que falta ou a confirmação de uma ação. Também é um ponto de design: é o modal de “tem certeza?” ou o formulário curto que aparece na hora. Uma regra do protocolo que vira decisão de design direta: a Elicitation nunca pede senha nem chave de API, e o cliente deixa o usuário revisar os dados antes de enviar.
Sampling e Elicitation são os pontos em que o humano fica no controle — o chamado human-in-the-loop. É por isso que, para quem desenha produto, essas funcionalidades do cliente são a parte mais relevante do MCP: cada uma delas é uma interface a ser projetada.
Como funciona a lógica do cliente MCP?
O cliente MCP consiste em dois componentes principais:
Cliente MCP - Uma classe personalizada que criamos para facilitar o uso da sessão.
Sessão do Cliente - A conexão propriamente dita com o servidor (parte do SDK Python do MCP)

A sessão do cliente exige um gerenciamento cuidadoso de recursos — precisamos limpar as conexões adequadamente quando terminarmos. É por isso que a encapsulamos em nossa própria classe, que lida com toda a limpeza automaticamente.
Como funciona a lógica do servidor MCP?
O SDK Python MCP simplifica a criação de servidores. Você pode inicializar um servidor com apenas uma linha:
from mcp.server.fastmcp import FastMCP mcp = FastMCP("DocumentMCP", log_level="ERROR")
Para armazenar documentos, a estrutura é simples também
docs = {"nome_documento.formato": "Descrição"}
Para criar ferramentas, utiliza-se de Constructors
@mcp.tool(name="read_doc_contents",description="Read the contents of a document and return it as a string.")
def read_document(doc_id: str = Field(description="Id of the document to read")):
if doc_id not in docs: raise ValueError(f"Doc with id {doc_id} not found")
return docs[doc_id]
Perguntas comuns
Quem desenvolve servidores MCP?
Qualquer um. Empresas expõem os próprios serviços como servidores MCP, e desenvolvedores independentes criam servidores para ferramentas e APIs específicas. Já existe um ecossistema crescente de servidores oficiais e da comunidade, então muitas vezes você conecta um servidor pronto em vez de construir o seu do zero.
Qual a diferença entre isso e chamar APIs diretamente?
Chamar uma API direto acopla sua aplicação a cada integração específica — cada serviço novo vira um trabalho de integração novo. O MCP padroniza essa interface: você integra uma vez e conecta em qualquer servidor compatível. Além disso, a comunicação é nos dois sentidos (o servidor pode acionar Sampling, Elicitation e Roots no cliente), o que uma chamada de API comum não faz.
MCP não é simplesmente a mesma coisa que usar uma ferramenta?
Não. “Tool” é só uma das funcionalidades que o servidor expõe, junto com Resources e Prompts. O MCP é o protocolo que padroniza como tudo isso é descrito, descoberto e invocado. O tool calling tradicional é específico de cada modelo e SDK; o MCP é independente de modelo e permite que as ferramentas sejam descobertas em tempo de execução.
Referências
https://anthropic.skilljar.com/introduction-to-model-context-protocol
