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 |