{
  "schema_version": "1.0",
  "description": "Authored source of truth for every PRD Plugin tool (REQ-107). The UTCP manual is GENERATED from this file, and mcp/server.cjs READS it rather than declaring tools inline, so a tool cannot exist on one transport and be missing from the other. `transport` records how a tool is currently executed; tools migrate mcp -> cli as their handlers move to validated native entry points, which is what lets @utcp/mcp-bridge serve the manual directly.",
  "tools": [
    {
      "name": "config_inventory",
      "transport": "cli",
      "capability": "config.read",
      "access": "read",
      "description": "Inspect the unified PRD Plugin configuration inventory: every persistent setting with ownership, mutability, activation, dependencies, and latency, plus environment, install-time, host-wiring, specialized-CRUD, and invocation-only controls.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "band": "observe"
    },
    {
      "name": "decisions",
      "transport": "cli",
      "capability": "state.read",
      "access": "read",
      "description": "A repo's durable decisions (DEC-*) from its PRD-plugin ledger.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "band": "recall"
    },
    {
      "name": "drift",
      "transport": "cli",
      "capability": "knowledge_and_drift",
      "access": "read",
      "description": "The cheap on-Stop drift summary for a repo (state / docs / wiki / ingest-manual / fork-version drift).",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "band": "observe"
    },
    {
      "name": "evidence",
      "transport": "cli",
      "capability": "state.read",
      "access": "read",
      "description": "A repo's evidence records (EV-*) backing completion claims.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "band": "recall"
    },
    {
      "name": "fabric",
      "transport": "cli",
      "capability": "fabric.resolve",
      "access": "read",
      "description": "Resolve the fabric prediction profile bound to a model (fabric.model_profiles policy, evidence-bound): returns the calibrated treatment to apply, or the fail-safe raw/abstain default for unmapped models — a profile is never guessed.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "band": "observe"
    },
    {
      "name": "gate",
      "transport": "cli",
      "capability": "verification",
      "access": "read",
      "description": "The PRD Plugin verification gate findings for a repo (duplicate ids, version markers, stranded work, timescales).",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "band": "observe"
    },
    {
      "name": "prd_close_goal",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "Finishing a goal? Record the proof FIRST (prd_record_evidence), then close with the EV id. Closing requires a linked EV-* that actually exists, or an explicit no_evidence_reason — 'done' without evidence is exactly what the method forbids.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "evidence_id": {
            "type": "string"
          },
          "no_evidence_reason": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "complete",
              "resolved"
            ]
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_check_messages",
      "transport": "mcp",
      "capability": "state.read",
      "access": "read",
      "description": "Check messages in the current repo. Call this FIRST when the user asks whether there are messages, requests, inbox items, mailbox replies, or outbox items. It reads this repo's PRD Plugin transport and request-thread state; do not substitute chat, email, or collaboration tools.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "json",
              "markdown"
            ]
          }
        }
      }
    },
    {
      "name": "prd_close_thread",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "Close a finished request thread with a reason (REQ-113). Without this a settled conversation stays 'unresolved' in message_check forever, leaving the transport dashboard permanently amber. Only a settled request (implemented, rejected, deferred) may have its thread closed, so live work is never hidden. Idempotent.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The request whose thread is being closed."
          },
          "reason": {
            "type": "string",
            "description": "Why it is closed. Required — an unexplained close is unauditable."
          }
        },
        "required": [
          "id",
          "reason"
        ]
      }
    },
    {
      "name": "prd_config_get",
      "transport": "mcp",
      "capability": "config.read",
      "access": "read",
      "description": "Read one unified configuration key. Describe returns value, type, default, owner, activation, dependencies, and latency; effective additionally explains disabled dependencies.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "view": {
            "type": "string",
            "enum": [
              "value",
              "describe",
              "effective"
            ]
          }
        },
        "required": [
          "key"
        ]
      }
    },
    {
      "name": "prd_config_list",
      "transport": "mcp",
      "capability": "config.read",
      "access": "read",
      "description": "Inspect the unified PRD Plugin configuration surface. List classified settings with optional category/latency/mutability filters, audit direct JSON edits, or inventory persistent, environment, install-time, host-wiring, specialized-CRUD, and invocation-only controls.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "view": {
            "type": "string",
            "enum": [
              "settings",
              "inventory",
              "audit"
            ]
          },
          "category": {
            "type": "string"
          },
          "latency": {
            "type": "string",
            "enum": [
              "high",
              "medium",
              "low",
              "none"
            ]
          },
          "mutable": {
            "type": "string",
            "enum": [
              "all",
              "yes",
              "no"
            ]
          }
        }
      }
    },
    {
      "name": "prd_config_profile",
      "transport": "mcp",
      "capability": "config.mutate",
      "access": "write",
      "description": "List, inspect, diff, atomically apply, save, or delete unified configuration profiles. Built-in lean/balanced/thorough profiles never auto-enable external integrations; apply supports dry-run.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "list",
              "show",
              "diff",
              "apply",
              "save",
              "delete"
            ]
          },
          "name": {
            "type": "string"
          },
          "dry_run": {
            "type": "boolean"
          },
          "keys": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "description": {
            "type": "string"
          }
        },
        "required": [
          "action"
        ]
      }
    },
    {
      "name": "prd_config_set",
      "transport": "mcp",
      "capability": "config.mutate",
      "access": "write",
      "description": "Change one operator-mutable unified configuration key through validated, formatting-preserving writes. Use enable/disable only for boolean keys; managed/read-only keys are rejected.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "value": {},
          "action": {
            "type": "string",
            "enum": [
              "set",
              "enable",
              "disable"
            ]
          }
        },
        "required": [
          "key"
        ]
      }
    },
    {
      "name": "prd_create",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "Create a mutable tracking, request, or health record without choosing an ID. Allocation, duplicate detection, timestamps, and the record write run under the existing state lock. Use the specialised evidence/decision/change tools for append-only records.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "TRK",
              "REQ",
              "HLT"
            ]
          },
          "summary": {
            "type": "string"
          },
          "record_type": {
            "type": "string"
          },
          "severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ]
          },
          "rationale": {
            "type": "string"
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "affected_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recommended_action": {
            "type": "string"
          },
          "agent": {
            "type": "string"
          },
          "session": {
            "type": "string"
          }
        },
        "required": [
          "kind",
          "summary"
        ]
      }
    },
    {
      "name": "prd_file_request",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "Found a bug, want a change, or hit a compatibility problem? File a REQ record instead of editing project truth directly. The record lands as 'proposed' (never self-accept). Works from headless sub-agents too — this IS the write path. If the request is about PRD Plugin itself (a prd_* script, a hook, a project-* skill, the MCP server, the installer), it is submitted upstream automatically — you do not need to export anything by hand. Supply scope: local only when the filing must remain local; omit scope to use automatic classification.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "request_type": {
            "type": "string",
            "enum": [
              "bug",
              "change",
              "feature",
              "compat",
              "method"
            ]
          },
          "severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high"
            ]
          },
          "rationale": {
            "type": "string"
          },
          "scope": {
            "type": "string",
            "description": "Explicit 'local' bypasses upstream auto-classification; omit to classify."
          },
          "target_repo": {
            "type": "string",
            "description": "Address this request to a declared peer repo (REQ-136). Use prd_list_destinations for valid ids; delivery is verified and the filing never fails because of it."
          },
          "affected_areas": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "expected_behavior": {
            "type": "string"
          },
          "risk": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high"
            ]
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "agent": {
            "type": "string"
          },
          "session": {
            "type": "string"
          }
        },
        "required": [
          "summary",
          "request_type",
          "severity"
        ]
      }
    },
    {
      "name": "prd_find",
      "transport": "mcp",
      "capability": "state.read",
      "access": "read",
      "description": "Need relevant state without reading whole JSON files? Find a bounded set of records by kind, status, linked ID, or text, including DBR tracking branches. Defaults to 25 and never returns more than 100 records.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "TRK",
              "REQ",
              "EV",
              "DEC",
              "CHG",
              "HLT",
              "MEM",
              "DBR"
            ]
          },
          "status": {
            "type": "string"
          },
          "linked_id": {
            "type": "string"
          },
          "query": {
            "type": "string"
          },
          "limit": {
            "type": "number",
            "minimum": 1,
            "maximum": 100
          }
        }
      }
    },
    {
      "name": "prd_flush_addressed_requests",
      "transport": "mcp",
      "capability": "requests.route.mutate",
      "access": "write",
      "description": "Deliver every request carrying a target_repo that has not reached its peer yet, and report the ones that could not go with the reason (REQ-136). Nothing is dropped or retried destructively, so an undeliverable request stays visible instead of becoming a black hole.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "prd_get",
      "transport": "mcp",
      "capability": "state.read",
      "access": "read",
      "description": "Know the ID? Fetch exactly that canonical record or DBR tracking branch without opening or scanning its backing file.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_import_request",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "Hub-side inbox intake (REQ-106): import one staged upstream package from .prd_plugin/inbox/ into canonical requests as a single validated, duplicate-safe call. Writes full transport provenance (origin_repo, source_request_id, upstream flags) so message_check reports the package as imported. Lands as 'proposed' — triage decides acceptance separately.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "package_path": {
            "type": "string",
            "description": "Repo-relative path to the staged package under .prd_plugin/inbox/."
          },
          "agent": {
            "type": "string"
          },
          "session": {
            "type": "string"
          }
        },
        "required": [
          "package_path"
        ]
      }
    },
    {
      "name": "prd_link",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "Link two existing record-backed IDs without editing either JSON file. Both records must exist; the symmetric link is deduplicated and written under one lock.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "left_id": {
            "type": "string"
          },
          "right_id": {
            "type": "string"
          }
        },
        "required": [
          "left_id",
          "right_id"
        ]
      }
    },
    {
      "name": "prd_list_destinations",
      "transport": "mcp",
      "capability": "requests.route.read",
      "access": "read",
      "description": "List the peer repos this repo can address (REQ-136), with whether each is reachable right now and whether it shares your workspace. Peers are declared once as requests.peers {repo id -> path}; a configured path is the consent to deliver there. Call this before addressing a request so you use a real destination id.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "prd_log_change",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "Shipped a change? Append a CHG changelog record naming what changed (artifact_refs) and why (source_refs, e.g. the REQ). Timestamp is server-side.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "artifact_refs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "source_refs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "summary"
        ]
      }
    },
    {
      "name": "prd_next_id",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "Allocate a globally unused ID for an embedded planning prefix (PRD-REQ, ARCH-DEC, IMP-TASK, ...). Never compute an ID or inspect/edit the registry by hand. Record-backed tools allocate internally; use prd_create or the specialised evidence/decision/change/goal tools for records.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "prefix": {
            "type": "string"
          }
        },
        "required": [
          "prefix"
        ]
      }
    },
    {
      "name": "prd_open_goal",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "Starting a new piece of work? Call this FIRST. Opens a TRK goal (the record the autonomous stop-guard works toward) with an allocated ID and server-side timestamps. Close it with prd_close_goal when the work is verified done.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string",
            "description": "What 'done' means, one line."
          },
          "goal_type": {
            "type": "string",
            "enum": [
              "goal",
              "active_work"
            ]
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "agent": {
            "type": "string"
          },
          "session": {
            "type": "string"
          }
        },
        "required": [
          "summary"
        ]
      }
    },
    {
      "name": "prd_open_tracking_branch",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "Before parallel agent fan-out, the lead creates one tracking document branch per worker. This allocates DBR/DBR-DELTA IDs and a dedicated branch file but does NOT touch canonical tracking. Commit the seeds before workers start; each worker updates only its assigned branch.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "target_id": {
            "type": "string"
          },
          "goal_type": {
            "type": "string",
            "enum": [
              "goal",
              "active_work"
            ]
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "agent": {
            "type": "string"
          },
          "session": {
            "type": "string"
          }
        },
        "required": [
          "summary",
          "owner"
        ]
      }
    },
    {
      "name": "prd_promote_tracking_branch",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "After worker branches are merged, the lead promotes one DBR branch into canonical TRK state. Promotion is locked, allocates canonical IDs only here, merges additive notes/links, rejects overlapping field conflicts, records DBR-MERGE provenance, and is safe to retry.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "evidence_id": {
            "type": "string"
          },
          "no_evidence_reason": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_record_decision",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "Made a durable decision (architecture, process, tooling)? Record it with provenance so future sessions don't re-litigate it. decided_by, autonomy_tier, and linked_ids are required — an unattributed decision is not auditable.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string"
          },
          "decided_by": {
            "type": "string",
            "enum": [
              "autonomous",
              "human_approved",
              "user_requested"
            ]
          },
          "autonomy_tier": {
            "type": "string",
            "enum": [
              "autonomous",
              "key_decision",
              "guided"
            ]
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "rationale": {
            "type": "string"
          },
          "options": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "consequences": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "agent": {
            "type": "string"
          }
        },
        "required": [
          "summary",
          "decided_by",
          "autonomy_tier",
          "linked_ids"
        ]
      }
    },
    {
      "name": "prd_record_evidence",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "About to claim something is done, fixed, or passing? Record the proof here FIRST: what you ran and what it showed. Creates an EV record (and optionally a markdown doc under docs/evidence/), then close the goal with prd_close_goal.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "summary": {
            "type": "string",
            "description": "What was verified and how."
          },
          "type": {
            "type": "string",
            "enum": [
              "validation",
              "review",
              "measurement"
            ]
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "commands": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "e.g. [{command, outcome}]"
          },
          "limitations": {
            "type": "string"
          },
          "body": {
            "type": "string",
            "description": "Optional markdown body for docs/evidence/<EV>.md"
          },
          "link_to": {
            "type": "string",
            "description": "TRK-*/REQ-* record to cross-link this evidence into."
          }
        },
        "required": [
          "summary"
        ]
      }
    },
    {
      "name": "prd_reflection_create",
      "transport": "mcp",
      "capability": "reflection.mutate",
      "access": "write",
      "description": "Add a reflection category or question. Question IDs are allocated as collision-free RFQ IDs under the shared state lock; duplicate category IDs and normalized question text are rejected.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "category",
              "question"
            ]
          },
          "category_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "entity",
          "category_id"
        ]
      }
    },
    {
      "name": "prd_reflection_delete",
      "transport": "mcp",
      "capability": "reflection.mutate",
      "access": "write",
      "description": "Delete one reflection question or an empty category. Category deletion is safe by default; set cascade=true explicitly to delete its questions too.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "category",
              "question"
            ]
          },
          "id": {
            "type": "string"
          },
          "cascade": {
            "type": "boolean"
          }
        },
        "required": [
          "entity",
          "id"
        ]
      }
    },
    {
      "name": "prd_reflection_list",
      "transport": "mcp",
      "capability": "reflection.read",
      "access": "read",
      "description": "Inspect the configured reflection categories and questions without reading config.json. Filter by entity, category, or enabled state; results include effective activation.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "all",
              "category",
              "question"
            ]
          },
          "category_id": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          }
        }
      }
    },
    {
      "name": "prd_reflection_update",
      "transport": "mcp",
      "capability": "reflection.mutate",
      "access": "write",
      "description": "Edit, activate, deactivate, rename, or move one reflection category/question. IDs are immutable; supply only the fields that should change.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "entity": {
            "type": "string",
            "enum": [
              "category",
              "question"
            ]
          },
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "text": {
            "type": "string"
          },
          "category_id": {
            "type": "string"
          },
          "enabled": {
            "type": "boolean"
          }
        },
        "required": [
          "entity",
          "id"
        ]
      }
    },
    {
      "name": "prd_reporting_validate",
      "transport": "mcp",
      "capability": "reporting",
      "access": "read",
      "description": "Validate and normalize a delegated reporting result against its exact source-backed bundle without writing project state.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "bundle": {
            "type": "object"
          },
          "result": {
            "type": "object"
          }
        },
        "required": [
          "bundle",
          "result"
        ]
      }
    },
    {
      "name": "prd_send_request",
      "transport": "mcp",
      "capability": "requests.route.mutate",
      "access": "write",
      "description": "Deliver an addressed request into a peer repo's inbox and verify it by reading the written package back (REQ-136). The request must carry target_repo. Filing is never at risk: an undeclared target refuses delivery only and names the fix, and an unreachable declared target is held for the next flush. Hub-private ('upstream') messages never travel to a peer.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "description": "The local request id to deliver."
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_service_audit",
      "transport": "mcp",
      "capability": "services.read",
      "access": "read",
      "description": "Audit the repository service manifest for schema, semantic, duplicate, contract, required/fallback, and drift-ready validity.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "prd_service_get",
      "transport": "mcp",
      "capability": "services.read",
      "access": "read",
      "description": "Read one consumed or provided repository service declaration by stable id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "consumes",
              "provides"
            ]
          },
          "id": {
            "type": "string"
          }
        },
        "required": [
          "kind",
          "id"
        ]
      }
    },
    {
      "name": "prd_service_list",
      "transport": "mcp",
      "capability": "services.read",
      "access": "read",
      "description": "List repository-declared consumed/provided services with the deterministic manifest hash.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "consumes",
              "provides"
            ]
          }
        }
      }
    },
    {
      "name": "prd_service_remove",
      "transport": "mcp",
      "capability": "services.mutate",
      "access": "write",
      "description": "Remove one repository service declaration atomically by kind and stable id.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "consumes",
              "provides"
            ]
          },
          "id": {
            "type": "string"
          }
        },
        "required": [
          "kind",
          "id"
        ]
      }
    },
    {
      "name": "prd_service_upsert",
      "transport": "mcp",
      "capability": "services.mutate",
      "access": "write",
      "description": "Create or update one repository service declaration atomically; stable ids make the operation duplicate-safe.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "kind": {
            "type": "string",
            "enum": [
              "consumes",
              "provides"
            ]
          },
          "service": {
            "type": "object"
          }
        },
        "required": [
          "kind",
          "service"
        ]
      }
    },
    {
      "name": "prd_status",
      "transport": "mcp",
      "capability": "state.read",
      "access": "read",
      "description": "Check where the project stands. Call this at the start of a session and before choosing what to work on: it returns open goals, requests by status, open health findings, stale items, and tracking-branch summaries plus the autonomy level for this repo's .prd_plugin state.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "format": {
            "type": "string",
            "enum": [
              "json",
              "markdown"
            ]
          }
        }
      }
    },
    {
      "name": "prd_substrate_call",
      "transport": "mcp",
      "capability": "substrate.coordinate",
      "access": "coordinate",
      "description": "Execute one live, UTCP-discovered, capability-allowlisted Substrate tool with source provenance and hash-bound receipts.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "tool": {
            "type": "string"
          },
          "capability": {
            "type": "string"
          },
          "arguments": {
            "type": "object"
          },
          "source_refs": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "idempotency_key": {
            "type": "string"
          },
          "required": {
            "type": "boolean"
          }
        },
        "required": [
          "tool",
          "capability",
          "arguments",
          "source_refs"
        ]
      }
    },
    {
      "name": "prd_substrate_catalog",
      "transport": "mcp",
      "capability": "substrate.read",
      "access": "read",
      "description": "Audit or inspect the versioned PRD intent-to-Substrate capability catalog, including deliberate discover-only boundaries.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "audit",
              "list",
              "intent"
            ]
          },
          "id": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "prd_substrate_links",
      "transport": "mcp",
      "capability": "substrate.read",
      "access": "read",
      "description": "Audit or read duplicate-safe links between canonical PRD records and runtime goals, capsules, threads, watches, apps, cases, or exports.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "audit",
              "list",
              "get"
            ]
          },
          "kind": {
            "type": "string"
          },
          "local_id": {
            "type": "string"
          }
        }
      }
    },
    {
      "name": "prd_substrate_runtime",
      "transport": "mcp",
      "capability": "substrate.coordinate",
      "access": "coordinate",
      "description": "Dispatch one waiting judgment, all pending judgments, or one delegated reporting task through the configured runtime callback contract.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "action": {
            "type": "string",
            "enum": [
              "judgment",
              "drain",
              "report"
            ]
          },
          "id": {
            "type": "string"
          },
          "task": {
            "type": "string"
          }
        },
        "required": [
          "action"
        ]
      }
    },
    {
      "name": "prd_update",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "Update permitted fields on an existing TRK, REQ, or HLT record. IDs, record types, provenance, and caller timestamps are immutable; append-only EV/DEC/CHG records keep their specialised tools.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "status": {
            "type": "string"
          },
          "severity": {
            "type": "string",
            "enum": [
              "low",
              "medium",
              "high",
              "critical"
            ]
          },
          "rationale": {
            "type": "string"
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "affected_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "affected_areas": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "graduated_to": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "recommended_action": {
            "type": "string"
          },
          "resolution": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_update_goal",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "Record progress on an open TRK goal or move its status. Statuses use ONE vocabulary: open, active, complete, resolved, deferred, parked, superseded (legacy values like in_progress are rejected with the mapping). updated_at is stamped server-side.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "note": {
            "type": "string",
            "description": "Progress note appended to the summary."
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "active",
              "complete",
              "resolved",
              "deferred",
              "parked",
              "superseded"
            ]
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_update_tracking_branch",
      "transport": "mcp",
      "capability": "state.mutate",
      "access": "write",
      "description": "A parallel worker records progress only in its pre-assigned DBR tracking branch. This never allocates an ID or mutates canonical tracking/registry state, so separate worktrees can update different branch files safely before the lead merges them.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "summary": {
            "type": "string"
          },
          "note": {
            "type": "string"
          },
          "status": {
            "type": "string",
            "enum": [
              "open",
              "active",
              "complete",
              "resolved",
              "deferred",
              "parked",
              "superseded"
            ]
          },
          "linked_ids": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "required": [
          "id",
          "owner"
        ]
      }
    },
    {
      "name": "prd_validate",
      "transport": "mcp",
      "capability": "verification",
      "access": "read",
      "description": "Pre-flight the commit gate on demand (duplicate IDs, version drift, state consistency, stranded outbox, timescale warnings). Run this BEFORE committing — fixing findings now is cheaper than a blocked commit later. Returns structured findings.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "prd_workflow_actions",
      "transport": "mcp",
      "capability": "workflow.read",
      "access": "read",
      "description": "List the code-owned workflow action allowlist with determinism, mutation, and idempotency metadata.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "prd_workflow_audit",
      "transport": "mcp",
      "capability": "workflow.read",
      "access": "read",
      "description": "Audit the managed workflow catalog for schema, action, provenance, input, postcondition, and duplicate defects.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "prd_workflow_cancel",
      "transport": "mcp",
      "capability": "workflow.mutate",
      "access": "write",
      "description": "Cancel a non-terminal workflow run with an auditable reason.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "reason": {
            "type": "string"
          }
        },
        "required": [
          "id",
          "reason"
        ]
      }
    },
    {
      "name": "prd_workflow_list",
      "transport": "mcp",
      "capability": "workflow.read",
      "access": "read",
      "description": "List shipped deterministic workflows, versions, step counts, judgment boundaries, and effective enablement.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      }
    },
    {
      "name": "prd_workflow_plan",
      "transport": "mcp",
      "capability": "workflow.read",
      "access": "read",
      "description": "Validate inputs and return a stable dry-run plan without allocating a run or executing an action.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "workflow": {
            "type": "string"
          },
          "inputs": {
            "type": "object"
          }
        },
        "required": [
          "workflow"
        ]
      }
    },
    {
      "name": "prd_workflow_resume",
      "transport": "mcp",
      "capability": "workflow.mutate",
      "access": "write",
      "description": "Validate a hash-bound external judgment result and resume deterministic execution; the model never writes canonical state.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "result": {
            "type": "object"
          }
        },
        "required": [
          "id",
          "result"
        ]
      }
    },
    {
      "name": "prd_workflow_retry",
      "transport": "mcp",
      "capability": "workflow.mutate",
      "access": "write",
      "description": "Retry a safely retryable failed workflow within its configured attempt limit; outcome-unknown mutations remain blocked.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "prd_workflow_run",
      "transport": "mcp",
      "capability": "workflow.mutate",
      "access": "write",
      "description": "Start a persistent deterministic workflow run; completion is impossible until every declared postcondition passes.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "workflow": {
            "type": "string"
          },
          "inputs": {
            "type": "object"
          },
          "idempotency_key": {
            "type": "string"
          }
        },
        "required": [
          "workflow"
        ]
      }
    },
    {
      "name": "prd_workflow_status",
      "transport": "mcp",
      "capability": "workflow.read",
      "access": "read",
      "description": "Read a persistent workflow run including steps, receipts, pending judgment, attempts, and terminal outcome.",
      "inputSchema": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          }
        },
        "required": [
          "id"
        ]
      }
    },
    {
      "name": "reporting",
      "transport": "cli",
      "capability": "reporting",
      "access": "read",
      "description": "Build a deterministic, source-referenced bundle and expose the effective policy for an eligible delegated-reporting task. AI-Collab executes the configured model separately.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "band": "observe"
    },
    {
      "name": "services",
      "transport": "cli",
      "capability": "services.read",
      "access": "read",
      "description": "Read, audit, or project the repository-owned service consume/provide manifest. Mutations remain MCP/CLI-only.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "band": "observe"
    },
    {
      "name": "status",
      "transport": "cli",
      "capability": "state.read",
      "access": "read",
      "description": "One-screen PRD Plugin method status for a repo: requests by state, active tracking, open health findings, stale items.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "band": "observe"
    },
    {
      "name": "substrate",
      "transport": "cli",
      "capability": "substrate.read",
      "access": "read",
      "description": "Read the versioned PRD Plugin to AI-Collab Substrate adapter handshake, complete record snapshot, repo-qualified traceability graph, or deterministic verification plan. The master config switch remains authoritative.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "band": "observe"
    },
    {
      "name": "tracking",
      "transport": "cli",
      "capability": "state.read",
      "access": "read",
      "description": "A repo's tracking records (goals / active work / follow-ups) from its canonical PRD-plugin state, filterable by status.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "band": "recall"
    },
    {
      "name": "wiki",
      "transport": "cli",
      "capability": "knowledge_and_drift",
      "access": "read",
      "description": "LLM-wiki freshness (drift check) plus the versioned page read/export contract: list canonical wiki pages, or read one page as exact UTF-8 Markdown with title, safe export filename, content hash, and Commit/Updated provenance — the surface consuming hubs use to render Copy-Markdown and Download-.md controls. Paths outside wiki/, traversal, non-Markdown, and non-UTF-8 content are rejected.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "band": "observe"
    },
    {
      "name": "workflow",
      "transport": "cli",
      "capability": "workflow.read",
      "access": "read",
      "description": "Inspect deterministic workflow definitions, action metadata, catalog findings, stable dry-run plans, and persistent receipts. Mutations remain MCP-only.",
      "inputSchema": {
        "type": "object",
        "properties": {}
      },
      "band": "observe"
    }
  ]
}
