Creando Servidores MCP Personalizado
Aprende cómo crear servidores MCP personalizados para extender TeamDay con tus propias herramientas.
Estructura Básica
Un servidor MCP es una aplicación que implementa el protocolo MCP:
// my-mcp-server.js
const mcp = require('@anthropic-ai/mcp-sdk');
const server = new mcp.MCPServer({
name: 'my-custom-server',
version: '1.0.0'
});
// Registra herramientas
server.setRequestHandler(mcp.Tool, async (request) => {
if (request.name === 'my-tool') {
return {
content: [{
type: 'text',
text: 'Resultado de la herramienta'
}]
};
}
});
// Inicia el servidor
server.start();
Crear una Herramienta Personalizada
Ejemplo: Herramienta que suma dos números
server.setRequestHandler(mcp.Tool, async (request) => {
if (request.name === 'add') {
const { a, b } = request.arguments;
return {
content: [{
type: 'text',
text: `${a} + ${b} = ${a + b}`
}]
};
}
});
Herramientas con Estado
Mantén estado entre llamadas:
const database = new Map();
server.setRequestHandler(mcp.Tool, async (request) => {
if (request.name === 'store-data') {
const { key, value } = request.arguments;
database.set(key, value);
return { content: [{ type: 'text', text: 'Data stored' }] };
}
if (request.name === 'retrieve-data') {
const { key } = request.arguments;
const value = database.get(key);
return { content: [{ type: 'text', text: value }] };
}
});
Integrar con API Externa
Ejemplo: Integración con OpenWeather API
const axios = require('axios');
server.setRequestHandler(mcp.Tool, async (request) => {
if (request.name === 'get-weather') {
const { city } = request.arguments;
const response = await axios.get(
`https://api.openweathermap.org/data/2.5/weather`,
{ params: { q: city, appid: process.env.WEATHER_API_KEY } }
);
return {
content: [{
type: 'text',
text: JSON.stringify(response.data)
}]
};
}
});
Manejo de Errores
server.setRequestHandler(mcp.Tool, async (request) => {
try {
// Tu lógica
return { content: [{ type: 'text', text: 'Éxito' }] };
} catch (error) {
return {
error: {
code: 'INTERNAL_ERROR',
message: error.message
}
};
}
});
Deploying Your Server
Localmente
node my-mcp-server.js
Docker
FROM node:18
WORKDIR /app
COPY . .
RUN npm install
CMD ["node", "my-mcp-server.js"]
docker build -t my-mcp-server .
docker run -p 3000:3000 my-mcp-server
En TeamDay
- Compila tu servidor
- Hostealo en un servidor accesible
- Ve a Configuración del Espacio → Servidores MCP
- Haz clic en “Añadir Personalizado”
- Ingresa URL de tu servidor
Documentación para Agentes
Proporciona esquema JSON para describir herramientas:
{
"tools": [
{
"name": "add",
"description": "Suma dos números",
"inputSchema": {
"type": "object",
"properties": {
"a": { "type": "number", "description": "Primer número" },
"b": { "type": "number", "description": "Segundo número" }
},
"required": ["a", "b"]
}
}
]
}
Pruebas
// test-server.js
const assert = require('assert');
async function testAdd() {
const result = await server.handle({
name: 'add',
arguments: { a: 2, b: 3 }
});
assert(result.content[0].text.includes('5'));
console.log('✓ Test passed');
}
testAdd();
Mejores Prácticas
-
Valida Entrada
- Verifica tipos de parámetros
- Maneja valores faltantes
- Sanea entrada de usuario
-
Manejo de Errores
- Proporciona mensajes claros
- Registra errores
- No expongas detalles internos
-
Rendimiento
- Cache resultados si es posible
- Timeout para operaciones largas
- Límita tamaño de respuesta
-
Seguridad
- Valida tokens
- Usa HTTPS
- No expongas credenciales
Próximos Pasos
- Lee Instalando Servidores MCP
- Explora Ejemplos de MCP
- Únete a la Comunidad MCP