Expand description
Core abstractions and types for the MCP SDK
This module contains the fundamental building blocks for MCP implementations, including error handling, resource management, tool execution, and prompt handling.
§Core Concepts
§Tools
Tools represent executable functions that can be called by the MCP protocol:
use prism_mcp_rs::core::{Tool, ToolBuilder, ToolHandler};
use prism_mcp_rs::core::error::{McpError, McpResult};
use std::collections::HashMap;
use prism_mcp_rs::protocol::types::{ToolInfo, ToolResult, ContentBlock};
use serde_json::{json, Value};
use async_trait::async_trait;
struct CalculatorTool;
#[async_trait]
impl ToolHandler for CalculatorTool {
async fn call(&self, arguments: HashMap<String, Value>) -> McpResult<ToolResult> {
// Tool implementation
Ok(ToolResult {
content: vec![ContentBlock::Text {
text: "Result: 42".to_string(),
annotations: None,
meta: None,
}],
is_error: Some(false),
meta: None,
structured_content: None,
})
}
}
// Build the tool with the handler
let tool = ToolBuilder::new("calculator")
.description("Performs calculations")
.build(CalculatorTool)?;§Resources
Resources provide access to external data sources:
use prism_mcp_rs::core::{Resource, ResourceHandler};
use prism_mcp_rs::core::error::McpResult;
use std::collections::HashMap;
use prism_mcp_rs::protocol::types::{ResourceContents, ContentBlock};
use prism_mcp_rs::core::{ResourceInfo};
use async_trait::async_trait;
struct FileResource;
#[async_trait]
impl ResourceHandler for FileResource {
async fn read(
&self,
uri: &str,
params: &HashMap<String, String>,
) -> McpResult<Vec<ResourceContents>> {
Ok(vec![ResourceContents::Text {
uri: uri.to_string(),
mime_type: Some("text/plain".to_string()),
text: "File contents".to_string(),
meta: None,
}])
}
async fn list(&self) -> McpResult<Vec<ResourceInfo>> {
Ok(vec![])
}
}§Prompts
Prompts provide reusable interaction templates:
use prism_mcp_rs::core::{Prompt, PromptHandler};
use prism_mcp_rs::core::error::McpResult;
use std::collections::HashMap;
use prism_mcp_rs::protocol::types::{PromptResult, PromptMessage, Role, ContentBlock};
use serde_json::Value;
use async_trait::async_trait;
struct GreetingPrompt;
#[async_trait]
impl PromptHandler for GreetingPrompt {
async fn get(&self, arguments: HashMap<String, Value>) -> McpResult<PromptResult> {
Ok(PromptResult {
description: Some("A friendly greeting".to_string()),
messages: vec![
PromptMessage {
role: Role::Assistant,
content: ContentBlock::Text {
text: "Hello! How can I help you today?".to_string(),
annotations: None,
meta: None,
},
}
],
meta: None,
})
}
}§Error Handling
The SDK provides comprehensive error handling:
use prism_mcp_rs::core::{McpError, McpResult};
fn process_data() -> McpResult<String> {
// Return errors using the ? operator
let data = std::fs::read_to_string("data.txt")
.map_err(|e| McpError::Io(e.to_string()))?;
Ok(data)
}§Features
- Type-Safe Handlers: Strongly typed handler traits
- Async Support: All handlers are async by default
- Builder Patterns: Ergonomic construction APIs
- Validation: Built-in parameter validation
- Discovery: Tool discovery and metadata support
Re-exports§
pub use completion::CompletionContext;pub use completion::CompletionHandler;pub use completion::CompositeCompletionHandler;pub use completion::PromptCompletionHandler;pub use completion::ResourceUriCompletionHandler;pub use completion::ToolCompletionHandler;pub use completion_handlers::CompositeCompletionHandler as ExtendedCompositeCompletionHandler;pub use completion_handlers::FileSystemCompletionHandler;pub use completion_handlers::FuzzyCompletionHandler;pub use completion_handlers::SchemaCompletionHandler;pub use error::McpError;pub use error::McpResult;pub use prompt::Prompt;pub use prompt::PromptHandler;pub use resource::Resource;pub use resource::ResourceHandler;pub use resource::ResourceTemplate;pub use tool::MultiRoundToolCall;pub use tool::MultiRoundToolHandler;pub use tool::Tool;pub use tool::ToolBuilder;pub use tool::ToolHandler;pub use tool_discovery::DeprecationCleanupPolicy;pub use tool_discovery::DiscoveryCriteria;pub use tool_discovery::DiscoveryResult;pub use tool_discovery::GlobalToolStats;pub use tool_discovery::ToolRegistry;pub use tool_metadata::CategoryFilter;pub use tool_metadata::DeprecationSeverity;pub use tool_metadata::ImprovedToolMetadata;pub use tool_metadata::ToolBehaviorHints;pub use tool_metadata::ToolCategory;pub use tool_metadata::ToolDeprecation;pub use validation::ParameterType;pub use validation::ParameterValidator;pub use validation::ValidationConfig;pub use crate::protocol::types::PromptArgument;pub use crate::protocol::types::PromptInfo;pub use crate::protocol::types::PromptMessage;pub use crate::protocol::types::PromptResult;pub use crate::protocol::types::ResourceInfo;pub use crate::protocol::types::ToolInfo;
Modules§
- completion
- Completion handling for MCP servers
- completion_
handlers - Practical completion handlers for common MCP use cases
- enhanced_
errors - Enhanced error types for better ergonomics Replaces generic String messages with structured errors
- error
- Error types for the MCP Rust SDK
- health
- Health-check primitives for MCP SDK applications.
- logging
- Structured logging for the MCP SDK
- metrics
- Metrics collection for the MCP SDK
- prompt
- Prompt system for MCP servers
- resource
- Resource system for MCP servers
- retry
- Retry and circuit-breaker primitives for MCP operations.
- tool
- Tool system for MCP servers
- tool_
discovery - Tool Discovery and Management System
- tool_
metadata - improved Tool Metadata System
- validation
- Complete tool validation system for MCP SDK