Skip to content

base

Base classes and interfaces for MCPServer resources.

Resource

Bases: BaseModel, ABC

Base class for all resources.

Source code in src/mcp/server/mcpserver/resources/base.py
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
class Resource(BaseModel, abc.ABC):
    """Base class for all resources."""

    model_config = ConfigDict(validate_default=True)

    uri: str = Field(default=..., description="URI of the resource")
    name: str | None = Field(description="Name of the resource", default=None)
    title: str | None = Field(description="Human-readable title of the resource", default=None)
    description: str | None = Field(description="Description of the resource", default=None)
    mime_type: str = Field(default="text/plain", description="MIME type of the resource content")
    icons: list[Icon] | None = Field(default=None, description="Optional list of icons for this resource")
    annotations: Annotations | None = Field(default=None, description="Optional annotations for the resource")
    meta: dict[str, Any] | None = Field(default=None, description="Optional metadata for this resource")

    @field_validator("name", mode="before")
    @classmethod
    def set_default_name(cls, name: str | None, info: ValidationInfo) -> str:
        """Set default name from URI if not provided."""
        if name:
            return name
        if uri := info.data.get("uri"):
            return str(uri)
        raise ValueError("Either name or uri must be provided")

    @abc.abstractmethod
    async def read(self) -> str | bytes:
        """Read the resource content."""
        pass  # pragma: no cover

set_default_name classmethod

set_default_name(
    name: str | None, info: ValidationInfo
) -> str

Set default name from URI if not provided.

Source code in src/mcp/server/mcpserver/resources/base.py
31
32
33
34
35
36
37
38
39
@field_validator("name", mode="before")
@classmethod
def set_default_name(cls, name: str | None, info: ValidationInfo) -> str:
    """Set default name from URI if not provided."""
    if name:
        return name
    if uri := info.data.get("uri"):
        return str(uri)
    raise ValueError("Either name or uri must be provided")

read abstractmethod async

read() -> str | bytes

Read the resource content.

Source code in src/mcp/server/mcpserver/resources/base.py
41
42
43
44
@abc.abstractmethod
async def read(self) -> str | bytes:
    """Read the resource content."""
    pass  # pragma: no cover