AI Client Access (MCP)
QuantAssure exposes your compliance data to AI tools via the Model Context Protocol — so Claude, Cursor, or any MCP-capable client can query findings, risks, controls, and posture, and (with your approval) make changes, all under your organisation's permissions.
Before You Start
You need two things, and nothing else:
- A QuantAssure account that is a member of the organisation whose data you want to reach. If you can sign in to the dashboard and see your findings, you are ready.
-
An MCP client that supports remote servers over HTTP with
OAuth — Claude Code, Claude Desktop, and Cursor all do.
Clients that only support local
stdioservers cannot connect.
You do not need to create anything in advance. There is no "create client" button to find, and no client ID or secret for you to copy. Your AI tool registers itself the first time it connects, and you approve it in the browser. That approval is the moment access is granted, and it is the moment the audit trail records.
Your Endpoint
This is the only value you need:
https://production--quant-gov--quant-assure--4322.apps.quantgovsites.com/mcp Connect Your Client
Claude Code
Add the server, then start the sign-in from inside Claude Code:
claude mcp add --transport http quantassure https://production--quant-gov--quant-assure--4322.apps.quantgovsites.com/mcp
Then run /mcp in Claude Code and choose to authenticate.
Your browser opens to finish the steps below.
Claude Desktop, Cursor, and other clients
Add QuantAssure as a remote HTTP server in your client's MCP configuration:
{
"mcpServers": {
"quantassure": {
"type": "http",
"url": "https://production--quant-gov--quant-assure--4322.apps.quantgovsites.com/mcp"
}
}
} Restart the client. It will prompt you to sign in the first time it tries to use a QuantAssure tool.
What happens next
Whichever client you use, the sign-in is the same three steps in your browser:
- Sign in to QuantAssure. If you are already signed in to the dashboard in that browser, this is skipped. If not, you are sent to the login page and returned to the right place afterwards — so use the browser you normally use for QuantAssure.
- Review the consent screen. It names the client requesting access and lists every permission it is asking for. Nothing is granted until you approve here.
- Approve. Your client receives its tokens and the connection is live. Ask your assistant something like "what are my open critical findings?" to confirm it works.
The consent screen is the only point at which a client is bound to your organisation. Until you approve, a registered client is just a name — it holds no access to anyone's data.
What You Are Approving
Access is divided into scopes — findings:read,
evidence:write, policies:write and so on —
and the consent screen lists exactly the ones being requested. A
client granted read-only access stays read-only.
Read the consent screen rather than assuming. A client that does not ask for specific scopes is treated as requesting all of them, including the write scopes that can create evidence, publish policies and trigger scans. Most AI tools do not request scopes explicitly, so this is the common case, not the unusual one. The consent screen always shows the real list — if it asks for more than you want that client to have, decline.
Approval is per person. Your teammates each go through their own consent, and each of their clients acts as them. Everything a client does is attributed to the approving user in the audit log, including the approval itself, recorded with the scopes granted and whether the client registered itself or was registered by an administrator.
If It Does Not Connect
| What you see | What it means |
|---|---|
| The browser never opens |
The client is not treating QuantAssure as a remote HTTP
server. Check the transport is http and the
URL ends in /mcp.
|
| "Authorization request not found or has already been used" | The link was already completed, or you opened it twice. Start the connection again from your client. |
| "This authorization request has expired" | Consent was left open too long. Start again and complete it in one sitting. |
| You are asked to log in and land on the dashboard instead of consent | Sign in first, then retry the connection from your client. |
| Tools work, then stop after a while | Sessions expire after a period of inactivity, and restarts end them. Clients reconnect automatically; if yours does not, restart it. |
What Clients Can Do
The tool surface covers the whole compliance conversation, not just lookups. A session with your assistant can move from "where do we stand?" to a generated audit pack without leaving the chat:
- Find the gaps — read tools list and inspect findings (AI-adjusted severities included), risks, action items, framework controls with your org's statuses, and posture summaries.
- Know when to trust the data —
get_posture_summaryalways carries acoverageblock reporting whether your connectors and collectors are healthy, so an agent never reports on your findings or posture score without also knowing whether the underlying collection is degraded.get_connector_healthdrills into the per-source detail — see Connector Health for what each status means and why it matters. - Close them with evidence —
create_control_evidenceattaches evidence to a control (by code, e.g.ISM-1504), andupdate_control_statusrecords the applicability and compliance determination with a required rationale, captured in the audit trail. - Author the policies behind the controls —
create_policydrafts a new policy from markdown, andupdate_policypublishes a revised version with a change summary. Revisions go through the same version history as the in-app editor: the previous content is archived as a snapshot, never overwritten.list_policiesandget_policyread the register, current content, and version history. - Run a fresh scan —
trigger_rundispatches an Assure Agent collection run for a scope, through exactly the same path as the dashboard's run button. - Read the results —
get_run_statusfollows the run through collection and AI triage; once it completes, the read tools pick up the freshly triaged findings. - Produce the audit pack —
generate_reportcreates any report type (AI Decision Audit Trail, SLA Compliance, and the rest), andget_reportreads back the summary plus a dashboard link to the full report.
Write tools also cover the day-to-day in between: create and update
risks and actions, update finding statuses, and keep the asset
register current — list_assets reads the inventory, and
upsert_asset records an asset by its stable source
identity, so repeating the same upsert updates the existing record
instead of duplicating it (the same semantics the collection
pipeline uses). Every write is audit-logged with your identity.
Each tool group carries its own OAuth scope — for example
findings:read, evidence:write,
runs:write/runs:read,
reports:write/reports:read, and
connectors:read for get_connector_health —
so the consent screen tells you which of these capabilities a client
is actually asking for.
The coverage signal on get_posture_summary is
deliberately not behind connectors:read: it lives under
the findings:read scope every existing client already
holds, so a client you approved before this feature shipped starts
seeing it with no re-consent required. It only tells
you counts — how many sources are degraded, failing, or have never
run. The named list of which sources are affected is more
detail than a findings-only client should get for free, so that list
— and the full per-source detail behind get_connector_health
— only appears once a client has been re-authorised for
connectors:read. Existing tokens can't pick this up
silently: the client has to go through consent again before either
the named list or the tool becomes reachable.
Autonomous Agents
Everything above assumes a person is driving — you sign in, you approve, and the assistant acts on your behalf. An agent that runs on a schedule or in a pipeline has no person to sign in as and no browser to open, so it uses a different credential: an organisation API key with MCP scopes.
- Go to Organisation → API Keys and create a key. Owners and admins only.
- Tick the scopes the agent needs. Read-only grants every read scope and nothing else; leaving all of them unticked creates an ordinary REST API key with no MCP access at all.
-
Give the key to your agent as a bearer token — no OAuth, no browser:
claude mcp add --transport http quantassure https://production--quant-gov--quant-assure--4322.apps.quantgovsites.com/mcp \ --header "Authorization: Bearer qa_your_key_here"
The important difference is in the audit trail. A person's assistant acts as that person. An agent on an API key acts as itself: entries appear under the key's name with an Agent marker rather than being attributed to whoever created the key. When an assessor asks who changed a control, "the nightly compliance agent" is a truthful answer and a borrowed username is not.
An API key is a bearer credential: anyone holding it has whatever you granted it, with no consent step in between. Grant the narrowest set of scopes that does the job, prefer read-only where the agent only reports, set an expiry, and revoke keys you are no longer using. Existing keys created before MCP support have no scopes and cannot reach MCP until you deliberately grant them some.
Security Posture of the Endpoint
The MCP surface is hardened as a first-class product API: per-token rate limiting, strict session lifecycle with idle expiry, CSRF-protected consent, request size caps, and org-scoped authorisation on every tool. Your data is only reachable with tokens minted through the consent flow you approved.
Every MCP action lands in the audit log — under the approving user's identity for a client you consented to, and under the agent's own name for an API key — so AI-assisted work carries the same accountability as manual work.