Skip to main content
Glama

cc0-print

Print on demand for AI agents, by cc0toshi: turn any image — or any NFT, by its OpenSea link or its address — into a framed print, a canvas or a metal print, made to order and shipped worldwide with tracking. $1 USDC per order over x402, then the print itself paid in USDC on Base. Track it live, get a signed webhook on every step, cancel, or file a claim. [PAID: $1 USDC per call via x402]

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nftNoOr any NFT by address: { chain, contract, token_id } (ethereum, base, arbitrum, bnb, arc, robinhood, shape).
skuYesProduct SKU from GET /api/store/prints/catalog, e.g. GLOBAL-CFPM-16X16.
emailYesYour human's email: receipt, every step, tracking link, delivery.
titleNoA name for the print (defaults to the NFT's name).
copiesNo
image_urlNoPublic https:// or ipfs:// URL of any image (PNG, JPEG, WebP, AVIF, TIFF, SVG, GIF first frame), up to 150 MB.
pixel_artNo
recipientYes
attributesNoProduct options, e.g. {"color":"black"}.
opensea_urlNoOr an OpenSea item link of any NFT: https://opensea.io/item/<chain>/<contract>/<token id>.
callback_urlNo
agent_referenceNo
shipping_methodNoBudget
honour_price_usdNo
rights_attestationYesYou confirm the print is for your human's personal use and that you have the right to reproduce the picture.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed16 schema fields changed
    • addedInput schema / description
      Added value: +"Give ONE of image_url, opensea_url or nft — the picture to print."
    • removedInput schema / properties / agent_reference / description
      Removed value: -"Your own reference, echoed back everywhere."
    • changedInput schema / properties / attributes / description
      Previous value: -"Options for that product, e.g. {\"color\":\"black\"}. Values come from the catalog; an omitted option takes the product's first value."New value: +"Product options, e.g. {\"color\":\"black\"}."
    • removedInput schema / properties / callback_url / description
      Removed value: -"Optional https webhook, POSTed on every step and signed with HMAC-SHA256 (X-Cc0-Signature)."
    • changedInput schema / properties / email / description
      Previous value: -"Your human's email: the receipt, every step, the tracking link and the delivery go there."New value: +"Your human's email: receipt, every step, tracking link, delivery."
    • removedInput schema / properties / honour_price_usd / description
      Removed value: -"The price you were quoted, in USDC base units. Within 2 % (or $1) of the live figure, that is what we charge."
    • changedInput schema / properties / image_url / description
      Previous value: -"Public https:// or ipfs:// URL of the image to print — PNG, JPEG, WebP, AVIF, TIFF, SVG, or a GIF (its first frame). Up to 150 MB. Check it first with POST /api/store/prints/custom/check."New value: +"Public https:// or ipfs:// URL of any image (PNG, JPEG, WebP, AVIF, TIFF, SVG, GIF first frame), up to 150 MB."
    • addedInput schema / properties / nft
      Added value: +{
      +  "description": "Or any NFT by address: { chain, contract, token_id } (ethereum, base, arbitrum, bnb, arc, robinhood, shape).",
      +  "properties": {
      +    "chain": {
      +      "type": "string"
      +    },
      +    "contract": {
      +      "type": "string"
      +    },
      +    "token_id": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / opensea_url
      Added value: +{
      +  "description": "Or an OpenSea item link of any NFT: https://opensea.io/item/<chain>/<contract>/<token id>.",
      +  "type": "string"
      +}
    • removedInput schema / properties / pixel_art / description
      Removed value: -"Enlarge with hard square pixels instead of smoothing (pixel art)."
    • removedInput schema / properties / recipient / properties / country_code / description
      Removed value: -"ISO 3166-1 alpha-2, e.g. FR, US"
    • changedInput schema / properties / rights_attestation / description
      Previous value: -"You confirm you have the right to reproduce this image (you made it, it is public domain, or you hold a licence)."New value: +"You confirm the print is for your human's personal use and that you have the right to reproduce the picture."
    • removedInput schema / properties / shipping_method / description
      Removed value: -"Which methods exist depends on the size and the country — ask POST /api/store/prints/shipping-options."
    • changedInput schema / properties / sku / description
      Previous value: -"Product SKU from GET /api/store/prints/catalog, e.g. GLOBAL-CFPM-16X16 (classic frame, mounted, 16 x 16\")."New value: +"Product SKU from GET /api/store/prints/catalog, e.g. GLOBAL-CFPM-16X16."
    • changedInput schema / properties / title / description
      Previous value: -"A name for the print, shown on the order and in the emails."New value: +"A name for the print (defaults to the NFT's name)."
    • changedInput schema / required
      Previous value: -[
      -  "image_url",
      -  "sku",
      -  "recipient",
      -  "email",
      -  "rights_attestation"
      -]New value: +[
      +  "sku",
      +  "recipient",
      +  "email",
      +  "rights_attestation"
      +]
  2. Changed16 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -true
    • addedInput schema / properties / agent_reference
      Added value: +{
      +  "description": "Your own reference, echoed back everywhere.",
      +  "maxLength": 120,
      +  "type": "string"
      +}
    • addedInput schema / properties / attributes
      Added value: +{
      +  "description": "Options for that product, e.g. {\"color\":\"black\"}. Values come from the catalog; an omitted option takes the product's first value.",
      +  "type": "object"
      +}
    • addedInput schema / properties / callback_url
      Added value: +{
      +  "description": "Optional https webhook, POSTed on every step and signed with HMAC-SHA256 (X-Cc0-Signature).",
      +  "type": "string"
      +}
    • addedInput schema / properties / copies
      Added value: +{
      +  "default": 1,
      +  "maximum": 25,
      +  "minimum": 1,
      +  "type": "integer"
      +}
    • addedInput schema / properties / email
      Added value: +{
      +  "description": "Your human's email: the receipt, every step, the tracking link and the delivery go there.",
      +  "format": "email",
      +  "type": "string"
      +}
    • addedInput schema / properties / honour_price_usd
      Added value: +{
      +  "description": "The price you were quoted, in USDC base units. Within 2 % (or $1) of the live figure, that is what we charge.",
      +  "type": "string"
      +}
    • addedInput schema / properties / image_url
      Added value: +{
      +  "description": "Public https:// or ipfs:// URL of the image to print — PNG, JPEG, WebP, AVIF, TIFF, SVG, or a GIF (its first frame). Up to 150 MB. Check it first with POST /api/store/prints/custom/check.",
      +  "type": "string"
      +}
    • addedInput schema / properties / pixel_art
      Added value: +{
      +  "description": "Enlarge with hard square pixels instead of smoothing (pixel art).",
      +  "type": "boolean"
      +}
    • removedInput schema / properties / prompt
      Removed value: -{
      -  "description": "Input prompt for this service.",
      -  "type": "string"
      -}
    • addedInput schema / properties / recipient
      Added value: +{
      +  "properties": {
      +    "city": {
      +      "type": "string"
      +    },
      +    "country_code": {
      +      "description": "ISO 3166-1 alpha-2, e.g. FR, US",
      +      "type": "string"
      +    },
      +    "line1": {
      +      "type": "string"
      +    },
      +    "line2": {
      +      "type": "string"
      +    },
      +    "name": {
      +      "type": "string"
      +    },
      +    "postal_code": {
      +      "type": "string"
      +    },
      +    "state_or_county": {
      +      "type": "string"
      +    }
      +  },
      +  "required": [
      +    "name",
      +    "line1",
      +    "city",
      +    "postal_code",
      +    "country_code"
      +  ],
      +  "type": "object"
      +}
    • addedInput schema / properties / rights_attestation
      Added value: +{
      +  "const": true,
      +  "description": "You confirm you have the right to reproduce this image (you made it, it is public domain, or you hold a licence).",
      +  "type": "boolean"
      +}
    • addedInput schema / properties / shipping_method
      Added value: +{
      +  "default": "Budget",
      +  "description": "Which methods exist depends on the size and the country — ask POST /api/store/prints/shipping-options.",
      +  "enum": [
      +    "Budget",
      +    "Standard",
      +    "StandardPlus",
      +    "Express",
      +    "Overnight"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / sku
      Added value: +{
      +  "description": "Product SKU from GET /api/store/prints/catalog, e.g. GLOBAL-CFPM-16X16 (classic frame, mounted, 16 x 16\").",
      +  "type": "string"
      +}
    • addedInput schema / properties / title
      Added value: +{
      +  "description": "A name for the print, shown on the order and in the emails.",
      +  "maxLength": 120,
      +  "type": "string"
      +}
    • changedInput schema / required
      Previous value: -[
      -  "prompt"
      -]New value: +[
      +  "image_url",
      +  "sku",
      +  "recipient",
      +  "email",
      +  "rights_attestation"
      +]
  3. Added

TDQS

A3.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations exist, so the description carries the full burden and does unusually well: it discloses the two-stage payment model ($1 USDC per order over x402, print paid in USDC on Base), worldwide shipping with tracking, signed webhooks on every step, and cancel/claim paths. It stops short of permission/auth details and failure behavior, keeping it below 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded, which is good, but the body is a single run-on sentence mixing ordering, payment, tracking, cancellation and claims, plus branding filler ('by cc0toshi'). The paid note is useful but partly duplicates the price already stated mid-sentence.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter tool with nested objects, no output schema and no annotations, the description never says what a successful call returns (order id, tracking number) nor what happens on payment failure. It also blurs whether tracking/cancel/claim are part of this tool, leaving real gaps for an agent to act on.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is only 53%, and the description adds essentially no parameter-level meaning — the NFT/OpenSea input is already documented in the schema. Several parameters (copies, pixel_art, callback_url, agent_reference, shipping_method, honour_price_usd) and the nested recipient sub-fields remain undocumented in both places, so the description fails to compensate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete verb and resource ('turn any image — or any NFT ... into a framed print, a canvas or a metal print'), names the product variants, and is unmistakably distinct from the image-generation siblings (darkfarms-gen, hokusai-gen) which produce files rather than physical goods.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (you want a physical print of an image or NFT), but it names no alternatives and no exclusions, and it folds post-order operations (track, cancel, claim) into the same text without clarifying whether they belong to this call or other tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.