Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
118 commits
Select commit Hold shift + click to select a range
eb96ebb
First working vitest implementation
BobDickinson Jan 15, 2026
3f626b3
Refactoring some single-use configs fixtures and into the refeencing …
BobDickinson Jan 15, 2026
42ba6e5
No tests refere to server-everything (or any other server from a regi…
BobDickinson Jan 15, 2026
36ad7e8
Removed server-everything dep from CI, minor cleanup
BobDickinson Jan 15, 2026
caf0a69
Addressed Claude PR review comments: Added tsx dev dependency, beefed…
BobDickinson Jan 15, 2026
dc14802
Made both stdio and http test servers fully composable, cleaned up ty…
BobDickinson Jan 16, 2026
5bfd924
Add TUI integration design document
BobDickinson Jan 18, 2026
14de563
First integration of TUI (runnable from cli, no shared code)
BobDickinson Jan 18, 2026
d2202f3
Major refactor around InspectorClient (not complete)
BobDickinson Jan 19, 2026
2c17dea
Refactored MCP code into mcp folder with it's own types file.
BobDickinson Jan 19, 2026
49fdb21
Cleaned up barrel exports, removed inadventantly committed build files.
BobDickinson Jan 19, 2026
69c6e8d
Cleaned up barrel exports
BobDickinson Jan 19, 2026
8b2d7e5
Fixed data state clearing in InspectorClient, made it only source of …
BobDickinson Jan 19, 2026
6a76eab
Phase 2 complete (moved shared code from CLI and TUI to top level (st…
BobDickinson Jan 19, 2026
12f3dab
Integrate shared code as a workspace package, updating CLI and TUI to…
BobDickinson Jan 20, 2026
2c2bee4
Refactor CLI to utilize InspectorClient for MCP interactions, replaci…
BobDickinson Jan 20, 2026
79c1fc6
Refactor CLI to fully utilize InspectorClient methods for all MCP ope…
BobDickinson Jan 20, 2026
868f7e8
Refactor InspectorClient to extend EventTarget instead of EventEmitte…
BobDickinson Jan 20, 2026
06f3ba6
Update CLI workflow to build shared package and adjust build commands…
BobDickinson Jan 20, 2026
6596ebe
Finalized shared architecture doc.
BobDickinson Jan 20, 2026
935ec74
Added diagrams to shared code doc.
BobDickinson Jan 21, 2026
4d3729a
Support for HTTP request tracking (InspectorClient and TUI)
BobDickinson Jan 21, 2026
d348cd0
Enhance testing and server functionality: Added new tests for shared …
BobDickinson Jan 21, 2026
c9bab35
Fuill resource (including templates) and prompt support in InspectorC…
BobDickinson Jan 22, 2026
0a8b42a
Implement sampling capability in InspectorClient. Added support for h…
BobDickinson Jan 22, 2026
44c1e43
Add elicitation capability to InspectorClient. Implemented Elicitatio…
BobDickinson Jan 22, 2026
8a2c69e
Implemented proper session support for streamable-http transport (als…
BobDickinson Jan 22, 2026
e288b10
Added InspectorClient and test framework support for completions Adde…
BobDickinson Jan 22, 2026
57aba95
Updated feature gaps
BobDickinson Jan 22, 2026
3e2622f
Added roots support to InspectorClient, added tests for same
BobDickinson Jan 23, 2026
97ff384
Refactor InspectorClient methods to return structured responses for t…
BobDickinson Jan 23, 2026
e630386
Refactor InspectorClient to return invocation objects for tool calls,…
BobDickinson Jan 23, 2026
1f93540
Implemented standalone content cache and tests
BobDickinson Jan 23, 2026
b1578c2
Integrated content cache
BobDickinson Jan 23, 2026
30adf26
Implement resource subscriptions and listChanged notifications in Ins…
BobDickinson Jan 24, 2026
53a6419
Added list paging support to InspectorClient, including test tooling …
BobDickinson Jan 24, 2026
e36f371
Added progress tracking support to InspectorClient, added test fixtur…
BobDickinson Jan 24, 2026
52ee218
Implemented typesafe events across InspectorClient and all consumers.
BobDickinson Jan 24, 2026
339c4fa
Added task support design doc
BobDickinson Jan 24, 2026
b401df9
Task support including test fixture support and entensive tests
BobDickinson Jan 25, 2026
d9a73ea
Implemented url-elicitation support, tests, and test fixtures. Clean…
BobDickinson Jan 26, 2026
cdc2583
Cleaned up sample and roots server fixtures to use specific server me…
BobDickinson Jan 26, 2026
c9293c5
OAuth design docs
BobDickinson Jan 27, 2026
3109e69
Interim check-in of OAuth support in InspectorClient, including test …
BobDickinson Jan 28, 2026
483a1f8
Auth update to use authProvider
BobDickinson Jan 28, 2026
ff2589e
Auth tests
BobDickinson Jan 29, 2026
af8f5c2
First round of excising timers in tests
BobDickinson Jan 29, 2026
5ea38c0
FInal OAuth slop cleanup.
BobDickinson Jan 29, 2026
81bc8a5
Docs cleanup post OAuth support in InspectorClient
BobDickinson Jan 29, 2026
7096a01
Add support for request timeout management in InspectorClient
BobDickinson Jan 29, 2026
c3b306a
Initial cut of working auth in TUI
BobDickinson Jan 30, 2026
0bd1d67
Major OAuthClientProvider refactor to remove node deps.
BobDickinson Jan 31, 2026
9d11a73
Env isolation doc
BobDickinson Jan 31, 2026
124a9c8
Added fetchFn support for auth
BobDickinson Jan 31, 2026
9e041e0
Interim checkin of TUI auth support before guided auth url refactor.
BobDickinson Feb 1, 2026
4092c08
Updated docs, moved to single callback URL for quick/guided auth
BobDickinson Feb 1, 2026
f03e07e
Implemented static client support in TUI, including as command line p…
BobDickinson Feb 3, 2026
fddf3a9
Added client metadata and callback url params, default to loopback in…
BobDickinson Feb 3, 2026
30621ad
Callback restart fix (when auth fail so listener doesn't stop). Updat…
BobDickinson Feb 3, 2026
82df329
Updated feature gaps doc to show TUI OAuth support
BobDickinson Feb 3, 2026
02f11d4
Converted InspectorClient to take injected CreateTransport.
BobDickinson Feb 4, 2026
5b3e130
Retooled InspectorClient to use a single fetchFn (which is used for b…
BobDickinson Feb 5, 2026
0b57581
Reorganized shared code to break out node and browser code, and to ma…
BobDickinson Feb 5, 2026
b2397a0
Early cut are remoting transports and logging via Hono API server
BobDickinson Feb 5, 2026
afcaba9
Added token-based security to the remote server
BobDickinson Feb 6, 2026
0062a3a
Implemented remote storage, remote transport fixes to support auth vi…
BobDickinson Feb 6, 2026
15a0ef7
Implemented InspectorClientEnvironment to package all dependencies fo…
BobDickinson Feb 6, 2026
63a36eb
Added origin validation support to API server.
BobDickinson Feb 6, 2026
ab7c7bb
Updated docs with v1 client integration strategy
BobDickinson Feb 6, 2026
84ba17e
Cloned client app to "web" (spike to test InspectorClient integration…
BobDickinson Feb 6, 2026
7524cda
Fixed build errors, integrated Hono server (still have proxy in place)
BobDickinson Feb 7, 2026
649df12
Working remote api server (testable via console)
BobDickinson Feb 7, 2026
57235cf
Converted web app to use InspectorClient (no remaining use of proxy)
BobDickinson Feb 7, 2026
038a254
Removed usage of proxy server, useConnection
BobDickinson Feb 7, 2026
670d2a4
Web build and test fixes
BobDickinson Feb 7, 2026
85626ec
Fixed IDE test resolution errors
BobDickinson Feb 7, 2026
d87e60e
Fixed web build after ide config fixes.
BobDickinson Feb 7, 2026
8f3d420
Fixed bug that caused test hang
BobDickinson Feb 7, 2026
c8b6c78
Cleaned up console output in tests
BobDickinson Feb 8, 2026
dff0649
Updated port plan
BobDickinson Feb 8, 2026
a259b7e
Updated porting doc with detailed plan for auth
BobDickinson Feb 8, 2026
c0666ae
Updated InspectorClient tool/resource/prompt loading so the paging li…
BobDickinson Feb 8, 2026
a764f68
Rework InspectorClient list sync params and logic (web app now works …
BobDickinson Feb 9, 2026
d5c411e
Build fix (dep fex and lock update)
BobDickinson Feb 9, 2026
3a2c1a7
First working integration of auth (quick and guided) supplied by Insp…
BobDickinson Feb 10, 2026
ccdce90
First working integration of auth (quick and guided) supplied by Insp…
BobDickinson Feb 10, 2026
ae021aa
Env isolation doc updates
BobDickinson Feb 10, 2026
a01401b
Implemented InspectorClient serialization, now maintains state though…
BobDickinson Feb 10, 2026
d9412df
Added new commands for running the web application in development mod…
BobDickinson Feb 10, 2026
5bbd2a4
Fixed guided flow oauth bug (API token guard was triggered when not n…
BobDickinson Feb 11, 2026
6a7aa98
Fixed theming of API token screen
BobDickinson Feb 11, 2026
d9d4b2f
Fixed web tests (broken by recent theming changes)
BobDickinson Feb 11, 2026
31964c9
Deployed react v18 throughout (new stuff was all on 19, client requir…
BobDickinson Feb 12, 2026
c1aea6c
Deployed react v18 throughout (new stuff was all on 19, client requir…
BobDickinson Feb 12, 2026
f372202
Dependency updates (align Express and types)
BobDickinson Feb 12, 2026
7242eda
Updated package versions to 20, added web package to version check
BobDickinson Feb 12, 2026
e0e6722
Updated our package versions in package lock
BobDickinson Feb 12, 2026
c63d514
Added spec for repo reorg
BobDickinson Feb 14, 2026
94f200f
Converted web tests from Jest to vitest, added top level test:unit ta…
BobDickinson Feb 14, 2026
6eef9e4
First working version of MCP Apps support (remaining work documented)…
BobDickinson Feb 14, 2026
5a0b691
Renamend "shared" package to "core", removed client/server packages.
BobDickinson Feb 14, 2026
837f772
Updated rebase plan
BobDickinson Feb 14, 2026
895ad65
Updated core version
BobDickinson Feb 14, 2026
fa1beed
Removed inadvertanly checked-in core build files
BobDickinson Feb 15, 2026
8c61bf4
Fully encapsulate MCP session in InspectorClient. Refactor InspectorC…
BobDickinson Feb 15, 2026
7258903
Updated todo
BobDickinson Feb 15, 2026
2131fb0
Linter fixes
BobDickinson Feb 15, 2026
398ebc3
Added functionality to run tools as tasks with optional TTL settings.…
BobDickinson Feb 15, 2026
8dd5cab
Added type checking to web vitest build. Minor refactor of InspectorC…
BobDickinson Feb 15, 2026
1ef9094
Finalized receiver task support plan.
BobDickinson Feb 15, 2026
afa1045
Renamed "ClientTask" to 'RequestorTask" throughout (to reflect proper…
BobDickinson Feb 17, 2026
1f9a534
First cut at receiver task support
BobDickinson Feb 17, 2026
bb92dac
Task test fixture refactor, receiver task spec updated to as-built.
BobDickinson Feb 17, 2026
6329b5c
Cleanup up AppRenderer tests (act stderr message in test results).
BobDickinson Feb 17, 2026
bf86647
Fixed main start script to be backward compatible with old start scri…
BobDickinson Feb 18, 2026
b924302
Fixed linter errors
BobDickinson Feb 18, 2026
0285114
FIxed playwright tests against web app
BobDickinson Feb 19, 2026
1274f4c
Docs updates
BobDickinson Feb 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
9 changes: 4 additions & 5 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,10 +7,9 @@ node_modules
npm-debug.log

# Build artifacts
client/dist
client/build
server/dist
server/build
web/dist
cli/build
tui/build

# Environment variables
.env
Expand All @@ -32,4 +31,4 @@ coverage

# Docker
Dockerfile
.dockerignore
.dockerignore
7 changes: 6 additions & 1 deletion .github/workflows/cli_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,13 @@ jobs:
cd ..
npm ci --ignore-scripts

- name: Build core package
working-directory: .
run: npm run build-core

- name: Build CLI
run: npm run build
working-directory: .
run: npm run build-cli

- name: Run tests
run: npm test
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/e2e_tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,17 @@ jobs:
with:
name: playwright-report
path: |
client/playwright-report/
client/test-results/
client/results.json
web/playwright-report/
web/test-results/
web/results.json
retention-days: 2

- name: Publish Playwright Test Summary
uses: daun/playwright-report-summary@v3
if: steps.playwright-tests.conclusion != 'skipped'
with:
create-comment: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
report-file: client/results.json
report-file: web/results.json
comment-title: "🎭 Playwright E2E Test Results"
job-summary: true
icon-style: "emojis"
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -30,11 +30,11 @@ jobs:
run: npm run check-version

- name: Check linting
working-directory: ./client
working-directory: ./web
run: npm run lint

- name: Run client tests
working-directory: ./client
- name: Run web tests
working-directory: ./web
run: npm test

- run: npm run build
Expand Down
27 changes: 18 additions & 9 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,19 +3,28 @@
.idea
node_modules/
*-workspace/
server/build
client/dist
client/tsconfig.app.tsbuildinfo
client/tsconfig.node.tsbuildinfo
web/tsconfig.app.tsbuildinfo
web/tsconfig.node.tsbuildinfo
web/tsconfig.jest.tsbuildinfo
core/build
cli/build
tui/build
test-output
tool-test-output
metadata-test-output
# symlinked by `npm run link:sdk`:
sdk
client/playwright-report/
client/results.json
client/test-results/
client/e2e/test-results/
mcp.json
web/playwright-report/
web/results.json
web/test-results/
web/e2e/test-results/
# Only ignore mcp.json at repo root (test configs in test/ are committed)
/mcp.json
.claude/settings.local.json

# Environment variables
.env
.env.local
.env.development
.env.test
.env.production
5 changes: 4 additions & 1 deletion .prettierignore
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
packages
server/build
core/build
web/dist
cli/build
tui/build
CODE_OF_CONDUCT.md
SECURITY.md
mcp.json
Expand Down
12 changes: 6 additions & 6 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,10 @@
## Build Commands

- Build all: `npm run build`
- Build client: `npm run build-client`
- Build server: `npm run build-server`
- Build web: `npm run build-web`
- Development mode: `npm run dev` (use `npm run dev:windows` on Windows)
- Format code: `npm run prettier-fix`
- Client lint: `cd client && npm run lint`
- Web lint: `cd web && npm run lint`

## Code Style Guidelines

Expand All @@ -23,13 +22,14 @@
- kebab-case for file names
- Use async/await for asynchronous operations
- Implement proper error handling with try/catch blocks
- Use Tailwind CSS for styling in the client
- Use Tailwind CSS for styling in the web app
- Keep components small and focused on a single responsibility

## Project Organization

The project is organized as a monorepo with workspaces:

- `client/`: React frontend with Vite, TypeScript and Tailwind
- `server/`: Express backend with TypeScript
- `web/`: Web application (Vite, TypeScript, Tailwind)
- `core/`: Core shared code used by web, CLI, and TUI
- `cli/`: Command-line interface for testing and invoking MCP server methods directly
- `tui/`: Terminal user interface
28 changes: 13 additions & 15 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,10 @@ WORKDIR /app
# Copy package files for installation
COPY package*.json ./
COPY .npmrc ./
COPY client/package*.json ./client/
COPY server/package*.json ./server/
COPY web/package*.json ./web/
COPY core/package*.json ./core/
COPY cli/package*.json ./cli/
COPY tui/package*.json ./tui/

# Install dependencies
RUN npm ci --ignore-scripts
Expand All @@ -28,25 +29,22 @@ WORKDIR /app
# Copy package files for production
COPY package*.json ./
COPY .npmrc ./
COPY client/package*.json ./client/
COPY server/package*.json ./server/
COPY web/package*.json ./web/
COPY core/package*.json ./core/
COPY cli/package*.json ./cli/
COPY tui/package*.json ./tui/

# Install only production dependencies
RUN npm ci --omit=dev --ignore-scripts

# Copy built files from builder stage
COPY --from=builder /app/client/dist ./client/dist
COPY --from=builder /app/client/bin ./client/bin
COPY --from=builder /app/server/build ./server/build
COPY --from=builder /app/web/dist ./web/dist
COPY --from=builder /app/web/bin ./web/bin
COPY --from=builder /app/cli/build ./cli/build

# Set default port values as environment variables
ENV CLIENT_PORT=6274
ENV SERVER_PORT=6277
# Set default port
ENV PORT=6274
EXPOSE ${PORT}

# Document which ports the application uses internally
EXPOSE ${CLIENT_PORT} ${SERVER_PORT}

# Use ENTRYPOINT with CMD for arguments
ENTRYPOINT ["npm", "start"]
# Run web app
CMD ["node", "web/bin/start.js"]
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,8 @@ The inspector runs both an MCP Inspector (MCPI) client UI (default port 6274) an
CLIENT_PORT=8080 SERVER_PORT=9000 npx @modelcontextprotocol/inspector node build/index.js
```

**Environment variables:** The client UI port is set with `CLIENT_PORT`. The sandbox (MCP apps) port prefers `MCP_SANDBOX_PORT`; `SERVER_PORT` is accepted for backward compatibility. If neither is set, a dynamic port is used.

For more details on ways to use the inspector, see the [Inspector section of the MCP docs site](https://modelcontextprotocol.io/docs/tools/inspector). For help with debugging, see the [Debugging guide](https://modelcontextprotocol.io/docs/tools/debugging).

### Servers File Export
Expand Down Expand Up @@ -182,7 +184,7 @@ The MCP Inspector proxy server requires authentication by default. When starting
🔑 Session token: 3a1c267fad21f7150b7d624c160b7f09b0b8c4f623c7107bbf13378f051538d4

🔗 Open inspector with token pre-filled:
http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=3a1c267fad21f7150b7d624c160b7f09b0b8c4f623c7107bbf13378f051538d4
http://localhost:6274/?MCP_INSPECTOR_API_TOKEN=3a1c267fad21f7150b7d624c160b7f09b0b8c4f623c7107bbf13378f051538d4
```

This token must be included as a Bearer token in the Authorization header for all requests to the server. The inspector will automatically open your browser with the token pre-filled in the URL.
Expand Down Expand Up @@ -213,10 +215,10 @@ Read more about the risks of this vulnerability on Oligo's blog: [Critical RCE V

---

You can also set the token via the `MCP_PROXY_AUTH_TOKEN` environment variable when starting the server:
You can also set the token via the `MCP_INSPECTOR_API_TOKEN` environment variable when starting the server (`MCP_PROXY_AUTH_TOKEN` is accepted for backward compatibility):

```bash
MCP_PROXY_AUTH_TOKEN=$(openssl rand -hex 32) npm start
MCP_INSPECTOR_API_TOKEN=$(openssl rand -hex 32) npm start
```

#### Local-only Binding
Expand Down
47 changes: 24 additions & 23 deletions cli/__tests__/cli.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,12 @@ import {
createInvalidConfig,
deleteConfigFile,
} from "./helpers/fixtures.js";
import { getTestMcpServerCommand } from "./helpers/test-server-stdio.js";
import { createTestServerHttp } from "./helpers/test-server-http.js";
import { getTestMcpServerCommand } from "../../core/test/test-server-stdio.js";
import { createTestServerHttp } from "../../core/test/test-server-http.js";
import {
createEchoTool,
createTestServerInfo,
} from "./helpers/test-fixtures.js";
} from "../../core/test/test-server-fixtures.js";

describe("CLI Tests", () => {
describe("Basic CLI Mode", () => {
Expand Down Expand Up @@ -59,6 +59,17 @@ describe("CLI Tests", () => {

expectCliFailure(result);
});

// Temporary: remove .skip to verify that expectCliSuccess shows CLI stdout/stderr when the CLI fails
it.skip("TEMP: expect success when CLI fails (validates error output in assertion)", async () => {
const result = await runCli([
NO_SERVER_SENTINEL,
"--cli",
"--method",
"tools/list",
]);
expectCliSuccess(result); // will fail; failure message should include result.stdout and result.stderr
});
});

describe("Environment Variables", () => {
Expand Down Expand Up @@ -370,11 +381,9 @@ describe("CLI Tests", () => {
});

try {
const port = await server.start("http");
const serverUrl = `${server.getUrl()}/mcp`;

const port = await server.start();
const result = await runCli([
serverUrl,
server.url,
"--cli",
"--method",
"logging/setLevel",
Expand Down Expand Up @@ -741,11 +750,9 @@ describe("CLI Tests", () => {
});

try {
await server.start("http");
const serverUrl = `${server.getUrl()}/mcp`;

await server.start();
const result = await runCli([
serverUrl,
server.url,
"--cli",
"--method",
"tools/list",
Expand All @@ -768,11 +775,9 @@ describe("CLI Tests", () => {
});

try {
await server.start("http");
const serverUrl = `${server.getUrl()}/mcp`;

await server.start();
const result = await runCli([
serverUrl,
server.url,
"--transport",
"http",
"--cli",
Expand All @@ -797,11 +802,9 @@ describe("CLI Tests", () => {
});

try {
await server.start("http");
const serverUrl = `${server.getUrl()}/mcp`;

await server.start();
const result = await runCli([
serverUrl,
server.url,
"--transport",
"http",
"--cli",
Expand All @@ -826,11 +829,9 @@ describe("CLI Tests", () => {
});

try {
await server.start("http");
const serverUrl = `${server.getUrl()}/mcp`;

await server.start();
const result = await runCli([
serverUrl,
server.url,
"--transport",
"sse",
"--cli",
Expand Down
Loading