[Feature] De-couple Starlette from FastMCP to make it easier to implement MCP endpoints in other frameworks
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 30/100
Piste de recherche
Examinez l’intégration de bas niveau de MCPServer, les tool/resource/prompt managers, les décorateurs et les méthodes handler décrits dans l’issue. Comparez les paramètres spécifiques à Starlette, le transport et le routage avec la frontière FastMCPBase proposée, y compris la référence FastMCP de Context ; le travail est considéré comme terminé lorsque le code indépendant du framework conserve ces fonctionnalités, tandis que FastMCP conserve les préoccupations liées à Starlette.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
If someone wanted to implement an MCP server in another framework such as Django or some other ASGI implementation, one would have to use the mcp.server.lowlevel.Server class and implement handlers for the low-level server. This means we have to sacrifice a ton of functionality from FastMCP that really has nothing to do with the python server backend. For example tool/resource/prompt managers, decorators, etc would have to be re-impemented.
It seems that these features of FastMCP could be decoupled in to a base class or mixin that handles all the tool/resource/prompt management & decorators, as well as the integration with the low-level Server. You could then extend that class to implement your own server with all the routing and request/response logic.
The proposed base class would have minimal dependencies on these framework-specific concerns:
Base Class Dependencies:
- MCPServer from mcp.server.lowlevel.server
- Tool/Resource/Prompt managers
- Basic handler methods (list_tools, call_tool, etc.)
- The decorators (@tool, @resource, @prompt)
Server-specific Responsibilities:
- Settings handling (Settings class with HTTP config)
- Transport logic (stdio vs SSE)
- Routing (custom_route, Starlette routing)
class FastMCPBase:
"""Base class or mixin with tool/resource/prompt management and core handlers"""
def __init__(self, name: str, instructions: str = None):
self._mcp_server = MCPServer(name=name, instructions=instructions)
self._tool_manager = ToolManager()
self._resource_manager = ResourceManager()
self._prompt_manager = PromptManager()
self._setup_handlers()
# All the @tool, @resource, @prompt decorators
# All the list_tools, call_tool, etc. handler methods
# Context management
class FastMCP(FastMCPBase):
"""Starlette-specific implementation"""
def __init__(self, name: str, **settings):
super().__init__(name)
self.settings = Settings(**settings)
self._custom_starlette_routes = []
# Only Starlette-specific methods like sse_app, routing, etc.
The implementation in the other library could look like this:
class DjangoMCP(FastMCPBase):
"""Django-specific implementation"""
# Django-specific routing & transport logic
One slight complication could be the Context class as it has a reference to the FastMCP instance (self._fastmcp. However the only function that's used is read_resource which would already be on the base class. So possible just need to change the type hint to use the base class.
- Langage dominant
- Python
- Étoiles
- 24.3k
- Forks
- 4k
- Merge moyen
- 1 j 19 min
- PR mergées (30 j)
- 29
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de modelcontextprotocol/python-sdk
-
Streamable HTTP client logs a WARNING for valid 202 Accepted on session termination (DELETE) Ouvertev1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 85/100
modelcontextprotocol/python-sdk#3546 · 5 commentaires ·
-
v1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
modelcontextprotocol/python-sdk#3545 · 1 commentaire ·
-
v1 v2
Difficulté 1/5 Moins d'une heure Accessibilité débutants 91/100
modelcontextprotocol/python-sdk#3508 · 2 commentaires ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 64/100
modelcontextprotocol/python-sdk#3504 ·
-
v1 v2
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
modelcontextprotocol/python-sdk#3492 · 1 commentaire ·
Toutes les issues de modelcontextprotocol/python-sdk
Issues similaires
-
sponsored
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
-
opensubtitlescom: moviehash never sent when opensubtitles (.org) is not in the provider list Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 86/100
Diaoul/subliminal#1382 ·
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
-
triage/confirmed
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
agentscope-ai/agentscope#2775 ·
-
worker.gpuVendors silently accepts unsupported/misspelled vendor names — no validation guard Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100