Commit graph

2,007 commits

Author SHA1 Message Date
Cliff Hall
1e23d37769
Merge pull request #1112 from modelcontextprotocol/copilot/bump-version-to-0-21-0 0.21.0
chore: bump version to 0.21.0
2026-02-24 11:57:14 -05:00
copilot-swe-agent[bot]
58478bc88b chore: bump version to 0.21.0
Co-authored-by: olaservo <16480113+olaservo@users.noreply.github.com>
2026-02-24 15:48:58 +00:00
copilot-swe-agent[bot]
238eadfb19 Initial plan 2026-02-24 15:46:41 +00:00
Bob Dickinson
c4c6e6b6b1
Merge pull request #1072 from cliffhall/hide-run-as-task-if-not-supported
Manage display of "Run as Task" checkbox on Tools Tab
2026-02-23 19:06:43 -08:00
cliffhall
92b6c89354 Formatting 2026-02-23 11:49:44 -05:00
cliffhall
f64a7ea6e3 Fix review issues from Claude's code review
- Default taskSupport fallback to "forbidden" per MCP spec (was "optional")
- Fix import path to use @/ alias consistently
- Fix misleading "type guard" comment on getTaskSupport
- Extract getTaskSupport to a variable to avoid duplicate calls in render
- Export ExtendedTool and import in tests instead of duplicating

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 11:15:53 -05:00
Cliff Hall
4bcffe456b
Merge branch 'main' into hide-run-as-task-if-not-supported 2026-02-23 10:32:22 -05:00
dependabot[bot]
6ce441ae70
chore(deps): bump the npm_and_yarn group across 1 directory with 2 updates (#1106)
Bumps the npm_and_yarn group with 2 updates in the / directory: [ajv](https://github.com/ajv-validator/ajv) and [hono](https://github.com/honojs/hono).


Updates `ajv` from 6.12.6 to 6.14.0
- [Release notes](https://github.com/ajv-validator/ajv/releases)
- [Commits](https://github.com/ajv-validator/ajv/compare/v6.12.6...v6.14.0)

Updates `hono` from 4.11.7 to 4.12.1
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](https://github.com/honojs/hono/compare/v4.11.7...v4.12.1)

---
updated-dependencies:
- dependency-name: ajv
  dependency-version: 6.14.0
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: hono
  dependency-version: 4.12.1
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-22 18:04:00 -07:00
John Howard
695972a404
oauth: add tenant suffix to oauth flow (#1096) 2026-02-19 06:00:33 -07:00
Den Delimarsky
f2ed4ef3b9
Update SECURITY.md to use GitHub Security Advisories (#1097) 2026-02-18 19:57:45 -07:00
Cliff Hall
f1b42654dd
Merge pull request #1075 from infoxicator/fix/apps-tool-result
fix: add missing tool result to AppsRenderer
2026-02-16 17:44:43 -05:00
Ruben Casas
f470fcb3a5 Merge branch 'fix/apps-tool-result' of https://github.com/infoxicator/inspector into fix/apps-tool-result 2026-02-16 22:20:32 +00:00
Ruben Casas
87bb2425a3 fix linting error 2026-02-16 22:20:06 +00:00
Cliff Hall
49bcbbe276
Merge branch 'main' into fix/apps-tool-result 2026-02-16 15:36:01 -05:00
Ruben Casas
2a84ce3254 chore: remove accidentally committed mcp-ui patch 2026-02-16 16:53:28 +00:00
Ruben Casas
9adc37893c Merge branch 'fix/apps-tool-result' of https://github.com/infoxicator/inspector into fix/apps-tool-result 2026-02-16 16:45:23 +00:00
Ruben Casas
a31ae3e767 feat call tool result from tools tab 2026-02-16 16:44:33 +00:00
Koichi ITO
6573bf9892
Merge pull request #1088 from modelcontextprotocol/dependabot/npm_and_yarn/npm_and_yarn-14dc0ebc5a
Bump qs from 6.14.1 to 6.14.2 in the npm_and_yarn group across 1 directory
2026-02-15 02:38:10 +09:00
dependabot[bot]
41e0e83fac Bump qs in the npm_and_yarn group across 1 directory
Bumps the npm_and_yarn group with 1 update in the / directory: [qs](https://github.com/ljharb/qs).


Updates `qs` from 6.14.1 to 6.14.2
- [Changelog](https://github.com/ljharb/qs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/ljharb/qs/compare/v6.14.1...v6.14.2)

---
updated-dependencies:
- dependency-name: qs
  dependency-version: 6.14.2
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-02-15 02:35:13 +09:00
Cliff Hall
5e63f732e2
Merge pull request #1066 from olaservo/feature/tool-annotations-display
feat(client): display tool annotations in Tools tab
2026-02-14 11:37:49 -05:00
Cliff Hall
9ac19d25cc
Merge pull request #1055 from modelcontextprotocol/claude/issue-1036-20260204-1236
fix: include LICENSE file in published npm packages
2026-02-14 11:21:56 -05:00
Cliff Hall
8e4ab635fa
Merge branch 'main' into claude/issue-1036-20260204-1236 2026-02-14 11:20:06 -05:00
Cliff Hall
6d18cf3711
Merge branch 'main' into hide-run-as-task-if-not-supported 2026-02-14 10:53:28 -05:00
Ola Hungerford
7928a33994
Merge branch 'main' into feature/tool-annotations-display 2026-02-12 19:10:22 -07:00
Cliff Hall
8cf0ac1c68
Merge pull request #901 from Edison-A-N/fix/enum-anyof-ref-resolution
fix: enhance  resolution and enum handling in anyOf schemas
2026-02-11 18:01:12 -05:00
Koichi ITO
17d08ffe66
Merge pull request #1079 from modelcontextprotocol/dependabot/github_actions/actions/checkout-6
Bump actions/checkout from 4 to 6
2026-02-12 01:57:40 +09: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
Cliff Hall
b5eb9697b8
Merge branch 'main' into fix/apps-tool-result 2026-02-09 14:24:12 -05: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
Ruben Casas
00791446a8 fix: add missing tool result to AppsRenderer 2026-02-08 00:16:35 +00:00
Ola Hungerford
d1824ca3f9
Merge branch 'main' into feature/tool-annotations-display 2026-02-07 16:44:55 -07:00
Cliff Hall
a4aa22093f
Merge branch 'main' into fix/enum-anyof-ref-resolution 2026-02-07 17:10:58 -05:00
Cliff Hall
0c0e15dbd8
Merge pull request #1054 from modelcontextprotocol/claude/issue-1053-20260204-1234
fix: display tool title field in Inspector UI
2026-02-07 16:40:26 -05:00
Cliff Hall
f28c64f3eb
Merge branch 'main' into claude/issue-1053-20260204-1234 2026-02-07 16:38:37 -05: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
Koichi ITO
c3e1c30daf
Merge pull request #1057 from modelcontextprotocol/dependabot/github_actions/actions/setup-node-6
Bump actions/setup-node from 4 to 6
2026-02-08 03:09:38 +09:00
olaservo
43426f3c8e feat(client): use consistent slate styling for annotation badges
Replace value-based green/gray badge coloring with uniform slate
colors, relying on checkmark/cross icons and opacity to convey state.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-07 10:49:51 -07:00
cliffhall
96b1b586f9 Manage display of "Run as Task" checkbox on Tools Tab
* In ToolsTab.tsx
  - define ExtendedTool interface for augmenting with execution, meta, icons
  - in hasMeta function,
    - cast tool as ExtendedTool
  - add getTaskSupport function
    - returns forbidden if input is not a tool
    - returns the setting of execution.taskSupport if set and valid
    - returns optional otherwise
    - in useEffect map callback
      - set runAsTask to true if getTaskSupport returns "required", else false
    - in IconDisplay instances cast tool as ExtendedTool instead of as WithIcons
    - hide "Run as Task" checkbox if getTaskSupport returns "forbidden" for the selected tool
    - disable the "Run as Task" checkbox if getTaskSupport returns "required"
* In ToolsTab.test.tsx
  - added unit test
    - "should show/hide/disable run-as-task checkbox based on taskSupport"
      - tests checkbox checked and disabled states for "forbidden", "required", and "optional" states
2026-02-06 16:30:23 -05:00
Cliff Hall
ce092a39e7
Merge pull request #1070 from modelcontextprotocol/claude/issue-1069-20260206-1234 0.20.0
Bump version to 0.20.0
2026-02-06 12:51:33 -05:00
claude[bot]
a276a7336e Bump version to 0.20.0
- Updated all package.json files to version 0.20.0
- Updated workspace dependencies in root package.json
- Updated package-lock.json
- Verified version consistency with check-version-consistency script

Co-authored-by: Ola Hungerford <olaservo@users.noreply.github.com>
2026-02-06 12:35:38 +00:00
Cliff Hall
2af3410b8e
Add MCP Apps support to Inspector (#1044)
* Fix MCP Apps rendering issue and add comprehensive logging

- Fixed AppRenderer useEffect dependency array to include resourceContent
  This ensures the component re-evaluates when resource content arrives
- Added detailed console logging throughout the app lifecycle:
  * Resource fetch and response tracking in App.tsx
  * Setup conditions and AppBridge creation in AppRenderer.tsx
  * HTML parsing and iframe rendering steps
  * PostMessageTransport and AppBridge connection status
  * App tool filtering and selection in AppsTab.tsx
- Refactored AppsTab selectedTool rendering for better tracking

The issue was that resourceContent prop updates weren't triggering
the AppRenderer setup effect. Now the effect properly responds to
both resourceUri and resourceContent changes.

Co-authored-by: Cliff Hall <cliffhall@users.noreply.github.com>

* Fix MCP Apps iframe rendering issue

The app was getting stuck on 'Loading MCP App...' because the iframe was
hidden (display: none) until the oninitialized event fired. However, the
PostMessage handshake requires the iframe to be visible to complete.

This fix:
- Sets loading to false immediately after writing HTML to the iframe
- Makes the iframe visible before establishing PostMessage transport
- Allows the AppBridge initialization handshake to complete successfully
- Removes redundant setLoading(false) from oninitialized callback

The iframe is now visible and ready for PostMessage communication before
the AppBridge connect() call, enabling proper initialization.

Co-authored-by: Cliff Hall <cliffhall@users.noreply.github.com>

* Fix MCP Apps HTML extraction to match spec

The AppRenderer was incorrectly checking for a 'type' field in resource
contents, but TextResourceContents objects only have uri, mimeType, and
text fields according to the MCP specification.

Fixed by checking for the presence of the 'text' field directly instead
of checking a non-existent 'type' field. This allows the HTML content
to be properly extracted and rendered in the iframe.

Co-authored-by: Cliff Hall <cliffhall@users.noreply.github.com>

* Add comprehensive tests for MCP Apps support

- Add tests for AppsTab component (13 tests)
- Add tests for AppRenderer component (17 tests)
- Update jest.config.cjs to handle ES modules from @modelcontextprotocol/ext-apps
- All 478 tests pass successfully

Co-authored-by: Cliff Hall <cliffhall@users.noreply.github.com>

* Add MCP Apps support to Inspector

- Add AppsTab component for detecting and listing MCP apps
- Add AppRenderer component with full AppBridge integration
- Implement UI resource fetching and sandboxed iframe rendering
- Add PostMessage transport for bidirectional JSON-RPC communication
- Include comprehensive test coverage (30 new tests)
- Auto-populate apps when tab becomes active
- Support theme awareness and configurable permissions

Co-authored-by: Cliff Hall <cliffhall@users.noreply.github.com>

* Prefer structuredContent over content field in tool responses

Some MCP servers return different data in structuredContent vs content fields.
This change ensures that when structuredContent is present, it is used
exclusively for display instead of showing both fields.

Changes:
- Modified ToolResults.tsx to only show content when structuredContent is absent
- Removed unused checkContentCompatibility function
- Updated test cases to reflect new behavior

Co-authored-by: Cliff Hall <cliffhall@users.noreply.github.com>

* Revert "Prefer structuredContent over content field in tool responses"

This reverts commit 3b054b4da08517cce53ef23e60c07bb32b0fa8f5.

Claude did not do the right thing.

* feat: integrate @mcp-ui/client for MCP application rendering

This commit implements the integration of `@mcp-ui/client` to handle the
rendering of Model Context Protocol (MCP) applications within the inspector.
It includes refactoring the rendering logic, improving resource fetching
in the main application state, and setting up a secure sandbox environment.

Changes per file:

- client/package.json:
  - Added `@mcp-ui/client` as a dependency.

- client/src/components/AppRenderer.tsx:
  - Refactored to use `McpUiAppRenderer` from `@mcp-ui/client`.
  - Implemented HTML parsing logic for MCP resource responses.
  - Configured host context (theme) and sandbox URL for the renderer.
  - Replaced iframe-based manual rendering with the official component.

- client/src/App.tsx:
  - Added `fetchingResources` state to prevent duplicate concurrent resource requests.
  - Enhanced `readResource` with better error handling and state tracking.
  - Optimized resource content mapping to better support application state.

- client/src/components/AppsTab.tsx:
  - Updated to use `getToolUiResourceUri` utility from `@modelcontextprotocol/ext-apps`
    instead of manual metadata property access.
  - Simplified tool filtering and selection logic.

- client/public/sandbox_proxy.html:
  - Added a sandbox proxy page to facilitate secure communication between
    the inspector and the rendered MCP applications.

- client/bin/client.js:
  - Added server rewrites to ensure `sandbox_proxy.html` is served correctly.
  - Implemented specific `Cache-Control` headers for `sandbox_proxy.html` to
    prevent stale cached versions.

- client/vite.config.ts:
  - Explicitly configured `publicDir: "public"` to ensure the sandbox proxy
    is included in the build output.

- client/src/components/__tests__/AppRenderer.test.tsx:
  - Updated tests to mock the new `@mcp-ui/client` component.
  - Adjusted assertions to verify correct props are passed to the renderer.
  - Enhanced mock MCP client to include required methods like `getServerCapabilities`.

* Potential fix for code scanning alert no. 37: Client-side cross-site scripting

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Update package-lock.json
 - npm install
 - npm audit fix

* Potential fix for code scanning alert no. 38: Client-side cross-site scripting

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* Potential fix for code scanning alert no. 39: Client-side cross-site scripting

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* prettier

* Update client/src/components/AppsTab.tsx

Co-authored-by: Ola Hungerford <olahungerford@gmail.com>

* prettier

* In AppsTab.test.tsx, fetch button by aria-label

* relative imports

* Remove sanitization logic from sandbox_proxy.html. It's breaking the app rendering. Will sort out what best practices for this HTML is later

* In sandbox_proxy.html,formatting
In AppsTab.tsx
  - Add app window
    - when an app is selected,
      - show input form for apps that have an input schema
      - button shows app
      - if app is shown, show maximize button
        - if maximized,
          - show minimize button
          - hide app list
* In AppsTab.test.tsx
  - test new layout and controls
* In AppRenderer.tsx
    - accept toolInput
    - pass to McpUiAppRenderer

* In AppsTab.tsx, if an app has no inputSchema, just show it, otherwise show the form and the "back to form" button when showing the app.

* In AppsTab.test.tsx
  - test new behavior

* In ListPane.tsx
  - remove the Clear button

* In ListPane.test.tsx
  - remove test for clear button

* In AppRenderer.tsx,
  - remove onReadResource and resourceContent, not needed since mcpClient is being passed

* In App.tsx and AppsTab.tsx,
  - remove the passing of these variables

* In AppRenderer.test.tsx, and AppsTab.test.tsx
  - remove tests that fail after having removed onReadResource and resourceContent

* Serving the sandbox_proxy.html from a separate port, using the proxy instead of the webclient server.

* In App.tsx
  - pass the path to the sandbox endpoint on the proxy to the AppsTab

* In AppsTab.tsx
  - accept the sandboxPath property and pass it to the AppRenderer

* In AppRenderer.tsx
  - accept the sandboxPath property and pass it to the McpUiAppRenderer

* In client.js
  - remove the rewrite and header config for sandbox_proxy.html

* In server/src/index.ts
  - add a /sandbox endpoint that reads and returns the sandbox_proxy.html file with no-cache header

* In server/package.json
  - add shx for cross-platform copy function
  - in build script, copy static folder to build folder

* Moved sandbox_proxy.html from client/public to server/static

* In client.js
  - return to original state

* In vite.config.ts
  - return to original state

* Potential fix for code scanning alert no. 41: Missing rate limiting

Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>

* In AppRenderer.tsx
  - add open link handler that handles link requests from the UI. Makes sure that the URL starts with http or https

* In sandbox_proxy.html
  - refactor to match [basic-host](https://github.com/modelcontextprotocol/ext-apps/tree/main/examples/basic-host) example
  - creates an nested iframe for security.
  - in this implementation, for simplicity the sandbox.ts is inlined in sandbox_proxy.html as javascript

* prettier

* In AppRenderer.tsx
  - add support for handling McpUiMessageRequest messages from the UI
  - show message in a toast

* Add logging message handler to AppRenderer

In App.tsx
  - pass an onNotification function to the AppsTab that adds a notification to the notification array

In AppsTab.tsx
  - Accept the onNotification function and pass it to the AppRenderer

In AppRenderer.tsx
  - Accept the onNotification function
  - added an handleLoggingMessage function that takes a LoggingMessageNotificationParams object, wraps it with a method and params prop to make it a ServerNotification shape, and pass it to the onNotification function
   - pass handleLoggingMessage to McpUiAppRenderer

* In ResourcesTab.test.tsx
  - fix @ import that wasn't resolving

* In AppRenderer.tsx
  - remove fetch and evaluation of resourceUri, as the mcpClient handles that (review request)

* In AppRenderer.test.tsx
  - remove test for no resourceUri found

* Merge branch 'main' into full-apps-support-final

Resolved Conflicts:
- package-lock.json

* Fixed mismatch with sanboxRateLimiter and the express version

---------

Co-authored-by: claude[bot] <41898282+claude[bot]@users.noreply.github.com>
Co-authored-by: Cliff Hall <cliffhall@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
Co-authored-by: Ola Hungerford <olahungerford@gmail.com>
2026-02-05 20:02:20 -07:00
Cliff Hall
98f058765d
Merge pull request #1067 from BobDickinson/cli-test-update
Fixed test failures induced by MCP SDK update
2026-02-05 19:44:21 -05:00
Bob Dickinson
ee29c34bd7 Fixed test failures induced by MCP SDK update (added session id generator to Streamable test server). Cleanup up some port usage to avoid potential issues (always use port 0 for servers). Added stdout/stderr to cli status assertion failures to make CLI test failures easier to debug from test output. 2026-02-05 16:34:25 -08:00
Cliff Hall
ecc7e59ede
Merge branch 'main' into dependabot/github_actions/actions/github-script-8 2026-02-05 18:43:23 -05:00
dependabot[bot]
f97725760a
Bump the npm_and_yarn group across 1 directory with 3 updates (#1065)
Bumps the npm_and_yarn group with 2 updates in the / directory: [@modelcontextprotocol/sdk](https://github.com/modelcontextprotocol/typescript-sdk) and [diff](https://github.com/kpdecker/jsdiff).


Updates `@modelcontextprotocol/sdk` from 1.25.2 to 1.26.0
- [Release notes](https://github.com/modelcontextprotocol/typescript-sdk/releases)
- [Commits](https://github.com/modelcontextprotocol/typescript-sdk/compare/v1.25.2...v1.26.0)

Updates `diff` from 4.0.2 to 4.0.4
- [Changelog](https://github.com/kpdecker/jsdiff/blob/master/release-notes.md)
- [Commits](https://github.com/kpdecker/jsdiff/compare/v4.0.2...v4.0.4)

Updates `hono` from 4.11.3 to 4.11.7
- [Release notes](https://github.com/honojs/hono/releases)
- [Commits](https://github.com/honojs/hono/compare/v4.11.3...v4.11.7)

---
updated-dependencies:
- dependency-name: "@modelcontextprotocol/sdk"
  dependency-version: 1.26.0
  dependency-type: direct:production
  dependency-group: npm_and_yarn
- dependency-name: diff
  dependency-version: 4.0.4
  dependency-type: indirect
  dependency-group: npm_and_yarn
- dependency-name: hono
  dependency-version: 4.11.7
  dependency-type: indirect
  dependency-group: npm_and_yarn
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-02-04 20:42:32 -07:00
Ola Hungerford
c0c2d6b224
Merge branch 'main' into claude/issue-1053-20260204-1234 2026-02-04 20:41:47 -07:00