Skip to content

Printdash

io.printdash/printdashprintdash.iostreamable-httpv0.6.0Scanned

Online printing for Australia: products, exact prices, quotes, artwork checks and orders.

58 tools: 24 can delete or cancel things, 13 change things and 21 only read.

Tools: 24 delete, 0 irreversible, 13 write, 21 read.
  • Reads private data · 2
  • Reads text others write · 10
  • Can send data out · 1
  • 2 findings

Anlyon alternative

37 of these tools change something. Run those as governed actions.

Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.

Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.

Import an OpenAPI spec →

Tools

Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.

58 tools

Deletes or cancels 24Claude Code: deny
  • approve_orderFor a Team owner: prepares approving one held order (from list_pending_approvals) and returns the summary to show the customer and a confirmation_token.Reads text others writeNo findings

    Why it is in this group

    • The name "approve_order" says "approve": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    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
    For a Team owner: prepares approving one held order (from list_pending_approvals) and returns the summary to show the customer and a confirmation_token. Nothing is decided until confirm is called after they agree. Approving an on-account order sends it to production; approving a card order makes it payable by any member. A member who is not an owner cannot approve. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
    • title: Approve a Team order (asks first)
  • attach_artworkAfter the file has been PUT to request_artwork_upload's upload_url: puts it on the line (in the design and side chosen then, replacing a file already in that slot), makes the page …No findings

    Why it is in this group

    • The name "attach_artwork" says "attach": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    After the file has been PUT to request_artwork_upload's upload_url: puts it on the line (in the design and side chosen then, replacing a file already in that slot), makes the page 1 and page 2 previews, runs Printdash's file checks, and returns the preview as an image with the checks' notices. The notices are the ones checkout shows; none of them blocks an order. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
    • title: Attach an uploaded file to a line
  • attach_artwork_from_urlFetches the file at an https link (a Canva, Figma or design tool export, Dropbox or Drive download link, a signed storage URL) up to 700 MB and attaches it like attach_artwork: tar…Reads text others writeNo findings

    Why it is in this group

    • The name "attach_artwork_from_url" says "attach": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    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
    Fetches the file at an https link (a Canva, Figma or design tool export, Dropbox or Drive download link, a signed storage URL) up to 700 MB and attaches it like attach_artwork: target (cart_line, quote_line or order_item with its id, design, side), url, and file_name when the link's own name has no extension. A link that opens a web page instead of the file is refused, and so is a file whose contents do not match its extension. For a Canva export, name it canva-<designId>.pdf with the Canva design id: Printdash recognises Canva files by that name (they arrive at finished size by design, so the bleed notice is dropped and the studio checks bleed). Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
    • title: Attach artwork from a link
  • attach_artwork_inlineFor programmatic clients only: attaches a file sent as base64 in data_base64, up to 10 MB, like attach_artwork (target, file_name with its extension).No findings

    Why it is in this group

    • The name "attach_artwork_inline" says "attach": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    For programmatic clients only: attaches a file sent as base64 in data_base64, up to 10 MB, like attach_artwork (target, file_name with its extension). Never paste a file a customer dropped into a chat here; use attach_artwork_from_url or get_artwork_uploader_link. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
    • title: Attach a small file sent inline
  • cancel_orderPrepares cancelling one order: returns the summary to show the customer and a confirmation_token.Reads text others writeNo findings

    Why it is in this group

    • The name "cancel_order" says "cancel": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).

    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
    Prepares cancelling one order: returns the summary to show the customer and a confirmation_token. Nothing is cancelled until confirm is called with it after the customer agrees. Only an unpaid order that is not in production can be cancelled, as on the order page; otherwise it says so. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
    • title: Cancel an order (asks first)
  • cancel_quote_requestCancels a custom quote request that is still pending review.No findings

    Why it is in this group

    • The name "cancel_quote_request" says "cancel": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Cancels a custom quote request that is still pending review. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
    • title: Cancel a custom quote request
  • clear_cartRemoves every line from the cart in the current buying context.No findings

    Why it is in this group

    • The description's first verb is "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Removes every line from the cart in the current buying context. Saved quotes are not affected. Ask the customer before emptying a cart they did not just fill. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
    • title: Empty the cart
  • confirmCarries out an action prepared by delete_address, delete_quote, email_quote, request_custom_quote, send_invite, prepare_checkout (placing the order), cancel_order, request_reorder,…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 destructive (destructiveHint: true).

    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
    Carries out an action prepared by delete_address, delete_quote, email_quote, request_custom_quote, send_invite, prepare_checkout (placing the order), cancel_order, request_reorder, approve_order or reject_order, after the customer has seen its summary and said yes. Pass its confirmation_token and a new UUID as idempotency_key; retrying with the same key returns the first outcome and never acts twice. Never call it without the customer's agreement. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
    • title: Confirm a prepared action
  • convert_quote_to_orderPuts a saved quote's lines in the cart, as the quote page's Convert to order does, and returns the checkout link.No findings

    Why it is in this group

    • The name "convert_quote_to_order" says "convert": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Puts a saved quote's lines in the cart, as the quote page's Convert to order does, and returns the checkout link. No order is placed: the customer chooses delivery and pays (or orders on account) at checkout on printdash.io. Only the quote's owner can, and every line needs artwork unless Printdash priced it. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
    • title: Put a quote in the cart to order it
  • delete_addressPrepares deleting one saved address: returns the summary to show the customer and a confirmation_token.No findings

    Why it is in this group

    • The name "delete_address" says "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Prepares deleting one saved address: returns the summary to show the customer and a confirmation_token. Nothing is deleted until confirm is called with it after the customer agrees. An address an order or quote was made with leaves the address book but stays on those orders and quotes, as on printdash.io. The only saved address cannot be deleted: add the new one with create_address first. When the default is deleted, the newest other address becomes the default. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
    • title: Delete a saved address (asks first)
  • delete_quotePrepares deleting a saved quote for good: returns the summary to show the customer and a confirmation_token.No findings

    Why it is in this group

    • The name "delete_quote" says "delete": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Prepares deleting a saved quote for good: returns the summary to show the customer and a confirmation_token. Nothing is deleted until confirm is called with it after the customer agrees. Accepted and ordered quotes cannot be deleted. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: false
    • title: Delete a saved quote (asks first)
  • email_quotePrepares emailing a saved quote's public link to someone (usually the customer's client): returns the summary to show the customer and a confirmation_token.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 destructive (destructiveHint: true).

    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
    Prepares emailing a saved quote's public link to someone (usually the customer's client): returns the summary to show the customer and a confirmation_token. Nothing is sent until confirm is called with it after the customer agrees. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
    • title: Email a quote to someone (asks first)
  • place_orderPlaces the order prepare_checkout summarised, after the customer has seen that summary and said yes.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 destructive (destructiveHint: true).

    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
    Places the order prepare_checkout summarised, after the customer has seen that summary and said yes. Pass its confirmation_token and a new UUID as idempotency_key; retrying with the same key returns the same order and never places a second. Printdash re-prices every line and refuses a price that moved since the review (then call prepare_checkout again). Payment never happens here: a card order comes back with payment_url, the order page on printdash.io where the customer pays; an on-account order needs no payment; a held order waits for a Team owner. Never call it without the customer's agreement. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: true
    • title: Place the prepared order
  • reject_orderFor a Team owner: prepares rejecting one held order, with an optional reason the member who placed it is told, and returns the summary to show the customer and a confirmation_token…Reads text others writeNo findings

    Why it is in this group

    • The name "reject_order" says "reject": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    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
    For a Team owner: prepares rejecting one held order, with an optional reason the member who placed it is told, and returns the summary to show the customer and a confirmation_token. Nothing is decided until confirm is called after they agree. Rejecting cancels the order. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
    • title: Reject a Team order (asks first)
  • remove_artworkTakes artwork off a line: one design's file (design, and side for one face only), or on a one-design job the front, the back, or (no side) every file.No findings

    Why it is in this group

    • The name "remove_artwork" says "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Takes artwork off a line: one design's file (design, and side for one face only), or on a one-design job the front, the back, or (no side) every file. The file itself is deleted only if no other line, quote or order uses it. Refused when the line's artwork can no longer change. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
    • title: Remove artwork from a line
  • remove_cart_lineRemoves one line from the cart by its line_id.No findings

    Why it is in this group

    • The name "remove_cart_line" says "remove": a word for removing or ending something.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Removes one line from the cart by its line_id. Saved quotes are not affected. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
    • title: Remove a job from the cart
  • request_custom_quotePrepares a custom quote request for a job the catalogue does not cover (description, quantities, size, sides, stock, finishing, deadline, similar product, delivery address): return…Reads text others writeNo findings

    Why it is in this group

    • The name "request_custom_quote" says "request": a word for a change.
    • The server marks it destructive (destructiveHint: true).

    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
    Prepares a custom quote request for a job the catalogue does not cover (description, quantities, size, sides, stock, finishing, deadline, similar product, delivery address): returns the summary to show the customer and a confirmation_token. Nothing is filed or emailed until confirm is called after the customer agrees; then Printdash's team prices it by hand. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
    • title: Ask Printdash for a custom quote (asks first)
  • send_invitePrepares emailing someone an invitation with the customer's referral link: returns the summary to show the customer and a confirmation_token.Reads text others writeCan send data outNo findings

    Why it is in this group

    • The name "send_invite" says "send": a word for sending, and what is sent cannot be taken back.
    • The server marks it destructive (destructiveHint: true).

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    • outboundThe name "send_invite" says "send": it sends or publishes something to other people.
    Description, as the server wrote it
    Prepares emailing someone an invitation with the customer's referral link: returns the summary to show the customer and a confirmation_token. Nothing is sent until confirm is called after the customer agrees. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: false
    • openWorldHint: true
    • title: Invite someone to Printdash (asks first)
  • set_contextSwitches the account between buying personally and buying as one of its Teams, as the account menu's Viewing as does on printdash.io.No findings

    Why it is in this group

    • The name "set_context" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Switches the account between buying personally and buying as one of its Teams, as the account menu's Viewing as does on printdash.io. Prices, quotes, orders and addresses follow the context. Pass team_id null for personal. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
    • title: Switch between personal and a Team
  • set_default_addressMakes one saved address the default for the current buying context; checkout and new quotes start from it.No findings

    Why it is in this group

    • The name "set_default_address" says "set": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Makes one saved address the default for the current buying context; checkout and new quotes start from it. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
    • title: Make an address the default
  • share_quoteMakes, or returns the existing, public link for a saved quote: the page where the customer's client can view and approve it, and pay online when allow_payment is on.No 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 destructive (destructiveHint: true).
    Description, as the server wrote it
    Makes, or returns the existing, public link for a saved quote: the page where the customer's client can view and approve it, and pay online when allow_payment is on. The link never changes once made. It sends nothing (email_quote does). Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
    • title: Get a quote's public link
  • update_addressChanges the fields given on one saved address (from list_addresses); the rest stay.No findings

    Why it is in this group

    • The name "update_address" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Changes the fields given on one saved address (from list_addresses); the rest stay. If an order or quote was made with it, the change is saved as a new address with a new id (the result's address.id) and the orders and quotes keep the old one. Australian state codes and four-digit postcodes only. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
    • title: Change a saved address
  • update_cart_lineChanges one cart line's options (only what is given: a new quantity, stock, finish or size) and re-prices it with the pricing engine.No findings

    Why it is in this group

    • The name "update_cart_line" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Changes one cart line's options (only what is given: a new quantity, stock, finish or size) and re-prices it with the pricing engine. A line from a quote Printdash priced cannot be changed. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
    • title: Change a job in the cart
  • update_quoteChanges a saved quote in place: lines to change (line_id plus only the options that change) or add (product_id and configuration), lines to remove, the reference, notes or delivery…No findings

    Why it is in this group

    • The name "update_quote" says "update": a word for a change.
    • The server marks it destructive (destructiveHint: true).
    Description, as the server wrote it
    Changes a saved quote in place: lines to change (line_id plus only the options that change) or add (product_id and configuration), lines to remove, the reference, notes or delivery address. Changed and added lines are re-priced by the engine; untouched lines keep their prices. Accepted, ordered, expired and team-priced quotes cannot be changed. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: true
    • idempotentHint: true
    • openWorldHint: false
    • title: Change a saved quote
Changes things 13Claude Code: ask
  • add_to_cartPrices one job with Printdash's pricing engine (product id and a configuration of option ids, as price_job takes them) and puts it in the cart exactly as the product page's Add to …No findings

    Why it is in this group

    • The name "add_to_cart" says "add": a word for a change.
    Description, as the server wrote it
    Prices one job with Printdash's pricing engine (product id and a configuration of option ids, as price_job takes them) and puts it in the cart exactly as the product page's Add to cart does. If the job cannot be priced, nothing is added and the result says what is missing or the nearest combinations. Nothing is ordered or charged: checkout on printdash.io re-prices, takes artwork and payment. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
    • title: Add a job to the cart
  • check_artworkRuns Printdash's file checks on a line's artwork, the same ones the product page and checkout show: page size against the ordered size, pages against sides or booklet pages, ink to…1 finding

    Why it is in this group

    • The description's first verb is "run": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "check_artwork" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "run": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Runs Printdash's file checks on a line's artwork, the same ones the product page and checkout show: page size against the ordered size, pages against sides or booklet pages, ink to the edge for bleed, spot finish and cut line layers found, missing or misnamed, finishes knocked out, template guides left in. Each notice comes with a guide link; anything the check could not measure says nothing. Returns the preview as an image. Never blocks an order. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Check a line's artwork
  • create_addressSaves an Australian delivery address to the address book in the current buying context (names, street, suburb, state code, four-digit postcode, optional company, mobile and type), …No findings

    Why it is in this group

    • The name "create_address" says "create": a word for a change.
    Description, as the server wrote it
    Saves an Australian delivery address to the address book in the current buying context (names, street, suburb, state code, four-digit postcode, optional company, mobile and type), optionally as the default. Collect it from the customer; never invent one. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
    • title: Save a delivery address
  • create_quoteSaves a new quote with a quote number from up to 20 jobs (each a product id and configuration, priced by the engine first), with an optional saved address for delivery, pickup wher…No findings

    Why it is in this group

    • The name "create_quote" says "create": a word for a change.
    Description, as the server wrote it
    Saves a new quote with a quote number from up to 20 jobs (each a product id and configuration, priced by the engine first), with an optional saved address for delivery, pickup where the account has it, an order reference and notes. Prices are locked for 30 days. It is the customer's saved quote, ready to share with a client (share_quote, email_quote) or convert to an order. If a job cannot be priced, nothing is saved. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
    • title: Save a quote
  • duplicate_quoteSaves a copy of a quote as a new quote with its own number, every line re-priced today (artwork is not copied).No findings

    Why it is in this group

    • The description's first verb is "save": a word for a change.
    Description, as the server wrote it
    Saves a copy of a quote as a new quote with its own number, every line re-priced today (artwork is not copied). The original is unchanged. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
    • title: Copy a saved quote
  • estimate_deliveryWhether Printdash delivers to an Australian postcode (or, signed in, a saved address) and, given the jobs being ordered, the delivery fee and the delivered total, priced the way ch…No 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.
    Description, as the server wrote it
    Whether Printdash delivers to an Australian postcode (or, signed in, a saved address) and, given the jobs being ordered, the delivery fee and the delivered total, priced the way checkout prices it. Australian postcodes only: anywhere else is refused, because Printdash delivers within Australia only. Prices in AUD; totals include GST.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Estimate delivery within Australia
  • match_optionsTurns the customer's words ("velvet", "A5", "double sided", "500", "90 x 55mm", "round corners") into option ids for one product, given what is already chosen.No 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.
    Description, as the server wrote it
    Turns the customer's words ("velvet", "A5", "double sided", "500", "90 x 55mm", "round corners") into option ids for one product, given what is already chosen. Returns matches, the ambiguous phrases with every candidate (never a guess: ask the customer), options not available with what is chosen, the words it could not place, and the configuration so far for price_job.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Match the customer's words to option ids
  • prepare_checkoutCheckout's review of the whole cart in the current buying context, as printdash.io's checkout shows it: every line with its artwork state and Printdash's file notices, delivery to …1 finding

    Why it is in this group

    • The name "prepare_checkout" says "checkout": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "prepare_checkout" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "prepare_checkout" says "checkout": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Checkout's review of the whole cart in the current buying context, as printdash.io's checkout shows it: every line with its artwork state and Printdash's file notices, delivery to a saved address (address_id, else the default) or pickup where the account has it, the order reference (required, up to 50 characters), notes, a PO number for a Team on account, is_whitelabel (Remove Printdash Branding), the totals from Printdash's own delivery pricing, expected_total, and what placing it will do: placed unpaid with a pay link on printdash.io, on the Team's account, or held for a Team owner's approval. When it is ready, the summary and a confirmation_token for place_order. Writes nothing; nothing is ordered until place_order is called after the customer agrees. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Review the cart before ordering
  • price_jobPrices one exact job with Printdash's pricing engine: a product id and a configuration of option ids (from get_product or match_options).No 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.
    Description, as the server wrote it
    Prices one exact job with Printdash's pricing engine: a product id and a configuration of option ids (from get_product or match_options). Returns the price ex GST, GST and total inc GST, turnaround, a config_id and a share_url that opens the job on printdash.io; with an Australian postcode (or, signed in, a saved address id) the delivered price too. Signed in, the price is the customer's own account price. If the job cannot be priced it says what is missing, what is wrong, or the nearest combinations that can be. Relay prices exactly as returned. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Price a print job
  • price_quantitiesThe same job priced at up to 8 quantities (the price ladder), each from Printdash's pricing engine, with the delivered price when an Australian postcode is given.No 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.
    Description, as the server wrote it
    The same job priced at up to 8 quantities (the price ladder), each from Printdash's pricing engine, with the delivered price when an Australian postcode is given. Relay prices exactly as returned. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Price a job at several quantities
  • reorderTurns one job from a past order (item_id from get_order, where can_reorder is true) back into a configuration and prices it at today's price, optionally at another quantity, exactl…No 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.
    Description, as the server wrote it
    Turns one job from a past order (item_id from get_order, where can_reorder is true) back into a configuration and prices it at today's price, optionally at another quantity, exactly as price_job does. Writes nothing: add_to_cart with its product_id and configuration_input puts it in the cart. Jobs priced by Printdash's team (reorder_by_request) go through request_reorder instead. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Price an order's job again
  • request_artwork_uploadFor a client that holds the file (Claude Code, Cursor, a script): returns a signed upload_url to PUT the file's bytes to, and an upload_id for attach_artwork.No findings

    Why it is in this group

    • The name "request_artwork_upload" says "request": a word for a change.
    Description, as the server wrote it
    For a client that holds the file (Claude Code, Cursor, a script): returns a signed upload_url to PUT the file's bytes to, and an upload_id for attach_artwork. target says where it goes: a cart line (line_id from get_cart), a saved quote's line (line_id from get_quote) or an order job (item_id from get_order), plus design (1 to N, on a job with several designs) and side (front or back). Give the file name with its extension (pdf is best; ai, eps, psd, jpg, png and tif are accepted) and its size in bytes, up to 700 MB. Refused when the line's artwork can no longer change. A chat client that cannot send a file should use attach_artwork_from_url or get_artwork_uploader_link instead. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: false
    • title: Get an upload link for artwork
  • request_reorderFor a job on a past order that Printdash's team priced (reorder_by_request in get_order): prepares the order page's reorder request, at the same or another quantity with optional n…Reads text others writeNo findings

    Why it is in this group

    • The name "request_reorder" 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.
    Description, as the server wrote it
    For a job on a past order that Printdash's team priced (reorder_by_request in get_order): prepares the order page's reorder request, at the same or another quantity with optional notes, and returns the summary to show the customer and a confirmation_token. Nothing is filed until confirm is called after the customer agrees; then the team confirms today's price and sends a quote or pay link. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
    • title: Ask Printdash to re-price a past job (asks first)
Only reads 21Show 21 read-only tools
  • get_accountWho the signed-in customer is: name, company, pricing tier and its discount in percent (discount_percent 5 means 5% off, already in every price the pricing tools return), whether t…No findings

    Why it is in this group

    • The name "get_account" says "get": a word for reading.
    Description, as the server wrote it
    Who the signed-in customer is: name, company, pricing tier and its discount in percent (discount_percent 5 means 5% off, already in every price the pricing tools return), whether they are buying personally or as a Team (and their role), the Teams they can switch to, whether the Team orders on account, and what the account is still missing (a delivery address, a phone number). Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get the signed-in account
  • get_artwork_guidePrintdash's artwork setup guides as Markdown (bleed and safe zone, print-ready PDFs, colour, double-sided, cut lines, spot finishes, lamination, stocks, white ink, booklets, foldin…No findings

    Why it is in this group

    • The name "get_artwork_guide" says "get": a word for reading.
    Description, as the server wrote it
    Printdash's artwork setup guides as Markdown (bleed and safe zone, print-ready PDFs, colour, double-sided, cut lines, spot finishes, lamination, stocks, white ink, booklets, folding, wide format, Illustrator and InDesign export). Without a topic, the list. With a product (and its configuration), what that product's page says on the topic, sized for the job.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get a Printdash artwork guide
  • get_artwork_requirementsWhat a print-ready file must be for a product and configuration: finished size, bleed, safe zone, the PDF page size including bleed, pages or sides expected, the spot plate names a…Reads private dataNo findings

    Why it is in this group

    • The name "get_artwork_requirements" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "file": it reads files.
    Description, as the server wrote it
    What a print-ready file must be for a product and configuration: finished size, bleed, safe zone, the PDF page size including bleed, pages or sides expected, the spot plate names a spot finish needs, the cut line rule, resolution, accepted file types and the size limit. The same rules the product page's guide card uses.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get the artwork requirements for a job
  • get_cartThe cart in the current buying context: each line with its line_id, job summary, price inc GST and whether it has artwork, the total before delivery, and the checkout link.No findings

    Why it is in this group

    • The name "get_cart" says "get": a word for reading.
    Description, as the server wrote it
    The cart in the current buying context: each line with its line_id, job summary, price inc GST and whether it has artwork, the total before delivery, and the checkout link. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get the cart
  • get_invoiceThe tax invoice for one order as a PDF attached to the result, once the order is invoiced (paid, or on a Team's account once approved).No findings

    Why it is in this group

    • The name "get_invoice" says "get": a word for reading.
    Description, as the server wrote it
    The tax invoice for one order as a PDF attached to the result, once the order is invoiced (paid, or on a Team's account once approved). Otherwise it says plainly that there is no invoice yet. The order page link has Download invoice too. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get an order's invoice
  • get_mockupThe 3D mockup of a line's artwork on the product, as an image.No findings

    Why it is in this group

    • The name "get_mockup" says "get": a word for reading.
    Description, as the server wrote it
    The 3D mockup of a line's artwork on the product, as an image. An order job is rendered by Printdash's server and cached; if it is still rendering the result says so and you call again in about 20 seconds. A cart or quote line returns the mockup checkout or the quote page stored, or else Printdash's server renders it the same way (rendering, then call again); the flat preview comes back when there is no 3D view to show. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Show the 3D mockup
  • get_orderOne order by its order number: status and payment as the order page shows them, every item with its job status, tracking, dispatch, delivery address, whether it can still be cancel…No findings

    Why it is in this group

    • The name "get_order" says "get": a word for reading.
    Description, as the server wrote it
    One order by its order number: status and payment as the order page shows them, every item with its job status, tracking, dispatch, delivery address, whether it can still be cancelled, whether the invoice is available, which items can be reordered, and the order page link. Read only. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get one order
  • get_productThe whole option form for one Printdash product, as its product page offers it: every field in the order to ask, whether it is required, each option's id and label, defaults, quant…No findings

    Why it is in this group

    • The name "get_product" says "get": a word for reading.
    Description, as the server wrote it
    The whole option form for one Printdash product, as its product page offers it: every field in the order to ask, whether it is required, each option's id and label, defaults, quantity and custom size limits, page counts, what is applied automatically, which stocks a finish is priced on, the product image, the artwork guides that apply, and default_configuration (the page's starting job, ready for price_job). Read this before asking the customer anything. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get a product's options
  • get_quoteOne saved quote by its quote number: status, lines with their quoted quantities, the lines' subtotal, delivery and the total with delivery as the quote page shows it, expiry, the p…No findings

    Why it is in this group

    • The name "get_quote" says "get": a word for reading.
    Description, as the server wrote it
    One saved quote by its quote number: status, lines with their quoted quantities, the lines' subtotal, delivery and the total with delivery as the quote page shows it, expiry, the public share link if it has one, whether it can be converted to an order, and the quote page link. Read only. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get one saved quote
  • get_quote_requestOne custom quote request by its request number: what was asked for, its status, whether it can still be cancelled, and the quote it became.No findings

    Why it is in this group

    • The name "get_quote_request" says "get": a word for reading.
    Description, as the server wrote it
    One custom quote request by its request number: what was asked for, its status, whether it can still be cancelled, and the quote it became. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get one custom quote request
  • get_referral_summaryThe customer's referral code and link, how many customers and orders they have referred, their credit balance and commission.No findings

    Why it is in this group

    • The name "get_referral_summary" says "get": a word for reading.
    Description, as the server wrote it
    The customer's referral code and link, how many customers and orders they have referred, their credit balance and commission. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get the referral summary
  • list_addressesThe saved delivery addresses in the current buying context, the default first, with the ids price_job and estimate_delivery take.No findings

    Why it is in this group

    • The name "list_addresses" says "list": a word for reading.
    Description, as the server wrote it
    The saved delivery addresses in the current buying context, the default first, with the ids price_job and estimate_delivery take. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: List saved delivery addresses
  • list_artworkThe files on a cart line, quote line or order job, in order, with which file and page is each design's front and back (as the site resolves them), how many designs are ready, wheth…Reads private dataNo findings

    Why it is in this group

    • The name "list_artwork" says "list": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "file": it reads files.
    Description, as the server wrote it
    The files on a cart line, quote line or order job, in order, with which file and page is each design's front and back (as the site resolves them), how many designs are ready, whether the artwork can still change, and the uploader link. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: List a line's artwork
  • list_ordersThe most recent orders in the current buying context, each with its status as the order page shows it, payment, total, tracking and items.No findings

    Why it is in this group

    • The name "list_orders" says "list": a word for reading.
    Description, as the server wrote it
    The most recent orders in the current buying context, each with its status as the order page shows it, payment, total, tracking and items. Read only. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: List recent orders
  • list_pending_approvalsFor a Team owner: every held order of each Team they own, oldest first, with who placed it, the total, whether it is on account, its items and its page.No findings

    Why it is in this group

    • The name "list_pending_approvals" says "list": a word for reading.
    Description, as the server wrote it
    For a Team owner: every held order of each Team they own, oldest first, with who placed it, the total, whether it is on account, its items and its page. An account that owns no Team is told only an owner approves. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: List orders waiting for my approval
  • list_productsEvery product Printdash sells (business cards, flyers, stickers, labels, booklets, signs, banners and more), with its id, a one-line description and its page.No findings

    Why it is in this group

    • The name "list_products" says "list": a word for reading.
    Description, as the server wrote it
    Every product Printdash sells (business cards, flyers, stickers, labels, booklets, signs, banners and more), with its id, a one-line description and its page. Start here or with search_products. No prices: price_job prices an exact job. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: List Printdash products
  • list_quote_requestsThe customer's custom quote requests in the current buying context, newest first, each with its status as /quotes shows it and the quote it became, if any.No findings

    Why it is in this group

    • The name "list_quote_requests" says "list": a word for reading.
    Description, as the server wrote it
    The customer's custom quote requests in the current buying context, newest first, each with its status as /quotes shows it and the quote it became, if any. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: List custom quote requests
  • list_quotesThe most recent saved quotes in the current buying context, each with its status as the Quotes list shows it, total (with delivery, as the Quotes list shows it), expiry and link.No findings

    Why it is in this group

    • The name "list_quotes" says "list": a word for reading.
    Description, as the server wrote it
    The most recent saved quotes in the current buying context, each with its status as the Quotes list shows it, total (with delivery, as the Quotes list shows it), expiry and link. Read only. Needs a signed-in Printdash account: called without one, the connection asks the customer to sign in on printdash.io.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: List saved quotes
  • pingChecks that Printdash is reachable and says whether you are signed in.No findings

    Why it is in this group

    • The name "ping" says "ping": a word for reading.
    Description, as the server wrote it
    Checks that Printdash is reachable and says whether you are signed in. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Check the Printdash connection
  • search_productsFinds the Printdash products that match the customer's words ("A5 flyers", "round stickers", "pull up banner"), best first.No findings

    Why it is in this group

    • The name "search_products" says "search": a word for reading.
    Description, as the server wrote it
    Finds the Printdash products that match the customer's words ("A5 flyers", "round stickers", "pull up banner"), best first. Returns ids for get_product. Printdash prints in Australia and delivers within Australia only; prices are in AUD and include GST.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Search Printdash products

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.

20 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 write10
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.
deny to break every path
{
  "permissions": {
    "deny": [
      "mcp__printdash__send_invite"
    ]
  }
}

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Findings

Matches of fixed checks, with the text they matched.

2 warn
  • The server marks "check_artwork" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "run": a word for a change.

    What this check looks for
  • The server marks "prepare_checkout" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "prepare_checkout" says "checkout": a word for a change.

    What this check looks for

History

Changes to its tool definitions and to its remote endpoint, newest first.

No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.

Install

Pinned to version 0.6.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http printdash https://api.printdash.io/functions/v1/mcp
claude mcp add --transport http printdash https://api.printdash.io/functions/v1/mcp

Run 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.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__printdash__ping",
      "mcp__printdash__list_products",
      "mcp__printdash__search_products",
      "mcp__printdash__get_product",
      "mcp__printdash__get_artwork_guide",
      "mcp__printdash__get_artwork_requirements",
      "mcp__printdash__get_account",
      "mcp__printdash__list_addresses",
      "mcp__printdash__list_orders",
      "mcp__printdash__get_order",
      "mcp__printdash__list_quotes",
      "mcp__printdash__get_quote",
      "mcp__printdash__get_cart",
      "mcp__printdash__list_quote_requests",
      "mcp__printdash__get_quote_request",
      "mcp__printdash__get_referral_summary",
      "mcp__printdash__get_artwork_uploader_link",
      "mcp__printdash__get_mockup",
      "mcp__printdash__list_artwork",
      "mcp__printdash__get_invoice",
      "mcp__printdash__list_pending_approvals"
    ],
    "ask": [
      "mcp__printdash__match_options",
      "mcp__printdash__price_job",
      "mcp__printdash__price_quantities",
      "mcp__printdash__estimate_delivery",
      "mcp__printdash__create_address",
      "mcp__printdash__add_to_cart",
      "mcp__printdash__create_quote",
      "mcp__printdash__duplicate_quote",
      "mcp__printdash__request_artwork_upload",
      "mcp__printdash__check_artwork",
      "mcp__printdash__prepare_checkout",
      "mcp__printdash__reorder",
      "mcp__printdash__request_reorder"
    ],
    "deny": [
      "mcp__printdash__set_context",
      "mcp__printdash__update_address",
      "mcp__printdash__set_default_address",
      "mcp__printdash__delete_address",
      "mcp__printdash__update_cart_line",
      "mcp__printdash__remove_cart_line",
      "mcp__printdash__clear_cart",
      "mcp__printdash__update_quote",
      "mcp__printdash__delete_quote",
      "mcp__printdash__share_quote",
      "mcp__printdash__email_quote",
      "mcp__printdash__convert_quote_to_order",
      "mcp__printdash__request_custom_quote",
      "mcp__printdash__cancel_quote_request",
      "mcp__printdash__send_invite",
      "mcp__printdash__confirm",
      "mcp__printdash__attach_artwork",
      "mcp__printdash__attach_artwork_from_url",
      "mcp__printdash__attach_artwork_inline",
      "mcp__printdash__remove_artwork",
      "mcp__printdash__place_order",
      "mcp__printdash__cancel_order",
      "mcp__printdash__approve_order",
      "mcp__printdash__reject_order"
    ]
  }
}

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 printdash. Review it before you use it.

Capability tags behind 12 rules
  • mcp__printdash__get_artwork_requirements private-data
  • mcp__printdash__email_quote untrusted-input
  • mcp__printdash__request_custom_quote untrusted-input
  • mcp__printdash__send_invite untrusted-input, outbound
  • mcp__printdash__confirm untrusted-input
  • mcp__printdash__attach_artwork_from_url untrusted-input
  • mcp__printdash__list_artwork private-data
  • mcp__printdash__place_order untrusted-input
  • mcp__printdash__cancel_order untrusted-input
  • mcp__printdash__request_reorder untrusted-input
  • mcp__printdash__approve_order untrusted-input
  • mcp__printdash__reject_order untrusted-input

Pin

Keep the decision: fail CI when the tools change, follow every change, or show a badge.

Pin in CI

Fail a build when the tools you reviewed are not the tools the server serves today.

curl -s "https://anlyon.dev/api/v1/servers/io.printdash/printdash/verify?hash=851694439fbd2bd2fd96cceda2a186076a346c2c83ec145f3f523a516e04aaee" | jq -e '.changed == false'

Pinned hash 851694439fbd, from Oct 29, 2026, 12:18 UTC.

Watch

Get told when its tools change: a new tool, a new description, a new class.

https://anlyon.dev/servers/io.printdash/printdash/changes.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for io.printdash/printdash
[![anlyon.dev](https://anlyon.dev/badge/io.printdash/printdash.svg)](https://anlyon.dev/servers/io.printdash/printdash)

Source: MCP Registry. Synced Oct 29, 2026, 12:18 UTC.