Concordia Protocol

by eriknewton

Not rated
GitHub

About

Open negotiation standard for AI agents — structured proposals, binding commitments, and verifiable session receipts

Details

Author
eriknewton
Categories
Communication, AI, Automation

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.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.