The topology predicate `is_descendant_of` gated the four schedule-
managing verbs: a caller could only name a schedule owned by an agent at
or below itself in `topology.json`. Those gates now permit any requester,
so the predicate, its pure `_in` form and the `schedule_authorized`
wrapper built on it are gone rather than left returning a constant. The
other two wrappers went earlier with the verbs they served —
`require_descendant` with the lifecycle MCP verbs in 87970a8c, and
`resolve_agent_state_target` with `get_loose_ends`'s agent parameter.
`require_group(agent, "scheduling", ...)` is untouched and still fires at
dispatch for every one of the five scheduling verbs, so holding the tool
group remains the gate; what goes is the ownership restriction layered on
top of it.
The three schedule-mutating verbs keep their row lookup as a plain
existence check, so a caller naming a schedule that does not exist still
gets `not found` rather than a message from deeper in the cancel path.
`list_schedules` stops filtering per row: it would only have hidden rows
the requester may act on anyway.
Error messages, tool descriptions and docs that described the subtree
relation are reworded — a refusal message naming a topology that no
longer decides anything is worse than none.
The six `is_descendant_of_in` unit tests go with the function they test;
the permit behaviour they leave unasserted is picked up by the next
commit.
Refs #4472
1.5 KiB
hive-agent-mcp
The built-in hyperhive MCP server every agent gets by default. Runs a
long-lived streamable-http listener (the hive-mcp-http systemd unit)
that claude reconnects to each turn via --mcp-config — this avoids
the per-turn stdio re-registration race that a spawned-per-turn server
would hit. HTTP is the sole transport; there is no stdio mode here.
When to use it
This is where the core hyperhive tool surface lives: send, recv,
remind, get_loose_ends, set_status,
get_agent_meta, scheduling, and the approval-request tools. Reach
for this crate when you're adding or changing a built-in tool rather
than an extraMcpServers add-on — those are separate stdio bridges
(see hive-bash-mcp, hive-matrix-mcp) that dial the harness socket
or their own daemon instead of living here.
Shape
mcp/— the tool surface itself: one handler per tool, dispatch throughclient.rsback into the hyperhive broker (/run/hive/mcp.sock) or, for loose-ends v2 (todos/reminders), the in-agent socket thehive-agentharness serves.client.rs— socket client to the hyperhive broker.send_allow.rs— enforces the per-agenthyperhive.allowedRecipientsallow-list onsend.paths.rs— socket + state path resolution shared with the harness's ownpaths.rsconventions.
Sibling of hive-agent (the serve loop that renders the
--mcp-config blob pointing here). Standalone bin crate so the
always-on MCP server doesn't need to link the whole turn-loop lib.