pub struct ScimMcpServer<P: ResourceProvider> { /* private fields */ }
Expand description
MCP server wrapper for SCIM operations
This is the main entry point for MCP integration. It wraps a SCIM server and exposes its operations as MCP tools that AI agents can discover and execute.
§Type Parameters
P
- The resource provider implementation that handles data persistence
§Examples
use scim_server::{ScimServer, mcp_integration::ScimMcpServer, providers::StandardResourceProvider};
use scim_server::storage::InMemoryStorage;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let storage = InMemoryStorage::new();
let provider = StandardResourceProvider::new(storage);
let scim_server = ScimServer::new(provider)?;
let mcp_server = ScimMcpServer::new(scim_server);
// Get available tools
let tools = mcp_server.get_tools();
println!("Available tools: {}", tools.len());
// Run MCP server
mcp_server.run_stdio().await.unwrap();
Ok(())
}
Implementations§
Source§impl<P: ResourceProvider + Send + Sync + 'static> ScimMcpServer<P>
impl<P: ResourceProvider + Send + Sync + 'static> ScimMcpServer<P>
Sourcepub fn new(scim_server: ScimServer<P>) -> Self
pub fn new(scim_server: ScimServer<P>) -> Self
Create a new MCP server with default configuration
§Arguments
scim_server
- The SCIM server instance to wrap
§Examples
use scim_server::{ScimServer, mcp_integration::ScimMcpServer, providers::StandardResourceProvider};
use scim_server::storage::InMemoryStorage;
let storage = InMemoryStorage::new();
let provider = StandardResourceProvider::new(storage);
let scim_server = ScimServer::new(provider)?;
let mcp_server = ScimMcpServer::new(scim_server);
Sourcepub fn with_info(scim_server: ScimServer<P>, server_info: McpServerInfo) -> Self
pub fn with_info(scim_server: ScimServer<P>, server_info: McpServerInfo) -> Self
Create a new MCP server with custom server information
§Arguments
scim_server
- The SCIM server instance to wrapserver_info
- Custom server metadata for AI agent discovery
Sourcepub fn server_info(&self) -> &McpServerInfo
pub fn server_info(&self) -> &McpServerInfo
Get server information for introspection
Returns a reference to the server metadata that AI agents use for discovery. This is primarily used for testing and debugging purposes.
Source§impl<P: ResourceProvider + Send + Sync + 'static> ScimMcpServer<P>
impl<P: ResourceProvider + Send + Sync + 'static> ScimMcpServer<P>
Sourcepub fn get_tools(&self) -> Vec<Value>
pub fn get_tools(&self) -> Vec<Value>
Get the list of available MCP tools as JSON
Returns all tool definitions that AI agents can discover and execute. Each tool includes its schema, parameters, and documentation.
§Examples
use scim_server::mcp_integration::ScimMcpServer;
use scim_server::providers::StandardResourceProvider;
use scim_server::storage::InMemoryStorage;
let tools = mcp_server.get_tools();
println!("Available tools: {}", tools.len());
Sourcepub async fn execute_tool(
&self,
tool_name: &str,
arguments: Value,
) -> ScimToolResult
pub async fn execute_tool( &self, tool_name: &str, arguments: Value, ) -> ScimToolResult
Execute a tool by name with arguments
This is the main dispatch function that routes tool execution requests to the appropriate handler based on the tool name.
§Arguments
tool_name
- The name of the tool to executearguments
- JSON arguments for the tool execution
§Returns
A ScimToolResult
containing the execution outcome
Sourcepub async fn run_stdio(self) -> Result<(), Box<dyn Error + Send + Sync>>
pub async fn run_stdio(self) -> Result<(), Box<dyn Error + Send + Sync>>
Run the MCP server using stdio communication
Starts the MCP server and begins listening for tool execution requests over standard input/output. This is the standard MCP communication method.
§Examples
use scim_server::mcp_integration::ScimMcpServer;
use scim_server::providers::StandardResourceProvider;
use scim_server::storage::InMemoryStorage;
// Run MCP server
mcp_server.run_stdio().await?;
Sourcepub async fn handle_mcp_request(&self, line: &str) -> Option<McpResponse>
pub async fn handle_mcp_request(&self, line: &str) -> Option<McpResponse>
Handle a single MCP request and return the appropriate response