EN

Servidor MCP de herramientas

Rol
Diseño y construcción
Tipo
Prototipo
Enfoque
Herramientas para agentes

Un servidor Model Context Protocol que convierte un backend REST existente en herramientas, recursos y prompts que un agente de IA puede usar, con mensajería saliente configurable y una superficie HTTP endurecida.

Camino de una petición en producción

  1. cliente de IAaquí vive el modelo
  2. transporte MCPstdio, SSE o HTTP en streaming
  3. handler de herramientaflag, validación, rate limit
  4. contexto de ciclo de vidaclientes y servicios compartidos
  5. cliente del backendJWT de servicio de corta vida
  6. backend REST / canalescorreo y SMS

Qué expone el servidor

Herramientas

8

Operaciones del backend convertidas en funciones tipadas que un LLM puede llamar, cada una activable por configuración.

Recursos

2

Contexto de solo lectura para el agente: las capacidades del servidor y sus herramientas activas, y un resumen agregado del backend.

Prompts

3

Plantillas de prompts con parámetros que encadenan las herramientas en flujos de varios pasos.

Transportes

stdio · SSE · HTTP

Un solo código sirve a agentes locales por stdio y a remotos por SSE o HTTP en streaming, elegido por configuración.

Decisiones de arquitectura

Recursos compartidos, creados una vez
Un ciclo de vida asíncrono crea al arrancar el cliente del backend, los servicios de mensajería y los transformadores; cada herramienta los toma del contexto de la petición en vez de abrir los suyos.
El backend detrás de un solo cliente
Las herramientas nunca hablan HTTP directamente. Un único cliente maneja timeouts, autenticación y el formato de respuesta.
Tokens de servicio que se renuevan solos
Las llamadas salientes llevan un JWT firmado de corta vida que se vuelve a generar poco antes de expirar, con respaldo a un token de usuario o una API key.
Canales detrás de interfaces
El correo pasa por una interfaz con implementación por webhook y respaldo por SMTP, elegida al arrancar; los SMS pasan por una abstracción de proveedor.
Funcionalidades como configuración
Cada herramienta revisa su propio flag y responde con un resultado claro de "desactivada"; un recurso le dice al agente qué está encendido.
Salida adaptada a quien llama
Los resultados del backend se transforman a varios formatos definidos en JSON, con un timeout.
Camino a capas explícitas
Se están introduciendo capas de dominio, aplicación e infraestructura con interfaces de repositorio y un contenedor de inyección de dependencias alrededor del servidor en funcionamiento.

Endurecer la superficie

No arranca sin protección
Un transporte HTTP no inicia sin API key, y las claves débiles se señalan al arrancar.
Rate limits
Un limitador de ventana deslizante seguro entre hilos, aplicado de forma global y por destinatario por hora.
Entradas estrictas
Teléfonos validados en E.164 con listas de bloqueo para números especiales, límites de longitud y sanitización de mensajes.
Protección SSRF
Las URLs de medios deben ser HTTPS y no pueden apuntar a direcciones privadas ni de loopback.
Privacidad en los logs
Los números de teléfono se enmascaran antes de registrar cualquier cosa.
Contenedor
Una imagen liviana que corre con un usuario sin privilegios de root, con un comando de health check.

Stack

  • Python
  • MCP SDK (FastMCP)
  • Pydantic
  • httpx
  • aiosmtplib
  • PyJWT
  • pytest
  • Docker

Siguiente caso

BMO