How can I manage resource across multiple tool calls during one session?
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 35/100
- Type d'issue
- Fonctionnalité
- Clarté
- À clarifier
- Activité
- Active
- Stack technique
- python
- Domaine
- backend-api-design
Piste de recherche
Commencez par lire le point d’entrée streamable_http_app() et les références à Context/session dans l’exemple, puis examinez comment add_handler() et SESSION_TERMINATE sont actuellement définis. L’issue n’identifie aucun fichier ni test existant. Pour considérer le travail terminé, il faudrait définir et documenter une approche pour coordonner les ressources entre les appels d’outils et gérer le nettoyage des sessions.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Description
I was messing around multiple agents running in parallel, and suffered from some kind of race condition. I had to write a lock for them.
It looks like each agent has their own session, but I don't have any idea to handle how they create and terminate.
The code can be like below, assuming it is a streamable-http app:
import asyncio
import mcp
from mcp.server.fastmthemcp import Context
import mcp.events # some mcp protocol events, maybe session creation or termination.
mcp_server = mcp.server.FastMCP("demo-locking")
lock = None
async def acquire_lock(ctx: Context):
# assume ctx.session.session_id = mcp-session-id acquired from headers, however not defined in this field.
while lock is not None and lock != ctx.session.session_id:
await asyncio.sleep(1)
ctx.info("Waiting for the lock")
lock = ctx.session.session_id
@mcp_server.tool()
async def tool1(ctx: Context):
await acquire_lock(ctx)
# ... do tool things
@mcp_server.tool()
async def tool2(ctx: Context):
await acquire_lock(ctx)
# ... do tool things
async def release_lock(ctx: Context):
if lock == ctx.session.session_id:
lock = None
mcp_server.add_handler(mcp.events.SESSION_TERMINATE, release_lock) # should be something like this to register a session cleanup.
app = mcp_server.streamable_http_app()
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
References
No response
- 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
-
triage/confirmed
Difficulté 2/5 1-3 heures Accessibilité débutants 88/100
agentscope-ai/agentscope#2775 ·
-
comp/desktop P3 type/bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 92/100
NousResearch/hermes-agent#118866 ·
-
bug
Difficulté 1/5 Moins d'une heure Accessibilité débutants 90/100
apache/cloudstack#14222 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100