rhizome-mcp
rhizome-mcp is a local-first MCP server that gives AI coding agents a shared, durable, SQLite-backed task tracker for coordinating project work.
Manage issues: create, read, update, archive, list, and filter epics/tasks/bugs with labels, priorities, statuses, parent hierarchies, blocked reasons, comments, and acceptance criteria.
Plan and model work: validate and atomically apply multi-issue plans (issues, relations, decisions), and manage cycle-checked
blocks,related_to, andduplicatesrelations.Coordinate agents safely: atomically claim ready/review issues with renewable leases, renew leases, checkpoint progress with notes, attach artifacts, and finish/fail/interrupt attempts; expired leases free the issue for re-claiming.
Review workflow: create, view, list, replace, supersede, cancel, and claim review requests pinned to exact issue versions and event positions.
Recover and resume: get bounded work-context packages (epic, blockers, decisions, comments, previous attempts, changes), plus unified per-issue activity timelines.
Search and graph: full-text search over issues, comments, decisions, reviews, and notes; planning/dependency graphs with claimable entry points; delta/event-based incremental sync.
Import/export and portability: validate, apply, and export logical project documents; create durable agent session handles for attribution; open projects and retain project references for stateless routing.
Human monitoring: expose state to status boards, issue lists, graph output, and CLI/HTML/JSON views alongside the MCP tools.
Enables GitHub Copilot agents to use Rhizome's shared task tracking and coordination, with crash-safe issue claiming, checkpoints, and multi-agent handoffs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rhizome-mcpWhat issues can I claim right now?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
When a coding agent dies mid-task, the task frees itself.
rhizome-mcp gives autonomous coding agents crash-safe task coordination over MCP: claims are renewable expiring leases, in_progress is derived — never stored — and an interrupted attempt hands its checkpoint to whichever session picks the work up next. One static Go binary, one SQLite database per project. No daemon, no accounts, no cloud.
It works with agents from different products at once — Claude Code, Codex, GitHub Copilot, VS Code, and any other MCP-compatible client — giving them one shared, durable view of project work.
Why · How it compares · Quick start · Monitor your project · MCP surface · Documentation
Why
AI coding agents are concurrent, context-limited, and interruptible. A TODO.md or a single chat context doesn't survive that. rhizome-mcp is built around those failure modes:
Crash-safe claiming. Issues are claimed atomically with renewable leases.
in_progressis never a stored status — it is derived from an active lease, so a vanished agent can't lock an issue forever. When the lease expires, the issue becomes claimable again. A partial unique index guarantees at most one active attempt per issue at the database level.Token-efficient by contract. Compact list projections (a 100-issue page stays under 64 KB — enforced by an integration test), graph nodes that exclude free-text bodies at the SQL layer, snippet-only search, delta sync via event IDs, and a bounded single-call work-context package.
Durable project memory. Checkpoints with next steps, supersedable decision records, append-only event history, and FTS5 full-text search across issues, comments, decisions, and notes. A fresh session resumes from the last checkpoint instead of re-deriving state.
Planning and dependency graphs. Cycle-checked
blocksrelations, epics, claimable entry-point highlighting, and atomic batch planning (up to 50 issues, 100 relations, and 20 decisions in one all-or-nothing transaction).Review workflow. Review requests pin an exact issue version and event position; approving changed code is structurally impossible — a stale request can only be superseded and re-pinned.
Resource reservations. A claim can atomically reserve files, directories, globs, or logical resources (a port, a migration window, a deploy slot); an overlapping claim fails fast with the holder and its lease expiry named, instead of two agents colliding later.
Concurrency discipline throughout. Optimistic versioning on mutations, replay-safe idempotency keys, stable machine-actionable error codes.
Human observability without a server.
rhizome-mcp boardprints live leases, blockers, and the review queue, or writes a self-contained HTML snapshot; the CLI reads everything as tables, JSON, or Mermaid.
This repository tracks its own backlog through the server it ships — work is selected, claimed, checkpointed, and reviewed via rhizome-mcp itself (AGENTS.md).
Use it when several agent sessions (or several agent products) work the same repository over time and you need handoffs, parallel work, and recovery after crashes or context limits.
Skip it if you need a hosted multi-user tracker with auth, permissions, and a web UI — this is a local single-developer tool by design.
Related MCP server: memory-arbiter-mcp
How it compares
Compare agent task trackers on guarantees under failure, not on feature lists — local-first SQLite storage and MCP support are table stakes in this category.
When things go wrong | rhizome-mcp | beads | Kata | Guild |
Task frees itself after a crash | Yes — expiring lease | No | No | No |
Double-claim prevented at the storage layer | Yes | Atomic claim | Atomic claim | Atomic claim |
Stale review approval impossible | Yes — version-pinned | No | No | No |
Response sizes bounded by a tested contract | Yes — ≤ 64 KiB / 100 issues | No | No | No |
Interrupted attempt resumable by another session | Yes — checkpoints | No | No | Note only |
Full comparison with sources, pinned versions, and honest "choose X if" guidance: How rhizome-mcp compares.
Quick start
Install and run
Choose the approach that matches your workflow:
Zero-install trial via npm
Try rhizome-mcp immediately with no separate binary install, no Go toolchain:
npx rhizome-mcp serveWorks with any MCP client. See packages/npm/README.md for platform coverage. Great for quick evaluation.
Claude Code plugin
/plugin marketplace add Odrin/rhizome-mcp
/plugin install rhizome-mcp@rhizomeRegisters the MCP server (via npx, no binary install) and adds the rhizome-task-workflow and rhizome-execution-plan skills. Each repository you track still needs a one-time npx rhizome-mcp init in its root.
VS Code
Install Rhizome MCP (odrin.rhizome-mcp) from the Marketplace or Open VSX. The extension bundles the platform binary, registers the MCP server automatically, and adds Rhizome: Initialize Project to the Command Palette. No terminal, no mcp.json editing. Details: docs/10-vscode-extension.md.
Prefer a standalone binary with a plain mcp.json entry instead? Install the binary below and use this one-click link: Add to VS Code.
Native binary installer
Download and install a release binary for your platform. Verifies checksums, installs to ~/.local/bin by default:
curl -fsSL https://raw.githubusercontent.com/Odrin/rhizome-mcp/main/scripts/install.sh | shirm https://raw.githubusercontent.com/Odrin/rhizome-mcp/main/scripts/install.ps1 | iexOfficial MCP Registry
Use rhizome-mcp via the official MCP Registry, available in the Model Context Protocol registry as io.github.Odrin/rhizome-mcp for clients that consume the registry.
Initialize and connect
Initialize tracking inside your repository:
rhizome-mcp initThen register the server with your MCP client. Automated setup for common clients:
rhizome-mcp connect claude # Claude Code
rhizome-mcp connect codex # Codex
rhizome-mcp connect vscode # VS Code (if using standalone binary instead of extension)
rhizome-mcp connect json # Template for any other clientUse --print for a dry run. connect discovers your project's actual root
(walking up from the current directory the same way serve does) and pins
it with --project-root, so the written config works regardless of which
subdirectory an MCP client later launches the server from. All four targets
(claude, codex, vscode, json) agree on this. The manual equivalent
for any MCP client, matching connect's own server key:
{
"mcpServers": {
"rhizome-mcp": {
"command": "/absolute/path/to/rhizome-mcp",
"args": ["serve", "--project-root", "/absolute/path/to/your/repository"]
}
}
}or, via npx, without installing a binary at all:
{
"mcpServers": {
"rhizome-mcp": {
"command": "npx",
"args": ["-y", "rhizome-mcp", "serve", "--project-root", "/absolute/path/to/your/repository"]
}
}
}connect detects when it is itself running through the npx rhizome-mcp
wrapper and automatically emits this npx form instead of the wrapper's
resolved binary path, which lives in the npx cache and goes stale on
eviction or a version bump. A config written with a resolved absolute path
(the default otherwise) is machine-specific and not meant to be checked in
and shared across machines; pass connect TARGET --command to instead emit
a bare rhizome-mcp command name that relies on PATH, for a portable
config you do intend to share, provided every machine that uses it has
rhizome-mcp on PATH.
Stdio is the default transport; protocol output goes to stdout, logs to stderr.
That's it — connected agents start with open_project using the absolute repository root, retain its project_ref, and pass that reference to later project-scoped calls. See the agent workflow guide for the complete workflow. The returned metadata links the rhizome://guides/agent-workflow, rhizome://guides/issue-lifecycle, and rhizome://guides/multi-agent-handoff resources, and repository agents can load the rhizome-task-workflow skill from .github/skills/.
Install the agent workflow skill
For agents that support the open Agent Skills format, install rhizome-task-workflow with the npm-distributed skills CLI:
npx skills add Odrin/rhizome-mcp --skill rhizome-task-workflowRun the command in a project for a project-scoped installation, or add --global to make the skill available across projects. The skill teaches compatible agents how to select, claim, checkpoint, hand off, and finish Rhizome work. It complements the MCP server; it does not install the rhizome-mcp binary or configure an MCP connection.
Monitor your project
rhizome-mcp board # status counts, active leases, blockers, review queue
rhizome-mcp board --serve # interactive local board UI at a loopback URL
rhizome-mcp board --output board.html # self-contained HTML snapshot with the planning graph
rhizome-mcp issue list --status ready
rhizome-mcp graph ISSUE-42 --format mermaid
rhizome-mcp doctor --fullThe status board reports live lease counts, blocked issues and their reasons, open review requests, and the project-wide planning graph. The planning graph excludes finished work (done, cancelled) from the node budget, so the entry-point count always reflects claimable work. When the graph is truncated due to the 100-node budget, the board marks it as truncated and reports the retained node count in both table and JSON formats.
Optional: local HTTP transport
rhizome-mcp serve --http-address 127.0.0.1:0The bound endpoint is logged to stderr; the Streamable HTTP endpoint is http://127.0.0.1:<port>/mcp. The transport is loopback-only, unauthenticated, and enforces strict Host/Origin validation plus a 1 MiB outer request body limit. Modern MCP 2026-07-28 clients call server/discover and then send direct requests with protocol metadata; legacy 2025-11-25 clients can still use initialize and notifications/initialized without relying on a persistent transport session. If you want durable audit attribution, create an explicit agent_session_handle with create_agent_session, pass it to the relevant mutating tools, and end it later with end_agent_session; transport closure never ends it.
How it works
init writes exactly one file into the repository:
{
"version": 1,
"project_id": "01J..."
}stored as .agent-tracker.json. The SQLite database lives outside the repository in the platform application-data directory, resolved through project_id:
<application-data>/rhizome-mcp/projects/<project-id>/tasks.dbUse --data-root PATH to select an explicit data root for any command. Nothing else touches your repository, and the database is never committed to Git.
Design principle: an issue must never remain permanently stuck in in_progress. Effective status is computed from stored status plus the presence of an active leased attempt; if the agent disappears and the lease expires, the attempt becomes expired and the issue is available again when its stored state permits it.
Core constraints (by design): Go, SQLite (modernc.org/sqlite, pure Go, CGO-free), stdio as the primary transport, one database per project, no hosted or authenticated web UI (a loopback-only local status board is included), no authentication, minimal CLI. Deferred features are listed in docs/06.
CLI reference
Command | Purpose |
| Create |
| Run the MCP server (stdio; |
| Register the server with an MCP client ( |
| Status board: counts, leases, blockers, review queue; optional HTML snapshot; |
| Inspect issues with filters |
| Full-text search across issues, comments, decisions, notes |
| Dependency graph as table, JSON, or Mermaid |
| Project metadata; logical JSON export; logical JSON import (`--input PATH |
| WAL-safe online backup |
| Integrity, schema, and invariant checks |
| Administrative recovery; timestamp normalization requires a new validated backup |
Run rhizome-mcp without arguments for complete usage, rhizome-mcp version for build information.
MCP surface
The server exposes 44 tools covering the full lifecycle: project discovery, issue CRUD with labels and relations, archive/unarchive visibility transitions, planning and dependency graphs, batch plan validation/apply, comments and decisions, claim/renew/checkpoint/finish work attempts with optional atomic resource reservations, work-context assembly, review requests, full-text search, delta changes, logical project export/import, and workflow-policy administration with gate evidence and diagnostics. The complete contract, including the MCP tool annotation matrix and the full/agent/read-only/migration exposure profile matrix, is in docs/03-mcp-tools.md.
By default serve advertises the complete full catalog. Pass --profile agent|read-only|migration (or set RHIZOME_TOOL_PROFILE) to narrow it — for example serve --profile read-only for a client that should never see a mutating tool. When no named profile fits, pass --toolsets (or set RHIZOME_TOOLSETS) with a comma-separated list of capability groups instead — for example serve --toolsets issues,planning — to advertise exactly those groups plus the always-on core pair (open_project, get_project); the two flags are mutually exclusive. Profiles and toolsets are an exposure and prompt-size control, not an authorization boundary: every tool still enforces its own server-side validation regardless of what a client can see in tools/list. See docs/04-storage-runtime.md §17.1 for the full environment-variable set and precedence, including the deprecated unprefixed fallback names.
Documentation
The modular files under docs/ are the canonical specification; SPEC.md is the index. Agents should load only the sections relevant to their current task (AGENT_BRIEF.md explains how).
Guides for humans (quick start, workflow, CLI) live in site/ and are published via GitHub Pages. Release history is in the CHANGELOG.
Development
Build and test (no CGO, no external services):
CGO_ENABLED=0 go build -o rhizome-mcp .
go test ./...
go test -tags=integration ./...The integration tag runs real-process MCP smoke and workflow tests: they build a temporary server binary, initialize a fresh repository and SQLite data root per test, and speak to serve over stdio or HTTP. Beyond single-process smoke coverage, the suite also exercises cross-process scenarios on one shared SQLite data root — concurrent claim and update-version races, an ungraceful process kill and restart, and a backup taken while a server is writing — to catch defects a single-process test structurally cannot see. Most live in the dedicated integration package; tests that need unexported package-main internals stay at the repository root.
CI runs go vet, all non-race unit and integration tests, and npm launcher tests on Ubuntu, macOS, and Windows for every push and pull request targeting main. Linux also runs the existing fuzzing budgets, while a separate coverage job enforces unit and integration coverage thresholds. A parallel Linux Race smoke job runs an explicit selection of claim, reservation, transaction-admission, project-router, and HTTP-lifecycle tests with the race detector; its selection is maintained in .github/workflows/ci.yml.
Full race checks runs the complete unit and integration race suites against the latest main daily at 02:17 UTC. GitHub may delay scheduled runs. It can also be started from the Actions tab using Run workflow and selecting a branch, including a feature branch before merging. The workflow records the tested commit, retains JSON test logs for 14 days, and uses a cache separate from ordinary CI and race smoke. Nightly and smoke tests use -count=1 so successful cached test results cannot bypass execution.
Full race checks are not a PR gate: a green PR confirms the selected race checks, not the full race suite. Race regressions outside that selection may be discovered after merge, at the next scheduled run; monitor nightly failures and fix or revert them promptly. For local full-race verification (requires CGO and a C compiler):
go test -race -count=1 ./...
go test -race -count=1 -tags=integration -run '^TestIntegration' ./...The integration harness builds the real server subprocess with -race whenever the harness is race-instrumented.
Releases (.github/workflows/release.yml) publish CGO-free binaries with SHA-256 checksums for linux/amd64, linux/arm64, darwin/amd64, darwin/arm64, and windows/amd64; release binaries embed the version, commit, and build timestamp (local builds report git VCS info or dev, and the VERSION environment variable overrides both).
Release verification steps are documented in CONTRIBUTING.md.
This repository tracks its own backlog in rhizome-mcp: work is selected, claimed, and finished through the MCP server, and durable choices are recorded as decisions. Markdown holds specification only, not task status. See AGENTS.md and CONTRIBUTING.md.
License
Apache-2.0. Security policy: SECURITY.md.
Available Tools
35 toolsadd_commentA
Append collaboration context to an issue without rewriting history.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| issue_id | Yes | Canonical issue identifier (ULID or ISSUE-N). | |
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| idempotency_key | No | ||
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| comment | Yes |
apply_importADestructiveIdempotent
Apply a validated logical project import document into an empty destination.
| Name | Required | Description | Default |
|---|---|---|---|
| document | No | ||
| source_uri | No | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| counts | Yes | |
| conflicts | Yes | |
| latest_event_id | Yes |
apply_issue_planBDestructiveIdempotent
Atomically create issues, relations, and decisions from a valid plan.
| Name | Required | Description | Default |
|---|---|---|---|
| issues | Yes | ||
| decisions | Yes | ||
| relations | Yes | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| idempotency_key | Yes | ||
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| next_actions | Yes | |
| created_issues | Yes | |
| latest_event_id | Yes | |
| created_decisions | Yes | |
| created_relations | Yes |
archive_issueADestructiveIdempotent
Archive one issue using its current version; history remains available.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | ||
| issue_id | Yes | Canonical issue identifier (ULID or ISSUE-N). | |
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| idempotency_key | No | ||
| expected_version | Yes | ||
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
cancel_review_requestADestructiveIdempotent
Cancel an open or claimed review request using its current version.
| Name | Required | Description | Default |
|---|---|---|---|
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| expected_version | Yes | ||
| review_request_id | Yes | Canonical review request identifier (ULID). | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes | |
| version | Yes | |
| issue_id | Yes | |
| claimable | Yes | |
| created_at | Yes | |
| resolved_at | No | |
| artifact_ids | Yes | |
| supersedes_id | No | |
| target_event_id | Yes | |
| active_attempt_id | No | |
| target_issue_version | Yes |
claim_issueAIdempotent
Atomically acquire exclusive ready/review work for a 60-3600s renewable lease; already claimed work fails; keyed retries replay.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape; compact is the default. | |
| issue_id | Yes | Claimable ready or review issue (ULID or ISSUE-N). | |
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| lease_seconds | No | Requested lease duration in seconds. | |
| idempotency_key | No | Optional key that replays the same claim request. | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
create_agent_sessionA
Create a durable attribution session and one unrecoverable handle; writes a new session on every call (non-idempotent).
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | Optional model identifier. | |
| agent_label | No | Optional human-readable agent identity. | |
| client_name | Yes | Required client identity. | |
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| instance_key | No | Optional stable key for this client instance. | |
| client_version | No | Optional client version. |
Output Schema
| Name | Required | Description |
|---|---|---|
| session | Yes | |
| agent_session_handle | Yes |
create_issueA
Create one epic, task, or bug with optional hierarchy and labels.
| Name | Required | Description | Default |
|---|---|---|---|
| type | Yes | ||
| view | No | ||
| title | Yes | ||
| labels | No | ||
| status | No | ||
| priority | No | ||
| description | No | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| blocked_reason | No | ||
| idempotency_key | No | ||
| parent_issue_id | No | Canonical issue identifier (ULID or ISSUE-N). | |
| acceptance_criteria | No | ||
| agent_session_handle | No | Optional durable session handle for request attribution. | |
| create_missing_labels | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
create_review_requestA
Create a review request for an exact issue version, event position, and artifact set. Deprecated: prefer replace_review_request.
| Name | Required | Description | Default |
|---|---|---|---|
| issue_id | Yes | Canonical issue identifier (ULID or ISSUE-N). | |
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| artifact_ids | No | ||
| supersedes_id | No | Canonical review request identifier (ULID). | |
| target_event_id | Yes | ||
| agent_session_handle | No | Optional durable session handle for request attribution. | |
| target_issue_version | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes | |
| version | Yes | |
| issue_id | Yes | |
| claimable | Yes | |
| created_at | Yes | |
| resolved_at | No | |
| artifact_ids | Yes | |
| supersedes_id | No | |
| target_event_id | Yes | |
| active_attempt_id | No | |
| target_issue_version | Yes |
end_agent_sessionBIdempotent
End one explicitly created durable agent session handle.
| Name | Required | Description | Default |
|---|---|---|---|
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| agent_session_handle | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| session | Yes |
export_projectBRead-onlyIdempotent
Export the selected project as the version 1 logical interchange document.
| Name | Required | Description | Default |
|---|---|---|---|
| delivery | No | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
finish_attemptBDestructiveIdempotent
End a leased attempt with outcome, verification, artifacts, and status.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | ||
| outcome | Yes | ||
| artifacts | No | ||
| attempt_id | Yes | ||
| next_steps | No | ||
| lease_token | Yes | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| verification | No | ||
| blocked_reason | No | ||
| reason_details | No | ||
| result_summary | Yes | ||
| review_outcome | No | ||
| idempotency_key | No | ||
| failure_reason_code | No | ||
| target_issue_status | No | ||
| acknowledged_changes | No | ||
| agent_session_handle | No | Optional durable session handle for request attribution. | |
| interruption_reason_code | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
get_changesARead-onlyIdempotent
Get ordered issue events after an event ID for incremental synchronization.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| issue_id | No | Canonical issue identifier (ULID or ISSUE-N). | |
| event_types | No | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| since_event_id | Yes | ||
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | |
| has_more | Yes | |
| next_event_id | Yes | |
| latest_event_id | Yes |
get_issueARead-onlyIdempotent
Get the current issue record by ULID or ISSUE-N display ID.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | ||
| issue_id | Yes | Canonical issue identifier (ULID or ISSUE-N). | |
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| type | Yes | |
| title | Yes | |
| labels | No | |
| status | No | |
| version | Yes | |
| priority | No | |
| closed_at | No | |
| created_at | No | |
| display_id | Yes | |
| updated_at | Yes | |
| archived_at | No | |
| description | No | |
| sequence_no | Yes | |
| blocked_reason | No | |
| parent_issue_id | No | |
| acceptance_criteria | No |
get_issue_activityARead-onlyIdempotent
Get a unified newest-first timeline of issue work and artifacts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| order | No | ||
| types | No | ||
| cursor | No | ||
| issue_id | Yes | Canonical issue identifier (ULID or ISSUE-N). | |
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| has_more | Yes | |
| next_cursor | Yes |
get_issue_graphARead-onlyIdempotent
Get a bounded relation and hierarchy graph around one issue.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Only compact graph nodes are available. | |
| depth | No | Relation hops from root; default 2. | |
| direction | No | Relation traversal direction. | |
| max_nodes | No | Maximum returned nodes; default 100. | |
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| root_issue_id | Yes | Issue at the graph traversal root. | |
| relation_types | No | Optional relation kinds; empty includes all. | |
| include_terminal | No | Include terminal issue nodes. | |
| include_hierarchy | No | Include derived epic hierarchy edges. | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| edges | Yes | |
| nodes | Yes | |
| summary | Yes | |
| warnings | No | |
| truncated | Yes | |
| entry_points | Yes | |
| next_actions | Yes | |
| root_issue_id | No | Canonical issue identifier (ULID or ISSUE-N). |
| blocking_nodes | No | |
| truncation_reason | No |
get_planning_graphARead-onlyIdempotent
Get dependency-aware entry points and blocking nodes for work selection.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| max_nodes | No | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| root_issue_id | No | Canonical issue identifier (ULID or ISSUE-N). | |
| include_review | No | ||
| include_related | No | ||
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| edges | Yes | |
| nodes | Yes | |
| summary | Yes | |
| warnings | No | |
| truncated | Yes | |
| entry_points | Yes | |
| next_actions | Yes | |
| root_issue_id | No | Canonical issue identifier (ULID or ISSUE-N). |
| blocking_nodes | No | |
| truncation_reason | No |
get_projectARead-onlyIdempotent
Get metadata, limits, supported values, event position, and guide links for a project_ref or configured default.
| Name | Required | Description | Default |
|---|---|---|---|
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| agent_session_handle | No | Optional durable session handle for request attribution. | |
| include_instructions | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| guides | Yes | |
| limits | Yes | |
| project | Yes | |
| session | Yes | |
| app_version | Yes | |
| project_ref | Yes | |
| next_actions | Yes | |
| tool_profile | Yes | |
| config_version | Yes | |
| schema_version | Yes | |
| latest_event_id | Yes | |
| supported_statuses | Yes | |
| supported_priorities | Yes | |
| supported_issue_types | Yes | |
| supported_relation_types | Yes |
get_review_requestARead-onlyIdempotent
Get one review request by identifier.
| Name | Required | Description | Default |
|---|---|---|---|
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| review_request_id | Yes | Canonical review request identifier (ULID). | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes | |
| version | Yes | |
| issue_id | Yes | |
| claimable | Yes | |
| created_at | Yes | |
| resolved_at | No | |
| artifact_ids | Yes | |
| supersedes_id | No | |
| target_event_id | Yes | |
| active_attempt_id | No | |
| target_issue_version | Yes |
get_work_contextBRead-onlyIdempotent
Get bounded task, blocker, decision, checkpoint, and recovery context.
| Name | Required | Description | Default |
|---|---|---|---|
| limits | No | Optional 1-20 bounds for requested list sections only. | |
| include | No | Optional unique context sections; empty returns the compact default. | |
| issue_id | Yes | Issue whose work context to load. | |
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| issue | Yes | |
| reviews | Yes | |
| blockers | Yes | |
| warnings | Yes | |
| artifacts | Yes | |
| decisions | Yes | |
| relations | Yes | |
| truncated | Yes | |
| checkpoint | Yes | |
| parent_epic | Yes | |
| next_actions | Yes | |
| attempt_history | Yes | |
| recent_comments | Yes | |
| previous_attempt | Yes | |
| truncated_sections | Yes | |
| project_instructions | Yes | |
| recent_attempt_notes | Yes | |
| related_issue_summaries | Yes | |
| changes_since_previous_attempt | Yes |
list_decisionsARead-onlyIdempotent
List project-wide or issue-scoped decisions with cursor pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 0 uses the default limit of 20; maximum is 100. | |
| cursor | No | ||
| issue_id | No | Canonical issue identifier (ULID or ISSUE-N). | |
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| has_more | Yes | |
| next_cursor | Yes |
list_issuesARead-onlyIdempotent
List and filter issues, including effective status, blockers, and claimability.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | ||
| limit | No | 0 uses the default limit of 20; maximum is 100. | |
| types | No | ||
| cursor | No | ||
| labels | No | ||
| statuses | No | ||
| is_blocked | No | ||
| priorities | No | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| is_claimable | No | ||
| parent_issue_id | No | Canonical issue identifier (ULID or ISSUE-N). | |
| include_archived | No | ||
| effective_statuses | No | ||
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| has_more | Yes | |
| next_cursor | Yes | |
| next_actions | Yes |
list_labelsARead-onlyIdempotent
List reusable labels with optional name search and cursor pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 0 uses the default limit of 50; maximum is 100. | |
| query | No | ||
| cursor | No | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| has_more | Yes | |
| next_cursor | Yes |
list_review_requestsARead-onlyIdempotent
List review requests with optional status and claimability filters.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum is 100; the default is 20. | |
| cursor | No | ||
| status | No | ||
| claimable | No | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| items | Yes | |
| has_more | Yes | |
| next_cursor | No |
manage_issue_relationBDestructiveIdempotent
Add or remove one blocks, related_to, or duplicates relation.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| relation_type | Yes | ||
| idempotency_key | No | ||
| source_issue_id | Yes | Canonical issue identifier (ULID or ISSUE-N). | |
| target_issue_id | Yes | Canonical issue identifier (ULID or ISSUE-N). | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| changed | Yes | |
| relation | Yes | |
| affected_issues | Yes |
open_projectARead-onlyIdempotent
Open a project by absolute root and return its project_ref, metadata, limits, supported values, event position, and guide links.
| Name | Required | Description | Default |
|---|---|---|---|
| project_root | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| guides | Yes | |
| limits | Yes | |
| project | Yes | |
| session | Yes | |
| app_version | Yes | |
| project_ref | Yes | |
| next_actions | Yes | |
| tool_profile | Yes | |
| config_version | Yes | |
| schema_version | Yes | |
| latest_event_id | Yes | |
| supported_statuses | Yes | |
| supported_priorities | Yes | |
| supported_issue_types | Yes | |
| supported_relation_types | Yes |
record_decisionADestructive
Append a durable project or issue decision, optionally superseding one.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| status | No | ||
| content | Yes | ||
| summary | Yes | ||
| issue_id | No | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| supersedes_id | No | ||
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| decision | Yes | |
| superseded_decision_id | Yes |
renew_attemptA
Extend an active work or review lease before it expires.
| Name | Required | Description | Default |
|---|---|---|---|
| attempt_id | Yes | ||
| lease_token | Yes | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| lease_seconds | No | ||
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| server_time | Yes | |
| next_actions | Yes | |
| lease_expires_at | Yes |
replace_review_requestBDestructiveIdempotent
Atomically supersede a predecessor review request and create its open successor in one transaction.
| Name | Required | Description | Default |
|---|---|---|---|
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| artifact_ids | No | ||
| idempotency_key | Yes | ||
| target_event_id | Yes | ||
| agent_session_handle | No | Optional durable session handle for request attribution. | |
| target_issue_version | Yes | ||
| predecessor_request_id | Yes | Canonical review request identifier (ULID). | |
| predecessor_expected_version | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| successor | Yes | |
| predecessor | Yes | |
| latest_event_id | Yes |
save_attempt_noteB
Append a restartable checkpoint, finding, warning, or progress note.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | How the note should be classified. | |
| content | Yes | Required restartable note content. | |
| artifacts | No | Optional artifacts created or referenced by this work. | |
| important | No | Marks the note as important. | |
| attempt_id | Yes | Active attempt receiving the note. | |
| next_steps | No | Optional concrete actions after this note. | |
| lease_token | Yes | Secret proof of the active attempt lease. | |
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| idempotency_key | No | Optional key that replays the same note request. | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| artifacts | Yes | |
| attempt_note | Yes | |
| next_actions | Yes |
searchARead-onlyIdempotent
Full-text search with cursor pagination; default limit 20; archived records are excluded unless requested; results are relevance ordered.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 0 uses the default; 1-100 caps results. | |
| query | Yes | Required full-text terms. | |
| cursor | No | Cursor from a previous page. | |
| labels | No | Optional label filter. | |
| epic_id | No | Optional epic scope (ULID or ISSUE-N). | |
| issue_id | No | Optional issue scope (ULID or ISSUE-N). | |
| statuses | No | Optional issue-status filter. | |
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| entity_types | No | Optional result types; empty includes all. | |
| snippet_length | No | 0 uses the default; 1-1000 caps excerpts in runes. | |
| include_archived | No | Include archived issue records. | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| has_more | Yes | |
| next_cursor | Yes |
supersede_review_requestADestructiveIdempotent
Supersede an open or claimed review request using its current version. Deprecated: prefer replace_review_request.
| Name | Required | Description | Default |
|---|---|---|---|
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| expected_version | Yes | ||
| review_request_id | Yes | Canonical review request identifier (ULID). | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| id | Yes | |
| status | Yes | |
| version | Yes | |
| issue_id | Yes | |
| claimable | Yes | |
| created_at | Yes | |
| resolved_at | No | |
| artifact_ids | Yes | |
| supersedes_id | No | |
| target_event_id | Yes | |
| active_attempt_id | No | |
| target_issue_version | Yes |
update_issueADestructiveIdempotent
Patch one issue using its current version for optimistic concurrency.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | ||
| changes | Yes | ||
| issue_id | Yes | Canonical issue identifier (ULID or ISSUE-N). | |
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| idempotency_key | No | ||
| expected_version | Yes | ||
| agent_session_handle | No | Optional durable session handle for request attribution. | |
| create_missing_labels | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
validate_importARead-onlyIdempotent
Validate a logical project import document without writing anything.
| Name | Required | Description | Default |
|---|---|---|---|
| document | No | ||
| source_uri | No | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| agent_session_handle | No | Optional durable session handle for request attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| counts | Yes | |
| writes | Yes | |
| conflicts | Yes |
validate_issue_planARead-onlyIdempotent
Normalize and validate a bounded multi-issue plan without writing it.
| Name | Required | Description | Default |
|---|---|---|---|
| issues | Yes | ||
| decisions | Yes | ||
| relations | Yes | ||
| project_ref | No | Project reference returned by open_project. Pass it explicitly for stateless routing; omit only when using a configured default. | |
| agent_session_handle | No | Optional durable session handle for request attribution. | |
| include_normalized_plan | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| valid | Yes | |
| errors | Yes | |
| summary | Yes | |
| warnings | Yes | |
| next_actions | Yes | |
| normalized_plan | No | |
| plan_fingerprint | Yes | |
| normalization_changed | Yes |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
33 tool updates
v1.2.1- Changed
add_comment1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
apply_import1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
apply_issue_plan1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
archive_issue1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
cancel_review_request1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
claim_issue5 fields changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution." - added
Input schema / properties / idempotency_key / descriptionAdded value: +"Optional key that replays the same claim request." - changed
Input schema / properties / issue_id / descriptionPrevious value: -"Canonical issue identifier (ULID or ISSUE-N)."New value: +"Claimable ready or review issue (ULID or ISSUE-N)." - added
Input schema / properties / lease_seconds / descriptionAdded value: +"Requested lease duration in seconds." - added
Input schema / properties / view / descriptionAdded value: +"Response shape; compact is the default."
- Changed
create_agent_session5 fields changed- added
Input schema / properties / agent_label / descriptionAdded value: +"Optional human-readable agent identity." - added
Input schema / properties / client_name / descriptionAdded value: +"Required client identity." - added
Input schema / properties / client_version / descriptionAdded value: +"Optional client version." - added
Input schema / properties / instance_key / descriptionAdded value: +"Optional stable key for this client instance." - added
Input schema / properties / model / descriptionAdded value: +"Optional model identifier."
- Changed
create_issue1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
create_review_request1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
export_project1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
finish_attempt1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
get_changes1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
get_issue1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
get_issue_activity1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
get_issue_graph9 fields changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution." - added
Input schema / properties / depth / descriptionAdded value: +"Relation hops from root; default 2." - added
Input schema / properties / direction / descriptionAdded value: +"Relation traversal direction." - added
Input schema / properties / include_hierarchy / descriptionAdded value: +"Include derived epic hierarchy edges." - added
Input schema / properties / include_terminal / descriptionAdded value: +"Include terminal issue nodes." - added
Input schema / properties / max_nodes / descriptionAdded value: +"Maximum returned nodes; default 100." - added
Input schema / properties / relation_types / descriptionAdded value: +"Optional relation kinds; empty includes all." - changed
Input schema / properties / root_issue_id / descriptionPrevious value: -"Canonical issue identifier (ULID or ISSUE-N)."New value: +"Issue at the graph traversal root." - added
Input schema / properties / view / descriptionAdded value: +"Only compact graph nodes are available."
- Changed
get_planning_graph1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
get_project1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
get_review_request1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
get_work_context4 fields changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution." - added
Input schema / properties / include / descriptionAdded value: +"Optional unique context sections; empty returns the compact default." - changed
Input schema / properties / issue_id / descriptionPrevious value: -"Canonical issue identifier (ULID or ISSUE-N)."New value: +"Issue whose work context to load." - added
Input schema / properties / limits / descriptionAdded value: +"Optional 1-20 bounds for requested list sections only."
- Changed
list_decisions1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
list_issues1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
list_labels1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
list_review_requests1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
manage_issue_relation1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
record_decision1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
renew_attempt1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
replace_review_request1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
save_attempt_note9 fields changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution." - added
Input schema / properties / artifacts / descriptionAdded value: +"Optional artifacts created or referenced by this work." - added
Input schema / properties / attempt_id / descriptionAdded value: +"Active attempt receiving the note." - added
Input schema / properties / content / descriptionAdded value: +"Required restartable note content." - added
Input schema / properties / idempotency_key / descriptionAdded value: +"Optional key that replays the same note request." - added
Input schema / properties / important / descriptionAdded value: +"Marks the note as important." - added
Input schema / properties / kind / descriptionAdded value: +"How the note should be classified." - added
Input schema / properties / lease_token / descriptionAdded value: +"Secret proof of the active attempt lease." - added
Input schema / properties / next_steps / descriptionAdded value: +"Optional concrete actions after this note."
- Changed
search11 fields changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution." - added
Input schema / properties / cursor / descriptionAdded value: +"Cursor from a previous page." - added
Input schema / properties / entity_types / descriptionAdded value: +"Optional result types; empty includes all." - changed
Input schema / properties / epic_id / descriptionPrevious value: -"Canonical issue identifier (ULID or ISSUE-N)."New value: +"Optional epic scope (ULID or ISSUE-N)." - added
Input schema / properties / include_archived / descriptionAdded value: +"Include archived issue records." - changed
Input schema / properties / issue_id / descriptionPrevious value: -"Canonical issue identifier (ULID or ISSUE-N)."New value: +"Optional issue scope (ULID or ISSUE-N)." - added
Input schema / properties / labels / descriptionAdded value: +"Optional label filter." - added
Input schema / properties / limit / descriptionAdded value: +"0 uses the default; 1-100 caps results." - added
Input schema / properties / query / descriptionAdded value: +"Required full-text terms." - added
Input schema / properties / snippet_length / descriptionAdded value: +"0 uses the default; 1-1000 caps excerpts in runes." - added
Input schema / properties / statuses / descriptionAdded value: +"Optional issue-status filter."
- Changed
supersede_review_request1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
update_issue1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
validate_import1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
- Changed
validate_issue_plan1 field changed- added
Input schema / properties / agent_session_handle / descriptionAdded value: +"Optional durable session handle for request attribution."
35 tool updates
v1.2.0- First observed
add_comment - First observed
apply_import - First observed
apply_issue_plan - First observed
archive_issue - First observed
cancel_review_request - First observed
claim_issue - First observed
create_agent_session - First observed
create_issue - First observed
create_review_request - First observed
end_agent_session - First observed
export_project - First observed
finish_attempt - First observed
get_changes - First observed
get_issue - First observed
get_issue_activity - First observed
get_issue_graph - First observed
get_planning_graph - First observed
get_project - First observed
get_review_request - First observed
get_work_context - First observed
list_decisions - First observed
list_issues - First observed
list_labels - First observed
list_review_requests - First observed
manage_issue_relation - First observed
open_project - First observed
record_decision - First observed
renew_attempt - First observed
replace_review_request - First observed
save_attempt_note - First observed
search - First observed
supersede_review_request - First observed
update_issue - First observed
validate_import - First observed
validate_issue_plan
TDQS
Scored across 35 tools
Several tools have overlapping purposes: create_review_request, replace_review_request, and supersede_review_request all handle review request creation/supersedure, with two marked deprecated. Also, get_planning_graph and get_work_context both provide context-heavy views, and the abundance of similar verbs (create/list/get/manage) creates boundary confusion despite useful descriptions.
Tool names overwhelmingly use a consistent snake_case verb_noun pattern (e.g., list_issues, renew_attempt, archive_issue). The only notable deviation is the single-word 'search' and a few unconventional verb choices like 'open_project' and 'manage_issue_relation', which are minor and do not obscure the overall pattern.
With 35 tools, the server is well above the 'too many (25+)' threshold. The count is inflated by deprecated tools (create_review_request, supersede_review_request) that could be removed, and the sheer number makes the tool surface unnecessarily heavy for agents to navigate.
The server covers a comprehensive domain: issue lifecycle, review requests, attempts/leases, decisions, relations, sessions, import/export, and planning graphs. Minor gaps like lacking a direct 'list_relations' tool are mitigated by get_issue_graph, but the presence of deprecated tools and some redundancies suggest the surface is not fully polished.
Maintenance
Related MCP Connectors
Persistent memory, knowledge graph, task management and more for AI agents via MCP.
Self-hosted AI workspace: semantic RAG document search, long-term memory, and AI chat via MCP.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Project management shared by people and AI agents, with persistent project state through MCP.
Related MCP Servers
- AlicenseAqualityDmaintenanceA local MCP server that enables multiple AI coding tools to share structured project state (decisions, tasks, bugs) so they coordinate without re-explaining.5MIT
- AlicenseBqualityBmaintenanceA lightweight, fully local MCP server that provides AI coding tools with a shared SQLite memory store and built-in conflict arbitration, enabling structured memory sharing across tools like ZCode, Codex, Cursor, and Claude Code without external dependencies.410Apache 2.0
- AlicenseAqualityCmaintenanceLocal MCP server giving AI coding agents (Claude Code, Cursor, VS Code/JetBrains Copilot) a shared, persistent memory of your projects and every bug/issue faced during development. Stateless, plain-file storage (AGENTS.md + issues.jsonl) — no database.1667 npm1MIT
- FlicenseBqualityDmaintenanceA fully local, privacy-first MCP server that gives AI coding assistants deep repository intelligence with file-and-line-cited answers, persistent semantic memory, and agentic abilities like task planning and code review—all without any cloud API calls.23-