npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@modelcontextprotocol/codemod

v2.0.0

Published

Codemod to migrate MCP TypeScript SDK code from v1 to v2

Readme

@modelcontextprotocol/codemod

Codemods for migrating MCP TypeScript SDK code between major versions.

Usage

npx @modelcontextprotocol/codemod@latest v1-to-v2 .

# or a single source file (manifest changes are reported, not applied)
npx @modelcontextprotocol/codemod@latest v1-to-v2 src/server.ts

The codemod rewrites TypeScript and JavaScript source files (.ts/.tsx/.mts/.cts/.js/.jsx/.mjs/.cjs) in place. Run it on a clean working tree so you can review the diff.

What v1-to-v2 covers

The mechanical rename mappings are the source of truth — see src/migrations/v1-to-v2/mappings/:

Transforms in src/migrations/v1-to-v2/transforms/ also rewrite .tool()registerTool (wrapping inputSchema / outputSchema / argsSchema / uriSchema raw shapes with z.object()), drop the result-schema argument from client.request() / client.callTool() for spec methods, route spec *Schema imports to @modelcontextprotocol/core, rename StreamableHTTPErrorSdkHttpError / IsomorphicHeadersHeaders, rewrite SchemaInput<T>StandardSchemaWithJSON.InferInput<T>, route ErrorCode.{RequestTimeout,ConnectionClosed} to SdkErrorCode (rewriting an all-SDK condition's instanceof ProtocolError guard to SdkError, and marking guards that mix the two enums), add import { z } from 'zod' when a wrap needs it, rewrite vi.mock / jest.mock / dynamic import() paths, invert optional completable nesting (completable(schema.optional(), cb) becomes completable(schema, cb).optional()), and rewrite Protocol / mergeCapabilities imports from shared/protocol.js to the client or server package root.

@mcp-codemod-error markers

When the codemod recognizes a v1 pattern but cannot safely rewrite it (ambiguous context, removed API with no mechanical replacement, signature change requiring judgment), it leaves the code unchanged and inserts a comment:

/* @mcp-codemod-error WebSocketClientTransport removed in v2. Use StreamableHTTPClientTransport or StdioClientTransport. */

After running the codemod, find every site that needs attention:

grep -rn '@mcp-codemod-error' .

What it does NOT cover

CJS→ESM / Node 20 pre-flight, header read rewrites (ctx.http?.req?.headers bracket access → .get(); sending plain-record headers keeps working), OAuth error-class consolidation (instanceof InvalidGrantErrorOAuthError + OAuthErrorCode), per-scenario SdkErrorCode branch selection, ctx.mcpReq.send() schema-arg drop, and behavioral adaptation are manual — see the migration guide for what to do after the codemod runs.

The codemod handles the v1→v2 SDK surface upgrade only. Adopting the 2026-07-28 protocol revision (createMcpHandler, multi-round-trip requests, versionNegotiation) is architectural and not codemod-automatable — see docs/migration/support-2026-07-28.md.