MCP server
Connect any MCP host, like Claude Code, to Hyperstruck so your agent gets the learnings and claims that fit each task, and can ask questions of its claims.
In short
Add Hyperstruck's hosted MCP server to a host such as Claude Code or Cursor, and your agent can pull what it has learned before a task, report back when it finishes, and look up or ask about its claims. There is nothing to install: one server address and your API key.
What the server gives your agent
Hyperstruck runs an MCP server at https://mcp.hyperstruck.com/mcp/. Once a host is connected, your agent has tools in four groups.
The learning loop. These two are the heart of it:
| Tool | When to call it | What it does |
|---|---|---|
resolve | At the start of a task, with the goal | Returns a run_id, the learnings that fit the goal, and the claims about the people and things it names |
complete_run | At the end of the task, with the run_id | Records whether it succeeded, credits the learnings that helped, and captures new ones from how the run went |
Your agent resolves before it acts, so it starts from what worked last time, and completes the run afterwards, so the next similar task goes better. The server's own instructions tell the host when to call each one.
Claims. To look up and search what your agent knows:
| Tool | What it does |
|---|---|
search_claims | Searches the claims with a question and gets back the ones nearest it, as text and as items you can cite. The same as Claims search |
find_entity | Finds a person, company or thing by name, to get the id the other claims tools take |
claims | Lists claims, filtered by entity, state, kind, who owes it or due date, like List claims |
dossier | Everything held about one entity |
changes_since | What changed on one entity between two times |
settle | Settles a conflict between two claims |
correct | Corrects a claim, adds one, or closes an obligation |
list_learning_claims | The claims a learning uses |
Learnings. To manage learnings directly: list_agents, list_learnings, search_learnings, get_learning, store_learning, reinforce_learning, and distill to turn documents into learnings. They match the Learnings API. Each distill item states a channel, how the content reached you (email for a pasted thread, meeting for a transcript), and the tool lists every accepted value. An item that states none is sent as unknown.
Agent value. To record and read what an agent is worth, as described in Agent value:
| Tool | What it does |
|---|---|
get_agent_value | Reads one agent's lifetime value: measured and estimated dollars (never added together), time saved, value by category and rate-card unit, and the learnings that earned the most. Takes the agent's agent_id and an optional window: all_time (the default), last_7_days, last_30_days, last_90_days or last_365_days |
record_value | Records an outcome on the agent's value ledger. Takes agent_id, an idempotency_key naming the outcome, and one figure: unit_key with quantity, amount_usd with a baseline, or time_saved_minutes. Optional: run_id, learning_ids, category, note and evidence_url |
list_agents also returns each agent's value block and takes sort=value_desc, value_asc or estimated_value_desc. The block's guidance says whether the agent tracks value and which rate-card units exist, so an agent reads it before recording. Use record_value when an outcome lands after the run closed; for an outcome known at the end of a run, pass value to complete_run instead, with one figure in the same forms. The answer then carries a value_status saying whether it was recorded. note and baseline pass through the same redaction as other text the server stores, so a name or secret in them can come back as a placeholder.
A successful call returns status accepted with the same body as the Agent value API under data. When the platform refuses a call, the answer carries the HTTP status in http_status and the API's response body as detail, so the code that page lists is at detail.detail.code. status is then invalid_request (for 400 and 422), unauthenticated (401), forbidden (403), not_found (404), rate_limited (429) or platform_error (anything else, including 409 and 503).
The server can also refuse a call before it reaches the platform. Those answers carry status alone, with no detail and no http_status:
unauthenticated,rate_limitedorforbidden: the key is missing or not recognized, is over its rate, or lacks the tool's scope.redaction_unavailable:record_valuecarried anoteorbaselineand redaction could not run.retry_advised: the platform could not be reached. Send the same call again with the sameidempotency_key; a retry that replays an earlier entry returnsacceptedwith the original entry.
Accounts with watched pages or insights turned on also see tools for those.
Give it time to learn
A new learning is extracted in the background after complete_run, so it is not available the instant a run finishes. By the time your agent picks up a similar task later, resolve offers it.
Connect from Claude Code
Add it as a remote server, authenticated with your Hyperstruck API key:
claude mcp add --transport http hyperstruck \
https://mcp.hyperstruck.com/mcp/ \
--header "Authorization: Bearer <YOUR_HYPERSTRUCK_API_KEY>" \
--scope user--scope user makes it available in every project; use --scope local for just the current one. Check it connected with claude mcp list, and run /mcp inside a session to see the tools.
Connect from other hosts
Any host that supports remote MCP servers with an authorization header can use the same address. Point it at https://mcp.hyperstruck.com/mcp/ and set the header Authorization: Bearer <YOUR_HYPERSTRUCK_API_KEY>. Hosts that cannot send a custom header to a remote server are not supported.
Which agent the tools use
The tools name an agent in one of two ways:
resolve,complete_runanddistilluse the agent's name, from theX-Hyperstruck-Agent-Nameheader, ordefaultwhen you send none. An agent with a new name is created the first time it is used.- Every other tool takes the agent's id as
agent_id. Calllist_agentsto find it.
Authentication
The server uses a standard Hyperstruck API key, the same one you use for the REST API. The key needs an active subscription and the scopes for the tools you call:
| To | Scope |
|---|---|
| Connect | agents:read or agents:write |
Call resolve, read learnings, or call get_agent_value | agents:read |
Call complete_run, distill, store_learning, reinforce_learning or record_value | agents:write |
Call search_claims, find_entity, claims, dossier, changes_since or list_learning_claims | claims:read |
Call settle or correct | claims:correct |
For the learning loop, use a key with agents:write, which includes agents:read. The key's spaces decide which agents, learnings and claims it can reach, exactly as over REST. See Access control for scopes and spaces.
The server passes your key on to Hyperstruck, which checks it on every call.
Personal details in what you send
Before a tool sends free text, such as a goal to resolve, a question to search_claims or the steps of a finished run, the server replaces secrets and structured personal details, such as email addresses and phone numbers, with placeholders. Accounts with the compliance add-on also have names and addresses replaced. Because of this, the same question can find different claims through MCP than through the API.
How it fits with the rest of Hyperstruck
The MCP server is another way into the same learnings and claims, not a separate store. A run completed through MCP is recorded the same way as one the Claude Code hook reports, and resolve reads the same learnings and claims. To have Hyperstruck work inside Claude Code without your agent calling a tool, use the Claude Code hook. To build your own integration, use the REST API or the framework integrations.