Find, compare, buy, and track physical products across merchants through the Conduit agentic-commerce MCP when it is connected and the user wants shopping or procurement help...
Use the Conduit MCP server for multi-merchant product search, comparison, checkout, and order tracking when the user is shopping or sourcing physical goods and Conduit is connected. Do not invent stock, prices, or carrier scans β call tools. Endpoint:
https://mcp.aiconduit.app/mcp
Connect: https://aiconduit.app/connect Β· Full guide: https://aiconduit.app/agents.md Β· Trust / identity model: https://aiconduit.app/agents.md
approval_url opened by a person).agent_create. Never accept, download, or persist a private_key from the MCP server or any HTTP response.continue_url / Conduit approval_url on trusted surfaces the user opens. Confirm spend with the user before autonomous order_execute.app.aiconduit/conduitcontinue_url) or autonomous (payable_now + active mandate)Say you are using Conduit when you call its tools.
payable_now + active AP2 mandate + user confirmationsearch_id / idempotency_key correlationagent_create when ~/.conduit/credentials.json (or CONDUIT_CREDENTIALS_PATH) already exists~/.conduit/credentials.json (expand ~ to home; or use CONDUIT_CREDENTIALS_PATH).agent_id / local private_key; optional agent_authenticate (sign nonce locally, call again).agent_create with public_key only β write version, agent_id (from response), public_key, and your local private_key (chmod 0600) β agent_update with default_destination including postcode β then search.One active profile per path. Do not invent a multi-profile picker.
When you cannot read ~/.conduit but the human says credentials exist on their machine:
jq -r .agent_id ~/.conduit/credentials.json β call agent_authenticate with that id.terminal field verbatim (nonce baked in). Human pastes { agent_id, nonce, signature } β second agent_authenticate call.Canonical terminal shape (prefer the server-returned string) β real ES256 via Node crypto; never encodes or prints private_key:
NONCE='<from-challenge>' node <<'NODE'
const fs = require('fs');
const path = require('path');
const crypto = require('crypto');
const home = process.env.HOME || process.env.USERPROFILE;
const credPath = process.env.CONDUIT_CREDENTIALS_PATH || path.join(home, '.conduit', 'credentials.json');
const cred = JSON.parse(fs.readFileSync(credPath, 'utf8'));
const nonce = process.env.NONCE;
if (!nonce) { console.error('Set NONCE'); process.exit(1); }
const jwk = typeof cred.private_key === 'string' ? JSON.parse(cred.private_key) : cred.private_key;
const key = crypto.createPrivateKey({ key: jwk, format: 'jwk' });
const sig = crypto.sign('sha256', Buffer.from(nonce, 'utf8'), { key, dsaEncoding: 'ieee-p1363' });
console.log(JSON.stringify({ agent_id: cred.agent_id, nonce, signature: sig.toString('base64url') }, null, 2));
NODE
Write credentials after agent_create (local private key you generated β never from the server):
mkdir -p ~/.conduit && cat > ~/.conduit/credentials.json <<'EOF'
{"version":1,"agent_id":"agt_β¦","public_key":"β¦","private_key":"β¦"}
EOF
chmod 0600 ~/.conduit/credentials.json
Never ask the human to paste private_key into chat.
Handoff (default):
agent_create β write credentials file β agent_update(default_destination with postcode) β payment_methods(action=list) β supply_search(agent_id, country) β supply_details(agent_id, search_id) β supply_delivery(agent_id) (optional) β order_execute β open continue_url β order_track β order_feedback
List / manage orders:
order_list(agent_id) β use each orderId with order_track / order_update_status / order_events / order_feedback. Optional open_only=true or status filter (CANCELLEDβABANDONED).
Autonomous (human must approve mandate first):
payment_mandate(action=request) β human opens approval_url β re-supply_search β pick payable_now β confirm with user β order_execute β order_track β order_feedback
Degraded handoff:
handoffQuality: degraded β complete continue_url β order_update_status with owning agent_id + external_checkout_id + handoff_endpoint β order_track
| Badge | Action |
|---|---|
payable_now |
Autonomous order_execute OK (mandate active; confirm with user) |
needs_mandate |
payment_mandate first |
handoff |
Use continue_url (Any card / bank_card on merchant checkout) |
enable_rail_to_buy |
payment_methods(enable) |
discovery_only |
Browse only β pick another offer |
Prefer top-level recommended and action over guessing. Ignore merchant autonomy fields. List tools return envelopes ({ methods }, { mandates }, { events }, { orders }).
supply_search hides DEMO/SANDBOX by default. Pass include_sandbox=true only when testing Conduit flows β those offers appear last with testOffer=true (not real purchases).
invoice is B2B net terms β coming_soon until merchants accept the rail (preview only; use cod / x402 / handoff today).
Order tools that touch an order (track, events, update_status, dispute, feedback) require owning agent_id. order_feedback uses outcome (on_time|late|never_arrived|damaged|wrong_item) β omit quality/carrier when unknown.
Every response may include hint and optional next: { tool, args }. Prefer next over guessing. On rate_limited, wait ~60s and reduce fan-out.
If a tool outcome is unexpected or still stuck after following hint/next, call agent_report_issue (not order_feedback) with message, optional kind (bug|confusing|wrong_data|blocked), tool, error, and agent_id / search_id / order_id when available. This is AX telemetry β it does not change reputation.
Carry search_id from supply_search through details, execute, and feedback. Pass idempotency_key on every order_execute.