modelcontextprotocol / modelcontextprotocol/python-sdk
How can I manage resource across multiple tool calls during one session?
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 24.3k
- Forks
- 4k
- Merge medio
- 1 d 1 h
- PR fusionados (30 d)
- 31
Descripción
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
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Empieza leyendo el punto de entrada streamable_http_app() y las referencias a Context/session del ejemplo; después, inspecciona cómo están definidos actualmente add_handler() y SESSION_TERMINATE. El issue no identifica archivos ni pruebas existentes. Para darlo por terminado sería necesario decidir y documentar un enfoque para coordinar recursos entre llamadas a herramientas y gestionar la limpieza de sesiones.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- backend-api-design
- Tipo de issue
- Nueva funcionalidad
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Estado de actividad
- Activo
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 35/100