MCP Server
tripwire-mcp is a Model Context Protocol
server that lets MCP-capable clients such as Claude Desktop and Claude Code work with your tripwires.
Ask Claude to "put a postgres decoy in the prod namespace", "which tripwires have been touched
this week?" or "renew everything expiring in the next month", and it does it through the same
API the web app uses.
It speaks JSON-RPC 2.0 over stdio, so it works identically against the SaaS API
(https://api.gettripwires.com) and a self-hosted control server. The binary depends only on
the Go standard library — no third-party dependencies.
What it can see
The server has no privileges of its own. Every call carries your credential and your active organization, and the API applies exactly the permissions it applies in the browser:
- Only organizations you are a member of. Tripwires belonging to anyone else's organization are neither listed nor addressable — asking for one by ID reports it as not found.
- Only namespaces you have been granted. A namespace you cannot see behaves as though it does not exist.
- Your role decides what you may change:
vieweris read-only;memberand above can create, update and delete. - Nothing installation-wide. Platform users, settings, billing and system health are not reachable from here.
Install
Download tripwire-mcp from the
releases page
(published alongside the CLI for Linux, macOS and Windows), or build from source:
go build -o tripwire-mcp ./cmd/mcp
Authenticate
The server takes a bearer credential: a scoped API key (tw_…) or a session JWT. Mint a key
under Settings → API Keys, or with tripwire keys create. It needs:
| Scope | Needed for |
|---|---|
org:read | list_orgs, list_org_members, whoami — how the server discovers which organizations you belong to |
tripwire:read | Listing tripwires, reading one, detections, analytics |
tripwire:create | create_tripwire |
tripwire:update | update_tripwire, renew_tripwire, reset_tripwire |
tripwire:delete | delete_tripwire |
Grant only what you want the assistant to be able to do — leaving
tripwire:delete off is a cheap way to make sure it cannot remove anything.
Configuration comes from flags or environment variables (flags win):
| Flag | Environment | Meaning |
|---|---|---|
--endpoint | TRIPWIRE_ENDPOINT | API base URL |
--api-key | TRIPWIRE_API_KEY | API key or JWT |
--org | TRIPWIRE_ORG | Default organization ID (org_…). Individual tools can override it. |
--org takes the organization's ID, not its name. Find it with
tripwire orgs list, or leave it out and ask the assistant to list your organizations first.
Configure your client
Claude Desktop / generic MCP host config:
{
"mcpServers": {
"tripwire": {
"command": "tripwire-mcp",
"env": {
"TRIPWIRE_ENDPOINT": "https://api.gettripwires.com",
"TRIPWIRE_API_KEY": "tw_your_api_key",
"TRIPWIRE_ORG": "org_your_organization_id"
}
}
}
}
Claude Code:
claude mcp add tripwire -- tripwire-mcp \
--endpoint https://api.gettripwires.com \
--api-key tw_your_api_key \
--org org_your_organization_id
A stdio MCP server does not inherit your shell
Exporting TRIPWIRE_API_KEY in .bashrc is not enough on its own — the value has
to be in the env block or on the command line. Claude Code expands ${VAR} inside its
config, which lets you keep the key out of the file:
"env": { "TRIPWIRE_API_KEY": "${TRIPWIRE_API_KEY}" }
Self-hosted installations point the endpoint at your control server, e.g.
https://tripwire.internal.example.com.
Tools
Every tool takes an optional org_id, so one session can work across
several of your organizations without restarting the server.
| Tool | Action |
|---|---|
list_orgs | The organizations you belong to, and your role in each |
list_org_members | Members of one of your organizations, with roles and namespace grants |
whoami | The identity behind the configured credential |
create_tripwire | Create a decoy: name, technology, optional namespace, tags and lease |
list_tripwires | List your tripwires, with search, technology/status/tag filters, sort and paging |
get_tripwire | One tripwire in full, including its trigger artifact |
update_tripwire | Change name, destination, namespace, tags or expiry |
renew_tripwire | Extend the lease by a duration (e.g. 720h) |
reset_tripwire | Re-baseline the trip count; optionally purge the detection records |
delete_tripwire | Delete a tripwire and its detections |
list_detections | Detections recorded against one tripwire: source IP, time, captured context |
analytics | Summary of activity across your estate (self-hosted installations) |
Security
- The key is you. Store it in your client's secret store, never in shared config, and scope it to the minimum the assistant needs.
- Destructive tools —
delete_tripwire, andreset_tripwirewithpurge— permanently remove evidence. Review the model's proposed calls before approving them, or withholdtripwire:deleteentirely. - Nothing here is installation-wide: administering the platform is a separate surface, deliberately not exposed through MCP.
- Revoke a key at any time under Settings → API Keys; the server has no other way in.
See also: the developer CLI.