Platform · platform & data

Your business, available to an assistant you control

The Model Context Protocol lets an AI client reach a system directly. That is genuinely useful and it is also the fastest way to hand an unaccountable process write access to your ledger — so the interesting part of an MCP server is not what it exposes, it is what it refuses.

Level 0ReadAnswer questions from your data. No approval needed.
Level 1DraftPrepare the action. A person reviews and commits it.
Level 2Execute within policyAct automatically inside rules a controller wrote.
Level 3Approval requiredHeld at a gate until a named approver signs.
Level 4RestrictedOnly specific human roles may ever execute.
Client is a scoped actorSame policy engine appliesEvery call in the audit trail

What it does

Six things, specifically.

Standard MCP

Works with Claude Desktop, Claude Code, and any compliant client, over the standard transport with no bespoke SDK to adopt.

Query the graph

Balances, transactions, customers, vendors, projects, and documents — the same objects the application reads, not a reduced reporting extract.

A scoped actor, not a superuser

Each connection is an actor with its own permission set, so what a client can reach is a grant you make rather than everything the token owner could see.

Read by default

Connections are read-only unless you explicitly grant more, and the grants available stop well short of posting, approving, or releasing anything.

Policy applies identically

A write attempted through MCP passes the same policy engine as one from the interface. There is no path that bypasses it, which is the entire design constraint.

Fully logged

Every call is an audit entry with the client identity, the query, the scope, and what was returned — so a question about what an assistant saw has an answer.

The obvious risk, stated plainly

An MCP server is a door. The question every security review should ask is what happens when somebody puts an untrusted instruction in front of a model that holds the key — a prompt injected through a vendor invoice, an email, or a document the model was asked to read.

The defence cannot be that the model will not be fooled, because eventually it will be. It has to be that the door does not open onto anything dangerous. So the authority available through MCP is deliberately bounded below the level at which a successful injection matters: no posting, no approval, no payment release, no permission changes, no vendor banking.

The right question is not whether the model can be tricked. It is what the worst outcome is when it is. We keep that answer boring.

Scoped like any other actor

An MCP connection is not a token that inherits its creator’s access. It is an actor with its own grants, expiry, and scope, which means a connection created by a controller does not silently carry that controller’s authority across nine entities.

Most customers scope a connection to read-only on one entity for the first month, look at the audit trail, and widen from there. That is the pattern we recommend rather than the one we merely permit.

What it is genuinely good at

Investigative work. Why did travel expense rise in the Denver office, which vendors are we paying under two records, which projects have unbilled work older than sixty days — questions that require several joined queries and would otherwise be a reporting request.

It is also good at drafting. Compose the variance commentary, summarise this contract against what was invoiced, prepare the schedule. The output arrives as a draft a person releases, which is where the authority boundary sits for good reason.

Where it should not be used

Not for bulk data movement — use the API, which is built for it and rate-limited accordingly. Not as an integration transport, because a conversational protocol is a poor substitute for one with delivery guarantees. And not as a way around a permission somebody was refused elsewhere; it will refuse them identically.

Limits

Where this does not help.

No posting authority, ever

Posting, approving, releasing payment, changing permissions, and vendor banking are unavailable through MCP at any configuration. This is not a setting.

Not a bulk data channel

Rate-limited and designed for investigation. Moving large volumes belongs on the API or a warehouse export.

Client-side risk is yours

We scope and log what the connection may reach. What the client does with the results — where it stores them, who sees them — is governed on your side.

Questions

What people ask.

Which clients work?
Claude Desktop, Claude Code, and any compliant MCP client over the standard transport. There is no proprietary SDK.
Can it write anything?
Only what you explicitly grant, and the available grants stop short of posting, approving, releasing payment, and changing permissions or vendor banking. Those are unavailable at any configuration.
What about prompt injection?
We assume it will eventually succeed and bound the authority so that it does not matter. The defence is the ceiling on what the connection can do, not a filter on what the model reads.
Does it see everything the creator can?
No. A connection is its own actor with its own grants and expiry, so it does not inherit the creator’s scope.
Is it logged?
Every call, with client identity, query, scope, and what was returned, in the same audit trail as everything else.

Connect an assistant, carefully.

Tell us the client and the use case. We will scope it and show you the audit trail it produces.