mpac-mcp
📄 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_workingbegin_taskcheck_overlapget_file_stateack_conflictsubmit_changeyield_taskescalate_conflictresolve_conflicttake_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:
-
Set
MPAC_TOKEN_TABLEas 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"]} }
-
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_TABLEand switches tosecurity_profile=authenticated. -
Clients connect with their token in the HELLO credential field:
wss://your-host/session/proj-alphaTokens bound to
proj-alphacan only joinproj-alpha— cross-session access returnsCREDENTIAL_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 derivedstate_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)
| 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)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| 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.