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:
- Python 3.10+
- pip install mcp httpx
- Repo y docs: MCP repo y Anthropic Developer Docs
- Ejemplos Claude Code: Claude Code examples
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:
- Claude detecta necesidad de herramienta.
- Selecciona
check_website_status. - Genera parámetros (url).
- Llama al plugin vía MCP.
- El plugin responde con texto estructurado.
- 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
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.
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.
Frameworks como FastMCP generan schemas automáticamente a partir de type hints y docstrings, reduciendo errores y manteniendo documentación y contratos sincronizados.
Captura excepciones, devuelve mensajes legibles y usa timeouts defensivos. No permitas que el proceso principal haga crash; implementa reinicios supervisados y health checks.
Aplica principio de menor privilegio, valida y sanitiza inputs, restringe rutas y comandos, y evita exponer credenciales en texto plano.
Sí. Usa las tools como nodos o llamadas API desde n8n; el resultado puede condicionar flujos, crear PRs o enviar alertas en Slack.

Leave a Reply