{"name":"com.inkfe/print","slug":"inkfe-print","title":"InkFE Print","description":"Personalize business-card templates, review proofs, and prepare Shopify checkout.","url":"https://mcp.market/server/inkfe-print","rating":null,"grade":"C","score":57,"certified":false,"status":"active","category":"ecommerce","tags":["ecommerce"],"presence":{"score":8,"stars":null,"forks":null,"downloads_week":null,"last_push_at":null,"license":null},"uptime":{"percent":100,"checks":5,"ok":5,"last_checked_at":"2026-09-24T04:35:39.687Z","last_ok_at":"2026-09-24T04:35:39.687Z","latency_ms":215},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":null,"website":"https://www.inkfe.com/mcp/docs","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://www.inkfe.com/api/mcp"}],"packages":[],"tools":[{"name":"approve_design_proof","description":"Only call after showing both front/back previews, warnings and exact print options and receiving explicit customer artwork approval in the AI conversation. Report frontReviewed, backReviewed and artworkApproved as true only when that happened. Records agent-reported approval for immutable artwork and configuration, not independent human-click evidence or payment consent. Returns approvalId, evidence and expiry. Repeated approval of identical terms is idempotent. Changed artwork or print options requires fresh review and approval. A new quote with unchanged print configuration can reuse the artwork approval; the buyer separately confirms commercial terms.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guestToken":{"description":"Private guestToken from start_guest_session, required only for anonymous guest design and checkout. Omit when connected through InkFE customer sign-in (OAuth) or a provisioned integration key; those connections must not start a guest session. Keep guest tokens in this conversation; never put them in a URL or share them.","type":"string","maxLength":128},"designToken":{"type":"string","minLength":1,"maxLength":4096},"quoteToken":{"type":"string","minLength":1,"maxLength":8192},"frontReviewed":{"type":"boolean","const":true},"backReviewed":{"type":"boolean","const":true},"artworkApproved":{"type":"boolean","const":true}},"required":["designToken","quoteToken","frontReviewed","backReviewed","artworkApproved"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"create_business_card_design","description":"Applies the buyer's field values (and logo, if the template needs one) to a template, fits the text to its printable area, renders both sides as preview images, and returns a design token. Before creating a guest design, explain: unpaid, unsaved drafts expire 30 days after the design request starts. Verified saving keeps the draft; checkout and unresolved purchase artwork is protected. Seven-day token expiry is separate from deletion. Call list_business_card_templates first and collect a non-blank value for every field it lists, keyed by `attribute`; a blank or missing value fails with missing_required_fields. Pass a public https PNG or JPEG URL as `logoUrl` only when the template has an imageUrl field; omit it otherwise. Returns designToken, designId, templateId, revisionId, expiresAt (7 days out), previews (a 300-second signed URL plus width/height for each side; the pixels are also attached as image content blocks), and any text_shrunk warnings from fitting a value to its layer. Present both attached proof images directly, or provide labeled front/back links to the exact preview URLs if the host cannot display them. Do not require computer setup, downloads or re-uploading for proof review. Refresh expired links rather than creating another design. An accountOwned result identifies a verified customer, not an integration key. Results also include a private saveUrl for browser ownership verification; offer it only when the buyer wants to save. Saving requires sign-in; subsequent checkout of that design requires an AI connection authorized by the same InkFE account. If customer OAuth is unavailable, complete checkout before saving. Use a stable requestId; retry the same request after a timeout. Revise with revise_business_card_design and refresh expired links with refresh_design_proof. Show both previews and warnings, get exact print options and get_quote, then record explicit customer approval with approve_design_proof before create_checkout. Fails with unknown_template, missing_required_fields {attributes}, unknown_field {attribute}, value_too_long {attribute}, unsupported_characters {attribute}, logo_required, logo_fetch_failed, logo_unsupported, rate_limited {retryAfterSeconds} (too many designs from this API key in a short time), or connector_unavailable.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"requestId":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,128}$","description":"A new stable requestId for each intentional design/revision. Reuse the same id and inputs after a timeout; never automatically replace an in-progress request."},"guestToken":{"description":"Private guestToken from start_guest_session, required only for anonymous guest design and checkout. Omit when connected through InkFE customer sign-in (OAuth) or a provisioned integration key; those connections must not start a guest session. Keep guest tokens in this conversation; never put them in a URL or share them.","type":"string","maxLength":128},"templateId":{"type":"integer","exclusiveMinimum":0,"maximum":9007199254740991,"description":"The templateId from list_business_card_templates identifying which Classic business card to design."},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","maxLength":2000},"description":"Every attribute from the chosen template's `fields` list (see list_business_card_templates) is required, keyed by `attribute`, with the buyer's text for it. Do not include the logo field here: pass its image via logoUrl instead. A blank or missing value fails with missing_required_fields."},"logoUrl":{"description":"A public https URL to a PNG or JPEG logo image, required only when the template has an imageUrl field (see list_business_card_templates). Omit it for every other template.","type":"string","maxLength":2048}},"required":["requestId","templateId","fields"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"create_checkout","description":"Turns a design token from create_business_card_design plus the buyer's chosen pack options and email into a Shopify checkout URL, with the print-ready artwork attached to the line item. Call this only after the buyer has approved both design previews and chosen a value for every customer-facing option get_product lists for the business card product (for example Corners and Quantity). selectedOptions must include every option get_product lists, keyed by option name with the buyer's chosen value exactly as listed there. Requires approvalId from approve_design_proof for the same artwork and configuration, plus a quoteToken from get_quote confirmed by the buyer. One approval creates one purchase attempt; retries must keep the same approval, buyer and purchase terms. Uncertain outcomes require recovery, never a replacement purchase. Expired, altered or changed quote terms stop checkout; request a fresh quote and renewed confirmation. For a changed price on an existing purchase, keep the same buyer/artwork/options and set confirmUpdatedQuote:true only after explicit customer confirmation of the fresh quote. This reuses the original purchase/cart; unknown cart outcomes stay on hold. Shopify verifies the resulting cart subtotal before any payment link is returned, then confirms final shipping, tax, discounts and payable total in checkout. Returns quoteId, quotedSubtotal, checkoutUrl, cartId, designAssetId, and lineItem { productTitle, variantTitle, packPrice, currency, selectedOptions }. Fails with quote_required, quote_invalid, quote_expired, quote_changed, quote_unavailable, access_denied, design_token_invalid, design_token_expired, design_not_found, unknown_template, product_unavailable, variant_unavailable {selectedOptions, availableOptions}, rate_limited {retryAfterSeconds}, storage_failed, cart_create_failed, or connector_unavailable.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"confirmUpdatedQuote":{"description":"Only set true after showing changed commercial terms from a fresh get_quote and receiving the customer's explicit confirmation. Reuses the existing purchase, buyer and approved artwork; never creates a replacement for an unknown cart outcome. Omit for ordinary retries.","type":"boolean","const":true},"approvalId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The approvalId from approve_design_proof for this exact artwork and print configuration; artwork approval is separate from payment consent."},"quoteToken":{"type":"string","minLength":1,"maxLength":8192,"description":"The unexpired quoteToken from get_quote whose product terms the buyer confirmed. Expired or changed terms require a new quote and confirmation. Keep this token in the conversation; never put it in a URL."},"guestToken":{"description":"Private guestToken from start_guest_session, required only for anonymous guest design and checkout. Omit when connected through InkFE customer sign-in (OAuth) or a provisioned integration key; those connections must not start a guest session. Keep guest tokens in this conversation; never put them in a URL or share them.","type":"string","maxLength":128},"designToken":{"type":"string","minLength":1,"maxLength":4096,"description":"The designToken returned by create_business_card_design for the design the buyer approved."},"selectedOptions":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"value":{"type":"string","minLength":1,"maxLength":255}},"required":["name","value"]},"description":"Every customer-facing option get_product lists for the business card product, keyed by option `name` (for example \"Corners\") with the buyer's chosen `value` (for example \"Square\") exactly as listed. Fails with variant_unavailable when no purchasable variant matches."},"buyer":{"type":"object","properties":{"email":{"type":"string","format":"email","pattern":"^(?:[A-Za-z0-9_'+\\-]+\\.)*[A-Za-z0-9_'+\\-]*[A-Za-z0-9_+-]@(?:[A-Za-z0-9][A-Za-z0-9\\-]*\\.)+[A-Za-z]{2,}$","description":"The checkout email address supplied by the customer for this purchase. Ask if missing; never infer it from the printed artwork. Sent to Shopify for guest checkout and stored with InkFE design-asset/order records. It does not prove ownership."},"name":{"description":"The buyer's name supplied for this purchase, for reference only. Omit if unknown; do not infer it from the printed name.","type":"string","minLength":1,"maxLength":120}},"required":["email"],"description":"The buyer completing checkout."}},"required":["approvalId","quoteToken","designToken","selectedOptions","buyer"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_product","description":"Describe one public InkFE product by handle. Returns handle, title, productType, hasBack (whether a back side is printed), dimensions in inches when known, the customer-facing options with a role (radio, size, quantity or frame) and their allowed values, every variant with its variantId, selectedOptions, packPrice, currency and availableForSale flag, and the product page URL. Use the variant's selectedOptions (option name plus value, exactly as listed) when the buyer chooses a pack size; a variant with availableForSale=false cannot be bought. Supply selectedOptions to resolve a complete configuration or get actionable missing/invalid/unavailable guidance. Read quantity for pack versus line-quantity rules, artwork for supported actions, source for freshness and policies for official policy links. A resolved variant is not artwork approval or a purchase quote. Fails with product_unavailable when the handle is unknown or the product is not sold publicly.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"selectedOptions":{"description":"The buyer's current choices; partial selections are welcome. Returns missing options, invalid choices, compatible choices and the exact available variant when complete. Never assume a default.","maxItems":8,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"value":{"type":"string","minLength":1,"maxLength":255}},"required":["name","value"]}},"handle":{"type":"string","minLength":1,"maxLength":255,"description":"The product handle exactly as returned by search_products or list_business_card_templates (for example \"business-card-essential-standard\")."}},"required":["handle"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"get_quote","description":"Read an exact available variant price for the configured business-card pack. Returns printed quantity, decimal subtotal/currency, a 10-minute quoteToken and authored production business-day range when known. Shipping, tax, discounts, delivery availability and the final total remain unknown until Shopify checkout; this is not a price lock or a promised arrival date. Numeric quantities and other products are unsupported. Show the terms and obtain buyer confirmation before passing quoteToken to create_checkout. Never automatically accept a replacement quote.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"handle":{"type":"string","minLength":1,"maxLength":255,"description":"The product handle exactly as returned by search_products or list_business_card_templates (for example \"business-card-essential-standard\")."},"selectedOptions":{"minItems":1,"maxItems":8,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"maxLength":255},"value":{"type":"string","minLength":1,"maxLength":255}},"required":["name","value"]}},"lineQuantity":{"description":"This business-card journey supports exactly one pack. Choose its printed Quantity in selectedOptions; numeric line quantities are unsupported.","type":"integer","exclusiveMinimum":0,"maximum":9007199254740991}},"required":["handle","selectedOptions"],"$schema":"https://json-schema.org/draft/2020-12/schema","additionalProperties":false}},{"name":"list_business_card_templates","description":"Start here to design a business card. Lists the InkFE Classic business card templates a buyer can personalise, with templateId, name, orientation (landscape or portrait), widthInches and heightInches, previewUrls for the front and back artwork, hasBack, the productHandle to purchase, and the `fields` the template needs. Each field has an `attribute` (the key to send when creating a design), a human label, the side it prints on (front, back or both), an inputType (text, multiline, url for a QR code destination, or imageUrl for a logo), whether it is required, and a sampleValue showing the placeholder text so you can judge length and tone. Show the buyer the preview images and field list, help them pick a template, then collect a value for every required field (a logo field needs a public https PNG or JPEG URL; a QR field needs the https URL the code should open). Check the productHandle with get_product and follow its artwork workflow. For a supported product, call create_business_card_design with the collected values and templateId. After preview approval and configuration selection, call get_quote, show the commercial terms and obtain confirmation. Pass designToken and quoteToken to create_checkout for a Shopify checkout URL. Takes no arguments.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"refresh_design_proof","description":"Refresh expired front/back proof links and return both saved images for the same immutable design. Requires the original guest/integration or verified owner. Never rerenders, extends design expiry, or grants approval. Missing or expired design state requires a new design and review.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guestToken":{"description":"Private guestToken from start_guest_session, required only for anonymous guest design and checkout. Omit when connected through InkFE customer sign-in (OAuth) or a provisioned integration key; those connections must not start a guest session. Keep guest tokens in this conversation; never put them in a URL or share them.","type":"string","maxLength":128},"designToken":{"type":"string","minLength":1,"maxLength":4096}},"required":["designToken"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"revise_business_card_design","description":"Create a new immutable design from an authorized prior design, using the same published template revision. Supply the complete field set and logo where needed, not a partial patch. Use a new requestId for an intentional edit and the same id for retries. Returns both previews and a new designToken. Prior approval never approves the new revision; review both sides again. If the template changed, select its current version and create a new design.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"requestId":{"type":"string","pattern":"^[A-Za-z0-9_-]{8,128}$","description":"A new stable requestId for each intentional design/revision. Reuse the same id and inputs after a timeout; never automatically replace an in-progress request."},"guestToken":{"description":"Private guestToken from start_guest_session, required only for anonymous guest design and checkout. Omit when connected through InkFE customer sign-in (OAuth) or a provisioned integration key; those connections must not start a guest session. Keep guest tokens in this conversation; never put them in a URL or share them.","type":"string","maxLength":128},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string","maxLength":2000},"description":"Every attribute from the chosen template's `fields` list (see list_business_card_templates) is required, keyed by `attribute`, with the buyer's text for it. Do not include the logo field here: pass its image via logoUrl instead. A blank or missing value fails with missing_required_fields."},"logoUrl":{"description":"A public https URL to a PNG or JPEG logo image, required only when the template has an imageUrl field (see list_business_card_templates). Omit it for every other template.","type":"string","maxLength":2048},"designToken":{"type":"string","minLength":1,"maxLength":4096}},"required":["requestId","fields","designToken"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"revoke_guest_session","description":"Revokes the supplied guest session so it cannot create designs or checkout again. Existing orders are unaffected. This does not delete artwork and cannot revoke another session without its private token.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"guestToken":{"type":"string","minLength":1,"maxLength":128}},"required":["guestToken"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"search_products","description":"Search the public InkFE print catalog by free text. Use this when the buyer wants something other than a business card, or to confirm a product exists before calling get_product. Returns up to `limit` products with handle, title, productType, priceRange (min/max pack price and currency), the customer-facing options with their allowed values, and the product page URL. Pass the returned `handle` to get_product for variants and dimensions. Optional productType, templateCompatibleOnly and availableOnly filters narrow discovery. Each result distinguishes catalog visibility from template support; failed detail reads are explicitly unavailable. Prices are not quotes. Business cards designed from a template do not need this tool: list_business_card_templates already reports the productHandle to buy.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"productType":{"description":"Optional exact productType filter from catalog results, case-insensitive.","type":"string","minLength":1,"maxLength":120},"templateCompatibleOnly":{"description":"Only products compatible with this MCP's verified business-card template journey. Does not enable writes on a catalog-only endpoint.","type":"boolean"},"availableOnly":{"description":"Only products with at least one currently purchasable variant.","type":"boolean"},"query":{"type":"string","minLength":1,"maxLength":160,"description":"Free-text search over the public InkFE catalog, matched against product titles, types and tags (for example \"business cards\", \"poster\", \"greeting card\")."},"limit":{"default":10,"description":"Maximum number of products to return (1-20, default 10).","type":"integer","minimum":1,"maximum":20}},"required":["query"],"$schema":"https://json-schema.org/draft/2020-12/schema"}},{"name":"start_guest_session","description":"Only for anonymous callers when guest access is enabled. If this AI app is already connected through InkFE customer sign-in (OAuth) or a provisioned integration key, skip this tool and omit guestToken on design/checkout calls. Before guest designing, tell the customer: unpaid, unsaved guest drafts expire 30 days after the design request starts; save through verified sign-in to keep them. Checkout or unresolved purchase records are protected. Returns a private guestToken valid for seven days; token expiry is separate from draft retention. Pass it to create_business_card_design and create_checkout in this conversation. Claimed designs require an AI connection authorized by the same InkFE account. Starting a session does not place or pay for an order.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"$schema":"https://json-schema.org/draft/2020-12/schema"}}],"scan":{"score":57,"grade":"C","scanned_at":"2026-09-23T04:54:08.888Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-23T04:54:08.731Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 968ms"]},"poisoning":{"score":13,"max":15,"notes":["11 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 3 write-action tools with no auth"]},"maintenance":{"score":3,"max":15,"notes":["no repository listed"]},"identity":{"score":4,"max":10,"notes":["verified namespace with website, no repo"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"},{"id":"poison.long-description","severity":"low","component":"poisoning","title":"Unusually long tool description (over 2,000 characters)","evidence":"tool create_business_card_design: …Applies the buyer's field values (and logo, if the template needs one) to a template, fits the text to its printable area, renders both sides as preview images, and returns a design token. Before creating a guest design, explain: unpaid, unsaved drafts expire 30 days after the design request starts. Verified saving keeps the draft; checkout and unresolved purchase artwork is protected. Seven-day token expiry is separate from deletion. Call list_business_card_templates first and collect a non-blank value for every field it lists, keyed by `attribute`; a blank or missing value fails with missing_required_fields. Pass a public https PNG or JPEG URL as `logoUrl` only when the template has an imageUrl field; omit it otherwise. Returns designToken, designId, templateId, revisionId, expiresAt (7 days out), previews (a 300-second signed URL plus width/height for each side; the pixels are also attached as image content blocks), and any text_shrunk warnings from fitting a value to its layer. Present both attached proof images directly, or provide labeled front/back links to the exact preview URLs if the host cannot display them. Do not require computer setup, downloads or re-uploading for proof review. Refresh expired links rather than creating another design. An accountOwned result identifies a verified customer, not an integration key. Results also include a private saveUrl for browser ownership verification; offer it only when the buyer wants to save. Saving requires sign-in; subsequent checkout of that design requires an AI connection authorized by the same InkFE account. If customer OAuth is unavailable, complete checkout before saving. Use a stable requestId; retry the same request after a timeout. Revise with revise_business_card_design and refresh expired links with refresh_design_proof. Show both previews and warnings, get exact print options and get_quote, then record explicit customer approval with approve_design_proof before create_checkout. Fails with unknown_template, missing_required_fields {attributes}, unknown_field {attribute}, value_too_long {attribute}, unsupported_characters {attribute}, logo_required, logo_fetch_failed, logo_unsupported, rate_limited {retryAfterSeconds} (too many designs from this API key in a short time), or connector_unavailable.…"},{"id":"maint.no-repo","severity":"low","component":"maintenance","title":"No source repository listed"}],"inputs":{"probes":[{"url":"https://www.inkfe.com/api/mcp","reachable":true,"authRequired":false,"latencyMs":968,"serverInfo":{"name":"inkfe-print","version":"0.1.0"}}],"packages":[],"repo":{"found":false},"icon":{"url":"https://www.inkfe.com/apple-icon.png","source":"registry","width":180,"height":180},"presence":{"stars":null,"forks":null,"downloadsWeek":null,"license":null,"lastPushAt":null,"score":8}}}},"grade_history":[],"reviews":[]}