# Attest proxy MCP server

> Provides a zero-code proxy for MCP servers that implements policy enforcement, human-in-the-loop gating, and tamper-evident verification ledgers.

- Repository: https://github.com/dev-prathap/ATTEST
- Page: https://hostedmcp.org/servers/dev-prathap/attest-proxy
- Transport: stdio
- Stars: 1
- License: MIT
- Latest version: 0.1.0

## Install

### Claude Code

```sh
claude mcp add --env 'SLACK_BOT_TOKEN=<YOUR_SLACK_BOT_TOKEN>' attest-proxy -- uvx attestlayer
```

### Cursor (`~/.cursor/mcp.json`)

```json
{
  "mcpServers": {
    "attest-proxy": {
      "command": "uvx",
      "args": [
        "attestlayer"
      ],
      "env": {
        "SLACK_BOT_TOKEN": "<YOUR_SLACK_BOT_TOKEN>"
      }
    }
  }
}
```

### VS Code (`.vscode/mcp.json`)

```json
{
  "servers": {
    "attest-proxy": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "attestlayer"
      ],
      "env": {
        "SLACK_BOT_TOKEN": "<YOUR_SLACK_BOT_TOKEN>"
      }
    }
  }
}
```

### VS Code CLI

```sh
code --add-mcp '{"name":"attest-proxy","type":"stdio","command":"uvx","args":["attestlayer"],"env":{"SLACK_BOT_TOKEN":"<YOUR_SLACK_BOT_TOKEN>"}}'
```

### Claude Desktop (`claude_desktop_config.json`)

```json
{
  "mcpServers": {
    "attest-proxy": {
      "command": "uvx",
      "args": [
        "attestlayer"
      ],
      "env": {
        "SLACK_BOT_TOKEN": "<YOUR_SLACK_BOT_TOKEN>"
      }
    }
  }
}
```

### Codex

```sh
codex mcp add attest-proxy --env 'SLACK_BOT_TOKEN=<YOUR_SLACK_BOT_TOKEN>' -- uvx attestlayer
```

### Codex config.toml (`~/.codex/config.toml`)

```toml
[mcp_servers.attest-proxy]
command = "uvx"
args = ["attestlayer"]

[mcp_servers.attest-proxy.env]
SLACK_BOT_TOKEN = "<YOUR_SLACK_BOT_TOKEN>"
```

### Gemini CLI

```sh
gemini mcp add -s user -e 'SLACK_BOT_TOKEN=<YOUR_SLACK_BOT_TOKEN>' attest-proxy uvx -- attestlayer
```

### Gemini settings.json (`~/.gemini/settings.json`)

```json
{
  "mcpServers": {
    "attest-proxy": {
      "command": "uvx",
      "args": [
        "attestlayer"
      ],
      "env": {
        "SLACK_BOT_TOKEN": "<YOUR_SLACK_BOT_TOKEN>"
      }
    }
  }
}
```

## Environment variables

| Name | Required | Secret | Description |
|---|---|---|---|
| `SLACK_BOT_TOKEN` | no | yes | Slack bot token for confirm cards |
| `ATTEST_AUTO_APPROVE` | no | no |  |
| `ATTEST_INBOX_URL` | no | no | URL of the confirm inbox (attest serve) linked from Slack cards |
| `ATTEST_LEDGER` | no | no | Ledger SQLite path (default .attest/ledger.sqlite) |
| `ATTEST_POLICY` | no | no | Path to a policy YAML |
| `ATTEST_SLACK_CHANNEL` | no | no | Slack channel for confirm cards |

## FAQ

### Does Attest execute actions for my agent?

No, Attest never executes the action itself; your own tool or agent performs the execution while Attest manages the decision, gating, and verification.

### How does Attest verify that an action actually happened?

It uses a read-back mechanism from the system of record to check if the fields in the system match the intended action.

### What are the different verification levels?

Verification levels include verified (read back and matched), verified-custom (custom check passed), acknowledged (action accepted but no read-back possible), attested-only (recorded without verifier), and unverified (check contradicted the claim).
