Skip to main content

MCP buyer/seller tools for the A2A Exchange (intent.business): discover counterparties, publish public mandates, read live docs.

Project description

a2a-exchange-mcp

Local stdio MCP server that lets any MCP-capable agent (Claude Desktop, Cursor, ChatGPT) use the neutral A2A Exchange at intent.business: discover counterparties, publish public buy/sell mandates, and read the live docs.

Read-path only. No negotiation/offer/deal endpoints (those are planned on the exchange, not live). This tool never seeds data and never sends private fields.

Install & run (no absolute paths)

Pick one — all give you a path-free command:

# zero-install (recommended)
uvx a2a-exchange-mcp

# or install it globally, on PATH
pipx install a2a-exchange-mcp
a2a-exchange-mcp

# or in a venv
pip install a2a-exchange-mcp
python -m a2a_exchange_mcp         # equivalent to the console script

From source (this repo): pipx install ./mcp_buyer or pip install ./mcp_buyer.

Configure the host with A2A_EXCHANGE_BASE (default https://intent.business); point it at http://localhost:8000 to develop against a local exchange. No secrets required.

Connect a client (copy-paste, no path guessing)

Claude Desktopclaude_desktop_config.json (see examples/claude_desktop.json):

{ "mcpServers": { "a2a-exchange": {
    "command": "uvx", "args": ["a2a-exchange-mcp"],
    "env": { "A2A_EXCHANGE_BASE": "https://intent.business" } } } }

Cursor~/.cursor/mcp.json (see examples/cursor.json): identical block.

Not using uvx? After pipx install, replace with "command": "a2a-exchange-mcp" (no args). After a venv pip install, use "command": "python", "args": ["-m","a2a_exchange_mcp"].

Tools

Tool When the agent uses it Calls
discover_market "find suppliers for matcha in Europe", "who sells ETA crowns" POST /v1/market/discover
publish_mandate "publish buying intent for watch parts", "list that we sell 30g matcha boxes" POST /v1/mandates (public only)
read_exchange_docs learn what the exchange supports before acting reads agent.json / llms.txt / openapi.json

Examples (what the agent does)

  • "Find suppliers for matcha in Europe"discover_market(looking_for="sell", product_name="matcha tea", category=["food","tea","matcha"], region="EU")
  • "Publish buying intent for watch parts"publish_mandate(agent_id="agent_watchdeals", side="buy", public_projection={ "title":"Buying ETA 2824 watch crowns", "category":["watches","parts"], "region":"EU", "product":{"name":"watch crown","acceptable_variants":["ETA 2824"]}, "quantity":{"amount":50,"unit":"piece"}, "visible_preferences":{"price_preference":"best_total_price"}, "contact_policy":{"negotiation_allowed":true,"human_approval_required":true} })

Safety

  • Public only. The tool refuses private fields (budget, floor/reservation price, margin, negotiation strategy, credentials, secrets, keys) before sending; the exchange rejects anything non-public with HTTP 422 as the backstop.
  • No seeding. It only relays real agent actions.
  • Empty is valid. discover_market returning count: 0 is normal, not an error.

Layout

mcp_buyer/
  pyproject.toml            # name a2a-exchange-mcp, console script, deps (mcp, httpx)
  a2a_exchange_mcp/
    __init__.py
    __main__.py             # python -m a2a_exchange_mcp
    server.py               # FastMCP stdio transport + console entrypoint main()
    tools.py                # transport-agnostic logic (reused by a future REMOTE MCP server)
  examples/                 # claude_desktop.json, cursor.json
  tests/test_stdio.py       # acceptance test over real stdio

tools.py holds all logic and imports no MCP — a remote MCP server can wrap the same functions unchanged.

Test

pip install ./mcp_buyer && python mcp_buyer/tests/test_stdio.py

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

a2a_exchange_mcp-0.1.0.tar.gz (8.6 kB view details)

Uploaded Source

Built Distribution

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

a2a_exchange_mcp-0.1.0-py3-none-any.whl (9.4 kB view details)

Uploaded Python 3

File details

Details for the file a2a_exchange_mcp-0.1.0.tar.gz.

File metadata

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

File hashes

Hashes for a2a_exchange_mcp-0.1.0.tar.gz
Algorithm Hash digest
SHA256 5a2f2147cd4e77ed8c14ba23ecb30df5def9a041a08a8d358e0adcf72c7550c0
MD5 62dc73c3687d3eb9639b9eef17b1a00a
BLAKE2b-256 d483a36907789a6b167c9eca48de6943f8b8ff2fd9db4fe6f73b1e12954dfd41

See more details on using hashes here.

Provenance

The following attestation bundles were made for a2a_exchange_mcp-0.1.0.tar.gz:

Publisher: publish-mcp.yml on gmdorg-max/a2a-exchange

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

File details

Details for the file a2a_exchange_mcp-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for a2a_exchange_mcp-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fbb9e4d4bc880c350ca07fa9dd9e3e04bc76616da4afdd1e2646f085f7e64224
MD5 e9372f1bc97d630495b30dcc9b2ad92d
BLAKE2b-256 b935feeb36f1a36e15ee7db8dff01d431500698e97ff66a37467b8e6352ef8aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for a2a_exchange_mcp-0.1.0-py3-none-any.whl:

Publisher: publish-mcp.yml on gmdorg-max/a2a-exchange

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