A machine-native print rail
Advertek Agent Rail is an MCP server and REST API layered over Advertek's existing print manufacturing — offset, digital, wide-format, packaging, print-on-demand, and direct mail. An AI agent can discover the catalog, obtain a deterministic quote, pay in USDC on Solana, and have the job submitted to production automatically, with status flowing back through a normalized vocabulary. Accumulated USDC is swept to fiat (CAD) through OKX on a schedule, independently of any single order. There is no quote form and no human on either side of a successful path.
Agents can't buy print today
AI agents — shopping, procurement, and commerce agents — are beginning to place real-world orders using protocols like MCP, ACP, and UCP. They can research, plan, and generate content. What they cannot do is buy physical print production from a vendor built for humans.
Existing print vendors — Vistaprint, Printful, Moo, and regional shops alike — require a person to fill out a quote form, negotiate turnaround, and pay by card or invoice. That is not a manufacturing limitation. It is an interface problem. There is no machine-native rail that lets an agent go from intent → price → payment → production → status without a human in the loop.
Advertek wants to become the default print vendor for autonomous agents before those agents develop purchasing habits that lock in competitors. The window is open because the infrastructure to build this rail did not exist six months ago.
Three protocols made this buildable
Agentic physical commerce was theoretical until a cluster of protocols from major platforms closed the gap between agent intent and vendor systems. Three of them matter for this rail:
Model Context Protocol lets an agent read real-time inventory, pricing, and product detail as first-class tools — not scraped HTML.
Agentic Commerce Protocol is live in ChatGPT Shopping checkout, establishing a shared language for agent-initiated purchase flows.
Universal Commerce Protocol spans discovery through post-purchase. Launched at NRF 2026, it closes the loop from intent to fulfillment.
This is a land grab, not a slow build. The category has no leader yet because the infrastructure to build one did not exist six months ago. Agent Rail sits at the physical-fulfillment layer that every agent framework will eventually need to call.
An API and an MCP server
The solution is deliberately thin at the agent boundary and deep at the floor. An agent specs a job, pays for it, and gets it shipped. The rail is layered over Advertek's twelve existing product lines — the same manufacturing capacity that already runs the DTC storefront — so there is no new printer to build, only a machine-orderable interface.
Agents talk to the rail through three MCP tools. Tool descriptions are the agent's only documentation, so they are deliberately verbose and instruct agents never to invent prices or SKU codes:
get_catalogDiscover product lines, finishes, and machine-orderable SKUs without inventing codes.
get_quotePrice a full SkuSpec — product line, quantity, dimensions, stock, turnaround, print-ready assets — into CAD cents and USDC.
get_sku_quotePrice a raw print-on-demand SKU code from the checked-in POD price list, then convert to USDC base units.
Quotes are priced in CAD (cents as integer minor units), then converted to USDC base units via a spot-rate client. The same quote core powers both the MCP tools and POST /api/quotes for non-MCP consumers. Remote MCP is served over Streamable HTTP from the Next.js app; a stdio entry remains for local Cursor and Claude Code clients.
| Path | Role |
|---|---|
| apps/web | Landing page, POST /api/quotes, remote MCP, webhook handlers |
| apps/treasury-worker | Always-on sweep worker — the only key-bearing process |
| packages/mcp-server | MCP tool registrations; stdio entry for local agents |
| packages/quote-api | Realtime and SKU quote core; CAD → USDC conversion |
| packages/payments | Solana USDC rail — payment requests and confirmation |
| packages/fulfillment | Advertek production API integration and status bridging |
| packages/treasury | Sweep, convert, reconcile — run by the worker |
| packages/db | Postgres implementations of order, webhook, and sweep seams |
Spec to cash. Seven steps. Zero humans.
A single successful order traverses seven steps. Settlement moments are called out explicitly — they are the only places the Solana rail appears in the path.
- 01Spec + quote
The agent calls an MCP tool or POST /api/quotes with a machine-readable SkuSpec. The rail returns a deterministic quote priced in CAD cents and converted to USDC base units.
- 02Payment request
The payments layer issues a USDC payment request that embeds the internal order id in a Solana memo — no signing keys on the web tier.
- 03On-chain transferON-CHAIN
The agent's wallet signs and submits a USDC SPL transfer on Solana to the settlement address, carrying the memo that correlates payment to order.
- 04ConfirmationON-CHAIN
QuickNode Streams verifies the transfer and delivers a signature-checked webhook. The handler parses the order id from the memo and advances the order.
- 05Production
Fulfillment maps the product line to an Advertek product code and POSTs the job into the existing production API — the same floor that runs the storefront.
- 06Status webhooks
Advertek status events are bridged into a normalized OrderStatus vocabulary and fan out to agent subscribers: confirmed → in production → shipped.
- 07Treasury sweep
Independently of any single order, accumulated USDC is deposited to OKX, converted to CAD, and reconciled back to individual orders within tolerance.
USDC on Solana, rail-agnostic by design
The baseline settlement rail is raw USDC over Solana. A payment request carries the pay-to address, the USDC amount in base units, and a memo of the form advertek:order:{orderId}:{nonce}. That memo is the correlation key: when QuickNode Streams confirms the transfer, the webhook handler parses the order id back out and advances fulfillment.
Confirmation is webhook-first. HMAC-SHA256 verification via a shared security token rejects forged deliveries. Processed-delivery idempotency means retries are safe. Polling remains available for local development, but production serverless paths never hold a long-open confirmation loop.
Payment protocols for agents are fragmenting — raw on-chain transfers, marketplace-mediated escrow, emerging standards. Betting on a single rail is a strategic risk. The architecture therefore treats settlement as a pluggable module behind one order model: a PaymentRail interface that creates payment instructions and resolves every confirmation to the same internal order id and money amount. Fulfillment, status bridging, and the agent-facing status vocabulary never see rail specifics.
| Rail | Protocol | Asset | Status |
|---|---|---|---|
| Solana USDC direct | SPL transfer + memo | USDC | Baseline — live |
| OKX AI marketplace | A2MCP instant / A2A escrow | USDT / USDG | Phase 0 validation |
Each rail keeps its native settlement asset. Treasury sweeps per-rail; OKX Convert handles USDC, USDT, and USDG → CAD the same way. No conversion step sits in the order path, and no single-asset compromise is forced. The OKX AI marketplace is a distribution channel as much as a rail — active discovery, onchain reputation, and staked-evaluator dispute resolution for marketplace-routed orders — validated with one inert listing before any production wiring.
Sweep on a cadence, reconcile per order
Treasury runs independently of the order path. A dedicated always-on worker — never a Vercel function — reads memo-matched inbound USDC since the last sweep, deposits it to OKX, converts USDC → CAD via the Convert API, records a sweep record, and allocates the resulting fiat back to individual orders within a configured tolerance (default 50 bps, with a one-cent floor).
The security invariant is non-negotiable: the automated sweep uses only trading credentials. Withdrawal credentials are a separate key set that never enters any automated environment. Moving fiat out of OKX stays a deliberate, human-operated action. The web app on Vercel holds only Supabase credentials and webhook verification tokens — building a payment request requires no signing.
Money flow for the baseline rail: priced in CAD → paid in USDC on Solana → swept to CAD via OKX. Additional rails plug into the same order lifecycle; their sweeps stay isolated until volume justifies unifying ledgers.
Conventions that keep money correct
Print is physical and money is adversarial. The rail encodes a small set of non-negotiable engineering rules so that neither side of that statement becomes a production incident:
USDC base units (6 decimals) and CAD/USD cents are always bigint. Never floats. Decimal strings exist only at vendor API boundaries.
Environment, MCP tool input, vendor request/response payloads, and webhook bodies are all validated before they touch business logic.
Functions take a Deps object holding fetch-like clients, RPC clients, now(), and id generators. Unit tests supply fakes — no test touches the network.
Building a payment request needs no signing. The only process holding money-moving secrets is the dedicated treasury worker — settlement keypair and OKX trading credentials.
Automated sweeps use trading credentials only. Withdrawal credentials are a separate key set the automation never touches. Fiat leaving OKX stays a deliberate human action.
Serverless functions cannot hold long-polling confirmation open. QuickNode Streams delivers confirmation; retries are idempotent against a processed-deliveries store.
Five wedges. One rail. Two motions.
The rail is product-agnostic underneath and wedge-specific at the edge. Five mass-market entry points share the same quoting, settlement, and fulfillment backbone:
Commercially, the system runs two motions on one manufacturing footprint:
Modernized e-commerce across all twelve product lines — self-serve ordering and instant quoting. Existing B2B customers are a warm on-ramp to the platform and near-term revenue while the agent surface matures.
MCP and API for machine-orderable SKUs. Machine-payable checkout in USDC over Solana. SLA-backed production where reprints are free and no support ticket is required for a clean failure path.
Pre-launch. Moving fast.
The product name and stack are locked: Advertek Agent Rail, built with Cursor, Solana, QuickNode, and OKX. Vendor integration is the active focus — direct conversation with Advertek's API team on pricing, catalog, and sandbox access. This quarter's milestones are a live prototype and the first design partners from POD and real estate.
Real pricing and spot-rate clients against Advertek's API. Order persistence on Postgres. End-to-end quote → pay → fulfill on the Solana rail.
Extract the PaymentRail interface from the Solana adapter. Ship the prototype. Onboard the first POD and real-estate design partners.
One inert A2MCP marketplace listing. Observe order volume and settlement behavior before any production fulfillment wiring.
Agentic commerce needs a physical-fulfillment layer. Advertek Agent Rail is that layer — the interface on top of a manufacturing partner that already runs twelve product lines, callable by any agent that can speak MCP or REST and settle USDC.
Advertek Agent Rail — Whitepaper