mcp: wire extra server allowedTools into --allowedTools arg

This commit is contained in:
damocles 2026-05-16 02:28:21 +02:00
parent d06b598c56
commit caa495aeda

View file

@ -544,6 +544,8 @@ impl ManagerServer {
)] )]
impl ServerHandler for ManagerServer {} impl ServerHandler for ManagerServer {}
/// Name of the hyperhive MCP server inside claude's view. Claude prefixes /// Name of the hyperhive MCP server inside claude's view. Claude prefixes
/// tools as `mcp__<this>__<tool>` (e.g. `mcp__hyperhive__send`). /// tools as `mcp__<this>__<tool>` (e.g. `mcp__hyperhive__send`).
pub const SERVER_NAME: &str = "hyperhive"; pub const SERVER_NAME: &str = "hyperhive";
@ -606,7 +608,9 @@ pub fn allowed_mcp_tools(flavor: Flavor) -> Vec<String> {
} }
/// Combined allow-list passed to `--allowedTools` (auto-approve) — covers /// Combined allow-list passed to `--allowedTools` (auto-approve) — covers
/// both the built-ins and the MCP surface. /// the built-ins, the hyperhive MCP surface, and any extra MCP servers.
/// Extra server tools are read from the same `/etc/hyperhive/extra-mcp.json`
/// file that `render_claude_config` uses, so the two are always in sync.
#[must_use] #[must_use]
pub fn allowed_tools_arg(flavor: Flavor) -> String { pub fn allowed_tools_arg(flavor: Flavor) -> String {
let mut all: Vec<String> = ALLOWED_BUILTIN_TOOLS let mut all: Vec<String> = ALLOWED_BUILTIN_TOOLS
@ -614,6 +618,18 @@ pub fn allowed_tools_arg(flavor: Flavor) -> String {
.map(|s| (*s).to_owned()) .map(|s| (*s).to_owned())
.collect(); .collect();
all.extend(allowed_mcp_tools(flavor)); all.extend(allowed_mcp_tools(flavor));
for (name, spec) in load_extra_mcp() {
if name == SERVER_NAME {
continue; // already covered above
}
for tool in &spec.allowed_tools {
if tool == "*" {
all.push(format!("mcp__{name}__*"));
} else {
all.push(format!("mcp__{name}__{tool}"));
}
}
}
all.join(",") all.join(",")
} }