Skip to main content

fastmcp.resources.resource

Base classes and interfaces for FastMCP resources.

Functions

resource

resource(uri: str) -> Callable[[AnyFunction], Resource | ResourceTemplate]
Standalone decorator to create a resource without registering it to a server. This decorator creates a Resource or ResourceTemplate object from a function. Unlike @server.resource(), this does NOT register the resource with any server - you must explicitly add it using server.add_resource() or server.add_template(). If the URI contains parameters (e.g. “resource://”) or the function has parameters, it will create a ResourceTemplate instead of a Resource. This is useful for:
  • Creating resources that will be modified before registration
  • Defining resources in modules that are discovered by FileSystemProvider
  • Creating reusable resource definitions
Args:
  • uri: URI for the resource (e.g. “resource://my-resource” or “resource://”)
  • name: Optional name for the resource
  • title: Optional title for the resource
  • description: Optional description of the resource
  • icons: Optional icons for the resource
  • mime_type: Optional MIME type for the resource
  • tags: Optional set of tags for categorizing the resource
  • annotations: Optional annotations about the resource’s behavior
  • meta: Optional meta information about the resource
  • task: Optional task configuration for background execution (default False)
Returns:
  • A decorator function that returns a Resource or ResourceTemplate.

Classes

ResourceContent

Wrapper for resource content with optional MIME type and metadata. Accepts any value for content - strings and bytes pass through directly, other types (dict, list, BaseModel, etc.) are automatically JSON-serialized. Methods:

to_mcp_resource_contents

to_mcp_resource_contents(self, uri: AnyUrl | str) -> mcp.types.TextResourceContents | mcp.types.BlobResourceContents
Convert to MCP resource contents type. Args:
  • uri: The URI of the resource (required by MCP types)
Returns:
  • TextResourceContents for str content, BlobResourceContents for bytes

ResourceResult

Canonical result type for resource reads. Provides explicit control over resource responses: multiple content items, per-item MIME types, and metadata at both the item and result level. Methods:

to_mcp_result

to_mcp_result(self, uri: AnyUrl | str) -> mcp.types.ReadResourceResult
Convert to MCP ReadResourceResult. Args:
  • uri: The URI of the resource (required by MCP types)
Returns:
  • MCP ReadResourceResult with converted contents

Resource

Base class for all resources. Methods:

from_function

from_function(fn: Callable[..., Any], uri: str | AnyUrl, name: str | None = None, title: str | None = None, description: str | None = None, icons: list[Icon] | None = None, mime_type: str | None = None, tags: set[str] | None = None, annotations: Annotations | None = None, meta: dict[str, Any] | None = None, task: bool | TaskConfig | None = None) -> FunctionResource

set_default_mime_type

set_default_mime_type(cls, mime_type: str | None) -> str
Set default MIME type if not provided.

set_default_name

set_default_name(self) -> Self
Set default name from URI if not provided.

read

read(self) -> str | bytes | ResourceResult
Read the resource content. Subclasses implement this to return resource data. Supported return types:
  • str: Text content
  • bytes: Binary content
  • ResourceResult: Full control over contents and result-level meta

convert_result

convert_result(self, raw_value: Any) -> ResourceResult
Convert a raw result to ResourceResult. This is used in two contexts:
  1. In _read() to convert user function return values to ResourceResult
  2. In tasks_result_handler() to convert Docket task results to ResourceResult
Handles ResourceResult passthrough and converts raw values using ResourceResult’s normalization.

to_mcp_resource

to_mcp_resource(self, **overrides: Any) -> SDKResource
Convert the resource to an SDKResource.

key

key(self) -> str
The globally unique lookup key for this resource.

register_with_docket

register_with_docket(self, docket: Docket) -> None
Register this resource with docket for background execution.

add_to_docket

add_to_docket(self, docket: Docket, **kwargs: Any) -> Execution
Schedule this resource for background execution via docket. Args:
  • docket: The Docket instance
  • fn_key: Function lookup key in Docket registry (defaults to self.key)
  • task_key: Redis storage key for the result
  • **kwargs: Additional kwargs passed to docket.add()

FunctionResource

A resource that defers data loading by wrapping a function. The function is only called when the resource is read, allowing for lazy loading of potentially expensive data. This is particularly useful when listing resources, as the function won’t be called until the resource is actually accessed. The function can return:
  • str for text content (default)
  • bytes for binary content
  • other types will be converted to JSON
Methods:

from_function

from_function(cls, fn: Callable[..., Any], uri: str | AnyUrl, name: str | None = None, title: str | None = None, description: str | None = None, icons: list[Icon] | None = None, mime_type: str | None = None, tags: set[str] | None = None, annotations: Annotations | None = None, meta: dict[str, Any] | None = None, task: bool | TaskConfig | None = None) -> FunctionResource
Create a FunctionResource from a function.

read

read(self) -> str | bytes | ResourceResult
Read the resource by calling the wrapped function.

register_with_docket

register_with_docket(self, docket: Docket) -> None
Register this resource with docket for background execution. FunctionResource registers the underlying function, which has the user’s Depends parameters for docket to resolve.