Renderz Studio
Academia
Proyectos
Servicios
Arsenal
Repo
Herramientas
Skills
El Oráculo
Guía Gratis
← El Arsenal
ArquitecturaAvanzado35 min

MCP Servers en Producción

7 servers · 4 patrones de integración · el protocolo que conecta Claude con todo

MCPServersIntegraciones
✓ Guía gratuita · Acceso completo

Mapa rápido · salta al paso que te interese

Paso 1 · Qué es MCP

El protocolo explicado sin marketing

Paso 2 · Los 7 servers esenciales

Los que realmente vas a usar

Paso 3 · Crear tu propio server

Template completo en 30 minutos

01

Qué es MCP: el protocolo explicado sin marketing

MCP (Model Context Protocol) es un estándar abierto de Anthropic para conectar Claude con fuentes de datos externas y herramientas. En lugar de pasar todo por el prompt, MCP define una interfaz JSON-RPC para que Claude pueda leer recursos, ejecutar herramientas, y recibir contexto dinámico.

ConceptoQué significaEjemplo
ServerProceso que expone recursos/toolsSupabase MCP, GitHub MCP
ResourceDato que Claude puede leerArchivo, tabla de DB, documento
ToolAcción que Claude puede ejecutarCrear PR, enviar email, query SQL
PromptTemplate reutilizablePrompt de análisis de código
Estructura básica de un MCP server
// mcp-server.ts
import { Server } from "@modelcontextprotocol/sdk/server";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio";

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

// Registrar tools
server.setRequestHandler("tools/list", async () => ({
  tools: [{
    name: "mi_tool",
    description: "Qué hace este tool",
    inputSchema: {
      type: "object",
      properties: {
        param: { type: "string", description: "..." }
      },
      required: ["param"]
    }
  }]
}));

// Manejar llamadas
server.setRequestHandler("tools/call", async (request) => {
  if (request.params.name === "mi_tool") {
    const result = await ejecutarMiTool(request.params.arguments);
    return { content: [{ type: "text", text: result }] };
  }
});

// Conectar
const transport = new StdioServerTransport();
await server.connect(transport);
02

Los 7 servers esenciales

De los 100+ MCP servers disponibles, estos son los 7 que realmente vas a usar en producción.

Claude puede hacer queries SQL directamente a tu Supabase, crear tablas, y modificar datos — todo con RLS respetado.

Configurar en claude_desktop_config.json
{
  "mcpServers": {
    "supabase": {
      "command": "npx",
      "args": ["-y", "@supabase/mcp-server"],
      "env": {
        "SUPABASE_URL": "https://xxx.supabase.co",
        "SUPABASE_SERVICE_KEY": "eyJhbG..."
      }
    }
  }
}

Tip Pro

Usa el service key solo si necesitás bypass de RLS. Para queries normales, usa la anon key y deja que RLS proteja los datos.
03

Crear tu propio server en 30 minutos

Template completo para un MCP server que conecta con tu API o servicio.

Template completo · mcp-server/index.ts
import { Server } from "@modelcontextprotocol/sdk/server";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio";
import {
  CallToolRequestSchema,
  ListToolsRequestSchema,
  ListResourcesRequestSchema,
  ReadResourceRequestSchema,
} from "@modelcontextprotocol/sdk/types";

// Tu cliente de API
import { MiApiClient } from "./api-client";

const client = new MiApiClient(process.env.API_KEY!);

const server = new Server(
  { name: "mi-api-mcp", version: "1.0.0" },
  { capabilities: { resources: {}, tools: {} } }
);

// TOOLS - acciones que Claude puede ejecutar
server.setRequestHandler(ListToolsRequestSchema, async () => ({
  tools: [
    {
      name: "crear_item",
      description: "Crea un nuevo item en el sistema",
      inputSchema: {
        type: "object",
        properties: {
          nombre: { type: "string", description: "Nombre del item" },
          tipo: { type: "string", enum: ["A", "B", "C"] },
        },
        required: ["nombre", "tipo"],
      },
    },
    {
      name: "buscar_items",
      description: "Busca items por query",
      inputSchema: {
        type: "object",
        properties: {
          query: { type: "string" },
          limit: { type: "number", default: 10 },
        },
        required: ["query"],
      },
    },
  ],
}));

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

  switch (name) {
    case "crear_item": {
      const result = await client.crearItem(args.nombre, args.tipo);
      return {
        content: [{ type: "text", text: JSON.stringify(result, null, 2) }],
      };
    }
    case "buscar_items": {
      const results = await client.buscar(args.query, args.limit);
      return {
        content: [{ type: "text", text: JSON.stringify(results, null, 2) }],
      };
    }
    default:
      throw new Error(`Tool desconocido: ${name}`);
  }
});

// RESOURCES - datos que Claude puede leer
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
  resources: [
    {
      uri: "mi-api://stats",
      name: "Estadísticas del sistema",
      mimeType: "application/json",
    },
  ],
}));

server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
  if (request.params.uri === "mi-api://stats") {
    const stats = await client.getStats();
    return {
      contents: [{
        uri: request.params.uri,
        mimeType: "application/json",
        text: JSON.stringify(stats, null, 2),
      }],
    };
  }
  throw new Error(`Resource no encontrado: ${request.params.uri}`);
});

// Conectar
const transport = new StdioServerTransport();
await server.connect(transport);
console.error("MCP Server corriendo...");
package.json
{
  "name": "mi-api-mcp",
  "version": "1.0.0",
  "type": "module",
  "bin": { "mi-api-mcp": "./dist/index.js" },
  "scripts": {
    "build": "tsc",
    "start": "node dist/index.js"
  },
  "dependencies": {
    "@modelcontextprotocol/sdk": "^1.0.0"
  },
  "devDependencies": {
    "typescript": "^5.0.0"
  }
}
Agregar a Claude Desktop
{
  "mcpServers": {
    "mi-api": {
      "command": "node",
      "args": ["/path/to/mi-api-mcp/dist/index.js"],
      "env": {
        "API_KEY": "tu-api-key"
      }
    }
  }
}

Guías relacionadas

Function Calling Avanzado

El complemento perfecto para MCP

Agentes Autónomos

Usa MCP para darles superpoderes

¿Quieres el sistema completo?

500+ páginas, 25 capítulos, código de producción, acceso a todas las guías del Arsenal.

Curso Completo · €29

PayPal · Acceso inmediato

¿Hablamos?