cambios mcp remoto
This commit is contained in:
32
mcp-server/utils/sessionContext.js
Normal file
32
mcp-server/utils/sessionContext.js
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user