How it works · MCP · EU-hosted
Gripp, Moneybird and Exact were shipping software long before anyone wrote an AI assistant, and they can’t talk to one on their own. Sallyport puts one governed endpoint in front of them — so Claude, ChatGPT, Gemini or anything else that speaks MCP connects with a single sign-in, and answers with live data. No integration to write, no key to paste.
Bring your own AI
Sallyport speaks the Model Context Protocol with OAuth 2.0 and PKCE — so any MCP-capable assistant connects with a single sign-in. No plugins to install, no keys to paste. Nobody on your team ever holds a vendor key again.
MCP is a public protocol — introduced by Anthropic and now adopted across the industry — not ours. Swap assistants without re-integrating anything.
OAuth 2.0 with PKCE and dynamic client registration. Your team signs in once; revoke someone’s access here and every assistant acting for them stops on its next call.
Tools, resources and calls all pass through the entitlement, filter and audit layer. Nothing bypasses it.
See it in action
This is what your team actually does with it — asked in their own assistant, answered from live data, and every one of them running as the person asking: same rights, same filters, same masks, same audit as the dashboard.
list_gripp_contact
Nova BV has 4 active contacts, all owned by you — here they are with e-mail and
phone. IBANs are masked and 2 inactive records were withheld by policy, so this
isn’t the raw list.
list_moneybird_invoice
€48.200 across 6 invoices this quarter — 3 paid, 3 open. I can’t show
cost price or margin on these; that’s Finance-only for your role.
employee.salary is classified Financial and
Finance-only for your role, so it never reaches me in the first place. A Finance
teammate could pull it, or you can request a time-boxed exception from your DPO.
show_pending_approvals
You’ve got 2 waiting — approve or reject them right here and I’ll
record who decided and when.
The refusal is not the assistant being careful. The field never left your system — there was nothing in the response for it to be careful with.
What it does
Sallyport sits in front of the tools you already run and does three jobs at once: it makes them callable by AI, it holds every request to the rights of the person who asked, and it chains them into work that finishes on its own. One gate, one rule set, one audit log.
One · Connect
Pick a tool from the catalog and paste the vendor key once. Sallyport reads its shape — entities, fields — and puts one governed MCP endpoint in front of it. The key is sealed on the way in and never leaves.
See how it connects ↑
Two · Guard
Every request runs as a real person, with that person’s rights. The assistant inherits their filters, their masks and their audit trail — it cannot be talked into more.
See how it holds →
Three · Automate
A connector answers one question at a time. A playbook chains many — an approval, a generated document, an e-mail, a write-back into the system of record — and runs them end to end.
See it run end to end →
The proof
This is what you’re really buying: a report that turns “we think it’s fine” into a number. Every week, every user, every row a rule held back — the answer no raw API key can give you.
| User & request | Action | Rows | Held | Result |
|---|---|---|---|---|
| J. de Vries · gripp list contacts | read | 212 | 328 held | filtered |
| S. Bakker · exact get invoice | read | 1 | 0 held | allowed |
| M. Jansen · moneybird list contacts | read | 0 | 540 held | blocked |
| P. Smit · gripp create hours | write | project req. | — | allowed |
It lands in the inbox, every Monday. “Morning — here’s how AI touched your business data last week. Everything checks out; six rules are doing their job. Top rule this week: hide-inactive-customers held back 328 rows from Sales. One request was fully blocked by sales-scope.”
No migration, no rip-and-replace
Sallyport sits in front of the tools you already run — you’re through the first governed call the same afternoon you start.
Paste your Gripp API key or sign in with OAuth. Sallyport maps the entities and fields automatically — nothing to configure by hand.
Choose who reaches what, then add row- and field-level filters in the visual builder — or start from a template and adjust.
They connect Claude, ChatGPT or Gemini in one click. From that moment every request flows through Sallyport — filtered, audited, attributed.
Every screen of that, step by step, belongs in the setup documentation rather than here — it’s reference material, and nobody picks a vendor by reading it.
The difference
A raw API key gives everyone everything. A generic MCP gateway can allowlist endpoints. Neither can filter a result or tell you who saw what — that’s the gap Sallyport closes.
| Capability | Raw API key | Generic MCP gateway | Sallyport |
|---|---|---|---|
| Per-person access control | ✗ | ~ | ✓ |
| Row- & field-level result filtering | ✗ | ✗ | ✓ |
| Full audit — who saw which rows | ✗ | ~ | ✓ |
| Works with any AI via MCP | ✗ | ✓ | ✓ |
| Governs your apps & API too | ✗ | ✗ | ✓ |
| Pre-built Benelux connectors | ✗ | ✗ | ✓ |
| EU-hosted + compliance suite | ~ | ~ | ✓ |
scroll the table →
The objection
“It’s a proxy with a nice UI. I could build this in a fortnight.”
You could build the proxy in a fortnight. The proxy isn’t the product. What takes the other eleven months is the row filters and field masks per role × connector, the append-only log with SIEM export, envelope encryption with a one-time data key per secret, SSO and SCIM, and a sandbox that runs cross-connector functions still filtered to the caller. You could build that too. The question is whether it’s what your quarter is for.
Passthrough mode
Point an existing integration at Sallyport and the request and response formats stay exactly as they are. The one difference: you authenticate with your own Sallyport token instead of the raw vendor key — which stays vaulted and never reaches the caller. Point it back at the raw API any time and it carries on.
- https://api.gripp.com/public/api3.php
+ https://api.sallyport.io/v1/gripp/contacts
- Authorization: Bearer <gripp_api_key>
+ Authorization: Bearer $SALLYPORT_TOKEN
And what comes back carries the governance with it — filtered on the way out, with a receipt your code can follow:
X-Sallyport-Audit: evt_7c1f8a2e the audit row for this exact call
One header rather than a summary of the decision, and deliberately so: a streamed response sends its headers before the last row has been read, so any count of what was withheld or masked would be a guess at the moment it had to be written. The id points at the audit row, which is written when the call finishes and carries the rules that fired, the rows held back and the fields masked — the same record your auditor reads.
For your developers
“What’s our 13-week cash position?” needs Moneybird’s invoices, Gripp’s unbilled hours and Exact’s ledger in one answer. A custom function runs your code in a sandbox, pulls from several connectors at once — each read still filtered to whoever asked — and comes back as a single MCP tool the assistant calls by name.
Connectors
Adding a tool is picking it from a catalog and pasting the vendor key once. Sallyport reads the tool’s shape — its entities, its fields — and puts one governed endpoint in front of it. The key is sealed on the way in and never leaves; nobody on your team ever holds it again.
European markets mapped. The established, API-enabled vendors your customers have trusted for a decade or more — market by market.
Vendors on the roadmap. Built in the order people ask for them. If yours is on the list, tell us and it moves up.
Read from one connector alone — 26 entities, 104 of those fields classified before anyone connects an assistant.
Don’t see your tool? Ask for a connector — that’s how the order gets decided.
The part most vendors won’t put in writing
Sallyport is built on an open standard, your keys stay yours, and every door you came in through opens outward too. Adopting it is a small decision, and small decisions are the only kind worth making about something this new.
MCP is a public protocol, not ours. Swap Claude for whatever comes next without re-integrating anything.
Integrations that run through Sallyport keep the vendor’s own request and response shape. Point them at the raw API and they carry on.
Vaulted secrets are sealed to more than one key holder — including one you control. Drop ours and you revoke our access for good.
You keep ownership of your data and your configuration, and nothing is trained on. There’s no version of this where leaving costs you what you built.
What they actually say
“Our team was already pasting client data into ChatGPT. Sallyport didn’t ban it — it gave them a safer way that’s actually better, and now I can show the board exactly what left the building.”
“Setup took an afternoon. The first weekly report told me things about our own data flows I genuinely didn’t know.”
“Our accountant asked for proof that AI couldn’t see certain clients. I exported one report and the conversation was over.”
“The point isn’t blocking AI — it’s that everyone finally uses the same governed door instead of ten private ChatGPT tabs.”
FAQ
Why we built it
Every company we talked to hit the same wall. The only way to connect an AI was to paste in a raw API key, and a raw key gives everyone everything, filters nothing, and logs nothing. That’s not a small gap. It’s the difference between “we use AI responsibly” and a GDPR incident waiting for a date.
Saying “no AI” doesn’t hold — people will paste data into a chatbot anyway. The answer is to make the safe path the easy path.
A credential that can’t tell who is holding it can only ever give everyone everything.
Evidence produced as it happens, not reconstructed afterwards when somebody asks.
Hosted and processed in the EU, and never used to train anything.
“We built Sallyport because good teams keep hitting the same impossible choice: ban AI and fall behind, or allow it and fly blind. There’s a third way — let it in, on your terms.” The Sallyport team · Utrecht, Netherlands
Closed beta · EU-hosted · Every call logged
We’re onboarding a few teams at a time. Tell us what you run and we’ll show you what it looks like on your own stack.