Attest — prove what your AI agent actually did. Decide · Gate · Verify · Attest.
Setup
Choose your client, copy the config, then fill in any required environment variables.
claude mcp add attest --env GMAIL_TOKEN='<GMAIL_TOKEN>' --env GOOGLE_TOKEN='<GOOGLE_TOKEN>' --env SLACK_BOT_TOKEN='<SLACK_BOT_TOKEN>' --env HUBSPOT_TOKEN='<HUBSPOT_TOKEN>' --env NOTION_TOKEN='<NOTION_TOKEN>' --env LINEAR_API_KEY='<LINEAR_API_KEY>' --env GRAPH_TOKEN='<GRAPH_TOKEN>' -- uvx attestlayer~/.codex/config.toml
[mcp_servers.attest]
command = "uvx"
args = ["attestlayer"]
env = { 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>" }
# codex mcp add attest --env GMAIL_TOKEN='<GMAIL_TOKEN>' --env GOOGLE_TOKEN='<GOOGLE_TOKEN>' --env SLACK_BOT_TOKEN='<SLACK_BOT_TOKEN>' --env HUBSPOT_TOKEN='<HUBSPOT_TOKEN>' --env NOTION_TOKEN='<NOTION_TOKEN>' --env LINEAR_API_KEY='<LINEAR_API_KEY>' --env GRAPH_TOKEN='<GRAPH_TOKEN>' -- uvx attestlayer~/.cursor/mcp.json
{
"mcpServers": {
"attest": {
"command": "uvx",
"args": [
"attestlayer"
],
"env": {
"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>"
}
}
}
}.vscode/mcp.json
{
"servers": {
"attest": {
"type": "stdio",
"command": "uvx",
"args": [
"attestlayer"
],
"env": {
"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>"
}
}
}
}~/.gemini/settings.json
{
"mcpServers": {
"attest": {
"command": "uvx",
"args": [
"attestlayer"
],
"env": {
"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>"
}
}
}
}claude_desktop_config.json
{
"mcpServers": {
"attest": {
"command": "uvx",
"args": [
"attestlayer"
],
"env": {
"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>"
}
}
}
}.trae/mcp.json
{
"mcpServers": {
"attest": {
"command": "uvx",
"args": [
"attestlayer"
],
"env": {
"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>"
}
}
}
}Environment variables
GMAIL_TOKENGOOGLE_TOKENSLACK_BOT_TOKENHUBSPOT_TOKENNOTION_TOKENLINEAR_API_KEYGRAPH_TOKEN
Replace the placeholders with your own credentials and keep them out of version control.