MÓDULO 2.6

🔌 MCP na Prática

Model Context Protocol: o padrão USB dos agentes. Arquitetura servidor/cliente, conectando Postgres, APIs externas e criando seu primeiro servidor MCP em Python.

6
Tópicos
35
Minutos
Intermediário
Nível
Prática
Tipo
1

🔌 O que é MCP

Model Context Protocol (MCP) é o padrão aberto da Anthropic para conectar agentes a ferramentas externas de forma padronizada e plug-and-play. Assim como USB eliminou o caos de conectores proprietários, MCP padroniza como agentes se conectam a qualquer ferramenta.

🔌 A analogia USB é precisa

Antes do MCP (sem padrão)

  • Cada agente implementa integração customizada para cada ferramenta
  • Tool de Slack para Claude ≠ Tool de Slack para GPT-4
  • Reescrever integrações quando troca de LLM

Com MCP

  • Servidor MCP de Slack funciona com qualquer cliente MCP
  • Troca de LLM sem reescrever as integrações
  • Ecossistema de servidores MCP prontos para usar

📊 Adoção em 2026

  • Claude Code, Claude Desktop e Claude API suportam MCP nativamente
  • Cursor, Windsurf e outros IDEs AI-first adotaram o protocolo
  • Repositório oficial MCP-servers tem 100+ servidores prontos (GitHub, Postgres, Slack, Jira...)
  • OpenAI anunciou suporte ao protocolo — se tornando padrão de indústria
2

🏗️ Arquitetura servidor/cliente

A arquitetura MCP tem dois papéis: o Servidor MCP expõe tools (funcionalidades) via protocolo padronizado, e o Cliente MCP (seu agente) descobre e chama essas tools. A comunicação pode ser local (stdio) ou remota (HTTP).

Arquitetura completa

Cliente MCP

Seu agente (Claude, LangChain, qualquer framework)

Descobre tools automaticamente na inicialização

JSON-RPC 2.0

stdio ou HTTP+SSE

Servidor MCP

Expõe tools, resources e prompts via protocolo

Pode ser Postgres, Slack, GitHub, sua API...

Transport: stdio

O servidor roda como processo filho do cliente. Comunicação via stdin/stdout. Ideal para servidores locais (mesmo computador).

# config no cliente

{"command": "python", "args": ["meu_server.py"]}

Transport: HTTP + SSE

O servidor roda como serviço web independente. Client conecta via HTTP. Ideal para produção, múltiplos clientes simultâneos.

# config no cliente

{"url": "https://meu-server.com/mcp"}

3

🗃️ Conectando banco de dados via MCP

Usando o servidor MCP oficial de Postgres, você conecta qualquer agente ao seu banco de dados em minutos. O agente passa a poder executar queries, listar tabelas e analisar dados em linguagem natural — sem nenhum código extra no agente.

Configuração em 3 passos

1

Instale o servidor MCP de Postgres

npm install -g @modelcontextprotocol/server-postgres

2

Configure no arquivo de settings do cliente

{"mcpServers": {"postgres": {

"command": "mcp-server-postgres",

"args": ["postgresql://user:pass@localhost/mydb"]

}}}

3

Pronto — o agente agora pode interagir com o banco

Usuário: "Quais são os 10 clientes com maior valor em aberto?" → Agente chama query_postgres automaticamente.

⚠️ Segurança obrigatória no MCP de banco

  • Use usuário de banco com permissão apenas READ-ONLY (SELECT)
  • Nunca exponha connection string com usuário admin
  • Limite as tabelas visíveis via schema restrito
  • Logue todas as queries executadas pelo agente
4

🌐 Conectando APIs externas

Qualquer API REST pode ser encapsulada como servidor MCP. Você define as tools (endpoints) com seus schemas e o agente passa a chamar a API naturalmente, como se fosse uma função interna — sem código de integração no agente.

Exemplo: wrapper de API REST como MCP server

from mcp.server import Server

from mcp.server.models import InitializationOptions

import httpx

server = Server("minha-api-crm")

@server.tool()

async def buscar_cliente(cliente_id: str) -> str:

"""Busca dados completos de um cliente pelo ID no CRM."""

async with httpx.AsyncClient() as client:

response = await client.get(

f"https://api.meucrm.com/customers/{cliente_id}",

headers={"Authorization": f"Bearer {API_KEY}"}

)

return response.json()

# O schema é gerado automaticamente dos type hints e docstring!

Casos de uso populares

  • • CRM (Salesforce, HubSpot)
  • • Ticket system (Jira, Linear)
  • • Email (Gmail API)
  • • Calendário (Google Calendar)

Benefícios do approach MCP

  • • Escrito uma vez, usado por múltiplos agentes
  • • Auth centralizado no servidor MCP
  • • Versionado independente do agente
  • • Testável sem o agente

OpenAPI → MCP

  • • Ferramentas que convertem OpenAPI spec para servidor MCP automaticamente
  • • Reduz implementação manual para APIs com swagger
5

🤖 MCP no Claude Code

Claude Code usa MCP nativamente. Ao adicionar um servidor MCP à configuração, o Claude Code descobre automaticamente as tools disponíveis e passa a usá-las em suas respostas — sem nenhuma modificação no código do agente.

Configuração no claude_desktop_config.json

// ~/.config/claude/claude_desktop_config.json

{

"mcpServers": {

"postgres": {

"command": "mcp-server-postgres",

"args": ["postgresql://readonly:senha@localhost/prod"]

},

"github": {

"command": "mcp-server-github",

"env": {"GITHUB_TOKEN": "ghp_..."}

},

"meu-crm": {

"command": "python",

"args": ["caminho/para/meu_crm_server.py"]

}

}

}

💡 Como o Claude Code usa as tools MCP

Após adicionar os servidores, reinicie o Claude Code. Ele automaticamente lista as tools disponíveis e as usa quando relevante. Exemplo: com o servidor GitHub configurado, você pode pedir "Abra um PR com estas mudanças" e o Claude Code vai criar o PR diretamente via MCP — sem você copiar e colar código.

6

🏗️ Criando seu primeiro servidor MCP

Com o SDK oficial do MCP em Python, você cria um servidor funcional em menos de 30 linhas. Define ferramentas com decorator, implementa a lógica e registra no cliente. Simples como criar uma função Python.

Servidor MCP mínimo completo

#!/usr/bin/env python3

"""pip install mcp"""

import asyncio

from mcp.server import Server

from mcp.server.stdio import stdio_server

server = Server("meu-primeiro-servidor")

@server.tool()

async def saudacao(nome: str) -> str:

"""Gera uma saudação personalizada para o nome fornecido.

Use quando precisar cumprimentar alguém formalmente."""

return f"Olá, {nome}! Bem-vindo ao sistema de agentes."

@server.tool()

async def calcular_desconto(preco: float, desconto_percent: float) -> str:

"""Calcula o preço final após aplicar desconto percentual."""

preco_final = preco * (1 - desconto_percent / 100)

return f"Preço com {desconto_percent}% de desconto: R$ {preco_final:.2f}"

if __name__ == "__main__":

asyncio.run(stdio_server(server))

# Execute: python meu_server.py

# Teste: npx @modelcontextprotocol/inspector python meu_server.py

O que o SDK gera automaticamente

  • JSON Schema da tool a partir dos type hints Python
  • Description da tool a partir da docstring
  • Tool discovery endpoint para o cliente
  • Serialização/deserialização de parâmetros

Testando com MCP Inspector

O MCP Inspector é uma UI para testar seus servidores MCP sem precisar de um agente:

npx @modelcontextprotocol/inspector

python meu_server.py

Abre UI web para chamar tools manualmente e ver resultados

Resumo do Módulo 2.6

O que é MCP — protocolo aberto para conectar agentes a ferramentas de forma padronizada e reutilizável
Arquitetura — servidor expõe tools, cliente as descobre; transport stdio (local) ou HTTP (produção)
Postgres via MCP — 3 linhas de config e o agente pode fazer queries em linguagem natural
APIs externas — qualquer REST API vira servidor MCP; escrito uma vez, usado por todos os agentes
Claude Code + MCP — adicione ao config, reinicie, e o Claude Code usa as tools automaticamente
Criando servidor — 30 linhas com SDK oficial; schema gerado automaticamente dos type hints

Próximo Módulo:

2.7 — Primeiro Agente Real com LangChain: AgentExecutor vs. LCEL, memória, tools e projeto completo de assistente de email com código funcional.