Skip to main content

Python SDK for the MACP Rust runtime

Project description

macp-sdk-python

Python SDK for the MACP Rust runtime.

What this package does

  • Connects to the Rust runtime over gRPC
  • Provides typed session helpers for all 5 standard coordination modes
  • Maintains in-process projections for local state tracking
  • Supports envelope builders, retry helpers, and structured logging

Important runtime boundary

This SDK calls the Rust runtime. The runtime does not call into this Python package. If you need runtime-driven business logic, run a Python agent/orchestrator as a separate process and let it communicate with the runtime over MACP transport.

Install

pip install macp-sdk-python

Quick start

Production (Bearer + TLS)

from macp_sdk import AuthConfig, DecisionSession, MacpClient

# TLS is the default; Bearer + expected_sender binds the session to this identity.
client = MacpClient(
    target="runtime.example.com:50051",
    auth=AuthConfig.for_bearer("tok-coord", expected_sender="coordinator"),
)

Local dev (runtime started with MACP_ALLOW_INSECURE=1)

client = MacpClient(
    target="127.0.0.1:50051",
    allow_insecure=True,                                # dev only
    auth=AuthConfig.for_dev_agent("coordinator"),
)

Driving a decision

session = DecisionSession(client)
session.start(
    intent="pick a deployment plan",
    participants=["coordinator", "alice", "bob"],
    ttl_ms=60_000,
)
session.propose("p1", "deploy v2.1", rationale="tests passed")
session.evaluate(
    "p1", "approve", confidence=0.94, reason="low risk",
    sender="alice", auth=AuthConfig.for_dev_agent("alice"),
)
session.vote(
    "p1", "approve", reason="ship it",
    sender="bob", auth=AuthConfig.for_dev_agent("bob"),
)

winner = session.decision_projection.majority_winner()
if winner and not session.decision_projection.has_blocking_objection(winner):
    session.commit(
        action="deployment.approved",
        authority_scope="release-management",
        reason=f"winner={winner}",
    )

Supported modes

Mode Session Helper Projection Example
Decision DecisionSession DecisionProjection examples/decision_smoke.py
Proposal ProposalSession ProposalProjection examples/proposal_negotiation.py
Task TaskSession TaskProjection examples/task_delegation.py
Handoff HandoffSession HandoffProjection examples/handoff_escalation.py
Quorum QuorumSession QuorumProjection examples/quorum_approval.py

Development

# Setup
make setup              # pip install -e ".[dev,docs]"

# Quality
make lint               # ruff check
make fmt                # ruff format
make typecheck          # mypy strict
make test               # unit tests
make test-all           # lint + typecheck + all tests
make coverage           # coverage report

# Build
make build              # sdist + wheel

# Proto definitions (provided by macp-proto package)
make dev-link-protos    # link local proto package for development

For local development against the runtime:

export MACP_ALLOW_INSECURE=1
cargo run   # in the runtime repo

Since runtime v0.5.0, a runtime with no authentication configured (MACP_AUTH_TOKENS_* / MACP_AUTH_ISSUER unset) refuses to start unless MACP_ALLOW_INSECURE=1 is set, and the published Docker image no longer bakes that env in — pass it explicitly for local dev (as above and in the docker run command in CLAUDE.md).

Dev-agent auth rides the standard Authorization: Bearer header — the runtime's dev_authenticate fallback binds the token value verbatim as the sender.

Documentation

Full docs available in docs/ — build with mkdocs serve after make setup.

Architecture boundary

This SDK is a thin typed client library. It provides:

  • Typed state models and action builders
  • Session helpers (propose(), vote(), commit())
  • Local state projections (because GetSession returns metadata only)

Business logic — voting rules, AI decision heuristics, policy enforcement — belongs in the orchestrator/agent layer above the SDK.

Known runtime limitations

  • GetSession returns metadata only (not mode state/transcript) — hence the local projection pattern; use StreamSession + send_subscribe for the full transcript
  • StreamSession is scoped to one session per stream; use MacpStream.send_subscribe(session_id) (RFC-MACP-0006-A1, since SDK 0.2.3 / macp-proto 0.1.2) to replay accepted history before live broadcast
  • For cross-session observability, use MacpClient.list_sessions() and SessionLifecycleWatcher (SDK 0.3.0) to enumerate active sessions and stream CREATED / RESOLVED / EXPIRED / CANCELLED / SUSPENDED / RESUMED lifecycle events
  • Pause and cancel sessions with MacpClient.suspend_session() / resume_session() / cancel_session() (SDK 0.4.0 / macp-proto 0.1.3). A suspended session is non-terminal and rejects messages until resumed; an accepted cancel_session() now terminates as CANCELLED (previously surfaced as EXPIRED)
  • ListRoots currently returns an empty list and WatchRoots idles — the runtime does not yet populate roots
  • Business policy (majority, quorum, veto) belongs in your orchestrator/policy layer

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

macp_sdk_python-0.5.0.tar.gz (58.6 kB view details)

Uploaded Source

Built Distribution

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

macp_sdk_python-0.5.0-py3-none-any.whl (67.7 kB view details)

Uploaded Python 3

File details

Details for the file macp_sdk_python-0.5.0.tar.gz.

File metadata

  • Download URL: macp_sdk_python-0.5.0.tar.gz
  • Upload date:
  • Size: 58.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for macp_sdk_python-0.5.0.tar.gz
Algorithm Hash digest
SHA256 827055406c1e5f59539242d999e30e2c5b3e869c7b8413a676eb716eb6b5a64e
MD5 3831776afe7040fa9f08604d96564b8e
BLAKE2b-256 a0ecb6cba8eeafd17e1bd2863817aad408b5247ed4e8f31b88ebc957bd05da37

See more details on using hashes here.

Provenance

The following attestation bundles were made for macp_sdk_python-0.5.0.tar.gz:

Publisher: publish.yml on multiagentcoordinationprotocol/macp-sdk-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file macp_sdk_python-0.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for macp_sdk_python-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fe1bd911f679fb1e25611e61c14f5d80a7323c3d4117a9f10753ab0fd1963fc4
MD5 4ae2f15d56d7a79c6a35663fd2680958
BLAKE2b-256 c778d7674a841c7c80235ba9e56972472ae11f3de4ad6da9608e8d491db474da

See more details on using hashes here.

Provenance

The following attestation bundles were made for macp_sdk_python-0.5.0-py3-none-any.whl:

Publisher: publish.yml on multiagentcoordinationprotocol/macp-sdk-python

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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