{"serverId":"mcp-registry/com.droplinked.mcp/server","tools":[{"name":"cart.addLine","fixed":{"name":"cart_addLine","description":"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","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["cartId","skuId","quantity"],"properties":{"skuId":{"type":"string","minLength":8},"cartId":{"type":"string","minLength":1},"quantity":{"type":"integer","maximum":9999,"exclusiveMinimum":0},"referrer":{"type":"string","minLength":1}}},"annotations":{"title":"Add to Cart","readOnlyHint":false,"openWorldHint":false,"idempotentHint":false,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"cart.addLine\" → \"cart_addLine\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":242,"tokensAfter":242},{"name":"cart.applyDiscount","fixed":{"name":"cart_applyDiscount","description":"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 co","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["cartId","discountCode"],"properties":{"cartId":{"type":"string","minLength":1},"discountCode":{"type":"string","maxLength":64,"minLength":1}}},"annotations":{"title":"Apply Cart Discount","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"cart.applyDiscount\" → \"cart_applyDiscount\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":219,"tokensAfter":219},{"name":"cart.removeLine","fixed":{"name":"cart_removeLine","description":"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.\n\nAUTH: not on the public read tier — calling this without a valid X-MCP-API-Key re","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["cartId","skuId"],"properties":{"skuId":{"type":"string","minLength":8},"cartId":{"type":"string","minLength":1}}},"annotations":{"title":"Remove Cart Line","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"cart.removeLine\" → \"cart_removeLine\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":210,"tokensAfter":210},{"name":"cart.updateLineQuantity","fixed":{"name":"cart_updateLineQuantity","description":"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.\n\nAUTH: not on the public read tie","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["cartId","skuId","quantity"],"properties":{"skuId":{"type":"string","minLength":8},"cartId":{"type":"string","minLength":1},"quantity":{"type":"integer","maximum":9999,"exclusiveMinimum":0}}},"annotations":{"title":"Update Cart Line","readOnlyHint":false,"openWorldHint":false,"idempotentHint":true,"destructiveHint":false}},"changes":[{"kind":"name","detail":"Renamed \"cart.updateLineQuantity\" → \"cart_updateLineQuantity\" (letters, digits, _ and - only; max 64). Keep the old name as an alias for a release if clients already call it.","verify":true}],"tokensBefore":234,"tokensAfter":234}],"toolsChanged":4,"tokensSaved":0,"todo":[{"tool":"cart_addLine","params":["skuId","cartId","quantity","referrer"]},{"tool":"cart_applyDiscount","params":["cartId","discountCode"]},{"tool":"cart_removeLine","params":["skuId","cartId"]},{"tool":"cart_updateLineQuantity","params":["skuId","cartId","quantity"]},{"tool":"find_business_buyer","params":["criteria","agentBearer"]},{"tool":"find_inventory","params":["limit","query","source","currency","maxPrice","minPrice","brandSlug","inStockOnly","verifiedBrand"]},{"tool":"find_merchant","params":["name","slug","limit","category"]},{"tool":"get_brand_attestation_status","params":["shopSlug"]},{"tool":"get_document_checklist","params":["agentBearer","applicationId"]},{"tool":"get_lender_history","params":["lenderId"]},{"tool":"get_lending_application_status","params":["agentBearer","applicationId"]},{"tool":"get_methodology_timeline","params":["lenderId","methodologyHash"]},{"tool":"get_methodology_versions","params":["lenderId"]},{"tool":"get_product","params":["productId"]},{"tool":"get_trust_dossier","params":["brandSlug","merchantId"]},{"tool":"get_underwriting_signals","params":["merchantId"]},{"tool":"get_upgrade_preview","params":["merchantId"]},{"tool":"list_lending_applications_for_merchant","params":["merchantId","agentBearer"]},{"tool":"list_shop_products","params":["page","limit","shopSlug"]},{"tool":"process_payment","params":["holdId","orderId","acpIntentId","agentBearer","consumerAgentKind"]},{"tool":"quote_credit_terms","params":["lenderId","termDays","cohortTier","agentBearer","annualRateBps","validUntilIso","maxAmountUsdCents"]},{"tool":"quote_inventory_available","params":["skuId","quantity","deliverTo","holdTtlSec","shopIdHint","agentBearer","productIdHint","consumerAgentKind"]},{"tool":"recommend_lender","params":["limit","jurisdiction"]},{"tool":"recommend_service_provider","params":["limit","archetype"]},{"tool":"report_repayment","params":["quoteId","evidence","lenderId","eventType","merchantId","agentBearer","occurredAtIso","amountUsdCents"]},{"tool":"request_brand_attestation","params":["notes","shopSlug"]},{"tool":"request_partner_referral","params":["agentBearer","applicationId"]},{"tool":"search_products","params":["limit","query"]},{"tool":"start_checkout","params":["mode","buyer","skuId","shopId","quantity","returnUrl","paymentMethod"]},{"tool":"verify_brand_attestation","params":["brandSlug"]},{"tool":"verify_credit_risk","params":["lenderId","merchantId"]},{"tool":"verify_cross_attestation","params":["mode","limit","rootUid"]},{"tool":"verify_lender","params":["lenderId"]},{"tool":"verify_methodology","params":["lenderId","methodologyHash"]},{"tool":"verify_repayment_history","params":["merchantId"]}],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}