Aula 06 - Implementação de um Servidor MCP (Backend) ⚙️
Objetivo
Objetivo: Aprender a estruturar um projeto de servidor MCP do zero, utilizando SDKs oficiais (Node.js ou Python) e registrando funcionalidades reais.
1. Escolhendo sua Stack 🛠️
O MCP possui SDKs robustos para as duas linguagens mais populares em IA:
- Node.js / TypeScript: Ideal para alta performance e ecossistema web.
- Python: Perfeito para ciência de dados, machine learning e automação de scripts.
2. Estrutura de Projeto (Node.js) 📂
Um servidor MCP bem organizado segue este padrão:
$ npm init -y
$ npm install @modelcontextprotocol/sdk
$ ls
├── src/
│ ├── index.ts # Ponto de entrada
│ ├── tools.ts # Definição de ferramentas
│ └── resources.ts # Definição de recursos
├── package.json
└── tsconfig.json
3. Registrando uma Ferramenta (Tool) 🛠️
No código, definimos o esquema da ferramenta e a lógica de execução.
// Exemplo em TypeScript
server.tool(
"calculate_area",
"Calcula a área de um retângulo",
{
width: z.number().describe("Largura do retângulo"),
height: z.number().describe("Altura do retângulo"),
},
async ({ width, height }) => {
return {
content: [{ type: "text", text: `A área é ${width * height}` }],
};
}
);
4. O Servidor em Ação (Python) 🐍
Python utiliza decoradores para simplificar o registro:
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("MeuServidor")
@mcp.tool()
def somar_numeros(a: int, b: int) -> int:
"""Soma dois números inteiros."""
return a + b
5. Testes Locais e Depuração 🧪
Antes de conectar ao Claude ou outra IDE, testamos via terminal usando o mcp-inspector.
$ npx @modelcontextprotocol/inspector node build/index.js
[INFO] Inspetor iniciado na porta 3000
[SUCCESS] Servidor conectado!
[ACTION] Tente chamar 'somar_numeros' com argumentos {a: 5, b: 10}
6. Mini-Projeto: Ola Mundo MCP 🚀
- Crie uma pasta para seu projeto.
- Configure o SDK (Node ou Python).
- Implemente uma Tool chamada
get_current_timeque retorna a hora atual do sistema. - Valide o funcionamento no Inspetor.
7. Exercícios de Fixação 📝
- Para que serve o objeto
z(Zod) no exemplo de TypeScript? - Qual a vantagem de usar o
FastMCPem Python para prototipagem rápida? - O que acontece se o seu servidor não exportar nenhuma Tool ou Resource?
Aviso
Lembre-se: em Stdio, o seu servidor escreve logs em stderr. Nunca use console.log para mensagens de debug, pois isso quebrará o protocolo JSON-RPC que usa o stdout.
Próxima Aula: Integração do MCP com Banco de Dados 💾