cambios mcp remoto

This commit is contained in:
Jordan Diaz
2026-04-17 20:03:02 +00:00
parent d41a94b57d
commit 2ac01acd61
15 changed files with 344 additions and 123 deletions

View File

@@ -0,0 +1,32 @@
/**
* AsyncLocalStorage-based propagation del mcpSessionId a los handlers de las tools.
*
* En el transporte HTTP, el servidor MCP multiplexa muchas sesiones concurrentes
* en un mismo proceso Node. Como los handlers de las tools no reciben el
* `mcp-session-id` directamente (solo lo que el SDK les pase en `extra`), usamos
* AsyncLocalStorage para propagar el identificador desde el handler HTTP
* (`POST /mcp`, `GET /sse`, `POST /message`) hasta la tool, y de ahi a helpers
* como `getCurrentProjectInfo` que resuelven `project_dir` desde las
* credenciales de la sesion (no desde `process.env`).
*
* En modo stdio no hace falta: cada subprocess tiene su propio env.
*/
import { AsyncLocalStorage } from "node:async_hooks";
export const sessionContext = new AsyncLocalStorage();
/**
* Envuelve la ejecucion de `fn` dentro del contexto de la sesion `mcpSessionId`.
* Cualquier llamada a `getCurrentSessionId()` dentro de `fn` (incluidas las
* callbacks async) devolvera ese id.
*/
export function runWithSession(mcpSessionId, fn) {
return sessionContext.run({ mcpSessionId }, fn);
}
/**
* Devuelve el mcpSessionId activo, o null si no estamos dentro de runWithSession.
*/
export function getCurrentSessionId() {
return sessionContext.getStore()?.mcpSessionId || null;
}