MCP server
Add Attest to Claude, ChatGPT or any MCP client, connect it with your Quorum account or an API key, and what the tools and the /attest command do.
Last updated 12 September 2026
MCP server
Attest is also an MCP server, on the same code path as the HTTP API, so an AI client can check claims against documents without any code.
Server URL: https://api.quorumtech.ch/attest/mcp
The transport is Streamable HTTP and stateless: no session id, a fresh server per request, which survives a restart where an in-memory session would strand a client.
Connect with Quorum
In Claude: open Settings, then Connectors, then Add custom connector, paste the server URL, and choose Connect. Claude sends you to the developer dashboard, which is behind the ordinary Quorum sign-in. The consent page shows which client is asking, for which services, and where you will be sent back to. Approve, and the client acts as you from then on, with your workspace's default limits.
ChatGPT uses the same flow unchanged, and passes files you attach to the tools as file objects, so a board pack attached to the conversation is uploaded and hashed by the server without being retyped.
Anything you connect appears under Connected clients on the MCP servers page, with when it was last used, and can be disconnected there by you or a workspace admin. Disconnecting deletes every token minted for the connection at once.
A workspace without credits is refused at the consent step with a message naming the Billing page, and its tool calls are refused the same way. Connecting is never a way around paying.
Use an API key instead
For a client that cannot sign in, such as a server-side agent, send an API key as the bearer token:
{
"mcpServers": {
"attest": {
"url": "https://api.quorumtech.ch/attest/mcp",
"headers": { "Authorization": "Bearer <your API key>" }
}
}
}
The key's own limits apply.
The tools
| Tool | What it does |
| --- | --- |
| attest_claim | Check one claim against evidence, inline or in a loaded batch. |
| attest_upload_batch | Load documents once, then check many claims against them. |
| attest_claims | Check every claim in a list, in one call. |
| attest_draft | Check a whole draft, extracting the claims itself. |
| attest_draft_status | Collect a draft review that is still running. |
| attest_clear_batch | Drop a loaded batch from memory. |
| attest_setup_help | How to finish setting up Attest. |
Every tool description prints a real upload address, because nothing in MCP tells a server its own address and an instruction reading <server>/v1/drafts cannot be followed. Upload evidence and drafts as files rather than pasting them: a model retyping a document into a tool argument is a generation step, and a generation step can drift.
The result a tool returns is a summary written for a model to act on, leading with what to do and naming the assertion that failed. The full result travels in structuredContent. INDETERMINATE comes back with isError: true, so a failure to measure is never read as a finding about the claim.
The /attest command
The server exposes the whole review as an MCP prompt, which clients surface as a slash command. /qa is an alias.
/attest check the draft already in the conversation
/qa the same thing
/attest draft="..." check text passed directly
/attest batchId=... reuse documents already loaded
The prompt exists because the tools are individually well described and still get used wrongly in combination. The failures seen in real use were skipping claims that felt minor, checking a compound sentence whole and deleting the true half of it, and acting on a failure to measure as though it were a finding. So the prompt states the procedure: load every document, extract every assertion, split compound sentences, check them in one call, correct only what is contradicted, report what still needs outside verification, then clear the batch.
What it costs and what counts
Tool calls are charged at the same tariff as the HTTP routes: one credit for a claim with inline evidence, two against a batch, and a draft review reserves and settles the same way. The protocol's own messages (initialize, listings, pings, notifications) are free, counted on their own line on the Usage page, and never count against your request limit. See Credits and billing and Rate limits.
Related articles
Fetch a page in one call
The same work as the extract call, with the request held open until the page is done and the Markdown returned directly.
Watch an extraction
Server-sent events for one job: its state now, every change after it, and the finished page. Closes when the job does.
Read an extraction's progress
One frame of a job's state without its Markdown, for a progress bar that should not carry a page's text with every poll.
Collect an extraction
Poll a job that answered 202. Returns its state while it runs and the Markdown once it is done.
Still need help?
Ask Quincy in the chat bubble below, or write to support@quorumtech.ch and we will help you directly.