Skip to main content
ClaudeWave

Deterministic MCP server that vets Postgres SQL (ok/warn/block) before your AI agent runs it. Hosted at vetosql.com — never connects to your DB.

MCP ServersOfficial Registry0 stars0 forksUpdated today
Install in Claude Code / Claude Desktop
Method: Manual
Claude Code CLI
git clone https://github.com/metaweardigital/veto-mcp
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "veto-mcp": {
      "command": "node",
      "args": ["/path/to/veto-mcp/dist/index.js"]
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
💡 Clone https://github.com/metaweardigital/veto-mcp and follow its README for install instructions.
Use cases

MCP Servers overview

# Veto — SQL Safety & Cost Oracle (MCP)

> **Veto is a deterministic MCP server that vets Postgres SQL for safety, correctness, and cost *before* an AI coding agent runs it.** It returns an `ok` / `warn` / `block` verdict on every statement — no LLM in the core, and it never connects to your database.

**Website:** https://vetosql.com · **MCP endpoint:** `https://vetosql.com/mcp` (remote, streamable-http)

AI coding agents (Claude Code, Cursor, …) write and execute SQL. Occasionally they write `DELETE FROM payments` with no `WHERE`, or a `DROP TABLE` during a migration. More prompting doesn't fix a probabilistic system — a deterministic gate does. Veto is that gate: given the same statement, it returns the same verdict, every time, with stable finding ids you can audit and gate CI on.

---

## What it catches

| Verdict | Meaning | What falls here |
|---|---|---|
| `block` | Destructive / data loss | Unscoped `DELETE`/`UPDATE`, `TRUNCATE`, dropping data-bearing objects — including destructive statements hidden inside CTEs |
| `warn` | Risky but recoverable | Lock-heavy schema changes, expensive scans, correctness traps that silently return wrong rows (`= NULL`, `NOT IN (subquery)`, a LEFT JOIN filtered into an inner join), common anti-patterns like `SELECT *` |
| `ok` | Safe to run | Routine, reversible migrations |

Every finding carries a stable dotted id (e.g. `destructive.delete_without_where`) so your pipeline can branch on it. The exact rule set lives server-side and evolves over time.

## Why deterministic

- **Reproducible** — same input, same verdict. Testable, so trustable.
- **Auditable** — a *named rule* fired, not "the model felt it was risky."
- **No drift** — can't be talked out of a `block` by a clever prompt; doesn't get worse on a bad day.
- **Never touches your DB** — cost is measured with a real `EXPLAIN` on a throwaway scratch Postgres inside a transaction that is **always rolled back**. Your production database is never connected.

## Tools

### `analyze_sql`
Returns a deterministic safety + cost verdict for Postgres SQL / migrations.

| Input | Type | Notes |
|---|---|---|
| `sql` | string | The SQL / migration to analyze — one or more statements (required) |
| `schema` | string? | Optional `CREATE TABLE/INDEX` DDL — enables `EXPLAIN`-based cost analysis on scratch Postgres |
| `rowCountHints` | object? | Optional map of table name → estimated row count, for realistic cost estimates |

Returns `{ verdict, findings[], plan?, meta }` where `verdict` ∈ `ok | warn | block`.

### `set_policies` *(Pro)*
Stores custom org policies keyed to your Pro key; `analyze_sql` then enforces them on top of the built-in rules. Policies are **declarative data — validated and never executed** (max 50, replaces the previously stored set).

Each policy: `table` (exact name or glob, e.g. `payments`, `audit_*`, `*`), `operations` (any of `select`/`insert`/`update`/`delete`/`truncate`/`drop`/`alter`), `action` (`block`/`warn`), optional `message`.

```json
{
  "policies": [
    { "table": "payments", "operations": ["delete", "truncate"], "action": "block",
      "message": "Never delete from payments — use the refund flow." }
  ]
}
```

Sending the full set **updates** it; sending an empty array **clears** it.

### `get_policies` *(Pro)*
Returns the custom org policy set currently stored for your key — the same rules `analyze_sql` enforces on top of the built-ins. Read-only; returns an empty list if none are set.

---

## Setup

Veto is a **remote** MCP server — no install, no source needed. Point your client at the endpoint.

### Claude Code — `.mcp.json`
```json
{
  "mcpServers": {
    "veto": {
      "type": "http",
      "url": "https://vetosql.com/mcp"
    }
  }
}
```

### Cursor — `~/.cursor/mcp.json`
```json
{
  "mcpServers": {
    "veto": {
      "url": "https://vetosql.com/mcp"
    }
  }
}
```

The free tier needs no key (60 req/min). **Pro:** add your `VETO-…` key as a bearer token (keep the word `Bearer` and the space):
```json
"headers": { "Authorization": "Bearer VETO-…" }
```

---

## Pricing

| Tier | Price | Limits | Extras |
|---|---|---|---|
| **Free** | €0 | 60 req/min | Full deterministic verdict — all destructive, locking, correctness & cost rules |
| **Pro** | €9.90 / mo | 1200 req/min | Custom org policies (`set_policies`), maintainer support |

Subscribe at [vetosql.com](https://vetosql.com).

---

## FAQ

**What databases does Veto support?**
PostgreSQL. Works with any Postgres host (Supabase, Neon, RDS, self-hosted) and any migration tool, because Veto analyzes the SQL text — it doesn't connect to your database.

**Is it safe? Can it see or modify my data?**
No. Veto never connects to your production database. Cost analysis runs inside a transaction that is always rolled back, against a separate scratch Postgres — no data is read or written.

**How is Veto different from a linter like Squawk or sqlfluff?**
Those are CI/style tools. Veto is a real-time *runtime gate* an AI agent calls over MCP, returning an `ok`/`warn`/`block` verdict on the exact statement it's about to execute — plus cost estimation and custom org policies.

**Why not just give the agent a read-only or restricted DB role?**
Roles are coarse and easy to misconfigure, and they don't catch a costly sequential scan or a full-table `UPDATE` inside a write-allowed role. Veto adds a statement-level verdict on top of whatever roles you use.

**Does it use an LLM?**
No. The core is deterministic static analysis + `EXPLAIN`. The calling agent narrates the structured verdict; the verdict itself never comes from a model.

---

## Links

- **Website:** [vetosql.com](https://vetosql.com)
- **Blog:** [An AI agent wiped a production database. The fix isn't a better prompt.](https://vetosql.com/blog/ai-agent-deleted-production-database/)
- **MCP endpoint:** `https://vetosql.com/mcp`
- **Official MCP registry:** `com.vetosql/veto`
- **Glama:** [glama.ai/mcp/connectors/com.vetosql/veto](https://glama.ai/mcp/connectors/com.vetosql/veto)

---

Built by [Metawear](https://www.metawear.cz). The hosted service runs at [vetosql.com](https://vetosql.com); this repository is the public documentation and MCP registry manifest for the Veto server.
ai-agentsclaudecursordatabasedatabase-safetymcppostgressql

What people ask about veto-mcp

What is metaweardigital/veto-mcp?

+

metaweardigital/veto-mcp is mcp servers for the Claude AI ecosystem. Deterministic MCP server that vets Postgres SQL (ok/warn/block) before your AI agent runs it. Hosted at vetosql.com — never connects to your DB. It has 0 GitHub stars and was last updated today.

How do I install veto-mcp?

+

You can install veto-mcp by cloning the repository (https://github.com/metaweardigital/veto-mcp) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.

Is metaweardigital/veto-mcp safe to use?

+

metaweardigital/veto-mcp has not been audited yet by our security agent. Review the original repository on GitHub before using it in production.

Who maintains metaweardigital/veto-mcp?

+

metaweardigital/veto-mcp is maintained by metaweardigital. The last recorded GitHub activity is from today, with 0 open issues.

Are there alternatives to veto-mcp?

+

Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.

Deploy veto-mcp to your cloud

Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.

Maintain this repo? Add a badge to your README

Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.

Featured on ClaudeWave: metaweardigital/veto-mcp
[![Featured on ClaudeWave](https://claudewave.com/api/badge/metaweardigital-veto-mcp)](https://claudewave.com/repo/metaweardigital-veto-mcp)
<a href="https://claudewave.com/repo/metaweardigital-veto-mcp"><img src="https://claudewave.com/api/badge/metaweardigital-veto-mcp" alt="Featured on ClaudeWave: metaweardigital/veto-mcp" width="320" height="64" /></a>

More MCP Servers

veto-mcp alternatives