Route stdio MCP tool calls to the stored account that knows the org
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 38/100
- Tipo de issue
- Nueva funcionalidad
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- node.js, typescript
- Área
- api, authentication, cli
Línea de trabajo
Start with the dependency-direction rule in AGENTS.md, then read ServerContext in packages/mcp-core/src/types.ts, apiServiceFromContext(), and the CLI host in packages/cli/src/lib/mcp.ts. Trace selectAccountForOrg in packages/cli/src/lib/db/auth.ts and region handling in packages/cli/src/lib/region.ts and internal/tool-helpers/resolve-region-url.ts. Run the relevant MCP and CLI tests; done means org-scoped calls use the owning account safely, cross-org tools merge results, and hosted/static-token behavior remains unchanged.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Problem
The CLI stores several accounts and picks the right one for each command based on the targeted organization (selectAccountForOrg in packages/cli/src/lib/db/auth.ts, called from resolveOrgRegion in packages/cli/src/lib/region.ts). The stdio MCP server (@sentry/mcp-server and sentry mcp, which share the CLI's credential store after #1731) does not.
The server resolves one effective account at startup and uses it for every tool call. A token refresh after a 401 stays on that same account. Asking about an org that belongs to another stored login fails. The only workarounds are sentry auth switch plus a restart, or configuring a second MCP server with a different SENTRY_HOST or a static SENTRY_ACCESS_TOKEN.
Why it doesn't work today
ServerContextin mcp-core carries a singleaccessToken: string(packages/mcp-core/src/types.ts). All tools build their API client withapiServiceFromContext()(about 63 call sites), and the region cache (internal/tool-helpers/resolve-region-url.ts) reads the same token.- MCP tools use mcp-core's API client, not the CLI's, so the CLI's org-based selection never runs.
- mcp-core must not import the CLI (see the dependency-direction rule in
AGENTS.md), and the hosted MCP has one OAuth grant per session. So this has to be an optional capability that only the stdio host provides.
Proposed approach
- mcp-core: add an optional resolver to
ServerContext, e.g.resolveCredential({ organizationSlug }) => Promise<{ accessToken, sentryHost, sentryProtocol }>.apiServiceFromContext()takes the org and uses the resolver when present; otherwise it usesaccessToken. Key the region cache by the resolved credential. The hosted MCP stays unchanged. - CLI host (
packages/cli/src/lib/mcp.ts): implement the resolver with theselectAccountForOrgrules, running each call insidewithStoredAccount(). That function already isolates account scope per call throughwithEnvand AsyncLocalStorage, so overlapping tool calls are safe. Refresh-on-401 targets the account that made the call. An unknown org falls back to the active account. One tool call never mixes identities. - Cross-org tools (
find_organizations,whoami): query every usable account and merge the results, assentry org listdoes withlistUsableAccountsInScope(). The CLI already records which account saw each org in the regions cache (packages/cli/src/lib/db/regions.ts), so later calls route automatically. - Opt-outs and pins:
--access-token/SENTRY_ACCESS_TOKENdisables routing.--organization-slugpicks the account once at startup. An explicit server (SENTRY_HOST/SENTRY_URL) limits candidates to accounts on that server, matching the CLI.
An alternative would route inside an injected fetch by parsing /organizations/{slug}/ from request URLs. It touches fewer files, but it is implicit and misses endpoints whose paths do not include the org. The explicit resolver is preferred.
Scope
- First version: route only between accounts on the same server.
- Later: mixing self-hosted and sentry.io accounts in one server needs a host per account and the region-URL validation (
validateRegionUrl) checked against the right server.
Acceptance
- With two stored sentry.io accounts that each own a different org, one running stdio server can call org-scoped tools on both orgs without
auth switchor a restart. find_organizationslists orgs from all usable accounts.- A 401 refreshes only the account that made the call.
- The hosted MCP and static-token setups behave as before.
- Tests cover concurrent tool calls for different orgs and verify that each call sends its own account's token.
Related
- #1731:
@sentry/mcp-serveras a slim bundle that shares CLI auth (prerequisite) - #1669: shared API layer proposal; task group 11 (task 11.4, CLI capabilities injected into mcp-core) is the natural home
- #1396: CLI multi-account mode (done)
- #845: earlier
--profilerequest for the stdio transport, closed as not planned; this approach needs no per-process profiles
via BYK.
--
- Lenguaje dominante
- TypeScript
- Estrellas
- 949
- Forks
- 171
- Merge medio
- 1 d 2 h
- PR fusionados (30 d)
- 261
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
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.
Más de getsentry/toolkit
-
documentation
Dificultad 1/5 Menos de una hora Aptitud para principiantes 88/100
getsentry/toolkit#1786 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Docs MCP URL normalization retains query strings and fragmentsPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertobug MCP
Dificultad 2/5 1-3 horas Aptitud para principiantes 73/100
getsentry/toolkit#1618 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
getsentry/toolkit#1471 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
ref(mcp-server): Shrink the stdio bundle's Zod and memory footprintPosiblemente ocupada @BYK la tomó hace 3 días. Abierto
getsentry/toolkit#1761 · 1 comentario · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Dificultad 4/5 3-5 días Aptitud para principiantes 48/100
getsentry/toolkit#1740 · 1 comentario ·
Los mantenedores suelen responder en 1 día
Todos los issues de getsentry/toolkit
Issues similares
-
needs-area
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Azure/typespec-azure#5936 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 Medio día Aptitud para principiantes 72/100
vercel-labs/scriptc#2910 ·
Los mantenedores suelen responder en 1 día
-
automation missing-model model-sync provider:fireworks-ai
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
anomalyco/models.dev#12458 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día