Skip to content

How to run MCP inspector with TypeScript SDK servers? #129

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
atroyn opened this issue Jan 21, 2025 · 4 comments · Fixed by #132
Closed

How to run MCP inspector with TypeScript SDK servers? #129

atroyn opened this issue Jan 21, 2025 · 4 comments · Fixed by #132
Assignees
Labels
documentation Improvements or additions to documentation

Comments

@atroyn
Copy link

atroyn commented Jan 21, 2025

I have the quickstart index.ts :

import { McpServer, ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";

const server = new McpServer({
  name: "Echo",
  version: "1.0.0"
});

server.resource(
  "echo",
  new ResourceTemplate("echo://{message}", { list: undefined }),
  async (uri, { message }) => ({
    contents: [{
      uri: uri.href,
      text: `Resource echo: ${message}`
    }]
  })
);

server.tool(
  "echo",
  { message: z.string() },
  async ({ message }) => ({
    content: [{ type: "text", text: `Tool echo: ${message}` }]
  })
);

Dependencies installed.

I attempt to invoke the MCP inspector (https://modelcontextprotocol.io/docs/tools/inspector) to make sure my server is working as expected.

I run npx @modelcontextprotocol/inspector npm run -s start (s to suppress the startup logging)

The inspector starts up but not in a connected state:

Image

When I hit connect I get no UI change, and the following on the terminal:

New SSE connection
Query parameters: {
  transportType: 'stdio',
  command: 'npm',
  args: 'run -s start',
  env: '{"HOME":"/Users/antontroynikov","LOGNAME":"antontroynikov","PATH":"/Users/antontroynikov/.npm/_npx/5a9d879542beca3a/node_modules/.bin:/Users/antontroynikov/Projects/CascadeProjects/panopticon/mcp/node_modules/.bin:/Users/antontroynikov/Projects/CascadeProjects/panopticon/node_modules/.bin:/Users/antontroynikov/Projects/CascadeProjects/node_modules/.bin:/Users/antontroynikov/Projects/node_modules/.bin:/Users/antontroynikov/node_modules/.bin:/Users/node_modules/.bin:/node_modules/.bin:/Users/antontroynikov/.nvm/versions/node/v20.18.1/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/Users/antontroynikov/.nvm/versions/node/v20.18.1/bin:/Users/antontroynikov/.nvm/versions/node/v16.15.0/bin:/Users/antontroynikov/.codeium/windsurf/bin:/Users/antontroynikov/.opam/default/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/share/dotnet:/usr/local/go/bin:/Users/antontroynikov/.nvm/versions/node/v16.15.0/bin:/Users/antontroynikov/.codeium/windsurf/bin:/Users/antontroynikov/.opam/default/bin:/Users/antontroynikov/miniforge3/condabin:/Users/antontroynikov/.cargo/bin:/Users/antontroynikov/.orbstack/bin:/Users/antontroynikov/.orbstack/bin","SHELL":"/bin/zsh","TERM":"xterm-256color","USER":"antontroynikov"}'
}
Stdio transport: command=/Users/antontroynikov/.nvm/versions/node/v20.18.1/lib/node_modules/npm/bin/npm-cli.js, args=run,-s,start, env={"HOME":"/Users/antontroynikov","LOGNAME":"antontroynikov","PATH":"/Users/antontroynikov/.npm/_npx/5a9d879542beca3a/node_modules/.bin:/Users/antontroynikov/Projects/CascadeProjects/panopticon/mcp/node_modules/.bin:/Users/antontroynikov/Projects/CascadeProjects/panopticon/node_modules/.bin:/Users/antontroynikov/Projects/CascadeProjects/node_modules/.bin:/Users/antontroynikov/Projects/node_modules/.bin:/Users/antontroynikov/node_modules/.bin:/Users/node_modules/.bin:/node_modules/.bin:/Users/antontroynikov/.nvm/versions/node/v20.18.1/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/Users/antontroynikov/.nvm/versions/node/v20.18.1/bin:/Users/antontroynikov/.nvm/versions/node/v16.15.0/bin:/Users/antontroynikov/.codeium/windsurf/bin:/Users/antontroynikov/.opam/default/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/share/dotnet:/usr/local/go/bin:/Users/antontroynikov/.nvm/versions/node/v16.15.0/bin:/Users/antontroynikov/.codeium/windsurf/bin:/Users/antontroynikov/.opam/default/bin:/Users/antontroynikov/miniforge3/condabin:/Users/antontroynikov/.cargo/bin:/Users/antontroynikov/.orbstack/bin:/Users/antontroynikov/.orbstack/bin","SHELL":"/bin/zsh","TERM":"xterm-256color","USER":"antontroynikov"}
Spawned stdio transport
Connected MCP client to backing server transport
Created web app transport
Created web app transport
Set up MCP proxy
Received message for sessionId ae63680c-3a7f-4b03-8ffb-ac6f1b93e341
New SSE connection
Query parameters: {
  transportType: 'stdio',
  command: 'npm',
  args: 'run -s start',
  env: '{"HOME":"/Users/antontroynikov","LOGNAME":"antontroynikov","PATH":"/Users/antontroynikov/.npm/_npx/5a9d879542beca3a/node_modules/.bin:/Users/antontroynikov/Projects/CascadeProjects/panopticon/mcp/node_modules/.bin:/Users/antontroynikov/Projects/CascadeProjects/panopticon/node_modules/.bin:/Users/antontroynikov/Projects/CascadeProjects/node_modules/.bin:/Users/antontroynikov/Projects/node_modules/.bin:/Users/antontroynikov/node_modules/.bin:/Users/node_modules/.bin:/node_modules/.bin:/Users/antontroynikov/.nvm/versions/node/v20.18.1/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/Users/antontroynikov/.nvm/versions/node/v20.18.1/bin:/Users/antontroynikov/.nvm/versions/node/v16.15.0/bin:/Users/antontroynikov/.codeium/windsurf/bin:/Users/antontroynikov/.opam/default/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/share/dotnet:/usr/local/go/bin:/Users/antontroynikov/.nvm/versions/node/v16.15.0/bin:/Users/antontroynikov/.codeium/windsurf/bin:/Users/antontroynikov/.opam/default/bin:/Users/antontroynikov/miniforge3/condabin:/Users/antontroynikov/.cargo/bin:/Users/antontroynikov/.orbstack/bin:/Users/antontroynikov/.orbstack/bin","SHELL":"/bin/zsh","TERM":"xterm-256color","USER":"antontroynikov"}'
}
Stdio transport: command=/Users/antontroynikov/.nvm/versions/node/v20.18.1/lib/node_modules/npm/bin/npm-cli.js, args=run,-s,start, env={"HOME":"/Users/antontroynikov","LOGNAME":"antontroynikov","PATH":"/Users/antontroynikov/.npm/_npx/5a9d879542beca3a/node_modules/.bin:/Users/antontroynikov/Projects/CascadeProjects/panopticon/mcp/node_modules/.bin:/Users/antontroynikov/Projects/CascadeProjects/panopticon/node_modules/.bin:/Users/antontroynikov/Projects/CascadeProjects/node_modules/.bin:/Users/antontroynikov/Projects/node_modules/.bin:/Users/antontroynikov/node_modules/.bin:/Users/node_modules/.bin:/node_modules/.bin:/Users/antontroynikov/.nvm/versions/node/v20.18.1/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin:/Users/antontroynikov/.nvm/versions/node/v20.18.1/bin:/Users/antontroynikov/.nvm/versions/node/v16.15.0/bin:/Users/antontroynikov/.codeium/windsurf/bin:/Users/antontroynikov/.opam/default/bin:/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin:/usr/local/share/dotnet:/usr/local/go/bin:/Users/antontroynikov/.nvm/versions/node/v16.15.0/bin:/Users/antontroynikov/.codeium/windsurf/bin:/Users/antontroynikov/.opam/default/bin:/Users/antontroynikov/miniforge3/condabin:/Users/antontroynikov/.cargo/bin:/Users/antontroynikov/.orbstack/bin:/Users/antontroynikov/.orbstack/bin","SHELL":"/bin/zsh","TERM":"xterm-256color","USER":"antontroynikov"}
Spawned stdio transport
Connected MCP client to backing server transport
Created web app transport
Created web app transport
Set up MCP proxy
New SSE connection

This then appears to loop. How do I use this tool with the TypeScript server to make sure my server is working correctly?

@atroyn
Copy link
Author

atroyn commented Jan 21, 2025

As a new user of the SDK, this has been a pretty frustrating experience so far.

@atroyn atroyn changed the title How to run MCP inspector? How to run MCP inspector with TypeScript SDK servers? Jan 21, 2025
@atroyn
Copy link
Author

atroyn commented Jan 21, 2025

these sections of the README appear to be missing:

Running Your Server
Development Mode
Claude Desktop Integration
Direct Execution

@atroyn
Copy link
Author

atroyn commented Jan 21, 2025

Spent time digging around, it seems the right way to do this is to add

import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";

...

const transport = new StdioServerTransport();
await server.connect(transport);

So that the server actually connects to a transport that the client (in this case, MCP inspector) can access.

Strongly suggest adding this to the examples to make this guide much more self-contained.

@jspahrsummers
Copy link
Member

Sorry, this README has been in flux since the API changes. Agree with your points! Will land some basic changes to make the end-to-end setup more obvious, but need to follow up with even easier tooling too.

@jspahrsummers jspahrsummers self-assigned this Jan 22, 2025
@jspahrsummers jspahrsummers added the documentation Improvements or additions to documentation label Jan 22, 2025
jasonkneen added a commit to jasonkneen/typescript-sdk that referenced this issue Jan 22, 2025
Fixes modelcontextprotocol#129

Update README.md to include instructions for running the server with the MCP inspector and update the quickstart example.

* Add instructions for running the server with the MCP inspector.
* Update the quickstart example to include the `StdioServerTransport` connection.
* Add sections for Development Mode, Claude Desktop Integration, and Direct Execution.

---

For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/modelcontextprotocol/typescript-sdk/issues/129?shareId=XXXX-XXXX-XXXX-XXXX).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation
Projects
None yet
2 participants