Skip to content

English · Español

Fase 31 — Uso de herramientas y el Model Context Protocol (MCP)

Requiere: 30 — Generación estructurada y decodificación restringida Enseña: tool-use · function-calling · mcp · json-schema · json-rpc Salta a cualquier capítulo desde el índice de referencia de fases.

Mapa del capítulo

Pre-escrita según A12. Esta entrada de fase existe antes de que Borja comience el estudio. La teoría y los enunciados de los labs son borradores estables; las soluciones se escriben justo a tiempo en la apertura de la fase.

🇪🇸 "Function calling", "tool use", "agentic" — vocabulario para una sola idea: el modelo emite JSON que dispara una función Python. La gracia de MCP es estandarizar cómo ese JSON se descubre, valida y enruta. Esta fase construye el plumbing desde cero.


Objetivo

Construir la capa de herramientas del stack del tutor de gramática: cuatro funciones Python tipadas (conjugate, lookup_irregular_verb, lookup_spanish, check_subject_verb_agreement) que operan sobre el universo §A13, más un par mínimo de servidor/cliente MCP (Model Context Protocol) que las expone vía JSON-RPC por stdio. Al cierre de la fase, Borja puede enviar un mensaje JSON-RPC desde un proceso cliente a un proceso servidor y obtener un resultado tipado de vuelta — y explicar exactamente qué bytes viajan por el pipe.

Esta fase introduce el nuevo módulo src/miniagent/ (tools + maquinaria MCP). La Fase 32 lo extiende con el bucle del agente, la memoria y el sandbox.

Orden de lectura

  1. theory/00-motivation.md — por qué el bucle del agente necesita herramientas; los límites de un sistema puro de LM.
  2. theory/01-function-calling-formats.md — encuesta: estilo OpenAI, estilo Anthropic, JSON-Schema en crudo. Qué hace bien y mal cada uno.
  3. theory/02-mcp-architecture.md — la forma tripartita de MCP (servidor, cliente, transporte); los cuatro verbos del wire que nos importan (initialize, tools/list, tools/call, notifications/...); el framing de JSON-RPC 2.0.
  4. theory/03-authn-authz.md — modelos de permisos, la suposición de confianza local que nos da stdio, qué cambia cuando pasamos a HTTP.
  5. lab/00-typed-tools.md — escribir las cuatro tools como funciones Python planas con descriptores JSON-Schema.
  6. lab/01-mcp-server.md — servidor JSON-RPC por stdio hecho a mano que expone las tools.
  7. lab/02-mcp-roundtrip.md — el cliente lanza el servidor, lista tools, llama a una.
  8. lab/03-mask-driven-toolcall.md — conectar el JSONSchemaMask de la Fase 30 con la generación de argumentos de tool calls. End-to-end.

solutions/ está vacío durante el pre-escrito — se rellena en la apertura de la fase.

Definition of Done

Ver PHASE_31_PLAN.md §6. Brevemente:

  • 4 tools implementadas y testeadas contra la tabla de verdad §A13.
  • El round-trip servidor + cliente MCP funciona en stdio.
  • Un blob de argumentos de tool call generado por el modelo bajo JSONSchemaMask se despacha correctamente.
  • src/miniagent/BLUEPRINT.md revisado y coincide con la API entregada.

Qué NO cubre esta fase intencionadamente

  • El bucle del agente. Eso es la Fase 32. La Fase 31 termina en "el cliente puede llamar a una tool"; no hay planificador, ni memoria, ni razonamiento multi-paso.
  • Sandboxing. Fase 32. Las tools de la Fase 31 son Python puro sin efectos secundarios; el sandbox sería ornamental.
  • Transportes HTTP/SSE. Fase 33 (src/miniserve/) expondrá el agente vía HTTP; la Fase 31 se queda en stdio porque ese es el transporte mínimo correcto.
  • El SDK mcp de Anthropic en producción. La Fase 31 hace el protocolo a mano para verlo. Un objetivo opcional lo porta al SDK como comparación.
  • Streaming de tool calls. Las tools son request/response síncronas. Tools en streaming (p. ej., una query a base de datos que emite filas progresivamente) están fuera de alcance.
  • Authn/authz más allá de la confianza local. Documentamos el modelo de amenazas y paramos. La Fase 37 lo revisita.

El alcance de la Fase 31 es: tools tipadas, round-trip MCP por stdio, generación de tool calls dirigida por máscara. Nada más.

Lecturas recomendadas

Opcional — enriquece pero no es necesario para aprobar la fase.