Skip to main content
Glama

Task Handoff Verifier (MCP)

Independently check an AI agent's work before you trust it. Task Handoff looks at what actually changed in a local git repository, runs only the checks that matter for those changes, cross-checks what the agent claimed, and gives you a short report you can read in under a minute.

Every statement in the report carries one label:

Label

Meaning

VERIFIED

Observed directly: git state, or a check that ran and passed or failed

CLAIMED

Said by the agent, not independently checked

INFERRED

Follows from verified facts by a stated rule

NOT TESTED

Relevant, but nothing exercised it

BLOCKED

A check was needed but could not run (missing tool, missing deps, timeout)

A failed, timed-out, blocked or empty ("no tests collected") check is never reported as a pass.

Example report (real output from a demo repo, path shortened):

## Cap discounts at 50% - FAILED
_~/code/demo-shop · baseline 2026-09-27T22:57:08+0530 @ dc8811b592e9_

**Changes** (1 files, +2/-1) [VERIFIED]
- `shop/pricing.py` modified +2/-1 (backend)

**Checks**
- PASS `python-syntax` - exit code 0 · why: 1 Python file(s) changed (read-only parse)
- FAIL `pytest` - 1 failed, 1 passed in 0.01s (0.1s) · why: tests mapped to changed files (1 test file(s))
    > >       assert apply_discount(100, 10) == 90
    > E       assert 100 == 90
    > tests/test_pricing.py:5: AssertionError
    > FAILED tests/test_pricing.py::test_ten_percent - assert 100 == 90
    > 1 failed, 1 passed in 0.01s

**Evidence**
- [NOT TESTED] No passing test exercised: shop/pricing.py
- [CLAIMED] Capped discounts at 50% in pricing.py; all tests pass
- [INFERRED] 'pricing.py' from the claim was modified (shop/pricing.py).
- [INFERRED] Claim of passing tests is not supported by any test run here.

**Next prompt:** Fix the failing check(s): pytest. Run `~/code/demo-shop/.venv/bin/python -m pytest -q
--no-header -p no:cacheprovider tests/test_pricing.py` to reproduce - key output: ... assert 100 == 90 ...
Add or run tests covering shop/pricing.py. Then call verify_task again.

Quick start for Mac (2 minutes, no terminal)

  1. Download: task-handoff.mcpb (always the latest version).

  2. Double-click it. Claude Desktop opens an install dialog. Click Install. If macOS or Claude warns that the extension is from an unverified developer, that's expected for extensions shared outside Anthropic's directory. The same file works on Windows and Linux.

  3. Talk to Claude in a new chat. You don't need to know any paths:

    • "Check my task-handoff setup." confirms everything is ready and says exactly what to fix if not.

    • "Find my shop project and start a task-handoff baseline for 'add dark mode'."

    • (after the work is done) "Verify the work in my shop project. Claims: dark mode toggle added in settings.tsx, all tests pass."

Requirements: Claude Desktop on macOS with Apple's Command Line Tools, which you already have if git works. If not, check_setup tells you to run xcode-select --install. The first time Claude looks in Documents, Desktop or Downloads, macOS may ask whether Claude can access that folder. Allow it if your projects live there.

Only works in the Claude Desktop app (it runs on your computer and checks your local code). It can't be used from claude.ai in a browser or the mobile apps.


Related MCP server: ccc-mcp

Requirements

  • macOS, Linux or Windows

  • git and Python 3.9+ on PATH (python3; on Windows python). On macOS both come with the Xcode Command Line Tools; on Windows install Git for Windows and Python from python.org (tick Add python.exe to PATH).

  • Nothing else. The server has no third-party dependencies.

Why a desktop extension and not a remote "custom connector"? Custom connectors (Settings → Connectors → Add custom connector) are servers on the internet that Claude reaches by URL. This tool must read your local repositories, including uncommitted work, and run your local tests. A remote server can't see those, so it ships as a local extension for Claude Desktop and a local MCP server for Claude Code.


Install

Option A: Claude Desktop (one click)

  1. Download task-handoff.mcpb (always the latest release).

  2. Double-click the file. Claude Desktop opens an install dialog. Alternatively, go to Settings → Extensions, then Advanced settings → Install Extension… and pick the file.

  3. Click Install.

  4. Optional: in the extension's settings, set Allowed directories (for example ~/code). The tools then refuse any repository outside those folders. Leave it empty to allow all.

  5. Make sure the extension is enabled. In a chat, open the tools menu (the slider icon under the message box) and check that Task Handoff Verifier is toggled on.

Option B: Claude Code

git clone https://github.com/Harmantaj/claude-task-handoff-mcp ~/.local/share/claude-task-handoff-mcp
claude mcp add --scope user task-handoff -- python3 ~/.local/share/claude-task-handoff-mcp/run_server.py

Check it's connected:

claude mcp get task-handoff

To restrict it to certain folders, append them as arguments, for example ... run_server.py ~/code ~/work.

Option C: any other MCP client

Run python3 /path/to/run_server.py [ALLOWED_DIR ...] as a stdio MCP server. Alternatively, pip install git+https://github.com/Harmantaj/claude-task-handoff-mcp provides a task-handoff-mcp command.


How to use it

Give the repository's absolute path, or just name the project and Claude will find it with find_repos.

1. Before the agent starts work, ask:

Use task-handoff start_task on /Users/me/code/shop with task "Cap discounts at 50%".

This records a baseline (current commit plus a fingerprint of files you already had uncommitted), so your own in-progress edits aren't blamed on the agent. The baseline is stored inside .git/ and never appears as a change.

2. Let the agent do the work (in the same chat or anywhere else).

3. Verify:

Use task-handoff verify_task on /Users/me/code/shop with claims ["Capped discounts at 50% in pricing.py", "All tests pass"].

Claude gets the report and should relay the verdict honestly. The Next prompt line is a ready-to-paste instruction for the agent's next round, such as fixing the failing test or adding the missing coverage.

Tip for Claude Code: add this to your project's CLAUDE.md so it happens automatically:

Before changing code, call task-handoff start_task for this repo. When done, call verify_task
with your claims and report its verdict verbatim. Do not claim success if it is not VERIFIED.

Buttons and dashboard in the Claude app

One-click actions. In Claude Desktop, click + under the message box, then choose Task Handoff Verifier:

Menu item

What it does

Verify my latest work

Checks the latest changes in a project (optionally named) and shows the report

Show handoff summary

Shows the last report without re-running checks

Projects dashboard

Lists all your projects with their last result

Start a task

Records a baseline before new work

Check setup

Makes sure git, Python and your project tools are ready

In Claude Code the same items are slash commands, such as /mcp__task-handoff__verify-work.

Interactive report card. In apps that support interactive tool results (MCP Apps), verification results appear as a card instead of plain text. It shows:

  • the verdict as a coloured tag

  • an evidence bar splitting the findings into verified, failed, claimed, inferred, not tested and blocked

  • each check, with failure output expanded

  • the changed files

  • the suggested next step

It has three buttons: Ask Claude to fix (sends the next step to the chat), Re-run checks and Copy next step.

Projects dashboard. Ask "open my projects dashboard" or use the menu item. You get every repo with its branch, uncommitted files and last verdict, plus Summary and Verify buttons on each row. Clients without MCP Apps support get the same information as text.

Automatic mode for Claude Code (every repo, no prompting)

Two Claude Code hooks make verification automatic in every git repository you open, including new ones:

  • Session start: records the baseline, so work you had in progress isn't attributed to Claude.

  • When Claude finishes a turn that changed code, it runs targeted checks only (no full-suite fallback, 120 s cap per check).

    • Failed: Claude is sent back once with the failing output to fix it, or to tell you plainly if the failure isn't from its change.

    • Otherwise: you see a one-line verdict.

    • Skipped: turns that changed nothing, or only docs.

    • Each Claude Code session keeps its own baseline, so two sessions in the same repo don't claim each other's work. Old session baselines are pruned automatically.

Add this to ~/.claude/settings.json (merge into any existing hooks). The path should point at your clone, and run_cli.py needs no install:

{
  "hooks": {
    "SessionStart": [{ "hooks": [{ "type": "command", "timeout": 30,
      "command": "python3 ~/.local/share/claude-task-handoff-mcp/run_cli.py hook session-start" }] }],
    "Stop": [{ "hooks": [{ "type": "command", "timeout": 600,
      "command": "python3 ~/.local/share/claude-task-handoff-mcp/run_cli.py hook stop" }] }]
  }
}

Optionally, add this rule to ~/.claude/CLAUDE.md: "Before claiming a coding task is done, call task-handoff verify_task with your claims and report its verdict verbatim. If the automatic check flags a failure your change did not cause, tell the user instead of fixing unrelated code."

To switch it off:

  • For one repo: put {"hooks": {"enabled": false}} in its .task-handoff.json.

  • Report only, never send Claude back: use {"hooks": {"block_on_failure": false}} instead.

  • Everywhere: set TASK_HANDOFF_HOOKS=0.

Claude Desktop chats have no hooks. There, Claude follows the extension's instructions when you ask it to verify.

Live Handoff pane in Claude Code

claude-mod/handoff-pane/ is a Claude Code mod that opens a Handoff pane beside every session (the Code tab of the Claude desktop app, or a fullscreen terminal). It is short by default:

  • What this project is: two plain-English sentences written from the README and CLAUDE.md, cached until those files change.

  • This session so far: goal, decisions, what changed and the current status. It is regenerated after each finished turn by a fork of the session's own conversation.

  • Changes and verification: the last saved verdict and its checks, the files changed since the session's baseline, and an Out of date warning when the code changed after the last check. The pane never re-runs checks. It reads them through the read-only task-handoff pane <repo> command and picks up new verify_task or Stop-hook results within a few seconds.

More detail expands every section into a full explanation:

  • the project's parts and how it is tested

  • the session's history, decisions and reasons, and the open questions

  • every check, with its evidence labels, risks and suggested next step

  • the code diff

The mod needs the automatic-mode hooks above, because it finds the task-handoff command through your Stop hook. It also needs function hooks, enabled with "CLAUDE_CODE_ENABLE_FUNCTION_HOOKS": "1" under env in ~/.claude/settings.json. To load it in every session, add the folder there too:

{ "env": { "CLAUDE_CODE_ENABLE_FUNCTION_HOOKS": "1",
           "CLAUDE_CODE_PLUGIN_DIRS": "~/.local/share/claude-task-handoff-mcp/claude-mod/handoff-pane" } }

Type /handoff to reopen the pane after closing it. The session summary is one extra model request per turn, mostly served from the prompt cache. The project summary uses Haiku once per README change.

Tools

Tool

Runs checks?

What it does

start_task(repo_path, task)

no

Record the baseline. Replaces any previous one.

inspect_task_state(repo_path)

no

Show changed files, categories, risk flags and the checks that would run

run_relevant_checks(repo_path, dry_run=false)

yes

Run just the selected checks

verify_task(repo_path, claims=[], notes="")

yes

Full verification plus claim cross-checking and the handoff report

summarize_handoff(repo_path)

no

Re-show the last report without re-running; marks it [STALE] if the repo changed since

find_repos(query="")

no

Find git repos on this computer (allowed directories or home folder), most recently active first, so people can name a project instead of giving a path

open_dashboard(limit=30)

no

All local projects with branch, uncommitted files and last verdict (interactive dashboard where supported)

check_setup(repo_path="")

no

Diagnose git, Python, node/npm, go, poetry, conda, plus the repo's interpreter and test dependencies, with exact fixes

All tools accept format: "json" for the full structured report.

Verdicts

VERIFIED · PARTIALLY VERIFIED (some evidence, gaps remain) · NOT VERIFIED · FAILED · NO CHANGES · NO EXECUTABLE CHANGES (docs or data only) · NOT VERIFIED (inspection only)

What gets checked

Only checks relevant to the changed files run. The full test suite is never run blindly.

Changed

Checks

Python (interpreter: in-repo venv → Poetry → pdm → hatch → conda/mamba env → pyenv .python-version → python3)

read-only syntax parse; pytest on tests matched by name (foo.py to test_foo.py). Full suite only if dependencies or conftest.py changed, or nothing matched (labelled as a fallback). ruff and mypy if configured.

JS/TS (nearest package.json)

typecheck script or tsc --noEmit, lint, vitest related / jest --findRelatedTests when possible, else test; build only when dependencies or config changed

Go

go vet and go test on the changed packages

Shell scripts

bash -n (parse only), plus shellcheck if installed

UI files or Playwright specs, when the repo already has playwright.config.*

playwright test on the changed specs and the specs whose names match changed components (specs are never handed to vitest/jest; a unit runner that finds no tests is NOT TESTED, not a pass)

It also flags risky changes: auth code, schema or migrations, dependencies, CI and build config, deleted files, credential-like files, possible secrets in added lines (reported by file and pattern name only, never the value), large diffs, and pre-existing uncommitted work that disappeared during the task.

Configuration (optional)

Put a .task-handoff.json in the repository root:

{
  "verification": { "timeout_seconds": 300, "max_parallel_checks": 3, "full_suite_fallback": true },
  "playwright": { "enabled": true, "run_all_when_untargeted": false },
  "report": { "max_files_listed": 25 }
}

Safety

  • Uses only read-only git commands. It never commits, pushes, resets, deletes or installs anything.

  • It does run your project's own tests and build scripts. Those can have side effects (network calls, writing files) if your test suite has them. Use Allowed directories to limit which repositories it can touch.

  • Checks run with stdin closed, CI=1, a timeout, and a process-group kill on timeout.

  • Secrets are redacted from all output that reaches the model.


Troubleshooting

Symptom

Fix

pytest is not installed for … (python3 on PATH) (BLOCKED)

The tool looks for the project's interpreter in this order: an in-repo .venv//venv/; the Poetry env (via poetry env info, or Poetry's cache dir if poetry isn't on PATH; honours POETRY_VIRTUALENVS_PATH/POETRY_CACHE_DIR); the conda env named in environment.yml (via prefix:, ~/.conda/environments.txt, or the usual miniconda/anaconda/miniforge/mambaforge/micromamba envs/ dirs); the pdm interpreter in .pdm-python; the hatch env (via hatch env find); the conda/mamba env named in environment.yml (via prefix:, ~/.conda/environments.txt, MAMBA_ROOT_PREFIX, or the usual miniconda/anaconda/miniforge/mambaforge/micromamba envs/ dirs); the pyenv version in .python-version; then python3 on PATH. The check's why shows which one was used. Create the env (e.g. poetry install, conda env create) with your test dependencies.

dependencies not installed (no node_modules …)

Run npm install (or pnpm/yarn) yourself. The tool never installs.

timed out after 120s

Raise verification.timeout_seconds in .task-handoff.json

npm is not installed in Claude Desktop but it works in a terminal

GUI apps get a minimal PATH. The server adds /opt/homebrew/bin, /usr/local/bin, ~/.local/bin, ~/.cargo/bin, ~/go/bin, ~/.bun/bin and ~/.volta/bin; tools installed elsewhere (e.g. via nvm) may not be found.

Extension shows an error in Claude Desktop

Check the MCP logs in ~/Library/Logs/Claude/ (mcp.log and any mcp-server-*.log). A healthy start logs [task-handoff] v0.x.y starting; python 3.x. The most common cause is no python3 on the system: install the Xcode Command Line Tools (xcode-select --install).

Everything is attributed to the task

No baseline was recorded. Call start_task before the work begins.


Development

python3 -m venv .venv && .venv/bin/pip install -e ".[dev]"
.venv/bin/python -m pytest -q
./scripts/build_mcpb.sh

The tests build real temporary git repositories for every scenario in docs/TESTING_STRATEGY.md and drive the real server over stdio with the official MCP client. The last command writes dist/task-handoff-<version>.mcpb and needs Node.

Layout: task_handoff/gitstate.py (baseline and attribution), impact.py (categories and risks), checks.py + playwright_adapter.py (check selection), runner.py (execution), handoff.py (evidence, verdict, report), protocol.py (stdlib MCP stdio server), server.py (tools). The original design spec is in docs/.

License

MIT

Available Tools

8 tools
check_setupA
Read-only

Diagnose the local setup: git, Python, node/npm, go, poetry, conda and other tools the checks use, plus (given repo_path) which interpreter that repo's checks would use and whether its test deps are installed. Returns exact fixes for anything missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
repo_pathNoOptional repository to diagnose.

TDQS

A4.1/5.0
Behavior4/5

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

readOnlyHint=true already signals a safe read, and the description adds genuine behavioral context beyond that: it is a diagnostic that reports absence vs presence, scopes itself to the checks' toolchain, and promises 'exact fixes for anything missing.' It does not contradict the annotation.

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?

One dense sentence that front-loads the core action and appends the conditional repo_path behavior. Efficient with no filler, though the enumeration of toolchains makes it slightly heavy to parse on first read.

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?

With no output schema, the description does the right amount of work: it names the scope of diagnosis and the shape of the result ('exact fixes for anything missing'). An agent knows what it will get and when the repo_path variant applies.

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

Parameters4/5

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

The single optional parameter is fully documented in the schema, and the description goes further by explaining what repo_path actually changes: which interpreter the repo's checks would resolve and whether its test deps are installed. That adds decision-relevant meaning beyond the schema string.

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?

States a specific verb ('Diagnose') and resource ('the local setup'), then enumerates exactly what is inspected: git, Python, node/npm, go, poetry, conda, plus repo-specific interpreter and test-dependency status. This is clearly separable from siblings like find_repos or run_relevant_checks.

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 intent (pre-flight environment diagnosis) is implied by 'the checks use' and the repo_path behavior, but the description never says when to call this versus run_relevant_checks or start_task, nor does it state any when-not conditions. Usage must be inferred.

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

find_reposA
Read-only

Find git repositories on this computer (inside the allowed directories, or the home folder), most recently active first. Use it when the user names a project ('my shop app') instead of giving a path.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryNoCase-insensitive part of the repo path, e.g. 'shop'. Empty lists all.

TDQS

A4/5.0
Behavior4/5

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

Annotations only declare readOnlyHint and a title, so the description carries the rest: it discloses the search scope (allowed dirs or home folder) and the result ordering (most recently active first). It stops short of stating anything about pagination/limit behavior or how deep the filesystem is walked.

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?

Two sentences, zero filler, with the scope/ordering fact front-loaded and the usage cue second. Every clause earns its place.

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?

No output schema exists, so the description must convey enough on its own; combined with the schema it covers what the tool does, where it searches, and how results are ordered. Minor gaps remain around result shape and whether the limit is honored across directories, but nothing essential to invocation is missing.

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?

At 50% schema coverage only 'query' is documented in the schema; 'limit' is undocumented. The description adds no parameter detail at all, but the undocumented param (an integer with default 20, max 50) is largely self-explanatory, so the baseline of 3 is appropriate rather than a penalty.

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?

States a specific verb and resource ('Find git repositories') plus scope ('on this computer, inside the allowed directories or the home folder') and ordering ('most recently active first'). It doesn't need to differentiate from siblings, which are unrelated task tools, so it stops short of a 5 only in that it doesn't frame the result set (e.g. what a 'repo' entry contains).

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?

Gives an explicit trigger with a contrasting alternative: use it when the user names a project ('my shop app') rather than supplying a path. That is clear when-to-use guidance, but it names no sibling tool to route against and states no exclusions beyond the path case.

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

inspect_task_stateA
Read-only

Read-only snapshot: files changed since the baseline (excluding pre-existing edits), impact categories, risk flags, and which checks would be selected. Runs nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNomarkdown (compact handoff) or json (full structured report).markdown
repo_pathYesAbsolute path to (a directory inside) the git repository.

TDQS

A4/5.0
Behavior4/5

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

With readOnlyHint already declared, the bar is lower, yet the description still adds real behavioral nuance: the baseline excludes pre-existing edits, and the tool executes nothing. It doesn't cover permission requirements or performance characteristics, but the baseline semantics are a meaningful addition.

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 dense sentence that front-loads the read-only nature and enumerates the return contents; every clause earns its place with zero padding.

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?

No output schema exists, so the description correctly enumerates what comes back (files, categories, flags, selected checks). It stops short of explaining the format parameter's rendering difference, but that is already in 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 100%, so both parameters (repo_path and format enum) are already documented in the schema. The description adds no parameter detail, which is the correct baseline when the schema does the heavy lifting.

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?

States a specific verb+resource ('Read-only snapshot' of task state) and enumerates exactly what the snapshot contains: changed files, impact categories, risk flags, and selected checks. 'Runs nothing' cleanly separates it from the sibling run_relevant_checks.

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 purpose strongly implies when to use it (inspect state before executing checks), and 'Runs nothing' hints at the alternative, but no explicit when/when-not or sibling routing guidance is given.

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

open_dashboardB
Read-only

Show all local git projects (allowed directories or home folder) with branch, uncommitted changes and the last verification verdict, as an interactive dashboard with Verify and Summary buttons.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

TDQS

B3.2/5.0
Behavior4/5

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

readOnlyHint=true already establishes a safe read, and the description adds real behavioral context beyond it: the scoping ('allowed directories or home folder'), the exact fields surfaced, and that Verify/Summary actions are exposed from the view. It stops short of explaining what those buttons do or whether opening triggers any computation.

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?

One dense sentence with no filler, and the core resource ('local git projects') is front-loaded. The enumerated fields add value rather than padding.

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 one undocumented parameter, the description covers what the dashboard shows and where it searches, but leaves the limit semantics and the effect of the Verify/Summary buttons unexplained. Adequate but with clear gaps for a tool that exposes actions.

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?

The single 'limit' parameter has 0% schema description coverage and is never mentioned in the description; in fact 'all local git projects' is in mild tension with a default limit of 30. The description does not compensate for the schema 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 names a concrete verb ('Show') and resource (all local git projects) and enumerates the payload shown: branch, uncommitted changes, last verification verdict, plus interactive Verify/Summary buttons. It reads as a distinct dashboard surface, though it never explicitly contrasts itself with find_repos or verify_task.

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?

There is no statement of when to open the dashboard versus siblings like find_repos (list repos), run_relevant_checks, or verify_task. The 'interactive dashboard' framing implies a human-facing overview, but no context or exclusions are given.

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

run_relevant_checksA

Select the cheapest meaningful checks for the changed files (syntax, lint, typecheck, targeted tests, build when deps/config changed, Playwright for UI changes if configured) and run them. Never installs anything. dry_run=true only lists the selection.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNomarkdown (compact handoff) or json (full structured report).markdown
dry_runNo
repo_pathYesAbsolute path to (a directory inside) the git repository.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, but the description adds a strong and valuable constraint: 'Never installs anything', which materially bounds what the agent should expect side-effects-wise. The dry_run listing behavior is also disclosed. It does not describe artifacts written or failure/timeout behavior, so it stops short of a 5.

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?

Two dense sentences with the core action front-loaded and the check-selection policy in a parenthetical; no filler, no restatement of the title.

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?

With no output schema, the format parameter (markdown handoff vs json report) is covered by the schema, and the description supplies the execution policy and no-install guarantee. It could say more about what happens on check failure or how results are reported, but an agent has enough to invoke it correctly.

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

Parameters4/5

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

Schema coverage is 67%, and the description meaningfully augments the undocumented dry_run parameter by explaining it only lists the selection. The remaining parameters (repo_path, format) are covered by the schema descriptions, so the description adds real value on top rather than repeating.

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?

States a specific verb-and-resource action: selecting and running the cheapest meaningful checks for changed files, and enumerates the check categories (syntax, lint, typecheck, targeted tests, build, Playwright). This is clearly distinguishable from siblings like find_repos, check_setup, or verify_task, which do not run checks.

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?

Gives conditional selection context ('build when deps/config changed', 'Playwright for UI changes if configured') and explains that dry_run=true only lists the selection. However, it never states when NOT to use this tool or names an alternative among the siblings, leaving the alternative-routing gap.

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

start_taskA

Record a baseline before starting work: HEAD plus fingerprints of files that are already dirty, so later verification attributes only the task's own changes. Overwrites any previous baseline for the repository. Writes only inside the .git directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
taskYesShort description of the task about to be done.
repo_pathYesAbsolute path to (a directory inside) the git repository.

TDQS

A4.1/5.0
Behavior5/5

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

Annotations only declare it is a non-read-only, non-destructive operation. The description adds materially useful behavior beyond that: it overwrites any previous baseline for the repository, scopes writes to inside the .git directory, and explains what is captured (HEAD plus dirty-file fingerprints). These are exactly the side-effect details an agent needs before calling a mutating tool.

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?

Three compact sentences, all front-loaded: purpose first, then the overwrite side effect, then the write scope. No filler and nothing that restates the name or annotations.

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 two-parameter tool with annotations covering the safety profile, the description provides the essential behavioral caveats. The only gap is that, with no output schema present, the agent gets no hint of what the call returns (e.g., the recorded baseline identifier), which is minor here.

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 coverage is 100%, so both repo_path and task are already documented in the schema. The description adds no extra syntax, format, or constraint detail for either parameter, so the baseline 3 applies.

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: record a baseline (HEAD + fingerprints of dirty files) before starting work. It clearly frames the tool's role in the verify workflow, which implicitly separates it from verify_task and inspect_task_state, though no sibling is named explicitly.

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?

It states the trigger condition precisely ('before starting work') and explains why (so later verification attributes only the task's own changes), which tells the agent where this fits relative to verification tools. It does not explicitly name an alternative tool or a when-not-to-use case.

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

summarize_handoffA
Read-only

Return the last verification report without re-running checks. If the repository changed since then, the report is marked stale and a fresh inspection-only report is returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
formatNomarkdown (compact handoff) or json (full structured report).markdown
repo_pathYesAbsolute path to (a directory inside) the git repository.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=true, so the description carries the interesting burden and delivers: it discloses the stale-report behavior and the fallback to a fresh inspection-only report. This is meaningful behavioral context beyond the safety hint, though return shape/pagination remain unstated.

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?

Two tight sentences, front-loaded with the core action and immediately followed by the conditional edge-case behavior. No filler; each clause earns its place.

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 read-only tool with no output schema, the description adequately explains the return behavior (stale marking, inspection-only fallback) and the schema covers the two params. Minor gap: it doesn't clarify the 'stale' semantics that would appear in the returned report.

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 100%, so both params (format enum and repo_path) are already documented in the schema. The description adds no additional parameter meaning, so the baseline 3 applies.

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?

States a specific verb ('Return') and resource ('the last verification report') and distinguishes itself implicitly from siblings like run_relevant_checks and verify_task via 'without re-running checks.' It does not name an alternative sibling outright, keeping it just 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 Guidelines3/5

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

'Without re-running checks' implies the use case (recovering a prior report rather than generating a new one), which hints at when to prefer this over run_relevant_checks. However, there is no explicit when-to-use/when-not guidance and no sibling is named.

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

verify_taskA

Full pipeline: inspect changes, run relevant checks, cross-check the agent's claims, and return a compact evidence-labelled handoff with a verdict and a suggested next prompt.

ParametersJSON Schema
NameRequiredDescriptionDefault
notesNoOptional free-text notes to include in the handoff.
claimsNoStatements about the work to check, e.g. 'fixed login redirect in auth.py'.
formatNomarkdown (compact handoff) or json (full structured report).markdown
repo_pathYesAbsolute path to (a directory inside) the git repository.

TDQS

A3.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false and destructiveHint=false; the description explains why it is not read-only by noting it 'run[s] relevant checks', which resolves a potential ambiguity. It also discloses the output shape (evidence-labelled handoff, verdict, suggested next prompt), which the annotations do not cover. It does not contradict 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.

Conciseness4/5

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

A single front-loaded sentence enumerating the pipeline stages with no filler. Efficient and appropriately sized, though the dense clause list is not broken up for scannability.

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?

With no output schema, the description usefully characterizes what is returned (compact handoff, verdict, next prompt), filling the return-value gap. For a complex pipeline tool with four fully documented parameters, little is missing beyond explicit sibling routing.

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 100%, so the schema already documents repo_path, claims, notes, and format. The description only obliquely references 'the agent's claims' and adds no syntax, format, or default details beyond the schema. Baseline 3 is appropriate.

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 specific verbs and resources: inspect changes, run checks, cross-check claims, and return a handoff with a verdict. Calling itself a 'Full pipeline' distinguishes it from the piecemeal siblings (run_relevant_checks, summarize_handoff) implicitly. It stops short of explicitly naming those siblings, so it is clear but not fully differentiated.

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 'Full pipeline' framing implies this is the end-to-end option versus the granular siblings, but there is no explicit when-to-use/when-not guidance or named alternative. The agent must infer that this bundles inspect_task_state, run_relevant_checks, and summarize_handoff.

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. 1 tool updatev0.6.0
    • Addedopen_dashboard
  2. 7 tool updatesv0.3.0
    • First observedcheck_setup
    • First observedfind_repos
    • First observedinspect_task_state
    • First observedrun_relevant_checks
    • First observedstart_task
    • First observedsummarize_handoff
    • First observedverify_task

TDQS

A3.9/5.0

Scored across 8 tools

Disambiguation4/5

Most tools target distinct phases (setup, discovery, baseline, inspection, verification reporting), but verify_task's full pipeline overlaps with the combined inspect_task_state + run_relevant_checks, and summarize_handoff vs inspect_task_state vs verify_task all touch reporting similarly. Descriptions do distinguish them, so an agent can usually choose correctly.

Naming Consistency5/5

All eight tools use consistent snake_case with a leading verb (open_, check_, find_, inspect_, run_, start_, summarize_, verify_). No camelCase or style mixing, and the pattern is predictable.

Tool Count5/5

Eight tools is well-scoped for a task-handoff verification workflow, with each tool earning its place across discovery, setup, baseline, inspection, checks, and reporting.

Completeness4/5

The surface covers the full lifecycle: discovery (find_repos), environment (check_setup), baseline (start_task), inspection (inspect_task_state), checks (run_relevant_checks), and verification/reporting (verify_task, summarize_handoff, open_dashboard). Minor gaps like explicit baseline reset or history beyond the last report are workable given start_task overwrites baselines.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Enables verification of AI coding agent self-reports against git diff truth and a deterministic gate, producing pass/regenerate/reject directives to ensure claimed work matches actual changes.
    6
    AGPL 3.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables an external AI agent to delegate tasks to a local Claude Code installation and receive structured reports, with code modifications governed by a plan-approval-execution workflow and direct file and git operations available outside that loop.
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Audits coding agents' claimed actions against the actual Git working tree, blocking completion if any claimed changes are unverified.
    2
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI coding agents to submit work for external review before declaring a task done, receiving evidence-backed fix lists and verdicts based on git-measured changes and calibrated quality scoring.
    3
    MIT