Probo Connect MCP

Connect AI assistants to the Probo print-on-demand platform. This MCP server lets Claude, Cursor, Windsurf, VS Code, and other AI tools search products, configure orders, manage uploads, track shipments, and more — all through natural language.
Default order mode is test — no real orders are placed until you set PROBO_API_MODE=production.
Install
All methods require a Probo reseller API key. Get yours from the Probo platform or contact Probo support.
Cursor
Paste this in your browser address bar to install instantly:
cursor://anysphere.cursor-deeplink/mcp/install?name=probo-connect&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsInByb2JvLWNvbm5lY3QtbWNwIl0sImVudiI6eyJQUk9CT19BUElfS0VZIjoieW91ci1hcGkta2V5LWhlcmUifX0=
Cursor opens with a confirmation dialog. After install, replace your-api-key-here with your Probo API key in the MCP settings.
VS Code (GitHub Copilot)
Paste this in your browser address bar:
vscode:mcp/install?%7B%22name%22%3A%22probo-connect%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22probo-connect-mcp%22%5D%2C%22env%22%3A%7B%22PROBO_API_KEY%22%3A%22your-api-key-here%22%7D%7D
Or add to .vscode/mcp.json in your project:
{
"servers": {
"probo-connect": {
"command": "npx",
"args": ["-y", "probo-connect-mcp"],
"env": {
"PROBO_API_KEY": "your-api-key-here"
}
}
}
}
Claude Code (CLI)
claude mcp add probo-connect -- npx -y probo-connect-mcp
Then set your API key:
export PROBO_API_KEY=your-api-key-here
Claude Desktop
Open ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows) and add:
{
"mcpServers": {
"probo-connect": {
"command": "npx",
"args": ["-y", "probo-connect-mcp"],
"env": {
"PROBO_API_KEY": "your-api-key-here"
}
}
}
}
Restart Claude Desktop.
Windsurf
Go to Settings > Cascade > MCP Servers > Add new and enter:
- Name:
probo-connect
- Command:
npx -y probo-connect-mcp
- Environment:
PROBO_API_KEY=your-api-key-here
Available Tools (51)
Products
searchProducts | Search the Probo product catalog by keyword, category, or browse all |
getProductDetails | Get full details for a single product including all options and dimensions |
configureProduct | Configure a product with options and get pricing. Call without options first to see available options |
compareProducts | Side-by-side comparison of 2–8 product codes (dimensions, options, categories) |
getApiProducts | List your custom API products (customer-configured with custom codes) |
getApiProductDetail | Get full details of a single custom API product by customer code |
Pricing & Shipping
getPrice | Calculate price for one or more products before ordering |
getPricingTiers | Get volume discount pricing — price per unit at different quantities |
getShippingMethods | List available shipping methods and carriers |
predictDeliveryETA | Estimate delivery time from your historical delivered orders |
Orders
placeOrder | Place a print order with product configuration, delivery address, and reference |
placeOrderWithApproval | LLM sanity-check via MCP sampling before placing — falls back to direct placement |
bulkPlaceOrders | Place up to 25 orders in one call — returns per-order success/failure |
createDraft | Create a draft order to review on the Probo platform before submitting |
getOrderStatus | Check status of one or more orders — use the order ID from placeOrder |
getAllOrders | List all orders with optional filters (status, date range, pagination) |
cancelOrder | Cancel a pending order (only before production starts) |
releaseOrder | Release a held order for production |
getOrderStats | Aggregate stats for recent orders (total, breakdown by status, spend, avg, top products) |
getPlacedOrderHistory | Local history of orders placed by this MCP instance (works offline) |
Files & Uploads
createUploader | Create a file upload URL for print files after configuring a product |
uploadFileToUploader | Upload a local file directly to a Probo uploader URL |
uploadFolderToUploader | Upload every print file in a local folder to an uploader URL |
getImagePreview | Fetch an image URL and return it inline so the user can see the preview |
Order Templates
Templates persist in ~/.probo-connect/ across sessions.
saveOrderTemplate | Save a full order configuration by name for quick reuse |
getOrderTemplates | List all saved order templates |
deleteOrderTemplate | Delete a saved template |
placeOrderFromTemplate | Place a new order from a saved template (with optional overrides) |
getCuratedTemplates | Library of starter templates (banner, fabric, roll-up) |
Favorites
saveFavorite | Save a product reference as a favorite |
getFavorites | List all saved favorites |
deleteFavorite | Remove a favorite |
Personalization
getRecommendations | Product recommendations based on your profile focus |
elicitMissingFields | Ask the AI client (via MCP elicitation) for missing order fields — falls back gracefully |
Aliases & Completions
Aliases are user-defined shortcuts that pre-fill any tool with saved arguments. Each saved alias is also exposed as a dynamic MCP prompt (alias-<name>) so it appears in the client's / slash menu. Aliases persist in ~/.probo-connect/aliases.json.
The server also advertises MCP completions (autocomplete) for prompt arguments and the probo://products/{code} resource template — product codes come from the cached catalog, order-reference completion comes from the local placed-orders log.
saveAlias | Save a tool + pre-filled args as a named alias; also registers a dynamic prompt |
listAliases | List all saved aliases |
deleteAlias | Remove an alias and unregister its prompt |
runAlias | Resolve an alias to {tool, args} so the LLM can invoke the underlying tool |
Example:
saveAlias({
name: "office-banner",
description: "Weekly 3×1m banner to the office",
tool: "placeOrder",
args: {
configuration: { products: [{ code: "banner-510", options: [{code:"width",value:3000},{code:"height",value:1000},{code:"amount",value:1},{code:"finishing-all-sides"}], uploader: true }] },
address: { address_company_name: "ACME", address_first_name: "Jan", address_street: "Keizersgracht 123", address_postal_code: "1015AA", address_city: "Amsterdam", address_country: "NL" },
reference: "weekly-banner"
}
})
After saving, alias-office-banner shows up in the prompt menu. Selecting it (or calling runAlias({name:"office-banner"})) lets the LLM call placeOrder with those pre-filled arguments.
Webhooks (HTTP mode)
getWebhookEvents | Return Probo order callbacks received by the built-in webhook endpoint |
Projects & Tickets
getProjects | List all projects (groups of related orders) |
createProject | Create a new project |
getTickets | List support tickets |
createTicket | Create a support ticket for an order issue |
Address Book & User Profile
Addresses and profiles persist across sessions in ~/.probo-connect/.
saveAddress | Save a delivery address by name (e.g. "office") for reuse |
getSavedAddresses | List all saved addresses |
saveUserProfile | Save user preferences (name, company, language, focus) |
getUserProfile | Get the current user profile |
Runtime & Analytics
setMode | Switch between test and production order mode at runtime (requires confirm:true for production) |
getMode | Return the current runtime order mode |
System
getCapabilities | Show the full feature overview (tools, resources, prompts) |
getVersion | Show version and check for updates |
MCP Resources
Read-only data resources exposed by the server:
probo://products | Full product catalog |
probo://products/{code} | Details for a specific product |
probo://orders | Recent order history |
probo://shipping-methods | Available shipping methods |
MCP Prompts
Pre-built prompt templates clients can invoke:
welcome | Introduce yourself and set up a user profile |
order-banner | Step-by-step guide to order a banner |
compare-prices | Compare prices at different quantities |
track-orders | Check status of all recent orders |
reorder | Reorder a previous order by reference |
HTTP Transport
In addition to stdio, the server supports Streamable HTTP for remote or multi-user deployments:
MCP_HTTP_PORT=3100 npx -y probo-connect-mcp --http
Default port: 3100. Use standard MCP clients that speak Streamable HTTP.
When running in --http mode, a built-in webhook endpoint is also exposed:
POST http://<your-host>:3100/webhook/probo
Pass this URL as callback_urls when placing an order — Probo will POST status updates to it, and getWebhookEvents returns what was received.
⚠️ The built-in HTTP transport has no auth layer. Bind it to 127.0.0.1 or front it with a reverse proxy (nginx / Caddy / Cloudflare) with HTTPS + auth before exposing to the internet.
Native Desktop Notifications
When running in --http mode, every webhook event triggers a native desktop notification on macOS, Linux, and Windows — so you see order updates without opening any app.
- macOS:
osascript notifications
- Linux:
notify-send (requires libnotify-bin)
- Windows: PowerShell balloon tip
Disable with:
PROBO_NOTIFICATIONS=off npx -y probo-connect-mcp --http
Quick Examples
Search products:
"What banner products does Probo offer?"
Configure and price:
"Configure a deco-fabric, 2 meters wide and 1.5 meters tall, show me the price"
Place an order:
"Place a test order for a tensioner with spinhook, deliver to: Test Company, Jan de Vries, Keizersgracht 123, 1015AA Amsterdam, NL"
Track an order:
"What's the status of my order order-1776164807276?"
Upload a file:
"Create an uploader for my configured product so I can upload my print file"
Check version:
"What version of Probo Connect am I using?"
Order ID Guide
When working with orders, there are two types of IDs:
Order ID (from placeOrder) | order-1776164807276 | getOrderStatus, cancelOrder, releaseOrder |
| Supplier order number (Probo internal) | 1260224369 | Probo dashboard only — NOT for MCP tools |
Use getAllOrders to see both IDs. The customer_order_id field is your order ID, number is Probo's internal number.
Order Status Codes
accepted | Order accepted by Probo |
not_accepted | Order rejected (check files/configuration) |
in_production | Being produced — can no longer be cancelled |
logistics | Being prepared for shipment |
shipment_created | Announced to carrier, tracking may be available |
shipment_in_transit | Carrier is delivering |
shipment_delivered | Successfully delivered |
canceled | Order was cancelled |
Configuration
PROBO_API_KEY | Yes | — | Your Probo API key |
PROBO_API_URL | No | https://api.proboprints.com | API base URL |
PROBO_API_MODE | No | test | test for sandbox, production for live orders |
MCP_HTTP_PORT | No | 3100 | Port when running --http |
PROBO_NOTIFICATIONS | No | on | Desktop notifications in HTTP mode (off to disable) |
LOG_LEVEL | No | info | debug, info, warn, error, silent |
Troubleshooting
PROBO_API_KEY is required | Set the env var in your MCP client config, not your shell. |
| Client doesn't see the server | Restart the client fully. Check logs in the client's MCP panel. |
npx hangs on first run | Pre-install: npm i -g probo-connect-mcp then use "command": "probo-connect-mcp". |
| Orders go to production by accident | PROBO_API_MODE=test is the default — double-check your config. |
| Webhook events not arriving | Make sure --http mode is running and URL is publicly reachable. |
| MCP version mismatch | npx -y probo-connect-mcp@latest to force latest. |
Development
npm install
npm run dev
npm test
npm run typecheck
npm run build
Security
- API keys are never logged — authorization headers are automatically redacted
- Error responses are sanitized to prevent credential leakage
- All inputs are validated with Zod schemas before reaching the API
- Retry logic with exponential backoff on server errors (no retry on client errors)
- SSRF protection on outbound URLs (webhook callbacks, image previews)
Links
License
MIT — Nicky Mitnick