Model Context Protocol
MCP = Protocolo estándar para conectar LLMs con herramientas y datos externos.
¿Por qué MCP?
| Sin MCP | Con MCP |
|---|---|
| Cada app su integración | Protocolo unificado |
| APIs custom por modelo | Funciona con cualquier LLM |
| Difícil mantener | Servidores reutilizables |
Arquitectura MCP
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ Cliente │ ←→ │ Servidor │ ←→ │ Recurso │
│ (Claude) │ │ MCP │ │ (DB, API) │
└──────────────┘ └──────────────┘ └──────────────┘
↑
stdio / SSE
Conceptos clave
| Concepto | Descripción |
|---|---|
| Tools | Funciones que el LLM puede llamar |
| Resources | Datos que el LLM puede leer |
| Prompts | Templates predefinidos |
| Sampling | LLM genera contenido |
Servidor MCP básico
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new Server({
name: "mi-servidor",
version: "1.0.0"
});
// Definir herramienta
server.setRequestHandler("tools/list", async () => ({
tools: [{
name: "saludar",
description: "Saluda a una persona",
inputSchema: {
type: "object",
properties: {
nombre: { type: "string" }
}
}
}]
}));
// Implementar herramienta
server.setRequestHandler("tools/call", async (request) => {
if (request.params.name === "saludar") {
return { content: [{ type: "text", text: `¡Hola ${request.params.arguments.nombre}!` }] };
}
});
// Iniciar
const transport = new StdioServerTransport();
await server.connect(transport);
Configurar en Claude Desktop
{
"mcpServers": {
"mi-servidor": {
"command": "node",
"args": ["./build/index.js"]
}
}
}
Servidores MCP populares
| Servidor | Función |
|---|---|
| filesystem | Leer/escribir archivos |
| github | Repos, PRs, issues |
| postgres | Consultas SQL |
| brave-search | Búsqueda web |