Skip to main content

mpac-mcp

arXiv PyPI

📄 Paper: MPAC: A Multi-Principal Agent Coordination Protocol for Interoperable Multi-Agent Collaboration (arXiv:2604.09744)

mpac-mcp is the MCP-facing bridge for MPAC — it lets MCP-aware coding clients (Claude Code, Cursor, any MCP host) participate in an MPAC coordination session without re-implementing the protocol themselves. The underlying protocol and reference runtime live in mpac-protocol / the mpac package.

It does not re-implement the coordination protocol. Instead it:

  • detects the current repository context
  • ensures a local MPAC sidecar is running
  • queries the sidecar for shared coordination state
  • exposes high-level tools to MCP-compatible coding clients

All bundled smoke scripts now run against an isolated scratch workspace copied from the requested repo path, so repeated runs do not inherit stale conflicts or frozen scope from a long-lived sidecar session.

Current scope

This initial scaffold focuses on the shortest end-to-end path:

  • local sidecar auto-discovery / auto-start
  • repository-root detection
  • session summary query
  • first MCP tools:
    • who_is_working
    • begin_task
    • check_overlap
    • get_file_state
    • ack_conflict
    • submit_change
    • yield_task
    • escalate_conflict
    • resolve_conflict
    • take_over_task
  • a Milestone 0 validation script for "two processes share one local coordinator"
  • an end-to-end smoke script for "one external client + one MCP-owned task"
  • an end-to-end smoke script for "begin task -> submit change -> yield task"
  • an end-to-end smoke script for "ack -> escalate -> resolve"
  • an end-to-end smoke script for "suspend -> claim -> take over"

Multi-tenant Hosted Mode (Authenticated Profile)

When deploying a hosted coordinator for multiple projects/teams:

  1. Set MPAC_TOKEN_TABLE as a JSON env var mapping bearer tokens to allowed sessions:

    {
      "<token-for-alice>": {"allowed_sessions": ["proj-alpha"], "roles": ["contributor"]},
      "<token-for-bob>":   {"allowed_sessions": ["proj-beta"],  "roles": ["contributor"]}
    }
    
  2. Start the sidecar in multi-session mode:

    mpac-mcp-sidecar --multi-session --host 0.0.0.0 --port 8766 --tls
    

    The sidecar auto-detects MPAC_TOKEN_TABLE and switches to security_profile=authenticated.

  3. Clients connect with their token in the HELLO credential field:

    wss://your-host/session/proj-alpha
    

    Tokens bound to proj-alpha can only join proj-alpha — cross-session access returns CREDENTIAL_REJECTED.

See deploy/fly-coordinator/ for a complete Docker + Caddy + fly.io deployment recipe.

Development status

This directory is the start of the mpac-mcp product entry point. It is intentionally thin: MPAC remains the runtime and coordination engine; mpac-mcp is the integration layer.

Running the Milestone 0 smoke check

From this repository root:

python3 mpac-mcp/src/mpac_mcp/milestone0.py --workspace .

This will:

  • derive a deterministic local sidecar port from the repo path
  • start the local sidecar if it is not already running
  • launch two independent demo clients
  • announce two overlapping intents
  • query the sidecar summary and print the result

Running the tool smoke check

From this repository root:

python3 mpac-mcp/src/mpac_mcp/smoke_tools.py --workspace .

This will:

  • ensure the local sidecar is running
  • launch one independent demo client
  • call begin_task(...) through the bridge
  • call check_overlap(...)
  • confirm that overlap is visible through shared sidecar state

Running the commit smoke check

From this repository root:

python3 mpac-mcp/src/mpac_mcp/smoke_commit.py --workspace .

This will:

  • ensure the local sidecar is running
  • call begin_task(...)
  • call submit_change(...) once with a derived state_ref_before
  • verify the sidecar state changed
  • call yield_task(...)

Running the governance smoke check

From this repository root:

python3 mpac-mcp/src/mpac_mcp/smoke_governance.py --workspace .

This will:

  • ensure the local sidecar is running
  • launch one contributor client and one arbiter client
  • call begin_task(...) to create a real overlap
  • call ack_conflict(...)
  • call escalate_conflict(...)
  • call resolve_conflict(...)

Running the takeover smoke check

From this repository root:

python3 mpac-mcp/src/mpac_mcp/smoke_takeover.py --workspace .

This will:

  • ensure the local sidecar is running
  • launch one client that leaves with GOODBYE(intent_disposition="transfer")
  • verify the sidecar exposes a suspended intent
  • call take_over_task(...)
  • verify the replacement intent becomes active

Metadata

Release files for mpac-mcp 0.2.25

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for mpac-mcp 0.2.25
File Size Uploaded Provenance Actions
mpac_mcp-0.2.25.tar.gz 74.3 kB Without provenance Details for mpac_mcp-0.2.25.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for mpac-mcp 0.2.25
File Interpreter ABI Platform Actions
mpac_mcp-0.2.25-py3-none-any.whl Python 3 none any Details for mpac_mcp-0.2.25-py3-none-any.whl

Total release size: 137.8 kB

Release files / mpac_mcp-0.2.25.tar.gz

Download URL mpac_mcp-0.2.25.tar.gz
Size 74.3 kB
Tags Source
SHA-256 checksum
How to use checksums
46439d070b2ceb626a5218d26458e45d2c9c156522543ed15f911d709578c331
BLAKE2b-256 checksum
How to use checksums
23e6a55f77092342d2fd492e4a8920ab754a95d84580878e7a6aac873c94221c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Release files / mpac_mcp-0.2.25-py3-none-any.whl

Download URL mpac_mcp-0.2.25-py3-none-any.whl
Size 63.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
189c6c9f611286eae4a31509e98f495916fedbe383552933be8ebceba093fa5c
BLAKE2b-256 checksum
How to use checksums
976004d29667cdda5e4ef6a438810772dd3cbdc4b5158ebcb12048dc6c4e251d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.13

Security for mpac-mcp 0.2.25

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page