# AgentMade Print on Demand (remote · pod.agentmade.dev)

Print on demand for AI agents. No sign-up. Picture, words or logo on a tee, hoodie or tote.

- Trust score: 71/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-11-05

## Components

- remote · `pod.agentmade.dev`: 71/100 (this document), [markdown](https://verifymcp.io/servers/alexmensak-agentmade-print-on-demand/mcp-pay.md), [page](https://verifymcp.io/servers/alexmensak-agentmade-print-on-demand/mcp-pay)

## Channel facts

- Endpoint: `https://pod.agentmade.dev/mcp/pay`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-11-05.

- **Endpoint Security**: 49/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (cancel_order).
  - HTTPS enforcement could not be verified: the plaintext port answered with HTTP 405, which proves neither a plaintext path nor enforcement.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC is configured correctly; the domain's records validate against the full chain to the root.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 72/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 2868 tokens (~318/item across 9 items; 9 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 80/100
  - Stability observed for 24 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 96/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 88% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 9 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 10 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### How do I install the AgentMade Print on Demand MCP server?

AgentMade Print on Demand is a hosted endpoint at https://pod.agentmade.dev/mcp/pay, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http alexmensak-agentmade-print-on-demand 'https://pod.agentmade.dev/mcp/pay'
```

### Cursor

```json
{
  "mcpServers": {
    "alexmensak-agentmade-print-on-demand": {
      "url": "https://pod.agentmade.dev/mcp/pay"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "alexmensak-agentmade-print-on-demand": {
      "type": "http",
      "url": "https://pod.agentmade.dev/mcp/pay"
    }
  }
}
```

### Codex

```toml
[mcp_servers.alexmensak-agentmade-print-on-demand]
url = "https://pod.agentmade.dev/mcp/pay"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "alexmensak-agentmade-print-on-demand": {
      "type": "remote",
      "url": "https://pod.agentmade.dev/mcp/pay",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add alexmensak-agentmade-print-on-demand --url 'https://pod.agentmade.dev/mcp/pay' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  alexmensak-agentmade-print-on-demand:
    url: "https://pod.agentmade.dev/mcp/pay"
```

### Netclaw

```json
{
  "McpServers": {
    "alexmensak-agentmade-print-on-demand": {
      "Transport": "http",
      "Url": "https://pod.agentmade.dev/mcp/pay"
    }
  }
}
```

### Vellum

```bash
assistant mcp add alexmensak-agentmade-print-on-demand -t streamable-http -u 'https://pod.agentmade.dev/mcp/pay'
```

### Other

```json
{
  "mcpServers": {
    "alexmensak-agentmade-print-on-demand": {
      "type": "http",
      "url": "https://pod.agentmade.dev/mcp/pay"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-11-04 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-11-01 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 63 to 67. That category is still filling its 30-day observation window: 19 days of observed history at the previous scan, 20 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-30 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 57 to 60. That category is still filling its 30-day observation window: 17 days of observed history at the previous scan, 18 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-28 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-26 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-24 (score 66, +1)

No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-22 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-10-20 (score 64, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (9)

### `search_products` (~162 tokens)

Search printable products

Use this when the user wants their own picture, words or logo printed on a T-shirt, hoodie, sweatshirt or tote bag and delivered, as a gift or for themselves. Finds products by free text, category, colour and size. Returns product_id, image_url (a product photo, or null), colours, sizes and print placements. No account needed. Not for mugs, posters, caps, stickers or embroidery.

Input parameters:

- `category` (string)
- `color` (string): Only products available in this colour, e.g. "black".
- `query` (string): Free-text description, e.g. "heavyweight black t-shirt" or "hoodie".
- `size` (string): Only products available in this size, e.g. "XL".

Output parameters:

- `count` (integer)
- `note` (string)
- `products` (array)

### `get_product` (~102 tokens)

Get product details

Full details for one product: colours with hex codes and product photos (images: url, view, style, alt; empty when none yet; ai_generated marks AI photos), sizes, variant ids, print placements with the print area in mm, placement presets (for example center_chest, left_chest, full_front, full_back), materials and artwork guidance.

Input parameters:

- `product_id` (string, required): Product id from search_products, e.g. "tee-heavyweight".

Output parameters:

- `artwork_guidance` (string)
- `brand` (string|null)
- `category` (string)
- `colors` (array)
- `decoration_method` (string)
- `description` (string)
- `image_url` (string|null): A product photo, or null when none is approved yet.
- `model` (string)
- `next_step` (string): What the agent should do next, in plain language.
- `placements` (array)
- `printed_in_regions` (array): Regions where this product is printed, e.g. ["EU", "US"].
- `product_id` (string): Use in get_product, validate_artwork and quote.
- `production_business_days` (object)
- `size_chart_cm`
- `sizes` (array): Size values to pass as size.
- `title` (string)
- `variants` (array)

### `validate_artwork` (~475 tokens)

Upload and validate artwork

Upload artwork and check that it prints well on one product placement. Send exactly one of: artwork with svg (markup, best for text and logos), base64 (a PNG, JPEG or SVG file up to about 2 MB, no data: prefix) or url (a public HTTPS link to the file); file (a file object from your client); or upload_link:true when you cannot send the file in this call. Returns artwork_id and PASS/WARN/FAIL checks: print size in mm, resolution (DPI), print and safe area, transparent background, contrast with the product colour. For photos and AI images use preset center_chest. Use the artwork_id in quote.

Input parameters:

- `artwork` (object): New artwork to upload: exactly one of svg, base64 or url.
- `artwork_id` (string): Re-validate artwork uploaded earlier, or validate the file of an upload link.
- `color` (string): Product colour, for the contrast check.
- `file` (object): A file that your client gives you as a file object (for example in ChatGPT).
- `height_mm` (number): Maximum printed height in millimetres.
- `left_mm` (number): Distance from the left edge of the print area. Default: horizontally centred.
- `placement` (string): Print location on the product, e.g. "front" or "back". See get_product for the list.
- `preset` (string): Named position inside the placement, e.g. "center_chest", "left_chest", "full_front". Defaults to the placement default.
- `product_id` (string, required): Product to print on.
- `size` (string): Garment size, e.g. "XL". Print areas can differ by size; without it the smallest size is checked.
- `top_mm` (number): Distance from the top of the print area to the top of the artwork.
- `upload_link` (boolean): Set true when you cannot send the file in this call. The answer gives an artwork_id and a one-time upload_url: upload with curl, or give the link to the person. Then call validate_artwork with the ar…
- `width_mm` (number): Exact printed width of the visible artwork in millimetres. Height follows the aspect ratio.

Output parameters:

- `artwork` (object)
- `artwork_id` (string): Only in the upload_link answer: the reserved id for the file.
- `expires_at` (string)
- `next_step` (string): What the agent should do next, in plain language.
- `upload_url` (string): Only in the upload_link answer: the one-time upload link.
- `validation` (object)

### `create_mockup` (~318 tokens)

Create a preview mockup

Render a preview PNG of the artwork on the product in the chosen colour and placement. style flat draws the placement; style packshot uses a product photo with the exact print at real size, or gives the flat preview with a note when no photo exists. Returns mockup_url, blank_image_url and image_prompt (an optional text prompt for an illustration of a person who wears the product; such an image is an illustration, not the exact print). Optional.

Input parameters:

- `artwork_id` (string, required)
- `color` (string, required): Product colour, e.g. "black".
- `height_mm` (number): Maximum printed height in millimetres.
- `left_mm` (number): Distance from the left edge of the print area. Default: horizontally centred.
- `placement` (string): Print location on the product, e.g. "front" or "back". See get_product for the list.
- `preset` (string): Named position inside the placement, e.g. "center_chest", "left_chest", "full_front". Defaults to the placement default.
- `product_id` (string, required)
- `size` (string)
- `style` (string): flat: quick placement drawing. packshot: product photo with the exact print at real size (where a product photo exists).
- `top_mm` (number): Distance from the top of the print area to the top of the artwork.
- `width_mm` (number): Exact printed width of the visible artwork in millimetres. Height follows the aspect ratio.

Output parameters:

- `blank_image_url` (string|null)
- `image_prompt` (string): A prompt for your own image model, to make an illustration from mockup_url.
- `mockup_url` (string): PNG preview of the exact print on the product.
- `note` (string)
- `style` (string)
- `summary` (string)
- `validation_status` (string)

### `quote` (~302 tokens)

Get a delivered price quote

Price printed items delivered to one destination. Returns quote_id, the total that the payer pays (products, shipping and VAT where AgentMade collects it), what is not included, the delivery estimate and the expiry. Needs artwork_id values from validate_artwork. Charges nothing. For a destination where orders are not open, the quote is for information only.

Input parameters:

- `buyer` (object): Only for a company purchase with an invoice. Business checkout is not open yet: the quote charges destination VAT.
- `currency` (string): ISO 4217 currency of the payer, e.g. "USD". Optional. The quote states the currency that it uses.
- `deliver_by` (string): Date by which the parcel should arrive, e.g. "2026-12-20". The quote is never refused because of it: if the estimate is later, the quote says so.
- `items` (array, required)
- `preference` (string): How AgentMade picks the manufacturing route: fewest_packages (default: fewest parcels, then best price among the fastest routes), cheapest, or fastest.
- `purpose` (string): What the order is for. Set it only if the user already said it. Do not ask for it.
- `ship_to` (object, required): Destination. country_code is required; postal_code and state_code improve shipping accuracy.
- `speed` (string): Shipping speed. Only standard is offered now; express returns a note and a standard quote.

Output parameters:

- `assumptions` (array)
- `currency` (string)
- `delivery_estimate_business_days` (object)
- `delivery_estimate_dates` (object): Calendar dates (YYYY-MM-DD) for the delivery estimate. Tell the user these dates.
- `expires_at` (string)
- `items` (array)
- `next_step` (string): What the agent should do next, in plain language.
- `notes` (array): Things to tell the user before purchase.
- `package_count` (integer)
- `packages` (array)
- `purchase_open` (boolean): False when this destination does not take orders yet or the quote expired. Then do not call purchase.
- `quote_id` (string): Use in purchase before expires_at.
- `ship_to` (object)
- `shipping` (object)
- `status` (string)
- `tax` (object)
- `totals` (object): total_minor is the full amount that the payer pays. Show total_formatted to the user. products_minor and shipping_minor are before VAT; tax_minor is the VAT included in the total, or 0 when tax is no…

### `purchase` (~366 tokens)

Place the order and get the payment link

Turn a quote into an order. Needs quote_id, the full recipient address (it must match the quoted destination) and rights_attestation=true. contact_email is the payer's own email, never the gift recipient's. Returns order_id and payment.url: the order page where the person pays by card, Apple Pay or Google Pay. Nothing is printed until the payment is confirmed. Idempotent per quote_id.

Input parameters:

- `contact_email` (string): Email of the payer, for the order confirmation and the payment receipt. Not the recipient's email: for a gift, the recipient must not see the price. Optional.
- `gift_message` (string): Short message for the packing slip of a gift. Not printed yet: the answer says so.
- `orders` (array): Many parcels with one payment: one quote_id and one recipient per parcel. Not live yet: call purchase once per quote_id for now.
- `payment_capabilities` (array): Payment methods the calling agent can use. "hosted_checkout" = a link that the person opens to pay by card, Apple Pay or Google Pay. Always supported.
- `quote_id` (string): quote_id returned by quote, for one parcel. Set quote_id or orders, not both.
- `recipient` (object): Shipping address. Country, state and postal code must match the quote destination. Send the full address when you have it. If you cannot collect the street address, send only country_code, postal_cod…
- `rights_attestation` (boolean, required): Must be true: confirms the customer owns or is licensed to print all submitted artwork, and that it is not prohibited content.

Output parameters:

- `address_needed` (boolean): True when purchase had no street address: the person enters it on the order page before paying.
- `delivery_estimate_business_days`: Null when the order ended (cancelled, refunded, rejected, expired or delivered).
- `destination`: While address_needed: the quoted destination.
- `items` (array)
- `next_step` (string): What the agent should do next, in plain language.
- `notes` (array)
- `order_id` (string): A bearer key: whoever has it can read and cancel the order. Do not share it publicly.
- `order_url` (string): The order page. The person sees the status there.
- `payment` (object)
- `quote_id` (string)
- `shipments` (array)
- `status` (string)
- `status_reason` (string|null)
- `timeline` (array)
- `total` (object)

### `get_order` (~69 tokens)

Get order status

Current order status (AWAITING_PAYMENT, PAID, SUBMITTED, IN_PRODUCTION, SHIPPED, DELIVERED or an exception state), next_step in plain language, the payment link while unpaid, shipments and a timeline.

Input parameters:

- `order_id` (string, required): order_id returned by purchase.

Output parameters:

- `address_needed` (boolean): True when purchase had no street address: the person enters it on the order page before paying.
- `delivery_estimate_business_days`: Null when the order ended (cancelled, refunded, rejected, expired or delivered).
- `destination`: While address_needed: the quoted destination.
- `items` (array)
- `next_step` (string): What the agent should do next, in plain language.
- `order_id` (string): A bearer key: whoever has it can read and cancel the order. Do not share it publicly.
- `order_url` (string): The order page. The person sees the status there.
- `payment` (object)
- `quote_id` (string)
- `shipments` (array)
- `status` (string)
- `status_reason` (string|null)
- `timeline` (array)
- `total` (object)

### `track_order` (~40 tokens)

Track shipment

Carrier, tracking number and tracking link for each shipment of an order, and the delivery estimate.

Input parameters:

- `order_id` (string, required): order_id returned by purchase.

Output parameters:

- `delivery_estimate_business_days`: Null when the order ended (cancelled, refunded, rejected, expired or delivered).
- `next_step` (string): What the agent should do next, in plain language.
- `order_id` (string)
- `order_url` (string)
- `shipments` (array)
- `status` (string)
- `tracking_available` (boolean)

### `cancel_order` (~83 tokens)

Cancel an order

Cancel an order. Unpaid: closes the payment link; nothing is charged. Paid and not yet in production: cancels and refunds in full. In production or shipped: cannot be cancelled; the error gives the reason. A second call on a cancelled order is safe.

Input parameters:

- `order_id` (string, required): order_id returned by purchase.
- `reason` (string)

Output parameters:

- `address_needed` (boolean): True when purchase had no street address: the person enters it on the order page before paying.
- `delivery_estimate_business_days`: Null when the order ended (cancelled, refunded, rejected, expired or delivered).
- `destination`: While address_needed: the quoted destination.
- `items` (array)
- `next_step` (string): What the agent should do next, in plain language.
- `order_id` (string): A bearer key: whoever has it can read and cancel the order. Do not share it publicly.
- `order_url` (string): The order page. The person sees the status there.
- `payment` (object)
- `quote_id` (string)
- `shipments` (array)
- `status` (string)
- `status_reason` (string|null)
- `timeline` (array)
- `total` (object)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/alexmensak-agentmade-print-on-demand/mcp-pay#diagnostics

## Score history

- 2026-11-05: 71
- 2026-11-04: 71
- 2026-11-03: 70
- 2026-11-02: 70
- 2026-11-01: 70
- 2026-10-31: 69
- 2026-10-30: 69
- 2026-10-29: 68
- 2026-10-28: 68
- 2026-10-27: 67
- 2026-10-26: 67
- 2026-10-25: 66
- 2026-10-24: 66
- 2026-10-23: 65
- 2026-10-22: 65
- 2026-10-21: 64
- 2026-10-20: 64
- 2026-10-19: 63
- 2026-10-18: 63
- 2026-10-17: 63
- 2026-10-16: 62
- 2026-10-15: 62
- 2026-10-14: 61
- 2026-10-13: 61
- 2026-10-12: 60

## Common questions

### What is the AgentMade Print on Demand MCP server?

AgentMade Print on Demand is an MCP server listed in the public MCP registry as io.github.alexmensak/agentmade-print-on-demand. Print on demand for AI agents. No sign-up. Picture, words or logo on a tee, hoodie or tote. This page covers its hosted endpoint (https://pod.agentmade.dev/mcp/pay).

### Is the AgentMade Print on Demand MCP server safe to use?

AgentMade Print on Demand scores 71 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the AgentMade Print on Demand MCP server expose?

AgentMade Print on Demand exposes 9 tools: search_products, get_product, validate_artwork, create_mockup, quote, and 4 more. Their descriptions and schemas cost roughly 1,917 tokens of context every time the server is loaded.

### Does the AgentMade Print on Demand MCP server require authentication?

No. We connected to AgentMade Print on Demand without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the AgentMade Print on Demand MCP server still maintained?

AgentMade Print on Demand is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What did VerifyMCP test on the AgentMade Print on Demand MCP server?

VerifyMCP ran 12 checks on AgentMade Print on Demand, covering TLS certificate, Authorization, HSTS header, DNSSEC and 8 more. One item could not be completed, a gap on our side rather than a finding about AgentMade Print on Demand: HTTPS. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.

## Links

- Remote endpoint: https://pod.agentmade.dev/mcp/pay
- Repository: https://github.com/alexmensak/agentmade-print-on-demand
- Website: https://pod.agentmade.dev/
- Changelog RSS feed: https://verifymcp.io/servers/alexmensak-agentmade-print-on-demand/mcp-pay.xml
- Changelog JSON feed: https://verifymcp.io/servers/alexmensak-agentmade-print-on-demand/mcp-pay/changelog.json
- Trust report (JSON): https://verifymcp.io/servers/alexmensak-agentmade-print-on-demand/mcp-pay.json
- HTML version of this page: https://verifymcp.io/servers/alexmensak-agentmade-print-on-demand/mcp-pay
