Cómo crear un plugin para Anthropic Claude usando MCP

plugin-para-anthropic-claude

Crear tu primer plugin para Anthropic Claude (Claude Code)

Crear tu primer plugin para Anthropic Claude (Claude Code) no es magia. Es arquitectura. En vez de «pegar texto en el prompt», vas a exponer funciones ejecutables que Claude puede invocar como herramientas reales. Aquí tienes una guía práctica, técnica y directa para hacerlo funcionar en minutos.

Tiempo estimado de lectura: 5 min

  • Convierte prompts en herramientas: expón funciones (tools) que Claude invoca mediante MCP en lugar de meter contexto en el prompt.
  • Implementa un servidor MCP: el servidor genera schemas automáticamente y maneja llamadas desde Claude (ej.: FastMCP en Python).
  • Seguridad y fiabilidad: docstrings claros, timeouts, manejo de errores y principio de menor privilegio son imprescindibles.
  • Observabilidad y versionado: registra llamadas, latencias y versiona schemas para evitar rupturas en producción.
  • Integración: estas tools pueden orquestarse en n8n u otros workflows como nodos reutilizables.

Introducción

Un “plugin” en Claude es, en realidad, Tool Use o Function Calling via Model Context Protocol (MCP). No le estás metiendo código al modelo: le das una API estructurada y el modelo decide cuándo llamarla. Tu servidor ejecuta la lógica real (Python/TS/Go) y el modelo actúa como cliente que conoce las herramientas disponibles mediante un schema.

Resumen rápido (lectores con prisa)

Qué es: Exponer funciones ejecutables (tools) que Claude puede invocar vía MCP.

Cuándo usarlo: Cuando necesites que el asistente consulte sistemas externos, ejecute acciones o maneje datos sin inflar el prompt.

Por qué importa: Permite acciones deterministas, auditables y seguras desde un asistente LLM.

Cómo funciona: El modelo selecciona una tool, genera parámetros según el schema y llama al servidor MCP; el servidor responde con texto estructurado.

¿Qué es un “plugin” en Claude?

Conceptualmente:

  • Claude = cliente que conoce las herramientas disponibles mediante un schema.
  • MCP = protocolo que negocia llamadas entre Claude y tu servicio (stdio, HTTP, WebSocket).
  • Tu servidor = el plugin: código real que ejecuta la lógica (Python/TS/Go).

No le estás metiendo código al modelo. Le das una API estructurada y el modelo decide cuándo llamarla.

¿Qué necesitas y por qué importa?

¿Por qué hacerlo? Porque así conviertes un asistente en un agente capaz de:

  • consultar bases de datos internas,
  • ejecutar comprobaciones de infra,
  • automatizar workflows en n8n,

sin inundar el prompt con contexto ni exponer credenciales en texto.

Requisitos mínimos:

Código mínimo: servidor MCP en Python

Este ejemplo expone una tool que verifica el estado HTTP de una URL usando FastMCP. Copia, ajusta y ejecuta.

from mcp.server.fastmcp import FastMCP
import httpx

mcp = FastMCP("WebChecker")

@mcp.tool()
async def check_website_status(url: str) -> str:
    """
    Verifica el estado HTTP de una URL.
    Args:
      url: URL completa (ej: https://dominicode.com)
    Returns:
      Mensaje con código y razón, o error legible.
    """
    try:
        async with httpx.AsyncClient(timeout=5.0) as client:
            r = await client.get(url, follow_redirects=True)
            return f"Status: {r.status_code} - {r.reason_phrase}"
    except Exception as e:
        return f"Error: {str(e)}"

if __name__ == "__main__":
    mcp.run()

FastMCP genera automáticamente el schema de la tool a partir de los type hints y docstrings. No escribes JSON a mano.

Registrar el plugin en Claude Desktop / CLI

Para que Claude vea tu servidor local, añade una entrada en la configuración de Claude Desktop:

– macOS/Linux: ~/Library/Application Support/Claude/claude_desktop_config.json
– Windows: %APPDATA%\Claude\claude_desktop_config.json

Ejemplo:

{
  "mcpServers": {
    "web-checker": {
      "command": "python",
      "args": ["/ruta/absoluta/a/server.py"]
    }
  }
}

Reinicia Claude. Deberías ver el servidor activo (icono de enchufe).

Flujo de ejecución (Thinking Loop)

Cuando pides: “Claude, comprueba si dominicode.com responde”, sucede:

  1. Claude detecta necesidad de herramienta.
  2. Selecciona check_website_status.
  3. Genera parámetros (url).
  4. Llama al plugin vía MCP.
  5. El plugin responde con texto estructurado.
  6. Claude formatea la respuesta humana.

Todo ordenado, trazable y auditable.

Buenas prácticas imprescindibles

Docstrings son contratos

Escribe docstrings claros. El modelo usa esa información para construir la llamada. Ambigüedad = invocación errónea.

Errores controlados

Nunca dejes que tu plugin haga crash. Captura excepciones y devuelve mensajes legibles. Si tu proceso muere, Claude pierde acceso a todo ese servidor.

Timeouts defensivos

Usa timeouts explícitos (ej. httpx timeout=5s). No querrás procesos colgados.

Principio de menor privilegio

No implementes tools como exec_shell(cmd) a la ligera. Restringe rutas, usuarios y operaciones. Si necesitas ejecutar comandos, envuelve y valida cada input.

Observabilidad

Loguea prompts recibidos, respuestas, latencias y costes. Traza cada call LLM ↔ tool. Para infra, añade métricas que permitan alertas (ERRORES, RETRIES, LATENCIA).

Gestión de versiones

Versiona schemas y tools. Cambiar la firma de una función sin versionado rompe agentes y workflows en producción.

Escalada humana

Si el agente entra en loop o baja de confianza, define una regla clara: cortar, crear ticket y notificar a un responsable.

Integración con workflows y n8n

Estas tools son bloques reutilizables. Úsalas como nodos en n8n o como pasos en un orquestador de agentes. Por ejemplo:

  • Nodo n8n invoca tu API plugin para obtener estado.
  • Resultado condicional dispara un PR automático o un Slack alert.

Recursos y lectura adicional

Cierre operativo

Crear un plugin para Claude Code es convertir una idea en una API que el modelo puede invocar de forma determinista. No es magia; es ingeniería de interfaces. Empieza con una tool pequeña, aplícala en un workflow y añade observabilidad. Si lo haces bien, tu Claude dejará de hablar y empezará a actuar.

Esto no acaba aquí: construye la siguiente tool, versiona el schema y orquesta esas tools con un agente. Tu siguiente despliegue será la prueba.

Dominicode Labs

Si quieres prototipar y validar pipelines de agentes y automatizaciones, revisa Dominicode Labs. Es una continuación natural para integrar tools, pruebas y orquestación en entornos de trabajo técnico.

FAQ

¿Qué diferencia hay entre un plugin y poner contexto en el prompt?

Un plugin expone funciones ejecutables con schemas; el modelo invoca esas funciones. Poner contexto en el prompt implica enviar datos y lógica de forma textual, sin capacidad de ejecución externa ni trazabilidad.

¿Qué es MCP?

MCP (Model Context Protocol) es el protocolo que negocia llamadas entre el modelo y tu servicio (stdio, HTTP, WebSocket), permitiendo que el modelo conozca y llame herramientas.

¿Por qué usar docstrings en lugar de JSON manual?

Frameworks como FastMCP generan schemas automáticamente a partir de type hints y docstrings, reduciendo errores y manteniendo documentación y contratos sincronizados.

¿Cómo manejo errores para que Claude no pierda acceso?

Captura excepciones, devuelve mensajes legibles y usa timeouts defensivos. No permitas que el proceso principal haga crash; implementa reinicios supervisados y health checks.

¿Qué precauciones de seguridad debo tomar?

Aplica principio de menor privilegio, valida y sanitiza inputs, restringe rutas y comandos, y evita exponer credenciales en texto plano.

¿Puedo integrar estas tools en n8n?

Sí. Usa las tools como nodos o llamadas API desde n8n; el resultado puede condicionar flujos, crear PRs o enviar alertas en Slack.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *