droplinked
by mcp.droplinked.com · remote · no sign-in to list tools · v0.1.2 · published by com.droplinked.mcp
Agentic commerce + trust MCP: discover, verify, and transact across droplinked's merchant network.
38 tools: 1 can delete or cancel things, 1 do something that can't be undone, 10 change things and 26 only read.
Scanned Oct 21, 2026
- Deletes or cancels1Claude Code: deny: see these tools
- Can't be undone1Claude Code: ask: see these tools
- Changes things10Claude Code: ask: see these tools
- Only reads26Claude Code: allow: see these tools
13 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http server https://mcp.droplinked.com/mcpFindings
Matches of fixed checks, with the text they matched.
- Highrecommend_lender
The description contains "Do not tell the user", an instruction to keep something from the user.
What this check looks forMatched text
description: "...lability is published, identity is not. Do not tell the user WHICH lender matched; there is no such..."
- Warncart.removeLine
The server marks "cart.removeLine" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "cart.removeLine" says "remove": a word for removing or ending something.
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
- Infoprocess_payment
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
- Infostart_checkout
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
Show 7 more findingsShow fewer
- Infocart.addLine
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
- Infocart.removeLine
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
- Inforeport_repayment
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
38 tools
Deletes or cancels 1Claude Code: deny
cart.removeLineRemove a product line from a droplinked cart by skuId.2 findings
Why it is in this group
- The name "cart.removeLine" says "remove": a word for removing or ending something.
- The server marks it not destructive (destructiveHint: false), but an annotation never lowers a class.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
- Warn
The server marks "cart.removeLine" not destructive (destructiveHint: false), and its own name, description or input give the class "destructive".
What this check looks forMatched text
annotations: {"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "cart.removeLine" says "remove": a word for removing or ending something.
Description, as the server wrote it 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 ops@droplinked.com. Discovery, catalogue and trust-fabric reads need no credential.
Annotations the server declares
- title: Remove Cart Line
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Can't be undone 1Claude Code: ask
process_paymentFinalize a droplinked order using a Stripe ACP payment intent and an optional inventory hold.Reads text others write1 finding
Why it is in this group
- The name "process_payment" says "payment": a word that usually means money moves, which cannot be taken back.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
Description, as the server wrote it 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 ops@droplinked.com. Discovery, catalogue and trust-fabric reads need no credential.
Annotations the server declares
- title: Process Payment
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
Changes things 10Claude Code: ask
cart.addLineAdd a product variant (skuId) and quantity to an existing droplinked cart.1 finding
Why it is in this group
- The name "cart.addLine" says "add": a word for a change.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
Description, as the server wrote it 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 ops@droplinked.com. Discovery, catalogue and trust-fabric reads need no credential.
Annotations the server declares
- title: Add to Cart
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: false
cart.applyDiscountApply a discount or coupon code to a droplinked cart.1 finding
Why it is in this group
- The name "cart.applyDiscount" says "apply": a word for a change.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
Description, as the server wrote it 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 ops@droplinked.com. Discovery, catalogue and trust-fabric reads need no credential.
Annotations the server declares
- title: Apply Cart Discount
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
cart.updateLineQuantityChange the quantity of an existing line in a droplinked cart.1 finding
Why it is in this group
- The name "cart.updateLineQuantity" says "update": a word for a change.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
Description, as the server wrote it 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 ops@droplinked.com. Discovery, catalogue and trust-fabric reads need no credential.
Annotations the server declares
- title: Update Cart Line
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
quote_credit_termsSubmit a draft credit-quote on behalf of an authorised lender.Reads text others write1 finding
Why it is in this group
- The description's first verb is "submit": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
Description, as the server wrote it 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 ops@droplinked.com. Discovery, catalogue and trust-fabric reads need no credential.
Annotations the server declares
- title: Quote Credit Terms
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
quote_inventory_availableAtomically quote price + delivery + reserve stock for a SKU on droplinked.Reads text others write1 finding
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
Description, as the server wrote it 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 ops@droplinked.com. Discovery, catalogue and trust-fabric reads need no credential.
Annotations the server declares
- title: Quote & Hold Inventory
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
report_repaymentRecord a repayment event (PAID / PARTIAL / MISSED) against a previously- issued credit quote.Reads text others write1 finding
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
Description, as the server wrote it 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 ops@droplinked.com. Discovery, catalogue and trust-fabric reads need no credential.
Annotations the server declares
- title: Report Repayment
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
request_brand_attestationSubmit a brand attestation request for a droplinked shop.Reads text others write1 finding
Why it is in this group
- The name "request_brand_attestation" says "request": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
Description, as the server wrote it 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 ops@droplinked.com. Discovery, catalogue and trust-fabric reads need no credential.
Annotations the server declares
- title: Request Brand Attestation
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
request_partner_referralTrigger a Tier-1 / Tier-2 / Tier-3 lending application submission via the droplinked backend's TierRoutingService.Reads text others write1 finding
Why it is in this group
- The name "request_partner_referral" says "request": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
Description, as the server wrote it 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 ops@droplinked.com. Discovery, catalogue and trust-fabric reads need no credential.
Annotations the server declares
- title: Request Partner Referral
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
start_checkoutBegin an agent-initiated droplinked checkout for a SKU.Reads text others writeCan send data out1 finding
Why it is in this group
- The name "start_checkout" says "start": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe input takes a destination (input.buyer.phoneNumber): what the tool writes goes there.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...atalogue and trust-fabric reads need no credential."
Description, as the server wrote it 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 ops@droplinked.com. Discovery, catalogue and trust-fabric reads need no credential.
Annotations the server declares
- title: Start Checkout
- readOnlyHint: false
- destructiveHint: false
- idempotentHint: false
- openWorldHint: true
verify_methodologyLook up a lender's underwriting methodology by lenderId.Reads text others writeNo findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Verify Methodology
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
Only reads 26Claude Code: allow
find_affiliate_programsDiscover droplinked affiliate programs by vertical, commission rate, payout type, and on-chain attestation status.No findings
Why it is in this group
- The name "find_affiliate_programs" says "find": a word for reading.
Description, as the server wrote it 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 }).
Annotations the server declares
- title: Find Affiliate Programs
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
find_business_buyerSearch the KYB-verified droplinked merchant cohort grid by credit tier and ranking facet (collateral / liquidity / sales-efficiency / operational risk).No findings
Why it is in this group
- The name "find_business_buyer" says "find": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Find Business Buyer
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
find_inventoryDiscover 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 ca…Reads text others writeNo findings
Why it is in this group
- The name "find_inventory" says "find": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Find Inventory
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
find_merchantFind a droplinked merchant by slug, name, or category.No findings
Why it is in this group
- The name "find_merchant" says "find": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Find Merchant
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
get_brand_attestation_statusPoll the brand attestation request status for a droplinked shop.Reads text others writeNo findings
Why it is in this group
- The name "get_brand_attestation_status" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get Brand Attestation Status
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
get_document_checklistResolve the per-cohort document upload checklist for a merchant's lending application.Reads private dataNo findings
Why it is in this group
- The name "get_document_checklist" says "get": a word for reading.
What it can reach
- private-dataThe name "get_document_checklist" says "get" and "document": it reads documents.
- private-dataThe description's first sentence says "resolve" and "document": it reads documents.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get Document Checklist
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
get_feedReturn the URL of the droplinked Stripe ACP product feed so an agent can fetch the canonical catalog snapshot.Reads text others writeNo findings
Why it is in this group
- The name "get_feed" says "get": a word for reading.
What it can reach
- untrusted-inputThe description's first sentence says "return" and "url": it reads web pages, which anyone can write.
Description, as the server wrote it 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).
Annotations the server declares
- title: Get Product Feed
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
get_lender_historyReturn the public lifecycle timeline (REGISTERED / STATUS_CHANGED / metadata edits) for a registered lender.Reads text others writeNo findings
Why it is in this group
- The name "get_lender_history" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get Lender History
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
get_lending_application_statusResolve the current status of a merchant's lending application by applicationId.Reads text others writeNo findings
Why it is in this group
- The name "get_lending_application_status" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get Lending Application Status
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
get_methodology_timelineReturn the public lifecycle timeline (REGISTERED / SUPERSEDED / REVOKED) for a specific methodology version.Reads text others writeNo findings
Why it is in this group
- The name "get_methodology_timeline" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get Methodology Timeline
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
get_methodology_versionsReturn all methodology document versions ever registered for a lender, newest-first.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_methodology_versions" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "return" and "document": it reads documents.
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get Methodology Versions
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
get_productFetch the full public detail for a single droplinked product (variants, SKUs, media, shop info).No findings
Why it is in this group
- The name "get_product" says "get": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get Product
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
get_trust_dossierCompose a merchant's full trust dossier from EAS Schema A (brand) + Schema B (credit-risk) + Schema C (repayment-history).Reads text others writeNo findings
Why it is in this group
- The name "get_trust_dossier" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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).
Annotations the server declares
- title: Get Trust Dossier
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
get_trust_fabric_statsReturn aggregate-only counts of the droplinked trust-fabric trinity: registered lenders, service providers, methodology versions, and on-chain attestations by schema.Reads text others writeNo findings
Why it is in this group
- The name "get_trust_fabric_stats" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get Trust Fabric Stats
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
get_underwriting_signalsComposite merchant-wide underwriting envelope: Schema B latest-per-lender + Schema C merchant-wide rollup + CreditTier upgrade preview + a `summary` block with `anchorTier` (max of…Reads text others writeNo findings
Why it is in this group
- The name "get_underwriting_signals" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get Underwriting Signals
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
get_upgrade_previewAspirational roadmap to higher credit-tier ceilings for a merchant.Reads text others writeNo findings
Why it is in this group
- The name "get_upgrade_preview" says "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get Upgrade Preview
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
list_lending_applications_for_merchantList a merchant's lending application history.Reads text others writeNo findings
Why it is in this group
- The name "list_lending_applications_for_merchant" says "list": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: List Lending Applications for Merchant
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
list_shop_productsPage through the public catalog of a single droplinked shop by slug.No findings
Why it is in this group
- The name "list_shop_products" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: List Shop Products
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
recommend_lenderFind out whether droplinked can source financing for a merchant's jurisdiction, and how the available matches rank.Reads text others write1 finding
Why it is in this group
- The description's first verb is "find": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Findings
- High
The description contains "Do not tell the user", an instruction to keep something from the user.
What this check looks forMatched text
description: "...lability is published, identity is not. Do not tell the user WHICH lender matched; there is no such..."
Description, as the server wrote it 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.
Annotations the server declares
- title: Recommend Lender
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
recommend_service_providerGet an ordered list of ACTIVE service providers (WMS, 3PL, fulfillment partners) a merchant can route inventory ingestion or fulfillment to.Reads text others writeNo findings
Why it is in this group
- The description's first verb is "get": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Recommend Service Provider
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
search_productsSearch the public droplinked catalog by free-text query.No findings
Why it is in this group
- The name "search_products" says "search": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: Search Products
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: false
verify_brand_attestationResolve the standalone droplinked brand attestation for a single shop slug.Reads text others writeNo findings
Why it is in this group
- The description's first verb is "resolve": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Verify Brand Attestation
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
verify_credit_riskResolve the active EAS credit-risk attestation (Schema B) for a merchant.Reads text others writeNo findings
Why it is in this group
- The description's first verb is "resolve": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Verify Credit Risk
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
verify_cross_attestationResolve EAS Schema D (cross-attestation) peer-trust rows for a given entity.Reads text others writeNo findings
Why it is in this group
- The description's first verb is "resolve": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Verify Cross Attestation
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
verify_lenderResolve the public profile for a lender by lenderId.Reads text others writeNo findings
Why it is in this group
- The description's first verb is "resolve": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Verify Lender
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
verify_repayment_historyResolve a merchant's repayment-history rollup across all lenders from EAS Schema C (repayment-history) attestations.Reads text others writeNo findings
Why it is in this group
- The description's first verb is "resolve": a word for reading.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Verify Repayment History
- readOnlyHint: true
- idempotentHint: true
- openWorldHint: true
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
54 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 1 outbound tool breaks every one.
- Reads private data2
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write27
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out1
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__server__start_checkout"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Remote posture
What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.
Looked at Oct 22, 2026, 14:31 UTC, unchanged since Oct 22, 2026. No credentials were sent and no tool was called. What is looked at.
- Reachable
- yes
- HTTP status of an anonymous initialize
- 200
- tools/list served without credentials
- yes
- Tools that change things, listed without credentials
- 12
- Protocol version
- 2025-06-18
- WWW-Authenticate on 401
- not observed
- resource_metadata in WWW-Authenticate
- none
- RFC 9728 protected resource metadata
- none
- Authorization servers
- none
- Legacy HTTP+SSE transport
- no
- Dynamic client registration
- not observed
- Client ID metadata documents
- not observed
- HighThe whole server
The endpoint served tools/list without credentials, and the list has 12 tools that change things (1 destructive, 1 irreversible, 10 write). Whether a call also works without credentials was not tested: tools are never called.
What this check looks forMatched text
https://mcp.droplinked.com/mcp: tools/list returned 38 tools to an anonymous client, including cart.removeLine (destructive), process_payment (irreversible), request_brand_attestation (write), verify_methodology (write), quote_inventory_available (write) and 7 more
Install
Pinned to version 0.1.2. Values in angle brackets are yours to fill in.
claude mcp add --transport http server https://mcp.droplinked.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__server__find_merchant",
"mcp__server__find_inventory",
"mcp__server__find_affiliate_programs",
"mcp__server__verify_brand_attestation",
"mcp__server__get_brand_attestation_status",
"mcp__server__verify_credit_risk",
"mcp__server__verify_repayment_history",
"mcp__server__verify_cross_attestation",
"mcp__server__verify_lender",
"mcp__server__get_lender_history",
"mcp__server__get_methodology_timeline",
"mcp__server__get_methodology_versions",
"mcp__server__get_trust_dossier",
"mcp__server__get_trust_fabric_stats",
"mcp__server__get_underwriting_signals",
"mcp__server__get_upgrade_preview",
"mcp__server__recommend_lender",
"mcp__server__recommend_service_provider",
"mcp__server__search_products",
"mcp__server__get_product",
"mcp__server__list_shop_products",
"mcp__server__get_feed",
"mcp__server__get_lending_application_status",
"mcp__server__get_document_checklist",
"mcp__server__list_lending_applications_for_merchant",
"mcp__server__find_business_buyer"
],
"ask": [
"mcp__server__request_brand_attestation",
"mcp__server__verify_methodology",
"mcp__server__quote_inventory_available",
"mcp__server__process_payment",
"mcp__server__start_checkout",
"mcp__server__cart_addLine",
"mcp__server__cart_updateLineQuantity",
"mcp__server__cart_applyDiscount",
"mcp__server__request_partner_referral",
"mcp__server__quote_credit_terms",
"mcp__server__report_repayment"
],
"deny": [
"mcp__server__cart_removeLine"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as server. Review it before you use it.
Capability tags behind 28 rules
- mcp__server__find_inventory untrusted-input
- mcp__server__verify_brand_attestation untrusted-input
- mcp__server__request_brand_attestation untrusted-input
- mcp__server__get_brand_attestation_status untrusted-input
- mcp__server__verify_credit_risk untrusted-input
- mcp__server__verify_repayment_history untrusted-input
- mcp__server__verify_cross_attestation untrusted-input
- mcp__server__verify_lender untrusted-input
- mcp__server__get_lender_history untrusted-input
- mcp__server__verify_methodology untrusted-input
- mcp__server__get_methodology_timeline untrusted-input
- mcp__server__get_methodology_versions private-data, untrusted-input
- mcp__server__get_trust_dossier untrusted-input
- mcp__server__get_trust_fabric_stats untrusted-input
- mcp__server__get_underwriting_signals untrusted-input
- mcp__server__get_upgrade_preview untrusted-input
- mcp__server__recommend_lender untrusted-input
- mcp__server__recommend_service_provider untrusted-input
- mcp__server__quote_inventory_available untrusted-input
- mcp__server__process_payment untrusted-input
- mcp__server__start_checkout untrusted-input, outbound
- mcp__server__get_feed untrusted-input
- mcp__server__get_lending_application_status untrusted-input
- mcp__server__get_document_checklist private-data
- mcp__server__list_lending_applications_for_merchant untrusted-input
- mcp__server__request_partner_referral untrusted-input
- mcp__server__quote_credit_terms untrusted-input
- mcp__server__report_repayment untrusted-input