Crate pmcp_macros

Source
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.