CPG-Radio
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| cpg_thinkA | Ephemeral reasoning scratchpad. Optionally promote to an OBSERVATION node when the thought captures directly perceived data (tool output, file read, etc). Use promote_to='observation' with obs_type to persist. Predictions and hypotheses go through record_belief, not here. |
| cpg_queryA | Hybrid FTS + embedding retrieval over the CPG graph. Use for structured lookups (node_type/domain filters) or open-ended recall (natural language questions). A complete 32-hex node id is resolved directly. Returns ranked node dicts. |
| get_nodesA | Fetch whole nodes by id — the by-id counterpart to cpg_query's ranked search. Returns each node's full payload (e.g. a STRUCTURED_RESULT's complete |
| record_factA | Record a grounded FACT. Must cite source_observation_id (from a prior cpg_think promote) or a raw source string. Facts start as 'provisional' and are upgraded by evidence. Use supersedes_id to chain replacements. |
| record_beliefA | Record an uncertain BELIEF (inference, hypothesis, assumption). Must cite supporting FACT or OBSERVATION ids. When belief_kind='assumption', also creates a linked ASSUMPTION control-plane node. |
| plan_sessionB | Initialise a planning session. Creates a GOAL node, registers the full task graph, resolves dependency indices, creates IMPACT predictions, and converts constraints to confirmed FACT nodes. Call once per session before executing tasks. |
| update_taskA | Update a TASK node lifecycle status. Valid transitions: planned→in_progress, in_progress→done/failed/blocked/cancelled/done_pending_verification/verified. |
| replanB | Formal replanning event. Cancels specified tasks (preserved in history), optionally adds new tasks at an incremented plan_version. Does not delete any nodes or edges. |
| start_workflowA | Create a first-class fan-out/fan-in WORKFLOW run. Use this when a task will delegate to multiple agents, run phases such as find→verify→synthesize, or needs schema-bound aggregation. After calling it, register each worker with register_worker and store each worker output or verifier verdict with record_structured_result. Do not use for ordinary single-thread task lists; use plan_session/update_task for those. |
| update_workflowA | Update a WORKFLOW status and optional summary. Use when all workers finish, a workflow blocks, or final aggregation is complete. Terminal states are completed, failed, and cancelled. |
| register_workerB | Register one delegated worker/agent inside a WORKFLOW. Use one worker per finder/verifier/synthesizer/executor. Include the model, agent_id, prompt, dimension, and role whenever known so later agents can audit who did what. |
| record_structured_resultB | Store schema-bound worker output in a WORKFLOW. Use for findings, verifier verdicts, coverage notes, and final reports. For a verifier verdict, set result_kind='verdict', status to confirmed/plausible/refuted, and verifies_result_id to the finding/result being checked. The response returns an aggregate count by result kind and status. |
| import_fable_traceA | Read-only importer for Claude/Fable JSONL traces or workflow result JSON. Use when analyzing prior Fable sessions or preserving an external multi-agent workflow in CPG. It creates a WORKFLOW, WORKER nodes, trace events, and when present aggregate coverage/surviving/refuted STRUCTURED_RESULT nodes. It never executes commands from the trace. By default it filters JSONL imports to claude-fable rows when present and skips Opus/Sonnet rows. |
| record_executionB | Episodic log of a significant tool call. Creates an EXECUTION node + auto-observation, processes actual_impacts (lazy ARTIFACT creation + staleness), and stores objective_signals for reflect(). |
| reflectC | Core pedagogical loop. Provide deviation_type and optionally objective_signals; server computes ReflectiveSignals and a dual-signal SCORE. Closes the loop on patterns, beliefs, and v1.4 control-plane nodes. |
| resolve_contradictionB | Resolve a queued FACT conflict from the contradictions table. Applies one of: a_supersedes_b, b_supersedes_a, both_provisional, dismissed. |
| create_threadB | Open a THREAD node: a named channel other agents in this session can post to. Use one thread per topic or handoff, not one per message. |
| send_messageA | Post a MESSAGE to a THREAD as the calling agent. Body is capped at 16 KiB; larger findings go through record_structured_result with the message carrying a refs pointer. kind='system' is server-only. |
| poll_messagesA | Read messages in this session newer than a sequence number. Read-only: it does not advance the caller's cursor — call ack_messages for that. |
| ack_messagesA | Advance the calling agent's cursor to ack_seq. Forward-only: a lower value is ignored, so a replayed ack cannot re-deliver processed messages. |
| wait_for_mentionA | Block until a message mentioning the calling agent (or broadcasting to '*') arrives, or the timeout elapses. Returns immediately if one is already pending. |
| join_sessionA | Bind this connection to an existing active session and declare the calling agent's id. Does not archive anything. Required before any other radio tool when the agent did not itself call plan_session. |
| claim_taskA | Atomically take the lease on a TASK. Succeeds only if the task is unowned, its lease expired, or the caller already owns it. Pass the lease_generation you observed; a stale one loses the race. |
| renew_leaseB | Extend the caller's lease on a TASK it already owns. Fails if the lease was reaped or reassigned. |
| release_taskA | Give up the caller's lease on a TASK. lease_generation is required so a reaped-and-reassigned task cannot be released out from under its new owner. |
| worker_heartbeatA | Stamp heartbeat_at on the calling agent's WORKER node so the reaper does not treat it as stale. |
| complete_workerA | Close the calling agent's own WORKER node with a terminal status. Call this when your delegated work is finished — otherwise the reaper stamps the worker 'failed' once it has been silent for the stale window. Identity-bound: you may only complete a worker you own. Never overwrites an existing terminal status, and refuses a live spawn-managed worker. |
| drop_tipA | Drop a short practical TIP for other agents. TIPs are project-scoped, deduplicated by normalized text, and remain separate from FACT/BELIEF governance. |
| tipsB | Read ranked practical TIPs. With query, reuses hybrid FTS+embedding retrieval and boosts useful tips; otherwise ranks by votes then recency. |
| tip_usefulA | Mark a TIP useful as the calling agent. One vote per agent per TIP; repeated calls are idempotent. |
| create_campaignC | Create a durable coordination campaign and owner membership capability. |
| invite_memberC | Issue a revocable, role-scoped campaign membership capability. |
| join_campaignC | Authenticate this connection into a campaign using its membership token. |
| revoke_memberC | Revoke a campaign membership capability. |
| publish_signalC | Create or compare-and-swap a typed, versioned coordination signal. |
| wait_for_signalC | Read a signal only when its version advanced; expired signals are absent. |
| create_barrierC | Create a quorum barrier for an explicit campaign phase. |
| arrive_barrierB | Atomically arrive at a barrier using its observed version. |
| claim_resourceC | Claim a shared or exclusive named resource lease. |
| renew_resourceC | Renew a resource lease held by the caller. |
| release_resourceB | Release the caller from a generation-checked resource lease. |
| subscribe_threadB | Create a durable per-thread subscription cursor. |
| poll_threadC | Poll a thread from its independent subscription cursor. |
| ack_threadB | Advance a per-thread subscription cursor without hiding other threads. |
| ack_deliveryC | Record an idempotent required-delivery acknowledgement. |
| close_threadA | Close a thread under opener or campaign-coordinator authority. |
| resolve_messageB | Mark a question or request resolved by a message in the same thread. |
| protocol_healthC | Report coordination health without returning restricted message bodies. |
| stale_reportA | List stale running workers, leases whose claimant is gone, a gpu.lock that disagrees with the lease, and watchers of finished jobs. Read-only. |
| register_watchC | Record which job (worker id, label, or done-file) this agent is waiting on. |
| close_watchB | Close the caller's own watch registration (idempotent). |
| moderate_tipC | Approve or reject a quarantined campaign tip with evidence. |
| commit_resultA | Commit a SHA-256 digest before independent workers reveal results. |
| reveal_resultC | Reveal data matching a prior commitment and record the result. |
| post_progressB | Atomically renew a task lease, heartbeat the worker, and post progress. |
| complete_assignmentA | Atomically record a result, release the task, close the worker, and post a handoff. |
| spawn_workersA | Fan out to configured local providers. Creates WORKER nodes in spawn_state='requested' and returns immediately — a background supervisor performs the calls and records each answer as a STRUCTURED_RESULT. Requires exactly one of spawn_token or child_token. Caps and unknown providers come back in 'refused', never as an error. |
| cancel_workerB | Cancel a spawned worker. Idempotent. Authorised for the root spawn_token, or a child_token belonging to one of the target's ancestors. |
| list_spawnedA | Read-only table of spawned workers in this session: provider, spawn_state, depth, parentage, and uptime. No token required. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Session State | Live dashboard: tasks by status, health, contradictions, beliefs, patterns. |
| Session Score | Aggregate dual-signal scores: per-task composites, drift signal, patterns. |
| Task Horizon | All planned/in-progress tasks in dependency order with predicted impacts. |
TDQS
Scored across 59 tools
Several tool families—poll_messages/poll_thread, ack_messages/ack_thread/ack_delivery, record_structured_result/reveal_result/complete_assignment, renew_lease/renew_resource, complete_worker/complete_assignment—have nuanced but near-overlapping purposes, so an agent can easily select the wrong one. The descriptions are detailed, but at 59 tools the set lacks clear semantic separation.
Most tools use snake_case verb_noun, but there are many inconsistent outliers: cpg_think, cpg_query, replan, reflect, tips, protocol_health, stale_report, post_progress, complete_assignment. Verbs are not normalized across categories (create/start/spawn, poll/subscribe, ack/acknowledge, close/complete/cancel), so the pattern is only loosely predictable.
59 tools is an extreme size for an MCP server; even though the platform covers many subdomains, it is far beyond a well-scoped tool set and will overwhelm agents with selection overhead. It would benefit from consolidated compound tools or splitting into focused servers.
The server covers the core lifecycle well: planning, task leasing, workflow fan-out/fan-in, worker heartbeats/completion, threaded messaging with cursors/acks, campaign and barrier coordination, facts/beliefs/tips, and result commitments. Minor gaps like explicit campaign dissolution or direct fact/belief deletion are workaroundable through supersede/cancel/query tools.