move mcp-schema to standalone binary in src/claude/

mcp-schema is Claude Code glue — extract from poc-memory
subcommand to src/claude/mcp-schema.rs standalone binary.
Update Python MCP bridge to call the new binary.

Co-Developed-By: Kent Overstreet <kent.overstreet@linux.dev>
This commit is contained in:
ProofOfConcept 2026-04-03 20:22:48 -04:00
parent b24e8e87a2
commit 56fc3a20d8
3 changed files with 43 additions and 5 deletions

View file

@ -104,3 +104,7 @@ path = "src/claude/poc-daemon.rs"
[[bin]]
name = "memory-search"
path = "src/claude/memory-search.rs"
[[bin]]
name = "mcp-schema"
path = "src/claude/mcp-schema.rs"

38
src/claude/mcp-schema.rs Normal file
View file

@ -0,0 +1,38 @@
// mcp-schema — Output MCP tool definitions as JSON
//
// Claude Code's Python MCP bridge calls this at startup to
// discover available tools. The Rust ToolDef definitions are
// the source of truth.
fn main() {
use serde_json::json;
// Map tool names to CLI args + stdin param.
let cli_map: std::collections::HashMap<&str, (Vec<&str>, Option<&str>)> = [
("memory_render", (vec!["render"], None)),
("memory_write", (vec!["write"], Some("content"))),
("memory_search", (vec!["graph", "spread"], None)),
("memory_links", (vec!["graph", "link"], None)),
("memory_link_set", (vec!["graph", "link-set"], None)),
("memory_link_add", (vec!["graph", "link-add"], None)),
("memory_used", (vec!["used"], None)),
("memory_weight_set", (vec!["weight-set"], None)),
("memory_rename", (vec!["node", "rename"], None)),
("memory_query", (vec!["query"], None)),
].into_iter().collect();
let defs = poc_memory::thought::memory::definitions();
let json_out: Vec<_> = defs.iter().filter_map(|d| {
let name = &d.function.name;
let (cli, stdin_param) = cli_map.get(name.as_str())?;
Some(json!({
"name": name,
"description": d.function.description,
"inputSchema": d.function.parameters,
"cli": cli,
"stdin_param": stdin_param,
}))
}).collect();
println!("{}", serde_json::to_string_pretty(&json_out).unwrap());
}

View file

@ -220,10 +220,6 @@ EXAMPLES:
/// Admin operations (fsck, health, import, export)
#[command(subcommand)]
Admin(AdminCmd),
/// Output MCP tool definitions as JSON (for generic MCP bridge)
#[command(name = "mcp-schema")]
McpSchema,
}
#[derive(Subcommand)]
@ -818,7 +814,7 @@ impl Run for Command {
Self::Cursor(sub) => sub.run(),
Self::Agent(sub) => sub.run(),
Self::Admin(sub) => sub.run(),
Self::McpSchema => cli::misc::cmd_mcp_schema(),
// mcp-schema moved to standalone binary src/claude/mcp-schema.rs
}
}
}