ideate MCP Server
Enables AI-augmented software delivery through an append-only process record, with hooks for capturing decisions, session outcomes, and commit boundaries, and provides session priming with recency-based context.
README
@ideate/plugin
The public, composable surface of ideate — a Claude Code plugin for AI-augmented software delivery.
ideate decomposes into three functions: a process record (the durable, auditable trail of what was decided and done — append-only, project-local, never curated or ranked by ideate itself), a knowledge graph (memory and retrieval over that trail — developed as a separate project, not part of this plugin), and a delegation board (how work is handed to and coordinated across agents — a future sibling capability, not part of this plugin today). ideate is deliberately non-prescriptive about workflow: it supplies primitives that fire mechanically, not a process you are told to follow, and it never blocks, redirects, or opines on what you do.
What this plugin provides today
This package ships the Layer-0 floor: the append-only process record and the mechanical capture/priming wiring around it. Nothing here is optional workflow — every piece below fires without requiring an agent to remember to call it.
- An append-only process record. Every entry — a decision, a finding, a session outcome, a subagent outcome, a commit boundary, a task completion — is appended, never updated or deleted; a correction is a new record that references the superseded one. Every write passes a capture-time secret-scanning gate before anything touches disk.
- Capture hooks.
SessionEnd,PreCompact,SubagentStop,TaskCompleted, andPostToolUse(ongit commit) are wired inhooks/hooks.jsonso records are captured mechanically as you work, with zero required tool calls. Every ideate hook is non-blocking: it exits 0, writes side effects andadditionalContextonly, and never blocks, denies, or halts anything the host is doing. - Session priming. At session start, and on subagent start, a bounded, unranked digest of the most recent process records is surfaced as additional context — recency- and scope-selected only, never scored or curated, and explicitly framed as quoted historical data rather than instructions.
- Telemetry. Native counters for capture, priming, and failure events,
inspectable with the
ideate-telemetryCLI.
Install
There are two ways to wire this plugin into a Claude Code project. Both land
on the same dist/server.js MCP server and hooks/hooks.json — the
manifests below are just two different ways of pointing Claude Code at them.
This section documents the contracts (what each mechanism provides); it does
not prescribe which one to use or what workflow to run once installed.
(a) Marketplace install
This repo ships .claude-plugin/marketplace.json, a Claude Code
plugin-marketplace manifest listing this plugin (name: ideate, source: "./" — the repo root). From within Claude Code:
/plugin marketplace add ideate-ai/ideate
/plugin install ideate
This is the manifest-driven path — Claude Code resolves the plugin and
wires .mcp.json / hooks/hooks.json for you. Known limitation (honest
status): this repo deliberately does not commit built output (dist/ is
git-ignored), and a plugin install performs no build step — so the MCP
server and CLIs are NOT functional straight from a marketplace install
today. Until a distribution mechanism for built output exists (tracked as
an open question in the project record), use the manual path below, which
is the tested, supported route.
(b) Manual wiring
For a project that wants to point at this plugin directly rather than through the marketplace resolver:
-
Build the package:
pnpm install && pnpm run build(compilessrc/todist/; required before the MCP server or CLIs will run —dist/is not checked in). -
Add an MCP server entry to the consuming project's
.mcp.jsonpointing at the built server, e.g.:{ "mcpServers": { "ideate": { "command": "node", "args": ["<path-to-this-plugin>/dist/server.js"] } } }This registers the three MCP verbs (
record_append,record_read,record_decision) described below. -
Wire the mechanical capture hooks by pointing the consuming project's host at this plugin's
hooks/hooks.json. That file declares the actual hook shape this plugin provides —SessionStart(priming viabin/ideate-record prime),SubagentStart/SubagentStop,SessionEnd(bin/ideate-record session-end),PreCompact, andPostToolUseongit commit— each entry acommandhook invoking either${CLAUDE_PLUGIN_ROOT}/bin/ideate-recordor one of thehooks/*.mjsscripts. How a consuming project performs that wiring (copying the file, referencing it, or another host-specific mechanism) is outside this plugin's contract — only the shape ofhooks/hooks.jsonitself is.
Build / test (contributor path)
Prerequisites: Node >= 22 and a pnpm-compatible install.
pnpm install
pnpm run build # compiles src/ to dist/ — required before the MCP server
# or the CLIs will run; dist/ is not checked in
pnpm test # vitest, fork pool capped at 4 (see vitest.config.ts)
pnpm run test:fresh-copy runs scripts/fresh-copy-check.mjs, which copies
this directory to a scratch location with no surrounding project context and
re-runs install/build/test there — the mechanical proof that this package
stands alone.
The process-record surface
The record core has exactly two transports over one implementation: three MCP tools, and a CLI. Both write through the same gated append-only store, so a record captured via one transport is indistinguishable from one captured via the other.
MCP verbs (registered by the ideate MCP server, dist/server.js):
record_append(kind, claim, verification_anchor?, scope?, content, task_id?)— append one process record. Open-vocabularykind(e.g.finding,session-outcome,commit-boundary, …).record_read(scope?, limit?)— read records newest-first, optionally filtered by a plain substring match against scope/kind/source. Unranked: selection only, no scoring.record_decision(claim, rationale?, verification_anchor?, scope?, task_id?)— sugar forrecord_append(kind="decision", ...); the ADR entry point. The decision write is its capture — there is no separate decision store.
ideate-record CLI (bin/ideate-record, the same gated core as a
standalone executable — this is what the capture hooks invoke):
ideate-record append --kind <k> --claim <c> [--anchor <a>] [--scope <s>] [--content <text>|-] [--task <id>]— append one record directly; exits 1 on failure.ideate-record read [--scope <substring>] [--limit <n>] [--json]— print records newest-first; exits 1 on failure.ideate-record session-end— reads aSessionEndhook payload from stdin and appends a recall-shaped session-outcome record. Hook path: always exits 0 (a capture failure must never look like a hook failure to the host).ideate-record prime [--scope <substring>] [--budget <n>]— print a compact, unranked digest of the most recent records for hookadditionalContext. Hook path: always exits 0.
Honest status
- Available now: the append-only process record, the five mechanical
capture points (
SessionEnd,PreCompact,SubagentStop,TaskCompleted,PostToolUseongit commit), session/subagent priming, the capture-time secret-scanning gate, and native telemetry counters. - Not yet built: the delegation board (work-state coordination across agents). This is a future sibling capability; nothing in this plugin depends on it.
- Eval-gated, not yet built: any feature whose value is an
intelligence-adjacent claim is withheld until the evaluation harness
(
@ideate/harness, private, not part of this package) demonstrates it, per gates G1–G7 of the project's eval design. This includes: planning-time gap identification (/ideate:gap-checkand its advisory hook — designed, not built, gated on G4), and per-prompt priming (technically wireable, but deferred — its token-cost tradeoff is exactly the kind of default the harness must license first, gated on G1/G2). None of this plugin's shipped behavior depends on either. - This package is
"private": trueinpackage.jsonand stays that way until publishing this plugin to npm is separately ratified.
License
AGPL-3.0-only — see LICENSE.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.