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.