MCP for Claude and ChatGPT
Custom Designer MCP
Any AI client that speaks Model Context Protocol over Streamable HTTP can call the same staff tools the in-app assistant uses: clients, orders, the production schedule, catalog search, Quick Quote, and approval links.
The server lives on the main app at /mcp. It uses the company Developer token from Settings → Developer (the same 64-character token as /api/v1). The token chooses the company. Do not send company_id.
| Environment | MCP URL |
|---|---|
| Production | https://customdesigner.ai/mcp |
| Local | http://localhost:3000/mcp or http://customdesigner.localhost/mcp |
A browser that opens that URL is redirected to the in-app guide at /docs/integrations/mcp. Clients must POST JSON-RPC, not open the page.
Token
- Sign in and select the company the assistant should use.
- Open Settings → Developer.
- Generate a bearer token and copy it once. Regenerating revokes the previous token.
Send it on every MCP request:
Authorization: Bearer <64 hex token>
X-Api-Key: <64 hex token> also works. A missing or revoked token does not return HTTP 401. Tool calls return an error telling the client to send the token. HTTP 401 would make Claude and ChatGPT start an OAuth flow this server does not implement yet.
The token shares the Integration API limit of about 300 requests per minute.
Tools
Read tools: get_company_info, find_client, list_recent_orders, list_schedule_orders, get_order, get_invoice_status, search_products, get_product_options, search_recommended_products, get_quote_catalog, calculate_quote, search_docs.
Write tools (they change shop data): create_client, update_client, add_order_items, create_order, duplicate_order, create_customer_view_link, create_public_quote_link.
There is also a company://profile resource and a shop-snapshot prompt.
These chat-only actions are not on this server: opening or refreshing a shop page, charts, web search, and customer-widget tools that identify a shopper by email.
Claude
Claude.ai and Claude Desktop can attach a remote MCP server and store a fixed bearer token.
- Open Customize (Claude.ai) or Settings → Connectors (Claude Desktop).
- Add a custom connector.
- Name it
Custom Designer. URL:https://customdesigner.ai/mcp(or your local origin while testing). - Open Request headers. Header name
Authorization. ValueBearerplus the token, including the space. Claude sends the value exactly as entered and does not addBearerfor you. - Save, then start a chat and ask something like “Find the client Acme and tell me their latest order status.”
Approve write tools when Claude asks. The connector is organization-wide: everyone who can use it acts as that company token.
Claude Code
claude mcp add --transport http customdesigner https://customdesigner.ai/mcp \
--header "Authorization: Bearer YOUR_TOKEN"
Or in .mcp.json:
{
"mcpServers": {
"customdesigner": {
"type": "http",
"url": "https://customdesigner.ai/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
If that header is rejected, Claude Code reports a failed connection instead of falling back to OAuth. Check the token, then run claude mcp list.
ChatGPT
In the ChatGPT app
Workspace owners turn on developer mode under Workspace settings → Permissions & Roles → Connected Data / Create custom MCP connectors. Then Settings → Apps → Create (or Workspace settings → Apps → Create):
- MCP server URL:
https://customdesigner.ai/mcp - If the dialog can send a request header, set
AuthorizationtoBearer YOUR_TOKEN(include the wordBearerand a space). - Scan tools, then create the app. It shows up as a draft with a Dev label. Enable it and @ mention it in a chat.
ChatGPT’s app builder is built around OAuth. If the only choices are OAuth and no authentication, no-auth will connect and then every tool will answer that a Developer token is required. This server does not publish OAuth metadata yet. Use Claude, Cursor, or the Responses API below until that exists.
OpenAI Responses API
The API can call a remote MCP server and attach the Developer token on the tool. Put the raw 64-character token in authorization (the API adds Bearer). Keep require_approval on always while you are testing writes.
curl https://api.openai.com/v1/responses \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "YOUR_MODEL_ID",
"input": "Find the client named Acme and summarize their latest order. Do not change any records.",
"tools": [
{
"type": "mcp",
"server_label": "customdesigner",
"server_url": "https://customdesigner.ai/mcp",
"authorization": "YOUR_64_HEX_DEVELOPER_TOKEN",
"require_approval": "always"
}
]
}'
Send authorization on every request. The Responses API does not store it.
Cursor and VS Code
Cursor, ~/.cursor/mcp.json:
{
"mcpServers": {
"customdesigner": {
"url": "https://customdesigner.ai/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
VS Code, .vscode/mcp.json:
{
"servers": {
"customdesigner": {
"type": "http",
"url": "https://customdesigner.ai/mcp",
"headers": {
"Authorization": "Bearer YOUR_TOKEN"
}
}
}
}
Restart the client after saving. Ask it to list tools, then try find_client before any write.
Try it locally
With pnpm dev running and a token from the sandbox company:
curl -sS http://localhost:3000/mcp \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-H "Authorization: Bearer $V1_API_TOKEN" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{},"clientInfo":{"name":"curl","version":"1.0.0"}}}'
A second call with "method":"tools/list" returns the tool names. "method":"tools/call" with "params":{"name":"find_client","arguments":{"q":"acme"}} runs a search.
Troubleshooting
- Tools say a Developer token is required. The header is missing, or the value is the token without
Beareron clients that do not add it (Claude request headers). - Invalid or revoked API token. Generate a new token. The old one stops working immediately.
- Too many requests. The token hit the shared per-minute limit with
/api/v1. - Browser shows the docs page. That is the redirect for humans. Point the client at the same URL with
POST. - Claude or ChatGPT starts an OAuth login. This server does not implement OAuth yet. Use a client that can send the bearer header, or the Responses API
authorizationfield.