Skip to content

MCP tools reference

gald3r mcp runs a minimal JSON-RPC 2.0 MCP server over stdio (gald3r_mcp, internal/mcpserver). Point any MCP-compatible client (Claude Code, Cursor, etc.) at it and it exposes the tools below via tools/list / tools/call.

Prompt & memory tools

Tool What it does
gald3r_prompt_get Fetch a prompt/judgment asset's rendered text (binds any ${slot} inputs). Shipped gald3r-internal assets are refused.
gald3r_prompt_list List prompt/judgment assets (kind: persona|role|rubric|playbook|voice|rule).
gald3r_memory_recall Chat-native recall over the file-first vault plus scoped memory records (user/project/workspace/team/company), merged into one token-budgeted result.

Record-mutation tools (T1148, part of the T1143 record-mutation API)

A plain-language edit request ("pause task 42 and drop its score to 8") maps onto these SAME Mutate<Class> calls one layer up, via the project-agent resolution layer (gald3r_project/board/resolve, T1150) — see agent-record-edits.md for that contract and its current integration status.

One tool per .gald3r record class, each routing to the same typed Go mutation function (gald3r_project/board/ops or gald3r_project/board/artifact's Mutate<Class>) the CLI verbs and the autopilot dispatcher call — a <class>_update verb is a thin wrapper over the identical call, never parallel logic. Every tool's inputSchema is generated by reflection over the exact Go struct (<Class>UpdateFields) the corresponding Mutate<Class> function accepts, so the schema and the Go function can never drift apart. Only the fields you supply change — omitted fields are left untouched. uuid/created_date/created_at are never accepted: no UpdateFields struct carries a field for them, and a caller who tries anyway gets a named refused: immutable_field: ... error rather than a silently-dropped value.

Tool Id parameter Class Notes
gald3r_task_update task_id Task validates against task_file.v1.schema.yaml
gald3r_bug_update bug_id Bug validates against bug_file.v1.schema.yaml
gald3r_adr_update adr_id Architecture Decision Record supersedes/superseded_by are owned by the supersede workflow, not exposed here
gald3r_todo_update todo_id TO-DO user_authorized (bool) is required — TO-DOs are user-write-only (T827 §3); the call is refused if it is missing or false, regardless of which other fields are supplied
gald3r_idea_update idea_id IDEA_BOARD.md idea promoted_to is owned by the promote workflow, not exposed here
gald3r_decision_update decision_id DECISIONS.md ruling supersedes/superseded_by are owned by the supersede workflow, not exposed here
gald3r_prd_update prd_id PRD PRD Freeze Gate (C-019): a released/superseded PRD refuses every field change outright — use @g-prd-revise instead
gald3r_feature_update feature_id Staged feature
gald3r_subsystem_update name Subsystem spec narrower field set (status/parent_system/parent_subsystem/min_tier) — children/dependencies/dependents/owners/locations are real file content this tool cannot reflect and are left byte-for-byte untouched
gald3r_release_update release_id Release spec file-only (no DB row for this class yet)
gald3r_constraint_update constraint_id CONSTRAINTS.md row severity must be block or warn
gald3r_document_update kind Singleton document only kind: "project" (PROJECT.md) and kind: "plan" (PLAN.md) are mutable — every other document kind is a regenerated index and must never be hand-patched; frontmatter_scalars (required) is a key -> literal YAML scalar text map, so quote a string value yourself when the key needs it, e.g. {"status": "'active'"}

Example call

{
  "jsonrpc": "2.0", "id": 1, "method": "tools/call",
  "params": {
    "name": "gald3r_task_update",
    "arguments": { "task_id": "42", "status": "paused", "priority_score": 8 }
  }
}

Errors

A bad id, an unknown enum value, a missing required argument, or an attempt to set an immutable field all come back as a JSON-RPC -32602 Invalid params error carrying a machine-checkable reason: token (e.g. task_not_found, invalid_status, immutable_field, user_authorization_required) — never a silent no-op. An unexpected failure (a DB write error, a render failure) comes back as -32603 Internal error instead, so a client can tell "your input was wrong" apart from "something broke on the server side."

A missing .gald3r/ project root (resolved by walking up from the server process's working directory) is reported as a domain-level tool result (isError: true) rather than a JSON-RPC error, matching gald3r_memory_recall's existing convention.