A minimal single-file Python MCP Server SDK
Project description
mcpatom
A minimal Python MCP Server SDK.
From Greek atomos: indivisible. The whole library is a single file,
mcpatom.py, consumable two ways:
- Copy the file into your project. No dependency, no lockfile entry.
- Install the package:
pip install mcpatom- the file itself is the installed module.
Scope
- Tools, resources, and prompts, over stdio or streamable HTTP.
- Protocol versions
2025-06-18and2025-11-25. - stdlib-only Python >= 3.10, no dependencies, ever.
Everything else (sampling, elicitation, subscriptions, auth, etc.) is deliberately omitted.
Usage
from mcpatom import Server
srv = Server("my-server")
@srv.tool
def greet(name: str, excited: bool = False) -> str:
"""Return a greeting for the given name."""
return f"Hello, {name}{'!' if excited else '.'}"
@srv.resource("data://motd")
def motd() -> str:
"""Message of the day."""
return "Be indivisible."
@srv.prompt
def haiku(topic: str) -> str:
"""Ask for a haiku."""
return f"Write a haiku about {topic}."
srv.serve_stdio()
For streamable HTTP instead of stdio, end with:
srv.serve_http(8388) # http://127.0.0.1:8388/mcp
serve_http binds to loopback and rejects DNS-rebinding requests;
host="0.0.0.0" widens the bind and switches those checks off.
More runnable servers in examples/.
Schemas and return types
Each function's name, docstring, and annotations become the tool's name,
description, and schema; @srv.tool(name=, description=, input_schema=, output_schema=) override generation, and extra= merges raw fields into
the listing. Server() also takes version= and instructions=.
Parameters may be annotated with any of these:
strintfloatboollist[X](or barelist)Literal[...]TypedDictX | Noneof any of the above
Annotated[X, "text"] adds a description the model sees. A parameter's
default is published in the schema when it is JSON-representable; a None
default is omitted unless null is a selectable Literal value.
A tool may return:
str- one text blockdict- JSON text plusstructuredContent; aTypedDictreturn annotation publishes the matchingoutputSchemaImage(data, mime_type)/Audio(data, mime_type)- one binary block (raw bytes in, base64 on the wire)- a tuple - one block per item:
strtext,Image/Audiomedia, a dict whose"type"names a spec block type verbatim (e.g.resource_link) None- empty content; any other JSON value - text
Raising is the error API: any exception becomes isError content the
model can read and correct.
Resources return str (text) or bytes (base64 blob).
Prompts take only str arguments and return a str user message, or a
list of message dicts passed through verbatim.
Wiring it up
claude mcp add my-server -- /abs/path/.venv/bin/python /abs/path/server.py
or in any mcpServers config:
{"mcpServers": {"my-server": {"command": "/abs/path/.venv/bin/python", "args": ["/abs/path/server.py"]}}}
Smoke test without a client:
echo '{"jsonrpc":"2.0","id":1,"method":"ping"}' | python server.py
# {"jsonrpc":"2.0","id":1,"result":{}}
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file mcpatom-0.2.1.tar.gz.
File metadata
- Download URL: mcpatom-0.2.1.tar.gz
- Upload date:
- Size: 28.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e1181533760f6fce06602b871de6d6541745b274df3a675459fa24a391d50bb5
|
|
| MD5 |
d174a8d9fb8efad427358ff59b73ed2e
|
|
| BLAKE2b-256 |
0621e613b036d588ad455a58e3ecc385389022cfc4da3cdd4536a34e2547bdf3
|
File details
Details for the file mcpatom-0.2.1-py3-none-any.whl.
File metadata
- Download URL: mcpatom-0.2.1-py3-none-any.whl
- Upload date:
- Size: 10.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: uv/0.11.29 {"installer":{"name":"uv","version":"0.11.29","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8eea2fec53193c59a71b989253ac6e48ce67f6c0263405059cf1a30b2c8ea7e3
|
|
| MD5 |
78ba2e9cc682e3a277d1549bd785972d
|
|
| BLAKE2b-256 |
22186c78cbc030c5e0e8a1aae246359800f31e9965df583bb400a9eecc333bcf
|