Provider REST API
AnalyticsConnect Claude to Hex
Find Hex projects, run them and read run status, read cells and their output, and ask the Hex agent questions in threads. Toolspoke puts 16 of its actions behind one MCP endpoint that Claude, Cursor, and Codex all speak.
- Connection
- Provider REST API
- Authentication
- API token
- Actions exposed
- 16
- What a call bills
- Nothing
- Adapter
- Maintained by Toolspoke
Connected in three steps
- 1
Install Hex
Open the marketplace in your workspace, add Hex to the project your agents work in, and it appears on the gateway immediately.
- 2
Connect the credential
Authenticate with api token. Where to get one, and what it has to be able to reach, is the next section.
- 3
Point your agent at the gateway
Give your client one address, https://toolspoke.com/mcp. Claude Code takes it as a command, Claude and Claude Desktop add it as a custom connector, and Cursor, Codex and VS Code each read it from a config file of their own.
.mcp.json{
"mcpServers": {
"toolspoke": {
"type": "http",
"url": "https://toolspoke.com/mcp"
}
}
}One block covers every tool you have installed. Hex shows up in the client as soon as your policy allows it, and so does everything else you install later.
Where the address goes, per client
- Claude Code
Run it in your project, then /mcp to sign in
claude mcp add --transport http toolspoke https://toolspoke.com/mcp- Claude and Claude Desktop
Settings, then Connectors, then Add custom connector
https://toolspoke.com/mcp- Cursor
~/.cursor/mcp.json, or .cursor/mcp.json for one project
{ "mcpServers": { "toolspoke": { "url": "https://toolspoke.com/mcp" } } }- Codex
~/.codex/config.toml
[mcp_servers.toolspoke] url = "https://toolspoke.com/mcp"- VS Code
.vscode/mcp.json, or the MCP: Add Server command
{ "servers": { "toolspoke": { "type": "http", "url": "https://toolspoke.com/mcp" } } }
What Hex asks for
API token. You provide it once, when you install the connector. Toolspoke encrypts it at rest and decrypts it only for the length of a single call, and the gateway attaches it to the outbound request itself, so it is never part of the arguments an agent sends.
- API tokenRequired
- Hex → user settings → Account → API keys → New Token. A personal token (hxtp_, Editor role or higher) acts as you and must expire. An admin can instead create a workspace token (hxtw_) on the workspace settings page and pick its scopes: Read projects for reads only, Run projects to also allow run_project. Rate limit: 60 requests a minute.
- hxtp_… or hxtw_…
- Hex URLOptional
- Leave blank for the standard multi-tenant Hex. EU, HIPAA and single-tenant workspaces use their own address, e.g. https://eu.hex.tech.
- https://app.hex.tech
What Claude can do in Hex
16 actions, each one declared and named by the connector rather than discovered at runtime. A workspace policy grants a person all of them, a hand-picked selection, everything on the read side, everything on the write side, or none.
- Reads
- 12Reads
- Writes
- 3Writes
- Destructive
- 1Destructive
Reads
12Fetches data and changes nothing.
get_meReturn the user this token belongs to. A workspace token returns no user details.
list_projectsList the projects this token can see, newest first by default. Start here - the project id is what running a project and reading its cells take. It is also the install's connection test, because it needs a token that can read projects.
get_projectRead one project's metadata - title, owner, status, schedules and when it was last published.
get_run_statusRead the status of one project run - PENDING, RUNNING, COMPLETED, ERRORED or KILLED - with its timings.
list_runsList the recent API-triggered and scheduled runs of one project, newest first.
list_cellsList the cells in one project's draft - their type, label and source (SQL, Python, Markdown). Not written to the audit log, because the source is other people's work and can embed data.
get_cellRead one cell's type, label and source.
get_cell_outputRead the latest output of one cell - the rows a SQL cell returned, or a code cell's result. Hex marks this endpoint unstable. Not written to the audit log, because the output is the workspace's data.
list_data_connectionsList the workspace's data connections - the warehouses and databases projects query - by name, type and id. Credentials are not returned.
list_collectionsList the workspace's collections, the folders projects are grouped into. A collection id narrows list_projects.
list_usersList the workspace's users by name and email, optionally only the members of one group.
get_thread_messagesRead the messages in one thread - the questions asked and the Hex agent's answers. Not written to the audit log, because the answers carry the workspace's data.
Writes
3Creates or updates something on the other side.
run_projectRun a published project, optionally with input parameter values. Returns a runId and a status URL; poll get_run_status until it finishes. It runs the project's queries against its data connections and counts toward the 25 concurrent kernels per user. update_published_results replaces what viewers of the published app see.
create_threadAsk the Hex agent a data question in a new thread. It answers asynchronously; read the reply with get_thread_messages until the thread is IDLE. The question and the answer are stored in Hex as a thread under the token's user.
continue_threadAsk a follow-up question in an existing thread. The thread must be idle - Hex does not queue a second question behind a running one.
Destructive
1Deletes or permanently alters something. Worth granting on purpose.
cancel_runCancel a project run that is still going. Destructive because the run's work is lost and cannot be resumed - it has to be started again from the beginning.
What it will not do
Enforced by the gateway rather than left to convention, which is why each of these can be stated flatly.
- It cannot call anything else
- The 16 actions above are the whole of it. A call to any other name is refused before it reaches Hex rather than forwarded on, and connecting your account does not add to the list: it is fixed by the connector, not discovered at run time.
- It reaches no further than your credential
- Toolspoke holds no access to Hex of its own. Every call carries the credential you stored and nothing besides, so whatever that credential cannot reach, this connector cannot reach either.
- It never hears from Hex
- Nothing is pushed to it. There is no webhook, no subscription and no polling, so this connector cannot notice by itself that something changed in Hex. An agent has to ask.
- It does not smooth over provider limits
- Toolspoke does not retry, queue or back off around Hex's own rate limits. A call that Hex refuses comes back to the agent as a failed call.
Before you connect it
What can Claude do in Hex?
16 named actions: 12 that only read, 3 that write and 1 that delete or permanently alter something. They include get_me, list_projects and get_project. Nothing outside that list is reachable: the connector declares each operation by name rather than proxying whatever an agent asks for.
What credentials does the Hex connector need?
API token. The connector asks for api token, and optionally hex url. Values are encrypted at rest and attached to the outbound request by the gateway, so they are never part of the arguments an agent sends and never reach the audit log.
Does the Hex connector work with Cursor and Codex, or only Claude?
Any client that speaks MCP, and every one of them gets the same 16 actions. There is a single address, https://toolspoke.com/mcp. Claude Code adds it with claude mcp add --transport http, Claude and Claude Desktop take it as a custom connector in settings, Cursor reads it from .cursor/mcp.json, Codex from ~/.codex/config.toml, and VS Code from .vscode/mcp.json. Each of them signs in to the gateway itself, so there is no key to paste.
What does the Hex connector not do?
The 16 actions above are the whole of it. A call to any other name is refused before it reaches Hex rather than forwarded on, and connecting your account does not add to the list: it is fixed by the connector, not discovered at run time. Toolspoke holds no access to Hex of its own. Every call carries the credential you stored and nothing besides, so whatever that credential cannot reach, this connector cannot reach either. Nothing is pushed to it. There is no webhook, no subscription and no polling, so this connector cannot notice by itself that something changed in Hex. An agent has to ask. Toolspoke does not retry, queue or back off around Hex's own rate limits. A call that Hex refuses comes back to the agent as a failed call.
Can I limit which actions an agent can call?
Yes, in two places. The project switches Hex's actions on and off one at a time, for everyone in the project at once, and the screen groups them by read, write and destructive so turning off everything that deletes is one click. An individual agent key can then be narrowed further, to particular toolkits in a project and to particular actions in a toolkit. Whatever it was granted, a key never reaches a project its owner cannot.
What gets recorded when an agent calls Hex?
Every attempt, with the agent that made it and the person that agent belongs to, the full request payload, the response payload, the status, the duration, and what the call cost in sandbox time and model tokens. Values whose key names a secret are masked out before the record is shown to anyone. An operation the connector marks as not retained never has its response body written at all, so the gateway keeps no second copy of what was read.