Skip to main content

Provider

Trait Provider 

Source
pub trait Provider: Send + Sync {
    // Required methods
    fn catalog(&self) -> ProviderCatalog;
    fn call<'life0, 'async_trait>(
        &'life0 self,
        call: ProviderCall,
    ) -> Pin<Box<dyn Future<Output = Result<ProviderOutput, ProviderError>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;

    // Provided methods
    fn dynamic_resource_templates(&self) -> Vec<DynamicResourceTemplate> { ... }
    fn supports_resource_reads(&self) -> bool { ... }
    fn read_resource<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        uri: &'life1 str,
        params: &'life2 BTreeMap<String, String>,
    ) -> Pin<Box<dyn Future<Output = Result<ResourceReadOutput, ProviderError>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait { ... }
}
Expand description

A loaded provider: exposes a catalog and dispatches action calls, with optional MCP resource-read support layered on top.

Required Methods§

Source

fn catalog(&self) -> ProviderCatalog

The provider’s catalog — its tools, prompts, resources, and metadata.

Source

fn call<'life0, 'async_trait>( &'life0 self, call: ProviderCall, ) -> Pin<Box<dyn Future<Output = Result<ProviderOutput, ProviderError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Executes one provider action call and returns its output.

Provided Methods§

Source

fn dynamic_resource_templates(&self) -> Vec<DynamicResourceTemplate>

Dynamic resource templates this provider serves. Every provider inherits the empty default — only file-based dynamic resource readers (providers/resources/*.ts) override it.

Source

fn supports_resource_reads(&self) -> bool

Whether this provider can actually serve read_resource calls. catalog().resources is a schema-legal field on every provider kind’s manifest (OpenAPI, MCP, ai-sdk, WASM, Python, generic JSON), but only file-based ResourceFileProviders have any mechanism to read content back — every other kind inherits read_resource’s default error. ResourceIndex::register uses this to reject a manifest that declares resources it can never serve at snapshot-build time, rather than letting them appear in resources/list and always fail resources/read with an opaque error.

Source

fn read_resource<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, uri: &'life1 str, params: &'life2 BTreeMap<String, String>, ) -> Pin<Box<dyn Future<Output = Result<ResourceReadOutput, ProviderError>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Reads resource content for a URI the registry has already matched against either this provider’s catalog().resources (exact, params empty) or one of its dynamic_resource_templates() (params holds captured path parameters).

Implementors§