Código abiertoPublicado

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

  1. 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.
  2. 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.
  3. 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