Mirror of https://github.com/modelcontextprotocol/typescript-sdk — The official TypeScript SDK for Model Context Protocol servers and clients
  • TypeScript 97.3%
  • JavaScript 2.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Sai Asish Y 3924de99df
fix(client/auth): propagate saveTokens errors after refresh (#2053)
Signed-off-by: SAY-5 <say.apm35@gmail.com>
Signed-off-by: Sai Asish Y <say.apm35@gmail.com>
Co-authored-by: Konstantin Konstantinov <KKonstantinov@users.noreply.github.com>
Co-authored-by: Konstantin Konstantinov <konstantin@mach5technology.com>
2026-08-18 22:09:20 +03:00
.changeset fix(client/auth): propagate saveTokens errors after refresh (#2053) 2026-08-18 22:09:20 +03:00
.github docs: comprehensive GA pass — stable-release wording, released-spec links, install tags (#2566) 2026-07-27 23:32:17 +01:00
common fix(server): validate Content-Type by parsed media type instead of substring match (#2441) 2026-07-06 20:29:58 +01:00
docs fix(client/auth): propagate saveTokens errors after refresh (#2053) 2026-08-18 22:09:20 +03:00
examples docs: client log levels, elicitation completion notification; drive json-schema-2020-12-preservation on the alpha.11 referee (#2686) 2026-08-18 15:56:55 +01:00
packages fix(client/auth): propagate saveTokens errors after refresh (#2053) 2026-08-18 22:09:20 +03:00
scripts fix(scripts): stop the snippet sync walking node_modules and cloned f… (#2664) 2026-08-14 15:03:06 +01:00
test docs: client log levels, elicitation completion notification; drive json-schema-2020-12-preservation on the alpha.11 referee (#2686) 2026-08-18 15:56:55 +01:00
.git-blame-ignore-revs Jerome/fix/dev oauth server required scopes change (#629) 2025-06-17 10:18:58 +01:00
.gitignore docs: rebuild the v2 documentation around a task-based page tree (#2397) 2026-06-30 21:18:42 +01:00
.npmrc remove references to npm, clean up package manager usage in workspaces (#1534) 2026-03-02 12:13:44 +00:00
.prettierignore Implement MCP 2026-07-28 (#2286) 2026-06-26 14:01:10 +01:00
.prettierrc.json Implement MCP 2026-07-28 (#2286) 2026-06-26 14:01:10 +01:00
CLAUDE.md Export Protocol and mergeCapabilities from client/server package roots (#2501) 2026-07-17 14:37:31 +01:00
CODE_OF_CONDUCT.md run prettier (#995) 2025-10-02 18:21:00 +01:00
CONTRIBUTING.md docs: comprehensive GA pass — stable-release wording, released-spec links, install tags (#2566) 2026-07-27 23:32:17 +01:00
DEPENDENCY_POLICY.md docs: add ROADMAP, VERSIONING and DEPENDENCY_POLICY for the v2 line (#2680) 2026-08-18 13:34:31 +01:00
lefthook-local.example.yml v2: Add left-hook pre-push (#1003) 2026-03-25 20:30:47 +00:00
lefthook.yml v2: Add left-hook pre-push (#1003) 2026-03-25 20:30:47 +00:00
LICENSE chore: update licensing to Apache 2.0 for new contributions (#1377) 2026-01-13 23:26:17 +00:00
package.json docs: rebuild the v2 documentation around a task-based page tree (#2397) 2026-06-30 21:18:42 +01:00
pnpm-lock.yaml docs: client log levels, elicitation completion notification; drive json-schema-2020-12-preservation on the alpha.11 referee (#2686) 2026-08-18 15:56:55 +01:00
pnpm-workspace.yaml fix(server): validate Content-Type by parsed media type instead of substring match (#2441) 2026-07-06 20:29:58 +01:00
README.md docs: comprehensive GA pass — stable-release wording, released-spec links, install tags (#2566) 2026-07-27 23:32:17 +01:00
REVIEW.md Implement MCP 2026-07-28 (#2286) 2026-06-26 14:01:10 +01:00
ROADMAP.md docs: add ROADMAP, VERSIONING and DEPENDENCY_POLICY for the v2 line (#2680) 2026-08-18 13:34:31 +01:00
SECURITY.md Update SECURITY.md to use GitHub Security Advisories (#1555) 2026-02-18 23:35:16 -08:00
typedoc.config.mjs docs: replace the typedoc site with VitePress (v2 + v1 reface) (#2395) 2026-06-30 16:03:19 +01:00
VERSIONING.md docs: add ROADMAP, VERSIONING and DEPENDENCY_POLICY for the v2 line (#2680) 2026-08-18 13:34:31 +01:00
vitest.workspace.js [v2] Мonorepo, sdk-client, sdk-server, sdk-core package split (#1279) 2025-12-19 14:19:02 +01:00

MCP TypeScript SDK

Important

This is the main branch — v2 of the SDK (@modelcontextprotocol/server, @modelcontextprotocol/client), implementing the 2026-07-28 MCP spec.

Have feedback? Please open a v2 issue — it is the most useful thing you can do for the SDK right now. The v2 documentation starts with a ten-minute server tutorial.

v2 is the stable release line, released alongside the 2026-07-28 spec. v1.x continues to receive bug fixes and security updates for at least 6 months after v2's release. v1 documentation: ts.sdk.modelcontextprotocol.io · v2: /v2/.

Warning

We're limiting pull requests to 1 per new contributor while v2 settles after the 2026-07-28 spec release.

Issues are the most useful feedback right now — we'll reopen PRs as v2 stabilizes.

NPM Version - Server NPM Version - Client MIT licensed

Table of Contents

Overview

The Model Context Protocol (MCP) allows applications to provide context for LLMs in a standardized way, separating the concerns of providing context from the actual LLM interaction.

This repository contains the TypeScript SDK implementation of the MCP specification. It runs on Node.js, Bun, and Deno, and ships:

  • MCP server libraries (tools/resources/prompts, Streamable HTTP, stdio, auth helpers)
  • MCP client libraries (transports, high-level helpers, OAuth helpers)
  • Optional middleware packages for specific runtimes/frameworks (Express, Fastify, Hono, Node.js HTTP)
  • Runnable examples (under examples/)

Packages

This monorepo publishes split packages:

  • @modelcontextprotocol/server: build MCP servers
  • @modelcontextprotocol/client: build MCP clients

Tool and prompt schemas use Standard Schema — bring Zod v4, Valibot, ArkType, or any compatible library.

Middleware packages (optional)

The SDK also publishes small "middleware" packages under packages/middleware/ that help you wire MCP into a specific runtime or web framework.

They are intentionally thin adapters: they should not introduce new MCP functionality or business logic. See packages/middleware/README.md for details.

  • @modelcontextprotocol/node: Node.js Streamable HTTP transport wrapper for IncomingMessage / ServerResponse
  • @modelcontextprotocol/express: Express helpers (app defaults + Host header validation)
  • @modelcontextprotocol/fastify: Fastify helpers (app defaults + Host header validation)
  • @modelcontextprotocol/hono: Hono helpers (app defaults + JSON body parsing hook + Host header validation)

Installation

Server

npm install @modelcontextprotocol/server
# or
bun add @modelcontextprotocol/server
# or
deno add npm:@modelcontextprotocol/server

Client

npm install @modelcontextprotocol/client
# or
bun add @modelcontextprotocol/client
# or
deno add npm:@modelcontextprotocol/client

Optional middleware packages

The SDK also publishes optional “middleware” packages that help you wire MCP into a specific runtime or web framework (for example Express, Fastify, Hono, or Node.js http).

These packages are intentionally thin adapters and should not introduce additional MCP features or business logic. See packages/middleware/README.md for details.

# Node.js HTTP (IncomingMessage/ServerResponse) Streamable HTTP transport:
npm install @modelcontextprotocol/node

# Express integration:
npm install @modelcontextprotocol/express express

# Fastify integration:
npm install @modelcontextprotocol/fastify fastify

# Hono integration:
npm install @modelcontextprotocol/hono hono

Getting Started

Here is what an MCP server looks like. This minimal example exposes a single greet tool over stdio:

import { McpServer } from '@modelcontextprotocol/server';
import { StdioServerTransport } from '@modelcontextprotocol/server/stdio';
import * as z from 'zod/v4';

const server = new McpServer({ name: 'greeting-server', version: '1.0.0' });

server.registerTool(
    'greet',
    {
        description: 'Greet someone by name',
        inputSchema: z.object({ name: z.string() })
    },
    async ({ name }) => ({
        content: [{ type: 'text', text: `Hello, ${name}!` }]
    })
);

async function main() {
    const transport = new StdioServerTransport();
    await server.connect(transport);
}

main();

Ready to build something real? Follow the step-by-step tutorials:

For runnable, end-to-end examples beyond the tutorials, see:

  • examples/README.md — runnable, self-verifying client/server example pairs (one story per directory)

Documentation

Building docs locally

To work on the documentation site locally:

pnpm docs:api      # Generate the API reference markdown (output: docs/api/)
pnpm docs:dev      # Start the VitePress dev server for the V2 site
pnpm docs:build    # Build the V2 site (output: docs/.vitepress/dist/)
pnpm docs:multi    # Build the combined V1 + V2 site (output: tmp/docs-combined/)

The docs:multi script builds the V2 site from the current checkout, checks out the v1.x branch via a git worktree to build the V1 site, and produces a combined site with V1 docs at the root and V2 docs under /v2/.

v1 (legacy) documentation and fixes

If you are using the v1 generation of the SDK, the v1 API documentation is available at https://ts.sdk.modelcontextprotocol.io/. The v1 source code and any v1-specific fixes live on the long-lived v1.x branch. V2 API docs are at /v2/.

Contributing

Issues and pull requests are welcome on GitHub at https://github.com/modelcontextprotocol/typescript-sdk.

License

This project is licensed under the Apache License 2.0 for new contributions, with existing code under MIT. See the LICENSE file for details.