Episteme runs as an MCP server that your AI assistant (e.g., Claude Code, Claude Desktop, or any MCP-compatible client) connects to directly. You never call these tools yourself - you talk to your assistant in plain English, and it calls the tools on your behalf. This page explains what's happening behind the scenes, in enough detail that you can direct the conversation with confidence.
If you just want the "talk to it like a person" version with zero jargon, read Reference & FAQ first, then come back here when you want the mechanics.
Connecting your AI assistant
Episteme's MCP server is hosted at:
https://mcp.episteme.nataraja.io/mcp
Sign in with the same Google account you use for the Portal (OAuth 2.1) - this links what your assistant does over MCP to the same identity you see runs and conclusions under in the Portal. An API key is also supported for clients that can't complete an interactive sign-in.
Where to add this depends on your client. The general shape is the same everywhere - find the setting for adding a custom MCP server / connector and paste the URL above - but the exact menu differs and changes as these products evolve, so treat the steps below as a starting point rather than gospel:
- Claude (claude.ai, Claude Desktop): Settings → Connectors → Add custom connector, then paste the URL and complete the Google sign-in when prompted.
- Claude Code: add it as a project- or user-scoped MCP server, e.g.
claude mcp add --transport http episteme https://mcp.episteme.nataraja.io/mcp(or the equivalent entry in.mcp.json). - ChatGPT: on plans that support custom connectors, look under Settings → Connectors (sometimes labelled "Apps & Connectors") for an option to add a custom MCP server by URL.
- Grok: look for MCP or tool/connector settings in whichever Grok surface you're using (the web app, a coding client, or the API) - MCP support and its exact settings location vary by product and are changing quickly.
- Antigravity (and similar MCP-aware IDEs/agents): look for an "MCP Servers" section in settings and add the URL as an HTTP-based server.
- Gemini Enterprise: add a custom MCP server connector. It asks for the server URL above, plus an authorization URL, a token URL and a client ID, which your administrator can obtain from us. Leave the client secret empty and see the note below.
If your client's settings don't match any of the above, search its docs for "MCP" or "custom connector" - any MCP-compatible client can reach Episteme the same way, through the same URL.
One setting to watch for. Some clients offer a "client secret" field and an option like "HTTP Basic Auth" for sending it. Episteme does not use a client secret: it uses the modern proof-key method instead, which is safer because there is no shared password to leak. So leave the secret empty and turn that option OFF. If it is left on, the client has nothing to put in the password field and the sign-in fails at the last step, usually with a message about a token rather than about the setting that caused it.
What the MCP server actually is
- A protocol runtime: it owns the topology (the graph structure) of whatever process you're running. Your assistant is the model that fills in the content of each step - it does not control the order.
- Protocols come from two sources: a built-in library (e.g.
dual-pass-review) and the platform's protocol store, which also holds legacy Studio filters, normalised on the fly. - Every run is recorded as an append-only, hash-chained event log (the trace) - this is what later shows up as the run's record in the Portal (see the trace note in Foundational Concepts for exactly what this does and doesn't prove).
- Enforcement is real, not cosmetic:
get_next_taskonly reveals a task once its dependencies are genuinely complete, andsubmit_taskrejects (and logs) any attempt to submit out of order or with empty output.
The core loop (what your assistant does)
list_protocols → start_run → loop{ get_next_task → do the work → submit_task } → report
list_protocols- searches every source at once (the built-in library and the platform's protocol store) to find something that already fits your request.start_run { protocol_id, context, on_behalf_of }- begins a governed run, feeding in whatever input you gave (a document, a question, data).on_behalf_ofrecords your identity as the human principal behind the run.get_next_task { run_id }- returns every task that's currently ready to be worked (parallel tasks may all be ready at once; the assistant can do them in any order). Each task comes with its instruction and its ordered, labelled inputs.- The assistant does the actual work - genuinely, not a summary or a simulation - following the task's instruction.
submit_task { run_id, node_id, output }- submits the result. The runtime validates it and advances the graph, unlocking whatever depends on it.- Repeat 3 to 5 until the run status is
completed. - The assistant reports the sink outputs (the final conclusion(s))
and the
run_idback to you.
When it's not the assistant's turn
Some tasks are yours, not the AI's:
awaiting_review(withreview_tasks) - a produced output needs a human to approve it before downstream work continues. Your assistant will surface this to you and callsubmit_reviewwith your decision:approve,reject(with your rationale - reopens the node), oramend(supplying your edited version asamended_output).awaiting_input(withinput_tasks) - a step's output must come from you directly, not be generated by the AI. Your assistant relays the request and callssubmit_human(kind: "input"for a data source only a human can supply,kind: "author"for a step only a human can perform) with what you tell it.
A run can also be aborted server-side by a review timeout or by exceeding a rejection-retry cap - both of these are recorded as deviations in the trace, not silently swallowed.
Full tool reference
| Tool | Purpose |
|---|---|
help |
Machine-facing reference for the assistant (tool names, JSON shapes, node kinds). |
list_protocols {source?} |
Catalog of available protocols. Omit source to search everything (built-in library + registry + legacy Studio filters). |
get_protocol {id, source} |
Full normalised definition of one protocol. |
validate_protocol |
Checks a protocol design holds together structurally before it's saved. |
create_protocol |
Designs and registers a brand-new protocol from a description (the "topology designer" pipeline: build → validate → fix → save). |
create_protocol_legacy |
Legacy/back-compat path for protocol creation. |
get_protocol_genealogy |
Shows which protocols a given one was derived from / has spawned. |
start_run {protocol_id, context, on_behalf_of} |
Begins a governed run. context satisfies the protocol's data obligations. |
get_next_task {run_id} |
All currently-ready tasks (AI or human) for the run. |
submit_task {run_id, node_id, output} |
Submit the assistant's completed work for a task. |
submit_review {run_id, node_id, decision, amended_output?} |
Human review verdict on a gated node: approve / reject / amend. |
submit_human {run_id, node_id, kind, value} |
Human-supplied input (kind: "input") or human-authored step (kind: "author"). |
get_run_status {run_id} |
Progress summary of a run. |
get_run_view {run_id} |
A fuller structured view of a run's current state (nodes, edges, statuses). |
get_run_attention {run_id} |
What's currently waiting on a human, with human-time estimates - same data source as the Portal's Review Inbox. |
get_run_entropy {run_id} |
The run's rework: the share of steps that did not land first time (steps redone, plus outputs a reviewer rejected). |
get_trace {run_id} |
The full hash-chained event log - every submission, timestamp, and any recorded deviation. |
check_freshness |
Re-checks a completed run's pinned source hashes; flags it stale if an input has drifted. |
branch_run |
Forks a run at a point to explore an alternative path without discarding the original. |
merge_branches |
Reconciles two branched runs back together. |
create_data_nodes |
Registers new data nodes (evidence/conclusions) outside the normal task-submission flow, when needed. |
project_to_studio |
Publishes a read-only visual (Studio canvas) of a protocol blueprint or a completed run, and returns a link. |
Choreography (Dances)
These author a method rather than executing one. See Choreography for what a Dance is and when to use one.
| Tool | Purpose |
|---|---|
dance_start {question, epochs?, protocol_id?} |
Starts a Dance on a question. Pass protocol_id to seed it from an existing protocol instead of a blank draft - use the Studio doc id (my-protocol__v0.1.0), not the bare registry id. |
dance_status {dance_id} |
Progress: status, epoch, current Dance Score. |
dance_final {dance_id} |
The Chosen Way - the settled method, in plain prose. |
dance_move {dance_id, verb, node_id, note?} |
Queue your Move (expand/branch/link/revise/merge/retire) as the next epoch. On a resting Dance this wakes it. |
dance_continue {dance_id, add_epochs?} |
Wakes a finished Dance for more epochs, web and scores intact. |
dance_stop {dance_id} |
Halts the loop at the next epoch boundary. |
dance_list |
Dances you own or that are shared with you. |
dance_export {dance_id, name?, visibility?} |
Promotes the Chosen Way into a registered draft protocol and publishes it to the canvases. Returns unverified_schemas - evidence shapes written at export time that need your review. |
Access and organisation
| Tool | Purpose |
|---|---|
grant_role / revoke_role |
Give or remove someone's authority on a run, Dance, workspace or organisation. |
list_bindings |
Who currently holds what authority. |
define_role |
Define a custom role as a set of capabilities. |
list_roles / get_capabilities |
The available roles and what each can do. |
get_iam_log |
The hash-chained governance log: every grant, revoke and role change. |
delegate_agent / revoke_agent / list_agent_grants |
Control what an AI agent may do on your behalf - an agent can never exceed your own authority. |
get_billing_status |
Decision-credit balance and current price card. |
How this powers the Portal: get_run_attention is the same data
source behind the Portal's Review Inbox; list_protocols (registry
source) is what populates the Registry page, and completed runs
populate Conclusions. The Portal is a read/act surface over the same
underlying state these tools read and write - nothing you see in one is
out of sync with the other.
The exact tool surface can grow over time - if your assistant has access to the Episteme MCP server, its own
helptool output is always the up-to-date technical reference. This table reflects the tools available as of this writing.
Example conversations
Using something that already exists:
You: "Can you review this business plan for me - both supportively and critically?" Assistant: (calls
list_protocols, findsdual-pass-reviewfits, callsstart_run, works through the empathetic pass, the hostile pass, then the synthesis - each one genuinely gated on the last - and reports back the synthesis plus the run id.)
Nothing existing fits - design something new:
You: "I want a process where you assess this from a business angle, a risk angle, and a governance angle, then bring those together into one final decision." Assistant: (calls
create_protocol, which builds the topology, validates it, fixes anything broken, and saves it - you never see a broken intermediate version.) "I've created a process calledbusiness-risk-governance-review. It's ready to use whenever you'd like."
Running it:
You: "Run it on this: [attach/paste input]" Assistant: (calls
start_run, loopsget_next_task/submit_taskuntilcompleted, reports the final answer and the run id.)
Viewing it visually:
You: "Can you show that in the studio?" Assistant: (calls
project_to_studioand gives you a link - a read-only diagram you can click through, node by node.)
Checking a decision still holds:
You: "Is that decision from last month still good?" Assistant: (calls
check_freshnesson the run; if a source drifted, tells you it's stale and offers to re-run.)
Phrases you can just say
| What you want | What to say |
|---|---|
| Use an existing process | "Can you review/check/analyze this for me?" |
| See what's available | "What kinds of processes do you have available?" |
| Build something new | "I want a process that does X, then Y, then Z." |
| Run it | "Run it on this: [your input]" |
| See it visually | "Show me that as a diagram / project it to the studio." |
| See how it was reached | "Can I see the trace / how you got this?" |
| Check it still holds | "Is that conclusion still fresh?" |
| Explore an alternative | "What if we branched from here and tried Y instead?" |