McpServiceRegistry

Struct McpServiceRegistry 

Source
pub struct McpServiceRegistry { /* private fields */ }
Expand description

Manages MCP services offered to successor proxies and agents.

Use the Self::add_mcp_server method to register MCP servers. For rmcp-based servers, use the sacp-rmcp crate which provides convenient extension methods.

This struct is a handle to the underlying registry. Cloning the struct produces a second handle to the same registry.

§Handling requests

You must add the registry (or a clone of it) to the JrHandlerChain so that it can intercept MCP requests. Typically you do this by providing it as an argument to the handler chain methods.

Implementations§

Source§

impl McpServiceRegistry

Source

pub fn new() -> Self

Creates a new empty MCP service registry

Source

pub fn with_mcp_server( self, name: impl ToString, server: McpServer, ) -> Result<Self, Error>

Add an McpServer to the registry.

This server will be added to all new sessions where this registry is in the handler chain.

See the McpServer documentation for more information.

Source

pub fn add_mcp_server<C: Component>( &self, name: impl ToString, new_fn: impl Fn() -> C + Send + Sync + 'static, ) -> Result<(), Error>

Add an MCP server to the registry using a custom constructor function.

This server will be added to all new sessions where this registry is in the handler chain.

This method is for independent MCP servers that do not make use of ACP. You may wish to use the sacp-rmcp crate which provides convenient extension methods for working with MCP servers implemented using the rmcp crate.

§Parameters
  • name: The name of the server.
  • new_fn: Constructor function that creates the MCP server and returns a Component for connecting to it.
Source

pub fn add_mcp_server_with_context<C: Component>( &self, name: impl ToString, new_fn: impl Fn(McpContext) -> C + Send + Sync + 'static, ) -> Result<(), Error>

Add an MCP server to the registry that wishes to receive a McpContext when created.

This server will be added to all new sessions where this registry is in the handler chain.

This method is for MCP servers that require information about the ACP connection and/or the ability to make ACP requests.

§Parameters
  • name: The name of the server.
  • new_fn: Constructor function that creates the MCP server and returns a Component for connecting to it.
Source

pub fn add_registered_mcp_servers_to(&self, request: &mut NewSessionRequest)

Adds all registered MCP servers to the given NewSessionRequest.

This method appends the MCP server configurations for all servers registered with this registry to the mcp_servers field of the request. This is useful when you want to manually populate a request with MCP servers outside of the automatic handler chain processing.

§Example
let registry = McpServiceRegistry::new();
registry.add_mcp_server("my-server", || MyMcpServer)?;

let mut request = NewSessionRequest {
registry.add_registered_mcp_servers_to(&mut request);
// request.mcp_servers now contains "my-server"

Trait Implementations§

Source§

impl AsRef<McpServiceRegistry> for McpServiceRegistry

Source§

fn as_ref(&self) -> &McpServiceRegistry

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Clone for McpServiceRegistry

Source§

fn clone(&self) -> McpServiceRegistry

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for McpServiceRegistry

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for McpServiceRegistry

Source§

fn default() -> McpServiceRegistry

Returns the “default value” for a type. Read more
Source§

impl JrMessageHandler for McpServiceRegistry

Source§

fn describe_chain(&self) -> impl Debug

Returns a debug description of the handler chain for diagnostics
Source§

async fn handle_message( &mut self, message: MessageAndCx, ) -> Result<Handled<MessageAndCx>, Error>

Attempt to claim an incoming message (request or notification). Read more

Auto Trait Implementations§

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynClone for T
where T: Clone,

Source§

fn __clone_box(&self, _: Private) -> *mut ()

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more