The official Python SDK at modelcontextprotocol/python-sdk ships two layers: a low-level mcp.server.lowlevel for full control, and FastMCP for the 80% case. Most people start (and stay) on FastMCP — its decorator-based API converts type annotations into JSON Schema and docstrings into descriptions, which means a working server is about 20 lines of Python.
Install with pip install mcp (or uv add mcp). Define an app, attach tools/resources/prompts via decorators, run it. The SDK handles JSON-RPC framing, capability negotiation, error envelopes, and transport selection. By the time you are done with this lesson you will have a server you can connect to from Claude Desktop and watch the model call.