Concordia Protocol
About
Open negotiation standard for AI agents — structured proposals, binding commitments, and verifiable session receipts
Details
- Author
- eriknewton
- Categories
- Communication, AI, Automation
Jump to
Setup
Install Concordia Protocol in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/eriknewton/concordia-protocol
Follow the installation instructions in the repository README, then restart your MCP client.
Open negotiation standard for AI agents — structured proposals, binding commitments, and verifiable session receipts
When your agent needs to negotiate or make a deal, Concordia gives it a structured way to propose, counter, commit, and build a track record.
python3 -m venv /tmp/concordia-verify-py /tmp/concordia-verify-py/bin/pip install rfc8785 pynacl jsonschema /tmp/concordia-verify-py/bin/python conformance/reference-runner/runner.py conformance/vectors | tail -1
(cd conformance/reference-runner-js && npm ci) node conformance/reference-runner-js/runner.mjs conformance/vectors | tail -1
Expected summary for both:[SUMMARY] positive=48 mutation=1484 canary=5 ok=1537 fail=0
Contract:conformance/RUNNER_CONTRACT.md. Profiles:conformance/PROFILES.md. Registry:conformance/IMPLEMENTATIONS.md.
Agents are already transacting. But without structure, they freetext back and forth for 10 rounds with no record, no binding agreement, no proof of what happened.
The gap between discovery and payment is massive:
- Agent finds something
- Agent wants to negotiate terms
- Agent... guesses? Sends unstructured text?
- Nobody knows if there's actually a deal
Machine-readable terms, not freetext guessing. Both agents understand the same thing.
Cryptographic signatures that prove both parties agreed to specific terms. No ambiguity. No "I said that?" disputes.
Every negotiation creates a verifiable record. What was proposed? What changed? What was agreed? It's all signed and auditable.
Your agent builds a track record: "completed 47 deals, all on time, 4.9 stars." That reputation follows your agent everywhere, usable across platforms.
Concordia works even with agents that don't have it. If the other agent doesn't support Concordia, you'll see what you're missing: a way to know that youcouldhave a binding agreement if both sides had it.
Agent A: I want to buy a camera Agent B: I have one, $2000 Agent A: Too expensive, $1800? Agent B: $1950 final Agent A: ...ok? Agent B: ...ok? → No signed agreement. No clear terms. No reputation signal.
Agent A proposes: Camera, $2000 Agent B counters: $1900, shipping Agent A counters: $2000 for pickup, $2050 shipped Agent B accepts: $2050 shipped → Signed agreement. Clear terms. Reputation attestation issued.
Both sides know exactly what they agreed to. Both sides have proof. The negotiation is auditable. Reputation feeds forward.
Here's what a real negotiation looks like:
{ "concordia": "0.1.0", "type": "negotiate.open", "body": { "terms": { "item": { "value": "Canon EOS R5, 15K shutter count" }, "price": { "value": 2200, "currency": "USD" }, "condition": { "value": "like_new" }, "delivery": { "value": "local_pickup" } } }, "reasoning": "Listing based on recent eBay sold comps." }
{ "type": "negotiate.counter", "body": { "terms": { "price": { "value": 1900, "currency": "USD" }, "delivery": { "value": "shipping" } } }, "reasoning": "I prefer shipping and want a better price." }
{ "type": "negotiate.counter", "body": { "conditions": [ { "if": { "delivery": "local_pickup" }, "then": { "price": { "value": 2000 } } }, { "if": { "delivery": "shipping" }, "then": { "price": { "value": 2050 } } } ] }, "reasoning": "Pickup is cheaper for me, shipping costs extra." }
{ "type": "negotiate.accept", "body": { "accepted_terms": { "item": "Canon EOS R5", "price": { "value": 2050, "currency": "USD" }, "delivery": "shipping" } } }
Both agents sign. The agreement passes to a payment protocol (ACP, Stripe, etc.) for settlement. A reputation attestation is automatically issued.
pipx install "concordia-protocol[server]"
python3 -m venv .venv .venv/bin/pip install "concordia-protocol[server]"
Note:Concordia requires Python 3.10+. macOS ships Python 3.9 with Xcode, so install a newer version first:
Library-only consumers can installconcordia-protocolwithout the MCP server dependencies. Theconcordia-mcp-servercommand requires theserverextra and prints an install hint when that extra is missing.
git clone https://github.com/eriknewton/concordia-protocol.git cd concordia-protocol pip install -e ".[dev]"
claude mcp add concordia -- concordia-mcp-server
openclaw mcp set concordia '{"command":"concordia-mcp-server"}'
openclaw mcp set concordia '{"command":"/path/to/.venv/bin/python3","args":["-m","concordia"]}'
from concordia import Agent, BasicOffer, generate_attestation # Create two agents (Ed25519 keys auto-generated) seller = Agent("seller") buyer = Agent("buyer") # Seller opens a negotiation session = seller.open_session( counterparty=buyer.identity, terms={"price": {"value": 100.00, "currency": "USD"}}, ) buyer.join_session(session) buyer.accept_session() # Buyer accepts the session (PROPOSED -> ACTIVE) # Buyer counters at $80 buyer.send_counter(BasicOffer(terms={"price": {"value": 80.00, "currency": "USD"}})) # Seller accepts seller.accept_offer() print(session.state.value) # "agreed" # Generate a signed reputation attestation att = generate_attestation(session, {"seller": seller.key_pair, "buyer": buyer.key_pair}) print(att["outcome"]["status"]) # "agreed"
When you share a signed object, include verification material with it:
from concordia import KeyPair, public_key_from_b64url, sign_message, verify_signature producer = KeyPair.generate() record = {"type": "example.receipt", "body": {"status": "agreed"}} signature = sign_message(record, producer) material = producer.verification_material() verifier_key = public_key_from_b64url(material["public_key_b64url"]) assert verify_signature(record, signature, verifier_key) tampered = {record, "body": {"status": "rejected"}} assert not verify_signature(tampered, signature, verifier_key)
For a no-SDK path, seeconformance/RUNNER_CONTRACT.md. It defines the canonical bytes and verifier behavior for conformance runners.
For a full multi-term negotiation with preferences and concessions, see[examples/demo_camera_negotiation.py.
Concordia fills the gap between discovery and settlement:
Settlement ACP · AP2 · x402 · Stripe · Lightning ──────────────────────────────────────────────────────── Agreement ★ CONCORDIA PROTOCOL ★ ──────────────────────────────────────────────────────── Trust Reputation Attestations ──────────────────────────────────────────────────────── Communication A2A · HTTPS · JSON-RPC ──────────────────────────────────────────────────────── Discovery Agent Cards · Well-Known URIs ──────────────────────────────────────────────────────── Tools MCP · Function Calling · APIs ──────────────────────────────────────────────────────── Identity DIDs · KERI · OAuth 2.0
Concordia composes with (never competes with) the existing stack. Use any payment protocol. Use any identity standard. Concordia adds structure to the negotiation layer.
When your agent needs security, privacy, and control,Sanctuary Frameworkadds encrypted state, approval gates, and automatic sensitive-data filtering.
Together they form the complete sovereign transaction stack:
- Sanctuaryhandles security, privacy, and control
- Concordia**handles structured deals and reputation
npx @sanctuary-framework/mcp-server pip install concordia-protocol
They work independently, but together they're more powerful.
…
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.


