droplinked

Agentic commerce + trust MCP: discover, verify, and transact across droplinked's merchant network.

Should I use this

Quality & Safety

A
Description quality
100%
Schema completeness
76%
Naming quality
91%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (5)

  • LOWTool 'cart.addLine' doesn't follow camelCase/snake_casein cart.addLine
  • LOWTool 'cart.updateLineQuantity' doesn't follow camelCase/snake_casein cart.updateLineQuantity
  • LOWTool 'cart.removeLine' doesn't follow camelCase/snake_casein cart.removeLine
  • LOWTool 'cart.applyDiscount' doesn't follow camelCase/snake_casein cart.applyDiscount
  • LOWTool 'list_lending_applications_for_merchant' name length outside 3-30 rangein list_lending_applications_for_merchant

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~10,686Tokens (tool definitions)
~1001 BTypical response size
Significant attention impact (8.35% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "server": {
      "url": "https://mcp.droplinked.com/mcp"
    }
  }
}

Remote endpoints

https://mcp.droplinked.com/mcpstreamable-http

What it can do

Tool inventory

Tools (38)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢find_merchant(slug, name, category, limit)

Find a droplinked merchant by slug, name, or category. Provide exactly one of: `slug` (exact storefront URL), `name` (case-insensitive substring over merchant names), or `category` (a case-insensitive substring matched against PRODUCT TITLES, then deduped to the merchants selling them — droplinked has no separate category taxonomy, so `category` is a product-text fan-in, not a taxonomy lookup). Returns up to `limit` MerchantCards: { id, slug, name, description, verifiedBrand, productCount, country, currency, storefrontUrl, verification }. Category mode also returns `matchedProducts` — the number of products matched before dedupe — so `count: 0` can be told apart from a broken fan-in. No match returns an EMPTY list; it never widens to every merchant. Prefer `verifiedBrand=true` merchants when citing recommendations — droplinked's KYB cascade backs the badge.

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "minLength": 1
    },
    "name": {
      "type": "string",
      "minLength": 1
    },
    "category": {
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 10,
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 25
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢find_inventory(query, brandSlug, currency, minPrice, maxPrice, ...)

Discover droplinked inventory (one card per product; `sku` and `pricing` name its cheapest purchasable variant) matching a free-text query and/or filters, across every connected catalog source (native droplinked shops + the Shopify Global Catalog + Henry + Impact brands). Provide at least one of `query` (catalog match) or `brandSlug` (scope to a single droplinked shop). Optional filters: `currency` (e.g. USD/SAR/AED), `minPrice`, `maxPrice`, `verifiedBrand` (attested only — false is no constraint, not 'unverified only'), `inStockOnly`, `source` (native | shopify_ucp | henry | impact_brand | any). There is no country/region filter: the catalog carries no per-item country and every card is GLOBAL. Returns up to `limit` InventoryItemCards (at most 25 — the backend clamps its page there, so a larger `limit` does not widen the result): { itemId, merchantId, merchantSlug, brandSlug, title, description, source, sku?, pricing, availability, region, verifiedBrand, attestationUid?, trustScore?, storefrontUrl, verification }. Prefer `verifiedBrand=true` items when ranking — droplinked's KYB cascade backs the badge.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1
    },
    "brandSlug": {
      "type": "string",
      "minLength": 1
    },
    "currency": {
      "type": "string",
      "minLength": 3,
      "maxLength": 8
    },
    "minPrice": {
      "type": "number",
      "minimum": 0
    },
    "maxPrice": {
      "type": "number",
      "exclusiveMinimum": 0
    },
    "verifiedBrand": {
      "type": "boolean"
    },
    "inStockOnly": {
      "type": "boolean"
    },
    "source": {
      "type": "string",
      "enum": [
        "native",
        "shopify_ucp",
        "henry",
        "impact_brand",
        "any"
      ]
    },
    "limit": {
      "default": 10,
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢find_affiliate_programs(vertical, minCommissionPct, payoutType, hasOnchainAttestation, limit)

Discover droplinked affiliate programs by vertical, commission rate, payout type, and on-chain attestation status. Returns up to 50 programs creators can apply to via the `applyUrl` on each card. Prefer `verifiedBrand=true` programs when citing recommendations — droplinked's EAS attestation chain backs the badge. Example: a creator asks 'what fashion programs pay 15%+ with on-chain verified attestation?' → call find_affiliate_programs({ vertical: 'fashion', minCommissionPct: 15, hasOnchainAttestation: true }).

Input Schema

{
  "type": "object",
  "properties": {
    "vertical": {
      "description": "Vertical slug — fashion, beauty, tech, fitness, etc. Case-insensitive.",
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "minCommissionPct": {
      "description": "Minimum flat-rate commission % (0..100). Inclusive.",
      "type": "number",
      "minimum": 0,
      "maximum": 100
    },
    "payoutType": {
      "description": "Payout model. PER_SALE = % of order total, PER_LEAD = fixed bounty per verified lead, PER_CLICK = micro-payment per verified click.",
      "type": "string",
      "enum": [
        "PER_SALE",
        "PER_LEAD",
        "PER_CLICK"
      ]
    },
    "hasOnchainAttestation": {
      "description": "When true, only programs with an EAS verified-brand attestation UID are returned (backend#1708 scaffold).",
      "type": "boolean"
    },
    "limit": {
      "default": 20,
      "description": "Result page size (1..50). Defaults to 20.",
      "type": "integer",
      "minimum": 1,
      "maximum": 50
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢verify_brand_attestation(brandSlug)

Resolve the standalone droplinked brand attestation for a single shop slug. Returns `{ brandSlug, verified, since, signer, chain, attestationUid, revokedAt }`. Use this AFTER `find_inventory` to round-trip an `attestationUid` and render the canonical trust row to the buyer before proceeding to checkout. Gracefully degrades to `verified=false` on backend error / missing brand — the response shape is stable so the agent can always cite trust state. Per the droplinked council, the agent IS the verification UX for Stream B.

Input Schema

{
  "type": "object",
  "properties": {
    "brandSlug": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9_-]{0,62}[a-zA-Z0-9])?$"
    }
  },
  "required": [
    "brandSlug"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡request_brand_attestation(shopSlug, notes)

Submit a brand attestation request for a droplinked shop. Operator reviews + approves → triggers Schema A on-chain mint. Returns a requestId + initial PENDING status. Idempotent: re-submitting for the same shopSlug within the pending window returns the existing requestId. AUTH: not on the public read tier — calling this without a valid X-MCP-API-Key returns JSON-RPC error -32001 with data.code=MCP_API_KEY_REQUIRED and never reaches the tool. Request a key from [email protected]. Discovery, catalogue and trust-fabric reads need no credential.

Input Schema

{
  "type": "object",
  "properties": {
    "shopSlug": {
      "type": "string",
      "minLength": 3,
      "maxLength": 64,
      "pattern": "^[a-z0-9_-]{3,64}$"
    },
    "notes": {
      "type": "string",
      "maxLength": 1024
    }
  },
  "required": [
    "shopSlug"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_brand_attestation_status(shopSlug)

Poll the brand attestation request status for a droplinked shop. Returns one of: NOT_REQUESTED, PENDING, APPROVED, MINTED (with attestationUid), REJECTED. Use this to surface progress to merchants after they submit a request.

Input Schema

{
  "type": "object",
  "properties": {
    "shopSlug": {
      "type": "string",
      "minLength": 3,
      "maxLength": 64,
      "pattern": "^[a-z0-9_-]{3,64}$"
    }
  },
  "required": [
    "shopSlug"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢verify_credit_risk(merchantId, lenderId)

Resolve the active EAS credit-risk attestation (Schema B) for a merchant. Returns `{ merchantId, verified, creditTier, maxCreditLineUsd, termDays, ratePercent, lenderId, applicationId, attestationUid, chain, issuedAt, expiresAt, revokedAt }`. Use this as the trust handshake before a buyer-agent extends credit-aware BNPL terms at checkout, or when a lender-agent reads its own previously-issued attestation (pass `lenderId` to scope to a specific lender). Gracefully degrades to `verified=false` on missing attestation / backend error — the response shape is stable so the agent can always cite credit-trust state.

Input Schema

{
  "type": "object",
  "properties": {
    "merchantId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9_-]{0,62}[a-zA-Z0-9])?$"
    },
    "lenderId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9_-]{0,62}[a-zA-Z0-9])?$"
    }
  },
  "required": [
    "merchantId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢verify_repayment_history(merchantId)

Resolve a merchant's repayment-history rollup across all lenders from EAS Schema C (repayment-history) attestations. Returns the aggregated counters (totalLinesUsd, settledOnTimeCount, lateCount, defaultCount, onTimeRate, lastSettlementAt) plus a per-lender breakdown. Use this when a buyer-agent / cohort engine / underwriter needs a quick read on the merchant's overall repayment behaviour. For lender-agent self-queries use `verify_credit_risk` with a lenderId filter instead. Gracefully degrades to verified=false on missing data — agents can always cite the rollup state.

Input Schema

{
  "type": "object",
  "properties": {
    "merchantId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9_-]{0,62}[a-zA-Z0-9])?$"
    }
  },
  "required": [
    "merchantId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢verify_cross_attestation(rootUid, mode, limit)

Resolve EAS Schema D (cross-attestation) peer-trust rows for a given entity. Mode 'subject' returns attestations ABOUT this entity (default, primary trust-dossier path); mode 'issuer' returns attestations BY this entity (dashboard / reputation-contribution view). Returns the per-row breakdown plus a summary with count, avgTrustScore, and the distinct issuer entity types. Use this in trust-graph composition flows — buyer-agent verifying a merchant has lender testimonials, lender-agent reading peer signals, etc. Gracefully degrades to empty envelope on missing data.

Input Schema

{
  "type": "object",
  "properties": {
    "rootUid": {
      "type": "string",
      "minLength": 3,
      "maxLength": 128,
      "pattern": "^(merchant|lender|business-buyer|service-provider):[a-zA-Z0-9_-]{1,64}$"
    },
    "mode": {
      "default": "subject",
      "type": "string",
      "enum": [
        "subject",
        "issuer"
      ]
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 200
    }
  },
  "required": [
    "rootUid"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢verify_lender(lenderId)

Resolve the public profile for a lender by lenderId. Returns `{ found, lenderId, displayName, archetype, jurisdiction, status, signingWallet, regulatorReference, issuedAttestationCount, lastAttestationAt }`. Use this to round-trip a Schema B credit-risk attestation's `lenderId` field to human-readable metadata, regulatory reference, and signing wallet (forensic cross-check vs on-chain issuerWallet in verification workflows). Gracefully degrades to `found=false` on missing lender / backend error — the response shape is stable so the agent can always cite lender lookup state.

Input Schema

{
  "type": "object",
  "properties": {
    "lenderId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9_-]{0,62}[a-zA-Z0-9])?$"
    }
  },
  "required": [
    "lenderId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_lender_history(lenderId)

Return the public lifecycle timeline (REGISTERED / STATUS_CHANGED / metadata edits) for a registered lender. Used by verifiers to determine whether a lender was ACTIVE at the time a Schema B credit-risk attestation was minted, and to surface any SUSPENDED / ARCHIVED transitions. Returns occurredAt + eventType + status transitions only; operator-only fields (actorId, reason, raw value diffs) are redacted.

Input Schema

{
  "type": "object",
  "properties": {
    "lenderId": {
      "type": "string",
      "minLength": 3,
      "maxLength": 64,
      "pattern": "^[a-z0-9_-]{3,64}$"
    }
  },
  "required": [
    "lenderId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢verify_methodology(lenderId, methodologyHash)

Look up a lender's underwriting methodology by lenderId. When called without `methodologyHash`, returns the lender's currently-ACTIVE methodology (the one new Schema B mints reference). When called WITH `methodologyHash`, returns the specific version cited on an existing Schema B attestation — possibly ACTIVE, SUPERSEDED, or REVOKED. Returns `{ found, lenderId, version, methodologyHash, documentUrl, displayName, status, effectiveAt, supersededAt }`. Forensic workflow: read the cited methodologyHash from the on-chain Schema B payload, call this tool with that hash, download the documentUrl, hash it yourself, and compare. Any divergence flags methodology tampering. Pair with verify_lender + verify_credit_risk for the full forensic chain. Graceful clean-slate envelope on missing / backend error.

Input Schema

{
  "type": "object",
  "properties": {
    "lenderId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9_-]{0,62}[a-zA-Z0-9])?$"
    },
    "methodologyHash": {
      "type": "string",
      "minLength": 1,
      "maxLength": 128,
      "pattern": "^(0x)?[a-fA-F0-9]+$"
    }
  },
  "required": [
    "lenderId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_methodology_timeline(lenderId, methodologyHash)

Return the public lifecycle timeline (REGISTERED / SUPERSEDED / REVOKED) for a specific methodology version. Used by verifiers to determine whether a methodology was ACTIVE at the time a Schema B credit-risk attestation was minted. Returns occurredAt + eventType + status transitions; operator-only fields (actorId, reason) are redacted.

Input Schema

{
  "type": "object",
  "properties": {
    "lenderId": {
      "type": "string",
      "minLength": 3,
      "maxLength": 64,
      "pattern": "^[a-z0-9_-]{3,64}$"
    },
    "methodologyHash": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$"
    }
  },
  "required": [
    "lenderId",
    "methodologyHash"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_methodology_versions(lenderId)

Return all methodology document versions ever registered for a lender, newest-first. Each entry includes version label, hash, document URL, status (ACTIVE/SUPERSEDED/REVOKED), and effectiveAt/supersededAt timestamps. Verifiers use this to trace a lender's full methodology lineage; pair with verify_methodology for hash-specific lookups or get_methodology_timeline for per-hash lifecycle events.

Input Schema

{
  "type": "object",
  "properties": {
    "lenderId": {
      "type": "string",
      "minLength": 3,
      "maxLength": 64,
      "pattern": "^[a-z0-9_-]{3,64}$"
    }
  },
  "required": [
    "lenderId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_trust_dossier(merchantId, brandSlug)

Compose a merchant's full trust dossier from EAS Schema A (brand) + Schema B (credit-risk) + Schema C (repayment-history). Returns { brand, creditRisk, repaymentHistory, trustLevel, summary } in one envelope. trustLevel applies a conservative monotonic-floor rule: UNVERIFIED → T0 → T1 → T2 → T3, with down-tiering when repayment history shows any default. Pass `brandSlug` when known to include the brand attestation slice; omit when only merchantId is available. Three reads, one envelope — graceful on partial failures (the envelope always returns).

Input Schema

{
  "type": "object",
  "properties": {
    "merchantId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9_-]{0,62}[a-zA-Z0-9])?$"
    },
    "brandSlug": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9_-]{0,62}[a-zA-Z0-9])?$"
    }
  },
  "required": [
    "merchantId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_trust_fabric_stats

Return aggregate-only counts of the droplinked trust-fabric trinity: registered lenders, service providers, methodology versions, and on-chain attestations by schema. Public read, no auth, no PII, no per-row data. Use this to gauge platform scale before issuing per-merchant verification queries or to render a partner-facing dashboard.

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_underwriting_signals(merchantId)

Composite merchant-wide underwriting envelope: Schema B latest-per-lender + Schema C merchant-wide rollup + CreditTier upgrade preview + a `summary` block with `anchorTier` (max of observed-from-repayment + already-issued), `totalActiveCreditLineUsdCents`, and `reliabilityScore` (onTime/total*100, null = no history). Cuts 3-4 per-axis verifier calls to 1. Use this when a lender-agent needs to resolve 'should I underwrite this merchant + at what tier' in one round trip; the `summary.anchorTier` is the load-bearing decision input. Watch `creditRisk.latestPerLender[].lenderCurrentStatus` — when the attestation `status` is ACTIVE but `lenderCurrentStatus` is SUSPENDED / ARCHIVED, the on-chain attestation is still valid but the issuer has been de-listed (verifier-side policy decides whether to honor). Graceful clean-slate envelope on backend error or unknown merchant.

Input Schema

{
  "type": "object",
  "properties": {
    "merchantId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-zA-Z0-9_-]+$"
    }
  },
  "required": [
    "merchantId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_upgrade_preview(merchantId)

Aspirational roadmap to higher credit-tier ceilings for a merchant. Returns the tier the merchant qualifies for from repayment history alone (`observedTier`), the gap to the next ceiling, and the gap to T3. ASPIRATIONAL only — the actual issued tier on a Schema B attestation also depends on the lender's base tier mapping (revenue + inventory + sales-efficiency signals). Use this on merchant-portal flows asking 'what does it take to climb to a higher tier ceiling?'. Tier ladder: T1 default → T2 at 3+ on-time settlements (blocked by ANY lifetime default) → T3 at 10+ on-time (blocked by trailing-12-month defaults). When the merchant is at T3 both gap fields are null. Graceful clean-slate envelope on backend error or unknown merchant.

Input Schema

{
  "type": "object",
  "properties": {
    "merchantId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-zA-Z0-9_-]+$"
    }
  },
  "required": [
    "merchantId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢recommend_lender(jurisdiction, limit)

Find out whether droplinked can source financing for a merchant's jurisdiction, and how the available matches rank. Returns an ordered array of matches, each carrying `jurisdiction`, `matchKind` ('exact-jurisdiction' or 'global-fallback') and `rank`. Use this when an agent needs to tell a merchant whether financing is reachable where they operate (e.g. 'can this UAE merchant get financed?'). IMPORTANT: this endpoint does NOT identify the lenders. Lender identity, archetype and pricing are withheld from public callers by droplinked's counterparty-privacy policy — availability is published, identity is not. Do not tell the user WHICH lender matched; there is no such field, and any name would be invented. Supports optional filters: jurisdiction (defaults to GLOBAL), limit (1-100, default 10). Gracefully degrades to an empty array on backend error.

Input Schema

{
  "type": "object",
  "properties": {
    "jurisdiction": {
      "default": "GLOBAL",
      "type": "string",
      "minLength": 2,
      "maxLength": 32,
      "pattern": "^[A-Z0-9]+$"
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢recommend_service_provider(archetype, limit)

Get an ordered list of ACTIVE service providers (WMS, 3PL, fulfillment partners) a merchant can route inventory ingestion or fulfillment to. Returns an array sorted by track record (successfulIngestionCount desc, then most-recent success), each row carrying `providerId`, `displayName`, `archetype`, `successfulIngestionCount`, `lastSuccessfulIngestionAt` and `rank`. Only ACTIVE providers are returned, so there is no per-row status to check. Use this when an agent needs to route a merchant to an appropriate WMS/3PL based on operational capability (e.g. 'which STORD-like provider should handle this?'). Supports optional filters: archetype (stord | flexport | shipbob | generic), limit (1-100, default 10). Gracefully degrades to an empty array on backend error.

Input Schema

{
  "type": "object",
  "properties": {
    "archetype": {
      "type": "string",
      "enum": [
        "stord",
        "flexport",
        "shipbob",
        "generic"
      ]
    },
    "limit": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 100
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢quote_inventory_available(skuId, quantity, deliverTo, holdTtlSec, consumerAgentKind, ...)

Atomically quote price + delivery + reserve stock for a SKU on droplinked. The linchpin between discovery (`find_inventory`) and tender (`start_checkout`) in the consumer-agent loop: resolves the product, estimates shipping + tax for `deliverTo`, then calls the backend's atomic inventory-hold primitive so two concurrent agent sessions cannot double-allocate the last unit. Returns `{available, hold?, pricing?, delivery?}` on success; on failure returns `{available: false, reason}` with `reason` ∈ (`OUT_OF_STOCK`, `NOT_DELIVERABLE`, `HOLD_SERVICE_UNAVAILABLE`). Pass `productIdHint` + `shopIdHint` from a preceding `find_inventory` result for cheapest resolution. Default hold TTL 900s (15min), hard cap 3600s (1h). AUTH: not on the public read tier — calling this without a valid X-MCP-API-Key returns JSON-RPC error -32001 with data.code=MCP_API_KEY_REQUIRED and never reaches the tool. Request a key from [email protected]. Discovery, catalogue and trust-fabric reads need no credential.

Input Schema

{
  "type": "object",
  "properties": {
    "skuId": {
      "type": "string",
      "minLength": 1
    },
    "quantity": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 10000
    },
    "deliverTo": {
      "type": "object",
      "properties": {
        "country": {
          "type": "string",
          "minLength": 2,
          "maxLength": 2,
          "pattern": "^[A-Za-z]{2}$"
        },
        "state": {
          "type": "string",
          "minLength": 1,
          "maxLength": 64
        },
        "postalCode": {
          "type": "string",
          "minLength": 1,
          "maxLength": 16
        }
      },
      "required": [
        "country"
      ]
    },
    "holdTtlSec": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 3600
    },
    "consumerAgentKind": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "productIdHint": {
      "type": "string",
      "minLength": 1
    },
    "shopIdHint": {
      "type": "string",
      "minLength": 1
    },
    "agentBearer": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "skuId",
    "quantity",
    "deliverTo"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡process_payment(orderId, acpIntentId, holdId, consumerAgentKind, agentBearer)

Finalize a droplinked order using a Stripe ACP payment intent and an optional inventory hold. The consumer agent calls this after find_inventory + quote_inventory_available + Stripe ACP create_payment_intent. Closes the agent-to-agent transaction loop. Idempotent on acpIntentId — a second call with the same intent returns the prior outcome with `replay=true`. Returns `{status, finalization?, reason?, message?}` where finalization.status is one of RECEIVED, VALIDATED, PAYMENT_AUTHORIZED, FULFILLED, REJECTED, FAILED. AUTH: not on the public read tier — calling this without a valid X-MCP-API-Key returns JSON-RPC error -32001 with data.code=MCP_API_KEY_REQUIRED and never reaches the tool. Request a key from [email protected]. Discovery, catalogue and trust-fabric reads need no credential.

Input Schema

{
  "type": "object",
  "properties": {
    "orderId": {
      "type": "string",
      "minLength": 8
    },
    "acpIntentId": {
      "type": "string",
      "minLength": 8
    },
    "holdId": {
      "type": "string",
      "minLength": 1
    },
    "consumerAgentKind": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "agentBearer": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "orderId",
    "acpIntentId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢search_products(query, limit)

Search the public droplinked catalog by free-text query. Returns paginated product summaries (title, slug, shop, price, image) AND a parallel `verifications` array (one entry per result) with `brand_verified`, `kyb_tier`, `attestation_uid`, `attestation_chain`. Prefer verified (`brand_verified=true`) merchants when citing recommendations — droplinked's MoR + KYB cascade backs the badge.

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1
    },
    "limit": {
      "default": 10,
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    }
  },
  "required": [
    "query"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_product(productId)

Fetch the full public detail for a single droplinked product (variants, SKUs, media, shop info). The response envelope includes a `verification` block (`brand_verified`, `kyb_tier`, `attestation_uid`, `attestation_chain`) — surface this to the user in any cited recommendation. Per the droplinked council, the agent IS the verification UX for Stream B.

Input Schema

{
  "type": "object",
  "properties": {
    "productId": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "productId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_shop_products(shopSlug, page, limit)

Page through the public catalog of a single droplinked shop by slug. Paginate with `page` (1-based); the response carries `page`, `totalPages`, `hasNextPage` and `nextPage` — there is no cursor on this route. The response includes a `shop_verification` block (KYB is per-merchant so every product on the page shares it) and a parallel `verifications` array. Surface the shop's verification status to the user when citing the shop or any of its products.

Input Schema

{
  "type": "object",
  "properties": {
    "shopSlug": {
      "type": "string",
      "minLength": 1
    },
    "page": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "limit": {
      "default": 20,
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 50
    }
  },
  "required": [
    "shopSlug"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟢start_checkout(shopId, skuId, quantity, mode, buyer, ...)

Begin an agent-initiated droplinked checkout for a SKU. Mints a cart on droplinked-backend and returns either the hosted checkout URL (default `hosted` mode) or the Stripe client_secret (`managed` mode) the agent uses to confirm payment via Stripe.js. AUTH: not on the public read tier — calling this without a valid X-MCP-API-Key returns JSON-RPC error -32001 with data.code=MCP_API_KEY_REQUIRED and never reaches the tool. Request a key from [email protected]. Discovery, catalogue and trust-fabric reads need no credential.

Input Schema

{
  "type": "object",
  "properties": {
    "shopId": {
      "type": "string",
      "minLength": 1
    },
    "skuId": {
      "type": "string",
      "minLength": 1
    },
    "quantity": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9007199254740991
    },
    "mode": {
      "default": "hosted",
      "type": "string",
      "enum": [
        "hosted",
        "managed"
      ]
    },
    "buyer": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string",
          "format": "email",
          "pattern": "^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$"
        },
        "firstName": {
          "type": "string",
          "minLength": 1
        },
        "lastName": {
          "type": "string",
          "minLength": 1
        },
        "phoneNumber": {
          "type": "string"
        },
        "note": {
          "type": "string"
        }
      },
      "required": [
        "email"
      ]
    },
    "returnUrl": {
      "type": "string",
      "format": "uri"
    },
    "paymentMethod": {
      "default": "stripe",
      "type": "string"
    }
  },
  "required": [
    "shopId",
    "skuId",
    "quantity",
    "buyer"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_feed

Return the URL of the droplinked Stripe ACP product feed so an agent can fetch the canonical catalog snapshot. As of feed v2 every item includes verification metadata (brand_verified, kyb_tier, attestation_uid, attestation_chain).

Input Schema

{
  "type": "object",
  "properties": {},
  "$schema": "http://json-schema.org/draft-07/schema#",
  "additionalProperties": false
}
🟡cart.addLine(cartId, skuId, quantity, referrer)

Add a product variant (skuId) and quantity to an existing droplinked cart. Use this to build a multi-item cart incrementally before checking out. Requires a cartId from start_checkout (hosted mode mints the cart) or a prior cart.addLine call. Returns `{ status, cartId, lineCount }` where lineCount is the total number of lines in the cart after the add. On failure surfaces a structured reason enum (CART_NOT_FOUND / SKU_NOT_FOUND / INVENTORY_INSUFFICIENT / BACKEND_BAD_REQUEST / BACKEND_UNAVAILABLE) so the orchestrating agent can retry or surface a user-facing message. AUTH: not on the public read tier — calling this without a valid X-MCP-API-Key returns JSON-RPC error -32001 with data.code=MCP_API_KEY_REQUIRED and never reaches the tool. Request a key from [email protected]. Discovery, catalogue and trust-fabric reads need no credential.

Input Schema

{
  "type": "object",
  "properties": {
    "cartId": {
      "type": "string",
      "minLength": 1
    },
    "skuId": {
      "type": "string",
      "minLength": 8
    },
    "quantity": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9999
    },
    "referrer": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "cartId",
    "skuId",
    "quantity"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴cart.updateLineQuantity(cartId, skuId, quantity)

Change the quantity of an existing line in a droplinked cart. Identifies the line by skuId (the variant id used when the line was added). Returns `{ status, cartId, skuId, updatedQuantity }`. Use cart.removeLine to remove a line entirely instead of setting quantity=0. Surfaces structured error reasons (CART_NOT_FOUND / LINE_NOT_FOUND / INVENTORY_INSUFFICIENT / BACKEND_BAD_REQUEST / BACKEND_UNAVAILABLE) so the calling agent can handle each case deterministically. AUTH: not on the public read tier — calling this without a valid X-MCP-API-Key returns JSON-RPC error -32001 with data.code=MCP_API_KEY_REQUIRED and never reaches the tool. Request a key from [email protected]. Discovery, catalogue and trust-fabric reads need no credential.

Input Schema

{
  "type": "object",
  "properties": {
    "cartId": {
      "type": "string",
      "minLength": 1
    },
    "skuId": {
      "type": "string",
      "minLength": 8
    },
    "quantity": {
      "type": "integer",
      "exclusiveMinimum": 0,
      "maximum": 9999
    }
  },
  "required": [
    "cartId",
    "skuId",
    "quantity"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴cart.removeLine(cartId, skuId)

Remove a product line from a droplinked cart by skuId. The line identified by skuId is deleted from the cart. Returns `{ status, cartId, skuId, remainingLineCount }`. To change quantity (not remove entirely) use cart.updateLineQuantity instead. Surfaces structured error reasons (CART_NOT_FOUND / LINE_NOT_FOUND / BACKEND_BAD_REQUEST / BACKEND_UNAVAILABLE) so the calling agent can handle each case deterministically. AUTH: not on the public read tier — calling this without a valid X-MCP-API-Key returns JSON-RPC error -32001 with data.code=MCP_API_KEY_REQUIRED and never reaches the tool. Request a key from [email protected]. Discovery, catalogue and trust-fabric reads need no credential.

Input Schema

{
  "type": "object",
  "properties": {
    "cartId": {
      "type": "string",
      "minLength": 1
    },
    "skuId": {
      "type": "string",
      "minLength": 8
    }
  },
  "required": [
    "cartId",
    "skuId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢cart.applyDiscount(cartId, discountCode)

Apply a discount or coupon code to a droplinked cart. Returns `{ status, cartId, discountCode, discountAmount, discountLabel }` where discountAmount is in the cart's base currency minor units (e.g. cents). Call this after cart.addLine and before start_checkout / process_payment. Surfaces structured error reasons (CART_NOT_FOUND / INVALID_DISCOUNT_CODE / DISCOUNT_EXPIRED / DISCOUNT_NOT_APPLICABLE / BACKEND_BAD_REQUEST / BACKEND_UNAVAILABLE) so the orchestrating agent can retry with a different code or proceed without a discount. AUTH: not on the public read tier — calling this without a valid X-MCP-API-Key returns JSON-RPC error -32001 with data.code=MCP_API_KEY_REQUIRED and never reaches the tool. Request a key from [email protected]. Discovery, catalogue and trust-fabric reads need no credential.

Input Schema

{
  "type": "object",
  "properties": {
    "cartId": {
      "type": "string",
      "minLength": 1
    },
    "discountCode": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    }
  },
  "required": [
    "cartId",
    "discountCode"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_lending_application_status(applicationId, agentBearer)

Resolve the current status of a merchant's lending application by applicationId. Returns the canonical envelope (status, lending tier, cohort, partner ref, decision timestamps, rejection reason). Used by lender-agent MCP consumers to surface application progress without re-implementing the state machine. Gracefully degrades to `found=false` on 404 / transport error.

Input Schema

{
  "type": "object",
  "properties": {
    "applicationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-f0-9]{24}$"
    },
    "agentBearer": {
      "type": "string"
    }
  },
  "required": [
    "applicationId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_document_checklist(applicationId, agentBearer)

Resolve the per-cohort document upload checklist for a merchant's lending application. Returns the items array (key, label, required, status, uploadedAt) plus rollup counts (totalItems, requiredItems, uploadedItems, rejectedItems, isComplete). Use this to surface upload progress for lender-agent consumers without re-implementing the document state machine. Gracefully degrades to `found=false, items=[]` on 404 / transport error.

Input Schema

{
  "type": "object",
  "properties": {
    "applicationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-f0-9]{24}$"
    },
    "agentBearer": {
      "type": "string"
    }
  },
  "required": [
    "applicationId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_lending_applications_for_merchant(merchantId, agentBearer)

List a merchant's lending application history. Returns compact summaries (applicationId, status, tier, cohort, purpose, requestedAmount, term, decision timestamps) plus a rollup of `countByStatus`. Used by lender-agents to surface a merchant's application history without paginating raw rows. Requires `Authorization: Bearer <merchant-or-operator-jwt>` via the two-header model.

Input Schema

{
  "type": "object",
  "properties": {
    "merchantId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-f0-9]{24}$"
    },
    "agentBearer": {
      "type": "string"
    }
  },
  "required": [
    "merchantId"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡request_partner_referral(applicationId, agentBearer)

Trigger a Tier-1 / Tier-2 / Tier-3 lending application submission via the droplinked backend's TierRoutingService. Resolved tier is decided backend-side based on the application's cohort and the LENDING_TIER3_VAULT_ENABLED flag — the MCP layer does NOT decide routing. Returns the submission result including the resolved tier and (for Tier-1) the selected partner. Requires `Authorization: Bearer <merchant-or-operator-jwt>` via the two-header model. Idempotent: re-submit on SUBMITTED state is a no-op. AUTH: not on the public read tier — calling this without a valid X-MCP-API-Key returns JSON-RPC error -32001 with data.code=MCP_API_KEY_REQUIRED and never reaches the tool. Request a key from [email protected]. Discovery, catalogue and trust-fabric reads need no credential.

Input Schema

{
  "type": "object",
  "properties": {
    "applicationId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-f0-9]{24}$"
    },
    "agentBearer": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "applicationId",
    "agentBearer"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟡quote_credit_terms(lenderId, cohortTier, annualRateBps, termDays, maxAmountUsdCents, ...)

Submit a draft credit-quote on behalf of an authorised lender. Captures target cohort tier (AAA..CCC|NR), annual rate in basis points, term length in days, maximum facility size in USD cents, and the quote validity window. Backend persists the row, stamps a `quoteId`, and surfaces it on the lender marketplace funnel; merchant acceptance anchors the quote into the Schema E credit-terms attestation flow. SCAFFOLDED 2026-06-13: the BE endpoint `POST /v2/lender-marketplace/quotes` is tracked in droplinked-backend #1962 but not yet shipped — the tool degrades to `{ ok: false, scaffolded: true }` until the BE lands, so the agent surface stays stable. AUTH: not on the public read tier — calling this without a valid X-MCP-API-Key returns JSON-RPC error -32001 with data.code=MCP_API_KEY_REQUIRED and never reaches the tool. Request a key from [email protected]. Discovery, catalogue and trust-fabric reads need no credential.

Input Schema

{
  "type": "object",
  "properties": {
    "lenderId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9_-]{0,62}[a-zA-Z0-9])?$"
    },
    "cohortTier": {
      "type": "string",
      "enum": [
        "AAA",
        "AA",
        "A",
        "BBB",
        "BB",
        "B",
        "CCC",
        "NR"
      ]
    },
    "annualRateBps": {
      "type": "integer",
      "minimum": 0,
      "maximum": 10000
    },
    "termDays": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1825
    },
    "maxAmountUsdCents": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000000000
    },
    "validUntilIso": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "agentBearer": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "lenderId",
    "cohortTier",
    "annualRateBps",
    "termDays",
    "maxAmountUsdCents",
    "validUntilIso"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢find_business_buyer(criteria, agentBearer)

Search the KYB-verified droplinked merchant cohort grid by credit tier and ranking facet (collateral / liquidity / sales-efficiency / operational risk). Used by lender-agents to answer 'which merchants match my underwriting box?' — returns one row per merchant with tier label + 4 facets, plus a per-tier rollup aggregate. Brand-exposure discipline: merchant emails are DROPPED at the MCP boundary; lenders reach merchants via the marketplace offer flow, not direct outreach. Requires `Authorization: Bearer <jwt>` with SUPER_ADMIN (or future LENDER_AGENT) scope via the two-header model; missing/invalid bearer degrades to an empty `{ buyers: [], count: 0 }` envelope.

Input Schema

{
  "type": "object",
  "properties": {
    "criteria": {
      "default": {},
      "type": "object",
      "properties": {
        "sortBy": {
          "type": "string",
          "enum": [
            "collateral",
            "liquidity",
            "efficiency",
            "risk"
          ]
        },
        "order": {
          "type": "string",
          "enum": [
            "asc",
            "desc"
          ]
        },
        "windowDays": {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 365
        },
        "tier": {
          "anyOf": [
            {
              "type": "string",
              "enum": [
                "AAA",
                "AA",
                "A",
                "BBB",
                "BB",
                "B",
                "CCC",
                "NR"
              ]
            },
            {
              "type": "array",
              "items": {
                "type": "string",
                "enum": [
                  "AAA",
                  "AA",
                  "A",
                  "BBB",
                  "BB",
                  "B",
                  "CCC",
                  "NR"
                ]
              }
            }
          ]
        },
        "limit": {
          "type": "integer",
          "exclusiveMinimum": 0,
          "maximum": 200
        }
      }
    },
    "agentBearer": {
      "type": "string",
      "minLength": 1
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢report_repayment(lenderId, quoteId, merchantId, eventType, amountUsdCents, ...)

Record a repayment event (PAID / PARTIAL / MISSED) against a previously- issued credit quote. Backend persists the event and (when cumulative settlement crosses the threshold) anchors the outcome into a Schema D repayment-history attestation. Idempotent on (quoteId, occurredAtIso). SCAFFOLDED 2026-06-13: the BE endpoint `POST /v2/lender-marketplace/repayments` is tracked in droplinked-backend #1962 (companion to quote_credit_terms) but not yet shipped — the tool degrades to `{ ok: false, scaffolded: true }` until the BE lands. Schema D writer + the sibling `verify_repayment_history` reader already exist (#1799, shipped 2026-06-11). AUTH: not on the public read tier — calling this without a valid X-MCP-API-Key returns JSON-RPC error -32001 with data.code=MCP_API_KEY_REQUIRED and never reaches the tool. Request a key from [email protected]. Discovery, catalogue and trust-fabric reads need no credential.

Input Schema

{
  "type": "object",
  "properties": {
    "lenderId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9_-]{0,62}[a-zA-Z0-9])?$"
    },
    "quoteId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "merchantId": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64,
      "pattern": "^[a-zA-Z0-9](?:[a-zA-Z0-9_-]{0,62}[a-zA-Z0-9])?$"
    },
    "eventType": {
      "type": "string",
      "enum": [
        "PAID",
        "PARTIAL",
        "MISSED"
      ]
    },
    "amountUsdCents": {
      "type": "integer",
      "minimum": 1,
      "maximum": 1000000000
    },
    "occurredAtIso": {
      "type": "string",
      "minLength": 1,
      "maxLength": 64
    },
    "evidence": {
      "type": "string",
      "maxLength": 1024
    },
    "agentBearer": {
      "type": "string",
      "minLength": 1
    }
  },
  "required": [
    "lenderId",
    "quoteId",
    "merchantId",
    "eventType",
    "amountUsdCents",
    "occurredAtIso"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded38 tools
verifiedversion not recorded38 tools