SDK / infra · #78 trending MCP repo · ↗ +75 stars this week

Python SDK

modelcontextprotocol/python-sdk

The official Python SDK for Model Context Protocol servers and clients

Stars
25k
This week
+75
Forks
4.1k
Open issues
395
Skills inside
1
Star trend · last 17 days+162 ★
Oct 21, 2026: 24,632 starsOct 22, 2026: 24,644 starsOct 23, 2026: 24,656 starsOct 24, 2026: 24,662 starsOct 25, 2026: 24,666 starsOct 26, 2026: 24,678 starsOct 27, 2026: 24,688 starsOct 28, 2026: 24,698 starsOct 29, 2026: 24,708 starsOct 30, 2026: 24,711 starsOct 31, 2026: 24,719 starsNov 1, 2026: 24,728 starsNov 2, 2026: 24,739 starsNov 3, 2026: 24,747 starsNov 4, 2026: 24,760 starsNov 5, 2026: 24,774 starsNov 6, 2026: 24,782 starsNov 7, 2026: 24,794 stars

Documentation

README

View on GitHub ↗

MCP Python SDK

Python implementation of the Model Context Protocol (MCP)

PyPI MIT licensed Python Version Documentation Protocol Specification

Documentation

The documentation lives at https://py.sdk.modelcontextprotocol.io/.

It has a Get started guide, What's new in v2, the API reference, and the migration guide.

What is MCP?

The Model Context Protocol lets you build servers that expose data and functionality to LLM applications in a secure, standardized way. Think of it like a web API, but designed for LLM interactions. With this SDK you can:

  • Build MCP servers that expose tools, resources, and prompts to any MCP host
  • Build MCP clients that connect to any MCP server
  • Speak every standard transport: stdio, Streamable HTTP, and SSE

Requirements

Python 3.11+.

Installation

uv add "mcp[cli]"      # or: pip install "mcp[cli]"

The cli extra adds the mcp command-line tool (mcp dev, mcp run, mcp install) on top of the SDK; install plain mcp if you don't need it. For one-off commands, uv run --with "mcp[cli]" mcp ... works without a project.

A server in 15 lines

Create a server.py:

from mcp.server import MCPServer

mcp = MCPServer("Demo")


@mcp.tool()
def add(a: int, b: int) -> int:
    """Add two numbers."""
    return a + b


@mcp.resource("greeting://{name}")
def greeting(name: str) -> str:
    """Greet someone by name."""
    return f"Hello, {name}!"

Full example: docs_src/index/tutorial001.py

That's a complete MCP server: one tool, one templated resource. Open it in the MCP Inspector:

uv run mcp dev server.py

Call add with a=1, b=2 and you get 3 back.

Notice what you did not write: no JSON Schema (a: int, b: int is the schema), no request parsing, no validation code, no protocol handling. Two type-hinted Python functions and a docstring.

Get started takes it from here.

A client in 10 lines

The same package is a full MCP client. Serve server.py over HTTP:

uv run mcp run server.py --transport streamable-http

then point a Client at it:

import asyncio

from mcp import Client


async def main() -> None:
    async with Client("http://localhost:8000/mcp") as client:
        result = await client.call_tool("add", {"a": 1, "b": 2})
        print(result.structured_content)  # {'result': 3}


asyncio.run(main())

A URL means Streamable HTTP, the transport you deploy. Client can also launch a local server as a stdio subprocess or take any custom transport; Clients has the rest.

Contributing

We are passionate about supporting contributors of all levels of experience and would love to see you get involved in the project. See the contributing guide to get started.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Releases

Recent versions

All releases ↗
  1. v2.3.0
  2. v2.2.0
  3. v1.30.0
  4. v2.0.1
  5. v2.1.1
  6. v2.1.0