protogrid

Search / so.paddock/cards

Paddock Cards

R0· no sign-in

Send birthday cards, Christmas cards and postcards, printed and mailed for you.

v0.1.4 · active · website · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality82good
Trust83of 100
Uptime, 30 days100%
Latency p50251 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "cards": {
      "type": "http",
      "url": "https://api.paddock.so/agent-commerce/mcp"
    }
  }
}
claude mcp add --transport http cards https://api.paddock.so/agent-commerce/mcp
[mcp_servers.cards]
url = "https://api.paddock.so/agent-commerce/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cards": {
      "type": "remote",
      "url": "https://api.paddock.so/agent-commerce/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "cards": {
      "type": "http",
      "url": "https://api.paddock.so/agent-commerce/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=cards&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vYXBpLnBhZGRvY2suc28vYWdlbnQtY29tbWVyY2UvbWNwIn0%3D"
}
{
  "servers": {
    "cards": {
      "type": "http",
      "url": "https://api.paddock.so/agent-commerce/mcp"
    }
  }
}
{
  "mcpServers": {
    "cards": {
      "httpUrl": "https://api.paddock.so/agent-commerce/mcp"
    }
  }
}
extensions:
  "cards":
    enabled: true
    name: "cards"
    type: streamable_http
    uri: "https://api.paddock.so/agent-commerce/mcp"
    timeout: 300

Quality 82 / 100good

protocol88 · weight 25
  • pass
    protocol.modernsupports 2026-07-28 (server/discover)
  • pass
    protocol.statelessanswers without a session
  • pass
    protocol.transportstreamable HTTP
  • warn
    protocol.list_ttltools/list declares ttlMs 0, so clients re-fetch it on every use
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene94 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations13 of 13 tools declare readOnlyHint or destructiveHint
  • pass
    tools.directory_hintsevery tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
  • warn
    tools.token_costabout 10,376 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
  • pass
    tools.hidden_textno hidden text in tool names, descriptions, schemas or annotations
stability50 · weight 15
  • warn
    stability.changes39 tool changes in 30 days
  • fail
    stability.rug_pull6 tools kept their name but changed most of their description in 30 days; review before trusting them
  • pass
    stability.new_linksno tool change named a new site
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

13 tools, about 10,376 tokens to load them all · tool set 72117f69d1b2 · tools last changed 2026-10-29 · checked 2026-11-14 06:30 UTC

Tool changes

  • list_ordersadded

    Find orders first prepared through this assistant connection with history permission, newest first. Replacements inherit their original order’s history access; revising an unlinked order does not add it. Requires a connected buyer who granted orders:read; the public endpoint returns connection instructions. Returns compact order IDs, dates, totals, card counts and payment/refund states, plus next_cursor. Use read_order with a returned order_id for card details and mailing status; no per-order token is needed with history permission. Excludes expired, erased and revoked orders. Reconnecting starts a separate history. Never use names or addresses to find another buyer’s orders.

  • pay_orderchangeddescription, input schema, output schema
    before

    Start or resume payment for this exact prepared order. Show the exact amount and any returned action_url so the buyer can securely connect Link, approve this purchase, or complete bank authentication. Only the buyer can grant permission; do not ask them for card details, wallet credentials or payment tokens in chat. Call again after they complete that step, respecting retry_after_seconds. Report payment complete only when status is paid; processing and requires_action are not payment success. Changing the order requires a new quote and approval. Payment and printing/mailing are separate; use read_order for fulfillment.

    after · 71% of words in common

    Start or resume payment for this exact prepared order and revision. Show the exact amount and returned action_url for the buyer to connect Link, approve this purchase or complete bank authentication. Only the buyer can approve; never ask for payment credentials in chat. Call again after that step, respecting retry_after_seconds. Confirm payment only when status is paid; processing and requires_action are incomplete. Changing the order requires a new quote and approval. Use read_order for separate printing and mailing progress.

  • delete_private_contentchangeddescription, input schemameaning changed
    before

    Request deletion of unused private uploads in this scope at the buyer’s request. Content required by a paid open order is kept until that order is completed or cancelled and refunded.

    after · 33% of words in common

    Request deletion of unused uploads and compositions in one private scope at the buyer’s request. Returns acceptance and deletion state; it does not cancel an order. Purchased content remains until 90 days after mailing or final cancellation/refund, longer while an order, dispute or legal hold is unresolved.

  • compose_private_cardchangeddescription, input schemameaning changed
    before

    Compose an immutable private card face from uploads in this scope and/or a QR link (a QR-only card needs no upload). Generate a UUID composition_id; retry only with the same ID and identical fields. Returns design_key and design_version 1 for prepare_order.

    after · 38% of words in common

    Create a new immutable card face from this scope’s artwork, logo or QR URL. Requires at least one of those inputs; a QR-only face needs no upload. Returns design_key and design_version for prepare_order or revise_order. Personal message, recipient and mailing details are supplied in the order’s cards array. Reuse an existing composition when no new face is needed.

  • read_private_contentchangeddescription, input schemameaning changed
    before

    List what the buyer uploaded and the private cards composed from it. Use each composition’s design_key with design_version 1 in prepare_order with request_id = scope_id and the same order_access_token, or in revise_order for an existing draft from this scope.

    after · 38% of words in common

    List assets and existing card compositions in one private scope after the buyer uploads. Returns asset IDs with their kinds and each composition’s design_key/version. Reuse an existing composition directly; use compose_private_card only for a new face. For a new purchase, prepare_order uses request_id = scope_id and the same token; existing drafts use revise_order. An empty scope returns empty assets and compositions arrays. An expired scope without checkout or payment returns NOT_FOUND; open a new scope to upload again.

  • open_private_contentchangeddescription, input schema
    before

    Start a card from the buyer’s own photo, artwork, logo or QR link. Returns a private 24-hour upload_url for the buyer to open and choose the file themselves, plus the scope_id and order_access_token to keep for the order. Pass an existing unpaid draft’s order_id and order_access_token together to add a picture to that draft and then revise_order; omit both for a new scope. Assistants cannot upload conversation attachments; send the link. Not needed for catalog cards.

    after · 56% of words in common

    Open a private upload scope for the buyer’s photo, artwork, logo or QR card. Omit both inputs for a new scope, or pass an unpaid order and its token to reopen that draft’s scope. Returns scope_id, a private token, upload_url and expiry. Assistants cannot upload conversation attachments; send the buyer the link, then use read_private_content when they finish. Catalog cards need no upload scope.

  • preview_cardchangeddescription, input schemameaning changed
    before

    Optional, never required to buy. Returns one prepared card exactly as it will print, outside and inside, as images at the current order revision; card_id is required when the order has several cards. If the order changes, preview again. preview_url shows the same images in a browser. Nothing is charged, changed or mailed.

    after · 34% of words in common

    Show a prepared card’s finished surfaces before payment when preview_available is true. Optional, never required to buy. Returns images and their order revision, plus preview_url for clients that need a browser. Preview again after changes. This does not change, charge or mail the order.

  • revise_orderchangeddescription, input schema, output schema
    before

    Replace a prepared order before any payment has started. Send the complete desired cards array, including unchanged cards, with the original order_id, order_access_token, expected_revision and a new request_id. Change artwork, format, message, address, timing, or batch contents. Validation happens before the old draft is cancelled; one atomic operation returns a new order, fresh price, private token and review_url. When preview_available is true, optional preview_card can show the finished card. Prior payment approval does not authorize the replacement. Retain private art or add immutable art using open_private_content for the original draft first. If payment has started or is uncertain, read_order and resolve it before changing anything. Retry the identical request after a lost response; after success use the returned order and token for later edits, previews and payment.

    after · 50% of words in common

    Replace an unpaid draft before payment starts. Send the complete desired cards array, including unchanged cards. Validation and replacement are atomic: failure leaves the original draft intact; success cancels it and returns a new order, price, private token and review_url. Use that replacement for later edits, previews and payment; prior payment approval does not carry over. To add private artwork, first reopen the original draft with open_private_content; existing private artwork can be retained. If payment has started or is uncertain, use read_order and resolve it before changing anything. Retry an uncertain revision only with the identical request. The replacement inherits its source’s history access; revision does not link a previously unlinked order.

  • report_feedbackchangeddescription, input schema
    before

    Optionally report a technical problem, suggestion category or neutral successful outcome using fixed choices. Never required to buy a card. Do not include personal content, credentials, links, conversations or hidden reasoning. Reports are unverified feedback, not proof of payment or mailing.

    after · 52% of words in common

    Optionally record a technical problem, suggestion or neutral successful outcome using fixed choices. Use after communicating the outcome to the buyer; never required to buy a card. Reports are stored for 30 days and deduplicated daily. Returns recorded or duplicate; TRY_LATER means the daily limit of 100 new reports per server-assigned scope or 500 overall was reached. Do not include personal content, credentials, links, conversations or hidden reasoning. Reports are unverified feedback, not proof of payment or mailing.

  • cancel_orderchangeddescription, input schema, output schema
    before

    Cancel an eligible purchase at its current revision. Before payment, only whole-purchase cancellation is supported: omit card_ids. After payment, supply returned card_ids to cancel only eligible items, or omit them for the whole eligible purchase. The service verifies ownership and each fulfillment cutoff, and returns actual refund state. Requires the parent order_id and private order_access_token.

    after · 59% of words in common

    Cancel an eligible purchase or eligible paid cards at the current order revision. Before payment, omit card_ids for whole-purchase cancellation. After payment, omit them for the whole eligible purchase or select returned card IDs. The service checks ownership and each fulfillment cutoff, then returns the actual cancellation and refund states.

Showing the latest 10. Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 83 / 100

no-repository
provenance55
liveness100
freshness100
hygiene80

+dns-namespace +website +reachable +uptime-100% +updated-15d-ago -no-repository

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://api.paddock.so/agent-commerce/mcp streamable-httpnoneyes100%251 ms2026-07-282026-11-14

Tools (13)

cancel_orderdestructiveCancel an eligible purchase or eligible paid cards at the current order revision. Before payment, omit card_ids for whole-purchase cancellation. After payment, omit them for the whole eligible purchase or select returned card IDs. The service checks ownership and each fulfillment cutoff, then returns the actual cancellation and refund states.
compose_private_cardCreate a new immutable card face from this scope’s artwork, logo or QR URL. Requires at least one of those inputs; a QR-only face needs no upload. Returns design_key and design_version for prepare_order or revise_order. Personal message, recipient and mailing details are supplied in the order’s cards array. Reuse an existing composition when no new face is needed.
delete_private_contentdestructiveRequest deletion of unused uploads and compositions in one private scope at the buyer’s request. Returns acceptance and deletion state; it does not cancel an order. Purchased content remains until 90 days after mailing or final cancellation/refund, longer while an order, dispute or legal hold is unresolved.
list_ordersread-onlyFind orders first prepared through this assistant connection with history permission, newest first. Replacements inherit their original order’s history access; revising an unlinked order does not add it. Requires a connected buyer who granted orders:read; the public endpoint returns connection instructions. Returns compact order IDs, dates, totals, card counts and payment/refund states, plus next_cursor. Use read_order with a returned order_id for card details and mailing status; no per-order token is needed with history permission. Excludes expired, erased and revoked orders. Reconnecting starts a separate history. Never use names or addresses to find another buyer’s orders.
open_private_contentOpen a private upload scope for the buyer’s photo, artwork, logo or QR card. Omit both inputs for a new scope, or pass an unpaid order and its token to reopen that draft’s scope. Returns scope_id, a private token, upload_url and expiry. Assistants cannot upload conversation attachments; send the buyer the link, then use read_private_content when they finish. Catalog cards need no upload scope.
pay_orderdestructiveStart or resume payment for this exact prepared order and revision. Show the exact amount and returned action_url for the buyer to connect Link, approve this purchase or complete bank authentication. Only the buyer can approve; never ask for payment credentials in chat. Call again after that step, respecting retry_after_seconds. Confirm payment only when status is paid; processing and requires_action are incomplete. Changing the order requires a new quote and approval. Use read_order for separate printing and mailing progress.
prepare_orderPrepare one unpaid purchase of 1 to 500 cards, with mixed artwork, formats, messages, recipients, occasions and dates in one cards array. Each card is priced for its recipient country. Returns order.cards, the exact total, a private order_access_token and review_url for buyer review and payment. When preview_available is true, optional preview_card can show the finished card; images render only when requested. This authorizes neither a charge nor mailing. Preserve the returned token privately for retries and follow-up tools. If the first response is lost before saving a server-generated token, use a new request_id for another unpaid purchase. The 500-card/4-MiB bounds are technical request limits. Validation issues identify zero-based card indices without copying private content.
preview_cardread-onlyShow a prepared card’s finished surfaces before payment when preview_available is true. Optional, never required to buy. Returns images and their order revision, plus preview_url for clients that need a browser. Preview again after changes. This does not change, charge or mail the order.
read_orderread-onlyRead one known private purchase using its order ID and matching capability. Returns the current revision, payment state and order.cards with each card’s production and mailing states. Use it to check progress or refresh a stale revision; it does not change the order.
read_private_contentread-onlyList assets and existing card compositions in one private scope after the buyer uploads. Returns asset IDs with their kinds and each composition’s design_key/version. Reuse an existing composition directly; use compose_private_card only for a new face. For a new purchase, prepare_order uses request_id = scope_id and the same token; existing drafts use revise_order. An empty scope returns empty assets and compositions arrays. An expired scope without checkout or payment returns NOT_FOUND; open a new scope to upload again.
report_feedbackOptionally record a technical problem, suggestion or neutral successful outcome using fixed choices. Use after communicating the outcome to the buyer; never required to buy a card. Reports are stored for 30 days and deduplicated daily. Returns recorded or duplicate; TRY_LATER means the daily limit of 100 new reports per server-assigned scope or 500 overall was reached. Do not include personal content, credentials, links, conversations or hidden reasoning. Reports are unverified feedback, not proof of payment or mailing.
revise_orderdestructiveReplace an unpaid draft before payment starts. Send the complete desired cards array, including unchanged cards. Validation and replacement are atomic: failure leaves the original draft intact; success cancels it and returns a new order, price, private token and review_url. Use that replacement for later edits, previews and payment; prior payment approval does not carry over. To add private artwork, first reopen the original draft with open_private_content; existing private artwork can be retained. If payment has started or is uncertain, use read_order and resolve it before changing anything. Retry an uncertain revision only with the identical request. The replacement inherits its source’s history access; revision does not link a previously unlinked order.
search_cardsread-onlyFind ordinary and artist cards by artwork, occasion, format or budget. Returns matches with exact design keys and versions, images, orderability, destination prices and next_cursor. Pass destination_country when known; read pricing_destination and cents_by_destination. Basic physical specifications appear once in format_specs; include_specs adds published details. Public browsing needs no account or key. If results is empty, inspect unmet, constraints and pagination before adjusting filters. Pass the selected design key and version to prepare_order.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "so.paddock/cards",
  "title": "Paddock Cards",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
  "remotes": [
    {
      "url": "https://api.paddock.so/agent-commerce/mcp",
      "type": "streamable-http"
    }
  ],
  "version": "0.1.4",
  "websiteUrl": "https://paddock.so/agent-commerce/",
  "description": "Send birthday cards, Christmas cards and postcards, printed and mailed for you."
}