Server

Struct Server 

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

Main MCP server

Implementations§

Source§

impl Server

Source

pub fn new(name: impl Into<String>, version: impl Into<String>) -> Self

Create new server

Source

pub fn name(&self) -> &str

Get server name

Source

pub fn version(&self) -> &str

Get server version

Source

pub fn capabilities(&self) -> Arc<ServerCapabilities>

Get current capabilities

Source

pub fn set_capabilities(&self, capabilities: ServerCapabilities)

Update server capabilities

Source

pub fn instructions(&self) -> Option<String>

Get current instructions

Source

pub fn set_instructions(&self, instructions: Option<String>)

Set server instructions for LLMs

Source

pub fn add_middleware(&mut self, middleware: MiddlewareFn)

Add middleware to the chain

Source

pub fn tool_registry(&self) -> &ToolRegistry

Get tool registry

Source

pub fn resource_manager(&self) -> &ResourceManager

Get resource manager

Source

pub fn prompt_manager(&self) -> &PromptManager

Get prompt manager

Source

pub fn logger(&self) -> &McpLogger

Get global logger

Source

pub fn notification_sender(&self) -> UnboundedSender<JsonRpcNotification>

Get notification sender (for background tasks)

Source

pub fn send_notification( &self, method: impl Into<String>, params: Option<Value>, ) -> Result<(), Box<dyn Error>>

Send a notification to the client

Source

pub fn get_session(&self, session_id: &str) -> Option<Session>

Get session by ID

Source

pub fn remove_session(&self, session_id: &str) -> Option<Session>

Remove session

Source

pub fn multiplexer(&self) -> Arc<RequestMultiplexer>

Get the request multiplexer (for advanced use cases)

Source

pub fn create_client_requester( &self, session_id: &str, ) -> Option<ClientRequester>

Create a client requester for the given session

The client requester allows tools to make server→client requests like roots/list and sampling/createMessage.

Source

pub async fn request_roots( &self, session_id: &str, timeout: Option<Duration>, ) -> Result<Vec<Root>, MultiplexerError>

Request workspace roots from the client

Sends a roots/list request to the client and waits for the response. The client must have the roots capability advertised.

§Arguments
  • session_id - The session to check for roots capability
  • timeout - Optional timeout (defaults to 30 seconds)
§Returns

List of workspace roots, or an error if:

  • Client doesn’t support roots capability
  • Request times out
  • Client returns an error
§Example
let roots = server.request_roots("session-123", None).await?;
for root in roots {
    println!("Root: {} ({})", root.name.unwrap_or_default(), root.uri);
}
Source

pub async fn request_sampling( &self, session_id: &str, params: CreateMessageParams, timeout: Option<Duration>, ) -> Result<CreateMessageResult, MultiplexerError>

Request an LLM completion from the client

Sends a sampling/createMessage request to the client. The client must have the sampling capability advertised.

§Arguments
  • session_id - The session to check for sampling capability
  • params - The sampling parameters
  • timeout - Optional timeout (defaults to 30 seconds)
§Returns

The completion result, or an error if:

  • Client doesn’t support sampling capability
  • Request times out
  • Client returns an error
§Example
use mcp_host::server::multiplexer::{CreateMessageParams, SamplingContent, SamplingMessage};

let params = CreateMessageParams {
    messages: vec![SamplingMessage {
        role: "user".to_string(),
        content: SamplingContent::Text { text: "Hello!".to_string() },
    }],
    max_tokens: 1000,
    ..Default::default()
};

let result = server.request_sampling("session-123", params, None).await?;
println!("Response: {:?}", result.content);
Source

pub async fn run<T: Transport>( &self, transport: T, ) -> Result<(), Box<dyn Error>>

Run server with the given transport

This is the main event loop that reads requests from the transport, processes them, and writes responses back.

Supports bidirectional communication:

  • Incoming client requests are handled and responses sent
  • Server-initiated requests are sent via channels and responses routed back
Source

pub async fn handle_request( &self, session_id: &str, request: JsonRpcRequest, ) -> JsonRpcResponse

Handle incoming JSON-RPC request

Auto Trait Implementations§

§

impl Freeze for Server

§

impl !RefUnwindSafe for Server

§

impl Send for Server

§

impl Sync for Server

§

impl Unpin for Server

§

impl !UnwindSafe for Server

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> 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> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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