Commit graph inspector/.github
Author SHA1 Message Date
Cliff Hall
af79614c81
Merge branch 'v1/main' into fix/dns-rebinding-toctou-safeproxyfetch 2026-08-20 10:43:53 -04:00
cliffhall
95fa9a1c58 ci(v1): re-enable the Playwright suite on v1/main
`e2e_tests.yml` filtered on `branches: [main]` for both `push` and
`pull_request` — the same leftover as main.yml, but with a sharper
consequence: `main` never matches on this branch, so the filter matched
nothing and the suite has never run on `v1/main` at all. The branch's full
run history contains zero `Playwright Tests` runs, only
`Run install, format, lint, build, and test on every push` and `CLI Tests`.

Repointed both filters at `v1/main` so the gate actually gates. Unlike the
main.yml change this is a real behavior change — it turns a dead workflow
back on — so it is deliberately a separate commit.

Refs #2065

Signed-off-by: cliffhall <cliff@futurescale.com>
2026-08-20 10:22:10 -04:00
cliffhall
c7dc8f707a ci(v1): pin workflow branch filters to v1/main
The push filter still listed `main`, and `pull_request` carried no branch
filter at all — both leftovers from when the v1 line was itself `main`.
Neither describes the topology now: `v1/main` publishes straight to the
`v1-latest` dist-tag and never merges into `main`, which carries v2 and
publishes `latest`.

No behavior change on any path that runs today. For `push`, GitHub runs the
workflow file from the pushed commit, so this file was only ever consulted
for `v1/main`; `main` could not match unless a commit on that branch carried
a v1-shaped tree. The same resolution rule made the unfiltered
`pull_request` harmless, since a PR's workflow comes from its merge ref.
The `release` trigger is untouched, so publishing is unaffected — it is
gated on the event type and the release's target commit, never on these
filters.

The value is that the file now states its intent, and the stale `main`
entry can no longer become live if anything is ever restored onto that
branch.

Closes #2065

Signed-off-by: cliffhall <cliff@futurescale.com>
2026-08-20 09:58:05 -04:00
Cliff Hall
fb4a753cd0
Merge branch 'v1/main' into fix/dns-rebinding-toctou-safeproxyfetch 2026-08-20 09:45:40 -04:00
cliffhall
0e1bc1d402 fix(server): make the pinned lookup honor Node's all:true callback shape
Addresses the round-1 Copilot review.

- createPinnedAgent: Node's net.connect runs with autoSelectFamily on
  (Node >= 20), so it calls the lookup hook with `{ all: true }` and
  requires an ARRAY of `{ address, family }`. The scalar-only callback
  failed every hostname request with ERR_INVALID_IP_ADDRESS, so /fetch
  could only reach literal-IP targets. Both callback shapes are now
  supported. Reproduced against Node 22/26 before and after.
- Tests: cover the `{ all: true }` shape for IPv4 and IPv6, and add an
  end-to-end request through the agent over the production path
  (node-fetch -> http.Agent -> net.connect) using an unresolvable
  hostname, so the request can only succeed via the pinned IP. Verified
  these three fail without the fix. Replaced the `Function`-typed casts
  with a typed pinnedLookup() helper.
- CI: run the new server suite (.github/workflows/main.yml) and add a
  root `test-server` script, so this regression coverage is enforced.
- package-lock.json: sync the server workspace manifest mirror with the
  added @types/node and vitest devDependencies.
- index.ts: drop the `agent as any` cast and its eslint-disable — the
  node-fetch RequestInit already types `agent`, and tsc is clean without
  the suppression.
- Formatting: prettier-check now passes (it failed on the two new files).

Signed-off-by: cliffhall <cliff@futurescale.com>
2026-08-19 16:59:06 -04:00
Cliff Hall
47f92841bc
fix: v1 dist-tag must be v1-latest — npm rejects v1 (#1829)
#1828 pinned v1 publishes to `--tag v1`, following the runbook (#1804 §1). That
tag name is not legal: npm rejects any dist-tag that parses as a SemVer range,
and `v1` parses as `1.x`.

    npm error Tag name must not be a valid SemVer range: v1

Found while running the companion `npm dist-tag add` step, which failed the
same way. So the merged flag would not have "published to the wrong tag" — the
next v1 security release would have failed to publish at all, and only at
release time.

`v1-latest` is accepted (verified against semver.validRange, along with
`legacy`, which was the other candidate). The workflow comment now records both
failure modes so neither the flag nor the specific tag name gets "cleaned up"
later.


Claude-Session: https://claude.ai/code/session_01Txmv2qqv3yeKgRzoqXytzD

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-27 21:52:57 -04:00
Cliff Hall
4f3e7fa167
chore: pin v1 publishes to the v1 dist-tag (#1828)
`publish-all` had no `--tag`, so npm assigned `latest` to whatever it
published. That was correct for 1.0.1 — the deprecation release had to take
`latest` to reach npx users — but it becomes a trap the moment 2.0.0 ships: a
1.0.2 security fix published from `v1/main` would move `latest` back to v1, and
every `npx @modelcontextprotocol/inspector` in the world would silently get the
deprecated line.

`--tag v1` on both halves covers all four package names — `--workspaces` fans
out to inspector-client/-server/-cli, and the second invocation is the root.

Nothing enforces this flag, and the cost of dropping it surfaces months later
in a way that looks like an npm bug rather than a missing argument, so the
workflow carries a comment at the point of use.

Phase 3 of the v2 go-live runbook (#1804 §1).


Claude-Session: https://claude.ai/code/session_01Txmv2qqv3yeKgRzoqXytzD

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-27 21:47:46 -04:00
cliffhall
3188ee3a20 add v1/main to branches in main.yml 2026-07-27 20:32:01 -04:00
Cliff Hall
fd2def684f
chore: pin prettier to 3.9.5 and run format check after install (#1716)
The "Check formatting" step in main.yml ran `npx prettier --check .`
before `npm install`, so npx fetched the LATEST prettier rather than the
version pinned in package-lock.json. This made the format check
non-deterministic and red on open PRs whenever the latest published
prettier differed from the pinned one.

- Pin prettier to exact 3.9.5 in devDependencies and update the lockfile
- Reformat the repo with the pinned prettier (expected source churn)
- Move the format check after `npm install --no-package-lock` and run it
  via `npm run prettier-check` so CI uses the locally-installed pinned
  prettier


Claude-Session: https://claude.ai/code/session_01HiccCEh9mwCfVzE8qYcop1

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-17 16:23:23 -04:00
cliffhall
1bbf53cf76 ci: collapse author_association OR chains into contains(fromJSON(...))
Per review feedback on PR #1270: replace the three-way `==` OR chain in
each of the four trigger branches with a single contains(fromJSON(...))
check against a shared list. Same semantics, less duplication, and the
allowed-roles list is now defined once per branch instead of three times.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 10:49:54 -04:00
cliffhall
c044b5d65f ci: gate claude.yml on author_association to skip unauthorized invokes
Previously the workflow's `if:` only checked the event type and the
presence of `@claude` in the body. The job would start for any commenter
and only later fail when the action attempted privileged operations on
behalf of a user without write access. That produced noisy red runs and
wasted runner minutes for what is effectively an authorization rejection.

Add an `author_association` check (OWNER, MEMBER, or COLLABORATOR) to
each of the four trigger branches (issue_comment, pull_request_review_comment,
pull_request_review, issues), so the job is short-circuited at workflow
evaluation time and never starts for unauthorized invokers.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 10:19:59 -04:00
Paul Carleton
68d45fcac6
ci: switch npm publish to OIDC trusted publishing
- Upgrade npm to ^11.5.1 in the publish job (Node 22 bundles npm 10.x,
  which lacks OIDC trusted publishing support)
- Drop NODE_AUTH_TOKEN / NPM_TOKEN secret in favor of OIDC
- Enable provenance attestation via NPM_CONFIG_PROVENANCE

The publish job already had id-token: write and registry-url configured.
2026-04-14 11:41:12 +01:00
Cliff Hall
a809c2ad5a
Merge pull request #1138 from modelcontextprotocol/dependabot/github_actions/docker/metadata-action-6
chore(deps): bump docker/metadata-action from 5 to 6
2026-04-11 17:52:44 -04:00
Cliff Hall
c180baba0c
Merge pull request #1137 from modelcontextprotocol/dependabot/github_actions/docker/login-action-4
chore(deps): bump docker/login-action from 3 to 4
2026-04-11 17:52:13 -04:00
Cliff Hall
b99c8b8ec9
Merge pull request #1136 from modelcontextprotocol/dependabot/github_actions/docker/setup-buildx-action-4
chore(deps): bump docker/setup-buildx-action from 3 to 4
2026-04-11 17:51:44 -04:00
Cliff Hall
afd785bed3
Merge pull request #1126 from modelcontextprotocol/dependabot/github_actions/actions/attest-build-provenance-4
chore(deps): bump actions/attest-build-provenance from 3 to 4
2026-04-11 17:51:13 -04:00
dependabot[bot]
1380fc0d5b
chore(deps): bump docker/metadata-action from 5 to 6
Bumps [docker/metadata-action](https://github.com/docker/metadata-action) from 5 to 6.
- [Release notes](https://github.com/docker/metadata-action/releases)
- [Commits](https://github.com/docker/metadata-action/compare/v5...v6)

---
updated-dependencies:
- dependency-name: docker/metadata-action
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 21:33:18 +00:00
dependabot[bot]
de17d7a6a7
chore(deps): bump docker/login-action from 3 to 4
Bumps [docker/login-action](https://github.com/docker/login-action) from 3 to 4.
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](https://github.com/docker/login-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 21:33:15 +00:00
dependabot[bot]
9cce38f004
chore(deps): bump docker/setup-buildx-action from 3 to 4
Bumps [docker/setup-buildx-action](https://github.com/docker/setup-buildx-action) from 3 to 4.
- [Release notes](https://github.com/docker/setup-buildx-action/releases)
- [Commits](https://github.com/docker/setup-buildx-action/compare/v3...v4)

---
updated-dependencies:
- dependency-name: docker/setup-buildx-action
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-09 21:33:11 +00:00
dependabot[bot]
6b90a83598
chore(deps): bump actions/attest-build-provenance from 3 to 4
Bumps [actions/attest-build-provenance](https://github.com/actions/attest-build-provenance) from 3 to 4.
- [Release notes](https://github.com/actions/attest-build-provenance/releases)
- [Changelog](https://github.com/actions/attest-build-provenance/blob/main/RELEASE.md)
- [Commits](https://github.com/actions/attest-build-provenance/compare/v3...v4)

---
updated-dependencies:
- dependency-name: actions/attest-build-provenance
  dependency-version: '4'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 22:15:27 +00:00
dependabot[bot]
5abcdb4853
chore(deps): bump actions/upload-artifact from 6 to 7
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 6 to 7.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-03-02 22:15:18 +00:00
dependabot[bot]
1f9d922475
Bump actions/checkout from 4 to 6
Bumps [actions/checkout](https://github.com/actions/checkout) from 4 to 6.
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-09 23:27:21 +00:00
David Soria Parra
1f424f2525
Revert "Remove environment constraint from release workflow jobs"
This reverts commit 39c2c9f8ce.
2026-02-09 18:30:00 +00:00
David Soria Parra
39c2c9f8ce
Remove environment constraint from release workflow jobs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-09 18:27:16 +00:00
Koichi ITO
5adaff496d
Merge pull request #1061 from modelcontextprotocol/dependabot/github_actions/actions/github-script-8
Bump actions/github-script from 7 to 8
2026-02-08 03:11:27 +09:00
Koichi ITO
5a4378bff9
Merge pull request #1060 from modelcontextprotocol/dependabot/github_actions/actions/cache-5
Bump actions/cache from 4 to 5
2026-02-08 03:11:06 +09:00
Koichi ITO
084e107810
Merge pull request #1059 from modelcontextprotocol/dependabot/github_actions/actions/attest-build-provenance-3
Bump actions/attest-build-provenance from 2 to 3
2026-02-08 03:10:31 +09:00
Koichi ITO
f3afc31728
Merge pull request #1058 from modelcontextprotocol/dependabot/github_actions/actions/upload-artifact-6
Bump actions/upload-artifact from 4 to 6
2026-02-08 03:10:03 +09:00
dependabot[bot]
0f253927d1
Bump actions/github-script from 7 to 8
Bumps [actions/github-script](https://github.com/actions/github-script) from 7 to 8.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](https://github.com/actions/github-script/compare/v7...v8)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: '8'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-04 13:27:13 +00:00
dependabot[bot]
a68211b3e4
Bump actions/cache from 4 to 5
Bumps [actions/cache](https://github.com/actions/cache) from 4 to 5.
- [Release notes](https://github.com/actions/cache/releases)
- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)
- [Commits](https://github.com/actions/cache/compare/v4...v5)

---
updated-dependencies:
- dependency-name: actions/cache
  dependency-version: '5'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-04 13:27:09 +00:00
dependabot[bot]
742f27dc7a
Bump actions/attest-build-provenance from 2 to 3
Bumps [actions/attest-build-provenance](https://github.com/actions/attest-build-provenance) from 2 to 3.
- [Release notes](https://github.com/actions/attest-build-provenance/releases)
- [Changelog](https://github.com/actions/attest-build-provenance/blob/main/RELEASE.md)
- [Commits](https://github.com/actions/attest-build-provenance/compare/v2...v3)

---
updated-dependencies:
- dependency-name: actions/attest-build-provenance
  dependency-version: '3'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-04 13:27:04 +00:00
dependabot[bot]
bde1d59e8f
Bump actions/upload-artifact from 4 to 6
Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 6.
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/upload-artifact
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-04 13:27:00 +00:00
dependabot[bot]
613c650c40
Bump actions/setup-node from 4 to 6
Bumps [actions/setup-node](https://github.com/actions/setup-node) from 4 to 6.
- [Release notes](https://github.com/actions/setup-node/releases)
- [Commits](https://github.com/actions/setup-node/compare/v4...v6)

---
updated-dependencies:
- dependency-name: actions/setup-node
  dependency-version: '6'
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-04 13:26:54 +00:00
Koichi ITO
dd02737463
Enable Dependabot for GitHub Actions (#1048)
Configure Dependabot to automatically detect updates to the actions used in
GitHub Actions (e.g., `actions/checkout`) and create pull requests for them.

For example, `actions/checkout@v4` is likely updatable, as v6 is already available:
9f3b4ff/.github/workflows/main.yml (L15)

This PR enables Dependabot to update such GitHub Actions dependencies.

Updates to outdated actions packages in `.github/workflows` are intentionally not included in this PR,
as they will be updated by the initial Dependabot run as part of verifying its behavior.

Based on experience, checking for updates on a weekly interval should work well.
2026-02-04 06:26:13 -07:00
Ola Hungerford
6247e676fe
Merge branch 'main' into add-mcp-docs-server-to-claude 2026-01-19 09:35:42 -07:00
Bob Dickinson
44d0e580f6
Converted CLI tests to use vitest (#1012)
* Pinned server-everything, fixed all tests to work with current pinned version, fixed problem with undetected failures (isError: true payloads).

* First working vitest implementation

* Refactoring some single-use configs fixtures and into the refeencing tests

* No tests refere to server-everything (or any other server from a registry), all tests actually validate what they say they test.

* Removed server-everything dep from CI, minor cleanup

* Addressed Claude PR review comments: Added tsx dev dependency, beefed up process termination (possible leak on Windows), beefed up http server cleanup (close all connections), removed unused hasValidJsonOutput, reduced CLI timeout to give it breathing room with vitest timeout.

* Made both stdio and http test servers fully composable, cleaned up types, terminology, and usage.
2026-01-19 08:12:00 -07:00
olaservo
4835b7392e Fix allowedTools config to include mcp-docs MCP server tools
Add mcp__mcp-docs to allowedTools so Claude can actually use the
MCP documentation server when reviewing MCP-related code.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-18 20:26:00 -07:00
olaservo
232f2447e5 Add MCP docs server to Claude Code GitHub Action
- Add .mcp.json with mcp-docs HTTP server configuration
- Update claude.yml to use --mcp-config and --append-system-prompt
- Add instructions for Claude to use MCP docs and schema references

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2026-01-18 20:02:31 -07:00
cliffhall
775726b958 prettier 2026-01-06 16:31:38 -05:00
cliffhall
1c265b9260 Remove claude_pr_review.yml as it turns out there is a GitHub restriction that keeps secrets from being accessed on PRs from forks. We will have to request reviews manually.
* Modify claude.yml

1. Added "Get PR details" step (NEW - lines 28-51)
This new step runs ONLY when the trigger is a PR-related comment. It:

- Detects if it's a PR comment vs regular issue
- Fetches the PR information using GitHub API
- Extracts the fork's repository name and commit SHA
- Sets them as outputs (steps.pr.outputs.sha and steps.pr.outputs.repo)

Why? The original workflow couldn't see fork PR code because it only checked out the main repo.

2. Split checkout into TWO conditional steps (CHANGED - lines 53-62)
Before: One checkout step that always checked out main repo with fetch-depth: 1
After: Two checkout steps:

- "Checkout PR branch" - Runs if PR details were fetched successfully, checks out the fork's PR branch
- "Checkout repository" - Runs otherwise (for regular issues), checks out main repo

Why? Need different checkout behavior for PRs (checkout fork) vs issues (checkout main).

3. Changed fetch-depth from 1 to 0 (CHANGED)
Before: fetch-depth: 1 (only latest commit)
After: fetch-depth: 0 (full git history)
Why? Claude Code needs more context to understand the codebase and provide better reviews.

Summary
The original workflow could only see the main repo's code. When you commented @claude on a fork PR, it would review the wrong code!
These changes make it check out the actual PR branch from the fork when reviewing PRs, while keeping the original behavior for regular issues.
2026-01-06 16:25:57 -05:00
cliffhall
7e6cc16fba Change instructions to prompt in claude_pr_review.yml 2026-01-06 15:50:15 -05:00
cliffhall
33b71992e4 Allow Claude to safely do code review automatically and from forks. Doesn't change the existing Claude workflow.
* Added claude_pr_review.yml
2026-01-06 15:36:17 -05:00
Koichi ITO
171d6b42b4 [Docs] Fix broken CONTRIBUTING.md links in GitHub templates
The links were broken because the relative paths were incorrect.
2025-12-08 16:50:43 +09:00
olaservo
de5b23bb5a Update V2 messaging to clarify V1 focus on bug fixes and spec compliance
Clarify in contribution guidelines that during V2 development, V1
contributions should focus on bug fixes and MCP spec compliance.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-12-05 08:58:35 -07:00
Koichi ITO
b566f0406e Bump Claude Code GitHub Action to v1
Follow-up to https://github.com/modelcontextprotocol/servers/pull/3018.

This PR bumps Claude Code GitHub Action to v1 from beta.
https://github.com/anthropics/claude-code-action/releases/tag/v1
2025-11-19 15:58:30 +09:00
olaservo
cbb6a0a53c Add version consideration and context for Inspector V2 development in documentation 2025-11-08 19:27:05 -07:00
Koichi ITO
002dad07bc Fix a typo 2025-11-03 17:01:51 +09:00
David Soria Parra
f1c78fdde7
fix prettier 2025-09-10 20:40:49 +01:00
David Soria Parra
b476ece67e
Update issue templates 2025-09-08 11:50:36 +01:00
olaservo
ddf74d0766 Fix formatting 2025-08-26 10:00:03 -07:00