kiln
Kiln
An AI-native SDLC tool that keeps a knowledge graph linking
intent → requirement → blueprint → work order, and hands coding agents
fully-contextualized work orders over MCP. A coding agent calls get_work_order
and receives the whole chain — plus lineage up to root intent — in a single call,
then reports status back to the same store the human works in.
The system is a set of TypeScript packages (core, agents, mcp-server, cli)
plus a Tauri + React desktop app (apps/desktop). See docs/ for the
design (PRD, blueprint, CONNECTING, authoring-methodology).
Requirements
Node 22.5+ (uses the built-in
node:sqlite). On Node 22.x this needs the--experimental-sqliteflag; the test runner and package scripts set it for you. On Node 24+node:sqliteis stable and the flag is unnecessary.pnpm.
Quickstart
pnpm install
pnpm -r build
pnpm -r test
# Seed a demo chain (artifact → requirement → blueprint → ready work order)
# The store defaults to ~/.kiln/kiln.db everywhere (CLI, MCP server, desktop app);
# set KILN_DB_PATH to an absolute path to use a different file.
pnpm -C packages/mcp-server seed
# Serve it to coding agents over MCP
KILN_MCP_TOKEN=choose-a-secret pnpm -C packages/mcp-server startThen register with Claude Code and run the loop — full steps in
docs/CONNECTING.md.
Layout
packages/core/src/
├─ domain/ types.ts · edits.ts (EditOp/Suggestion) · schemas.ts (Zod input)
├─ db/ connect.ts (node:sqlite, lazy-loaded; pragmas, schema DDL)
├─ store/ store.ts (interface) · sqlite-store.ts (impl) · *.test.ts
├─ graph/ context.ts (context assembly) · tree.ts (featureTree) · *.test.ts
├─ edits/ apply.ts (applyOp/applySuggestion + revisions) · *.test.ts
├─ transitions.ts work-order status lifecycle (shared by MCP bridge + app)
└─ errors.ts
packages/mcp-server/src/
├─ index.ts CLI entry (env config, HTTP listener)
├─ server.ts streamable-HTTP wiring + bearer-auth gate
├─ tools.ts the three MCP tools over Store
├─ auth.ts bearer-token check (constant-time)
├─ seed.ts demo-chain seeder (also a CLI)
└─ *.test.tsThe one thing this proves
A coding agent can call get_work_order and receive the whole
work_order --implements--> blueprint --details--> requirement --references--> artifact
chain in a single MCP call, then report status back to the same store the human works in.
Missing links yield typed partials, never throws.
Design notes
Everything goes through
Store. No consumer imports the driver or writes SQL — all dialect-specific SQL (FTS5, the recursive CTE) is confined toSqliteStore. That's what keeps a futurePostgresStore(for the hosted tier) a drop-in. The MCP server obeys the same rule: it only sees theStoreinterface.Two processes, one file. The app and the MCP server share the SQLite file; WAL +
busy_timeoutmake that safe.Driver choice. The scaffold uses Node's built-in
node:sqlite(zero native build).better-sqlite3is a drop-in alternative — same API shape — if you prefer no experimental flag; the swap is confined todb/connect.ts.Status lifecycle is enforced server-side:
draft→ready→in_progress→done, plusany→cancelled. Invalid transitions return a tool error listing the allowed next states.IDs are
crypto.randomUUID(). Swap for ULID if you want lexicographically sortable ids.Structured edits are modeled (
EditOp/Suggestion) and applied viaapplySuggestion(core/src/edits): accepted ops apply atomically and append a revision. Anchors must match exactly once; an empty insert anchor appends.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/danielyayla/kiln'
If you have feedback or need assistance with the MCP directory API, please join our Discord server