rust-sdk/crates/rmcp-macros
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Dale Seo 2d90b76501
fix: api ergonomics follow-up (#720)
* fix: builder with_* methods take T instead of Option<T>

* fix: emit conditional builder calls for optional fields in macros

* fix: convert with_task, with_stop_reason, with_logger, with_content to proper builders

* fix: update test callers for new builder signatures

* fix: simplify make_task helper and remove unused import

* fix: update sampling_stdio example for new with_stop_reason signature

* fix: make annotations and execution Option<Expr> consistent with other fields

* fix: remove unused none_expr import
2026-03-03 12:05:32 -05:00
..
src fix: api ergonomics follow-up (#720) 2026-03-03 12:05:32 -05:00
Cargo.toml chore: include LICENSE in final crate tarball (#657) 2026-02-13 16:13:45 -05:00
CHANGELOG.md chore: release v1.0.0-alpha (#719) 2026-03-03 11:26:31 -05:00
README.md feat: docs update (#718) 2026-03-03 11:14:30 -05:00

rmcp-macros

Crates.io Documentation

Procedural macros for the RMCP SDK. Most users should depend on rmcp with the macros feature (enabled by default) rather than using this crate directly.

For getting started and full MCP feature documentation, see the main README.

Available Macros

Macro Description
#[tool] Mark a function as an MCP tool handler
#[tool_router] Generate a tool router from an impl block
#[tool_handler] Generate call_tool and list_tools handler methods
#[prompt] Mark a function as an MCP prompt handler
#[prompt_router] Generate a prompt router from an impl block
#[prompt_handler] Generate get_prompt and list_prompts handler methods
#[task_handler] Wire up the task lifecycle on top of an OperationProcessor

Quick Example

use rmcp::{tool, tool_router, tool_handler, ServerHandler, model::*};

#[derive(Clone)]
struct MyServer {
    tool_router: rmcp::handler::server::tool::ToolRouter<Self>,
}

#[tool_router]
impl MyServer {
    #[tool(description = "Say hello")]
    async fn hello(&self) -> String {
        "Hello, world!".into()
    }
}

#[tool_handler]
impl ServerHandler for MyServer {
    fn get_info(&self) -> ServerInfo {
        ServerInfo::default()
    }
}

See the full documentation for detailed usage of each macro.

License

This project is licensed under the terms specified in the repository's LICENSE file.