How it works · MCP · EU-hosted

Your tools were built before AI. They can still answer it.

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

Connects in a click, over open standards.

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.

ClClaude GpChatGPT GmGemini + any MCP client

Open standard, no lock-in

MCP is a public protocol — introduced by Anthropic and now adopted across the industry — not ours. Swap assistants without re-integrating anything.

One-click, secure connect

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.

Governed at the protocol layer

Tools, resources and calls all pass through the entitlement, filter and audit layer. Nothing bypasses it.

See it in action

Four real exchanges, including the one that says no.

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.

ClClaude“Which contacts at Nova BV are active, and who owns them?”
called 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.
GmGemini“What have we invoiced Studio Vandaag so far this quarter?”
called 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.
ClClaude“Show me everyone’s salary.”
refused at the gate I can’t — 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.
GpChatGPT“Anything waiting on my approval?”
called show_pending_approvals You’ve got 2 waiting — approve or reject them right here and I’ll record who decided and when.
ACME · Q3 renewal€12.400 · drafted from template · sends from your domain
ApproveReject
New-vendor access · ExactRequested by Sophie · Support role · read-only, EU-only
ApproveReject

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

One gate. Three things it gives you.

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.

Building one

You describe it. It writes it. You read it back.

Nobody opened a builder to make the playbooks on this site. Somebody typed a paragraph in the same chat they ask questions in, and what came back was a definition short enough to check line by line before it ever ran once.

sally · new playbook · from a description
Melanie · Operations Director Every Friday afternoon, find the projects that had hours logged this week but haven’t been invoiced yet, draft an invoice for each one from the hour entries, and let me approve them before anything goes out.
Sally Here it is. Six steps, one place it stops for you. I had to guess once — it’s marked, and I haven’t saved anything yet.
Sally I checked it against your rights before showing it to you, so if it can’t run you’d know now rather than at 16:00 on Friday.
Draft · Weekly unbilled hours · not saved
Trigger Schedule — every Friday, 16:00 Europe/Amsterdam · skips public holidays
1 GrippFind projects with hours logged since Monday and no draft invoice
2 Sally · for eachBuild the invoice lines from that project’s hour entries
3 Moneybird · for eachCreate a draft invoice
4 Approval · human Melanie Koster reviews every draft before anything sends The guess. You said “let me approve”, so I routed this to you personally rather than to the Admin role. That means nothing goes out while you’re away. Want any Admin to be able to clear it instead?
5 MoneybirdSend the approved drafts and mark them sent
6 GrippLog a note on each project so the next person can see why
✓Runs as Melanie · Operations Director. Every entity it touches is one that role is already granted. ✓Every field it writes is a field that role may write — checked against the same rights contract the live API uses, not a list kept alongside it. ✓Nothing sends before step 4. A draft that skipped the gate would have been rejected and rewritten. !One guess, shown rather than taken.

Every attempt is validated before you see it, so a definition that names a step type that doesn’t exist, or a field the role can’t write, never reaches the screen — it goes back and gets written again.

Not writing JSON is the small win. The one that matters is that six lines you can read in fifteen seconds are six lines your DPO can also read, and that they were checked against your rights before the thing ran rather than found in a log afterwards. A playbook written this way cannot widen anything: it runs as a named person, inside that person’s rights, and it is refused in exactly the places they would be.

The proof

See exactly what your AI did.

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.

weekly governance report · mon 30 jun – sun 6 jul 2026 · gripp, moneybird, exact
AI calls3.412+18% vs last week
Active users18across 3 teams
Rows returned5.940to connected AI
Rows held back1.268by 6 active rules
User & requestActionRowsHeldResult
J. de Vries · gripp list contactsread212328 heldfiltered
S. Bakker · exact get invoiceread10 heldallowed
M. Jansen · moneybird list contactsread0540 heldblocked
P. Smit · gripp create hourswriteproject req.—allowed
EXPORT  append-only · NDJSON → Splunk, Datadog, Sentinel, Elastic, S3

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

Governed in three steps.

Sallyport sits in front of the tools you already run — you’re through the first governed call the same afternoon you start.

01

Connect your tool

Paste your Gripp API key or sign in with OAuth. Sallyport maps the entities and fields automatically — nothing to configure by hand.

02

Set the rules

Choose who reaches what, then add row- and field-level filters in the visual builder — or start from a template and adjust.

03

Give your team AI

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

More than a proxy with a shared key.

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.

CapabilityRaw API keyGeneric MCP gatewaySallyport
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

Swap the URL. Keep your code.

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.

the only change your code needs
- 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

Some questions no single tool can answer.

“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.

13-week cash-flow forecastmoneybird invoices + gripp hours + exact ledger
Client health scoreprojects, hours and payment behaviour in one number
DSO, agedhow long your money actually takes to arrive
Booked capacity vs pipelinewhat’s sold against who is free
Every read inside a function obeys the caller’s rules. A function is a shortcut through three tools, never a way around any of them.

Connectors

Your stack is probably already in here.

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.

GrippMoneybirdExact SalesforceHubSpotXero JiraZendeskAFAS TwinfieldVismaTeamleader
11

European markets mapped. The established, API-enabled vendors your customers have trusted for a decade or more — market by market.

110

Vendors on the roadmap. Built in the order people ask for them. If yours is on the list, tell us and it moves up.

541 fields

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

And if you hate it, you can leave.

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.

Open standard, no lock-in

MCP is a public protocol, not ours. Swap Claude for whatever comes next without re-integrating anything.

Swap the URL back

Integrations that run through Sallyport keep the vendor’s own request and response shape. Point them at the raw API and they carry on.

Hold your own key

Vaulted secrets are sealed to more than one key holder — including one you control. Drop ours and you revoke our access for good.

Your data stays yours

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

Four rooms, the same relief.

“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.”
Melanie KosterOperations Director · Studio Vandaag
“Setup took an afternoon. The first weekly report told me things about our own data flows I genuinely didn’t know.”
Daniel DekkerIT Lead · Bureau Noord
“Our accountant asked for proof that AI couldn’t see certain clients. I exported one report and the conversation was over.”
Laura DijkstraFinance · Kessels & Co
“The point isn’t blocking AI — it’s that everyone finally uses the same governed door instead of ten private ChatGPT tabs.”
Mark JansenDirector · Rework Agency

FAQ

The questions we get before a pilot.

Does Sallyport store our business data?
Some of it, and it is worth being exact about which. Reads pass through: the connector ledger records who asked, for what, how many rows came back and what a rule held back — never the request or response body. Writes are different. The audit log records what changed, values included, because a change you cannot reconstruct is not an audit. Function results are cached for a window you set per function and swept hourly, and prompts sent to an AI model are logged — you can have those redacted, or reduced to metadata, at the moment they are written.
Which AI assistants can connect?
Any client that speaks the Model Context Protocol — Claude, ChatGPT and Gemini today, others as they ship — over OAuth 2.0 with PKCE. Nothing to install; your team signs in once.
How long does it take to set up?
Connect a tool with its API key in minutes, then author your first filter rules the same afternoon. Templates cover the common cases so you’re not starting from a blank page.
Where is our data hosted, and is it GDPR-safe?
Hosted and processed in the EU, encrypted at rest. A Data Processing Agreement is available. You remain the data controller throughout.
We already use ChatGPT by copy-paste. How is this different?
Sallyport is the sanctioned, better channel — live data, write-back, and a full audit trail — not a paste-blocking DLP tool. It pairs with your DLP rather than replacing it.
How is Enterprise priced?
Scaled by team size and connectors, never per API call. SCIM directory sync, SIEM export, access reviews and your own KMS key are included. See the plans →

Why we built it

Let teams use AI — without giving away the keys.

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.

Governed beats blocked.

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.

Access is per person, not per key.

A credential that can’t tell who is holding it can only ever give everyone everything.

If it isn’t logged, it didn’t happen.

Evidence produced as it happens, not reconstructed afterwards when somebody asks.

Data stays in the EU.

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

Give your team AI.
Keep your data governed.

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.