talent-mcp
Un servidor MCP en C# que da a los agentes de IA herramientas tipadas y seguras para reclutamiento, sobre la revisión sin sesiones del protocolo (2026-07-28).
Seis herramientas tipadas para buscar vacantes, puntuar candidatos y extraer habilidades, sobre Streamable HTTP sin estado con OAuth 2.1 + PKCE, y las mismas seis por stdio como dotnet tool. Publicado en NuGet.
- Rol:
- Diseño y desarrollo
- Año:
- 2026
- herramientas tipadas, cada una con su propio scope OAuth
- 6
- llamadas a LLM: puntuación determinista y sin costo
- 0
- de arranque en frío del dotnet tool, medido en CI
- 323 ms
- niveles de tests que bloquean cada merge
- 5
El problema
Un agente de IA vale lo que valen las herramientas que puede usar con seguridad. La revisión 2026-07-28 del Model Context Protocol eliminó las sesiones y las peticiones iniciadas por el servidor, y con eso rompió las formas habituales de paginar resultados y de pedir confirmación al usuario. talent-mcp es un servidor de referencia para esa revisión, en un dominio donde los errores cuestan caro: el reclutamiento.
Restricciones
- Sin sesiones en el servidor: cualquier réplica debe poder atender cualquier petición
- Las acciones destructivas necesitan confirmación explícita, sin peticiones iniciadas por el servidor
- Autorización por herramienta: los scopes de lectura, escritura y destructivos no son intercambiables
- Resultados reproducibles, para que la puntuación sirva como oráculo en los tests
Cómo funciona
- Clean Architecture con la regla de dependencias verificada por tests de arquitectura en CI. Domain no referencia nada; Application tiene los casos de uso y los puertos; Infrastructure tiene los adaptadores de EF Core, Keycloak y OpenTelemetry.
- Las seis herramientas viven en un proyecto que dos hosts comparten tal cual: un servidor Streamable HTTP en ASP.NET Core publicado como imagen de contenedor, y un host stdio publicado como dotnet tool.
- El estado entre llamadas viaja como un handle firmado y con vencimiento, que vuelve como un argumento más de la herramienta. El contexto de trazas del cliente llega en _meta, así que una sola traza cubre el cliente, el servidor y PostgreSQL.
Decisiones clave
Ningún LLM dentro del servidor
La puntuación y la normalización de habilidades son funciones puras: el servidor no necesita API keys, no cuesta nada correrlo y siempre devuelve la misma respuesta.
Costo de la decisión: Es menos flexible que preguntarle a un modelo; la comprensión del lenguaje la pone el agente del otro lado.
Handles firmados en vez de sesiones
El estado de la paginación va codificado, firmado y con vencimiento dentro del propio handle, así que el host HTTP escala horizontalmente sin sesiones pegajosas ni caché compartida.
Costo de la decisión: Los handles son opacos y vencen; un cliente que guarda uno demasiado tiempo tiene que volver a buscar.
Herramientas registradas a mano, no por escaneo de ensamblados
Un build con trimming que pierde sus herramientas en silencio responde -32601 sin caerse y sin dejar logs. El registro explícito, más un test de conformidad que verifica las seis herramientas por nombre, hace que ese fallo se note.
Costo de la decisión: Agregar una herramienta obliga a tocar también el registro.
Resultados
- Publicado en NuGet como librería reutilizable y como el dotnet tool talent-mcp, con una imagen de contenedor en GHCR.
- Cinco niveles de tests bloquean cada merge, desde las reglas de arquitectura hasta pruebas de punta a punta con OAuth y PostgreSQL.
- Está verificado que el almacén de Tasks sobrevive a un reinicio de la base de datos y recupera sus conexiones en alrededor de un segundo.
- El arranque en frío del dotnet tool instalado, medido en CI, es de 323 ms.
Tecnologías
- .NET 10
- C#
- Model Context Protocol
- OAuth 2.1
- Keycloak
- PostgreSQL
- OpenTelemetry
- Docker