Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Descripción del creador (original en inglés)
Per-tenant bitemporal context graph built from domain events, shared by agents via five tools.
Estos tres nunca se combinan en una sola puntuación: las opiniones, las mediciones y la popularidad son cosas distintas.
Todavía no escribimos un resumen sencillo para este. Abajo están los datos que leímos del registro.
Elige la app de IA que usas y copia la configuración.
KEEL_DB, KEEL_AGENTNecesitas
¿Qué app usas?
Elige tu app arriba. La recordamos, así que la próxima vez el botón dirá “Instalar en …”.
Abre Claude Desktop → Settings → Developer → Edit Config y pega esto en claude_desktop_config.json
{
"mcpServers": {
"keel": {
"command": "uvx",
"args": [
"keel-context",
"serve",
"--tenant",
"your-value"
],
"env": {
"KEEL_DB": "your-value",
"KEEL_AGENT": "your-value"
}
}
}
}Ejecuta esto en tu terminal
claude mcp add keel --env KEEL_DB=your-value --env KEEL_AGENT=your-value -- uvx keel-context serve --tenant your-valueCompleta los valores vacíos antes de ejecutarlo.
Este necesita valores en su línea de comandos, así que copia la configuración y complétalos.
Pégalo en .cursor/mcp.json de tu proyecto, o en ~/.cursor/mcp.json
{
"mcpServers": {
"keel": {
"command": "uvx",
"args": [
"keel-context",
"serve",
"--tenant",
"your-value"
],
"env": {
"KEEL_DB": "your-value",
"KEEL_AGENT": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este necesita valores en su línea de comandos, así que copia la configuración y complétalos.
Pégalo en .vscode/mcp.json de tu proyecto
{
"servers": {
"keel": {
"type": "stdio",
"command": "uvx",
"args": [
"keel-context",
"serve",
"--tenant",
"your-value"
],
"env": {
"KEEL_DB": "your-value",
"KEEL_AGENT": "your-value"
}
}
}
}Tu navegador te pide permiso para abrir la app; luego la app muestra la configuración y te pide confirmar. Los valores de las claves quedan vacíos para que los completes tú.
Este se ejecuta en tu computadora, y ChatGPT solo puede conectarse a servidores en internet. Elige otra app.
Tu elección se guarda en una cookie en este dispositivo; no necesitas cuenta.
KEEL_DB envKEEL_AGENT envEsta configuración se genera a partir de la ficha del creador en el registro. Si el README dice otra cosa, sigue el README.
Se ejecuta en tu computadora; la lista de herramientas aparece en tu app de IA después de instalarlo.
Revisamos información que cualquiera puede ver; no hemos leído el código. Las revisiones que no aplican no se cuentan. · Revisado el 9 nov 2026
El nombre en el registro se verificó con la cuenta de GitHub angelkurten, dueña del repo
Todavía no hemos leído este repo en GitHub
Todavía no hemos leído este repo en GitHub
Este se ejecuta en tu computadora; no hay endpoint en internet
Se ejecuta en tu computadora y usa ajustes locales en su lugar
Se ejecuta en tu computadora; solo podemos leer listas de herramientas de endpoints en internet
Comparado con todos los servidores activos de esta categoría en el registro. Las estrellas solo cuentan cuando quien lo publica es dueño del repo.
Superó 1 de 1 revisiones básicas aplicables. No hemos leído el código. Antes de agregar una clave o un token, revisa qué acceso pide el servidor y usa una clave que tenga solo los permisos que necesitas.
El registro no indica ninguna clave obligatoria, aunque algunos servidores te piden iniciar sesión la primera vez que los usas.
Se ejecuta en tu computadora. Tu app de IA lo inicia cuando hace falta, y los datos no pasan por los servidores del creador (a menos que el propio servidor llame a un servicio en línea).
El repo de GitHub cambió por última vez –, y la última versión (0.38.0) llegó al registro hace 4 días.
Las apps compatibles con MCP, como Claude Desktop, Claude Code, Cursor y VS Code. También necesitas Python (uv), Docker en tu computadora.
En la misma categoría: Spec Driven Development, Remote Desktop Commander, CloudGPU MCP
Servidores de la misma categoría hechos por otros creadores, ordenados por estrellas.
Cómo leer una tarjeta:↓ Descargas por semanai★ Estrellas de GitHubiTres pilares: reseñas · revisiones · usoiActualizado = fecha en que se publicó la última versión en el registroi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Rent a per-minute GPU from your MCP client, run a job, download results, shut it down.
Copiado tal cual del repo del creador. PopNx MCP no lo ha revisado ni lo respalda. Se quitaron HTML, imágenes y scripts. Los enlaces llevan fuera de este sitio.
Stop rebuilding the pipeline for every agent.
[Live demo](https://demo.angelkurten.com) · Docs · Hosted console (beta) · Why: We built four agents and four copies of our customer context
Keel is a context layer for the AI agents inside a product: a vertical SaaS, a consumer app, an internal tool. Domain events from your product go in; a bitemporal context graph per tenant comes out, whatever your unit is (an end-customer, a household, a team); every agent you build reads and writes it through the same five tools, over MCP, HTTP or a typed SDK.
You describe your vertical once, in a *cartridge* (ontology, event catalog, semantic rules, memory policies). Keel's core knows nothing about your domain. Your second agent connects in a day instead of weeks, because there is no second pipeline to write.
Try it in a minute, with an example cartridge and its events:
pip install keel-context
keel init fleet --example fleet # also crm, clinics, finance keel context fleet fleet/events.jsonl unit:MXK-4821
Status: 0.38.0, alpha. Container:
ghcr.io/angelkurten/keel. The five tools (plusquery, an optional read-only SQL sixth, off by default) over MCP and an HTTP JSON API (/v1), Postgres, webhook, Kafka and SQS adapters, semantic search, consolidation, an agent registry and SDKs for TypeScript, Python, Go and PHP, on the in-memory store, SQLite (--db keel.db, stdlib, no server to run), MySQL (--db mysql://...), Postgres (--db postgresql://...) or DuckDB (from Python).
Every new agent in a product repeats the same work: extract the customer's data, normalize it, decide what "critical" means, keep its own memory, expose its own tools to the model. Four agents, four copies of the customer's context, four definitions of "critical", four memories that never talk.
Existing memory layers (Zep, Mem0, AgentCore Memory, Neo4j's MKG) ingest text and documents and model memory per user or per agent. None of them start from domain events, and none model the tenant your product already has: the end-customer of a B2B SaaS, the household of a consumer app, the team of an internal tool.
valid_from, valid_to, recorded_at, and who corrected it. Audit-ready by construction.| Tool | The question it answers |
|---|---|
context | What do I know about this subject now, or at a past moment? Open facts, relations and rule verdicts. |
history | How did it change over time, and when did we learn it? |
search | Which subjects match? By text, kind, rule, attribute value or meaning. |
related | What is it connected to, up to three hops? |
annotate | Remember what an agent or a person concluded, with evidence and a scope. |
query (optional) | Off unless enabled (keel serve --query): read-only SQL over views generated from the cartridge, to filter, join, count or aggregate. The store binds it to one tenant. |
Every parameter is in the specification. query never sees another tenant, agent or task memory, or proposals, whatever SQL the agent writes (how).
search(mode="semantic") finds subjects by meaning: ids in the query first, then a dense and a lexical leg fused, then an optional reranker. Where vectors live and which model makes them are adapters you choose: in memory, Chroma, Weaviate, any OpenAI-compatible embeddings endpoint, or your own vector database and model (how, example).
Expose them over MCP (keel serve) and point any agent framework at them. Declare agents: in the cartridge and keel serve --agent binds a server to one of them: what it may read and write is enforced by the layer, not by the agent.
uv sync --extra dev
uv run keel validate examples/fleet --events examples/fleet/events.jsonl uv run keel ingest examples/fleet examples/fleet/events.jsonl uv run keel context examples/fleet examples/fleet/events.jsonl unit:MXK-4821
Then write your own cartridge: see docs/first-cartridge.md (20 minutes). Settings (database, secret, embeddings keys) go in a .env: copy .env.example (reference).
In your own product it is a library: uv add keel-context (or pip install keel-context); the import is import keel. From another language, generate a typed client from your cartridge: keel sdk typescript|python|go|php examples/fleet -o , with a small runtime per language (see docs/sdks.md).
Run Keel on your product's events with your agents, with our help: your first pilot in a day is the path, with a time budget per step. Open a pilot request, book 30 minutes at calendar.app.google/3oKUSqXTQPYmjya56, or write to angel@angelkurten.com.
Point an MCP client at the five tools:
uv sync --extra mcp
uv run keel serve examples/fleet --tenant acme-logistics --events examples/fleet/events.jsonl
With Claude Code, one command registers it and the agent sees exactly five tools:
claude mcp add keel -- uv run --directory $PWD keel serve examples/fleet --tenant acme-logistics --events examples/fleet/events.jsonl
Codex CLI (OpenAI) works the same way from ~/.codex/config.toml; the four read tools are annotated read-only, so it runs them without prompting. Both clients answered the same questions through the same five tools: see serve the tools. A backend, or many tenants from one process, use the same five as a JSON API: keel serve --transport http (/v1/context, /v1/events, ... with OpenAPI; tenant and agent per request).
Send your product's events from wherever they already are (how, for each):
keel cdc --dsn postgresql://... --map cdc.yaml --db keel.db --setup follows your own tables; each row change is an event.keel sdk typescript -o src/keel.ts, then keel.events([emit.tireDepthMeasured({...})]) (also Python, Go, PHP).PostgresTableAdapter polls it in order with a cursor, so restarts resume.POST /v1/events on keel serve --transport http, or build_app(ingestor, token=...).keel consume --queue , or KafkaAdapter from Python; at-least-once, acknowledged after each commit.keel ingest events.jsonl --db keel.db.keel export --db keel.db writes one tenant's whole audit trail as JSONL, closed facts and provenance included; keel import restores it, as it was, into an empty tenant of any store.
Every box, the options for each and when to pick which: docs/architecture.md.
Design rules the core enforces:
global > tenant > task > agent. Nothing is promoted to a wider scope by accident. Agent memory is read only by the agent that wrote it; task memory tied to a task id only by calls that pass that task (context(task=), history(task=)); global memory lives in a reserved partition every tenant reads and no event writes.keel/ core: envelope, handlers, store, scopes, cartridge loader, ingest, tools, cli
cartridges/ your own cartridges (empty here) examples/ fleet (reference), crm, finance and clinics: four domains, one core, no core change between them; each a cartridge, its events and its test; fleet also has a minimal agent and a multi-agent workflow sdk/ SDK runtimes: typescript, go, php (the Python client ships in keel) evals/ benchmarks: Jira questions (the paper), TDBench, semantic search, scale and efficiency docs/ site sources (mkdocs.yml at the root): architecture, first-cartridge, ingest, serve, sdks, operate, SPEC tests/
A summary; the full plan, with what each release shipped, is in ROADMAP.md.
Shipped:
keel expire, keel consolidate)as_known_at), changes since a watermark, task ids, idempotent writes, proposals, conflicts, tracesquery, the optional sixth tool: read-only SQL generated from the cartridge, bound to one tenant by the store (0.35.0)Open:
Solo se muestra el principio; lee el resto en el repo