# Conduit Agentic Commerce (remote · mcp.aiconduit.app)

Search multi-merchant supply, checkout, and track orders via MCP.

- Trust score: 63/100 (medium)
- Change this week: 0
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `mcp.aiconduit.app`: 63/100 (this document), [markdown](https://verifymcp.io/servers/app-aiconduit-conduit/mcp.md), [page](https://verifymcp.io/servers/app-aiconduit-conduit/mcp)

## Channel facts

- Endpoint: `https://mcp.aiconduit.app/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (payment_mandate).
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 3753 tokens (~170/item across 22 items; 17 tools + 5 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability check failed: schema churn in the 8 days we've observed: 15 tool removals, 0 breaking changes, 0 auth/transport breaks, 16 additions.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http app-aiconduit-conduit https://mcp.aiconduit.app/mcp
```

### Codex

```toml
[mcp_servers.app-aiconduit-conduit]
url = "https://mcp.aiconduit.app/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "app-aiconduit-conduit": {
      "type": "remote",
      "url": "https://mcp.aiconduit.app/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add app-aiconduit-conduit --url https://mcp.aiconduit.app/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  app-aiconduit-conduit:
    url: "https://mcp.aiconduit.app/mcp"
```

### Other

```json
{
  "mcpServers": {
    "app-aiconduit-conduit": {
      "type": "http",
      "url": "https://mcp.aiconduit.app/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-01 (score 63, −1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-31 (score 64, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-28 (score 64, +1)

- [functional] Schema quality: good → excellent

### 2026-07-27 (score 63, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-26 (score 63)

First indexed and scored.

## MCP tools (17)

### `agent_create` (~334 tokens)

Create agent profile

Register an agent (ES256 P-256 public JWK JSON string + optional payment rails + destination). BEFORE: read ~/.conduit/credentials.json — if it exists, reuse agent_id (do NOT register again). AFTER: write credentials (version, agent_id, public_key, private_key as JWKs; recommend handle; chmod 0600). Then agent_update with default_destination+postcode before supply_search. Optional friendly_name / human_description / role_description only if the human stated them. Omit handle to auto-generate (e.g. parcel-watcher-12).

Input parameters:

- `business_profile`: Optional business profile metadata object
- `default_destination`: Shipping destination object; include postcode before supply_search
- `friendly_name` (string): Human-facing label (≠ handle), e.g. EU Restock Bot
- `handle` (string): Optional display handle (lowercase kebab); omit to auto-generate e.g. parcel-watcher-12
- `human_description` (string): Description shown to humans on the org dashboard
- `payment_rails` (array): Optional rail keys to seed, e.g. ["x402"]
- `preferences`: Optional agent preference bag
- `public_key` (string, required): ES256 P-256 public JWK as a JSON string (kty=EC, crv=P-256, x, y). Not PEM, hex, or base64url-wrapped JSON. Keep the matching private JWK only in ~/.conduit/credentials.json.
- `role_description` (string): Self-instruction for this agent only, e.g. manage EU supplies

Output parameters:

- `agentId` (string)
- `businessProfile`
- `challenge` (string)
- `createdAt` (string)
- `defaultDestination`
- `destination_source` (string)
- `detail` (string)
- `effectiveDestination`
- `error` (string)
- `friendlyName` (string)
- `handle` (string)
- `hint` (string)
- `humanDescription` (string)
- `mandates` (array)
- `next` (object)
- `nonce` (string)
- `openOrders`
- `organization`
- `organization_id` (string)
- `paymentRails` (array)
- `persist`
- `preferences`
- `publicKey` (string)
- `reputation`
- `roleDescription` (string)
- `terminal` (string)
- `totalOrders`

### `agent_authenticate` (~119 tokens)

Authenticate agent

Two-step re-auth. Call with agent_id only → ES256-sign nonce → call again with nonce+signature. Prefer keys from ~/.conduit/credentials.json. Do not agent_create if credentials already exist.

Input parameters:

- `agent_id` (string, required): Agent id from ~/.conduit/credentials.json, e.g. agt_...
- `nonce` (string): Challenge nonce from the first agent_authenticate call (omit to request one)
- `signature` (string): Signature of the nonce with the agent private key (omit with nonce to get challenge)

Output parameters:

- `agentId` (string)
- `businessProfile`
- `challenge` (string)
- `createdAt` (string)
- `defaultDestination`
- `destination_source` (string)
- `detail` (string)
- `effectiveDestination`
- `error` (string)
- `friendlyName` (string)
- `handle` (string)
- `hint` (string)
- `humanDescription` (string)
- `mandates` (array)
- `next` (object)
- `nonce` (string)
- `openOrders`
- `organization`
- `organization_id` (string)
- `paymentRails` (array)
- `persist`
- `preferences`
- `publicKey` (string)
- `reputation`
- `roleDescription` (string)
- `terminal` (string)
- `totalOrders`

### `agent_update` (~176 tokens)

Update agent profile

Patch handle, rails, default_destination (postcode required for ships-to), friendly_name, human_description, role_description, business profile, or preferences.

Input parameters:

- `agent_id` (string, required): Agent id to patch, e.g. agt_...
- `business_profile`: Business profile patch
- `default_destination`: Shipping destination; must include postcode for accurate search
- `friendly_name` (string): Human-facing label (≠ handle), e.g. EU Restock Bot
- `handle` (string): New display handle (lowercase kebab)
- `human_description` (string): Description shown to humans on the org dashboard
- `payment_rails` (array): Replacement rail key list
- `preferences`: Preferences patch
- `role_description` (string): Self-instruction for this agent only, e.g. manage EU supplies

Output parameters:

- `agentId` (string)
- `businessProfile`
- `challenge` (string)
- `createdAt` (string)
- `defaultDestination`
- `destination_source` (string)
- `detail` (string)
- `effectiveDestination`
- `error` (string)
- `friendlyName` (string)
- `handle` (string)
- `hint` (string)
- `humanDescription` (string)
- `mandates` (array)
- `next` (object)
- `nonce` (string)
- `openOrders`
- `organization`
- `organization_id` (string)
- `paymentRails` (array)
- `persist`
- `preferences`
- `publicKey` (string)
- `reputation`
- `roleDescription` (string)
- `terminal` (string)
- `totalOrders`

### `agent_organization` (~68 tokens)

Get agent organization

Read the linked organization (name, slug, country, default address) for an agent. Returns org_not_linked when organization_id is unset — dashboard claim/join is not released yet; do not invent join_org.

Input parameters:

- `agent_id` (string, required): Agent id whose linked organization to read

Output parameters:

- `detail` (string)
- `error` (string)
- `hint` (string)
- `next` (object)
- `organization`

### `agent_report_issue` (~318 tokens)

Report an issue

Report unexpected tool errors or confusing Conduit outcomes for AX review (agent_report_issue — not order_feedback). Pass message (required), optional kind=bug|confusing|wrong_data|blocked, plus agent_id, tool, error, detail, search_id, order_id, session_id, and/or context. Dedupes open reports with the same tool+error+correlation. Does not change reputation.

Input parameters:

- `agent_id` (string): Agent id from credentials when available (omit placeholders like "agent_id")
- `context` (object): Optional structured extras (args summary, badge, etc.). Secrets are stripped.
- `detail` (string): Optional longer detail (response excerpt, unexpected field). Do not include private_key.
- `error` (string): Error code from the prior tool response when present, e.g. offer_not_in_cache
- `kind` (string): Triage kind (default confusing): bug | confusing | wrong_data | blocked
- `message` (string, required): Required: what went wrong or what confused you (expected vs actual). Keep actionable. This is agent_report_issue — not order_feedback.
- `order_id` (string): order_id for correlation when the issue is order-related
- `search_id` (string): search_id for correlation when the issue is search-related
- `session_id` (string): Optional session id; Conduit also picks up x-conduit-session-id from the transport
- `tool` (string): MCP tool that failed or confused you, e.g. supply_search or order_execute

Output parameters:

- `agent_id` (string)
- `already_open` (boolean)
- `detail` (string)
- `error` (string)
- `hint` (string)
- `kind` (string)
- `next` (object)
- `report_id` (string)
- `session_id` (string)
- `status` (string)
- `tool` (string)

### `payment_methods` (~108 tokens)

Payment methods

List or enable agent payment methods (action=list|enable) with friendly labels. Defaults: cod + x402. invoice (B2B) is coming_soon. bank_card is handoff-only.

Input parameters:

- `action` (string, required): list = enumerate rails; enable = turn on one rail
- `agent_id` (string, required): Agent id whose methods to list or enable
- `rail` (string): Rail key required when action=enable, e.g. x402 (not bank_card vault)

Output parameters:

- `approvalUrl` (string)
- `detail` (string)
- `error` (string)
- `hint` (string)
- `label` (string)
- `methods` (array)
- `next` (object)
- `railKey` (string)
- `status` (string)

### `payment_mandate` (~168 tokens)

Payment mandate (AP2)

AP2 spend mandates. action=request (needs scope) → approval_url; list; update (mandate_id+scope); revoke (mandate_id). Widening needs human re-approval; narrowing applies immediately.

Input parameters:

- `action` (string, required): request = create mandate (needs scope); list = enumerate; update = change scope (needs mandate_id+scope); revoke = revoke (needs mandate_id)
- `agent_id` (string, required): Owning agent id
- `expires` (string): Optional ISO-8601 expiry, e.g. 2026-12-31T00:00:00Z
- `mandate_id` (string): Mandate id required for update/revoke
- `scope` (object): Spend limits — required for action=request and action=update

Output parameters:

- `applied` (string)
- `approvalUrl` (string)
- `detail` (string)
- `error` (string)
- `hint` (string)
- `mandateId` (string)
- `mandates` (array)
- `next` (object)
- `status` (string)

### `supply_search` (~427 tokens)

Search supply

Multi-provider discovery (live REAL merchants by default). Returns a ranked page (default limit=30, max 100) with total/has_more/next_offset. Follow next.args (search_id+offset+limit) to page without re-fanout. Optional fetch_limit (max 300) deepens the upstream pull on new searches. Pass include_sandbox=true only to append DEMO/SANDBOX test merchants at the bottom (testOffer=true). Always pass agent_id for mandate-aware badges. Carry search_id through supply_details / order_execute / order_feedback.

Input parameters:

- `agent_id` (string): Agent id for mandate-aware badges (always pass when available)
- `budget`: Max total budget — number means USD; or { amount, currency }
- `country` (string): ISO country for ships-to, e.g. US
- `fetch_limit` (integer): Optional override for per-merchant upstream pull (default max(20, limit*2), max 300). Ignored when paging via search_id+offset
- `include_sandbox` (boolean): Include DEMO/SANDBOX merchants (listed last, testOffer=true). Default false — live REAL merchants only. Use only when testing Conduit checkout flows.
- `limit` (integer): Page size of ranked offers to return (default 30, max 100)
- `offset` (integer): 0-based offset into the ranked set for this search_id (default 0). For page 2+, pass search_id from the prior response and follow next.args
- `payable_with` (array): Filter to rails the agent can pay with, e.g. ["x402"]
- `quantity` (integer): Desired quantity (default 1)
- `query` (string): Product search query, e.g. USB-C charger 65W. Required for a new search; omit when paging with search_id + offset
- `search_id` (string): Resume paging into a prior ranked set (with offset>0, or offset 0 without query). New searches with query mint a fresh search_id

Output parameters:

- `badgeCounts`
- `country` (string)
- `countryDefault`
- `degraded` (boolean)
- `detail` (string)
- `error` (string)
- `hasMore` (boolean)
- `hint` (string)
- `includeSandbox` (boolean)
- `limit` (number)
- `next` (object)
- `nextOffset`
- `offers` (array)
- `offset` (number)
- `partial`
- `recommended`
- `sandboxIncluded` (number)
- `searchId` (string)
- `total` (number)
- `withheld` (array)

### `supply_details` (~82 tokens)

Get supply details

Full normalized product detail from search cache. For shipping ETA/cost use supply_delivery. Re-run supply_search if offer_not_in_cache.

Input parameters:

- `agent_id` (string): Agent id to refresh badge/action for mandate state
- `search_id` (string): search_id from supply_search for correlation
- `supply_id` (string, required): Offer supply id from supply_search results

Output parameters:

- `action` (string)
- `aes`
- `badge` (string)
- `currency` (string)
- `deliveryOptions`
- `detail` (string)
- `error` (string)
- `hint` (string)
- `next` (object)
- `paymentRails`
- `priceTotal`
- `supplier`
- `supplyId` (string)
- `supply_id` (string)
- `title` (string)
- `unitPrice`

### `supply_delivery` (~135 tokens)

Get delivery estimate

Non-committing checkout probe for shipping ETA/cost. Uses agent default_destination, else linked org default address, or country override.

Input parameters:

- `agent_id` (string): Agent id — uses agent destination else org default when country omitted
- `country` (string): ISO country override, e.g. US (else agent/org destination)
- `postal_code` (string): Postal/ZIP override for the probe destination
- `quantity` (integer): Units to price shipping for (default 1)
- `region` (string): Optional region/state override
- `supply_id` (string, required): Offer supply id from supply_search / supply_details

Output parameters:

- `available` (boolean)
- `country` (string)
- `currency` (string)
- `detail` (string)
- `error` (string)
- `etaText` (string)
- `hint` (string)
- `needsInteraction` (boolean)
- `next` (object)
- `note` (string)
- `options` (array)
- `paymentRails`
- `postalCode` (string)
- `shippable` (boolean)
- `shippingCost` (number)
- `status` (string)
- `supplyId` (string)
- `supply_id` (string)

### `order_execute` (~144 tokens)

Execute order

Handoff or autonomous checkout. Autonomous needs badge payable_now + active mandate. Use idempotency_key. Prefer supply_delivery when only comparing delivery.

Input parameters:

- `agent_id` (string, required): Owning agent id
- `carrier` (string): Preferred carrier when delivery options allow
- `idempotency_key` (string): Client idempotency key — reuse to safely retry the same execute
- `pay_with` (string): Rail key to pay with when multiple are enabled
- `quantity` (integer): Units to buy (default 1)
- `search_id` (string): search_id from supply_search for correlation
- `supply_id` (string, required): Offer supply id to purchase

Output parameters:

- `billBreakdown`
- `billTotal`
- `continueUrl` (string)
- `createdAt` (string)
- `detail` (string)
- `error` (string)
- `externalCheckoutId` (string)
- `handoffEndpoint` (string)
- `handoffQuality` (string)
- `hint` (string)
- `idempotentReplay` (boolean)
- `next` (object)
- `note` (string)
- `orderId` (string)
- `payWith` (string)
- `product`
- `quantity` (number)
- `railKey` (string)
- `shortfall`
- `simulated` (boolean)
- `status` (string)
- `supplier`
- `supplyId` (string)

### `order_list` (~112 tokens)

List orders

List orders for an agent ({ orders }). Optional status or open_only filter.

Input parameters:

- `agent_id` (string, required): Owning agent id whose orders to list
- `open_only` (boolean): If true, only in-flight orders (PENDING, CONFIRMED, IN_TRANSIT). Ignored when status is set.
- `status` (string): Optional status filter: PENDING, CONFIRMED, IN_TRANSIT, DELIVERED, ABANDONED (or CANCELLED), FAILED, DISPUTED

Output parameters:

- `detail` (string)
- `error` (string)
- `hint` (string)
- `next` (object)
- `orders` (array)

### `order_track` (~53 tokens)

Track order

Honest deal-type-aware status (never fabricates carrier scans). Requires owning agent_id.

Input parameters:

- `agent_id` (string, required): Owning agent id (required for authorization)
- `order_id` (string, required): Order id to track

Output parameters:

- `agent_status_locked` (boolean)
- `carrier` (string)
- `checkout_id` (string)
- `continueUrl` (string)
- `detail` (string)
- `error` (string)
- `handoff_expires_at` (string)
- `hint` (string)
- `merchant_observed`
- `next` (object)
- `orderId` (string)
- `product`
- `recovery`
- `status` (string)
- `status_source` (string)
- `trackable` (boolean)
- `tracking` (string)
- `trackingId` (string)
- `tracking_source` (string)

### `order_events` (~55 tokens)

Get order events

Lifecycle timeline — transitions only. Pair with order_track. Requires owning agent_id.

Input parameters:

- `agent_id` (string, required): Owning agent id (required for authorization)
- `order_id` (string, required): Order id whose lifecycle events to list

Output parameters:

- `detail` (string)
- `error` (string)
- `events` (array)
- `hint` (string)
- `next` (object)
- `orderId` (string)

### `order_update_status` (~179 tokens)

Update order status

Agent manual correction or degraded handoff recovery. note required except cancelled. Owning agent_id required.

Input parameters:

- `agent_id` (string, required): Owning agent id (required for authorization)
- `carrier` (string): Carrier name when attaching tracking
- `external_checkout_id` (string): Merchant checkout id to recover degraded handoff polling
- `handoff_endpoint` (string): Merchant handoff/status endpoint URL for poll recovery
- `note` (string): Required note except when status=CANCELLED
- `order_id` (string, required): Order id to update
- `search_id` (string): Optional search_id for analytics correlation
- `status` (string, required): New status, e.g. PENDING, CONFIRMED, SHIPPED, DELIVERED, CANCELLED
- `tracking_id` (string): Carrier tracking id when recovering handoff

Output parameters:

- `agentStatusLocked` (boolean)
- `carrier` (string)
- `continueUrl` (string)
- `detail` (string)
- `error` (string)
- `externalCheckoutId` (string)
- `handoffEndpoint` (string)
- `hint` (string)
- `merchantObserved`
- `next` (object)
- `orderId` (string)
- `quantity` (number)
- `status` (string)
- `trackingId` (string)

### `order_dispute` (~59 tokens)

Get dispute path

Refund/chargeback/report paths for an order. Requires owning agent_id.

Input parameters:

- `agent_id` (string, required): Owning agent id (required for authorization)
- `order_id` (string, required): Order id to resolve refund/chargeback/report paths for

Output parameters:

- `chargeback`
- `detail` (string)
- `error` (string)
- `hint` (string)
- `next` (object)
- `orderId` (string)
- `refund`
- `report_to_conduit`

### `order_feedback` (~213 tokens)

Submit feedback

Attest delivery outcome (outcome=on_time|late|never_arrived|damaged|wrong_item). Requires owning agent_id. Can supersede a system-derived score once; a second agent attestation returns already_recorded. Poor outcomes next→order_dispute. Omit quality/carrier_rating if unknown.

Input parameters:

- `agent_id` (string, required): Owning agent id (required for authorization)
- `carrier_rating` (number): Carrier rating 1-5 — omit if unknown; used in reputation when provided
- `notes` (string): Free-text delivery/quality notes
- `order_id` (string, required): Order id to attest
- `outcome` (string, required): Observed fulfillment outcome. Sets status (on_time/late→DELIVERED, damaged/wrong_item→DISPUTED, never_arrived→FAILED) and reputation.
- `quality` (number): Product quality 1-5 — omit if unknown (do not invent)
- `search_id` (string): Optional search_id for analytics correlation

Output parameters:

- `already_recorded` (boolean)
- `detail` (string)
- `error` (string)
- `hint` (string)
- `next` (object)
- `ok` (boolean)
- `orderId` (string)
- `outcome`
- `status` (string)
- `superseded` (boolean)
- `updated`

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/app-aiconduit-conduit/mcp#diagnostics

## Score history

- 2026-08-03: 63
- 2026-08-02: 63
- 2026-08-01: 63
- 2026-07-31: 64
- 2026-07-30: 64
- 2026-07-28: 64
- 2026-07-27: 63
- 2026-07-26: 63

## Links

- Remote endpoint: https://mcp.aiconduit.app/mcp
- Repository: https://github.com/asmodeoux/conduit
- Website: https://aiconduit.app/
- Changelog RSS feed: https://verifymcp.io/servers/app-aiconduit-conduit/mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/app-aiconduit-conduit/mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/app-aiconduit-conduit/mcp
