fcop-mcp
Summary: FCoP is a file-based multi-agent coordination MCP server — it initializes project workspaces, moves TASK/REPORT/ISSUE/REVIEW records through a directory-based lifecycle, and audits governance compliance, all on plain Markdown + YAML frontmatter in your project (no database, queue, or API key).
Bootstrap & status —
set_project_dirre-binds the session root without editing config;fcop_report(mandatory first call) shows init/UNBOUND state, role template, versions and rule drift;fcop_checkaudits git-working-tree drift and one-session-multi-role impersonation; plusget_team_status,list_workspaces,check_update,upgrade_fcop.Initialize a project —
init_project(presetdev-team/media-team/mvp-team/qa-team),init_solo,create_custom_team+validate_team_configdry-run,get_available_teams,deploy_role_templates,new_workspace(slugged work cage),drop_suggestion(sanctioned agent pushback).Task lifecycle — create (
create_task/write_task, with priority, risk level, slots, broadcast), read/list/inspect (read_task,list_tasks,inspect_taskgrammar validation), then transition:claim_task(inbox→active),submit_task(active→review),finish_task(active→done),approve_task/reject_task(review→done/active),archive_task,archive_to_history,bulk_archive_to_history, andlist_history/read_history_task.Deliverables & blockers —
write_report/list_reports/read_reportfor completion evidence,write_issue+list_issuesfor problems with severity levels.Reviews & human escalation —
write_review(approved/rejected/needs_changes/abstained/needs_human),list_reviews,read_review, andmark_human_approvedto close aneeds_humanescalation loop.Governance & compliance —
fcop_auditdeep compliance scan with a remediation Execution Block,list_governance_events/get_governance_summary(tool-call risk classification),fcop_list_alerts/fcop_create_alert(ADMIN drift inbox), andredeploy_rules(ADMIN-only rule refresh to.cursor/rules/*.mdc,AGENTS.md,CLAUDE.md).Guardrails — tools are tiered: read-only L0/L2 vs
binding_requiredL1/L3 writers; approvals, rejections, rule redeploys and alert filing are ADMIN/issuer-authority operations, not role names an agent can self-claim.Version note — this exposed schema is the older v3-era catalog (
docs/agents/,fcop.json,_lifecycle/*, ~44 tools), which does not match the README's 4.0.5 release (25 canonical tools / 6 read-only resources,fcop/workspace,init_workspace, branch merge tooling); legacy tools likefinish_taskare described there as rejecting v4 workspaces.
FCoP — File-based Coordination Protocol
Let multiple agents work as a team. Keep tasks and deliveries in files.
New session, same project explanation? An agent says “done”, but where is the delivery record? FCoP keeps assignments, results, problems and reviews in your project's Markdown files, so people and the next agent can inspect the work and continue.
Multi-agent collaboration · Files as protocol · No complex infrastructure · Agent governance
协议原文:中文 · Specification: English · English · 简体中文 · Homepage
PyPI · fcop · MCP · fcop-mcp · MIT · Zenodo & citation
Run the minimal example · Connect Cursor / Codex · Installation FAQ
What do you get?
Your question | The record FCoP keeps |
Who is doing what? | TASK: assignment, sender, recipient and current state |
“Done”—where is the result? | REPORT: delivery description and evidence references |
What is blocked? | ISSUE: problems, blockers and context |
Who checked it? Is it ready to hand over? | REVIEW: review findings and decisions |
These files live in your project. Open them in an editor, inspect them with tools, and track suitable records in Git. Coordination records need no separate Redis, message queue or database. Agents keep using familiar clients such as Cursor and Codex.
Even when an agent is gone, the work remains.
Related MCP server: ToolSmith Agent MCP Server
Understand it in 30 seconds: you set the goal, PM leads
You are ADMIN, working with PM. PM breaks down the goal and assigns tasks to DEV, QA and OPS. Members execute and deliver reports; PM consolidates the results and reports back to you. Agents do not chat with each other; they collaborate through files.
The filename identifies a task or report, its header names sender and recipient, and its directory expresses task state. Agents follow the protocol to find their work, read the task, execute and report. This illustrates a PM-led team workflow; see file formats and version differences when needed.
Run a minimal example
PM assigns a text conversion to DEV, QA checks the actual result, and PM reads both reports before summarizing for ADMIN. The script uses independent clients to simulate three roles sequentially. No model or API key required. You need Python 3.10+ and Git.
git clone https://github.com/joinwell52-AI/FCoP.git
cd FCoP
python -m pip install "fcop==4.0.5"
python examples/team_workflow.py --output ./demo-runsOpen the workspace path printed by the script. You will find:
Files retained | Who hands work to whom |
3 TASKs | ADMIN → PM; PM → DEV; PM → QA |
3 REPORTs | DEV → PM; QA → PM; PM → ADMIN |
1 REVIEW | QA's assessment of the actual result |
Open PM's summary and follow the files to the member deliveries and QA's check. The example completes delivery and keeps tasks in review, awaiting formal acceptance.
Full example code · Session handoff: English · 中文
Four questions before installation
1. Why should I install FCoP?
If you divide work among agents or often resume a project in a new session, FCoP gives tasks, deliveries and reviews a shared file record. The next person or agent can check progress with less manual reconstruction and retelling.
2. Do I import FCoP into my application code?
Usually no. Ordinary projects use the CLI and MCP; developers building their own integrations can use from fcop import Project.
3. Should I install it in Codex, Cursor or another agent client?
Yes. Configure fcop-mcp so your agent can create and claim tasks, submit reports, and record issues and reviews. It currently provides 25 Canonical MCP Tools / 6 read-only Core Resources.
4. What changes immediately after installation?
After connection, the client lists FCoP tools. Initialization creates <project>/fcop/. Execute a first task to get real TASK and REPORT files you can open. The example above also leaves QA's assessment and PM's summary.
Ask your AI to install FCoP
Paste this into Cursor Agent, Codex, or another coding agent with terminal and file access. The agent handles setup and checks the result.
Install FCoP for the coding client and project I am using. Follow:
https://github.com/joinwell52-AI/FCoP/blob/main/docs/ai-install.md
Run the environment checks, installation, configuration and verification yourself. Preserve my existing configuration and project state. Report what actually works; ask me only for a missing client/project choice or a required approval/reload.MCP: give agents access to FCoP
python -m pip install "fcop==4.0.5" "fcop-mcp==4.0.5"
fcop toolsConfigure a server in a client supporting local stdio MCP. This is a generic JSON example; see the AI installation guide for Codex-specific configuration.
{
"mcpServers": {
"fcop": {
"command": "/absolute/path/to/python",
"args": ["-m", "fcop_mcp"],
"env": {
"FCOP_PROJECT_DIR": "/absolute/path/to/my-project"
}
}
}
}Replace the absolute paths with your Python interpreter and project path; forward slashes work on Windows. Reconnect and check the tool list, then follow the installation guide to initialize the project, adopt team rules and execute a task.
Full installation and client configuration
Historical 4.0.3 Cursor connection: 49 tools, 12 resources. The current 4.0.5 catalog has 25 tools and 6 read-only resources.
In use: CodeFlowMu
CodeFlowMu uses FCoP in a PM, DEV, QA and OPS development team, providing client integration, execution and progress views. It is distributed as a proprietary preview; FCoP's protocol and tools are MIT open source and independently usable.
FCoP is one approach to multi-agent collaboration, for teams that want tasks and deliveries to stay in local files.
Want to try it in your next multi-agent project? Star FCoP to keep it handy.
CLI — Local Setup, Inspect & Diagnose
CLI = Setup + Observe + Diagnose; MCP = Work.
Command | Purpose |
| Initialize an FCoP workspace |
| View workspace status |
| Inspect TASK / REPORT / ISSUE / REVIEW |
| Validate protocol structure |
| Inspect the installed MCP Tool Catalog |
| Diagnose installation, environment and compatibility |
| Show installed versions |
| Show specification / rule identity |
| Explicitly migrate a legacy workspace; inspect the plan before apply |
Install & Verify
In an activated Python 3.10+ environment:
python -m pip install fcop
fcop version
fcop doctor
fcop init --root ./my-project
fcop status --root ./my-project
fcop validate --root ./my-projectFor the optional MCP Tool Catalog:
python -m pip install fcop-mcp
fcop tools
fcop tools merge_branches --jsonOnce installed, the CLI can initialize, inspect, validate and diagnose locally and offline.
doctor does not access the network or modify Host configuration. Package installation itself may need a package index; offline installation requires locally available packages.
The CLI does not perform create_task, approval, Branch, merge or authorization work operations; use MCP or the Python API for those.
Installing fcop does not create Host instruction files. Normal v4 workspace state belongs in <project>/fcop/, never in project-root AGENTS.md, CLAUDE.md or Cursor rules.
Existing atomic initialization staging and failed-initialization evidence are preserved; customer files are never cleaned up automatically.
migrate is a separate explicit legacy operation, not an automatic package-upgrade step.
tools requires the optional MCP package and never starts a server or installs it automatically.
Reference, when you need it
How do files carry the protocol?
Files have agreed types, identities, senders, recipients and contents. Agents use those conventions to identify their work. Filenames, directories and file headers have distinct responsibilities.
Surface | What it tells you |
Filename | Record type and identity; legacy names also contain sender and recipient roles |
Directory | Whether a task is in inbox, active, review, done or archive |
File header | Workspace, sender, recipient, task relationships and evidence identity |
Markdown body | Assignment, delivery, problems and review reasoning |
An intuitive filename-routing example (Legacy v1–v3): TASK-20260915-001-PM-to-DEV.md is a task from PM to DEV; REPORT-20260915-001-DEV-to-PM.md is a report from DEV to PM. An agent with an assigned role can identify incoming files from the naming convention.
The current 4.0 implementation: new tasks live at fcop/_lifecycle/inbox/TASK-<uuid>.md, with sender: PM and recipient: DEV in the file header. The agent or caller reads the task fields and selects work for its established role. A filename-only search for to-DEV will not work because v4 names do not contain that segment. Reports live at fcop/reports/REPORT-<uuid>.md, with subject_ref and attempt_id linking the task and its execution attempt.
These placeholders explain layout; they are not complete runnable envelopes. Consult the 4.0 specification (English · 简体中文), current creation implementation and legacy filename grammar for the exact contracts.
Choose how to install
Use | Install | Purpose |
Standalone CLI |
| Initialize, inspect, validate and diagnose a project |
Python integration |
| Call the |
MCP in an agent client |
| Give agents in Codex, Cursor and other clients collaboration tools |
Source development | This repository and its | Modify, debug or contribute to the reference implementation |
CLI and Python: one package
python -m pip install "fcop==4.0.5"
fcop version
fcop doctor
fcop init --root ./my-project
fcop status --root ./my-projectPython developers can then use from fcop import Project; see the complete example in the manual reference. Ordinary users do not need to import FCoP into application code.
MCP: give agents access to FCoP
python -m pip install "fcop==4.0.5" "fcop-mcp==4.0.5"
fcop toolsConfigure a server in a client supporting local stdio MCP. This is a generic JSON example; see the AI installation guide for Codex-specific configuration.
{
"mcpServers": {
"fcop": {
"command": "/absolute/path/to/python",
"args": ["-m", "fcop_mcp"],
"env": {
"FCOP_PROJECT_DIR": "/absolute/path/to/my-project"
}
}
}
}Replace command with the absolute path to the Python interpreter containing both packages, and set your project directory. Windows paths can use forward slashes. Reconnect the client to see 25 Canonical MCP Tools and 6 read-only Core Resources. Project initialization and team-rule adoption are separate steps; connecting MCP does not create a PM-led team or launch other agents.
Install from source
git clone https://github.com/joinwell52-AI/FCoP.git
cd FCoP
python -m pip install -e .
python -m pip install -e ./mcp
fcop versionThe official installation route uses the Python packages above. This guide does not prescribe an unverified npm package or Node SDK. Node.js and other languages can integrate through an MCP client or implement the protocol themselves.
Implement the protocol yourself
You can build conforming tools from the formal specification (English · 简体中文) without using the Python reference implementation. Creating a few directories is not sufficient: field, transition, evidence, authorization, idempotency and recovery contracts must also be met. With the official toolkit, use fcop init to create the workspace.
macOS (Intel and Apple silicon): install CLI and MCP
FCoP supports macOS on both Intel and Apple silicon. The published wheels are platform-independent; Rosetta is not required. Use Python 3.10–3.13. The CLI works directly in Terminal, while MCP additionally requires a client that supports local stdio servers, such as Codex or Cursor.
Create a dedicated environment and install the matching Core/MCP pair:
python3 --version
python3 -m venv ~/.local/share/fcop/venv
~/.local/share/fcop/venv/bin/python -m pip install --upgrade \
"fcop>=4.0.5,<4.1.0" \
"fcop-mcp>=4.0.5,<4.1.0"Verify the CLI and installed MCP catalog:
~/.local/share/fcop/venv/bin/fcop version
~/.local/share/fcop/venv/bin/fcop doctor
~/.local/share/fcop/venv/bin/fcop tools --jsonThe installed CLI provides all nine commands listed below: init, status, inspect, validate, tools, doctor, version, spec, and migrate. CLI setup and inspection do not require an MCP-capable AI client.
For MCP, configure the client with absolute macOS paths; do not use ~ inside client configuration:
{
"mcpServers": {
"fcop": {
"command": "/Users/YOUR_NAME/.local/share/fcop/venv/bin/python",
"args": ["-m", "fcop_mcp"],
"env": {
"FCOP_PROJECT_DIR": "/Users/YOUR_NAME/path/to/your-project"
}
}
}
}Replace YOUR_NAME and the project path, then restart or reconnect the MCP client. FCOP_PROJECT_DIR points to the project that will use FCoP, not to this source repository.
4.0.1 introduced create_branch, inspect_family and merge_branches;
4.0.5 exposes 25 canonical MCP tools and 6 read-only Core resources. Core owns atomic convergence,
durable idempotency and recovery. Unfinished families return family_digest: null,
merge_ready: false and structured reasons. The caller supplies the semantic conclusion.
See the Branch merge contract and example / 中文合同.
Try it: create once, read from another client
In an activated Python 3.10+ virtual environment, install the published library:
python -m pip install "fcop==4.0.5"Save this as demo.py and run python demo.py. It writes a real TASK, opens the workspace through a fresh Project instance, then retries the original request.
from pathlib import Path
from tempfile import TemporaryDirectory
from fcop import Project
with TemporaryDirectory(prefix="fcop-demo-") as directory:
root = Path(directory) / "workspace"
project = Project(root)
workspace = project.create_workspace(protocol_version="4.0")
request = dict(
workspace_id=workspace["workspace_id"],
operation_id="demo-create-1",
sender="author", recipient="worker",
subject="Inspect this handoff",
body="Read the task and check the evidence before accepting delivery.",
)
first = project.create_task(**request)
next_client = Project(root)
state = next_client.inspect_state(task_id=first["task_id"])
retry = next_client.create_task(**request)
assert Path(state["path"]).is_file()
assert retry["existing"] and retry["task_id"] == first["task_id"]
print("State read from disk:", state["stage"])
print("Same task after retry:", retry["task_id"] == first["task_id"])State read from disk: inbox
Same task after retry: TrueThe example cleans up its temporary directory when it exits. Use your own project directory to retain the files. Retrying create_task with the same operation_id and normalized payload reuses its durable result; changing the payload is a conflict. This guarantee is specifically for task creation.
Continue with the 4.0 setup and version guide for a lasting workspace, lifecycle operations and the authorization needed to complete a task.
Give your agent the same operations through MCP
The optional adapter exposes FCoP to an MCP-capable client over stdio. Install it in the same activated environment:
python -m pip install "fcop==4.0.5" "fcop-mcp==4.0.5"Add this entry to the client's MCP configuration. Replace both absolute paths; on Windows the command ends in .venv/Scripts/fcop-mcp.exe.
{
"mcpServers": {
"fcop": {
"command": "/absolute/path/to/.venv/bin/fcop-mcp",
"env": {"FCOP_PROJECT_DIR": "/absolute/path/to/new-workspace"}
}
}
}In 4.0.5, initialize a new workspace with init_workspace(). Use its workspace_id and a unique operation_id with create_task, then inspect the TASK with inspect_task(task_id=...). Team/Solo/ME, seats, and Host session assignment are outside Base Protocol.
25 Canonical MCP Tools + 6 read-only Core Resources. The adapter routes to the same Python Core. Default initialization has no trusted authorization Profile: creation, claim and submission are available, but acceptance, rejection, reopening and archival need an explicitly adopted Profile and an issuer evaluator registered by the trusted host. A role name typed into a request cannot supply that authority. See the 49-to-25 migration guide for older clients.
MCP tool reference · Stable external Python example · Stable external MCP example. The full examples include an educational Profile; a real deployment must supply its own trust policy.
The 4.0 specification defines FCoP as a file-native agent behavior-governance protocol: files carry protocol, paths express current state, and events record transition history.
Roles such as PM, DEV, QA and OPS in dev-team come from a Team/Profile. The host adopts team rules; MCP supplies tools while the host runs and schedules models. Formal acceptance, rejection, reopening and archiving require an adopted Profile and trusted host authorization. Concurrent application-code changes need workspace isolation and integration review.
From a delivery claim to an accepted result
Each TASK follows an ordered lifecycle. In 4.0, entering active starts a new attempt, and submission links that attempt's REPORT. Acceptance then binds the review and authorization to the current evidence.
active → done is absent from 4.0. Reopening through reopen_task creates a new attempt for ordinary tasks as well as Branches. An old REPORT cannot satisfy a new attempt's submission gate. See the complete lifecycle and C1–C8 contracts · 中文规范.
Parallel work, with an explicit way to finish
Multiple ordered workflows can advance concurrently. A Branch is an ordinary TASK linked to one Root by branch_of; sibling Branches keep their own attempts, reports and reviews. Your Runtime decides who runs them and when.
Before a Root with Branches can be archived, FCoP checks completed Branches, their current REPORTs, a matching family_digest, a convergence REVIEW and separate Root archive authorization. A reopened Branch or changed REPORT invalidates stale convergence. Related writes share a short commit boundary; agents do not hold that lock while doing their work. This closes an evidence set; code integration remains the application's responsibility.
A small protocol inside a larger agent system
Another implementation should be able to preserve the same work semantics without copying a particular Python library, MCP tool list or product.
Layer | Responsibility |
Core | C1–C8: identity, envelopes, lifecycle, relations, convergence, authorization, create idempotency and atomic recovery. |
Specification | Define the fields, state transitions, errors and observable behavior. |
Conformance | Check implementations against those contracts using fixtures, vectors and behavioral tests. |
Toolkit | Implement and expose the protocol; this repository supplies Python and the MCP adapter. |
Profile | Supply organizational policy and issuer authority; fixed PM/DEV/QA roles are not universal Core rules. |
Runtime | Run models and tools, manage sessions, schedule work and provide the user interface. |
Read the design explanation: English · 简体中文. It develops the reasoning behind files, separate delivery and acceptance, parallel work, and the boundaries between FCoP, MCP and a Runtime.
Architecture principles: five full essays in Chinese, published September 10, 2026 and revised against 4.0:
Series guide (中文) · All five essays (中文)
4.0.5 distributes nine bilingual rule modules through package-owned and MCP resources, with strict manifests and sequential, parallel and separate repository-development assemblies. Install → connect MCP → initialize workspace → use FCoP. FCoP owns <project>/fcop/, not project-root Host instruction files. Host projection, adoption, deployment and rollback are retired; redeploy_rules is Legacy v1–v3 only and rejects v4 with zero writes. Existing customer files stay unchanged. Rule resources / 规则资源.
Current Python packages: 4.0.5. Latest GitHub Release: 4.0.3. — 4.0.3 release. This repository contains the open protocol, the fcop Python implementation and the optional fcop-mcp adapter. Python 3.10+; no model API key is needed for the local example.
Discover FCoP: MCPServers introduction (简体中文) — a third-party directory for discovering and learning about FCoP. Registration details: Official MCP Registry — the server identifier, version and package metadata.
Papers, evidence and citation
These resources are directly accessible; reading the essay collection is optional.
Resource | Read or cite |
4.0.5 software archive | Zenodo DOI 10.5281/zenodo.23051275 · Citation metadata — source commit |
FCoP 4.0 preprint (1.0) | FCoP: A File-Based Coordination Protocol for Governed Multi-Agent Systems — experiments and supplement use the frozen 4.0.3 implementation |
4.0.3 software archive | Zenodo DOI 10.5281/zenodo.22746175 — historical version |
Architecture whitepaper | |
3.2.5 archive | Zenodo DOI 10.5281/zenodo.20457285 · OSF DOI 10.17605/OSF.IO/92NWM |
April 2026 research snapshot | |
17 field reports and design essays | Complete index · 中文目录, including original publication and evidence links |
Choose the archive matching the version you studied. The 4.0.5 software DOI identifies the current source archive; the preprint DOI identifies the paper and its frozen 4.0.3 evidence. The software update does not imply that the paper's experiments were rerun on 4.0.5.
Three repositories, three entry points
Repository | Start here for |
Flagship open-source project: protocol, Python library and MCP server; use, implement or contribute to the coordination layer. | |
Research and communication: AI Agents, digital employees and engineering studies. | |
Product experience: packaged application and downloads; check its release notes for supported versions. |
FCoP is independently usable under the MIT license. The product distribution has its own licensing and release schedule.
Star FCoP to bookmark the protocol and its implementation. To help it improve, share a reproducible integration issue, an example from your host, or a test of the protocol's public behavior through Issues or a pull request.
Versions and existing installations
4.0.0: Release notes · Changelog · Architecture decisions. Publication followed the recorded
FCOP_4_STABLE_RELEASE_READYgate; users install the stable PyPI pair above.Release candidate: 4.0.0rc1 — retained as a historical prerelease.
3.x workspaces: retain their original semantics until explicit migration. Legacy specification EN · ZH.
finish_taskand legacy history tools remain discoverable but reject v4 workspaces.Legacy installation prompts: EN · ZH, also available at
fcop://prompt/install. These are historical setup material; use the 4.0 guide above for the current version.
Available Tools
25 toolsapprove_taskD
Request Core T4 review to done using independently validated review and authorization evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes | ||
| task_id | Yes | ||
| report_ref | Yes | ||
| review_ref | Yes | ||
| profile_ref | Yes | ||
| authorization_ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden. The phrase 'review to done' weakly implies a state transition, but the description does not disclose side effects, required permissions, idempotency, irreversibility, error behavior, or what 'independently validated' means operationally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single sentence, but it is front-loaded with undefined jargon ('Core T4') and an ambiguous phrase ('review to done'). Brevity is not helpful here because the sentence is too opaque to orient the agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-required-parameter approval operation with no annotations, no output schema, and zero schema descriptions, the description is drastically incomplete. It leaves the agent without the workflow, parameter meanings, or behavioral expectations needed to invoke the tool safely.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across six required parameters. The description vaguely connects to review_ref and authorization_ref via 'review and authorization evidence,' but it leaves actor, task_id, report_ref, and profile_ref completely unexplained, so it 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.
Does the description clearly state what the tool does and how it differs from similar tools?
The description says 'Request Core T4 review to done,' which is jargon-heavy and never plainly states that this tool approves a task or transitions it to a done state. It references review and authorization evidence but does not clearly distinguish this action from siblings like reject_task, submit_task, or mark_human_approved.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use approve_task versus reject_task, submit_task, mark_human_approved, or any other sibling. No prerequisites, exclusions, or workflow context are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_taskD
Request Core T7 done to archive; Core enforces authorization and family convergence.
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes | ||
| task_id | Yes | ||
| review_ref | No | ||
| profile_ref | Yes | ||
| family_digest | No | ||
| authorization_ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses that Core enforces authorization and family convergence, but it does not explain what archiving actually does, whether it is reversible, what permissions are required, or what happens to related family/workflow state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence but is cryptic and under-specified rather than efficient. Crucial details are compressed into jargon like 'Core T7 done' that an agent cannot reliably interpret.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex mutation tool with 6 parameters, no annotations, and no output schema. The description does not provide enough information about purpose, preconditions, parameter meanings, or behavior for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for 6 parameters, so the description must compensate heavily. It only loosely hints at authorization and family convergence, leaving task_id, actor, profile_ref, and review_ref unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The name says archive_task, but the description's phrasing 'Request Core T7 done to archive' is opaque jargon rather than a clear statement that this archives a task. It does not distinguish the operation from sibling task lifecycle tools such as approve_task, reject_task, or submit_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool, when not to, or which sibling tools are alternatives. The mention of authorization and family convergence hints at preconditions but does not tell an agent when archiving is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
claim_taskC
Request Core T2 inbox to active; actor records attribution and grants no authority.
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes | ||
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It discloses that the actor records attribution and that the action 'grants no authority', which is useful, but it does not explain mutation side effects, permissions, idempotency, failure behavior, or what happens to the task state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The definition is a single sentence and front-loads the transition phrase, so it is not bloated. However, the concise wording is cryptic and under-specifies key details rather than making every clause maximally useful.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter task-lifecycle tool with no annotations, no output schema, and 0% parameter description coverage, the description is too thin. It adds one safety-related behavioral note but leaves parameter roles, return behavior, and operational context largely unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 both parameters. It gives some meaning for 'actor' by saying attribution is recorded and authority is not granted, but it says nothing about 'task_id' beyond the vague 'Core T2 inbox to active' phrase.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description indicates a transition from 'inbox to active' for 'Core T2', which hints at claiming a task, but the phrase 'Core T2' is undefined jargon and the plain action 'claim a task' is never stated. It is specific enough to suggest a lifecycle transition but vague enough that an agent must infer the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit guidance about when to use this tool versus siblings such as submit_task, approve_task, or create_task. There are no when-to-use, when-not-to-use, or alternative-selection cues.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_branchC
Create a branch TASK through Core T1 with an explicit branch_of relation.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| sender | Yes | ||
| subject | Yes | ||
| priority | No | P2 | |
| recipient | Yes | ||
| operation_id | Yes | ||
| root_task_id | Yes | ||
| workspace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden for a mutation tool, yet it discloses nothing about permissions, idempotency (despite an operation_id parameter), side effects on the root task, or whether the branch can later be merged.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, but 'through Core T1' is unexplained jargon that consumes space without adding actionable meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-required-parameter mutation with no annotations, no output schema, and zero parameter documentation, one sentence is far short of what an agent needs to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 8 parameters, so the description must compensate and does not: it never explains root_task_id, workspace_id, operation_id, sender/recipient/subject/body, or the P2 priority default. Worse, it references a 'branch_of relation' that has no corresponding parameter in the schema, which misleads more than it informs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create a branch TASK') and distinguishes itself from the plain create_task sibling by calling out the branch_of relation. The jargon 'Core T1' is undefined, but the core action is still identifiable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this instead of create_task or merge_branches, and no prerequisites such as whether root_task_id must reference an existing task or what distinguishes a branch task from a root task.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskC
Create a TASK using Core T1 and its workspace-scoped operation identity. Repeated requests retain Core idempotency semantics.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| parent | No | ||
| sender | Yes | ||
| subject | Yes | ||
| priority | No | P2 | |
| branch_of | No | ||
| recipient | Yes | ||
| references | No | ||
| risk_level | No | ||
| thread_key | No | ||
| operation_id | Yes | ||
| workspace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It hints at idempotency ("Repeated requests retain Core idempotency semantics") but never says what that means concretely — does the same operation_id return the same task, or error? Nothing on permissions, side effects, or whether parent/branch_of create implicit relationships.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences with no padding, and the action is front-loaded. But the brevity comes at the cost of substance: both sentences are jargon-dense placeholders rather than information an agent can act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A 12-parameter mutation tool with no annotations, no output schema, and 0% schema description coverage needs far more than two sentences. Key gaps: relationship semantics for parent/branch_of, valid values for priority/risk_level, and what success returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 12 parameters, so the description must compensate and largely fails. It only gestures at workspace_id scoping and operation_id idempotency, leaving parent, branch_of, thread_key, references, risk_level, and the meaning of priority "P2" completely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb+resource ("Create a TASK") is stated, but "Core T1" and "workspace-scoped operation identity" are undefined jargon rather than a description of what a task is or how it differs from siblings like write_issue or write_report, which also appear to create work items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No indication of when to use create_task versus write_issue, write_report, write_review, or create_branch, all of which sit in the same family of creation tools. No prerequisites, no preconditions (e.g., does the workspace need to be initialized/validated first?).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
init_workspaceB
Create only a canonical FCoP 4.0 workspace at the server-bound root. An optional explicit profile is a reference, never executable authority.
| Name | Required | Description | Default |
|---|---|---|---|
| profile | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It does disclose two non-obvious behaviors: the workspace is always created at the server-bound root (no path parameter, no user-chosen location), and the profile is a reference only and confers no executable authority — a meaningful safety note for a creation tool. It omits idempotency/conflict behavior, required permissions, and what artifacts get created.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and scope; the second sentence adds a distinct security-relevant caveat rather than padding. Slightly dense phrasing ('reference, never executable authority') costs a bit of immediate readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no annotations, no output schema, and an entirely undocumented parameter, the description should cover failure modes, idempotency, and what a successful initialization produces. It covers root binding and profile authority but leaves the agent unable to predict behavior on re-invocation or on error.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for the single 'profile' parameter, so the description must compensate. It clarifies that profile is optional and is a non-authoritative reference, but says nothing about its expected form (path, name, identifier) or what happens when it is null versus supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb (create) and resource (canonical FCoP 4.0 workspace), and the word 'only' constrains scope so the agent knows this is not a general-purpose initializer. It implies a separation from inspect_workspace/validate_workspace but never names them or states the difference explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus inspect_workspace or validate_workspace, nor any prerequisite or exclusion (e.g., whether it fails if a workspace already exists, or when re-initialization is appropriate). The only implicit signal is 'only ... at the server-bound root', which constrains scope but not usage timing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_familyC
Read Core family membership, REPORT heads, digest and convergence readiness.
| Name | Required | Description | Default |
|---|---|---|---|
| root_task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. 'Read' implies read-only, but it says nothing about permissions, whether the digest or convergence readiness is computed versus stored, how expensive the call is, or what happens when the root has no family.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact sentence with the verb and the returned artifacts front-loaded; nothing is padded. It is terse to the point of under-specification, but that is a completeness problem rather than verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and an undocumented required parameter, the description should explain the return shape and the meaning of root_task_id. As written it leaves an agent unable to predict either the input or the output.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single required parameter root_task_id is never mentioned in the description. It is unclear whether this is the root of a task tree, a family identifier, or a task whose descendants are inspected.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Read' and the resource 'Core family membership' are stated, along with three further things returned (REPORT heads, digest, convergence readiness). But 'Core family', 'REPORT heads' and 'convergence readiness' are unexplained domain jargon, and nothing distinguishes this from sibling readers like inspect_task or read_report.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no statement of when to call this versus inspect_task, read_task, or inspect_workspace, and no prerequisites or exclusions. The agent must guess that this is the aggregate/family-level view rather than a single-task view.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_taskC
Read Core lifecycle, current attempt and transition evidence for a TASK.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only operation and hints at the data returned, but says nothing about permissions, whether the attempt/transition data can be absent or empty, cost, or any failure mode for a lifecycle-inspection tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. It is efficiently sized, though the jargon ('Core lifecycle', 'transition evidence') slightly reduces parsing speed without adding precision.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations and no output schema, the description must explain what inspection actually returns. 'Transition evidence' and 'current attempt' are never unpacked, so an agent cannot predict the response shape or know how it differs from read_task.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the single parameter is task_id, whose name and required status make its meaning self-evident, and 'for a TASK' loosely ties it to the parameter. The description adds no format, ID-source, or scoping detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (Read) and a specific resource (Core lifecycle, current attempt and transition evidence for a TASK), so the agent knows this is a diagnostic/inspection read rather than a plain fetch. However, it never distinguishes itself from the sibling read_task, which an agent could plausibly pick instead.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus read_task, list_tasks, or inspect_workspace. Terms like 'Core lifecycle' and 'transition evidence' hint at a debugging use case but never state the condition that selects this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_workspaceA
Inspect protocol identity, envelopes, lifecycle, families and recovery facts without repair.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description carries the full behavioral burden. 'Without repair' is a genuine disclosure that the call is non-mutating and safe to run, but nothing is said about whether it requires an initialized workspace, how expensive it is, or whether results are cached or live.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, which is the right size for a no-argument tool. The only weakness is that the noun list relies on undefined domain terms, so density comes at the cost of readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description is the only source of truth about what comes back. Enumerating the inspected facets is a partial answer, but an agent still cannot tell the shape of the result (per-family? per-envelope? a single blob?) or what 'recovery facts' entails.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly implies no inputs are needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb ('inspect') with an enumerated set of facets (protocol identity, envelopes, lifecycle, families, recovery facts) and a scope qualifier ('without repair') that separates it from repair-oriented siblings. It falls short of 5 because the facet terms are domain jargon and no sibling (e.g. validate_workspace, inspect_family) is explicitly contrasted.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Without repair' implies use this when you only want to look, not fix, which is useful implied guidance. However, it never states when to pick this over validate_workspace or inspect_family, nor any precondition for calling it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_issuesC
List validated canonical ISSUE facts, with deterministic filtering and pagination.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| sender | No | ||
| severity | No | ||
| subject_ref | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. 'Deterministic filtering and pagination' hints at stable ordering, but it doesn't specify default ordering, maximum limit, whether omitted filters mean 'all', or what 'validated canonical' implies about data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no wasted clauses. It is efficiently sized, though its brevity is partly the source of the other gaps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Five undocumented parameters, no annotations, and no output schema leave the agent with little operational detail. For a filtered list endpoint, the description should at minimum clarify filter semantics and pagination defaults.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all five parameters, so the description must compensate. It only implies that sender/severity/subject_ref are filters and limit/offset are pagination, without explaining matching semantics, accepted severity values, or default behavior when filters are null.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (ISSUE facts), which distinguishes it from the task/report/review list siblings. 'Validated canonical facts' is jargon that adds little, but the core purpose is unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus list_tasks, list_reports, or list_reviews, and no prerequisites or exclusions. The agent must infer usage purely from the resource name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reportsC
List REPORTs through Core, including exact attempt and head selection semantics.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| sender | No | ||
| head_only | No | ||
| attempt_id | No | ||
| subject_ref | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and doesn't meet it. It says nothing about pagination behavior, ordering, default filtering when sender/attempt_id/subject_ref are null, or what 'head selection' actually means operationally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence, so it isn't verbose, but the phrase 'including exact attempt and head selection semantics' spends words on unhelpful jargon rather than conveying information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 6 mostly optional filter/pagination parameters, zero schema description coverage, no annotations, and no output schema, one sentence is insufficient to call this tool correctly. Nothing explains default result sets or the meaning of the head/attempt selection modes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 6 parameters, and the description only makes a vague gesture toward 'attempt' and 'head' semantics without explaining limit, offset, sender, attempt_id, subject_ref, or head_only. An agent still cannot tell what head_only=true does or how the filter parameters interact.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List REPORTs'), which clearly distinguishes it from read_report and write_report among the siblings. However, 'through Core' and 'exact attempt and head selection semantics' are unexplained jargon that doesn't sharpen the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this versus read_report or list_issues/list_reviews, and no prerequisites or exclusions stated. The agent must infer usage purely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reviewsC
List validated canonical REVIEW facts; listing grants no authorization.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| sender | No | ||
| decision | No | ||
| review_kind | No | ||
| subject_ref | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two real traits: results are limited to validated/canonical records, and the act of listing confers no authorization. It still omits whether this is strictly read-only, pagination/ordering behavior, and how multiple filters combine, leaving material gaps for an unannotated tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tightly written clause pair with the resource scope front-loaded ahead of the authorization caveat. No filler, though the compressed phrasing borders on cryptic.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Six undocumented filter parameters, no annotations, and no output schema leave the agent without enough information to use filters correctly or understand what comes back. The description should at minimum explain the filter dimensions and the result shape/pagination.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across six parameters (limit, offset, sender, decision, review_kind, subject_ref), and the description mentions none of them. An agent gets no help on what `decision` values look like, what `subject_ref` points at, or what defaults mean; only the phrase "REVIEW facts" vaguely hints at the domain.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Uses a specific verb ("List") bound to a specific resource ("validated canonical REVIEW facts"), which separates it from the singular reader read_review and from list_reports/list_issues. The jargon "canonical facts" is unusual but the intent (enumerate validated review records) is inferable. It does not explicitly contrast itself with read_review.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is the caveat "listing grants no authorization," which says what the output does NOT do but never says when to choose this tool over read_review or how to pick among filters. An agent must guess the intended use case and retrieval strategy.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksC
List validated canonical TASK facts, optionally filtered by stage or relations.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| stage | No | ||
| offset | No | ||
| parent | No | ||
| sender | No | ||
| branch_of | No | ||
| recipient | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It implies a read operation but does not disclose pagination behavior, default ordering, authentication/permission requirements, or what a 'validated canonical' fact means in practice, leaving significant behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The single sentence is front-loaded and free of filler, but it is under-specified rather than appropriately concise. It earns its place as a summary but omits information the agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and seven parameters at 0% schema coverage, the one-sentence description is not complete enough. An agent lacks guidance on filtering semantics, pagination, ordering, and result shape.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all seven parameters. It mentions only 'stage' and vaguely references 'relations,' leaving limit, offset, parent, sender, branch_of, and recipient completely unexplained in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('List') and resource ('canonical TASK facts'), so an agent knows this is a read/list operation over tasks. It does not distinguish itself from sibling list tools like list_reports or list_issues beyond the resource name, leaving some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Only says results can be 'optionally filtered by stage or relations,' which is a capability statement rather than guidance on when to choose this tool over list_reports/list_issues or inspect_task/read_task. No exclusions, prerequisites, or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_human_approvedC
Ask Core to append independent authorization evidence. Caller-supplied approver text alone is never authority; expires_at must be explicit.
| Name | Required | Description | Default |
|---|---|---|---|
| comment | No | ||
| approver | Yes | ||
| decision | Yes | ||
| to_stage | Yes | ||
| issued_at | Yes | ||
| review_id | Yes | ||
| attempt_id | No | ||
| expires_at | Yes | ||
| from_stage | Yes | ||
| profile_ref | Yes | ||
| issuer_proof | No | ||
| family_digest | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description usefully discloses a security-critical behavior: caller-supplied approver text alone is never authority, and expires_at must be explicit. However, it does not describe whether this is a write operation, what permissions or issuer evidence are required, what side effects occur, or what is returned, leaving important behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the action before adding two critical constraints. Both sentences carry weight, though the second is terse and somewhat cryptic for a tool with 8 required parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, 8-required mutation-style tool with no annotations and no output schema, the description is far too incomplete. It highlights authority and expiry semantics but leaves most required parameters and the overall approval workflow unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 12 parameters, so the description must carry parameter semantics. It only adds meaning for two fields, approver and expires_at, and gives no explanation of required fields such as review_id, decision, profile_ref, from_stage, to_stage, or issued_at.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific but unusually abstract action: 'Ask Core to append independent authorization evidence.' It is not a tautology, but it never plainly says this marks a human approval or explains how it differs from sibling tools like approve_task, so the agent must infer the core purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no mention of alternatives such as approve_task or reject_task. The description provides constraints on authority and expiry, but it does not tell the agent when this tool should be selected over its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_branchesC
Record the caller's convergence decision atomically in Core; never choose winners or archive the root.
| Name | Required | Description | Default |
|---|---|---|---|
| sender | Yes | ||
| recipient | Yes | ||
| conclusion | Yes | ||
| operation_id | Yes | ||
| root_task_id | Yes | ||
| workspace_id | Yes | ||
| branch_report_heads | Yes | ||
| conflict_resolution | Yes | ||
| expected_family_digest | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the full behavioral burden. It discloses atomicity and clarifies that the tool does not choose winners or archive the root, which is valuable. But for a 9-parameter mutation it omits idempotency, permission/authorization requirements, failure behavior (e.g., expected_family_digest mismatch), and what gets persisted or returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler: it immediately states the atomic record action and the key non-actions. It is appropriately concise, though its brevity is also a cause of missing information captured in other dimensions.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 9 required parameters, 0% schema coverage, a nested object, no output schema, and no annotations, the description is far from complete enough for an agent to invoke this correctly. It leaves nearly every parameter and all result/error semantics undefined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 9 required parameters, including a nested object (branch_report_heads). The description provides no meaning for any parameter — not root_task_id, expected_family_digest, conclusion, conflict_resolution, operation_id, sender, or recipient — leaving an agent unable to fill the schema correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Record ... convergence decision atomically in Core') and adds exclusions ('never choose winners or archive the root'), which helps distinguish it from a true merge or archive operation. However, terms like 'convergence decision' and 'Core' are jargon-heavy and the purpose remains somewhat vague without schema context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage after a convergence decision but gives no explicit when-to-use conditions, prerequisites, or named alternatives. The exclusions ('never choose winners or archive the root') are useful but do not tell an agent which sibling tool to use instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_reportC
Read a canonical REPORT through Core identity resolution.
| Name | Required | Description | Default |
|---|---|---|---|
| filename_or_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral-disclosure burden. It states only 'read' and an opaque 'Core identity resolution' process, without explaining permissions, resolution behavior, error conditions, or response characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no wasted preamble. However, the dense jargon in 'canonical REPORT through Core identity resolution' reduces clarity rather than earning its place as useful detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and 0% parameter description coverage, the description is too thin for an agent to know how this tool behaves beyond the bare action. It does not explain what a 'canonical' report is or how identity resolution affects the result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter is filename_or_id, but schema description coverage is 0% and the description provides no additional explanation of accepted formats, ID resolution rules, or ambiguity handling. The parameter name itself is somewhat self-explanatory, but the description adds no semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies a read operation on a REPORT resource, so the basic action is identifiable. However, terms like 'canonical' and 'Core identity resolution' are unexplained jargon, and the description does not differentiate read_report from siblings such as list_reports or read_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus list_reports, read_task, or read_review. There are no stated prerequisites, exclusions, or alternative-selection rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_reviewB
Read a validated REVIEW from its canonical bucket without changing its decision.
| Name | Required | Description | Default |
|---|---|---|---|
| review_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description partially discloses behavior: it is non-mutating ('without changing its decision') and limited to validated reviews. It does not cover permissions, failure behavior for unvalidated or missing IDs, or what the response contains.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. The phrasing 'canonical bucket' is slightly obscure, but overall it is efficient and appropriately sized.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple one-parameter read tool with no output schema, the description covers the core action and read-only nature. It remains incomplete on how to obtain or format the review_id and what the read returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter, review_id, has 0% schema description coverage and the description says nothing about its format, source, or examples. The parameter name is self-explanatory but the description fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Read') and resource ('REVIEW'), and adds qualifying scope ('validated', 'canonical bucket'). It is clearly distinct from write_review and list_reviews, though it does not explicitly name those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'without changing its decision' implies read-only usage, and 'validated' implies a constraint on which reviews can be read. However, it never states when to choose read_review versus list_reviews or inspect tools, nor any preconditions for obtaining a review_id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_taskC
Read a canonical TASK by its typed identity through Core.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, yet it says nothing about what happens when the task_id is unknown, whether the result is a snapshot or live state, or permission requirements. "Canonical" weakly hints that the returned record is authoritative but is not elaborated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb first and no filler sentences. It is efficient, though the brevity comes at the cost of the missing guidance noted elsewhere.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no annotations, no output schema, and an undocumented parameter, the description leaves too much unsaid for an agent to call this correctly. It omits both the identifier format and the shape of the returned task record.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is one required parameter with 0% schema description coverage, so the description must compensate. "Typed identity" gestures at the meaning of task_id but gives no format, source, or example of what a typed task identity looks like versus other identifiers used by sibling tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb+resource pair ("read a canonical TASK") is clear enough, but the qualifiers "typed identity" and "through Core" are internal jargon that add no discriminating information. It also fails to distinguish itself from the sibling inspect_task, which plausibly does the same thing, so an agent cannot choose between them from the text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No statement of when to use this versus inspect_task or list_tasks, and no prerequisites or error conditions. The description only implies usage through the word "Read".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_taskD
Request Core T5 review to active; Core validates evidence and advances the attempt.
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes | ||
| task_id | Yes | ||
| report_ref | Yes | ||
| review_ref | Yes | ||
| profile_ref | Yes | ||
| authorization_ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden, but it only vaguely references a Core T5 review workflow. It does not explain what rejection does, whether it is final, what permissions or authorization are required, or what side effects occur.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short but cryptic rather than concise. Jargon such as 'Core T5', 'active', and 'attempt' is not front-loaded or explained, so the single sentence does not earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a six-parameter, fully required mutation-style tool with no annotations and no output schema, the description is completely inadequate. It does not explain the operation, the parameters, the authorization model, or the outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has six required parameters with 0% description coverage, and the description explains none of them. Terms like report_ref, review_ref, authorization_ref, and profile_ref remain completely undefined.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The tool name says reject_task, but the description instead talks about requesting 'Core T5 review to active' and Core advancing the attempt. It does not clearly state that this tool rejects a task, nor does it distinguish the operation from sibling tools like approve_task or reopen_task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool instead of approve_task, reopen_task, or other task-state tools. The description gives no conditions, prerequisites, or exclusions, so an agent cannot confidently choose it over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reopen_taskC
Request Core T6 done to active with explicit reopen evidence and authorization.
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes | ||
| task_id | Yes | ||
| review_ref | Yes | ||
| profile_ref | Yes | ||
| authorization_ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden. It hints that authorization and evidence are required, but says nothing about side effects, whether the transition is reversible, what happens to prior approvals/reviews, or failure modes—significant gaps for a mutation tool with zero 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
It is a single front-loaded sentence with no wasted clauses, but efficiency is undercut by opaque jargon ('Core T6', 'done to active') that consumes the sentence without adding comprehensible meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a five-parameter, all-required mutation tool with no annotations and no output schema, the description is far too thin. It neither explains the parameters nor the operational consequences of the transition, leaving the agent under-equipped to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across five required parameters, and the description only loosely gestures at 'evidence' and 'authorization' without mapping them to review_ref, authorization_ref, profile_ref, actor, or task_id. The agent gets no field-level meaning beyond what the bare property names suggest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The name and description together convey a state transition (done -> active) on a task, which distinguishes it from siblings like claim_task or submit_task. However, the phrase 'Core T6' is unexplained internal jargon that blocks a clean reading of what the tool actually does, so the purpose is only partially clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives (approve_task, reject_task, claim_task), nor any stated preconditions or when-not-to-use cases. 'Explicit reopen evidence and authorization' implies prerequisites exist but never spells out the conditions that should trigger a reopen.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_taskD
Request Core T3 active to review with the explicit current-attempt REPORT.
| Name | Required | Description | Default |
|---|---|---|---|
| actor | Yes | ||
| task_id | Yes | ||
| report_ref | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and fails. It does not say whether this mutates task state, what 'Core T3 active' review means, what happens if the report is stale or missing, whether the call is idempotent, or what permissions the actor needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One short sentence, but the brevity comes from under-specification rather than efficiency; the most important information is compressed into opaque terms like 'Core T3 active' and 'explicit current-attempt'.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-required-parameter state-changing tool with no annotations and no output schema, the description supplies essentially none of the operational context an agent needs. Nothing explains the review lifecycle, preconditions, or outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for three required parameters, so the description must compensate and does not. 'REPORT' loosely maps to report_ref, but task_id and actor are never explained, nor is the expected format of any identifier.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The phrase 'Request Core T3 active to review' gestures at submitting something for review, but 'Core T3 active' is unexplained internal jargon that an agent cannot decode. The object 'the explicit current-attempt REPORT' hints the resource is a report, yet the tool name (submit_task) and the description don't converge on a plain verb+resource statement.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no indication of when to use this versus write_report, approve_task, or the other task-lifecycle siblings. The word 'explicit' and 'current-attempt' imply preconditions (a report must already exist and be current) but never state them as rules.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_workspaceA
Deterministically validate canonical workspace facts through Core validators; never repair or consult host/runtime state.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose two meaningful traits: the validation is deterministic and it does not touch host/runtime state or perform repairs (implying a non-mutating, sandboxed read). It omits what happens on failure, whether it raises errors or returns findings, and whether it requires a prior init.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the action first and the constraints second; every clause carries information. Mild jargon ('Core validators', 'canonical workspace facts') costs a little immediate comprehension but no words are wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema and no annotations, the description covers what it validates and what it refuses to do, but leaves the agent guessing about the result shape (pass/fail? list of violations?) and about prerequisites. Adequate but with a real gap in how to interpret the outcome.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The sentence correctly implies the workspace is identified implicitly by context rather than by arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('validate') and resource ('canonical workspace facts') plus the mechanism ('Core validators'), which is enough to distinguish it from siblings like init_workspace or inspect_workspace. It stops short of explicitly naming the sibling it is not, so it lands at clear-but-undifferentiated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Never repair or consult host/runtime state' provides useful exclusionary guidance about what this tool is not for, implying it should be used for static canonical-fact checking. However, it never says when to prefer it over inspect_workspace or what precondition (e.g., after init_workspace) makes it appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_issueC
Append a Core ISSUE with explicit workspace and subject identity.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| sender | Yes | ||
| severity | Yes | ||
| recipient | Yes | ||
| references | No | ||
| subject_ref | Yes | ||
| workspace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure, but it only says 'append' and mentions workspace/subject identity. It omits permissions, idempotency or duplicate behavior, severity semantics, and side effects for a six-required-parameter write tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. Brevity is structurally appropriate, though it leaves other dimensions underdeveloped.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given seven parameters, six required, no annotations, no output schema, and 0% schema descriptions, the definition is far from complete. It does not explain valid formats, required identity relationships, severity values, or expected results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should explain all seven parameters. It adds only vague meaning for workspace_id and subject_ref, leaving sender, recipient, body, severity, and references undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The verb 'Append' plus the resource 'Core ISSUE' makes the action identifiable and distinguishes it from list_issues and read_review siblings. 'Core ISSUE' is domain jargon that is not explained, so it is clear but not fully self-contained.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus list_issues or other write tools, and no prerequisites or exclusions are stated. The sentence only implies that this is a write operation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_reportC
Append a Core REPORT for the explicit TASK attempt; reporting does not accept or archive work.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| result | Yes | ||
| sender | Yes | ||
| recipient | Yes | ||
| attempt_id | Yes | ||
| references | No | ||
| report_kind | No | final | |
| subject_ref | Yes | ||
| workspace_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it does disclose the append-only nature and that the call does not accept or archive work, which is the key safety distinction. It says nothing about prerequisites (must the attempt exist?), permissions, idempotency of repeated appends, or failure modes for a 9-parameter mutation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the scope ('Append') and the key constraint (not accept/archive) come first. Its brevity is efficient, though it borders on under-specified for the parameter surface.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Nine parameters, seven required, zero schema descriptions, no annotations, no output schema — this is exactly where the description needs depth, and it provides one sentence. An agent cannot tell what belongs in body versus result or what report_kind values mean.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% across 9 parameters, so the description must compensate, yet it names no parameters. 'attempt' hints at attempt_id and 'TASK' hints at subject_ref, but body, result, sender, recipient, report_kind, references, and workspace_id are entirely unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Append a Core REPORT') scoped to a TASK attempt, and distinguishes itself from state-changing siblings by saying reporting 'does not accept or archive work'. The jargon 'Core REPORT' and 'explicit TASK attempt' keep it from being fully unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides one useful exclusion ('does not accept or archive work'), implicitly pointing at submit_task/approve_task/archive_task as the alternatives for state change. It never positively says when to choose write_report over write_issue or write_review, so guidance remains inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_reviewC
Append a typed Core REVIEW. Authority is evaluated only by trusted startup Profile evaluators.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | ||
| sender | Yes | ||
| decision | Yes | ||
| issued_at | No | ||
| recipient | Yes | ||
| attempt_id | No | ||
| expires_at | No | ||
| references | No | ||
| transition | No | ||
| profile_ref | No | ||
| review_kind | Yes | ||
| subject_ref | Yes | ||
| issuer_proof | No | ||
| workspace_id | Yes | ||
| family_digest | No | ||
| operation_kind | No | ||
| authorization_ref | No | ||
| authorization_scope | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It notes that authority is evaluated by trusted startup Profile evaluators, which is a useful behavioral clue about authorization, but says nothing about mutation effects, required permissions, whether appends are idempotent, or what happens on failure. For a write tool with 18 parameters, this is far too thin.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Short and front-loaded with the verb+resource, so it is not padded. However, the brevity is under-specification rather than conciseness: the second sentence introduces an important authorization concept without explaining it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No annotations, no output schema, 18 parameters with 0% schema description coverage, and a two-sentence description. The agent lacks what it needs to invoke this tool correctly: parameter meaning, review_kind/decision values, and the relationship between sender, recipient, subject_ref, and profile_ref are all unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description explains no parameters at all. With 18 parameters including ambiguous fields like review_kind, decision, subject_ref, transition, family_digest, and issuer_proof, the absence of any semantic guidance is a severe gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Append") and resource ("Core REVIEW"), which is better than tautology. But "typed Core REVIEW" is jargon that doesn't clarify what a review is versus a report or issue, and the description never distinguishes this tool from siblings like write_report, write_issue, or list_reviews.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use write_review instead of write_report or write_issue, no prerequisites, no workflow context. The authority sentence hints at a gate but doesn't tell the agent when this tool is appropriate.
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.
52 tool updates
v4.0.5- Changed
approve_task10 fields changed- removed
Input schema / properties / actor / defaultRemoved value: -"ADMIN" - removed
Input schema / properties / actor / descriptionRemoved value: -"Role code of the approver (default ``\"ADMIN\"``)." - added
Input schema / properties / authorization_refAdded value: +{ + "type": "string" +} - removed
Input schema / properties / noteRemoved value: -{ - "default": "", - "description": "Optional approval note appended to the transition event.", - "type": "string" -} - added
Input schema / properties / profile_refAdded value: +{ + "type": "string" +} - added
Input schema / properties / report_refAdded value: +{ + "type": "string" +} - added
Input schema / properties / review_refAdded value: +{ + "type": "string" +} - removed
Input schema / properties / task_id / descriptionRemoved value: -"Task ID or full filename." - changed
Input schema / requiredPrevious value: -[ - "task_id" -]New value: +[ + "task_id", + "actor", + "report_ref", + "review_ref", + "authorization_ref", + "profile_ref" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
archive_task9 fields changed- added
Input schema / properties / actorAdded value: +{ + "type": "string" +} - added
Input schema / properties / authorization_refAdded value: +{ + "type": "string" +} - added
Input schema / properties / family_digestAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / langRemoved value: -{ - "default": "", - "description": "Kept for 0.5.4 parity; currently unused because the\nlibrary does not need locale for this operation.", - "type": "string" -} - added
Input schema / properties / profile_refAdded value: +{ + "type": "string" +} - added
Input schema / properties / review_refAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / task_id / descriptionRemoved value: -"Task ID (e.g. ``TASK-20260423-001``) or full filename." - changed
Input schema / requiredPrevious value: -[ - "task_id" -]New value: +[ + "task_id", + "actor", + "authorization_ref", + "profile_ref" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Removed
archive_to_history - Removed
bulk_archive_to_history - Removed
check_update - Changed
claim_task5 fields changed- removed
Input schema / properties / actor / defaultRemoved value: -"agent" - removed
Input schema / properties / actor / descriptionRemoved value: -"Role code of the agent claiming the task (default ``\"agent\"``)." - removed
Input schema / properties / task_id / descriptionRemoved value: -"Task ID (e.g. ``TASK-20260423-001``) or full filename." - changed
Input schema / requiredPrevious value: -[ - "task_id" -]New value: +[ + "task_id", + "actor" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Added
create_branch - Removed
create_custom_team - Changed
create_task23 fields changed- removed
Input schema / properties / body / descriptionRemoved value: -"Task body in Markdown." - added
Input schema / properties / branch_ofAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / operation_idAdded value: +{ + "type": "string" +} - added
Input schema / properties / parentAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / priority / descriptionRemoved value: -"``P0`` / ``P1`` / ``P2`` / ``P3`` (or legacy aliases).\n Default: ``P2``." - removed
Input schema / properties / recipient / descriptionRemoved value: -"Recipient role code (uppercase). May use the slot\n form ``ROLE.D1`` or ``TEAM`` for broadcast." - added
Input schema / properties / references / anyOfAdded value: +[ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } +] - changed
Input schema / properties / references / defaultPrevious value: -""New value: +null - removed
Input schema / properties / references / descriptionRemoved value: -"Comma-separated task filenames for ``references:`` field." - removed
Input schema / properties / references / typeRemoved value: -"string" - added
Input schema / properties / risk_level / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / risk_level / defaultPrevious value: -""New value: +null - removed
Input schema / properties / risk_level / descriptionRemoved value: -"``low`` / ``medium`` / ``high`` / ``irreversible``.\n Leave empty to accept the default (``medium``)." - removed
Input schema / properties / risk_level / typeRemoved value: -"string" - removed
Input schema / properties / sender / descriptionRemoved value: -"Sender role code (uppercase)." - removed
Input schema / properties / subject / descriptionRemoved value: -"One-line subject for the ``subject:`` frontmatter field." - added
Input schema / properties / thread_key / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / thread_key / defaultPrevious value: -""New value: +null - removed
Input schema / properties / thread_key / descriptionRemoved value: -"Optional thread identifier." - removed
Input schema / properties / thread_key / typeRemoved value: -"string" - added
Input schema / properties / workspace_idAdded value: +{ + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "sender", - "recipient", - "subject", - "body" -]New value: +[ + "workspace_id", + "operation_id", + "sender", + "recipient", + "subject", + "body" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Removed
deploy_role_templates - Removed
drop_suggestion - Removed
fcop_audit - Removed
fcop_check - Removed
fcop_create_alert - Removed
fcop_list_alerts - Removed
fcop_report - Removed
finish_task - Removed
get_available_teams - Removed
get_governance_summary - Removed
get_team_status - Removed
init_project - Removed
init_solo - Added
init_workspace - Added
inspect_family - Changed
inspect_task4 fields changed- removed
Input schema / properties / filenameRemoved value: -{ - "description": "Task filename or ID (same forms as ``read_task``).", - "type": "string" -} - added
Input schema / properties / task_idAdded value: +{ + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "filename" -]New value: +[ + "task_id" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Added
inspect_workspace - Removed
list_governance_events - Removed
list_history - Changed
list_issues14 fields changed- removed
Input schema / properties / langRemoved value: -{ - "default": "", - "description": "Kept for 0.5.4 parity; currently unused.", - "type": "string" -} - added
Input schema / properties / limit / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / limit / defaultPrevious value: -0New value: +null - removed
Input schema / properties / limit / descriptionRemoved value: -"Maximum number of rows (0 = no limit)." - removed
Input schema / properties / limit / typeRemoved value: -"integer" - removed
Input schema / properties / offset / descriptionRemoved value: -"Number of rows to skip." - removed
Input schema / properties / reporterRemoved value: -{ - "default": "", - "description": "Filter by reporter role code (case-insensitive).", - "type": "string" -} - added
Input schema / properties / senderAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / severity / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / severity / defaultPrevious value: -""New value: +null - removed
Input schema / properties / severity / descriptionRemoved value: -"Filter by severity (``critical`` / ``high`` /\n``medium`` / ``low``). Empty = all." - removed
Input schema / properties / severity / typeRemoved value: -"string" - added
Input schema / properties / subject_refAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
list_reports13 fields changed- added
Input schema / properties / attempt_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / head_onlyAdded value: +{ + "default": false, + "type": "boolean" +} - added
Input schema / properties / limit / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / limit / defaultPrevious value: -0New value: +null - removed
Input schema / properties / limit / descriptionRemoved value: -"Maximum number of rows (0 = no limit)." - removed
Input schema / properties / limit / typeRemoved value: -"integer" - removed
Input schema / properties / offset / descriptionRemoved value: -"Number of rows to skip." - removed
Input schema / properties / reporterRemoved value: -{ - "default": "", - "description": "Filter by reporter role code (case-insensitive).", - "type": "string" -} - added
Input schema / properties / senderAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / statusRemoved value: -{ - "default": "open", - "description": "``open`` (default), ``archived``, or ``all``.", - "type": "string" -} - added
Input schema / properties / subject_refAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / task_idRemoved value: -{ - "default": "", - "description": "Filter by source task ID.", - "type": "string" -} - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
list_reviews16 fields changed- added
Input schema / properties / decision / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / decision / defaultPrevious value: -""New value: +null - removed
Input schema / properties / decision / descriptionRemoved value: -"Filter by decision value (``approved`` / ``rejected``\n/ ``needs_changes`` / ``abstained`` / ``needs_human``)." - removed
Input schema / properties / decision / typeRemoved value: -"string" - added
Input schema / properties / limit / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / limit / defaultPrevious value: -0New value: +null - removed
Input schema / properties / limit / descriptionRemoved value: -"Maximum number of rows (0 = no limit)." - removed
Input schema / properties / limit / typeRemoved value: -"integer" - removed
Input schema / properties / offset / descriptionRemoved value: -"Skip this many rows." - added
Input schema / properties / review_kindAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / reviewer_roleRemoved value: -{ - "default": "", - "description": "Filter by reviewer role code.", - "type": "string" -} - added
Input schema / properties / senderAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / statusRemoved value: -{ - "default": "open", - "description": "``open`` (default) / ``archived`` / ``all``.", - "type": "string" -} - added
Input schema / properties / subject_refAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / subject_typeRemoved value: -{ - "default": "", - "description": "Filter by subject type (``task`` / ``report`` /\n``role_switch`` / ``code_change``).", - "type": "string" -} - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
list_tasks19 fields changed- added
Input schema / properties / branch_ofAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / dateRemoved value: -{ - "default": "", - "description": "Filter by YYYYMMDD date stamp.", - "type": "string" -} - added
Input schema / properties / limit / anyOfAdded value: +[ + { + "type": "integer" + }, + { + "type": "null" + } +] - changed
Input schema / properties / limit / defaultPrevious value: -0New value: +null - removed
Input schema / properties / limit / descriptionRemoved value: -"Maximum number of rows to return (0 = no limit)." - removed
Input schema / properties / limit / typeRemoved value: -"integer" - removed
Input schema / properties / offset / descriptionRemoved value: -"Number of rows to skip before returning." - added
Input schema / properties / parentAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / recipient / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / recipient / defaultPrevious value: -""New value: +null - removed
Input schema / properties / recipient / descriptionRemoved value: -"Filter by recipient role code. Matches ``to-ROLE``,\n``to-ROLE.SLOT``, and ``to-TEAM`` broadcasts." - removed
Input schema / properties / recipient / typeRemoved value: -"string" - added
Input schema / properties / sender / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - changed
Input schema / properties / sender / defaultPrevious value: -""New value: +null - removed
Input schema / properties / sender / descriptionRemoved value: -"Filter by sender role code (case-insensitive)." - removed
Input schema / properties / sender / typeRemoved value: -"string" - added
Input schema / properties / stageAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / statusRemoved value: -{ - "default": "open", - "description": "``open`` (default), ``archived``, or ``all``.", - "type": "string" -} - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Removed
list_workspaces - Changed
mark_human_approved15 fields changed- removed
Input schema / properties / approver / descriptionRemoved value: -"Role code of the human approver. MUST be an agent\nwith ``layer: admin`` (e.g. ``ADMIN``)." - added
Input schema / properties / attempt_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / channelRemoved value: -{ - "default": "cli", - "description": "Channel through which the approval was submitted.\nOne of ``mobile`` / ``cli`` / ``web`` / ``manual_file_edit``.\nDefault: ``cli``.", - "type": "string" -} - removed
Input schema / properties / comment / descriptionRemoved value: -"Optional free-text comment from the approver." - removed
Input schema / properties / decision / descriptionRemoved value: -"Human's binary decision: ``approve`` or ``reject``." - added
Input schema / properties / expires_atAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ] +} - added
Input schema / properties / family_digestAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / from_stageAdded value: +{ + "type": "string" +} - added
Input schema / properties / issued_atAdded value: +{ + "type": "string" +} - added
Input schema / properties / issuer_proofAdded value: +{ + "default": null, + "title": "Issuer Proof" +} - added
Input schema / properties / profile_refAdded value: +{ + "type": "string" +} - removed
Input schema / properties / review_id / descriptionRemoved value: -"The stable review ID — filename stem without ``.md``\n(e.g. ``REVIEW-20260510-001-ADMIN-on-some-task``)." - added
Input schema / properties / to_stageAdded value: +{ + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "review_id", - "approver", - "decision" -]New value: +[ + "review_id", + "decision", + "approver", + "profile_ref", + "from_stage", + "to_stage", + "issued_at", + "expires_at" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Added
merge_branches - Removed
new_workspace - Removed
read_history_task - Changed
read_report4 fields changed- removed
Input schema / properties / filenameRemoved value: -{ - "description": "Report filename or the ``task_id`` the report was\nfiled against.", - "type": "string" -} - added
Input schema / properties / filename_or_idAdded value: +{ + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "filename" -]New value: +[ + "filename_or_id" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
read_review4 fields changed- removed
Input schema / properties / filenameRemoved value: -{ - "description": "Review filename or review ID\n(``REVIEW-YYYYMMDD-NNN-{reviewer}-on-{slug}[.md]``).", - "type": "string" -} - added
Input schema / properties / review_idAdded value: +{ + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "filename" -]New value: +[ + "review_id" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
read_task4 fields changed- removed
Input schema / properties / filenameRemoved value: -{ - "description": "Task filename (e.g. ``TASK-20260423-001-PM-to-DEV.md``)\nor plain task ID (e.g. ``TASK-20260423-001``). Both open\nand archived tasks are searched.", - "type": "string" -} - added
Input schema / properties / task_idAdded value: +{ + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "filename" -]New value: +[ + "task_id" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Removed
redeploy_rules - Changed
reject_task10 fields changed- removed
Input schema / properties / actor / defaultRemoved value: -"ADMIN" - removed
Input schema / properties / actor / descriptionRemoved value: -"Role code of the rejector (default ``\"ADMIN\"``)." - added
Input schema / properties / authorization_refAdded value: +{ + "type": "string" +} - removed
Input schema / properties / noteRemoved value: -{ - "default": "", - "description": "Mandatory rejection reason (strongly recommended).", - "type": "string" -} - added
Input schema / properties / profile_refAdded value: +{ + "type": "string" +} - added
Input schema / properties / report_refAdded value: +{ + "type": "string" +} - added
Input schema / properties / review_refAdded value: +{ + "type": "string" +} - removed
Input schema / properties / task_id / descriptionRemoved value: -"Task ID or full filename." - changed
Input schema / requiredPrevious value: -[ - "task_id" -]New value: +[ + "task_id", + "actor", + "report_ref", + "review_ref", + "authorization_ref", + "profile_ref" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Added
reopen_task - Removed
set_project_dir - Changed
submit_task6 fields changed- removed
Input schema / properties / actor / defaultRemoved value: -"agent" - removed
Input schema / properties / actor / descriptionRemoved value: -"Role code of the agent submitting the task." - added
Input schema / properties / report_refAdded value: +{ + "type": "string" +} - removed
Input schema / properties / task_id / descriptionRemoved value: -"Task ID or full filename." - changed
Input schema / requiredPrevious value: -[ - "task_id" -]New value: +[ + "task_id", + "actor", + "report_ref" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Removed
upgrade_fcop - Removed
validate_team_config - Added
validate_workspace - Changed
write_issue12 fields changed- removed
Input schema / properties / body / descriptionRemoved value: -"Detailed issue body in Markdown." - added
Input schema / properties / recipientAdded value: +{ + "type": "string" +} - added
Input schema / properties / referencesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / reporterRemoved value: -{ - "description": "Reporter role code (uppercase).", - "type": "string" -} - added
Input schema / properties / senderAdded value: +{ + "type": "string" +} - removed
Input schema / properties / severity / defaultRemoved value: -"medium" - removed
Input schema / properties / severity / descriptionRemoved value: -"``critical`` / ``high`` / ``medium`` / ``low``.\nAliases: ``P0`` → critical, ``P1`` → high, ``P2`` →\nmedium, ``P3`` → low." - added
Input schema / properties / subject_refAdded value: +{ + "type": "string" +} - removed
Input schema / properties / summaryRemoved value: -{ - "description": "One-line summary written into the filename and\nfrontmatter.", - "type": "string" -} - added
Input schema / properties / workspace_idAdded value: +{ + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "reporter", - "summary", - "body" -]New value: +[ + "workspace_id", + "sender", + "recipient", + "subject_ref", + "body", + "severity" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
write_report15 fields changed- added
Input schema / properties / attempt_idAdded value: +{ + "type": "string" +} - removed
Input schema / properties / body / descriptionRemoved value: -"Report body in Markdown." - removed
Input schema / properties / priorityRemoved value: -{ - "default": "P2", - "description": "FCoP priority; accepts ``P0``–``P3`` and aliases.", - "type": "string" -} - removed
Input schema / properties / recipient / descriptionRemoved value: -"Recipient role code (typically the PM)." - added
Input schema / properties / referencesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / report_kindAdded value: +{ + "default": "final", + "type": "string" +} - removed
Input schema / properties / reporterRemoved value: -{ - "description": "Reporter role code (uppercase).", - "type": "string" -} - added
Input schema / properties / resultAdded value: +{ + "type": "string" +} - added
Input schema / properties / senderAdded value: +{ + "type": "string" +} - removed
Input schema / properties / statusRemoved value: -{ - "default": "done", - "description": "``done`` / ``in_progress`` / ``blocked``.", - "type": "string" -} - added
Input schema / properties / subject_refAdded value: +{ + "type": "string" +} - removed
Input schema / properties / task_idRemoved value: -{ - "description": "Source task ID (e.g. ``TASK-20260423-001``).", - "type": "string" -} - added
Input schema / properties / workspace_idAdded value: +{ + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "task_id", - "reporter", - "recipient", - "body" -]New value: +[ + "workspace_id", + "sender", + "recipient", + "subject_ref", + "attempt_id", + "body", + "result" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Changed
write_review27 fields changed- added
Input schema / properties / attempt_idAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / authorization_refAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / authorization_scopeAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / body / defaultRemoved value: -"" - removed
Input schema / properties / body / descriptionRemoved value: -"Additional Markdown body after the frontmatter." - removed
Input schema / properties / decision / descriptionRemoved value: -"Review decision. One of:\n``approved`` — artefact is accepted;\n``rejected`` — artefact is rejected (cannot proceed);\n``needs_changes`` — must be revised (requires ``required_changes``);\n``abstained`` — reviewer recuses;\n``needs_human`` — reviewer escalates to human (ADR-0025,\nv1.1). The review stays pending until ``mark_human_approved``\nis called to close the loop." - added
Input schema / properties / expires_atAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / family_digestAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / issued_atAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / issuer_proofAdded value: +{ + "default": null, + "title": "Issuer Proof" +} - added
Input schema / properties / operation_kindAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / profile_refAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / rationaleRemoved value: -{ - "default": "", - "description": "Free-text rationale for the decision. Recommended\nfor all non-``approved`` decisions.", - "type": "string" -} - added
Input schema / properties / recipientAdded value: +{ + "type": "string" +} - added
Input schema / properties / referencesAdded value: +{ + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Input schema / properties / required_changesRemoved value: -{ - "default": "", - "description": "Newline- or comma-separated list of required\nchanges. Mandatory when ``decision=needs_changes``.", - "type": "string" -} - added
Input schema / properties / review_kindAdded value: +{ + "type": "string" +} - removed
Input schema / properties / reviewer_agentRemoved value: -{ - "default": "", - "description": "Optional agent/session identifier on top of\nthe role code.", - "type": "string" -} - removed
Input schema / properties / reviewer_roleRemoved value: -{ - "description": "Role code of the reviewer (must have\n``review_decision`` capability; typically ``layer: governance``\nor ``layer: admin``).", - "type": "string" -} - added
Input schema / properties / senderAdded value: +{ + "type": "string" +} - removed
Input schema / properties / subject_ref / descriptionRemoved value: -"Reference to the artefact under review —\nfile path for task/report/code_change; fcop.json diff range\nfor role_switch." - removed
Input schema / properties / subject_shortRemoved value: -{ - "default": "", - "description": "Override the ``-on-{slug}`` segment of the\nfilename. Auto-derived from ``subject_ref`` when omitted.", - "type": "string" -} - removed
Input schema / properties / subject_typeRemoved value: -{ - "description": "What is being reviewed. One of\n``task`` / ``report`` / ``role_switch`` / ``code_change``.", - "type": "string" -} - added
Input schema / properties / transitionAdded value: +{ + "anyOf": [ + { + "additionalProperties": { + "type": "string" + }, + "type": "object" + }, + { + "type": "null" + } + ], + "default": null +} - added
Input schema / properties / workspace_idAdded value: +{ + "type": "string" +} - changed
Input schema / requiredPrevious value: -[ - "reviewer_role", - "subject_type", - "subject_ref", - "decision" -]New value: +[ + "workspace_id", + "sender", + "recipient", + "subject_ref", + "review_kind", + "decision", + "body" +] - changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "type": "string" - } - }, - "required": [ - "result" - ], - "type": "object", - "x-fastmcp-wrap-result": true -}New value: +null
- Removed
write_task
45 tool updates
v3.2.4- First observed
approve_task - First observed
archive_task - First observed
archive_to_history - First observed
bulk_archive_to_history - First observed
check_update - First observed
claim_task - First observed
create_custom_team - First observed
create_task - First observed
deploy_role_templates - First observed
drop_suggestion - First observed
fcop_audit - First observed
fcop_check - First observed
fcop_create_alert - First observed
fcop_list_alerts - First observed
fcop_report - First observed
finish_task - First observed
get_available_teams - First observed
get_governance_summary - First observed
get_team_status - First observed
init_project - First observed
init_solo - First observed
inspect_task - First observed
list_governance_events - First observed
list_history - First observed
list_issues - First observed
list_reports - First observed
list_reviews - First observed
list_tasks - First observed
list_workspaces - First observed
mark_human_approved - First observed
new_workspace - First observed
read_history_task - First observed
read_report - First observed
read_review - First observed
read_task - First observed
redeploy_rules - First observed
reject_task - First observed
set_project_dir - First observed
submit_task - First observed
upgrade_fcop - First observed
validate_team_config - First observed
write_issue - First observed
write_report - First observed
write_review - First observed
write_task
TDQS
Scored across 25 tools
Most tools target distinct resources or lifecycle transitions, and the descriptions clarify stage-specific actions. However, inspect_task versus read_task and inspect_workspace versus validate_workspace have subtle boundaries that could cause misselection, and the many lifecycle verbs require careful reading.
All tool names use consistent snake_case verb_noun phrasing, such as create_task, inspect_family, write_review, and mark_human_approved. The convention is predictable across lifecycle operations, artifact operations, and workspace operations.
Twenty-five tools is heavy for the apparent scope, sitting at the upper boundary before the surface feels excessive. The complex protocol justifies many lifecycle operations, but several read/inspect/list variants push the set beyond an ideal well-scoped size.
The surface covers workspace setup and validation, full task lifecycle transitions, branch/family convergence, reports, reviews, issues, and human approval evidence. Minor gaps remain, notably no read_issue equivalent despite write_issue and list_issues, but core workflows are otherwise covered.
Maintenance
Related MCP Connectors
Shared control plane for AI coding agents — tasks, memory, decisions, file locks. 12 tools.
Shared memory and mail for your AI agents. Verified with Claude Code; other MCP clients in testing.
One MCP endpoint for Claude, GPT & Gemini: 100+ tools + no-code connectors + agent workers.
An agent-first office suite Claude & ChatGPT read and write over one MCP URL.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server that combines Read+Edit file operations into single tool calls. 80-95% fewer tool calls formulti-file refactoring across Claude, Cursor, Windsurf, and more.310 npm3MIT
- FlicenseNot gradedqualityDmaintenanceA multi-tool task agent MCP server with file search, SQLite query, calculator, and report writing tools. Enables Claude Code, Claude Desktop, or Cursor to control the same tools used by the agent, with guardrails for safety.-
- AlicenseNot gradedqualityBmaintenanceProvides 300+ MCP tools for orchestrating AI agents — including swarm coordination, self-learning memory, and task management — enabling MCP clients like Claude Code and Cursor to spawn, coordinate, and learn from specialist agents across sessions.19,558 npm1MIT
- AlicenseNot gradedqualityAmaintenanceExposes specialized agents as MCP tools so users can manage and triage Jira tasks, analyze repositories for health and conventions, generate commit/PR/DevOps patterns, assemble reports, produce slides and infographics, and run semantic search over a knowledge base. Everything is invokable directly from inside a coding session in Claude Code, Cursor, or Claude Desktop.1MIT