Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
d188199
ref(mcp): Retire @sentry/mcp-server in favor of sentry mcp
sentry-junior[bot] Oct 29, 2026
0a9030e
fix(cli): Keep SENTRY_ACCESS_TOKEN docs out of command example checks
sentry-junior[bot] Oct 29, 2026
d0d205e
fix(mcp): Tag sentry mcp telemetry with the stdio environment
sentry-junior[bot] Oct 29, 2026
38feffc
fix(mcp): Use refreshed tokens after an upstream 401 and fix the fx s…
sentry-junior[bot] Oct 29, 2026
916bc64
Merge remote-tracking branch 'origin/main' into ref/retire-mcp-server…
sentry-junior[bot] Oct 29, 2026
418e851
fix(lint): Apply the CLI import ban to toolkit-core sources
sentry-junior[bot] Oct 29, 2026
e5188d1
Merge remote-tracking branch 'origin/main' into ref/retire-mcp-server…
sentry-junior[bot] Oct 29, 2026
982a007
feat(mcp-server): Ship @sentry/mcp-server as a slim bundle of sentry mcp
sentry-junior[bot] Oct 29, 2026
1dba7c6
fix(mcp): Tear down after --help, --version, and sentry-mcp auth
sentry-junior[bot] Oct 29, 2026
26387b2
docs(mcp): Keep @sentry/mcp-server as the recommended stdio install
sentry-junior[bot] Oct 29, 2026
47afbd0
fix(mcp-server): Point auth hints at the package's own auth login
sentry-junior[bot] Oct 30, 2026
b83e10d
docs(mcp): Lead stdio docs with @sentry/mcp-server, document one acco…
sentry-junior[bot] Oct 30, 2026
d43709b
fix(mcp): Pin token refreshes to the account the server started with
sentry-junior[bot] Oct 30, 2026
e2f60b2
fix(mcp): Check the pinned account's identity on every refresh
sentry-junior[bot] Oct 30, 2026
d8f5d23
fix(mcp): Apply the .sentryclirc URL trust gate before serving
sentry-junior[bot] Oct 30, 2026
44563a2
fix(mcp): Keep fatal exit codes and handle closed pipes in the bundle
sentry-junior[bot] Oct 30, 2026
ebb182f
fix(mcp): Make dev:stdio launch the CLI MCP server
sentry-junior[bot] Oct 30, 2026
4c673d3
fix(mcp): Trust matching org tokens for rc targets and keep the rc sh…
sentry-junior[bot] Oct 30, 2026
aeb2251
ref(mcp): Publish @sentry/mcp-server with every CLI release
sentry-junior[bot] Oct 30, 2026
9995e37
ref(mcp-server): Own the bundle script, stub CLI-only modules, report…
sentry-junior[bot] Oct 30, 2026
1dcae12
Merge remote-tracking branch 'origin/main' into ref/retire-mcp-server…
sentry-junior[bot] Oct 30, 2026
83ef177
fix(mcp): Name the running binary in arg errors and tag its real version
sentry-junior[bot] Oct 30, 2026
f5c4c31
fix(mcp): Always report the running release and keep the release work…
sentry-junior[bot] Oct 30, 2026
53fc92f
fix(mcp): Serialize manual MCP Registry retries with the release run
sentry-junior[bot] Oct 30, 2026
f9ba7f9
perf(cli): Bundle only Zod's English locale
sentry-junior[bot] Oct 30, 2026
d783533
perf(cli): Load syntax highlighting lazily and allow compiling it out
sentry-junior[bot] Oct 30, 2026
85e554e
ref(cli): Read the route tree from a registry instead of app.ts
sentry-junior[bot] Oct 30, 2026
d4ce7e9
Merge remote-tracking branch 'origin/main' into ref/retire-mcp-server…
sentry-junior[bot] Oct 30, 2026
8a8dbf4
Merge remote-tracking branch 'origin/ref/cli-route-registry' into ref…
sentry-junior[bot] Oct 30, 2026
cea3755
Merge remote-tracking branch 'origin/perf/cli-lazy-syntax-highlight' …
sentry-junior[bot] Oct 30, 2026
2eb9077
Merge remote-tracking branch 'origin/perf/zod-english-locales' into r…
sentry-junior[bot] Oct 30, 2026
261e371
feat(mcp): Serve stdio on MCP SDK v2
sentry-junior[bot] Oct 31, 2026
ffeaf9b
ref(mcp-server): Run the CLI runner with an mcp, auth, and help app
sentry-junior[bot] Oct 31, 2026
7a2f0a2
docs(mcp): Name the package's own auth commands in stdio-auth
sentry-junior[bot] Oct 31, 2026
69e6525
fix(mcp-server): Keep a lone -v printing the version
sentry-junior[bot] Oct 31, 2026
9977bb0
fix(cli): Keep mcp-core out of the command tree
sentry-junior[bot] Oct 31, 2026
c0243b5
ref(mcp-core): Remove MCP SDK v1 from buildServer
sentry-junior[bot] Oct 31, 2026
07b8d4c
perf(cli): Stub zod/v3 in the CLI and MCP server bundles
sentry-junior[bot] Oct 31, 2026
ccdd87a
fix(cli): Redact --access-token from telemetry
sentry-junior[bot] Oct 31, 2026
a98cb24
feat(mcp): Make --access-token a deprecated alias for SENTRY_AUTH_TOKEN
sentry-junior[bot] Oct 31, 2026
cc2ae2e
Merge origin/main into ref/retire-mcp-server-package
sentry-junior[bot] Oct 31, 2026
0a86462
Merge origin/main into ref/retire-mcp-server-package
sentry-junior[bot] Oct 31, 2026
5a72e8a
Merge origin/main into ref/retire-mcp-server-package
sentry-junior[bot] Oct 31, 2026
b7a34ab
Merge origin/main into ref/retire-mcp-server-package
sentry-junior[bot] Oct 31, 2026
0e227f7
perf(mcp-server): Leave help's kitty/sixel banner out of the bundle
sentry-junior[bot] Oct 31, 2026
ed4eddf
fix(mcp): Start the server when its working directory has been deleted
sentry-junior[bot] Oct 31, 2026
3392ea0
test(mcp-server): Keep the Sentry SDK off the bundle's --version path
sentry-junior[bot] Oct 31, 2026
23a92f9
Merge origin/main into ref/retire-mcp-server-package
sentry-junior[bot] Oct 31, 2026
88c11b3
docs(mcp-server): Update the bundle size note after the logger change
sentry-junior[bot] Oct 31, 2026
99b1a7a
Merge origin/main into ref/retire-mcp-server-package
sentry-junior[bot] Nov 1, 2026
8974241
ref(cli): Remove the unused plain markdown stub
sentry-junior[bot] Nov 1, 2026
a332341
fix(mcp): Start the server when --json or --fields comes before mcp
sentry-junior[bot] Nov 1, 2026
6d6b84e
fix(mcp): Start without telemetry when the working directory is gone
sentry-junior[bot] Nov 1, 2026
0c62c48
fix(evals): Discover scorer tools from sentry mcp with the mock token
sentry-junior[bot] Nov 1, 2026
8c617e4
Merge origin/main into ref/retire-mcp-server-package
sentry-junior[bot] Nov 1, 2026
ee85ad2
test(mcp-server): Fail when the server outlives a closed stdin
sentry-junior[bot] Nov 1, 2026
8a625af
docs(mcp): Drop SENTRY_FORCE_ENV_TOKEN where no login is stored
sentry-junior[bot] Nov 1, 2026
f78c14d
feat(mcp): Take the CLI's --org and --project, deprecating the slug f…
sentry-junior[bot] Nov 1, 2026
1dd984d
ci(release): Publish the MCP Registry listing with Craft's target
sentry-junior[bot] Nov 1, 2026
802374d
Merge origin/main into ref/retire-mcp-server-package
sentry-junior[bot] Nov 1, 2026
367d26b
fix(mcp): Serve an MCP client's SENTRY_AUTH_TOKEN over a stored login
sentry-junior[bot] Nov 1, 2026
0036297
feat(mcp): Deprecate --host, --url, and --insecure-http for SENTRY_HO…
sentry-junior[bot] Nov 1, 2026
b1dc826
Merge origin/main into ref/retire-mcp-server-package
sentry-junior[bot] Nov 1, 2026
a0237b3
fix(mcp): Skip telemetry init for an empty --sentry-dsn
sentry-junior[bot] Nov 1, 2026
1a383be
fix(mcp): Check a .sentryclirc URL against the env token MCP serves
sentry-junior[bot] Nov 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 12 additions & 14 deletions .agents/skills/mcp-qa/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,29 +19,27 @@ Fix any failures before proceeding.
This is the primary QA path for tool behavior. Stdio runs the local MCP server
against prod Sentry without depending on the Cloudflare worker, local `/mcp`
route, or Cloudflare OAuth configuration.
When validating code or tool changes, build first because the test client
launches `packages/mcp-server/dist/index.js`:
The test client launches `sentry mcp` from CLI source
(`pnpm --dir packages/cli run cli mcp`), which reads mcp-core's build output, so
build first when validating code or tool changes:

```bash
pnpm -w run build
```

Check auth first:
Check auth first. `sentry mcp` uses the CLI's credentials:

```bash
pnpm --filter @sentry/mcp-server start auth status
pnpm --filter sentry run cli auth status
```

If no cache exists, warm the device-code cache:
If you are not logged in, log in once (or pass `--access-token` to the test
client):

```bash
pnpm --filter @sentry/mcp-server start auth login
pnpm --filter sentry run cli auth login
```

Device-code auth uses the bundled stdio public client ID, requires no client
secret, is separate from the Cloudflare OAuth app, and caches the token in
`~/.sentry/mcp.json`.

First prove startup and auth:

```bash
Expand Down Expand Up @@ -96,9 +94,9 @@ For agent-client-specific behavior, replace the default harness prompt with the
same realistic prod prompt used for stdio QA. Passing QA requires the same
changed-tool transcript evidence, not only `whoami`.

as an isolated auth cache. Real clients do not give stdio subprocesses a TTY,
so warm the cache before running the harness. It also runs the built
`packages/mcp-server/dist/index.js`, so build first to avoid stale code.
Real clients do not give stdio subprocesses a TTY, so log in with
`sentry auth login` before running the harness. Build first to avoid stale
mcp-core code.

## 4. Cloudflare HTTP Only When Relevant

Expand Down Expand Up @@ -144,7 +142,7 @@ dev-time source execution:

```bash
pnpm -w run build
pnpm --filter @sentry/mcp-server start auth status
pnpm --filter sentry run cli auth status
pnpm -w run cli --transport stdio "who am I?"
```

Expand Down
26 changes: 12 additions & 14 deletions .craft.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,11 @@ workspaces:
packages/cli:
changelog:
policy: auto
# The CLI release also ships the documentation workspace.
# The CLI release also ships the documentation workspace and
# @sentry/mcp-server.
includePaths:
- apps/cli-docs
- packages/mcp-server
aiSummary:
llm:
model: gpt-5.6-luna-utility
Expand All @@ -24,10 +26,19 @@ workspaces:
Build:
- "/^sentry-.*$/"
- "npm-package"
- "mcp-server-npm-package"
- "vercel"
targets:
- name: npm
includeNames: '/^sentry-\d.*\.tgz$/'
# The standalone MCP server, published at the CLI's version.
- name: npm
id: "@sentry/mcp-server"
includeNames: '/^sentry-mcp-server-\d.*\.tgz$/'
# Lists that npm package in the MCP Registry. After the npm targets: the
# registry checks that npm serves the version.
- name: mcp-registry
manifest: server.json
- name: github
tagPrefix: "cli@"
- name: vercel
Expand Down Expand Up @@ -114,16 +125,3 @@ workspaces:
includeNames: '/^{{packageSimpleName}}-\d.*\.tgz$/'
- name: npm
includeNames: '/^{{packageSimpleName}}-\d.*\.tgz$/'
packages/mcp-server:
changelogPolicy: none
preReleaseCommand: >-
bash -c 'set -e; for package in packages/mcp-* packages/smoke-tests; do
(cd "$package" && npm version "$CRAFT_NEW_VERSION" --no-git-tag-version);
done'
releaseBranchPrefix: release/mcp
targets:
- name: github
includeNames: '/^sentry-mcp-server-\d.*\.tgz$/'
- name: npm
id: "@sentry/mcp-server"
includeNames: '/^sentry-mcp-server-\d.*\.tgz$/'
13 changes: 13 additions & 0 deletions .github/workflows/cli-build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -289,6 +289,19 @@ jobs:
with:
name: npm-package
path: packages/cli/*.tgz
# Every CLI release also publishes @sentry/mcp-server at the same version.
- name: Bundle mcp-server
run: pnpm --filter @sentry/mcp-server run bundle
- name: Test mcp-server bundle
run: pnpm --filter @sentry/mcp-server run test:bundle
- name: Pack mcp-server
working-directory: packages/mcp-server
run: npm pack
- name: Upload mcp-server npm artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: mcp-server-npm-package
path: packages/mcp-server/*.tgz

test-npm:
name: Test npm Package (Node ${{ matrix.node }})
Expand Down
106 changes: 0 additions & 106 deletions .github/workflows/mcp-registry.yml

This file was deleted.

9 changes: 2 additions & 7 deletions .github/workflows/merge-jobs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Post-merge tasks

on:
push:
branches: ["main", "release/*", "release/mcp/**", "release/logger/**"]
branches: ["main", "release/*", "release/logger/**"]
workflow_dispatch:

jobs:
Expand All @@ -26,18 +26,14 @@ jobs:
run: pnpm install

- name: Build
run: pnpm --filter '@sentry/mcp-server...' --filter @sentry/logger --if-present run build
run: pnpm --filter '@sentry/mcp-core...' --filter @sentry/logger --if-present run build

- name: Run linter
run: pnpm lint

- name: Run tests
run: pnpm test:ci

- name: Package mcp-server
working-directory: packages/mcp-server
run: pnpm pack --pack-destination dist

- name: Package logger
working-directory: packages/logger
run: pnpm pack --pack-destination dist
Expand All @@ -47,7 +43,6 @@ jobs:
with:
name: ${{ github.sha }}
path: |
${{ github.workspace }}/packages/mcp-server/dist/*.tgz
${{ github.workspace }}/packages/logger/dist/*.tgz

- name: Publish Test Report
Expand Down
9 changes: 3 additions & 6 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,10 @@ on:
description: Product to release
required: true
type: choice
default: mcp
default: cli
options:
- cli
- logger
- mcp
bump:
description: Version bump type
required: true
Expand Down Expand Up @@ -60,6 +59,8 @@ jobs:
env:
PRODUCT: ${{ inputs.product }}
run: |
# Each product maps to a `.craft.yml` workspace. The `cli` release
# also publishes @sentry/mcp-server at the same version.
case "$PRODUCT" in
cli)
workspace=packages/cli
Expand All @@ -69,10 +70,6 @@ jobs:
workspace=packages/logger
package_path=packages/logger
;;
mcp)
workspace=packages/mcp-server
package_path=packages/mcp-server
;;
*)
echo "::error::Unsupported product: $PRODUCT"
exit 1
Expand Down
2 changes: 0 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -78,8 +78,6 @@ coverage
.env.sentry-build-plugin

# Generated files
packages/mcp-server/src/toolDefinitions.json
packages/mcp-server/src/skillDefinitions.json
packages/mcp-server-evals/eval-results.json
apps/cli-docs/.astro
apps/cli-docs/src/content/docs/commands/
Expand Down
30 changes: 30 additions & 0 deletions .oxlintrc.json
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,28 @@
"jsx-a11y/no-static-element-interactions": "off"
}
},
{
"files": ["packages/mcp-core/**/*.{ts,tsx,js,mjs,cjs}"],
"rules": {
"no-restricted-imports": [
"error",
{
"paths": [
{
"name": "sentry",
"message": "mcp-core and toolkit-core must not import the Sentry CLI. Inject CLI-only capabilities through interfaces defined in mcp-core or toolkit-core (see docs/architecture/overview.md#package-dependency-direction)."
}
],
"patterns": [
{
"group": ["sentry/**", "**/cli/src/**", "**/packages/cli/**"],
"message": "mcp-core and toolkit-core must not import the Sentry CLI. Inject CLI-only capabilities through interfaces defined in mcp-core or toolkit-core (see docs/architecture/overview.md#package-dependency-direction)."
}
]
}
]
}
},
{
"files": [
"packages/cli/src/**/*.{ts,tsx}",
Comment thread
sentry-junior[bot] marked this conversation as resolved.
Resolved
Expand Down Expand Up @@ -154,6 +176,10 @@
"error",
{
"paths": [
{
"name": "sentry",
"message": "mcp-core and toolkit-core must not import the Sentry CLI. Inject CLI-only capabilities through interfaces defined in mcp-core or toolkit-core (see docs/architecture/overview.md#package-dependency-direction)."
},
{
"name": "assert",
"message": "Shared toolkit-core modules move into @sentry/api and must run in browsers. Use web-standard APIs, or inject the host-specific piece."
Expand Down Expand Up @@ -268,6 +294,10 @@
}
],
"patterns": [
{
"group": ["sentry/**", "**/cli/src/**", "**/packages/cli/**"],
"message": "mcp-core and toolkit-core must not import the Sentry CLI. Inject CLI-only capabilities through interfaces defined in mcp-core or toolkit-core (see docs/architecture/overview.md#package-dependency-direction)."
},
{
"group": ["node:*"],
"message": "Shared toolkit-core modules move into @sentry/api and must run in browsers. Use web-standard APIs, or inject the host-specific piece."
Expand Down
5 changes: 3 additions & 2 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ Toolkit contains the Sentry CLI, the Sentry MCP server, and shared code. Product

- **MCP tool count**: Target ≤20, hard limit 25 (AI agents have limited tool slots).
- **Quality gate**: `pnpm run tsc && pnpm run lint && pnpm run test` must pass before committing.
- **Dependency direction**: `sentry` (cli) → `@sentry/mcp-core` → `@sentry/toolkit-core`, and `@sentry/mcp-cloudflare` → `@sentry/mcp-core`; never the reverse. mcp-core and toolkit-core never import the CLI. Inject CLI-only capabilities (SQLite cache, local-file DSN detection, file uploads) through interfaces defined in mcp-core or toolkit-core. `pnpm run lint` enforces this; see docs/architecture/overview.md#package-dependency-direction.
- **Package CI**: Put checks for one workspace package in its `package.json` scripts and `sentryCi`, which `test.yml` runs per project. Do not add a workflow for them. See docs/operations/github-actions.md#package-ci-checks.

## Repository Structure
Expand Down Expand Up @@ -71,7 +72,7 @@ toolkit/

- docs/architecture/overview.md — MCP system design
- docs/operations/security.md — Authentication and security patterns
- docs/operations/stdio-auth.md — Device code flow, token caching, client ID architecture
- docs/operations/stdio-auth.md — stdio auth: shared CLI login and static tokens
- docs/operations/oauth-signout-playbook.md — Remote OAuth diagnostic runbook
- docs/operations/embedded-agents.md — LLM provider configuration for AI-powered tools
- docs/operations/github-actions.md — CI matrix, `package.json#sentryCi`, and MCP deployment workflows
Expand Down Expand Up @@ -99,7 +100,7 @@ toolkit/

**MCP releases:**

- docs/releases/stdio.md — npm package release
- docs/releases/stdio.md — `@sentry/mcp-server` release and the MCP registry
- docs/releases/cloudflare.md — Cloudflare deployment

## Commands
Expand Down
Loading
Loading