Expand description
Procedural macros for PMCP SDK
This crate provides attribute macros to reduce boilerplate when implementing MCP servers with tools, prompts, and resources.
§Features
#[tool]
- Define a tool with automatic schema generation#[tool_router]
- Collect tools from an impl block#[prompt]
- Define a prompt template#[resource]
- Define a resource handler
§Examples
§Tool Definition
ⓘ
use pmcp_macros::{tool, tool_router};
use serde::{Deserialize, Serialize};
use schemars::JsonSchema;
#[derive(Debug, Deserialize, JsonSchema)]
struct CalculateParams {
a: i32,
b: i32,
operation: String,
}
#[derive(Debug, Serialize, JsonSchema)]
struct CalculateResult {
result: i32,
}
#[tool_router]
impl Calculator {
#[tool(description = "Perform arithmetic operations")]
async fn calculate(&self, params: CalculateParams) -> Result<CalculateResult, String> {
let result = match params.operation.as_str() {
"add" => params.a + params.b,
"subtract" => params.a - params.b,
"multiply" => params.a * params.b,
"divide" => {
if params.b == 0 {
return Err("Division by zero".to_string());
}
params.a / params.b
}
_ => return Err("Unknown operation".to_string()),
};
Ok(CalculateResult { result })
}
}
Attribute Macros§
- prompt
- Defines a prompt template with typed arguments.
- resource
- Defines a resource handler with URI pattern matching.
- tool
- Defines a tool handler with automatic schema generation.
- tool_
router - Collects all tool methods from an impl block and generates a router.