Skip to content

Portage

Ruby gems that expose a commerce backend to AI shopping agents over MCP (Model Context Protocol) and UCP (Universal Commerce Protocol) at once. Open-source, for any Ruby app on any e-commerce stack, agnostic, versatile and fully customizable for any business logic.

"Portage": a conduit for cargo overland between waterways a ship can't sail directly between.

Status

0.10.0. APIs may still shift before 1.0.

Start here: Quickstart.

Which doc do I want?

Shoppers & agent builders (automating purchases): CLI usage tutorial · Walkthrough · shop-via-ucp skill · Agent profile · Tool-gating troubleshooting

Merchants (serving your own UCP endpoint): Serving /.well-known/ucp · Walkthrough § serving the manifest · Security hooks · serve-via-ucp skill

Adapter authors & contributors: Architecture · Writing adapters · Capability coverage · Spec conformance · Development · Contributing

The gems

Thirteen gems, mirroring how Faraday/Devise split core-vs-adapter:

Gem Version Role
portage-ucp 0.10.0 Protocol-only core: Adapter contract, capability registry, manifest builder, MCP server wrapper.
portage-ucp-client 0.6.3 Client SDK — connect to somebody else's manifest, or drive your own Adapter, as the shopper's agent. Loopback/stdio/HTTP behind one interface.
portage-ucp-webmcp 0.1.1 WebMCP transport onto the same Adapter contract — inbound (document.modelContext) and outbound (drives a page's WebMCP tools via a browser driver).
portage-ucp-decision 0.1.1 System One decision layer — offer ranking, escalation policy, a confidence gate (Jev/Laya), typed PolicyGuard wrapper.
portage-ucp-journal 0.1.1 Buyer-side purchase journal + the injectable Store abstraction it's built on.
portage-cli 0.7.4 Ships the portage command — buy, find, compare, history, payment, policy, doctor, generate.
portage-ucp-shopify 0.5.1 Shopify — Admin + Storefront GraphQL APIs.
portage-ucp-wix 0.1.4 Wix — Stores Catalog and eCommerce REST APIs.
portage-ucp-woocommerce 0.2.1 WooCommerce — Admin REST API and Store API.
portage-ucp-bigcommerce 0.1.4 BigCommerce — v3 Catalog/Carts/Checkouts and v2 Orders APIs.
portage-ucp-magento 0.1.4 Magento/Adobe Commerce — REST v1 (admin-token catalog/order, guest-cart cart/checkout).
portage-ucp-etsy 0.1.4 Etsy — real catalog/order via Open API v3; checkout is redirect-link only (Etsy's public API has no cart/checkout endpoint).
portage-ucp-instagram 0.1.5 Instagram/Facebook Shops — real catalog via Meta's Graph API Commerce Catalog; checkout is redirect-link only. get_order is deprecated (Meta removes Order Management endpoints 2026-10-27; after that, catalog search/product + checkout handoff only).

A backend on some other stack writes its own thin Adapter subclass against portage-ucp directly. Every adapter gem ships the same exe/ executable, examples/portage_ucp.rb starting point, and PORTAGE_UCP_CONFIG config hook — see Library usage (Etsy and Instagram gain exe/ + examples/ once feat/etsy-exe and harden/instagram merge — see the feature matrix for current status). Etsy and Instagram/Facebook Shops have no real cart/checkout API to back, so those two only implement catalog/order for real — full per-capability breakdown in Capability coverage (and the feature matrix for a row-per-adapter view). Already on Shopify? Its native Universal Commerce Agent app covers checkout+order with no code — this gem is for the cart/catalog capabilities it doesn't advertise, a signed manifest, and every other backend (Serving /.well-known/ucp).

Requirements

Ruby >= 3.2, and the mcp gem ~> 0.24 (pulled in by portage-ucp). The Homebrew formula brings its own Ruby, so a brew install of the CLI needs neither. Each adapter gem needs its backend's own credentials, read from env by its executable — see that gem's own docs page, or Adapter requirements for the full table.

Contributing

Bug reports and pull requests welcome at tomtom87/Portage. Since this is pre-1.0 and still spec-tracking, open an issue to discuss any change bigger than a bugfix before sending a PR. Contributing has the full workflow.

License

MIT — Copyright (c) 2026 Tom Whitbread.