Security posture

What this server can and cannot do to your data

Five absolutes. Read-only by default. Every write tool is individually scoped. Every write requires a dry-run first. Every action writes an audit-log entry. And there are no destructive deletes, ever. The first four are engineering; the fifth is contractual, and it is the one we will refuse work over. A server cannot fix the model that calls it, but it can bound the blast radius, and that boundary is what this page describes in full.

Default posture: read-only

A new server ships read-only. Turning on a write capability is a deliberate, per-tool decision made with you and recorded in the signed manifest, not a global switch someone flips later. Most internal builds never enable a write at all, because most of what a team wants from Claude is to ask questions of a system it already trusts, and reading answers those questions without adding a single unit of risk.

The write-tool gate

Every write tool passes four gates before it ships: a scope, a required dry-run, an audit entry, and the no-delete rule. The registry rejects a write tool that is missing any of them.

registry.ts
function registerWrite(tool: WriteTool) {
  if (!tool.scope) throw new Error("write tool needs an explicit scope");
  if (!tool.dryRun) throw new Error("write tool must support dry-run");
  if (tool.destructive) throw new Error("destructive deletes are refused");
  return audited(tool); // every call writes a log entry
}

Prompt injection: the honest section

This is the part most vendors skip, so it is the part worth reading. A malicious instruction can arrive inside a document, a database row, or a tool description, and a server cannot stop the model from reading it. What a server can do is make the damage bounded and visible rather than silent and open-ended.

Contractor isolation

Portkeel is deliberately small, and implementation runs through a vetted contractor bench. Contractors receive sandbox credentials only. Production secrets never leave our infrastructure, this is contractual rather than a norm, and the founder reviews every line before it reaches a production deploy.

Incident policy, written before it is needed

If a server we run is involved in an incident, we disclose within 24 hours and share a post-mortem. Concealment is what actually ends companies here, not the incident.

What we are not

We are not a penetration test, not a security audit, and not a compliance certification. There is no SOC 2 today. If your procurement needs one now, we are not your vendor this quarter, and stating that plainly is cheaper for both of us than discovering it in week six.

Security questions

Can the server delete our data?
No. There are no destructive deletes, ever, and that is a contractual absolute rather than a configurable setting. A tool may archive or flag a record; it may not remove one. If a use case genuinely needs a hard delete, we are not the right vendor for that tool, and we say so before the manifest is signed.
How do you handle prompt injection?
A server cannot fix the model that reads a poisoned tool description or a malicious data field; that is above its layer. What it can do is bound the blast radius: read-only defaults, per-tool scopes, dry-runs on writes, and an audit log that records what was attempted. We treat injection as a containment problem, not a solved one, because as of 2026 it is not solved.
What auth do you use?
API keys for internal servers, OAuth 2.1 with PKCE for remote ones. Client tokens are never passed downstream, and we validate the audience claim to avoid a confused-deputy problem. The 2026-07-28 revision changed the authorization model, and every server we run negotiates the current revision.
Do your contractors touch production?
No. Contractors receive sandbox credentials only. Production secrets never leave our infrastructure, and this is written into their agreement rather than left as a norm. The founder reviews every line before it reaches a production deploy.
Do you have SOC 2?
No, not today, and we will not pretend otherwise. If your procurement requires a SOC 2 attestation now, we are not the right vendor for this quarter. Ask us again in 2027. What we can give you today is a published posture, an incident policy, and code you can read.

Found something, or want to ask before you buy? Write to info@portkeel.com. We reply to disclosure reports within one business day.