Reach a Hosted Workbench
Goal: Call a workbench you've hosted, from an AI, from code, or from a page.
Each enabled mode has its own address under your workspace, named by the workbench's APISlug:
https://openx.fathym.com/ox-api/w/<workspace id>/workbenches/<apiSlug>/<mode>
<workspace id> is the ID shown in Workspace -> Settings. The mode segment matches the mode's key
exactly; a key is the mode's name, so it can be MCP, API, Web or any name your package declares. The
examples below use those three.
Who may call a mode is set per mode, under Who may call this mode in the inspector's Modes tab:
- Identity (the default): OpenX checks every caller. Send a key from APIs -> API Keys as
Authorization: Bearer <YOUR_TOKEN>; it needs no particular access right. That holds while the workspace's API identity, set in the API Manager, is Team (the default) or Hybrid. Under App Identity, team keys are turned away and a caller needs an access token from an App Identity you trust; the mode can also be limited to some of the workspace's App Identity providers. - None: anyone with the address reaches the mode, with no key. OpenX checks nobody and passes on none of its own credentials, so the workbench signs its own callers in if it wants any. Only the workspace owner or someone who manages access can save a mode as None.
From any AI: MCP
https://openx.fathym.com/ox-api/w/<workspace id>/workbenches/<apiSlug>/MCP
Each MCP endpoint of a hosted workbench is its own MCP server, separate from the OpenX MCP server. Which ports and paths speak MCP is set in the inspector: Serve MCP from a Workbench. With fAI, one command adds it to every coding agent on your machine:
fai mcp install https://openx.fathym.com/ox-api/w/<workspace id>/workbenches/triage/MCP --name triage --global --auth "<YOUR_TOKEN>"
Any other client that speaks Streamable HTTP connects with the same address and an Authorization header. Claude
Desktop, Cursor, a custom client and what the tools are called: Reach a Workbench over MCP.
From code: API
POST https://openx.fathym.com/ox-api/w/<workspace id>/workbenches/<apiSlug>/API/<tool>/<method>
Every tool method is a POST route, with the tool and method names lowercased - the author never declares routes.
The workbench describes its own routes at GET .../API/openapi.json, which you can import into Postman or
generate a client from; it lists routes and summaries, not argument types. The API Manager lists each API-mode workbench with its routes and a ready
cURL line.
curl -X POST 'https://openx.fathym.com/ox-api/w/<workspace id>/workbenches/triage/API/classify/run' \
-H 'Authorization: Bearer <YOUR_TOKEN>' \
-H 'Content-Type: application/json' \
-d '{"arg0": "Checkout returns 500 for EU cards"}'
How arguments are sent, the OpenAPI catalog and what the API Manager shows: Reach a Workbench over HTTP.
From a page: Web
https://openx.fathym.com/ox-api/w/<workspace id>/workbenches/<apiSlug>/Web/
Every path below the root goes to the workbench's own fetch handler, so the author decides what each one serves. Calls with a key work; opening it in a browser tab with your OpenX sign-in does not, because the door admits a bearer token only. What the author writes and what the workbench receives: Reach a Workbench from a Page.
The root page is .../Web/, with the trailing slash. A browser that opens .../Web is redirected there; a call
from code works at both.
If something's off
| Issue | Do |
|---|---|
401 | The key has expired, or the API identity is App Identity, which turns team keys away; generate a new key, or use an App Identity token |
404 on an API route | Check the tool and method names in .../API/openapi.json |
| The mode doesn't answer | Check the mode's key (case matters) and that the mode was added in the Modes tab |
The first call is slow, or 503 | The container is starting; try again in a few seconds |
Next steps
- Let one workbench call another -> Workbenches Build on Each Other
- Host a mode of your own -> Custom Modes
- Keys and expiry -> Auth & Tokens