Skip to content
Smartplane
A white paper plane, standing for an agent’s request, flies through three checkpoints in a clear sky: a grant check, a rule check and the audit log.

Clear skies for your AI agents.

One MCP URL for every agent. Access by role, plain-English rules checked before every action, every call on the record.

One URL instead of fourteen keys.

When a team adopts agents, everyone wires up their own: a server per tool, a token per server, a database URL from the wiki. Soon nobody can say who reaches payroll, and the person who left in September is still connected.

With Smartplane the file is one line. Keys stay in an encrypted vault on the server, and what each agent sees comes from who is signed in.

14 servers, 11 secrets, 1 former colleague still connected

~/grace/project/.mcp.json

{
  "mcpServers": {
    "github":      { "command": "npx", "args": ["@mcp/github"], "env": { "GITHUB_TOKEN": "ghp_r8Kq2vT…" } },  "github": { "GITHUB_TOKEN": "ghp_r8Kq2vT…" },Grace’s personal token, with repo and admin:org    "linear":      { "url": "https://mcp.linear.app/sse" },  "linear": { "url": "mcp.linear.app/sse" },    "postgres":    { "command": "npx", "args": ["@mcp/postgres", "postgres://admin:pw@prod-db:5432/app"] },  "postgres": { "admin:pw@prod-db" },Production database, read and write    "stripe":      { "command": "npx", "args": ["@stripe/mcp"], "env": { "STRIPE_KEY": "sk_live_51Hx…" } },  "stripe": { "STRIPE_KEY": "sk_live_51Hx…" },A live key that can refund any amount    "slack":       { "command": "npx", "args": ["@mcp/slack"], "env": { "SLACK_BOT_TOKEN": "xoxb-2291…" } },  "slack": { "SLACK_TOKEN": "xoxb-2291…" },    "gdrive":      { "command": "npx", "args": ["@mcp/gdrive"], "env": { "CREDS": "~/Downloads/creds (2).json" } },  "gdrive": { "CREDS": "creds (2).json" },    "notion":      { "url": "https://mcp.notion.com/mcp" },  "notion": { "url": "mcp.notion.com" },    "sentry":      { "command": "npx", "args": ["@sentry/mcp"], "env": { "SENTRY_TOKEN": "sntrys_eyJ…" } },  "sentry": { "SENTRY_TOKEN": "sntrys_eyJ…" },    "datadog":     { "command": "npx", "args": ["dd-mcp"], "env": { "DD_API_KEY": "4f1c9e…" } },  "datadog": { "DD_API_KEY": "4f1c9e…" },    "jira":        { "command": "uvx", "args": ["mcp-atlassian"], "env": { "JIRA_TOKEN": "ATATT3x…" } },  "jira": { "JIRA_TOKEN": "ATATT3x…" },    "snowflake":   { "command": "uvx", "args": ["snowflake-mcp"], "env": { "SF_PASSWORD": "Winter2025!" } },  "snowflake": { "SF_PASSWORD": "Winter25!" },A shared password, in plain text    "aws":         { "command": "uvx", "args": ["aws-mcp"], "env": { "AWS_SECRET_ACCESS_KEY": "wJalr…" } },  "aws": { "AWS_SECRET_KEY": "wJalr…" },    "billing-api": { "url": "https://billing.internal/mcp", "headers": { "Authorization": "Bearer eds_7Qm…" } },  "billing-api": { "Bearer eds_7Qm…" },Edsger’s token. He left in September.    "figma":       { "url": "http://127.0.0.1:3845/mcp" }  "figma": { "url": "127.0.0.1:3845" }
"smartplane": { "url": "https://app.smartplane.dev/mcp" }
1 URL, 0 secrets on this laptop. Grace signs in once with her work account. Her agent sees GitHub, Linear and Google Drive, because her team does.

Plug in what agents may use.

Integrations, databases, MCP servers, secrets and variables, added once by an admin. Each is granted to a team, a role or a person, down to a single tool.

Shared or per person
Connect one account for everyone, or let each person sign in with their own. Grants and rules apply either way.
Read-only by default
Databases answer reads unless you grant writes, and a rule can still hold a write for approval.
Grants that expire
Give the CI agent admin on GitHub until the migration ships on October 1. On October 1, it ends.
The Resources panel of the dashboard. Integrations: Linear, GitHub and Stripe connected with a shared account, Slack per person. MCP servers: Notion, per person, and Sentry, shared. Databases: orders on Postgres and events on ClickHouse, both read-only; the Engineering team is granted use of orders. Secrets: STRIPE_KEY, deliverable, and OPENAI_API_KEY, gateway only, both masked. Variables: LOG_LEVEL and REGION.

Resources

12
  • LinearConnected · shared
  • GitHubConnected · shared
  • SlackPer person
  • StripeConnected · shared
  • Notionmcp.notion.comPer person
  • Sentrymcp.sentry.devConnected · shared
  • ordersPostgresRead-only

    Granted toEngineering · use

  • eventsClickHouseRead-only
  • STRIPE_KEY••••••••••••Deliverable
  • OPENAI_API_KEY••••••••••••Gateway only
  • LOG_LEVELinfo
  • REGIONeu-west-1

Keep your secrets – secret.

Smartplane stores your keys and secrets safely and hands them out only when needed, hidden from disks, logs, agent transcripts and third-party services.

Instead of giving your production keys to agents and services, give them a Smartplane key you can control, rotate and audit at any time.

Keep them safe locally.

Masking stops accidents: agent transcripts, logs, screen shares. It can’t hide a secret from the process you hand it to, so grant each one only what it needs.

Even in production.

On Railway, Fly or any host with a start command, the service fetches its secrets once at boot with a scoped machine token. With our Node SDK and refreshEvery, a rotated key arrives without a redeploy.

Nothing on disk
Secrets go straight into the process environment. No .env file to commit by mistake, paste into a chat or leave on an old laptop.
Masked in the output
Values print as [smartplane:NAME], base64 and URL-encoded copies included, so transcripts, logs and screen shares stay clean.
Only what you’re granted
Grants decide who receives which secret, and every delivery goes on the audit log, per secret: who, where and when.

Rules in plain English, checked first.

Type the rule the way you’d say it in a meeting. Smartplane finds the tools it applies to, writes the check, tests it on example calls, and waits for you to switch it on.

A rule is typed into the rules list: “Nobody updates the todo list in Notion”. Verify finds the tools it applies to (Notion, 14 tools), writes the check, reviews it and tests it on example calls: it caught 6 of 6 calls that break it and allowed 5 of 5 that don’t. It applies to Notion and is pinned to the Todo database; it checks only update page and move pages. An admin reviews and activates it. The next time an agent tries notion__notion-update-page on the Todo page for Priya R. in Claude Code, the call is blocked before it runs and the agent is told which rule it broke.

Each rule decides what happens on a match: block the action, flag it in the log, or hold it until someone with the right role approves. Nobody approves their own request.

Say the thing, not the tool. Ask for “the todo list” and it finds your actual Todo database and pins the rule to it, so a call that only carries a page id is still caught.

Onboarding in seconds.

Added to the Platform team in Okta: GitHub, Linear and Postgres (read-only) are there before the first coffee.

  • GitHubRepositories · write
  • LinearIssues · read
  • PostgresOrders DB · read-only
  • GmailSend as team

Offboarding, instantly.

Deactivated in Okta: tokens revoked, grants removed, teams removed. The next call is refused, and logged.

  • GitHubRepositories · write
  • LinearIssues · read
  • PostgresOrders DB · read-only
  • GmailSend as team

Okta, Entra ID and Google Workspace over SSO and SCIM. Every change goes on the audit log.

Every call, on the record.

Tool calls, denials, approvals, grant changes and sign-ins go into an append-only log. Each event carries the hash of the one before it, so an edited or deleted row breaks the chain.

A sample of the audit log, adding an event every few seconds: tool calls allowed, calls blocked by a rule, refunds held for approval and secrets delivered with their values masked. Each event carries the hash of the one before it, and the chain check reads intact.
Audit logChain intact · 1,284 events
  1. 128414:02:31Call allowedsentry__search_issuesLeila H., in ChatGPT · {"query":"is:unresolved checkout"}Leila H., in ChatGPT02ff15
  2. 128314:02:27Call blockedgithub__push_filesIngrid J., in VS Code · Rule: Nobody force-pushes to mainIngrid J., in VS Code0fdc7f
  3. 128214:02:21Call allowedstripe__list_chargesAiyana T., in Claude Code · {"limit":20,"created":{"gte":"today"}}Aiyana T., in Claude Codefa169d
  4. 128114:02:13Held for approvalstripe__create_refundNoa B., in VS Code · Rule: Refunds over $500 need FinanceNoa B., in VS Codeb2f38a
  5. 128014:02:03Secret deliveredapi-prod · machine token · STRIPE_KEY to api-prod · value maskedapi-prod · machine token857d6f
  6. 127914:01:51Call allowedsentry__get_issue_detailsTomasz N., in Claude Code · {"issue":"CHECKOUT-3F2"}Tomasz N., in Claude Code67d044
  7. 127814:01:37Call allowedclickhouse__queryRafael C., in VS Code · {"sql":"SELECT count() FROM events WHERE day = today()"}Rafael C., in VS Code775b05

Sample events, made up in your browser. No real people or data.

Evidence an auditor can re-check
Export any window as NDJSON with the hashes, and the chain can be verified offline. Exports are logged too.
Values never enter the log
A secret delivery records which secret, to whom and when. Never the value, in the log or in a trace.

Ready for your security review.

Whoever signs off on agent access, in security, IT or compliance, gets the controls they would ask for: who can reach what, how it was removed, and a record nobody can quietly edit.

An access review in progress, 7 of 10 items decided. Priya R.’s Engineering membership was kept by Jonas M. Two grants wait for a decision: Engineering on the orders database, and the Support team’s refunds on Stripe. The reviewer’s own admin grant on GitHub can only be decided by someone else. Tomasz N.’s contractor membership was revoked. Evidence exports as CSV once the review is closed.
Access reviews with evidence
A review snapshots every membership and grant and lists live machine tokens. Nobody decides on their own access, a revoke applies at once, and the decisions export as CSV.
SOC 2 CC6.2, CC6.3
Offboarding in one step
Deactivate someone in your directory and one path ends it all: membership, tokens, grants, teams and personal connected accounts.
SOC 2 CC6.2, CC6.3
A log nobody can quietly edit
Append-only and hash-chained per organisation, with a chain check in the dashboard and a nightly archive.
SOC 2 CC7.2
Least privilege, per team and action
Grants per person, team, role or project, down to one tool, one API method or a read-only database, with an end date.
SOC 2 CC6.3
Secrets stay inside
Envelope-encrypted with AES-256-GCM. No value ever reaches an agent; it leaves only if an admin marks it deliverable, and every delivery is logged.
SOC 2 CC6.1, CC6.7
Less data to the classifier
The model that checks calls sees a caller’s email only when a rule is about people. Member names and emails never reach the rule compiler.
SOC 2 P4.1

Smartplane is SOC 2-ready, not certified: each control above maps to the SOC 2 criteria beside it, and the evidence comes out of the product.

Read the security page

Works with the agents you use.

Claude Code, Cursor, VS Code, ChatGPT and your own agents all speak MCP. Clients with MCP sign-in only need the URL: they open a browser, you sign in with your work account, and access ends when your membership does.

Claude Code

Run this in your terminal, then /mcp in Claude Code to sign in.

claude mcp add --transport http smartplane https://app.smartplane.dev/mcp

Cursor

Add this to .cursor/mcp.json. Cursor opens a browser to sign in.

{
  "mcpServers": {
    "smartplane": {
      "url": "https://app.smartplane.dev/mcp"
    }
  }
}

VS Code

Run this in your terminal. VS Code asks you to sign in on first use.

code --add-mcp '{"name":"smartplane","type":"http","url":"https://app.smartplane.dev/mcp"}'

ChatGPT

In ChatGPT, open Settings, then Connectors, create one and paste the URL.

https://app.smartplane.dev/mcp

Any MCP client

Any MCP client takes the URL. For CI, send a token as a bearer header.

{
  "smartplane": {
    "url": "https://app.smartplane.dev/mcp",
    "headers": {
      "Authorization": "Bearer pc_…"
    }
  }
}

For CI and older clients, create a token. It’s shown once, stored as a hash and expires within 90 days.

A token named ci-deploy has just been created: a service account for all projects that expires in 30 days. The dashboard says to copy it now, because only a hash is stored and it cannot be shown again.

Start with your own team.

Free for up to five members. Pay per member when you need SSO, SCIM and a year of audit history.

Compare plans
  • Free

    $0forever

    For individuals and small teams trying governed agent access.

    • Up to 5 members
    • 10 connected tools and MCP servers
    • Role-based grants
  • Team

    $24per member / month

    For teams rolling agents out across engineering and operations.

    • Unlimited tools and MCP servers
    • Team and project grants
    • Unlimited rules
  • Enterprise

    Customannual contract

    For regulated organisations with procurement and compliance requirements.

    • Everything in Team
    • Data residency options
    • Custom audit retention and SIEM streaming

Hand out one URL. Keep the keys.

Set up your first resource and rule in about ten minutes. Your team adds one line to their agent, and every call after that is cleared, held or blocked by rules you wrote.