Skip to main content

McpConfig

Struct McpConfig 

Source
pub struct McpConfig {
    pub name: String,
    pub version: String,
    pub description: Option<String>,
    pub tools_enabled: bool,
    pub allowed_tags: HashSet<String>,
    pub allowed_path_prefixes: Vec<String>,
    pub admin_token: Option<String>,
    pub expose_detailed_errors: bool,
    pub max_tools: usize,
    pub invocation_mode: InvocationMode,
    pub tool_policy: ToolPolicy,
}
Expand description

Configuration for the native MCP server.

This is the primary way users control what gets exposed as tools, authentication for MCP clients, transport behavior, etc.

Fields§

§name: String

Human-friendly name of this MCP server (shown to agents).

§version: String

Version string.

§description: Option<String>

Optional description.

§tools_enabled: bool

Whether tool discovery and calling is enabled.

§allowed_tags: HashSet<String>

Explicitly allowed tags. Only routes that have at least one of these tags (via OpenAPI tags or future route metadata) will be exposed as tools.

Empty set + no other allow rules = nothing is exposed (safe default).

§allowed_path_prefixes: Vec<String>

Explicit path prefixes that are allowed to become tools. Example: ["/api/public", "/agent"]

§admin_token: Option<String>

Admin / MCP client token.

When set, MCP clients must present this (via header or query param, transport dependent) to use discovery or invocation.

§expose_detailed_errors: bool

Whether to include detailed error information in tool responses. In production you usually want this false (similar to RUSTAPI_ENV=production).

§max_tools: usize

Maximum number of tools to advertise in one tools/list response. Helps protect against very large route sets.

§invocation_mode: InvocationMode

How tools/call should be executed. Proxy (default) always goes over HTTP (correct and works for external targets). InProcess / Auto are for when an in-process RustApi instance is available.

§tool_policy: ToolPolicy

Permission policy for which operations are exposed as MCP tools.

Framework-native guardrail. By default we are conservative for agent use: ReadOnly (only safe methods like GET are exposed unless you opt into writes).

This addresses the blast radius concern when agents can call destructive endpoints.

Implementations§

Source§

impl McpConfig

Source

pub fn new() -> Self

Create a new config with reasonable defaults.

Source

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

Set the name advertised to MCP clients.

Source

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

Set the version advertised to MCP clients.

Source

pub fn description(self, desc: impl Into<String>) -> Self

Set a human description.

Source

pub fn enable_tools(self, enabled: bool) -> Self

Enable or disable the tools capability entirely.

Source

pub fn allowed_tags<I, S>(self, tags: I) -> Self
where I: IntoIterator<Item = S>, S: Into<String>,

Allow tools only for routes that carry at least one of the given tags.

This is the recommended way to safely expose a curated surface to agents.

Source

pub fn allow_path_prefix(self, prefix: impl Into<String>) -> Self

Add a path prefix that is allowed to be exposed as tools.

Source

pub fn admin_token(self, token: impl Into<String>) -> Self

Require this token for MCP clients (discovery + calls).

Source

pub fn expose_detailed_errors(self, expose: bool) -> Self

Control whether tool responses include full internal error details.

Source

pub fn max_tools(self, max: usize) -> Self

Set the maximum number of tools to list.

Source

pub fn invocation_mode(self, mode: InvocationMode) -> Self

Choose invocation strategy for tool calls.

Source

pub fn tool_policy(self, policy: ToolPolicy) -> Self

Set the permission policy for exposing tools.

ReadOnly is the safe default when agents will call your tools. Only GET/HEAD/OPTIONS operations are turned into tools.

Use All if you explicitly want agents to perform writes (and you have strong allowed_tags + confirmation flows).

Trait Implementations§

Source§

impl Clone for McpConfig

Source§

fn clone(&self) -> McpConfig

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for McpConfig

Source§

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

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

impl Default for McpConfig

Source§

fn default() -> Self

Returns the “default value” for a type. 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> 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> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
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