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.

  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: DevInsight MCP

Requirements

  • macOS or Linux

  • git and Python 3.9+ available as python3 (macOS: included with the Xcode Command Line Tools)

  • 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.

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

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 env → conda env → 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, when the repo already has playwright.config.*

playwright test on the specs whose names match changed components

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); 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. pyenv/hatch/pdm envs outside the repo are not detected.

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

7 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.

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. 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

A4.1/5.0

Scored across 7 tools

Disambiguation4/5

Most tools have clearly distinct purposes: start_task sets a baseline, inspect_task_state only reads, run_relevant_checks runs checks, and find_repos/check_setup are niche utilities. verify_task is a full pipeline that composes inspect and run, which creates a mild subset relationship, but its description makes the orchestration role explicit.

Naming Consistency5/5

All tool names follow a consistent snake_case verb_noun pattern (start_task, verify_task, find_repos, check_setup) with occasional modifiers (inspect_task_state, run_relevant_checks). The convention is predictable throughout.

Tool Count5/5

Seven tools is well-scoped for a task handoff verifier: it covers setup, discovery, baseline creation, inspection, check execution, verification, and summarization without redundancy or bloat.

Completeness4/5

The surface covers the core lifecycle from baseline to verification and handoff, including environment diagnostics and repo discovery. Minor gaps exist around baseline management (e.g., no explicit clear or list of baselines) and check customization, but these are workable via overwrite and rerun.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers