About writ
writ is an MCP server for applying write policies to AI agents before consequential actions. It returns ALLOW, DENY, or STEP_UP decisions and records each outcome in an audit trail.
Key features
- 01Pre-write policy decisions
- 02Short-lived, write-bound authorization tokens
- 03Token verification at execution
- 04Sponsor approval and revocation tools
- 05Decision receipts and policy lookup
- 06Sandbox demo without a key
Use cases
- 01Gate an agent's consequential writes
- 02Require sponsor approval for escalated actions
- 03Verify authorization immediately before execution
MCP support
Exposes policy checks, token verification, sponsor controls, audit receipts, policy lookup, and a sandbox tool to MCP clients.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
uvx writ-mcpWRIT_API_KEYSecretWrit API key (get one free at https://withwrit.com)WRIT_SPONSOR_TOKENSecretWrit sponsor token, only required for sponsor tools (grant, revoke, reinstate)WRIT_BASE_URLOptional custom Writ API base URL (default: https://api.withwrit.com)Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEwrit-mcp
The Writ gate as an MCP server. Give any MCP-compatible
agent point-of-action control: the agent calls Writ before a consequential
write, gets back ALLOW, DENY, or STEP_UP, and every outcome creates an
audit receipt.
Install
pip install writ-mcp
Requires Python 3.9+. Installs the writ-mcp command (stdio transport).
Configure
export WRIT_API_KEY="writ_..." # required; get one free: POST /v1/keys with an email
export WRIT_SPONSOR_TOKEN="..." # only for sponsor tools (grant, revoke, reinstate)
# export WRIT_BASE_URL="..." # default: https://api.withwrit.com
Add to your agent
Claude Code:
claude mcp add writ --env WRIT_API_KEY="$WRIT_API_KEY" -- writ-mcp
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"writ": {
"command": "writ-mcp",
"env": { "WRIT_API_KEY": "writ_..." }
}
}
}
Any MCP client (generic stdio config):
{
"command": "writ-mcp",
"env": {
"WRIT_API_KEY": "writ_...",
"WRIT_SPONSOR_TOKEN": "writ_sp_..."
}
}
Hermes (NousResearch/hermes-agent) catalog entry — once published, this
package is installable from the optional-mcps catalog:
hermes mcp install writ
The check-before-write loop
The tool descriptions teach the agent this flow, but the short version:
writ_check(sponsor_id, agent_id, verb, target, purpose)— before the write.ALLOW→ you get a 90-secondauthTokenbound to that exact write.writ_verify_token(auth_token, verb, target, purpose)— immediately before executing, to prove the authorization still matches what you're doing.DENY→ do not proceed.STEP_UP→ a human sponsor approves (viawrit_grantor the dashboard), then check again.
Tools
| Tool | Who | What |
|---|---|---|
writ_check | agent | Decision + 90s purpose-bound token |
writ_verify_token | agent | Point-of-action token verification |
writ_grant | sponsor | Approve a STEP_UP (one-time grant) |
writ_revoke / writ_reinstate | sponsor | Kill switch on/off for a principal |
writ_receipts | agent | Audit trail of decisions |
writ_policy | agent | Tenant verb policy |
writ_sandbox | anyone | Free 90-second demo grant, no key needed |
Try it with no key: writ_sandbox → writ_check with verb="demo_write".
Source
Public repo: withwrit/pywrit (mcp/
directory). License: MIT.
Directory listings: Smithery ·
Glama · MCP Registry
io.github.withwrit/writ.
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.