Skip to main content

OpenApiProvider

Struct OpenApiProvider 

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

OpenAPI to MCP provider.

This provider parses OpenAPI specifications and converts them to MCP tools and resources that can be used with a TurboMCP server.

§Security

The provider includes built-in SSRF protection that blocks requests to:

  • Localhost and loopback addresses (127.0.0.0/8, ::1)
  • Private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16)
  • Link-local addresses (169.254.0.0/16) including cloud metadata endpoints
  • Other reserved ranges

Requests have a default timeout of 30 seconds to prevent slowloris attacks.

Implementations§

Source§

impl OpenApiProvider

Source

pub fn from_spec(spec: OpenAPI) -> Self

Create a provider from a parsed OpenAPI specification.

If spec.servers is non-empty, base_url is initialized from spec.servers[0].url (with any default variables substituted in). Use Self::with_base_url to override. Server URLs that fail to parse as absolute leave base_url unset; with_base_url must then be called before any tool/resource invocation.

Source

pub fn from_string(content: &str) -> Result<Self>

Create a provider from an OpenAPI specification string.

Source

pub fn from_file(path: &Path) -> Result<Self>

Create a provider by loading from a file.

Source

pub async fn from_url(url: &str) -> Result<Self>

Create a provider by fetching from a URL.

Source

pub fn with_base_url(self, base_url: &str) -> Result<Self>

Set the base URL for API calls.

Source

pub fn with_route_mapping(self, mapping: RouteMapping) -> Self

Set a custom route mapping configuration.

Source

pub fn with_client(self, client: Client) -> Self

Set a custom HTTP client.

§Warning

When using a custom client, ensure it has appropriate timeout settings. The default client uses a 30-second timeout.

Source

pub fn with_auth_provider(self, provider: Arc<dyn AuthProvider>) -> Self

Install an AuthProvider that injects credentials matching each operation’s SecurityRequirements. Without this, operations on authenticated upstream APIs will fail with 401 unless the caller has installed equivalent auth via Self::with_client.

Source

pub fn security_schemes(&self) -> &HashMap<String, SecurityScheme>

Get the spec’s security scheme definitions, keyed by scheme name. Reference entries are silently dropped (rare in practice).

Source

pub fn with_timeout(self, timeout: Duration) -> Self

Set a custom request timeout.

This rebuilds the HTTP client with the new timeout. The default timeout is 30 seconds.

Source

pub fn timeout(&self) -> Duration

Get the current request timeout.

Source

pub fn title(&self) -> &str

Get the API title from the spec.

Source

pub fn version(&self) -> &str

Get the API version from the spec.

Source

pub fn operations(&self) -> &[ExtractedOperation]

Get all extracted operations.

Source

pub fn tools(&self) -> impl Iterator<Item = &ExtractedOperation>

Get operations that map to MCP tools.

Source

pub fn resources(&self) -> impl Iterator<Item = &ExtractedOperation>

Get operations that map to MCP resources.

Source

pub fn into_handler(self) -> OpenApiHandler

Convert this provider into an McpHandler.

Trait Implementations§

Source§

impl Debug for OpenApiProvider

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> MaybeSend for T
where T: Send + ?Sized,

Source§

impl<T> MaybeSync for T
where T: Sync + ?Sized,

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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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