Skip to main content
Glama

Vibecheck

Vibecheck is a small, passive MCP work ledger for coding agents. It records a shared task plan, session ancestry, claims, work locations, blockers, and commits in SQLite. Agents report changes through nine tools. The board does not run agents, schedule work, execute Git commands, or verify that reported work happened.

Install the plugin

Use a current Codex or Claude Code client with plugin support. Install uv and make it available on the client's PATH. The launcher needs Bash on Linux or macOS; Windows users can run it through WSL. Python 3.12 or later is required, and uv can provision it. The first launch may download Python and locked dependencies.

For Codex, install the tagged release:

codex plugin marketplace add mgd34msu/vibecheck --ref v1.0.0
codex plugin add vibecheck@vibecheck

These commands use the native Codex plugin CLI.

For Claude Code, install the same tagged release:

claude plugin marketplace add mgd34msu/vibecheck@v1.0.0
claude plugin install vibecheck@vibecheck

Claude supports the @ref marketplace shorthand. To follow the repository's default branch instead, omit @v1.0.0. See Claude plugin marketplaces.

Enable the plugin in your client and reload the session if the tools do not appear. The plugin registers its MCP server for the client to start and supplies a shared vibecheck skill. There are no startup hooks that register projects or force the skill to run on every first turn.

Ask the agent to use Vibecheck to coordinate a project, report its current work, or recover an earlier plan. Supply a stable project ID and repository identity. The bundled skill guides registration, ownership, status, and recovery when invoked. For a standing project policy, copy the agent instructions into your project's AGENTS.md.

The same repository contains native Codex and Claude plugin manifests and marketplaces. Both clients use the same server and skill. Their local stdio processes share the default database, so using both clients on one machine does not create separate boards.

Related MCP server: nagi-ledger

Download release assets

The v1.0.0 release contains:

  • vibecheck-codex-1.0.0.zip, the Codex plugin bundle.

  • vibecheck-claude-1.0.0.zip, the Claude plugin bundle.

  • project_board-1.0.0-py3-none-any.whl and project_board-1.0.0.tar.gz, the Python distributions.

  • SHA256SUMS, checksums for the release artifacts.

Verify downloaded files against SHA256SUMS with your platform's SHA-256 utility. Each plugin archive extracts into a vibecheck directory with its native manifest and marketplace catalog. For a downloaded Codex archive, register that extracted directory and install:

codex plugin marketplace add /absolute/path/to/vibecheck
codex plugin add vibecheck@vibecheck

For the Claude archive:

claude plugin marketplace add /absolute/path/to/vibecheck
claude plugin install vibecheck@vibecheck

Choose either the GitHub marketplace or the extracted local marketplace for a client. Keep a local marketplace directory available for subsequent plugin management. See release notes.

Run from source

git clone --branch v1.0.0 https://github.com/mgd34msu/vibecheck.git
cd vibecheck
uv sync --locked
uv run vibecheck

The Python package remains project-board, and the original project-board command remains supported. vibecheck is an alias for the same server. Existing databases stay compatible.

Start a local server

For manual MCP client configuration, run from the checkout:

uv sync --locked
uv run project-board

The default transport is stdio. The process waits for an MCP client, so a quiet terminal is expected. Stop it with Ctrl-C when configuring your client.

Use an absolute path to scripts/run-server.sh as your client's MCP command. Copy examples/mcp.json and replace both example paths. This is a generic MCP configuration example; put its command, arguments, and environment into your client's supported configuration format.

All local clients must use the same absolute database path to share a board. Each client may start its own stdio process. Keep SQLite on local disk; use the HTTP server below for clients on different machines. Do not put the database on a network share.

The default database is $XDG_DATA_HOME/project-board/board.sqlite3, or $HOME/.local/share/project-board/board.sqlite3 when XDG_DATA_HOME is unset. Set PROJECT_BOARD_DB or pass --database to choose another file.

Start a shared HTTP server

Run the server on the machine that holds the local SQLite file:

read -rsp 'Board bearer token: ' PROJECT_BOARD_TOKEN
printf '\n'
export PROJECT_BOARD_TOKEN
export PROJECT_BOARD_DB="$HOME/.local/share/project-board/board.sqlite3"
export PROJECT_BOARD_PROJECTS='my-project'
uv run --locked project-board --transport streamable-http --host 127.0.0.1 --port 8765

Connect an MCP client to http://127.0.0.1:8765/mcp with the header Authorization: Bearer <your token>. The server requires a token even on loopback. For remote clients, provide HTTPS through your existing reverse proxy and pass --allowed-host for its public host. Keep the SQLite file on the server's local disk.

PROJECT_BOARD_PROJECTS restricts both transports to the listed comma-separated project IDs. Leave it unset to allow all projects. A configured empty list fails startup. The HTTP token grants access to the configured projects; it does not identify individual agents. Local stdio trusts its caller, and session identities are cooperative self-reports.

Keep data across upgrades

The plugin launcher uses an isolated uv environment in the external uv cache, respecting UV_CACHE_DIR. It does not create a .venv inside the installed plugin. Ledger data remains in $XDG_DATA_HOME/project-board/board.sqlite3, or $HOME/.local/share/project-board/board.sqlite3. Plugin replacement or removal does not delete this database. A custom PROJECT_BOARD_DB path also remains under your control. Keep the database outside plugin caches.

Pinned marketplace installations stay tied to the selected release. Select the desired release when upgrading. For an unpinned Claude marketplace, refresh the catalog and installed plugin with claude plugin marketplace update vibecheck and claude plugin update vibecheck@vibecheck, then restart the client. Remove the Claude plugin with claude plugin uninstall vibecheck@vibecheck; remove the Codex plugin with codex plugin remove vibecheck@vibecheck.

Tools

Tool

Purpose

project_join

Register or rejoin a project session with real identity and ancestry.

plan_publish

Publish the root's complete task inventory.

plan_edit

Atomically add or update task definitions, dependencies, and lineage.

plan_read

Retrieve a complete plan revision or compare two revisions.

plan_ack

Record a session's review of a complete plan revision.

work_claim

Claim ownership or contribute under a parent's work.

work_update

Report progress, blockers, integration, release, or handoff.

project_status

Read compact current state or explicit complete current state.

work_history

Recover work by task, session, path, branch, or commit.

Record work

Copy the agent instructions into the project's AGENTS.md. Give every agent the same project ID and repository identity. The first project_join registers that project. Starting the server does not create projects or infer them from its working directory. The root owns and updates the shared plan. Workers claim existing tasks or contribute under their parent's work.

The following examples show MCP tools/call parameters. Replace values such as REAL_VENDOR_SESSION_ID, SESSION_ID, and WORK_ID with real runtime identities and IDs returned by the board. Model and effort strings are opaque metadata; use the actual configured values. Revisions below illustrate a fresh board. Always use returned revisions in real calls.

Join the project and retain the returned session_id and complete task_map from its snapshot. If the map is omitted for size, retrieve it with plan_read:

{
	"name": "project_join",
	"arguments": {
		"request": {
			"project_id": "my-project",
			"request_id": "join-1",
			"repository": "https://example.com/team/repository.git",
			"vendor": "ACTUAL_VENDOR",
			"runtime": "ACTUAL_RUNTIME",
			"external_session_id": "REAL_VENDOR_SESSION_ID",
			"model": "ACTUAL_MODEL",
			"effort": "ACTUAL_EFFORT"
		}
	}
}

Publish the root's task plan:

{
	"name": "plan_publish",
	"arguments": {
		"request": {
			"project_id": "my-project",
			"request_id": "plan-1",
			"session_id": "SESSION_ID",
			"expected_revision": 0,
			"tasks": [{"id": "implement", "label": "Implement the change", "depends_on": []}]
		}
	}
}

Claim the task with its current task revision:

{
	"name": "work_claim",
	"arguments": {
		"request": {
			"project_id": "my-project",
			"request_id": "claim-1",
			"session_id": "SESSION_ID",
			"task_id": "implement",
			"expected_revision": 1,
			"location": {
				"checkout": "/absolute/path/to/checkout",
				"branch": "feature/change",
				"target_branch": "main",
				"paths": ["src/change.py"]
			}
		}
	}
}

Report a blocker using the work and task revisions returned by the claim:

{
	"name": "work_update",
	"arguments": {
		"request": {
			"project_id": "my-project",
			"request_id": "blocked-1",
			"session_id": "SESSION_ID",
			"updates": [{
				"work_id": "WORK_ID",
				"expected_revision": 1,
				"expected_task_revision": 2,
				"status": "blocked",
				"blocker": "Waiting for the test fixture"
			}]
		}
	}
}

Read the shared status with one call:

{
	"name": "project_status",
	"arguments": {"request": {"project_id": "my-project"}}
}

Find the task's work attempts and history:

{
	"name": "work_history",
	"arguments": {"request": {"project_id": "my-project", "task_id": "implement"}}
}

At natural work boundaries, read project_status with your known_plan_revision. The response contains fresh operational facts keyed by stable task, work, and session IDs. Reuse the shared definition map instead of repeating the graph on every read. Normal status needs no cursor or page assembly.

Normal status includes active, owned pending, and blocked tasks, work awaiting integration, available unowned pending tasks, and tasks with open contributions. Its complete structured JSON response has a 64 KiB UTF-8 budget. Counts disclose the scope and any omissions. If limited is true, full:true retrieves all current tasks, current owners, open contributors, all registered sessions, and the complete map. Full status includes no work history.

To recover a lost map, request include_map:true. A stale known_plan_revision sets map_changed:true and requests a replacement map automatically. Maps are all-or-omitted. If map_omitted is true, follow full_hint with full:true, or use plan_read for the complete definitions alone.

Edit part of the plan atomically without resending its inventory:

{
	"name": "plan_edit",
	"arguments": {"request": {
		"project_id": "my-project",
		"request_id": "edit-1",
		"session_id": "SESSION_ID",
		"expected_revision": 1,
		"operations": [
			{"op": "update", "task_id": "implement", "label": "Implement and verify the change"},
			{"op": "add", "task": {"id": "review", "label": "Review the change", "depends_on": ["implement"]}}
		]
	}}
}

Read a complete definition map at a particular revision. Add compare_to to request a diff instead of the map:

{
	"name": "plan_read",
	"arguments": {"request": {"project_id": "my-project", "revision": 2}}
}

Only after receiving and reviewing the complete map, acknowledge that revision:

{
	"name": "plan_ack",
	"arguments": {"request": {
		"project_id": "my-project",
		"request_id": "ack-2",
		"session_id": "SESSION_ID",
		"plan_revision": 2
	}}
}

The root can change dependencies during work. Each edit validates the resulting graph and retains older definitions in revision history. Optional supersedes links record splits or replacements; they do not transfer work or cancel tasks. Acknowledgments record which complete revision each session has reviewed. Reads never acknowledge automatically.

For field rules, retries, handoffs, advanced cursor reads, and history selectors, see the protocol reference. Status and timestamps describe the latest report, which may be stale. A successful database claim does not prevent another process from editing or committing the same Git files.

Validate the checkout

./scripts/verify.sh
uv run --locked python scripts/benchmark.py

To build and verify the release artifacts separately:

uv run --locked python scripts/build_release.py
uv run --locked python scripts/verify_release.py

The release verification record covers native installation, extracted plugin startup, clean wheel installation, all nine MCP tools, and persistence across restarts.

The recorded synthetic benchmark used 10,000 tasks and 25 sessions through local MCP stdio. Its normal status response was 46,398 structured JSON bytes, with a 56.979 ms median over 20 reads. The complete MCP result was 100,025 bytes because the transport also carries text content. These are measurements from that run, not latency guarantees. See verification evidence for the combined checks.

The board retains reported metadata, not repository knowledge or conversations. It does not scan the repository to understand code. Session identities and work status are cooperative self-reports; Git commits and actual outcomes require separate verification. Dependencies and blocking_path describe the graph without scheduling work or estimating completion time.

Available Tools

9 tools
plan_ackA
Idempotent

Record the plan revision this session explicitly observed.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide idempotentHint=true, readOnlyHint=false, and destructiveHint=false, so the safety profile is covered. The description adds the contextual constraint that the tool records what the session explicitly observed, which is useful, but it does not disclose additional behavioral details such as duplicate-ack handling or side effects beyond the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence with no filler. Every word contributes meaning: 'Record' gives the action, 'plan revision' gives the resource, and 'this session explicitly observed' gives the scoping condition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple write/ack tool with nested schema and no output schema, the description is mostly adequate because the schema defines the required fields and annotations define idempotency/safety. However, it leaves parameter semantics and alternative usage insufficiently explained, so an agent might not fully understand how to populate all required fields or when to prefer a sibling tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for the undocumented parameters. It maps loosely to 'plan_revision' and 'session_id' through 'plan revision' and 'this session', but it does not explain the 'request' wrapper, 'project_id', or 'request_id' semantics, leaving an agent to infer how to construct the required request object.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Record') and a specific resource ('the plan revision'), scoped by 'this session' and 'explicitly observed'. This clearly distinguishes the tool from siblings like plan_read, plan_edit, and plan_publish by indicating an acknowledgment/recording action rather than retrieval, modification, or publication.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'this session explicitly observed' implies the condition under which the tool should be used: only when the session has actually seen the plan revision. However, it does not explicitly state when not to use it or name alternatives such as plan_read or plan_edit for other workflows.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_editB
Idempotent

Atomically add or update plan tasks using the coordinator's expected revision.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses two important behaviors beyond the annotations: the operation is atomic, and it depends on an expected revision. However, it does not state what happens on a revision mismatch, whether updates are full or partial replacements, or any failure semantics. Annotations already cover idempotency and non-destructiveness, so some burden is lifted.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no filler. 'Atomically', 'add or update', 'plan tasks', and 'expected revision' each carry meaningful information, so the sentence earns its place despite the complexity of the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutation tool with a nested request object, no output schema, and no sibling differentiation, one sentence is insufficient. Missing context includes how to choose add vs update operations, the role of request_id/session_id, and the behavior when expected_revision is stale. The schema provides structure but not the operational context an agent needs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for parameter meaning. It only explains the role of expected_revision, while leaving project_id, request_id, session_id, and the structure/semantics of operations largely to the schema. The nested PlanAdd/PlanUpdate definitions are self-describing at a type level, but the description adds almost no guidance on how to construct a valid request.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names a specific action ('add or update plan tasks') and a resource, and adds a distinctive concurrency aspect ('using the coordinator's expected revision'). It is clear enough to distinguish plan_edit from read-style siblings like plan_read, though it does not explicitly name any alternative.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the intended use case: atomically modifying plan tasks while respecting a revision guard. However, it gives no explicit when-to-use or when-not-to-use guidance, and does not mention sibling tools or conditions that would route an agent elsewhere.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_publishA
Idempotent

Publish the coordinator's complete task plan using its expected revision.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

TDQS

A3.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already carry the safety profile (readOnly=false, destructive=false, idempotent=true), and the description adds the revision-guard behavior: 'using its expected revision' signals an optimistic-concurrency check that will presumably reject a stale revision. It also hints at a role constraint via 'coordinator's,' context annotations cannot express. It stops short of explicitly stating the failure mode on revision mismatch.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single 11-word sentence with the verb and resource front-loaded and the concurrency qualifier at the end. Every word carries meaning, and there is no boilerplate or duplication of schema information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The core mechanism and scope are covered, but for a concurrency-guarded write with no output schema, gaps remain: the failure behavior when the expected revision is stale (only implied by the word 'expected'), the return value, and how this step fits into a plan_edit → plan_publish → plan_ack workflow are all unstated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description carries the semantic burden and partially pays it: 'expected revision' explains the purpose of expected_revision, and 'complete task plan' implies the tasks array is a full replacement rather than a delta. However, the project_id/request_id/session_id triplet and the TaskDefinition fields (status, depends_on, supersedes) are left to name inference alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Publish'), the target (the coordinator's complete task plan), and the mechanism ('using its expected revision'), so an agent can tell what the tool does. It does not name sibling tools, but 'publish' plus 'complete task plan' implicitly contrasts with plan_edit's incremental changes and plan_read's read-only view, giving partial sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage is implied rather than stated. The description never explains when to publish versus editing incrementally with plan_edit, acknowledging with plan_ack, or reading with plan_read, and it gives no exclusions or preconditions such as 'must hold the current revision from a prior read.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

plan_readA
Read-only

Read a complete plan revision, or use compare_to for differences without full maps.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: using compare_to returns differences 'without full maps,' implying a lighter payload and different response shape.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence with no filler. The primary action is front-loaded, and the compare_to tip follows immediately, making the most important guidance prominent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with annotations covering safety, the description covers the main operation and the key behavioral mode. It lacks explicit mention of default revision behavior, but the core usage context is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains compare_to meaning and implies that revision is the plan revision to read, but it doesn't clarify what revision=null means (e.g., latest) or elaborate project_id. Partial compensation, not full.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Read a complete plan revision.' It clearly identifies the core operation and the compare_to mode, though it doesn't explicitly differentiate from sibling tools like plan_edit or plan_publish by name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit guidance for when to use compare_to: for differences without full maps. This tells the agent how to choose between default full-read behavior and diff mode. It doesn't mention alternative tools, but the read-only purpose is apparent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_joinB
Idempotent

Join with explicit session identity and optional parent; return compact status with map recovery.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose readOnly=false, idempotent=true, destructive=false. The description adds that this is a join operation with explicit session identity and that the response is a compact status with map recovery, which is some behavior beyond annotations. However, it does not explain side effects such as session creation or state transitions, and idempotentHint=true is not contradicted. With annotations present, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is one sentence, front-loads the core action, and carries useful information without unnecessary words. It is concise and readable, though it packs several concepts compactly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the schema is rich with required fields and defaults, and there is no output schema, the description explains the response kind ('compact status with map recovery') but not the meaning of the required fields, the semantics of take_over_from, or the implications of joining with a parent session. It is adequate for a simple join call, but it leaves behavioral details to the caller's context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description is the only textual source for parameter meaning. The description mentions 'explicit session identity' (external_session_id), 'optional parent' (parent_session_id), and 'compact status' (response), but the remaining parameters like take_over_from, effort, request_id, repository, vendor, runtime, and model are not described. A 0% coverage baseline would expect the description to compensate; partial compensation merits a 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Join') with a resource ('project') and mentions key modifiers (explicit session identity, optional parent) that distinguish it from a plain project query. It does not explicitly name siblings, but it conveys a session-joining behavior. The return phrase 'compact status with map recovery' adds some specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a session/identity-joining scenario, and sibling names like project_status, work_claim, work_update suggest alternatives, but it offers no explicit when-to-use or when-not-to-use guidance. The phrase 'optional parent' hints at when to use parent_session_id, but no exclusions or alternative tool routing is given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

project_statusC
Read-only

Read compact current work; full includes all current records and the task map.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true and openWorldHint=false, so a safe read operation is already established. The description adds a behavioral distinction between 'compact' and 'full' output, noting that full includes all current records and the task map. However, it does not explain how filters, limits, or revision handling affect behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short and front-loads the core action ('Read'). It avoids redundancy and extra words. The phrasing is compact but slightly awkward and could be clearer, yet it still earns its place without wasted content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has a nested request schema, no output schema, and no parameter-level descriptions. The description only conveys compact/full modes, leaving out what 'current work' means, how project_id is used, how filtering works, and what the response looks like. An agent would struggle to invoke this correctly beyond the default compact read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for documenting parameters. It only hints at the 'full' boolean and the 'task map' concept, leaving project_id, limit, since, task_ids, include_map, and known_plan_revision semantically undocumented. This is insufficient for a tool with seven nested parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Read') and a resource ('current work'), and distinguishes between compact and full output modes. It conveys the tool is a read/status tool, which separates it from mutating siblings like plan_edit, work_update, and plan_publish. It is somewhat ambiguous what 'current work' precisely covers, but it gives enough of a functional identity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is for reading current work/status, but it gives no explicit guidance on when to use project_status versus alternatives such as plan_read, work_history, or work_claim. There is no mention of exclusions, prerequisites, or which sibling tools are better suited for other scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

work_claimA
Idempotent

Claim task ownership or record a delegated contribution with a revision check.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description adds the 'revision check' behavior, which is critical for optimistic concurrency and is not present in the annotation fields. It does not describe what happens on a revision mismatch, but idempotency and non-destructiveness are already covered by the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence, verb-first, with no filler or redundant restatement of the tool name. Every phrase earns its place: the action, the alternative mode, and the concurrency check.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The schema and annotations carry substantial weight: required fields, patterns, and idempotency are already structured. However, the description still omits success/error behavior, what a failed revision check means, and the semantics of parent_work_id/replace_work_id. It is adequate for a basic call but not fully complete for a nested WorkClaim operation with no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description was expected to compensate by explaining parameters, but it only adds meaning to expected_revision via 'revision check'. Required fields like project_id, request_id, session_id, task_id, and optional fields like location, parent_work_id, and replace_work_id are left entirely to their names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states concrete actions ('Claim task ownership or record a delegated contribution') and a key constraint ('with a revision check'), making it clear this is a write/claim operation rather than a read/history tool. It does not fully explain the two modes or the exact resource lifecycle, but the core purpose is identifiable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrasing implies when to use the tool (when claiming ownership or recording a delegated contribution), but it never explicitly contrasts it with siblings like work_update, plan_ack, or work_history. No when-not-to-use guidance or alternatives are given, so the agent must infer selection from the verb 'claim'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

work_historyA
Read-only

Find recorded work and its history by task, session, path, branch, or commit.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds the filter dimensions but does not disclose pagination behavior, result ordering, or whether no-match calls return empty results. It is consistent with annotations but adds only modest behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single well-structured sentence that front-loads the core purpose ('Find recorded work and its history') and then lists the filter dimensions. There is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema and sparse parameter documentation, the description is minimally adequate: it conveys what the tool returns at a high level and which filters exist. However, it omits the required project_id and does not clarify pagination semantics, so an agent has to rely heavily on the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description carries more responsibility. It adds meaning by identifying task, session, path, branch, and commit as search keys, but it omits the required project_id and the after/limit pagination parameters, leaving an important invocation gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Find') and a clear resource ('recorded work and its history'), and it lists the search dimensions. It is clear, but it does not explicitly distinguish itself from sibling tools such as work_update or plan_read, so it stops short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies a read/query use case: use this tool when you need to find recorded work by various criteria. It does not mention alternatives or exclusions, but the context is clear enough for an agent to know when this tool applies.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

work_updateB
Idempotent

Atomically report progress, release work, or hand work to another session.

ParametersJSON Schema
NameRequiredDescriptionDefault
requestYes

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds 'atomically,' which is a meaningful behavioral trait beyond the annotations: updates are applied all-or-nothing. However, it does not explain the optimistic concurrency mechanism suggested by expected_revision, what happens on a revision mismatch, or the side effects of releasing work, so behavioral transparency is only partially covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-formed sentence with no filler, and the primary behavior is front-loaded. However, for a tool with a complex nested schema, the extreme brevity comes at the cost of omitted guidance that the agent would need.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This tool has a rich nested request schema, no output schema, and only a one-line description. Missing context includes the meaning of expected_revision/expected_task_revision, action-specific required fields, how location is used, and what the response indicates about success or failure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description needed to compensate by explaining the request structure and key fields. It maps 'progress, release, or hand off' to the action options, but leaves critical parameters like expected_revision, location, integration_commit, and handoff_to semantically unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description names the exact verb-resource pair and enumerates three concrete operations: reporting progress, releasing work, and handing work to another session. This clearly distinguishes the tool from siblings like work_claim and work_history, which read or claim work rather than mutate it.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this tool should be used when a session needs to atomically update the state of work, but it does not explicitly state when to prefer it over alternatives or when not to use it. There is no mention of sibling tools or exclusions, so the agent must infer the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv1.0.0
    • First observedplan_ack
    • First observedplan_edit
    • First observedplan_publish
    • First observedplan_read
    • First observedproject_join
    • First observedproject_status
    • First observedwork_claim
    • First observedwork_history
    • First observedwork_update

TDQS

A3.7/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct action within the plan/work lifecycle: joining a session, publishing/editing/acknowledging/reading plans, claiming/updating work, and viewing status/history. There is no genuine overlap that would cause an agent to select the wrong tool.

Naming Consistency4/5

Tool names consistently use lowercase snake_case with an object-first pattern (project_*, plan_*, work_*). Most names follow object_verb, though project_status and work_history are object_noun, creating a minor deviation.

Tool Count5/5

Nine tools is well-scoped for a coordination server covering session joining, plan management, work claiming/updating, and status/history queries. Each tool earns its place without redundancy or bloat.

Completeness4/5

The tool set covers the core plan and work lifecycle: publishing/reading/editing plans, acknowledging revisions, claiming and updating work, and querying status/history. Minor gaps exist, such as no explicit plan deletion or session leave, but agents can work around these in normal workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    A machine-local, agent-writable knowledge base MCP server that lets coding agents autonomously record and retrieve hard-won operational facts, incidents, and corrections as markdown pages in a git repo, with provenance, talk pages, and search.
    122
    MIT