McpServer

Struct McpServer 

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

Main MCP server

Implementations§

Source§

impl McpServer

Source

pub fn new(config: ServerConfig) -> Self

Create a new server

Source

pub const fn config(&self) -> &ServerConfig

Get server configuration

Source

pub const fn registry(&self) -> &Arc<HandlerRegistry>

Get handler registry

Source

pub const fn router(&self) -> &Arc<RequestRouter>

Get request router

Source

pub const fn lifecycle(&self) -> &Arc<ServerLifecycle>

Get server lifecycle

Source

pub const fn metrics(&self) -> &Arc<ServerMetrics>

Get server metrics

Source

pub fn shutdown_handle(&self) -> ShutdownHandle

Get a shutdown handle for graceful server termination

This handle enables external control over server shutdown, essential for:

  • Production deployments: Graceful shutdown on SIGTERM/SIGINT
  • Container orchestration: Kubernetes graceful pod termination
  • Load balancer integration: Health check coordination
  • Multi-component systems: Coordinated shutdown sequences
  • Maintenance operations: Planned downtime and updates
§Examples
§Basic shutdown coordination
let server = ServerBuilder::new().build();
let shutdown_handle = server.shutdown_handle();

// Coordinate with other services
tokio::spawn(async move {
    // Wait for external shutdown signal
    tokio::signal::ctrl_c().await.expect("Failed to install Ctrl+C handler");
    println!("Shutdown signal received, terminating gracefully...");
    shutdown_handle.shutdown().await;
});

// Server will gracefully shut down when signaled
// server.run_stdio().await?;
§Container/Kubernetes deployment
let server = ServerBuilder::new().build();
let shutdown_handle = server.shutdown_handle();
let shutdown_handle_clone = shutdown_handle.clone();

// Handle multiple signal types with proper platform support
tokio::spawn(async move {
    #[cfg(unix)]
    {
        use tokio::signal::unix::{signal, SignalKind};
        let mut sigterm = signal(SignalKind::terminate()).unwrap();
        tokio::select! {
            _ = tokio::signal::ctrl_c() => {
                println!("SIGINT received");
            }
            _ = sigterm.recv() => {
                println!("SIGTERM received");
            }
        }
    }
    #[cfg(not(unix))]
    {
        tokio::signal::ctrl_c().await.expect("Failed to install Ctrl+C handler");
        println!("SIGINT received");
    }
    shutdown_handle_clone.shutdown().await;
});

// Server handles graceful shutdown automatically
// server.run_tcp("0.0.0.0:8080").await?;
Source

pub async fn run_stdio(self) -> ServerResult<()>

Run the server with STDIO transport

Source

pub async fn health(&self) -> HealthStatus

Get health status

Trait Implementations§

Source§

impl Debug for McpServer

Source§

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

Formats the value using the given formatter. 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> 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
Source§

impl<T> ErasedDestructor for T
where T: 'static,