ScimMcpServer

Struct ScimMcpServer 

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

Source

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);
Source

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 wrap
  • server_info - Custom server metadata for AI agent discovery
Source

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>

Source

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());
Source

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 execute
  • arguments - JSON arguments for the tool execution
§Returns

A ScimToolResult containing the execution outcome

Source

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?;
Source

pub async fn handle_mcp_request(&self, line: &str) -> Option<McpResponse>

Handle a single MCP request and return the appropriate response

Auto Trait Implementations§

§

impl<P> Freeze for ScimMcpServer<P>
where P: Freeze,

§

impl<P> !RefUnwindSafe for ScimMcpServer<P>

§

impl<P> Send for ScimMcpServer<P>
where P: Send,

§

impl<P> Sync for ScimMcpServer<P>
where P: Sync,

§

impl<P> Unpin for ScimMcpServer<P>
where P: Unpin,

§

impl<P> !UnwindSafe for ScimMcpServer<P>

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> TenantValidator for T

Source§

fn validate_tenant_context( &self, expected_tenant_id: &str, context: &RequestContext, ) -> Result<(), String>

Validate that the context has the expected tenant.
Source§

fn validate_single_tenant_context( &self, context: &RequestContext, ) -> Result<(), String>

Validate that the context is for single-tenant operation.
Source§

fn require_tenant_context(&self, context: &RequestContext) -> Result<(), String>

Extract tenant context or return error for multi-tenant operations.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.