🔧

Servidor MCP Custom

👨‍🍳👑 Master Chef⏱️ 50 minutos

📋 Prerequisitos sugeridos

  • TypeScript
  • Node.js

Lo que vas a construir

Tu propio servidor MCP (Model Context Protocol) que le da herramientas personalizadas a Claude Desktop.

Imagina que Claude pueda consultar el clima, guardar notas, o acceder a tu base de datos. MCP es el estandar para extender las capacidades de Claude. Tu servidor expone "herramientas" que Claude puede llamar durante una conversacion.

Al terminar tendras un servidor MCP en TypeScript que funciona con Claude Desktop. Podras agregar cualquier herramienta: APIs externas, bases de datos, sistema de archivos, lo que necesites.


El prompt para empezar

Crea un servidor MCP en TypeScript que:

  1. Tenga una herramienta "clima" que reciba ciudad
  2. Tenga una herramienta "notas" para guardar/leer notas
  3. Use el SDK oficial de MCP
  4. Funcione con Claude Desktop

Lo que la IA creará

// src/index.ts
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: "mi-servidor-mcp", version: "1.0.0" },
  { capabilities: { tools: {} } }
);

// Base de datos simple para notas
const notas: Record<string, string> = {};

// Definir herramientas disponibles
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [
    {
      name: "clima",
      description: "Obtiene el clima de una ciudad",
      inputSchema: {
        type: "object",
        properties: {
          ciudad: { type: "string", description: "Nombre de la ciudad" }
        },
        required: ["ciudad"]
      }
    },
    {
      name: "guardar_nota",
      description: "Guarda una nota",
      inputSchema: {
        type: "object",
        properties: {
          titulo: { type: "string" },
          contenido: { type: "string" }
        },
        required: ["titulo", "contenido"]
      }
    },
    {
      name: "leer_notas",
      description: "Lee todas las notas guardadas",
      inputSchema: { type: "object", properties: {} }
    }
  ]
}));

// Implementar herramientas
server.setRequestHandler(CallToolRequestSchema, async (request) => {
  const { name, arguments: args } = request.params;

  switch (name) {
    case "clima": {
      // Simular API de clima
      const ciudad = args?.ciudad as string;
      const temp = Math.floor(Math.random() * 30) + 5;
      return {
        content: [{
          type: "text",
          text: `El clima en ${ciudad}: ${temp}°C, parcialmente nublado`
        }]
      };
    }

    case "guardar_nota": {
      const { titulo, contenido } = args as { titulo: string; contenido: string };
      notas[titulo] = contenido;
      return {
        content: [{ type: "text", text: `Nota "${titulo}" guardada` }]
      };
    }

    case "leer_notas": {
      const lista = Object.entries(notas)
        .map(([t, c]) => `- ${t}: ${c}`)
        .join("\n");
      return {
        content: [{ type: "text", text: lista || "No hay notas" }]
      };
    }

    default:
      throw new Error(`Herramienta desconocida: ${name}`);
  }
});

// Iniciar servidor
const transport = new StdioServerTransport();
server.connect(transport);
console.error("Servidor MCP iniciado");

Configurar Claude Desktop

{
  "mcpServers": {
    "mi-servidor": {
      "command": "node",
      "args": ["/ruta/a/dist/index.js"]
    }
  }
}

Siguiente nivel

Agente IA Autónomo