Solid Commerce Docs

Solid Commerce in OpenAI Codex CLI

Value. Drive Solid Commerce from inside the Codex CLI — the same workflow as Claude Code, on OpenAI's stack, for teams standardized on ChatGPT/Codex.

Choose this when your engineers run their day inside Codex CLI rather than Claude Code.

Install

1. Create an API key. In your Solid Commerce workspace, open Developer → API keys → New (the /developer/keys page) and copy the secret — it is shown only once.

2. Add the MCP server to Codex CLI over stdio, passing your key:

codex mcp add solidcommerce \
  --env SOLIDCOMMERCE_API_KEY=YOUR_KEY \
  --env SOLIDCOMMERCE_API_BASE_URL=https://api.takeoffcommerce.com \
  -- npx -y @solidcommerce/mcp-server@alpha

Or add it directly to ~/.codex/config.toml:

[mcp_servers.solidcommerce]
command = "npx"
args = ["-y", "@solidcommerce/mcp-server@alpha"]

[mcp_servers.solidcommerce.env]
SOLIDCOMMERCE_API_KEY = "YOUR_KEY"
SOLIDCOMMERCE_API_BASE_URL = "https://api.takeoffcommerce.com"

SOLIDCOMMERCE_API_BASE_URL is required — the server's built-in default points at a legacy host without the /v1 API, so tool calls fail without it.

A hosted remote server (https://mcp.solidcommerce.com/mcp) with per-user OAuth is coming for the non-terminal surfaces (Claude UI, ChatGPT, and so on).

Try it

Start codex and ask in natural language — "list 5 products from my Solid Commerce catalog", "how many orders came in today?" — or script against the SDK directly:

1. List today's orders

A read-only call — safe to run the moment you connect.

import { SolidCommerceClient } from '@solidcommerce/sdk';

const client = new SolidCommerceClient({
  baseUrl: 'https://api.solidcommerce.com',
  auth: { kind: 'bearer', token: process.env.SC_TOKEN! },
});

const since = new Date(Date.now() - 86_400_000).toISOString();
const { data } = await client.raw.GET('/v1/orders/orders', {
  params: { query: { created_after: since, limit: 50 } },
});
console.log(`${data?.data.length ?? 0} orders in the last 24h`);

2. Reprice a listing

A write — the audited reason is captured even if you forget to mention it. In a conversational host this surfaces a confirmation prompt first (every write tool is annotated destructiveHint).

await client.raw.PATCH('/v1/listings/list-items/{listItemId}/automation', {
  params: { path: { listItemId: 'li_1234' } },
  body: { list_price: 19.99, metadata: { price_change_reason: 'competitor match' } },
});

3. Check inventory across warehouses

Another read — see stock for every warehouse in one call.

const { data } = await client.raw.GET('/v1/inventory/warehouses');
for (const wh of data?.data ?? []) {
  console.log(wh.name, wh.available_units);
}

Availability

Register through the OpenAI Codex plugin / MCP program; the configuration above is self-serve today. Review our Privacy Policy and Terms.