# Productify MCP

Connect your AI client to your Printify shop through Productify. For seller use cases and videos, see [Do it from chat](/printify-chatgpt-mcp).

## Server and prerequisites

- Endpoint: https://www.useproductify.com/api/mcp
- Transport: Streamable HTTP.
- Authentication: OAuth 2.1.

You need a [Productify account](/get-started), a [connected Printify shop](/help/connect-printify-personal-access-token) and a [saved product template](/help/create-and-use-printify-product-templates) for creating products from designs. Your Printify token stays in Productify; do not paste it into a chat or client configuration.

These instructions cover ChatGPT and Codex. Production sign-in accepts approved OpenAI and Claude callback URLs and client metadata; HTTP and OAuth support alone does not make another client compatible.

## Connect ChatGPT

Available on the web with Plus, Pro, Business, Enterprise or Education and developer mode access.

1. Open Settings, then Security and login. Turn on Developer mode.
2. On the Plugins page, select the plus button and name the connection Productify.
3. Enter https://www.useproductify.com/api/mcp and choose OAuth.
4. Sign in to Productify. Select the optional manage permission to create, publish or edit before choosing Allow.
5. In a new chat, select Developer mode from the plus menu, choose Productify and ask to see your saved templates.

Source: [OpenAI developer mode documentation](https://developers.openai.com/api/docs/guides/developer-mode).

## Connect Codex

```sh
codex mcp add productify --url https://www.useproductify.com/api/mcp
codex mcp login productify
```

Alternatively, add this to `~/.codex/config.toml`, then run `codex mcp login productify`:

```toml
[mcp_servers.productify]
url = "https://www.useproductify.com/api/mcp"
```

In the IDE extension: gear menu → MCP servers → Add server → Streamable HTTP. Enter the endpoint, save, restart the extension and select Authenticate. Codex can upload local design files you identify and apply your saved template.

Source: [OpenAI MCP documentation](https://learn.chatgpt.com/docs/extend/mcp).

## Authentication and permissions

OAuth 2.1 with PKCE (S256) for public clients. Dynamic client registration and trusted client ID metadata documents are supported. Production loopback callbacks require trusted client metadata; self-registered loopback clients are not accepted.

Protected resource metadata: https://www.useproductify.com/.well-known/oauth-protected-resource/api/mcp

- `productify`, always granted: read shops, templates and products; stage designs; write listings; read reviews and job progress. Staging also uploads artwork to Printify's media library.
- `productify.manage`, granted only when the seller selects it on the consent screen: create, publish, edit and save the shop's first listing voice. A client request alone does not grant this scope.

Tools use the shop selected in Productify, with no account or shop identifier in their inputs. Work already running keeps its original shop.

Revoke access in Shops → Connected apps → Disconnect. To add manage permission, reconnect and select it. For Codex, disconnect in Productify and run `codex mcp login productify` again.

## Preview, approve, run

1. Call `list_shops_and_templates`, stage the designs and inspect `get_review`.
2. If staging returns `needs_voice`, ask how the seller wants listings to sound, then call `set_shop_voice` and `write_listings`. If they decline, use `write_listings` with `skipVoice: true`. Poll `get_review` until the products report `listingWritten: true` before creating them.
3. Call `preview_create`, `preview_publish` or `preview_edit`. Show the affected products, prices and warnings.
4. After the seller approves that preview, call the corresponding action with the same values and its `confirmToken`. If a product changed, get a new preview and approval.
5. Create, publish and remote price edits return a job. Poll `get_job_status`; other edits finish before the tool returns.

Wait for listing generation to finish. If the seller explicitly wants current titles and descriptions without generated listings, pass `withoutListings: true` to both the creation preview and action.

Creation produces unpublished Printify products. Publishing is a separate preview and approval. Republishing can replace store-side edits. Create, publish and edit actions send the seller an email with a disconnect link.

## Tool reference

| Tool | Scope | Purpose |
| --- | --- | --- |
| list_shops_and_templates | productify | Lists the connected Printify shops, which one is selected, and that shop's saved templates. Call it first for a templateId. |
| stage_designs | productify | Adds attached PNG or JPEG designs, up to 20 per call, to a new upload on a saved template: one product per design. Starts the listings. |
| get_upload_urls | productify | For files on the seller's computer: one-time upload URLs from each file's name, size, type and SHA-256. PUT the bytes, then pass the uploadIds to stage_designs. |
| write_listings | productify | Starts Productify's writer on an unfinished upload: title, description and tags in the shop's voice, following Etsy's tag rules. |
| set_shop_voice | productify.manage | Saves how the shop's listings should sound, only when the shop has no voice yet. |
| get_review | productify | Shows the upload's products: title, file, variant count, price range, whether the listing is written, and print warnings. |
| find_products | productify | Finds products in the selected shop by words in the title, and by status. Returns the 20 most recently changed. |
| get_job_status | productify | Reports the progress of a create, publish or edit run. |
| preview_create, then create_products | productify.manage | Previews, then creates up to 20 products in Printify, unpublished, from one upload or several. |
| preview_publish, then publish_products | productify.manage | Previews, then publishes up to 20 products to the store connected to the Printify shop. |
| preview_edit, then edit_products | productify.manage | Previews, then changes the title, description, tags or price of up to 10 products. |

## Limits and boundaries

- 20 PNG or JPEG files per `stage_designs` or `get_upload_urls` call.
- 20 products per create or publish; 10 per edit.
- One upload per template per call. A create action may include products from several uploads.
- Chat needs a saved template. Choose a new product and print provider [in the web app first](/guides/bulk-create-printify-products-without-template).
- Edits apply to staged products or products created through Productify. Artwork, placement and variant changes stay in the web app.
- Pricing supports fixed retail, profit over each variant's cost or percentage markup. Prices at or below a variant's cost are refused.
- Productify writes listings unless the seller supplies them. Product deletion is not exposed through MCP.

## Troubleshooting

- No templates: select the correct shop, save a template and list templates again.
- Permission denied for a change: reconnect with manage permission selected.
- Listings waiting on credits: show the returned pricing link. After the seller adds enough credits for the upload, call `write_listings` again.
- Preview no longer valid: generate a fresh preview and get approval again.
- Print warning: compare the file's pixel dimensions with the print area. Use an original file or higher-resolution export and review again.

Discovery: [server card](/.well-known/mcp/server-card.json), [Smithery](https://smithery.ai/servers/productify/printify), [llms.txt](/llms.txt).
