20 releases

Uses new Rust 2024

new 0.1.19 Mar 5, 2026
0.1.18 Mar 5, 2026
0.1.17 Feb 22, 2026
0.1.13 Jan 30, 2026
0.0.0 Jan 4, 2026

#21 in #schemars


Used in 3 crates (via mcp-host)

BSD-3-Clause

52KB
977 lines

Procedural macros for mcp-host

Provides attribute macros for ergonomic MCP server definition.

Usage

use mcp_host::prelude::*;
use schemars::JsonSchema;

#[derive(Deserialize, JsonSchema)]
struct CalcParams { x: f64, y: f64 }

#[mcp_router]
impl MyServer {
    #[mcp_tool(name = "calculate")]
    async fn calculate(&self, ctx: Ctx, params: Parameters<CalcParams>) -> ToolResult {
        Ok(ToolOutput::text(format!("Result: {}", params.0.x + params.0.y)))
    }

    #[mcp_prompt(name = "greeting", argument(name = "name", required = true))]
    async fn greeting(&self, ctx: Ctx, args: Value) -> PromptResult {
        let name = args.get("name").and_then(|v| v.as_str()).unwrap_or("World");
        prompt_messages(vec![user_message(format!("Hello, {name}!"))])
    }

    #[mcp_resource(uri = "config:///app", name = "config")]
    async fn config(&self, ctx: Ctx) -> ResourceResult {
        Ok(vec![text_resource("config:///app", "{\"version\": \"1.0\"}")])
    }
}

// Registration:
let server = Arc::new(MyServer::new());
MyServer::tool_router().register_all(&tool_registry, server.clone());
MyServer::prompt_router().register_all(&prompt_manager, server.clone());
MyServer::resource_router().register_all(&resource_manager, server);

Dependencies

~0.5–0.9MB
~20K SLoC