Skip to main content

No project description provided

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-18 and 2025-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:

  • str
  • int
  • float
  • bool
  • list[X] (or bare list)
  • Literal[...]
  • TypedDict
  • X | None of any of the above

Annotated[X, "text"] adds a description the model sees.

A tool may return:

  • str - one text block
  • dict - JSON text plus structuredContent; a TypedDict return annotation publishes the matching outputSchema
  • Image(data, mime_type) / Audio(data, mime_type) - one binary block (raw bytes in, base64 on the wire)
  • a tuple - one block per item: str text, Image/Audio media, 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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcpatom-0.1.0.tar.gz (27.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcpatom-0.1.0-py3-none-any.whl (9.6 kB view details)

Uploaded Python 3

File details

Details for the file mcpatom-0.1.0.tar.gz.

File metadata

  • Download URL: mcpatom-0.1.0.tar.gz
  • Upload date:
  • Size: 27.3 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

Hashes for mcpatom-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a1d7320745272368226498d44b39ba7af248fdb383bf23ff18c27d06519c9147
MD5 20492a0339c9ea1dca360d246d441398
BLAKE2b-256 e8a970c9c83d0188cc346f277ba7a40f17983a1cd6b471f025308dd27372f6ad

See more details on using hashes here.

File details

Details for the file mcpatom-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: mcpatom-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 9.6 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

Hashes for mcpatom-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 7456085f9ad9148b11e7ebbe87ade0c7aa02ad8545b60acfb06ba0af58564dde
MD5 f4c8f302bbd2dd9d41c7338c2a21f323
BLAKE2b-256 2bfdfa8870249388b19326626c713860d9a13e42790c9b42a39de4657e6437e0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page