harness-mcp
harness-mcp
Un boilerplate de TypeScript con opinión propia para crear servidores MCP teniendo en mente la ingeniería de arnés (harness engineering).
La ingeniería de arnés es la disciplina de diseñar el andamiaje alrededor de un agente LLM —herramientas, descripciones, errores, contexto— para que el agente realmente haga lo correcto. La mayoría de los boilerplates de MCP te enseñan el protocolo. Este te enseña el protocolo y la práctica.
¿Qué incluye?
defineTool()— un esquema de Zod alimenta al SDK de MCP, a la API de llamadas a funciones de OpenAI y al manejador en tiempo de ejecución. La validación y el envoltorio de errores son automáticos.Ambos transportes — stdio (
src/index.ts) para clientes locales al estilo de Claude Code, HTTP transmitible (src/http.ts) para clientes remotos/web. Ambos comparten un únicocreateServer().AgentErrors estructurados — cada error tiene uncode, unmessagey unahintescrita para el modelo: "llama aitems_listprimero para encontrar un id válido". Los errores vagos desperdician turnos; esto lo soluciona a nivel de tipo.Un arnés de evaluación real — basado en Vitest. Las pruebas unitarias se ejecutan libremente en CI;
tests/mcp/echo.test.tsdirige un modelo real de OpenAI a través del servidor MCP mediante un par de transporte en memoria y realiza aserciones sobre el rastro de llamadas a herramientas resultante.Un ejemplo simple de CRUD —
items_create / list / read / update / deleteademás de una herramientaecho. Reemplaza el almacenamiento en memoria con tu backend real; mantén la estructura.
Inicio rápido
bun install
bun test # unit tests, no API key needed
bun run start # stdio server on stdin/stdout
bun run start:http # HTTP server on http://localhost:3000/mcpPara ejecutar las evaluaciones con el modelo en el bucle:
cp .env.example .env
# add OPENAI_API_KEY
bun run test:mcpConectar a Claude Code
{
"mcpServers": {
"harness-mcp": {
"command": "bun",
"args": ["run", "/absolute/path/to/harness/mcp/src/index.ts"]
}
}
}Estructura
src/
index.ts stdio entry
http.ts streamable-http entry
core/
server.ts createServer() — shared by both transports
tool.ts defineTool() wrapper
errors.ts AgentError
store.ts replace with your backend
tools/
echo.ts smoke-test tool
items-*.ts CRUD example tools
index.ts registry
tests/
unit/ fast, no API key
tool.test.ts
store.test.ts
mcp/ protocol + model-in-the-loop
setup.ts in-memory client + runWithModel() helper
smoke.test.ts no model
echo.test.ts gpt-4o-mini, skipped without OPENAI_API_KEYLas opiniones
Las descripciones de las herramientas son ingeniería de prompts. Cada descripción comienza con
USE WHEN ...(USAR CUANDO...) e incluyeDO NOT USE WHEN ...(NO USAR CUANDO...) para herramientas hermanas con las que el modelo podría confundirla. La prueba de humo impone la convención.Los errores enseñan. Cada
AgentErrorlleva un campohint. Lee tus mensajes de error como si fueras el agente: ¿sabrías qué hacer a continuación? Si no, reescríbelo.Los endpoints de lista se paginan.
items_listdevuelve{ items, nextCursor }. Límite predeterminado 20, límite máximo 100. No vuelques datos ilimitados en el contexto.Las operaciones destructivas aceptan
dryRun.items_deletete dirá qué sucedería si no estuvieras seguro.Un Zod, tres consumidores. No mantengas el esquema JSON a mano junto con Zod:
defineToolderiva ambos.Las evaluaciones son pruebas. Los rastros de llamadas a herramientas son comprobables. Cuando una regresión en la descripción rompe el comportamiento del modelo, tu prueba lo detecta.
Licencia
MIT.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/giuseppecrj/harness-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server