Códigos sin Siesta · 2026

Tu nueva
herramienta
MCP Servers

Conecta tu IA con el mundo exterior.
Construye herramientas reales en minutos.

Model Context Protocol TypeScript Python FastMCP
Alejandro de la Fuente

Alejandro de la Fuente

Technical Leader · NTT Data · GDNE

El Problema

N×M: La Pesadilla
de las Integraciones

Sin MCP

Claude
Cursor
VS Code
GitHub
Slack
DB
Files

Cada app necesita integraciones separadas para cada herramienta. N × M conexiones.

Con MCP

Claude
Cursor
VS Code
MCP
GitHub
Slack
DB
Files

Un protocolo estándar. Escribe el servidor una vez, úsalo en cualquier cliente. N + M conexiones.

Model Context Protocol

¿Qué es MCP?

El Protocolo

💻
Host App Claude, Cursor, VS Code...
🔌
MCP Client Integrado en la app
JSON-RPC 2.0 (stdio / HTTP)
⚙️
MCP Server Tu código (TypeScript/Python)
🗄️
Local Resources Archivos, APIs, Bases de datos
📖

Protocolo abierto

Creado por Anthropic en 2024. Hoy lo usan Claude, Cursor, Windsurf, VS Code y más.

JSON-RPC 2.0

Transporte estándar. stdio para local, HTTP/SSE para remoto. Ligero y universal.

🔄

Client ↔ Server

El server expone capabilities. El client las descubre y usa. Bidireccional.

Las Tres Primitivas

Tools, Resources y Prompts

El LLM controla Tools · El usuario controla Resources y Prompts

🔧

Tools

Funciones que el LLM puede llamar activamente

agregar_marcador(url, titulo, categoria)
📄

Resources

Datos que el server expone (read-only, pull)

marcadores://todos
💬

Prompts

Templates reutilizables de conversación

organizar_marcadores(criterio)

En el taller construiremos las tres

Manos al Código

Anatomía de un MCP Server

import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { ListToolsRequestSchema, CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";

const server = new Server(
  { name: "MiServidor", version: "1.0.0" },
  { capabilities: { tools: {} } }
);

server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [{ name: "mi_tool", description: "...", inputSchema: { ... } }]
}));

server.setRequestHandler(CallToolRequestSchema, async (req) => {
  return { content: [{ type: "text", text: "resultado" }] };
});

const transport = new StdioServerTransport();
await server.connect(transport);
📦 Imports
🔧 Crear servidor
📋 Registrar tools
🚀 Conectar
¿Y si fuera más fácil?

FastMCP: De ~100 Líneas a 6

6× menos código

SDK Oficial (TypeScript)

// ~14 líneas de boilerplate...
import { Server } from "@modelcontextprotocol/sdk/...";
import { StdioServerTransport } from "...";
import { ListToolsRequestSchema, CallToolRequestSchema } from "...";

const server = new Server({ name: "math" }, { capabilities: { tools: {} } });

server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [{ name: "sumar", description: "Suma dos números",
    inputSchema: { type: "object", properties: { a: { type: "number" }, b: { type: "number" } }, required: ["a","b"] }
  }]
}));

server.setRequestHandler(CallToolRequestSchema, async (req) => {
  const { a, b } = req.params.arguments as { a: number; b: number };
  return { content: [{ type: "text", text: String(a + b) }] };
});
const transport = new StdioServerTransport();
await server.connect(transport);

FastMCP (Python)

from fastmcp import FastMCP

mcp = FastMCP("math")

@mcp.tool
def sumar(a: int, b: int) -> int:
    """Suma dos números"""
    return a + b

if __name__ == "__main__":
    mcp.run()
list_tools handler manual Auto-generated
JSON Schema manual Type hints automáticos
call_tool dispatcher Eliminado
TextContent wrapping Return Python puro
El Ecosistema

Miles de MCP Servers,
Un Protocolo

No reinventes la rueda — busca primero

🗃️

Bases de datos

PostgreSQL · SQLite · MongoDB · Redis

🌐

APIs

GitHub · Slack · Jira · Notion

📁

Filesystem

Local files · Google Drive · S3

🔍

Búsqueda

Brave · Google · Exa · Perplexity

🛠️

DevTools

Docker · Kubernetes · Terraform · Git

🧠

AI/ML

Hugging Face · Replicate · Stability AI

En la Práctica

¿Dónde Brillan los MCPs?

🔧

Dev Tooling

Conecta tu IDE con bases de datos, APIs internas y servicios en la nube. Sin salir de tu flujo de trabajo.

claude_desktop_config.json
"mcpServers": {
  "postgres": {
    "command": "npx",
    "args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://..."]
  }
}
📊

Data & Analytics

Consulta dashboards, genera informes, accede a métricas en tiempo real desde la conversación.

claude_desktop_config.json
"mcpServers": {
  "metabase": {
    "command": "python",
    "args": ["-m", "mcp_metabase", "--url", "https://..."]
  }
}
🤖

Agent Augmentation

Da acceso a herramientas externas a tus agentes. El MCP es el puente entre el LLM y el mundo real.

claude_desktop_config.json
"mcpServers": {
  "github": {
    "command": "npx",
    "args": ["-y", "@modelcontextprotocol/server-github"]
  }
}
🏢

Enterprise Integration

Conecta sistemas legacy sin reescribir código. El MCP adapta la interfaz, tú mantienes el backend.

claude_desktop_config.json
"mcpServers": {
  "legacy-erp": {
    "command": "java",
    "args": ["-jar", "erp-mcp-adapter.jar"]
  }
}
Lo que He Aprendido

Buenas Prácticas para MCP Servers

DO

  • Usa console.error() para logs — stdout es JSON-RPC
  • Tools atómicas — una acción por tool, bien nombrada
  • Valida inputs — usa Zod (TS) o type hints (Python)
  • Documenta con docstrings — el LLM las lee como contexto
  • In-memory primero — persiste solo si el caso lo requiere

DON'T

  • console.log() en producción — rompe el protocolo JSON-RPC
  • Tools con 10+ parámetros — divide en tools más pequeñas
  • Secrets en el código — usa variables de entorno
  • Ignorar errores — devuelve mensajes claros al LLM
  • Un tool para todo — la granularidad ayuda al LLM a decidir
⚠️
CRÍTICO:
console.log() escribe en stdout
JSON-RPC también usa stdout
→ Usa siempre console.error()
¡Vamos al Taller!

Construyamos
un MCP Server

✓ Qué es MCP✓ Cómo funciona✓ FastMCP vs SDK
🏗️

Hora del Taller

Bookmark Manager MCP

1 Ejercicio 1: TypeScript + SDK Oficial (~25 min)
2 Ejercicio 2: Python + FastMCP (~20 min)
github.com/codigosinsiesta/taller-ia-agentes-mcp
@codigosinsiesta
1 / 10
Navegación