Custom MCP Server
Um servidor MCP versátil construído com Next.js, oferecendo uma variedade de ferramentas e utilitários com gerenciamento de estado Redis.
Documentação
Custom MCP Server 🤖
Um servidor Model Context Protocol (MCP) construído com Next.js, fornecendo ferramentas e utilitários úteis através de transportes HTTP e Server-Sent Events (SSE).
🚀 Recursos
🔧 Ferramentas Disponíveis
- echo - Ecoa qualquer mensagem de volta (perfeito para testes)
- get-current-time - Obtém o timestamp atual e a data ISO
- calculate - Realiza cálculos matemáticos básicos com segurança
🌐 Métodos de Transporte
- Transporte HTTP (
/mcp) - Requisições HTTP sem estado (funciona sem Redis) - Transporte SSE (
/sse) - Server-Sent Events com Redis para gerenciamento de estado
🔒 Recursos de Segurança
- Limitação de taxa (100 requisições por minuto)
- Avaliação segura de expressões matemáticas
- Sanitização e validação de entrada
🏃♂️ Início Rápido
Pré-requisitos
- Node.js 18+
- npm ou yarn
- Docker (opcional, para Redis local)
Configuração
-
Clone e instale as dependências:
npm install -
Execute a configuração automatizada:
npm run setupIsso irá:
- Criar a configuração de ambiente
- Configurar o Redis (Docker) se disponível
- Iniciar o servidor de desenvolvimento automaticamente
-
Início manual (alternativa):
npm run dev
O servidor estará disponível em http://localhost:3000
🧪 Testes
Testes Rápidos
# Test HTTP transport
npm run test:http
# Test SSE transport (requires Redis)
npm run test:sse
# Test with Claude Desktop protocol
npm run test:stdio
# Comprehensive tool testing
npm run test:tools
Testes Manuais
Você pode testar o servidor MCP manualmente usando curl:
# List available tools
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}'
# Call the echo tool
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "echo",
"arguments": {
"message": "Hello World!"
}
}
}'
# Calculate an expression
curl -X POST http://localhost:3000/mcp \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 3,
"method": "tools/call",
"params": {
"name": "calculate",
"arguments": {
"expression": "15 * 4 + 10"
}
}
}'
🔧 Configuração
Variáveis de Ambiente
Crie um arquivo .env.local:
# Local Redis (Docker)
REDIS_URL=redis://localhost:6379
# Upstash Redis (Production)
UPSTASH_REDIS_REST_URL=your-upstash-url
UPSTASH_REDIS_REST_TOKEN=your-upstash-token
Configuração do Redis
O servidor detecta e usa automaticamente o Redis nesta ordem de prioridade:
- Upstash Redis (se
UPSTASH_REDIS_REST_URLeUPSTASH_REDIS_REST_TOKENestiverem definidos) - Redis Local (se
REDIS_URLestiver definido) - Sem Redis (apenas transporte HTTP)
Redis Local com Docker
# The setup script handles this automatically, but you can also run manually:
docker run -d --name redis-mcp -p 6379:6379 redis:alpine
Upstash Redis (Recomendado para Produção)
- Crie um banco de dados Upstash Redis em upstash.com
- Adicione os detalhes de conexão ao seu
.env.local - O servidor detectará e usará automaticamente
🖥️ Integração com Ferramentas de IA
Claude Desktop
Adicione à configuração do Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"custom-mcp": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:3000/mcp"
]
}
}
}
Locais dos arquivos de configuração:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
IDE Cursor
Para Cursor 0.48.0 ou posterior (suporte direto a SSE):
{
"mcpServers": {
"custom-mcp": {
"url": "http://localhost:3000/sse"
}
}
}
Para versões anteriores do Cursor:
{
"mcpServers": {
"custom-mcp": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"http://localhost:3000/mcp"
]
}
}
}
🛠️ Desenvolvimento
Estrutura do Projeto
custom-mcp-server/
├── app/
│ ├── [transport]/
│ │ └── route.ts # Main MCP server logic
│ ├── layout.tsx # Root layout
│ └── page.tsx # Home page
├── lib/
│ └── redis.ts # Redis utilities
├── scripts/
│ ├── setup.mjs # Automated setup
│ ├── test-http-client.mjs # HTTP transport tests
│ ├── test-sse-client.mjs # SSE transport tests
│ └── test-tools.mjs # Comprehensive tool tests
├── package.json
├── next.config.ts
└── README.md
Adicionando Novas Ferramentas
- Defina a ferramenta em
app/[transport]/route.ts:
const tools = {
// ... existing tools
myNewTool: {
name: "my-new-tool",
description: "Description of what your tool does",
inputSchema: {
type: "object",
properties: {
param1: {
type: "string",
description: "Description of parameter"
}
},
required: ["param1"]
}
}
};
- Adicione o manipulador:
const toolHandlers = {
// ... existing handlers
"my-new-tool": async ({ param1 }: { param1: string }) => {
// Your tool logic here
return {
content: [
{
type: "text",
text: `Result: ${param1}`
}
]
};
}
};
Testando Suas Alterações
# Run all tests
npm run test:tools
# Test specific functionality
npm run test:http
npm run test:sse
📝 Referência da API
Tools/List
Obtenha todas as ferramentas disponíveis:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list"
}
Tools/Call
Chame uma ferramenta específica:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "tool-name",
"arguments": {
"param": "value"
}
}
}
🚀 Implantação
Vercel (Recomendado)
-
Implante na Vercel:
vercel -
Adicione variáveis de ambiente no painel da Vercel:
UPSTASH_REDIS_REST_URLUPSTASH_REDIS_REST_TOKEN
-
Atualize as configurações das suas ferramentas de IA para usar a URL implantada:
https://your-app.vercel.app/mcp https://your-app.vercel.app/sse
Outras Plataformas
O servidor é uma aplicação Next.js padrão e pode ser implantado em qualquer plataforma que suporte Node.js:
- Netlify
- Railway
- Render
- DigitalOcean App Platform
🤝 Contribuindo
- Faça um fork do repositório
- Crie um branch de recurso:
git checkout -b feature/my-new-feature - Faça suas alterações e adicione testes
- Execute a suíte de testes:
npm run test:tools - Faça commit das suas alterações:
git commit -am 'Add some feature' - Envie para o branch:
git push origin feature/my-new-feature - Envie um pull request
📄 Licença
Licença MIT - consulte o arquivo LICENSE para detalhes.
🆘 Solução de Problemas
Problemas Comuns
Servidor não iniciando:
- Verifique se a porta 3000 está disponível
- Garanta que todas as dependências estejam instaladas:
npm install
Problemas de conexão com Redis:
- Verifique se o Docker está em execução:
docker ps - Verifique o status do contêiner Redis:
docker ps -a | grep redis-mcp - Reinicie o Redis:
docker restart redis-mcp
Ferramenta de IA não detectando o servidor:
- Garanta que o servidor esteja em execução e acessível
- Verifique a sintaxe do arquivo de configuração (JSON válido)
- Reinicie sua ferramenta de IA após alterações na configuração
- Verifique se a URL do servidor está correta
Chamadas de ferramentas falhando:
- Verifique os logs do servidor para mensagens de erro
- Teste as ferramentas manualmente com
npm run test:tools - Verifique se os parâmetros da ferramenta correspondem ao esquema esperado
Modo de Depuração
Ative o registro de depuração definindo a variável de ambiente:
DEBUG=1 npm run dev
📞 Suporte
- Crie um issue no GitHub para relatar bugs
- Verifique os issues existentes para problemas comuns
- Revise os scripts de teste para exemplos de uso