"""Base resource implementation."""
from abc import ABC, abstractmethod
from typing import Any
import mcp.types as types
from pydantic import AnyUrl
class BaseResource(ABC):
"""Base class for MCP resources."""
def __init__(self, uri: str, name: str = "", description: str = "", mime_type: str = "text/plain") -> None:
"""Initialize the resource.
Args:
uri: Resource URI
name: Resource name
description: Resource description
mime_type: MIME type of the resource
"""
self.uri = uri
self.name = name or self._extract_name_from_uri(uri)
self.description = description
self.mime_type = mime_type
def _extract_name_from_uri(self, uri: str) -> str:
"""Extract name from URI.
Args:
uri: Resource URI
Returns:
Extracted name
"""
return uri.split("/")[-1] or "resource"
@abstractmethod
async def read(self) -> str:
"""Read the resource content.
Returns:
Resource content
"""
pass
def to_mcp_resource(self) -> types.Resource:
"""Convert to MCP Resource type.
Returns:
MCP Resource instance
"""
return types.Resource(
uri=AnyUrl(self.uri),
name=self.name,
description=self.description,
mimeType=self.mime_type,
)