Decide by policy, gate behind a human, verify by read-back, record a hash-chained ledger.
Connect Runs on your machine
claude mcp add attest -e ATTEST_POLICY=<ATTEST_POLICY> -e ATTEST_LEDGER=<ATTEST_LEDGER> -e ATTEST_AUTO_APPROVE=<ATTEST_AUTO_APPROVE> -e ATTEST_CONFIRM_TIMEOUT=<ATTEST_CONFIRM_TIMEOUT> -e GMAIL_TOKEN=<GMAIL_TOKEN> -e GOOGLE_TOKEN=<GOOGLE_TOKEN> -e SLACK_BOT_TOKEN=<SLACK_BOT_TOKEN> -e HUBSPOT_TOKEN=<HUBSPOT_TOKEN> -e NOTION_TOKEN=<NOTION_TOKEN> -e LINEAR_API_KEY=<LINEAR_API_KEY> -e GRAPH_TOKEN=<GRAPH_TOKEN> -- uvx attestlayer==0.1.0
{
"mcpServers": {
"attest": {
"command": "uvx",
"args": [
"attestlayer==0.1.0"
],
"env": {
"ATTEST_POLICY": "<ATTEST_POLICY>",
"ATTEST_LEDGER": "<ATTEST_LEDGER>",
"ATTEST_AUTO_APPROVE": "<ATTEST_AUTO_APPROVE>",
"ATTEST_CONFIRM_TIMEOUT": "<ATTEST_CONFIRM_TIMEOUT>",
"GMAIL_TOKEN": "<GMAIL_TOKEN>",
"GOOGLE_TOKEN": "<GOOGLE_TOKEN>",
"SLACK_BOT_TOKEN": "<SLACK_BOT_TOKEN>",
"HUBSPOT_TOKEN": "<HUBSPOT_TOKEN>",
"NOTION_TOKEN": "<NOTION_TOKEN>",
"LINEAR_API_KEY": "<LINEAR_API_KEY>",
"GRAPH_TOKEN": "<GRAPH_TOKEN>"
}
}
}
}
{
"mcpServers": {
"attest": {
"command": "uvx",
"args": [
"attestlayer==0.1.0"
],
"env": {
"ATTEST_POLICY": "<ATTEST_POLICY>",
"ATTEST_LEDGER": "<ATTEST_LEDGER>",
"ATTEST_AUTO_APPROVE": "<ATTEST_AUTO_APPROVE>",
"ATTEST_CONFIRM_TIMEOUT": "<ATTEST_CONFIRM_TIMEOUT>",
"GMAIL_TOKEN": "<GMAIL_TOKEN>",
"GOOGLE_TOKEN": "<GOOGLE_TOKEN>",
"SLACK_BOT_TOKEN": "<SLACK_BOT_TOKEN>",
"HUBSPOT_TOKEN": "<HUBSPOT_TOKEN>",
"NOTION_TOKEN": "<NOTION_TOKEN>",
"LINEAR_API_KEY": "<LINEAR_API_KEY>",
"GRAPH_TOKEN": "<GRAPH_TOKEN>"
}
}
}
}
{
"servers": {
"attest": {
"type": "stdio",
"command": "uvx",
"args": [
"attestlayer==0.1.0"
],
"env": {
"ATTEST_POLICY": "<ATTEST_POLICY>",
"ATTEST_LEDGER": "<ATTEST_LEDGER>",
"ATTEST_AUTO_APPROVE": "<ATTEST_AUTO_APPROVE>",
"ATTEST_CONFIRM_TIMEOUT": "<ATTEST_CONFIRM_TIMEOUT>",
"GMAIL_TOKEN": "<GMAIL_TOKEN>",
"GOOGLE_TOKEN": "<GOOGLE_TOKEN>",
"SLACK_BOT_TOKEN": "<SLACK_BOT_TOKEN>",
"HUBSPOT_TOKEN": "<HUBSPOT_TOKEN>",
"NOTION_TOKEN": "<NOTION_TOKEN>",
"LINEAR_API_KEY": "<LINEAR_API_KEY>",
"GRAPH_TOKEN": "<GRAPH_TOKEN>"
}
}
}
}
Replace the values in angle brackets with your own. Keys stay on your machine; we never see them.
Tools
This server runs locally, so its tools are listed by your MCP client once it starts.
Environment variables
| Name | Description |
|---|---|
ATTEST_POLICYOptional | Path to a policy YAML (defaults to ./attest.yaml or the built-in default) |
ATTEST_LEDGEROptional | Ledger SQLite path (default .attest/ledger.sqlite) |
ATTEST_AUTO_APPROVEOptional | Set to 1 to approve every confirm request (development only) |
ATTEST_CONFIRM_TIMEOUTOptional | Seconds attest_confirm waits for a human (default 900) |
GMAIL_TOKENOptional, secret | Google OAuth access token with gmail.readonly — enables Gmail read-back |
GOOGLE_TOKENOptional, secret | Google OAuth access token — enables Calendar / Drive / Docs / Sheets read-back |
SLACK_BOT_TOKENOptional, secret | Slack bot token (xoxb-…) with channels:history, channels:read — enables Slack read-back |
HUBSPOT_TOKENOptional, secret | HubSpot private-app token — enables HubSpot read-back |
NOTION_TOKENOptional, secret | Notion integration token — enables Notion read-back |
LINEAR_API_KEYOptional, secret | Linear API key — enables Linear read-back |
GRAPH_TOKENOptional, secret | Microsoft Graph token — enables Outlook / Teams read-back |
Details
| Package | [email protected] (PYPI, stdio) |
| First published | 19 Sep 2026 |
| Last updated | 19 Sep 2026 |
| Registry name | io.github.dev-prathap/attest |
More other servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
