"""
Smithsonian Open Access MCP Context
"""
import logging
from typing import Optional
from dataclasses import dataclass
from mcp.server.fastmcp import Context
from mcp.server.session import ServerSession
from .api_client import SmithsonianAPIClient, create_client
logger = logging.getLogger(__name__)
_global_api_client: Optional[SmithsonianAPIClient] = None
@dataclass
class ServerContext:
"""Application context with initialized dependencies."""
api_client: SmithsonianAPIClient
async def get_api_client(
ctx: Optional[ # pylint: disable=unused-argument
Context[ServerSession, ServerContext]
] = None,
) -> SmithsonianAPIClient:
"""Get API client from global instance for mcpo compatibility."""
global _global_api_client # pylint: disable=global-statement
# Always use global client to avoid context access issues
# This works for both normal MCP and mcpo scenarios
if _global_api_client is None:
_global_api_client = await create_client()
logger.info("Global API client initialized")
return _global_api_client
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/molanojustin/smithsonian-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server