fcop-mcp
This server implements the File-based Coordination Protocol (FCoP) — a filesystem-native AI agent collaboration and governance system. Key capabilities include:
Project Initialization & Setup
Initialize FCoP projects in solo mode, with bundled preset teams (dev-team, media-team, mvp-team, qa-team), or with a custom role roster
Validate custom team configurations before creation
Pin the project root directory for the MCP session and list available preset teams
Task Lifecycle Management
Create, read, list, and inspect tasks (placed in
_lifecycle/inbox/for v3 projects)Manage the full lifecycle:
inbox → active → review → donevia claim, submit, approve, reject, or direct finishArchive tasks to date-sharded deep history; bulk-migrate all archived tasks at once
Reporting & Issue Tracking
Write completion reports tied to specific tasks; list/read reports with filters
File issues with severity levels (critical/high/medium/low) and list/filter them
Review & Human Approval
Write structured REVIEW decisions (approved, rejected, needs_changes, abstained, needs_human)
Record human approvals on escalated
needs_humanreviews, closing the escalation loop
Governance, Auditing & Alerts
fcop_report— session startup report showing project status, role assignments, and drift warningsfcop_check— lightweight audit for working-tree drift and role/session conflictsfcop_audit— deep compliance scan with a full remediation planGovernance event log and aggregate statistics; alert inbox with manual alert creation
Workspace & Documentation
Create and list named workspace subdirectories for code/artifacts
Deploy role templates (three-layer team docs) to
shared/Redeploy bundled protocol rules to
.cursor/rules/,AGENTS.md, andCLAUDE.mdAllow agents to formally propose protocol changes via
drop_suggestionwithout editing rule files directly
Version Management
Check for updates against PyPI and retrieve the correct upgrade command for the user's install method
FCoP — File-based Coordination Protocol
Keep agent work beyond the conversation.
Tasks, deliveries, issues and review decisions become durable files that people, tools and the next agent can inspect. A session can end without taking the work record with it.
Ask AI to install · Manual reference · Architecture series (中文) · Architecture · Papers & citation
Stable version: 4.0.2 — 4.0.2 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.
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.The AI installation guide covers dependencies, client configuration and a real task check. If the client needs approval or a reload, the agent will identify that step. Manual Python/MCP instructions remain below for reference.
Related MCP server: Readedit
Why put work outside the model?
“I have finished” is a statement in a conversation. A teammate still needs to know which assignment was attempted, what was delivered, who reviewed it and what remains unresolved. Keeping those facts only in a chat makes a handoff depend on reconstructing that chat.
FCoP gives formal work a shared representation: Markdown files with structured metadata, stable identities, explicit relationships and recorded state transitions. An agent can write them, a human can open them, and a script can validate them. The filesystem reference implementation needs no database or message broker.
Record | What it preserves | Why it matters |
TASK | Assignment, participants and lifecycle | The next worker can locate the work and its current state. |
REPORT | Delivery claim and evidence for an attempt | “Submitted” remains distinguishable from “accepted.” |
ISSUE | A problem and its context | A blocker survives the session that discovered it. |
REVIEW | Review, acceptance or authorization facts | Decisions can be checked against the work and evidence they concern. |
Persistence makes a claim inspectable; it does not make the claim true. FCoP checks protocol relationships and gates. Reviewers evaluate the substance of the delivered work, and the host Runtime supplies execution, scheduling and permissions.
CLI setup, observation and diagnosis; MCP work
4.0.2 provides nine top-level commands: init, status, inspect,
validate, tools, doctor, version, spec and migrate.
Except explicit initialization and migration apply, commands are read-only;
the CLI does not provide task lifecycle write commands.
fcop init --root ./demo-workspace --json
fcop status --root ./demo-workspace --json
fcop doctor --root ./demo-workspace --json
fcop tools --jsonThe fcop package alone sets up and observes workspaces. tools needs the
optional MCP package; when absent it returns a structured unavailable result,
without starting a server or installing packages.
CLI reference · 中文命令参考.
4.0.1 introduced create_branch, inspect_family and merge_branches;
4.0.2 preserves all 49 tools and their signatures. 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.2"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="ME", recipient="ME",
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.2" "fcop-mcp==4.0.2"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"}
}
}
}Once connected, initialize a new workspace with init_solo(role_code="ME", protocol_version="4.0"). Use its workspace identity when calling create_task, then inspect the TASK with inspect_task(filename=task_id). Installing an MCP server alone does not initialize a workspace or start an agent team.
49 tools / 12 resources / 4 resource templates. 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.
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.
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 also distributes nine bilingual rule modules with versioned manifests and sequential, parallel and repository-development assemblies. Adoption, deployment planning, receipts and rollback are explicit. Host projections use reference or bounded_embed; installing a package does not silently rewrite host rules. Rule distribution contract · 中文契约.
Papers, evidence and citation
These resources are directly accessible; reading the essay collection is optional.
Resource | Read or cite |
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 historical DOIs above are not identifiers for 4.0.0; use the versioned release and specification when discussing current behavior.
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
45 toolsapprove_taskApprove TaskA
Approve a task under review: review → done (v3 lifecycle).
Moves the task file from _lifecycle/review/ to
_lifecycle/done/ and appends an approve_task event.
Typically called by ADMIN after inspecting the work.
On v2 projects this is a no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional approval note appended to the transition event. | |
| actor | No | Role code of the approver (default ``"ADMIN"``). | ADMIN |
| task_id | Yes | Task ID or full filename. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses significant side effects: it moves the task file from `_lifecycle/review/` to `_lifecycle/done/` and appends an `approve_task` event. It also warns about the no-op behavior on v2 projects Poisson, which is a behavioral trait not captured by annotations. Since no annotations are provided, this is a strong disclosure; however, it could mention whether the operation is reversible or if the event is auditable, but those are minor omissions.
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 concise, with the core purpose in the first line, followed by a brief mechanism, a usage note, and a version-specific caveat. Every sentence delivers essential information, and the structure front-loads the primary action and transition. It avoids redundancy and is easy for an agent to parse quickly.
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 the tool's moderate complexityholde (lifecycle transition, file moves, and event logging), the description is complete for an agent to call it correctly. It covers what the tool does, when to use it, and its side effects, satisfying the requirements. The presence of an output schema (though not detailed here) and full parameter coverage in the description ensure nothing critical is missing.
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?
Although schema coverage is 100%, the description adds meaning by explaining that `note` is an 'Optional approval note appended to the transition event' and `actor` is the 'Role code of the approver'. These details go beyond the schema's terse descriptions, explaining the purpose and default behavior. The description's mention of the lifecycle transition adds context for `task_id` as well.
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 states the action ('Approve a task under review') and the lifecycle transition (`review → done`), specifying the exact resource and state change. It also differentiates from siblings like `reject_task`, `submit_task`, and `finish_task` by naming the specific state transition and the file move, making its purpose distinct.
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?
It explicitly states when to use: 'Typically called by ADMIN after inspecting the work,' providing a clear context. It also notes that on v2 projects it is a no-op, which is a critical conditional that prevents misuse. It does not name an alternative tool but the context is sufficient given the sibling list includes `reject_task` and `mark_human_approved`, which are implicitly alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_taskArchive TaskA
Archive a completed task (move under docs/agents/log/).
The report file tied to this task, if any, is moved alongside so the archived pair stays together.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Kept for 0.5.4 parity; currently unused because the library does not need locale for this operation. | |
| task_id | Yes | Task ID (e.g. ``TASK-20260423-001``) or full filename. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does disclose that the task is moved (a mutation), the target directory, and that any tied report file is moved alongside. However, it does not clarify side effects such as whether the task is removed from its original location, whether the operation is reversible, or what happens if the task is not actually completed.
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 tightly written sentences with no filler. The primary action and destination are front-loaded, and the secondary behavior about the report file is stated in one additional sentence.
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?
The description provides the essential action, destination, and important pairing behavior, and an output schema exists to cover return details. It is slightly incomplete only in that it does not address the relationship to archive-related sibling tools or specify prerequisites beyond 'completed task,' but for a simple move operation this is nearly sufficient.
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 100%, so the schema already documents both parameters and their formats. The description adds contextual meaning about the report file being moved, but does not explain parameter semantics beyond what the input schema provides; this matches the baseline for fully covered schemas.
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 ('Archive') and resource ('a completed task'), and clearly specifies the destination (``docs/agents/log/``). It also adds the distinctive behavior of moving the associated report alongside, which helps differentiate from sibling archive tools like ``archive_to_history``.
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 'Archive a completed task' provides clear context that this is for completed tasks and names the destination. However, it does not explicitly distinguish when to use this tool versus sibling tools like ``archive_to_history`` or ``bulk_archive_to_history``, leaving the routing decision partly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
archive_to_historyArchive To HistoryA
Move a closed task from _lifecycle/archive/ to the deep history archive.
The task and all its associated reports are moved together into
history/YYYY-MM-DD/<task-stem>/, creating an immutable, date-sharded
record. The date shard defaults to the UTC date when the task was marked
done; you can override it via done_date.
Call :func:archive_task first to move the task from _lifecycle/done/
to _lifecycle/archive/ before calling this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| task_id | Yes | Task ID (e.g. ``TASK-20260522-001``) or full filename. | |
| done_date | No | Override the shard date in ``YYYY-MM-DD`` format. Leave empty to use the task's own ``done_at`` timestamp. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It discloses the mutating move, that associated reports are relocated together, that the destination is an immutable date-sharded record, and how `done_date` affects the shard. It does not mention potential error cases or reversibility, but 'immutable' communicates lasting effect.
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-loaded: the main action and destination appear first, followed by useful side-effect and date-shard details, and then the prerequisite call. Every sentence contributes essential operational information without filler.
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?
The description covers prerequisites, destination path, side effects, and date-shard behavior, and an output schema exists so return values need not be documented. It could optionally mention what happens if the task is not already archived, or how it relates to bulk history archiving, but the core operational context is complete.
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 100%, and both parameters are already documented in the schema. The description does clarify that `done_date` overrides the UTC done-date default, but this largely echoes the schema text; it does not add substantially new meaning for `task_id`.
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 verb ('Move') with an explicit source (`_lifecycle/archive/`) and destination (`history/YYYY-MM-DD/<task-stem>/`), and clarifies that the task and its reports move together. This clearly distinguishes it from `archive_task`, which is explicitly mentioned as the prerequisite step, and from the bulk sibling `bulk_archive_to_history`.
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 clear context: the task must already be closed and in `_lifecycle/archive/`, and it instructs the agent to call `archive_task` first. It does not explicitly contrast with `bulk_archive_to_history` or state when not to use the tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bulk_archive_to_historyBulk Archive To HistoryA
Migrate all tasks from _lifecycle/archive/ into the deep history archive.
This is a convenience migration tool. It iterates every task in
_lifecycle/archive/ and calls :func:archive_to_history for each
one, moving each task together with its associated reports into
history/YYYY-MM-DD/<task-stem>/.
Useful when:
A project is being upgraded and existing archived tasks need to be moved into the new date-sharded history structure.
You have just finished a manual archiving session and want to flush everything from
_lifecycle/archive/intohistory/in one step.
The history/ directory is created automatically if it does not yet exist.
| Name | Required | Description | Default |
|---|---|---|---|
| done_date | No | Override the shard date (``YYYY-MM-DD``) for **all** migrated tasks. Leave empty to use each task's own ``done_at`` timestamp (falls back to today if missing). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It clearly states it iterates every task in `_lifecycle/archive/`, delegates to `archive_to_history`, moves tasks plus reports into `history/YYYY-MM-DD/<task-stem>/`, and auto-creates `history/`. The only mild gap is not explicitly stating whether source tasks are deleted or whether the operation is reversible, though 'migrate'/'flush' strongly implies removal.
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?
Front-loaded with the core action and scope ('Migrate all tasks'), followed by the mechanics, use cases, and a note about auto-creation. The 'Useful when' bullets are slightly redundant with the main sentence but help an agent choose this tool quickly.
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 single-parameter bulk operation with no output schema, the description covers what, where, when, and an edge case (auto-created directory). It could mention what happens to the source directory or failure behavior, but the provided context is sufficient for selection and invocation.
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 100%: `done_date` is fully documented with its YYYY-MM-DD format, override behavior, and fallback to `done_at`/now. The description adds modest context by showing the destination path pattern that the parameter controls, but doesn't substantially go 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?
The description opens with a specific verb-resource statement: 'Migrate **all** tasks from `_lifecycle/archive/` into the deep history archive.' It further clarifies it is a convenience bulk wrapper around `archive_to_history`, which distinguishes it from the per-task sibling. The destination pattern `history/YYYY-MM-DD/<task-stem>/` is concrete.
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 'Useful when' bullets give two concrete scenarios: project upgrades requiring date-sharded history, and flushing after a manual archiving session. It doesn't explicitly say when *not* to use it vs. `archive_to_history`, but naming the underlying per-task function and 'convenience migration tool' makes the bulk-vs-single distinction clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_updateCheck UpdateA
Compare the installed fcop-mcp version to the latest on PyPI.
Prints the local version, the latest PyPI version (if reachable),
and a one-line verdict. Does NOT install anything — call
upgrade_fcop afterwards for that.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Output language, ``zh`` or ``en``. | zh |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
It explicitly discloses the key side-effect boundary: it does NOT install anything)Skip. It also hints at network dependency with 'latest PyPI version (if reachable)', though it does not detail failure modes or exit behavior. Good coverage for such a simple 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?
Two short, front-loaded sentences with clear formatting. The core purpose appears first, followed by the side-effect warning and the alternative tool. No wasted words.
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 check tool, the description covers purpose, output, network dependency, and the related upgrade action. Everything an agent needs to decide whether to invoke this tool is present.
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 fully describes the only parameter, lang, with a default and description. The tool description does not add significant additional meaning about parameters, so it does not exceed the baseline.
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 uses a specific verb ('compare') and a clear resource ('installed fcop-mcp version' vs 'latest on PyPI'). It also distinguishes itself from the sibling upgrade_fcop by explicitly stating it does not install.
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 clearly states what this tool does and explicitly says it does not install anything, directing agents to call upgrade_fcop instead. This provides a clear when-to-use / when-not-to-use boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
claim_taskClaim TaskA
Claim a task from inbox → active (v3 lifecycle).
Moves the task file from _lifecycle/inbox/ to
_lifecycle/active/ and appends a claim_task transition
event to the file's frontmatter. On v2 projects this is a no-op
that returns an informational message.
| Name | Required | Description | Default |
|---|---|---|---|
| actor | No | Role code of the agent claiming the task (default ``"agent"``). | agent |
| task_id | Yes | Task ID (e.g. ``TASK-20260423-001``) or full filename. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden and does well: it discloses file movement, frontmatter mutation, and the v2 no-op behavior. It does not mention permissions, idempotency, or what happens if the task is already claimed, so not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences: the first states the core transition, the second explains the mechanism and the v2 caveat. No repeated information, no filler.
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 state-transition tool with a complete schema and output schema available, the description covers what happens, where files move, and the version exception. It could add explicit guidance on choosing this over create_task/archive_task/finish_task, but nothing essential is missing.
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 input schema already documents both parameters (actor with default 'agent'; task_id with example format). The description adds no parameter-specific meaning, and with 100% schema coverage the baseline score of 3 is appropriate.
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?
Description uses a specific verb ('claim') and a precise resource transition ('inbox → active'), then details the concrete mechanics: moving the file from '_lifecycle/inbox/' to '_lifecycle/active/' and appending a transition event to frontmatter. This distinguishes it clearly from sibling lifecycle tools like archive_task or finish_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 v3 lifecycle framing gives clear context for when the tool applies, and the v2 no-op note gives an explicit exclusion condition. It stops short of naming sibling alternatives or stating 'use this instead of X', so it doesn't earn a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_custom_teamCreate Custom TeamA
Create an FCoP project with a custom roster of roles.
Role codes can be anything — they become part of task filenames,
e.g. TASK-20260423-001-BOSS-to-CODER.md. Use validate_team_config
first to catch illegal role codes without writing anything.
Since 3.0.2 fresh init produces the v3 topology (per spec §1.1):
fcop/_lifecycle/{inbox,active,review,done,archive}/ plus retained
reports/ / issues/ / shared/. Superseded v2 buckets
(tasks/, log/) are no longer created on fresh init.
Custom teams have no bundled three-layer docs, so
fcop/shared/ is left empty (apart from the project's
own shared/README.md). The recommended next step is to read
the closest preset (fcop://teams/<closest-preset> — see the
teams/_data/README.md "Custom teams" section) and hand-author
your own TEAM-README.md / TEAM-ROLES.md /
TEAM-OPERATING-RULES.md + roles/{ROLE}.md based on it.
The other init artifacts are deposited as usual:
fcop/fcop.json, LETTER-TO-ADMIN.md,
workspace/README.md, plus the protocol rule files at
.cursor/rules/*.mdc + AGENTS.md + CLAUDE.md (existing
copies archived under .fcop/migrations/).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Output language, ``zh`` or ``en``. | zh |
| force | No | When ``True``, overwrite an already-initialized project. Existing config / letter / workspace README / ``shared/`` files are archived under ``.fcop/migrations/<timestamp>/`` before the new ones land. Default: ``False``. | |
| roles | Yes | Comma-separated role codes (e.g. ``"BOSS,CODER,TESTER"``). | |
| leader | Yes | Leader role code; must appear in ``roles``. | |
| team_name | Yes | Display name for the team (e.g. ``"My Design Studio"``). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 delivers: it explains what files are created, what v3 topology is produced, that fcop/shared/ is left empty for custom teams, and that existing files are archived under .fcop/migrations/. This is rich behavioral disclosure beyond the schema.
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 long, but every section earns its place: purpose, role semantics, topology behavior, missing docs, and next steps. It is front-loaded with the core purpose and includes structured details that matter for correct invocation, though it could be slightly tightened.
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 the tool's complexity, the absence of annotations, and the presence of an output schema, the description is remarkably complete. It covers preconditions (validate first), exact filesystem effects, what is NOT created, overwrite behavior, and recommended follow-up actions.
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 100%, so the baseline is 3. The description adds extra meaning by explaining that role codes become part of task filenames and by illustrating the format, which helps the agent understand the impact of the roles parameter beyond its raw schema definition.
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 first line states a precise action and resource: 'Create an FCoP project with a custom roster of roles.' This clearly distinguishes it from sibling initializers like init_solo and init_project, which create preset or solo setups.
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 explicitly tells the agent to run validate_team_config first to catch illegal role codes without writing anything, and recommends reading the closest preset as the next step. This gives actionable when-to-use guidance relative to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_taskCreate TaskA
Create a new task and place it in the inbox (v3) or tasks folder (v2).
This is the canonical FCoP v3 spec §8 L1 entry-point for task
creation — functionally identical to :func:write_task but named to
match the spec. In a v3 project the task lands in
_lifecycle/inbox/ so the recipient can claim_task it.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Task body in Markdown. | |
| sender | Yes | Sender role code (uppercase). | |
| subject | Yes | One-line subject for the ``subject:`` frontmatter field. | |
| priority | No | ``P0`` / ``P1`` / ``P2`` / ``P3`` (or legacy aliases). Default: ``P2``. | P2 |
| recipient | Yes | Recipient role code (uppercase). May use the slot form ``ROLE.D1`` or ``TEAM`` for broadcast. | |
| references | No | Comma-separated task filenames for ``references:`` field. | |
| risk_level | No | ``low`` / ``medium`` / ``high`` / ``irreversible``. Leave empty to accept the default (``medium``). | |
| thread_key | No | Optional thread identifier. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the burden of behavioral disclosure. It does disclose the destination path (_lifecycle/inbox/) and the implications for recipient claiming, but it does not state whether the creation is reversible, requires no permissions, or any side effects beyond placement. The description is decent but not exhaustive; a 3 is appropriate given the lack of mutation details like whether it overwrites existing tasks.
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 front-loaded with the core action and placement, followed by a brief context paragraph. Every sentence adds value: the spec reference, the functional equivalence, and the inbox path for claiming. It is concise and well-structured with a clear separation of primary and contextual 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?
Given the complexity of a task-creation tool with 8 parameters, high schema coverage, and an output schema, the description is sufficient. It covers the key workflow (inbox placement and claim), and the schema provides parameter details. The description doesn't need to explain return values since an output schema exists. It is complete for an agent to call the tool 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 100%, so the schema already documents all parameters well, including defaults and formats. The description does not add extra meaning beyond the schema; it references the schema fields implicitly but doesn't clarify ambiguous ones like priority aliases or thread_key usage. Baseline 3 is correct since the schema does the heavy lifting.
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 states that the tool creates a new task and places it in the inbox or tasks folder, with a specific verb and resource. It distinguishes itself from write_task by noting functional identity but naming difference, which helps differentiate among siblings. However, it could be more explicit about the primary use case versus write_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 explicitly mentions that this is the canonical entry-point for task creation per spec, and functionally identical to write_task, which provides guidance on when to use this tool. It does not explicitly state when NOT to use it or mention alternatives like claim_task or list_tasks, but the context of placement and the claim_task reference imply the workflow. Lack of explicit exclusions is a minor gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
deploy_role_templatesDeploy Role TemplatesA
Deploy the three-layer team documentation into shared/.
Writes TEAM-README.md (bilingual), TEAM-ROLES.md,
TEAM-OPERATING-RULES.md, and per-role bios under
docs/agents/shared/ (both zh and en variants).
When force=True (default) existing files are archived under
.fcop/migrations/<timestamp>/shared/ before being overwritten,
so the action is safely reversible. When force=False existing
files are left untouched and reported as skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Language variant to emphasize. Empty = use project language from ``fcop.json``. | |
| team | No | Team ID to deploy. Empty = use the current project's ``fcop.json`` team. | |
| force | No | Overwrite existing files (after archiving) vs skip. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and does so thoroughly: it names the files written, the language variants, the archive location, the overwrite condition, and the reversibility guarantee. It also explains the non-destructive force=False path, which is exactly the kind of side-effect disclosure agents need.
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 well-structured and front-loaded: the first sentence states purpose, the second lists concrete artifacts, and the third explains the branching behavior. Each sentence earns its place, and there is no filler or repeated schema content.
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?
The description plus the 100% schema coverage and existing output schema cover the essential calling context: target files, language variants, force behavior, and reversibility. It does not explicitly state prerequisites such as an initialized project or fcop.json, nor does it contrast with sibling deployment tools, but these are not critical gaps for a tool this well specified.
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 100%, so the baseline is 3. The description adds real semantic value for 'force' by explaining that existing files are archived under .fcop/migrations/<timestamp>/shared/ before overwrite and that force=False reports files as skipped. It does not add meaning for 'lang' or 'team', but the schema already documents those fully.
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 names a specific verb ('Deploy'), the resource ('three-layer team documentation'), and the exact files written, so there is no doubt what the tool does. It does not explicitly differentiate itself from close siblings such as 'redeploy_rules', which keeps it just below the top score.
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 intended use is implied by the purpose: deploy team role templates into shared/. However, the description never states when to choose this over alternatives like redeploy_rules, init_project, or create_custom_team, and it gives no when-not-to-use guidance. The force=True/False branching is parameter behavior, not tool-selection guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drop_suggestionDrop SuggestionA
Pressure valve for agents who disagree with the current FCoP protocol.
Writes a timestamped markdown file under .fcop/proposals/ that
ADMIN can review later. This is the ONLY sanctioned way for an
agent to push back on the rule files (fcop-rules.mdc /
fcop-protocol.mdc). Agents MUST NOT edit the rule files
themselves; those are ADMIN's source of truth.
Works before init_project / init_solo too — suggestions
just land under the project root even if the project is not yet
fully initialized.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | the suggestion body (plain text or markdown). | |
| context | No | optional short context line (e.g. "triggered while doing X"). Rendered as a separate block in the proposal file. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure, and it does so thoroughly. It reveals the side effect (writes a timestamped markdown file), the target location, the audience (ADMIN), the non-destructive relationship to rule files, and the pre-initialization behavior.
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-loaded: it opens with the core purpose, then gives the concrete file behavior, then the governance rule, then the edge-case behavior. Every sentence adds distinct information with no filler or redundancy.
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?
The tool is simple, the schema covers both parameters fully, and an output schema is present. The description supplies the operational context an agent needs to call the tool correctly: what file gets created, where, when it is appropriate, and how it behaves before project initialization.
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 100%, so `content` and `context` are already fully documented in the input schema. The description adds no additional parameter-specific meaning, which matches the baseline expectation for fully covered schemas.
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 and resource: it writes a timestamped markdown file under `.fcop/proposals/` as a proposal for ADMIN review. It also differentiates the tool from siblings by declaring it the ONLY sanctioned way for an agent to push back on rule files, which separates it from tools like write_issue or write_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?
The description gives explicit when-to-use context: an agent disagrees with the current FCoP protocol or wants to push back on `fcop-rules.mdc`/`fcop-protocol.mdc`. It also gives when-not-to-use guidance by forbidding direct edits to rule files, and notes that it works before `init_project`/`init_solo`, covering prerequisite edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fcop_auditFcop AuditA
协议体检工具(ADR-0032)。扫描项目,发现协议合规缺口,产出"体检即整改方案"报告。
与 fcop_check 的区别:
fcop_check— 日常轻量自检(working-tree drift + session/role 冲突)fcop_audit— 一次性深度体检(协议合规度全量扫描 + 整改方案)
三个 scope:
new: 新项目验收 — 协议文件是否完整部署upgrade: 版本升级后验收 — 规则版本 / 文档是否同步takeover: 老 non-fcop 项目首次引入 fcop — 全量合规扫描(含 6 类盲区)auto: 自动推断(推荐)
产出物:fcop/shared/INSPECTION-{date}-{NNN}-{scope}.md
报告含 Execution Block:每条违规附带可直接复制的整改命令、执行人、 Tier 优先级和回滚方式。
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | ``"new"`` | ``"upgrade"`` | ``"takeover"`` | ``"auto"`` | auto |
| output | No | ``"file"`` 写报告文件(默认) | ``"stdout"`` 仅返回 Markdown | ``"both"`` 写文件并返回 | file |
| project_path | No | 保留参数(暂未使用),实际路径由 FCOP_DIR 环境变量或当前目录决定 | . |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 the output artifact path (fcop/shared/INSPECTION-{date}-{NNN}-{scope}.md) and the report's Execution Block contents, including remediation commands, owner, tier priority, and rollback. It does not explicitly state whether the tool modifies project files, though the scan-and-report framing implies it is primarily read-only aside from writing the report.
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 well-organized with headers, lists, and front-loaded purpose. The fcop_check contrast comes early, the scope list is compact, and the output/report details are clearly separated. Every sentence earns its place without filler.
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 tool with 3 optional parameters, full schema descriptions, and an output schema, the description covers the purpose, the alternative tool, the scope semantics, the generated artifact path, and the report structure. Nothing essential to selecting or invoking the tool correctly is missing.
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 100%, so the baseline is 3. The description adds real semantic value by explaining what each scope means (e.g., takeover = first-time fcop introduction with full compliance scan and 6 blind spots), which goes beyond the bare enum values in the schema. The output parameter semantics are left to the schema, but they are already well-documented there.
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 verb and resource: it scans a project for protocol compliance gaps and produces an 'inspection-as-remediation' report. It also explicitly contrasts itself with fcop_check, making it unmistakable which tool to use for deep audits versus routine checks.
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 explicitly names fcop_check as the lightweight daily alternative and positions fcop_audit as the one-time deep inspection. The four scopes (new, upgrade, takeover, auto) further specify the exact usage situations, including the recommendation to use auto.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fcop_checkFcop CheckA
FCoP audit. Cross-reference git working tree + frontmatter against the FCoP ledger.
Two independent post-hoc audits, both new in 0.7.1
(fcop_protocol_version: 1.6.0):
Rule 0.a.1 drift — files in
git status --porcelainthat live outsidedocs/agents/{tasks,reports,issues,log}/are by definition work performed without the task→do→report→archive cycle.Rule 1 sub-agent role impersonation — any
session_idthat signed files under more than one role code. One session = one role binding for life; cross-role usage is direct evidence that a sub-agent self-claimed a role its parent session was not assigned.
This tool is detection, not prevention. It surfaces the
evidence; the protocol-mandated response is for ADMIN to file an
ISSUE-* and decide handoff / co-review / distinct-role per
Rule 1, just as for the role_occupancy table in
fcop_report().
Decomposes to filesystem operations:
git status --porcelain -zfrom the project root.Walk every
TASK-*.md/REPORT-*.md/ISSUE-*.mdindocs/agents/{tasks,reports,issues}+docs/agents/log/*.Read frontmatter only; never task bodies.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Output language, ``zh`` or ``en``. Default: ``zh``. | zh |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries full responsibility. It discloses that the tool only detects and never prevents, describes its filesystem operations (git status --porcelain, scanning TASK/REPORT/ISSUE files, reading frontmatter only), and states it never reads task bodies. This is an unusually detailed behavioral contract.
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?
Lead bold definition is immediately clear, followed by structured numbered and bulleted detail. It is longer than strictly necessary (versioning and protocol-response details add context but could be trimmed), yet nothing is redundant.
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 no annotations and one optional parameter, the description covers what the tool does, how it works at the filesystem level, and the expected follow-up workflow. The presence of an output schema relieves it of explaining return shapes, but it still omits explicit prerequisites (e.g., initialized project/repo) and a direct boundary to fcop_audit.
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 describes the single lang parameter completely, including default 'zh' and allowed values. The tool description adds no parameter-specific detail, but the baseline 3 is appropriate because the schema coverage is 100%.
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 concrete audit scope: 'Cross-reference git working tree + frontmatter against the FCoP ledger' and enumerates the two specific rules (0.a.1 drift and Rule 1 role impersonation). The phrase 'detection, not prevention' helps separate it from reporting/management tools. It does not explicitly differentiate itself from the sibling fcop_audit, so it misses the top score.
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 useful context: this is a post-hoc detection audit and the protocol-mandated follow-up is an ADMIN-issued ISSUE-*. However, it never states explicitly when to choose fcop_check over fcop_audit or fcop_report; the closest is an analogy to role_occupancy in fcop_report(). This makes usage guidance implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fcop_create_alertFcop Create AlertA
ADMIN / Governance Observer only. Manually file a governance alert.
Use when you (as ADMIN or an authorized governance observer) detect a governance gap that automated scanning has not yet captured. Creates a new ALERT-*.md file in fcop/alerts/.
| Name | Required | Description | Default |
|---|---|---|---|
| summary | Yes | Plain-text description of the governance gap (1-3 sentences). | |
| severity | Yes | ``high``, ``medium``, or ``low``. | |
| alert_type | Yes | One of: ``missing_independent_verdict``, ``commit_flood_without_governance``, ``critical_tool_unreviewed``, ``long_running_without_reconciliation``. | |
| suggestion | No | Recommended action for ADMIN. Default: "ADMIN review recommended". | ADMIN review recommended |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 transparency burden. It discloses the side effect (creates a new ALERT-*.md file), the target location (fcop/alerts/), and an access restriction (ADMIN / Governance Observer only). It does not mention permissions enforcement, overwrite behavior, or failure modes, but for a simple create-file operation the core behavior is clear.
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, front-loaded with the access restriction and core action, and avoids repeating schema details. Every sentence contributes either a usage condition or an output effect.
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?
Together with the schema, the description tells the agent who is authorized, when to use it, what file will be created, and where. It lacks details on idempotency/overwrite behavior or post-creation effects, but this is a minor gap for such a simple creation tool.
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 already describes all four parameters with 100% coverage, including allowed enum values for severity and alert_type. The description adds little parameter meaning beyond the schema, so a baseline score of 3 is appropriate.
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 precise action: 'Manually file a governance alert', and names the concrete artifact it creates: 'a new ALERT-*.md file in fcop/alerts/'. It also restricts use to ADMIN or Governance Observer, which disambiguates its role from other tools.
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?
Explicitly tells the agent when to use it ('when you ... detect a governance gap that automated scanning has not yet captured') and who is allowed to use it. It does not name an alternative sibling tool, but the condition for use is clear enough to route an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fcop_list_alertsFcop List AlertsA
ADMIN Governance Alert Inbox. List governance alerts from fcop/alerts/.
Alerts are written automatically by fcop_check() when governance drift
signals are detected (ADR-0031). Each alert is a structured ALERT-*.md file
with severity (high/medium/low), type, and a summary of the governance gap.
This is the ADMIN's "red dot" — run this to see what governance gaps the system has surfaced, without needing to manually patrol logs.
| Name | Required | Description | Default |
|---|---|---|---|
| last_n | No | Maximum number of alerts to return (most recent first). | |
| status | No | Filter by status: ``open``, ``acknowledged``, ``resolved``. Empty string returns all statuses. | |
| severity | No | Filter by severity: ``high``, ``medium``, ``low``. Empty string returns all severities. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 discloses that alerts are automatically written by fcop_check(), that each alert is a structured file (ALERT-*.md) with severity, type, and summary, which gives useful behavioral context. It does not mention any side effects (likely none since it's a read operation), but it does explain the origin and format of the data, which goes beyond just saying 'list alerts.' This is adequate given the tool is read-only in nature, though it could mention that it does not modify anything.
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 concise and well-structured. It starts with a bold, attention-grabbing headline ('ADMIN Governance Alert Inbox'), then states the core function, explains the origin of alerts, and ends with practical usage guidance. Every sentence serves a purpose: it identifies the tool, its data source, and its use case. No redundancy, and the front-loading is effective.
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 list/filter tool with three optional parameters and an output schema, the description is complete. It covers the tool's purpose, data source, file format, and usage scenario. It also implicitly explains the return value (a list of alerts with severity and type). There is no missing information that an agent would need to invoke it correctly, given the schema covers parameters and the output schema exists.
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 100%, so the baseline is 3. The description adds value by explaining what each parameter does in context: for example, 'last_n' as a maximum count, and status/severity as filters. It does not repeat the schema descriptions verbatim; instead, it provides a summary of what the parameters achieve (e.g., filtering by severity and status), which is helpful for an agent to understand the tool's capabilities. It slightly exceeds the baseline by clarifying the semantic intent.
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 what the tool does: it lists governance alerts from the fcop/alerts/ directory. It states a specific verb ('List') and resource ('governance alerts'), and distinguishes itself from sibling tools like fcop_check (which detects drift) and fcop_audit (which performs audits). The phrase 'ADMIN's red dot' immediately signals its role, making it unmistakable among the many fcop 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 description implies when to use it: 'run this to see what governance gaps the system has surfaced, without needing to manually patrol logs.' This gives clear context and contrasts with manual patrolling, but it does not explicitly name alternatives or exclusions. However, it is clear enough that an agent would know to use this for viewing alerts rather than creating them (fcop_create_alert).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fcop_reportFcop ReportA
FCoP Rule 0 — first tool call of every new session, also the general project-status report.
Returns one of two reports plus a versions block + optional drift warning (ADR-0006):
Initialization report when
docs/agents/fcop.jsonis missing. Lists the detected project path + resolution source and the available init modes (Solo / preset teams / custom). Does NOT ask for a role assignment — there's no team yet.UNBOUND report when the project is initialized but this session has no role. Shows project state and a role-assignment template for ADMIN to fill in.
In both cases the [Versions] block reports installed
fcop-mcp / fcop versions plus the project-local vs
packaged versions of the protocol rules. When the project's
.cursor/rules/*.mdc is older than the wheel-bundled copy a
drift warning is appended prompting ADMIN to run
redeploy_rules(). Agents must NOT invoke redeploy themselves.
While UNBOUND (or uninitialized) the agent MUST NOT read task bodies, write any files (except via the explicit init tools), or claim a role from context clues.
.. note::
This tool replaced unbound_report in 0.6.3. The deprecated
alias was removed in 0.7.0; existing system prompts and
LETTER-TO-ADMIN.md references that still reference
unbound_report must switch to fcop_report.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Output language, ``zh`` or ``en``. Default: ``zh``. | zh |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 of behavioral disclosure. It is exceptionally transparent: it explains the two report shapes, the versions block, the drift warning behavior, the fact that no role assignment is requested in the init report, and the constraints on agent behavior while unbound. This goes well beyond a simple 'returns a report' statement.
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 long but well-structured and front-loaded: the core purpose is in the first sentence, followed by clearly separated numbered and bulleted details. The note about the deprecated unbound_report alias earns its place because it prevents confusion with older references. Every sentence adds necessary context.
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?
The description is complete given the tool's complexity: it covers both call scenarios, the versions/drift block, the output variants, role-assignment behavior, and agent prohibitions. Since an output schema is present, detailed return-value documentation is not required. Nothing an agent needs to call fcop_report correctly is missing.
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 only one parameter, lang, and the input schema already documents it completely with 'Output language, ``zh`` or ``en``. Default: ``zh``.' Schema description coverage is 100%, so the description need not repeat parameter details. A baseline 3 is appropriate because the description adds no parameter-specific value, but none is 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?
The description opens with a specific, actionable definition: 'FCoP Rule 0 — first tool call of every new session, also the general project-status report.' It clearly distinguishes the tool from siblings by naming the two report variants (initialization and UNBOUND) and the versions/drift block, so an agent knows exactly what fcop_report does.
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?
Usage guidance is explicit: call it first in every new session, and the description lists the exact conditions for each report type (missing fcop.json vs. initialized but no role). It also gives exclusions and guardrails, such as 'Agents must NOT invoke redeploy themselves' and prohibitions on reading task bodies or claiming roles while unbound.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
finish_taskFinish TaskA
Finish an active task directly: active → done (v3 lifecycle).
Moves the task file from _lifecycle/active/ to
_lifecycle/done/ without a review step. Use this for tasks
that do not require ADMIN approval. On v2 projects this is a no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| actor | No | Role code of the agent finishing the task. | agent |
| task_id | Yes | Task ID or full filename. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It reveals the lifecycle transition, the file move, the lack of a review step, and the v2 no-op behavior. It could go further by mentioning error conditions or what happens if approval is required, but the core side effects are transparent.
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 concise and front-loaded with the key lifecycle transition. Every sentence adds value, including the v2 no-op caveat and the ADMIN approval usage note. No redundant or filler language.
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 the tool's simplicity, the output schema, and the 100% schema parameter coverage, the description is complete. It explains what happens, where files move, when to use it, and edge-case behavior on v2 projects. Nothing critical is missing for correct invocation.
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 100%, so the parameters task_id and actor are already fully documented. The description adds no extra meaning about either parameter, so the baseline score of 3 is appropriate.
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 states the action: finishing an active task by moving it through the lifecycle transition active → done. It also specifies the concrete file move from _lifecycle/active/ to _lifecycle/done/, which distinguishes it from related tools like approve_task or archive_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 provides explicit guidance: use this tool for tasks that do not require ADMIN approval, and notes that on v2 projects it is a no-op. It does not name specific alternative tools for approval-required tasks, but the context strongly implies the distinction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_available_teamsGet Available TeamsA
List bundled preset teams and their role rosters.
Useful before init_project to pick a template that fits the
work. Each team ships with its own three-layer documentation
(TEAM-README.md + TEAM-ROLES.md + TEAM-OPERATING-RULES.md)
that gets deployed into docs/agents/shared/ during init_project.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Output language hint. Currently only affects display prose; the roster data is language-independent. | zh |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the behavioral burden, and it does so by framing the operation as non-mutating ('List') and clarifying that the team documentation is deployed during init_project rather than by this call. It doesn't discuss permissions or rate limits, but for a simple enumeration tool the transparency is adequate.
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 concise, front-loads the core action, and adds useful deployment context in a second sentence. The file names are slightly detailed but earn their place by explaining what the preset teams ship with, so no part is 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?
The tool is simple, has one fully-documented optional parameter, and has an output schema, so the description does not need to explain return values. It covers what the tool lists and when to use it, which is enough for an agent to select and 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 100%, and the single optional lang parameter is fully documented in the schema, including its limited effect on display prose. The description adds no param-level semantics beyond the schema, so the baseline score of 3 is appropriate.
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 opens with 'List bundled preset teams and their role rosters,' which is a specific verb plus resource and scope. The word 'bundled' and 'preset' help distinguish this from custom-team tooling like create_custom_team, so an agent can identify the tool's purpose without opening the sibling tools.
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 clearly states a concrete trigger: 'Useful before init_project to pick a template that fits the work.' It does not enumerate exclusions or alternative tools, so it lacks an explicit when-not-to-use, but the intended context is immediately clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_governance_summaryGet Governance SummaryA
FCoP governance summary. Return aggregate statistics from the governance event log: total calls by risk level, most active tools, and any CRITICAL_TAG events that should be reconciled with Tasks and Reviews.
Use as a quick health check: CRITICAL_TAG events without corresponding Task + Review coverage are governance gaps that require ADMIN attention.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description is the only behavioral source. It clearly implies a read-only aggregation operation ("Return aggregate statistics"), but it doesn't explicitly state it has no side effects or that it's safe to call frequently. It also doesn't disclose any performance or rate implications. Given the read-only nature is fairly obvious from "get/summary", this is adequate but not exemplary.
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, no wasted words. The first sentence states the core purpose and output; the second adds the usage context and interpretation. The critical value-add (reconciliation with Tasks/Reviews) is front-loaded.
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 there is an output schema (not shown but declared), the description doesn't need to detail return formats. It covers what the tool returns, how to interpret it, and the action it implies. No prerequisites, parameters, or edge cases are needed. It is complete for its purpose.
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 are zero parameters, and the input schema is empty (100% coverage trivially). With no parameters, the description needs to explain nothing about them. Baseline is 4, and the description adds no unnecessary parameter info, which is appropriate.
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 states what the tool does: it returns aggregate statistics from the governance event log, specifying the three exact outputs (calls by risk level, most active tools, CRITICAL_TAG events). This distinguishes it from siblings like list_governance_events (which lists individual events) and fcop_check/fcop_audit (which probably run checks or audits).
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 explicitly says "Use as a quick health check" and explains how to interpret the results (CRITICAL_TAG events without coverage are governance gaps requiring ADMIN attention). It gives a clear when-to-use, though it doesn't explicitly mention alternatives or when not to use this tool. Still, the guidance is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_team_statusGet Team StatusA
Return a concise status snapshot of the current project.
Shows whether the project is initialized, which team / roster is loaded, how many open tasks / reports / issues are on disk, and the five most recent activity entries (sorted newest first).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Output language (``zh`` / ``en``). Empty = auto-detect from ``docs/agents/fcop.json``. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 does add useful output behavior, such as 'five most recent activity entries (sorted newest first)' and the on-disk scope of counts. Still, it does not explicitly state that the operation is read-only with no side effects, nor how it behaves when no project is initialized beyond saying it shows whether one is.
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-loaded: the first sentence states the purpose, and the second adds the concrete contents without excess verbiage. Every sentence earns 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 simple status-read tool with one documented optional parameter and an output schema present, the description covers the returned contents well. It is slightly incomplete in that it does not clarify read-only behavior or usage relative to sibling tools, but nothing needed to invoke it correctly is missing.
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 'lang' is fully described in the input schema, including its default and auto-detection behavior, so schema coverage is 100%. The description adds no parameter-level meaning, but none is needed because the schema already carries that burden.
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 uses a specific verb ('Return') and a specific resource ('status snapshot of the current project'), then enumerates exactly what the snapshot contains: initialization state, loaded roster, counts of open tasks/reports/issues, and recent activity. This clearly distinguishes it from the many list/detail sibling tools.
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 intended use is implied: a concise overview of project state, as opposed to detailed per-item tools like list_tasks or list_reports. However, there is no explicit when-to-use or when-not-to-use guidance, nor any named alternative for digging into a specific aspect of the status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
init_projectInit ProjectA
Initialize an FCoP project with a bundled preset team.
Since 3.0.2 a fresh init produces the v3 topology (per spec
§1.1): fcop/_lifecycle/{inbox,active,review,done,archive}/ plus
the retained v2 buckets reports/ / issues/ / shared/.
The superseded v2 buckets tasks/ and log/ are no longer
created on fresh init (use python -m fcop migrate --to-v3 to
upgrade an existing v2 project).
Writes fcop/fcop.json, deposits LETTER-TO-ADMIN.md
under fcop/, creates the workspace/ cage with a
starter README (per Rule 7.5), deploys the team's three-layer
docs to fcop/shared/ (TEAM-README / TEAM-ROLES /
TEAM-OPERATING-RULES + roles/{ROLE}.md, both zh and en),
and (per ADR-0006) deploys the bundled protocol rules to four
locations so any agent host sees them:
.cursor/rules/fcop-rules.mdc,
.cursor/rules/fcop-protocol.mdc, AGENTS.md, and
CLAUDE.md. Existing copies are archived to
.fcop/migrations/<timestamp>/ before being overwritten.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Output language. ``zh`` or ``en``. Default: ``zh``. | zh |
| team | No | Team template ID. One of ``dev-team`` / ``media-team`` / ``mvp-team`` / ``qa-team``. Default: ``dev-team``. (Solo mode is a separate entry point — call ``init_solo`` instead so the config carries ``mode="solo"``.) | dev-team |
| force | No | When ``True``, overwrite an already-initialized project. The previous ``fcop.json``, letter, workspace README, and ``shared/`` documents are archived under ``.fcop/migrations/<timestamp>/`` before the new content lands — nothing is lost silently. Use this when ADMIN wants to switch teams (e.g. solo → dev-team) without manually wiping the project. Default: ``False``. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 delivers: it enumerates every artifact written, the exact rule-file locations, the retained and removed v2 buckets, and the archival behavior under .fcop/migrations/<timestamp>/. It even explicitly notes that existing copies are archived so nothing is lost silently.
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 long and dense, but nearly every sentence carries concrete behavioral consequences; the core purpose is front-loaded. It could be tightened with bulleted structure and trimmed of internal references like §1.1, Rule 7.5, and ADR-0006, but overall it earns its length for a complex initialization tool.
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?
Side effects and outputs are comprehensively covered, and an output schema exists, so return values do not need to be described. The main gap is the missing prerequisite that a project directory should be configured first (e.g., via set_project_dir), which would help an agent avoid calling this tool prematurely.
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 100%, so the baseline is 3. The description repeats some force behavior already present in the schema but does not add meaningful new meaning about lang, team, or force beyond what the schema already documents.
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 first sentence states a specific verb and resource ('Initialize an FCoP project') and narrows scope to 'bundled preset team', which distinguishes it from siblings like init_solo and create_custom_team. The additional v2/v3 topology details further clarify exactly what kind of initialization this tool performs.
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 tool definition gives explicit routing guidance: solo mode should call init_solo instead, existing v2 projects should use migrate --to-v3, and force is appropriate when switching teams. This is explicit when/when-not guidance rather than leaving the agent to infer it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
init_soloInit SoloA
Initialize an FCoP project in Solo mode (one AI, no dispatch).
Solo mode is for projects where a single agent works directly with ADMIN. Rule 0.b still applies: the agent uses files to split itself into proposer and reviewer, even though there is no second role.
Since 3.0.2 fresh init produces the v3 topology (per spec §1.1):
fcop/_lifecycle/{inbox,active,review,done,archive}/ plus retained
reports/ / issues/ / shared/. Superseded v2 buckets
(tasks/, log/) are no longer created on fresh init.
Beyond fcop.json and the canonical directories, this also
deposits fcop/LETTER-TO-ADMIN.md (the user manual),
creates the workspace/ cage with a starter README (per Rule
7.5), deploys the bundled solo three-layer docs (TEAM-README /
TEAM-ROLES / TEAM-OPERATING-RULES + roles/ME.md, both zh and
en) to docs/agents/shared/, and (per ADR-0006) drops the
bundled protocol rules into .cursor/rules/*.mdc +
AGENTS.md + CLAUDE.md. Existing copies are archived under
.fcop/migrations/<timestamp>/ before being overwritten.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Output language, ``zh`` or ``en``. | zh |
| force | No | When ``True``, overwrite an already-initialized project. All previous artifacts (config, letter, workspace README, ``shared/`` docs, protocol rule files) are archived under ``.fcop/migrations/<timestamp>/`` before the new content lands. Use this when ADMIN wants to switch from team mode back to solo, or re-init solo with a different ``role_code``. Default: ``False``. | |
| role_code | No | The single role code (uppercase letters / digits / underscore, must start with a letter; ``ADMIN`` and ``SYSTEM`` are reserved). Default: ``ME``. | ME |
| role_label | No | Display label (e.g. ``"我自己"``). Currently recorded in ``extra`` for future use; the library does not yet consume it. Safe to omit. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and meets it. It discloses the v3 topology, that v2 buckets are no longer created, the exact deposited files, and that existing copies are archived under .fcop/migrations before being overwritten. This is unusually transparent for a mutating init 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 long but front-loaded with the core purpose and mode before the artifact list. The detail is earned by the tool's broad side effects, though a few clauses are slightly redundant (e.g., 'one AI, no dispatch' vs. 'single 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?
The description is complete about outputs and side effects, and an output schema exists so return-value details are not required. However, it does not state whether set_project_dir or a particular working directory is a prerequisite, which is a real gap for an initialization tool.
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 100%, so the baseline is 3. The description does not add parameter-level detail beyond the schema; it mentions role_code and force only incidentally, not with new semantics.
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 verb and resource: 'Initialize an FCoP project in Solo mode.' It adds mode detail ('one AI, no dispatch') and lists concrete deliverables, which distinguishes it from generic team/init siblings without needing to inspect schemas.
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?
It says solo mode is for projects where a single agent works directly with ADMIN, giving clear selection context. It does not explicitly name alternatives or say when not to use it, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_taskInspect TaskA
Validate a task file against FCoP grammar.
Catches deterministic violations that raw read_file + regex
agents often miss: filename says to-DEV but frontmatter says
recipient: QA, protocol field mistyped, required field
missing, and so on.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Task filename or ID (same forms as ``read_task``). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the transparency burden. It discloses that the tool 'catches deterministic violations' and provides concrete examples, which signals a read-only validation behavior. It does not explicitly state 'does not modify the file', but the verbs 'validate' and 'inspect' strongly imply it.
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-loaded: the first sentence defines the action, and the second sentence adds concrete examples of what the tool catches. Every sentence earns its place with no filler.
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 tool with one well-documented parameter and an output schema, the description provides sufficient context about purpose and typical use. It could strengthen completeness by explicitly stating it is read-only or by naming related validation tools, but these are minor gaps.
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 only one parameter and the schema already describes it thoroughly, including accepted forms ('Task filename or ID (same forms as read_task)'). Since schema coverage is 100%, the description does not need to add parameter details; it also does not add meaningful extra parameter semantics.
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 states a specific action and resource: 'Validate a task file against FCoP grammar.' The examples make the tool's scope concrete. It does not explicitly distinguish itself from sibling validation tools like fcop_check, but it does separate itself from raw read_file + regex approaches.
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 clear context for when the tool is useful: when deterministic grammar violations need to be caught, especially ones that raw read_file + regex would miss. It does not explicitly say when not to use it or name sibling alternatives, but the use case is well implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_governance_eventsList Governance EventsA
FCoP governance audit. Read the append-only governance event log.
Returns recent tool-call intercept events recorded by the FCoPGovernanceMiddleware (ADR-0030-bis Layer 1). Use this to understand what actions agents have taken and their risk classification.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Filter by tag: "ALLOW", "REVIEW_TAG", "CRITICAL_TAG", or "" (all). | |
| risk | No | Filter by risk level: "Safe", "Sensitive", "Critical", or "" (all). | |
| last_n | No | Maximum number of recent events to return (default 50). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 states 'Read' and refers to an 'append-only' log, which strongly implies a non-mutating, read-only operation with no side effects. However, it does not explicitly declare the absence of side effects, nor does it mention any authentication, rate limits, or error conditions. The description adds context (ADR-0030-bis Layer 1) and clarifies output content, but lacks explicit safety disclosures beyond the implication of 'read'.
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 concise—two sentences plus a bolded lead-in. It front-loads the core purpose ('FCoP governance audit') and then efficiently explains use and output. Every sentence earns its place with no redundancy or fluff.
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?
The tool has an output schema, so return-value details need not be repeated. The description fully explains what the tool does, why to use it, and what it returns (recent events with risk classification). All three parameters are optional and well-documented in the schema, so an agent has enough to call it correctly. Minor gaps like ordering or pagination semantics are covered by last_n and the output schema.
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 100%, as each parameter (tag, risk, last_n) has its own detailed description. The tool description does not add further parameter semantics beyond what the schema already provides. Since the schema handles parameter meaning completely, a score of 3 is appropriate per the baseline for high coverage.
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 states the tool reads an append-only governance event log and returns recent tool-call intercept events. It uses a specific verb ('Read') and resource ('governance event log'), and mentions the middleware and ADR reference, which distinguishes it from generic audit tools. However, it does not explicitly name sibling tools like fcop_audit or fcop_check, so differentiation is implicit rather than explicit.
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?
It provides a clear context for use ('Use this to understand what actions agents have taken and their risk classification'), which tells an agent when to apply it. But it does not mention when not to use this tool or direct to any alternative sibling tools, so the agent must infer that other audit tools might serve different purposes without explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_historyList HistoryA
List the deep history archive.
When date is supplied (YYYY-MM-DD) the tool lists every task
entry stored under that date shard. When date is omitted it lists
all available date shards (newest first).
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Optional date shard in ``YYYY-MM-DD`` format. Leave empty to list all available date shards. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses the two distinct behaviors, states that all task entries under a date shard are listed, and gives the ordering of shards (newest first). The lack of detail about output shape is acceptable because an output schema is present, and 'List' strongly implies a read-only operation.
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 two short sentences with no filler. It front-loads the core purpose, then immediately explains the two invocation modes in a compact, scannable way.
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 tool with one optional parameter, clear schema coverage, and an output schema, the description covers both call modes and the key ordering behavior. It does not specify the ordering of task entries within a date shard, but this is a minor omission given the tool's simplicity and the available schema/output schema.
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 already documents the date format and the empty-string meaning, so the baseline is met. The description goes further by adding behavioral semantics: supplying a date yields every task entry under that shard, and omitting it returns shards newest first. This extra meaning helps the agent predict results more accurately.
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 verb ('List') and a specific resource ('deep history archive'), and clearly describes the two modes: with a date it lists task entries under that date shard, without one it lists all date shards. It does not explicitly contrast itself with sibling tools like list_tasks or read_history_task, but the 'deep history' scope is distinguishable enough.
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?
It clearly explains when to use the date parameter versus omit it, which directly guides invocation. However, it does not explicitly discuss tool selection relative to alternatives such as list_tasks or read_history_task; the 'deep history' framing implies the use case but leaves the comparison implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_issuesList IssuesC
List issues, optionally filtered.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Kept for 0.5.4 parity; currently unused. | |
| limit | No | Maximum number of rows (0 = no limit). | |
| offset | No | Number of rows to skip. | |
| reporter | No | Filter by reporter role code (case-insensitive). | |
| severity | No | Filter by severity (``critical`` / ``high`` / ``medium`` / ``low``). Empty = all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. 'List' weakly implies a read-only operation, but the description does not explicitly state side effects, permissions, or any behavioral nuances. It adds no behavioral detail beyond what the tool name already suggests.
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 words. It is appropriately concise for a simple list operation, though it sacrifices behavioral detail that would have justified a higher score.
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 the presence of an output schema and full parameter documentation, the description covers the basic mechanics of listing and filtering. However, it omits usage guidance and behavioral transparency, and with zero annotations the overall context is thinner than ideal for an AI agent deciding when and how to invoke the tool.
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 100%, so the schema already documents all five parameters thoroughly. The description's mention of 'optionally filtered' adds no parameter-level meaning beyond the schema, but it also does not need to compensate for any coverage gaps. Baseline 3 is appropriate.
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 'List issues' with a clear verb and resource, and adds 'optionally filtered' to signal filtering behavior. It is not quite a 5 because it does not explicitly distinguish itself from sibling listing tools like list_tasks or list_reports, though the resource name makes the distinction reasonably obvious.
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 alternatives, no exclusions, and no context about when filtering or pagination would be appropriate. The name implies its use case, but the description itself provides no explicit usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reportsList ReportsC
List reports, optionally filtered.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of rows (0 = no limit). | |
| offset | No | Number of rows to skip. | |
| status | No | ``open`` (default), ``archived``, or ``all``. | open |
| task_id | No | Filter by source task ID. | |
| reporter | No | Filter by reporter role code (case-insensitive). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 only says 'optionally filtered' without disclosing defaults, return format, pagination behavior, or that it returns a list of report objects. The schema provides defaults, but the description adds no behavioral context beyond that.
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 efficient sentence with no waste. It is appropriately sized for a list operation, though it could be slightly more informative without being verbose.
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 no annotations and an output schema that may explain returns, the description still fails to disclose core behavioral traits like default filtering (status='open') or that pagination is available via limit/offset. An agent cannot infer when to use this vs other tools or what side effects might occur.
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 100%, with each parameter already documented. The description adds no additional meaning beyond 'optionally filtered', which is implied by the optional parameters. Baseline of 3 applies since the schema does the heavy lifting.
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 clear verb and resource ('List reports') and mentions optional filtering. However, it doesn't differentiate from sibling tools like list_tasks or list_history; the name itself is unambiguous enough.
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 tool vs alternatives. There is no mention of context like 'use this to fetch report summaries' or 'prefer read_report for a single report'. The description simply restates the obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_reviewsList ReviewsC
List REVIEW files, optionally filtered.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of rows (0 = no limit). | |
| offset | No | Skip this many rows. | |
| status | No | ``open`` (default) / ``archived`` / ``all``. | open |
| decision | No | Filter by decision value (``approved`` / ``rejected`` / ``needs_changes`` / ``abstained`` / ``needs_human``). | |
| subject_type | No | Filter by subject type (``task`` / ``report`` / ``role_switch`` / ``code_change``). | |
| reviewer_role | No | Filter by reviewer role code. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 of behavioral disclosure. It implies a read-only listing operation but does not mention pagination behavior, return size limits, the default 'open' status filter, or any other significant behavior, leaving nearly all behavioral detail to the schema.
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 zero filler, immediately stating the verb and resource. It is appropriately brief for a simple list tool, though its brevity leaves usage and behavioral guidance unaddressed, which is a completeness issue rather than a conciseness issue.
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?
The output schema and fully documented input schema cover the calling contract effectively. What is missing is usage guidance among a large sibling set, behavioral expectations, and clarification of the 'REVIEW files' concept, making the description minimally complete but not self-sufficient for agents.
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 100%, with defaults and allowed values already documented for all six parameters. The description adds only a generic 'optionally filtered' summary, which does not explain any parameter meaning beyond what the schema provides, matching the high-coverage baseline of 3.
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 clear verb and resource ('List REVIEW files') and a specific capability ('optionally filtered') that maps to the six optional filter parameters. It is not a tautology of the title, though it does not explain what a REVIEW file is or explicitly differentiate itself from siblings like list_reports and list_tasks.
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 is offered about when to use this tool rather than read_review, list_reports, or list_tasks. The phrase 'optionally filtered' hints at filter-driven use cases but provides no exclusions, prerequisites, or conditions for choosing this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tasksList TasksB
List tasks, optionally filtered.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Filter by YYYYMMDD date stamp. | |
| limit | No | Maximum number of rows to return (0 = no limit). | |
| offset | No | Number of rows to skip before returning. | |
| sender | No | Filter by sender role code (case-insensitive). | |
| status | No | ``open`` (default), ``archived``, or ``all``. | open |
| recipient | No | Filter by recipient role code. Matches ``to-ROLE``, ``to-ROLE.SLOT``, and ``to-TEAM`` broadcasts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure, and 'List' does convey a read-only, non-destructive operation. However, it does not mention the default status of 'open', pagination behavior, or any details about which task states are included, leaving the agent to infer those traits from the schema.
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 one short sentence with the action and resource front-loaded, and 'optionally filtered' is the only qualifier. No words are wasted, making it exemplary in conciseness.
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?
An output schema exists and the input schema is fully described, so the description does not need to explain parameters or return values. However, for a tool with many sibling list variants and no annotations, the one-line description leaves selection context and behavioral defaults to be inferred, so it is minimally adequate but not complete.
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 100%, with all six optional parameters documented including defaults and matching rules. The description adds no parameter-level detail, so it neither helps nor hurts beyond the schema, matching the baseline of 3.
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 names a specific verb and resource, 'List tasks', and adds the useful qualifier 'optionally filtered'. It is clear about the core operation, but it does not distinguish this from sibling list tools nor from read_task or inspect_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?
No guidance is given on when to use this tool versus alternatives such as list_history, list_reports, or read_task. The phrase 'optionally filtered' implies some filtering use cases, but there are no explicit conditions, exclusions, or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_workspacesList WorkspacesA
List all workspace/<slug>/ subdirectories with their metadata.
Picks up both workspaces created by new_workspace (they have
a .workspace.json marker) and directories created by hand
(shown with just the slug). Use for the at-a-glance "what's
inside this project" view.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Output language (``zh``/``en``). Empty = auto-detect from project config. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 usefully discloses that hand-created directories appear with only the slug and marker-created workspaces include metadata. However, it does not describe the actual metadata contents, sorting, or potential side effects, though as a read-style list the core behavior is adequately conveyed.
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-loaded, with the primary action in the first sentence. The following sentences add genuinely useful distinctions about directory discovery and display without waste.
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 a simple one-parameter schema, an output schema, and no nested objects, the description covers the important operational details: what is listed, how hand-created directories are treated, and when to use the tool. No critical information needed to call it correctly is missing.
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 already documents the single optional lang parameter with 100% coverage, so the baseline is 3. The description adds no parameter-specific detail, but none is needed because the schema fully explains the parameter.
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: lists workspace/<slug>/ subdirectories with metadata. It also distinguishes the tool from new_workspace by explaining it discovers both marker-created and hand-created directories, leaving no ambiguity about its scope.
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 a clear use case: "at-a-glance what's inside this project" view. It does not explicitly name alternatives or exclusion conditions, but the usage intent is unambiguous and distinct from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mark_human_approvedMark Human ApprovedA
Record a human approval decision on a needs_human REVIEW file.
Closes the escalation loop opened by write_review(decision='needs_human').
Writes human_approval sub-structure into the REVIEW frontmatter
and returns the updated review summary (per ADR-0026).
| Name | Required | Description | Default |
|---|---|---|---|
| channel | No | Channel through which the approval was submitted. One of ``mobile`` / ``cli`` / ``web`` / ``manual_file_edit``. Default: ``cli``. | cli |
| comment | No | Optional free-text comment from the approver. | |
| approver | Yes | Role code of the human approver. MUST be an agent with ``layer: admin`` (e.g. ``ADMIN``). | |
| decision | Yes | Human's binary decision: ``approve`` or ``reject``. | |
| review_id | Yes | The stable review ID — filename stem without ``.md`` (e.g. ``REVIEW-20260510-001-ADMIN-on-some-task``). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure. It discloses the write effect on the REVIEW frontmatter and mentions the returned update. However, it does not state permissions, state prerequisites beyond 'needs_human', or behavior on reject vs approve.
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 tightly scoped sentences: first states the action and target, second explains lifecycle context and the returned result. No filler; front-loaded with purpose.
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?
The description explains when this tool fits in the workflow (closing the write_review escalation loop) and what it returns. It omits some stateful details like whether the review must currently be in needs_human status, but the output schema exists and the reference to ADR-0026 provides context.
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 covers 100% of parameters with descriptions, so baseline 3 applies. The description adds no extra parameter meaning beyond the schema, but none is 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?
The description uses a specific verb ('Record') and resource ('needs_human REVIEW file'), and explicitly distinguishes itself by naming the escalation loop opened by write_review(decision='needs_human'), separating it from sibling tools like write_review and approve_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?
It clearly states the trigger: a review needs human approval after write_review(decision='needs_human'). It does not explicitly list alternatives or exclusions, but the lifecycle reference gives enough context for an agent to know when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
new_workspaceNew WorkspaceA
Create a workspace subdirectory under workspace/<slug>/.
workspace/<slug>/ is FCoP's soft convention for the actual
artifacts of a piece of work — code, scripts, data. Keeping those
out of the project root prevents yesterday's mini-game from
colliding with today's report generator.
Idempotent: calling twice with the same slug updates the title / description but never wipes files you already dropped in the folder.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | Short lowercase-hyphen name matching ``^[a-z][a-z0-9-]*$`` and ≤ 40 chars. Examples: ``csdn-search``, ``mini-game``, ``weekly-report-2026w17``. | |
| title | No | Optional human-readable title (any language). | |
| description | No | Optional one-paragraph description, written into the per-slug README. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 transparency burden. It does this well by explicitly disclosing idempotency: calling twice with the same slug updates title/description but never deletes files already present in the folder. It does not claim the second call creates a duplicate or destructive state, which is the most important behavioral trait here.
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 and front-loaded: it gives the immediate action first, then explains the purpose of the workspace convention, then states the key safety behavior. Every sentence earns its place and there is no filler or redundant restatement of the schema.
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 three-parameter tool with 100% schema coverage and an output schema, the description provides adequate context: exact resource, purpose, folder location, and behavioral guarantee. It could be slightly more explicit about how this tool relates to siblings like init_project or set_project_dir, but that is a minor gap, not a usability blocker.
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 already complete (100%), but the description adds meaningful parameter semantics beyond the schema. It clarifies that `slug` is the stable workspace key, and that reusing the same slug causes an update of title/description rather than failure or recreation. This is useful behavior for an agent deciding how to call the tool on an existing workspace.
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 opens with a precise action and resource: 'Create a workspace subdirectory under workspace/<slug>/.' This clearly identifies the tool's function and the path it operates on. It does not explicitly name sibling tools, but the verb and path make the purpose far more specific than the generic title 'New Workspace.'
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 clearly communicates the intended use context: workspace directories are FCoP's convention for actual work artifacts, and using them avoids colliding with unrelated project files. It implies when the tool should be used, though it does not explicitly mention when _not_ to use it or name an alternative sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_history_taskRead History TaskB
Read a task from the deep history archive.
Searches history/ for the task matching task_id. Providing
date restricts the search to that date shard (much faster).
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | Optional ``YYYY-MM-DD`` date shard to restrict the search. | |
| task_id | Yes | Task ID (e.g. ``TASK-20260522-001``) or full filename. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It explains the search behavior (in history/ directory, date shard optimization) but doesn't disclose return format, error handling, or whether it's read-only. It's a read operation by implication, but not explicitly stated. There's no contradiction, but it's sparse.
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 paragraphs with key information front-loaded. No fluff. The example format for task_id is helpful. It's concise and well-structured.
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 the tool has an output schemahandled, the main gaps are lack of when-to-use guidance and minimal behavioral transparency (since no annotations). The description is sufficient for basic invocation but lacks depth for an AI agent to be fully confident about side effects and edge cases.
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 100%, so the schema already documents both parameters. The description adds the meaning of date as a restriction for speed, which is useful, and mentions task_id can be a full filename, which is beyond the schema. However, it's not extensive.
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 states it reads a task from the deep history archive by task_id, which is specific and distinguishes it from siblings like read_task (which likely reads current tasks). It could be more explicit, but the verb-resource pair is 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?
The description implies usage for archived tasks and mentions that providing date restricts the search to a date shard for speed, but it doesn't explicitly contrast with read_task or other alternatives. No exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_reportRead ReportB
Read the full content of a report file.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Report filename or the ``task_id`` the report was filed against. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full burden. It indicates a read-only operation via the verb 'Read', but says nothing about failure modes (missing file), permissions, or that no changes will be made. This is minimal behavioral disclosure for a tool with no annotation support.
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, tightly composed sentence with no filler or repetition. It is appropriately short for such a simple tool, though 'report file' is slightly vague compared to the schema's clarification.
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 one-parameter tool with an output schema, the description covers the core operation, but it misses relational context: it doesn't clarify when to use this instead of list_reports, read_task, or read_review, nor does it address any specifics about the output. The provided output schema compensates for return information, but the contextual ambiguity remains.
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?
Since the schema description provides complete coverage of the 'filename' parameter (allowing a filename or task_id), the description adds little extra beyond the word 'report'. Baseline is therefore a 3 because the schema already explains the parameter fully.
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 states the verb 'Read' and the resource 'report file', and adds 'full content', which distinguishes it from listing or writing reports. However, it doesn't explicitly differentiate from sibling read tools like read_task or read_review by mentioning the resource type beyond 'report file'.
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 intended usage is implied: use when you need the full information from a report. But the description provides no explicit guidance about when not to use it (e.g., when you only need metadata or to list reports) or comparisons to alternatives like list_reports or read_review.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_reviewRead ReviewB
Read the full content of a REVIEW file.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Review filename or review ID (``REVIEW-YYYYMMDD-NNN-{reviewer}-on-{slug}[.md]``). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 of behavioral disclosure. It only says 'Read the full content' without mentioning whether the file must exist, what happens if the filename is invalid, whether it returns raw markdown or parsed content, or any side effects. For a read operation this is a moderate gap, but the lack of any behavioral detail beyond the verb leaves the agent guessing about error behavior and return format.
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 with no waste. It front-loads the action and resource. However, it could have added a brief note about the return format or error behavior without becoming verbose.
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?
The tool has a single parameter, an output schema, and a clear read-only purpose, so the description is mostly adequate. However, with no annotations and no mention of what the output contains or how to handle missing files, an agent might not know what to expect when invoking it. The output schema likely covers return values, but the description doesn't reference it.
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 100%, so the schema already documents the filename parameter with a format hint. The description adds no additional meaning beyond what the schema provides, so the baseline 3 is appropriate.
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 verb ('Read') and resource ('REVIEW file'), which clearly identifies the tool's function. It doesn't explicitly differentiate from sibling tools like read_report or read_task, but the resource type is distinct enough that an agent can infer the difference.
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 context: use this tool when you need the full content of a review file. It doesn't explicitly state when not to use it or name alternatives like list_reviews for browsing reviews, but the context is reasonably clear given the sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_taskRead TaskA
Read the full content of a task file.
| Name | Required | Description | Default |
|---|---|---|---|
| filename | Yes | Task filename (e.g. ``TASK-20260423-001-PM-to-DEV.md``) or plain task ID (e.g. ``TASK-20260423-001``). Both open and archived tasks are searched. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It states the operation is reading, which implies non-destructive behavior. The input schema reveals that both open and archived tasks are searched, but the description doesn't disclose that, nor does it mention any side effects or prerequisites. Reading a file is inherently safe, but the description could state that it doesn't modify anything. It's adequate but minimal.
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, concise sentence that directly states the action and object. It is front-loaded with the main purpose and has no fluff. It earns 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 simple read operation with one parameter and an output schema present, the description is sufficient. The schema provides parameter details, and the output schema defines return values. However, the description doesn't mention that both open and archived tasks are searched, which is a key behavioral detail. Since the schema covers that, it's not a critical gap, but it would be helpful context for an agent to know without opening the schema.
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 100%, so the schema already documents the 'filename' parameter, including examples and the fact that both open and archived tasks are searched. The description does not add additional information about the parameter beyond what the schema provides. Per calibration, when schema coverage is high, baseline is 3, and the description offers no extra 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 states the verb 'read' and the resource 'task file', and explains it reads the full content. It distinguishes from siblings like inspect_task and list_tasks, though it doesn't explicitly name them. The use of 'full content' suggests it's the complete read operation, which adds specificity.
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: when you need the full content of a task filecars. However, it doesn't explicitly contrast with sibling tools like inspect_task or list_tasks, which might provide summaries or metadata. Since the tool name and title already convey 'read' vs 'list' or 'inspect', the usage context is implied but not explicit. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
redeploy_rulesRedeploy RulesA
ADMIN-only. Re-deploy bundled FCoP protocol rules to the project.
Writes the wheel-bundled :file:fcop-rules.mdc /
:file:fcop-protocol.mdc to four locations so any agent host
the project runs under sees the same rules:
.. code-block:: text
<root>/.cursor/rules/fcop-rules.mdc # Cursor IDE
<root>/.cursor/rules/fcop-protocol.mdc # Cursor IDE
<root>/AGENTS.md # Codex / Cursor / Devin / generic
<root>/CLAUDE.md # Claude Code CLIRun this after pip install -U fcop-mcp (or -U fcop)
to refresh on-disk copies to the newly packaged versions.
fcop_report() shows when this is needed via the version
drift warning.
Per ADR-0006, agents must NOT invoke this tool themselves — only ADMIN does, explicitly.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Output language, ``zh`` or ``en``. | zh |
| force | No | When ``True`` (default) overwrite existing copies. ``False`` skips files that already exist (no-op for an up-to-date project). | |
| archive | No | When ``True`` (default) and ``force=True``, the existing copy is moved to :file:`.fcop/migrations/<timestamp>/rules/<rel>` before being overwritten so ADMIN can diff or roll back. ``False`` skips archiving (destructive — only safe when the project has no local edits). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It discloses that the tool writes files, overwrites existing content when force is true, archives previous versions when archiving is enabled, and can behave destructively when archiving is disabled. It also flags the ADMIN-only authorization requirement.
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 organized into a clear summary, a file-location list, a usage trigger, and an access restriction. It is slightly verbose but every sentence adds operational context that is not present in the schema.
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 that no annotations are provided, the description carries the full burden. It covers purpose, destination files, upgrade timing, drift detection, destructive behavior, and the ADMIN-only restriction, which makes the tool's context sufficiently complete.
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 high since both parameters already have detailed descriptions explaining defaults and behavior. The tool description does not add much meaning to the parameters beyond context for when the operation is appropriate, which is more about usage than parameter semantics.
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 immediately identifies the action as re-deploying bundled FCoP protocol rules to specific project files. It names the resource ('bundled FCoP protocol rules'), the destination file set, and the tool's role in refreshing on-disk copies. This leaves little ambiguity about what the tool does.
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 explicitly states when to run the tool: after `pip install -U fcop-mcp` or `fcop`, and mentions that `fcop_report()` signals when it is needed via version drift. It also gives a hard restriction that only ADMIN may invoke it, per ADR-0006, which is essential usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reject_taskReject TaskA
Reject / recall a task under review: review → active (v3 lifecycle).
Moves the task file back from _lifecycle/review/ to
_lifecycle/active/ so the agent can rework it. Appends a
reject_task transition event. This is the FCoP v3 "撤回"
(recall) mechanism — ADMIN sends the work back for revision
without discarding it. On v2 projects this is a no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Mandatory rejection reason (strongly recommended). | |
| actor | No | Role code of the rejector (default ``"ADMIN"``). | ADMIN |
| task_id | Yes | Task ID or full filename. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility and does well: it discloses the file move across lifecycle directories, the appended `reject_task` transition event, the non-destructive nature, and the v2 no-op behavior. It does not mention permission prerequisites or failure behavior, but the core side effects are clearly surfaced.
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 front-loaded with the core state transition and stays compact. There is minor redundancy between the first and second sentences, but every behavioral point earns 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?
Given an output schema exists, return-value documentation is unnecessary. The description covers lifecycle semantics, exact file paths, event logging, non-destructive intent, and version compatibility, leaving only minor gaps around error cases and permission enforcement.
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 100%, so the baseline is 3, and the description adds little param-specific meaning. It implies the ADMIN actor role by describing the ADMIN recall mechanism, but the individual parameters `task_id`, `actor`, and `note` are left to 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?
States a precise verb pair (reject/recall), the exact target resource (task under review), and the state transition `review → active`. The file-path move and v3 lifecycle context make it clearly distinct from siblings like approve_task, archive_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?
Gives clear usage context: ADMIN sends work back for revision without discarding it, and the task returns to active for rework. Also provides an explicit exclusion by noting it is a no-op on v2 projects, though it does not name alternative tools or conditionally compare them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_project_dirSet Project DirA
Pin the project root for this MCP session.
Useful when the MCP process was spawned with the wrong working
directory — typical symptom: unbound_report shows a project
path like C:\Users\<you> instead of the workspace you
actually opened in Cursor. Calling this tool once re-binds every
subsequent tool call to the given directory, without editing
mcp.json or restarting Cursor.
Safe to call while UNBOUND — re-pointing at a directory is not a role-claim and writes nothing. It only mutates in-process state.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | absolute path to the project root (the directory that should contain ``docs/agents/`` and ``.cursor/rules/``). The directory must exist; it does not need to be an already-initialized FCoP project. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 revealing side effects. It explicitly states that the tool writes nothing, is safe to call while UNBOUND, is not a role-claim, only mutates in-process state, and affects every subsequent tool call but not mcp.json or the running Cursor process.
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 front-loaded with the single-sentence purpose and each subsequent sentence adds distinct value: when to use it, what it changes, and what it does not do. It is compact with no filler or repeated material.
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 one-parameter, session-scoped configuration tool with an output schema, the definition covers the required scenario, the operational effect, the safety profile, and the parameter constraints. Nothing essential is missing for an agent to select and 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 100% and the path parameter is already well-documented in the schema, including absolute path, expected contents, and existence requirement. The tool description reinforces that the path is the project root used for re-binding, but adds no new parameter-level meaning beyond the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Pin the project root for this MCP session.' It goes on to say the tool re-binds every subsequent tool call to the given directory without editing mcp.json or restarting Cursor, which clearly separates it from configuration and project-lifecycle siblings like init_project or new_workspace.
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?
It gives a concrete when-to-use context: when the MCP process was spawned with the wrong working directory, and identifies the typical symptom via unbound_report showing a user path instead of the Cursor workspace. It does not name alternative tools, but the described use case is specific enough that an agent can decide 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.
submit_taskSubmit TaskA
Submit an active task for review: active → review (v3 lifecycle).
Moves the task file from _lifecycle/active/ to
_lifecycle/review/ and appends a submit_task transition
event. On v2 projects this is a no-op.
| Name | Required | Description | Default |
|---|---|---|---|
| actor | No | Role code of the agent submitting the task. | agent |
| task_id | Yes | Task ID or full filename. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 and does so well: it discloses the filesystem move, the appended transition event, and the v2 no-op behavior. An agent can predict concrete side effects before calling the 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?
Three sentences, no filler, and the essential state transition is front-loaded. The no-op warning is included without expanding the description unnecessarily.
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 state-transition tool with full schema coverage and an output schema, the description provides everything needed to invoke it correctly: the transition, the file location, the event append, and the v2 exception.
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?
Input schema coverage is 100%, so both parameters are already documented. The description adds lifecycle context but no additional parameter-level detail beyond the schema, which fits the baseline 3 for high schema coverage.
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, 'Submit an active task for review', and defines an exact state transition: active → review. This clearly differentiates it from sibling lifecycle tools like finish_task, approve_task, and reject_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 clearly indicates the tool is for moving an active task into review, which is the context of use. The explicit 'On v2 projects this is a no-op' caveat gives important conditional guidance, though no sibling tool is named as an alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upgrade_fcopUpgrade FcopA
Return the install-method-specific command to upgrade fcop-mcp.
Does NOT run pip — MCP servers cannot safely upgrade themselves
mid-process, and different install methods (pip in a venv,
pipx, uvx) need different commands. This tool prints the
right incantation for the user to run in their own shell.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No | Output language, ``zh`` or ``en``. | zh |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 clearly states that the tool does NOT run pip and explains why, and that it prints a command for the user to run. This is transparent about its non-mutating behavior. It doesn't describe edge cases (e.g., unsupported install methods) but covers the main points.
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 two sentences, front-loaded with the core purpose, and includes necessary context (why it doesn't run pip) without fluff. Every sentence earns 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 simple tool with one optional parameter and an output schema, the description is complete. It explains what it does, why, and what it doesn't do. It doesn't detail the exact output format, but that's covered by the output schema. The description gives enough context for an agent to know when and how to call it.
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 'lang' is fully described in the schema ('Output language, zh or en.'), and the tool description adds no additional context about it. Schema coverage is 100%, so a baseline of 3 is appropriate; the description doesn't enhance understanding of the parameter 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?
The description states a specific verb ('Return') and resource ('install-method-specific command to upgrade fcop-mcp'), clearly distinguishing it from any sibling tool. The purpose is unambiguous and concrete.
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 explains when this tool is needed (to get the correct upgrade command) and explicitly states why it doesn't run pip directly, providing reasoning. However, it doesn't explicitly mention alternatives or exclusions beyond that, so it's slightly below a perfect score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_team_configValidate Team ConfigA
Dry-run validation for a custom team config.
Use before create_custom_team to catch illegal role codes
(Chinese characters, dashes, reserved names, duplicates) without
writing anything to disk.
| Name | Required | Description | Default |
|---|---|---|---|
| roles | Yes | Comma-separated role codes. | |
| leader | Yes | Leader role code; must be one of ``roles``. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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, and it does so well: it states the operation is a dry run and explicitly says it writes nothing to disk. It also enumerates the validation checks performed, which helps the agent understand what the tool will and won't catch.
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-loaded: it leads with the core purpose, then the usage context, then the side-effect guarantee. Every sentence earns its place with no redundant wording.
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 two-parameter tool with full schema documentation and an output schema, the description is complete. It covers purpose, usage timing, side effects, and validation scope, so an agent has enough to select and 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 100%, so the baseline is 3. The description adds value beyond the schema by clarifying what makes role codes illegal (Chinese characters, dashes, reserved names, duplicates), which informs valid values for the roles and leader parameters.
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 verb ('dry-run validation') and a specific resource ('custom team config'), and immediately distinguishes itself from the sibling create_custom_team by noting it catches illegal role codes without writing to disk. An agent can tell exactly what this tool does and what it is not.
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 explicitly says to use this tool 'before create_custom_team' and names the concrete failure classes it catches (Chinese characters, dashes, reserved names, duplicates). This gives clear when-to-use guidance relative to the most relevant sibling tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_issueWrite IssueB
File an issue under docs/agents/issues/.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Detailed issue body in Markdown. | |
| summary | Yes | One-line summary written into the filename and frontmatter. | |
| reporter | Yes | Reporter role code (uppercase). | |
| severity | No | ``critical`` / ``high`` / ``medium`` / ``low``. Aliases: ``P0`` → critical, ``P1`` → high, ``P2`` → medium, ``P3`` → low. | medium |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, and the description only says an issue is filed in a directory. It does not disclose file creation behavior, naming conventions, overwrite risk, or what happens on execution.
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 concise, front-loaded sentence with no filler or restatement of the tool name.
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 file-creating mutation tool, the description omits critical context: filename derivation, overwrite behavior, required parent directories, and return/confirmation behavior.
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 100%, so parameters are already well described. The description adds little beyond operational context, which meets but does not exceed the baseline.
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 clear action ('File an issue') with a specific target location ('docs/agents/issues/'). It distinguishes this from sibling write tools such as write_report and write_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?
No guidance is given about when to choose write_issue versus other tools, nor about prerequisites such as existing directory structure or whether the issue must be approved before creation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_reportWrite ReportB
Write a completion report for a task.
Creates REPORT-<task_id>-{REPORTER}-to-{RECIPIENT}.md under
docs/agents/reports/. The task_id is the canonical reference
back to the source task.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Report body in Markdown. | |
| status | No | ``done`` / ``in_progress`` / ``blocked``. | done |
| task_id | Yes | Source task ID (e.g. ``TASK-20260423-001``). | |
| priority | No | FCoP priority; accepts ``P0``–``P3`` and aliases. | P2 |
| reporter | Yes | Reporter role code (uppercase). | |
| recipient | Yes | Recipient role code (typically the PM). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It states the file it creates and its location, but does not mention whether it overwrites existing files, any permission requirements, side effects on task state, or error behavior. For a tool that writes to disk, this is a significant gap.
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 two sentences with no filler. It front-loads the purpose and immediately provides the concrete file naming and location, then clarifies the role of task_id. Every word earns 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?
The description covers the core behavior (file creation, naming, path) but does not mention when to use this tool versus siblings like write_issue or write_review, nor any prerequisites or side effects. Since an output schema exists, the return value is covered elsewhere, but the lack of usage context and alternative differentiation leaves the agent under-informed.
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 100%, so baseline is 3. The description adds value by explaining that task_id, reporter, and recipient are used in the generated filename, which the schema does not convey. It also clarifies task_id as the canonical reference, enriching the meaning beyond the schema's simple 'Source task ID'.
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 states the verb 'write' and the resource 'completion report for a task', and gives the specific file naming convention and path. It is specific enough to distinguish from generic report writing, but it does not explicitly differentiate from sibling tools like write_issue or write_review, so it misses the highest level of clarity.
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 for completion reports ('Write a completion report for a task') and gives the file path, but it provides no explicit guidance on when to use this tool versus alternatives (e.g., write_issue, write_review). No exclusions or conditions are stated, leaving the agent to infer.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_reviewWrite ReviewC
Write a REVIEW file (governance-layer decision, per ADR-0017/0025).
| Name | Required | Description | Default |
|---|---|---|---|
| body | No | Additional Markdown body after the frontmatter. | |
| decision | Yes | Review decision. One of: ``approved`` — artefact is accepted; ``rejected`` — artefact is rejected (cannot proceed); ``needs_changes`` — must be revised (requires ``required_changes``); ``abstained`` — reviewer recuses; ``needs_human`` — reviewer escalates to human (ADR-0025, v1.1). The review stays pending until ``mark_human_approved`` is called to close the loop. | |
| rationale | No | Free-text rationale for the decision. Recommended for all non-``approved`` decisions. | |
| subject_ref | Yes | Reference to the artefact under review — file path for task/report/code_change; fcop.json diff range for role_switch. | |
| subject_type | Yes | What is being reviewed. One of ``task`` / ``report`` / ``role_switch`` / ``code_change``. | |
| reviewer_role | Yes | Role code of the reviewer (must have ``review_decision`` capability; typically ``layer: governance`` or ``layer: admin``). | |
| subject_short | No | Override the ``-on-{slug}`` segment of the filename. Auto-derived from ``subject_ref`` when omitted. | |
| reviewer_agent | No | Optional agent/session identifier on top of the role code. | |
| required_changes | No | Newline- or comma-separated list of required changes. Mandatory when ``decision=needs_changes``. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are absent, so the description carries the full burden of behavioral disclosure. It only states the action without mentioning side effects (e.g., file creation/overwrite), required capabilities (like review_decision, which is in the schema but not the description), output behavior, or escalation flow. This is a serious gap for a tool with complex governance semantics.
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 with no fluff, and the core purpose is front-loaded. However, it is so terse that it sacrifices helpful context for brevity, though it remains appropriately concise given the rich schema.
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 9 parameters, an output schema, and no annotations, the description is too sparse. It does not explain the review workflow, the significance of decision types, the requirement for required_changes with needs_changes, or the human escalation mechanism (needs_human / mark_human_approved). An agent relying solely on the description would lack critical operational context.
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 100%, so the schema fully documents all 9 parameters. The description adds nothing about parameters, but per the rubric, a baseline of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Write) and the resource (a REVIEW file) with a specific governance-layer decision context. It distinguishes this from sibling read/list tools like list_reviews or read_review, and the verb is 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?
The description provides no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The phrase 'governance-layer decision' hints at context but does not specify when a review should be written, when to use mark_human_approved instead, or any conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_taskWrite TaskA
Create a new task file (v3: _lifecycle/inbox/; v2: fcop/tasks/).
The library assigns a filename of the form
TASK-YYYYMMDD-NNN-{SENDER}-to-{RECIPIENT}.md and writes a
FCoP-compliant YAML frontmatter + markdown body.
In a v3 project the task is placed in _lifecycle/inbox/ so the
recipient can claim_task it.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Task body in Markdown. | |
| sender | Yes | Sender role code (uppercase). | |
| subject | Yes | One-line subject written to the ``subject:`` frontmatter field. | |
| priority | No | FCoP priority. Accepts ``P0`` / ``P1`` / ``P2`` / ``P3`` (canonical) or the legacy aliases ``urgent`` / ``high`` / ``normal`` / ``low``. Default: ``P2``. | P2 |
| recipient | Yes | Recipient role code (uppercase). May use the slot form ``ROLE.D1`` for per-slot targeting or ``TEAM`` for broadcast. | |
| references | No | Comma-separated task filenames this task refers back to (for ``references:`` frontmatter field). | |
| risk_level | No | Operation risk level (per ADR-0024). One of ``low`` / ``medium`` / ``high`` / ``irreversible``. Default: ``medium``. ``high`` and ``irreversible`` will automatically require a ``needs_human`` review gate. Leave empty to accept the default (``medium``). | |
| thread_key | No | Optional thread identifier for linking this task to an ongoing conversation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden, and it does disclose file creation, filename generation, frontmatter/body writing, and v2/v3 placement. It does not cover overwriting behavior, required project setup, permissions, or failure modes, but the core side-effect is visible.
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 efficient, front-loaded with the primary action, and each sentence contributes useful context: path, filename, and downstream claim workflow. There is no filler, though the v3/v2 path details could potentially be more compact.
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?
The description covers the important context for a creation tool: what file is written, where it is placed, the filename shape, and the downstream claim step. Given the full input schema, an output schema, and no annotations, this is largely complete, though the relationship to create_task remains a gap.
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?
Input schema coverage is 100%, so every parameter is fully documented in the schema itself. The description adds little beyond stating the generated filename uses sender and recipient, which is enough to meet the baseline but no more.
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 states that the tool creates a new task file and gives concrete details about paths and filename format. However, it does not differentiate write_task from the closely named sibling create_task, so it is clear but lacks sibling discrimination.
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 context by explaining where the task file is placed and that the recipient can claim it. It does not explicitly state when to use this tool over create_task or other task lifecycle tools, nor does it give exclusions, so guidance remains implicit rather than direct.
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.
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 45 tools
Several tools have unclear boundaries: write_task and create_task are explicitly functionally identical, and fcop_check, fcop_audit, list_governance_events, and fcop_list_alerts all overlap as audit/governance surfaces. The lifecycle transitions are distinct, but the duplicate task creator and the cluster of similar check/audit tools will cause misselection.
Most tools follow a readable lowercase snake_case verb_noun style, but the conventions are mixed: creation verbs vary across init_, create_, write_, and new_, and the fcop_ prefix is applied only to some admin tools while others like redeploy_rules and check_update lack it. The naming is still navigable but not consistent enough to be predictable.
45 tools is far beyond the 25-tool threshold for a well-scoped server, and many are conveniences or near-duplicates such as create_task/write_task and bulk_archive_to_history. The broad FCoP lifecycle partially justifies the size, but the surface is overgrown and should be consolidated.
The core lifecycle is well covered: initialization, task creation and state transitions, reports, reviews, history archiving, workspaces, and governance alerts. However, issues have no read or update tool, and tasks/reports lack edit or delete operations, leaving notable gaps for a project-management domain.
Maintenance
Related MCP Connectors
Shared control plane for AI coding agents — tasks, memory, decisions, file locks. 12 tools.
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.
Real-time chat for AI agents. Claude Code, Cursor, Cline and Codex join channels over MCP.
Related MCP Servers
- AlicenseAqualityDmaintenancePersistent, cross-session task management for Claude Code. 24 MCP tools for tasks, projects, dependencies, and docs. 7 skills for planning, standups, and handoffs. Event-sourced storage with per-project isolation.5MIT
- 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
- AlicenseAqualityDmaintenanceAn agent orchestration layer that wraps expert agents as MCP tools, enabling integration with Claude Desktop, Cursor, and other MCP-compatible environments.46 npm9MIT
- FlicenseNot gradedqualityBmaintenanceA 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.-