Safe SQL gateway for AI agents: SELECT-only validation, access policies, masking, audit trail, evals
Connect Runs on your machine
claude mcp add querypilot -e QUERYPILOT_DATABASE_URL=<QUERYPILOT_DATABASE_URL> -e QUERYPILOT_DIALECT=<QUERYPILOT_DIALECT> -e QUERYPILOT_MAX_ROWS=<QUERYPILOT_MAX_ROWS> -e QUERYPILOT_TIMEOUT_SECONDS=<QUERYPILOT_TIMEOUT_SECONDS> -e QUERYPILOT_ACCESS_POLICY_JSON=<QUERYPILOT_ACCESS_POLICY_JSON> -e QUERYPILOT_MCP_TRANSPORT=<QUERYPILOT_MCP_TRANSPORT> -- uvx querypilot==0.1.1
{
"mcpServers": {
"querypilot": {
"command": "uvx",
"args": [
"querypilot==0.1.1"
],
"env": {
"QUERYPILOT_DATABASE_URL": "<QUERYPILOT_DATABASE_URL>",
"QUERYPILOT_DIALECT": "<QUERYPILOT_DIALECT>",
"QUERYPILOT_MAX_ROWS": "<QUERYPILOT_MAX_ROWS>",
"QUERYPILOT_TIMEOUT_SECONDS": "<QUERYPILOT_TIMEOUT_SECONDS>",
"QUERYPILOT_ACCESS_POLICY_JSON": "<QUERYPILOT_ACCESS_POLICY_JSON>",
"QUERYPILOT_MCP_TRANSPORT": "<QUERYPILOT_MCP_TRANSPORT>"
}
}
}
}
{
"mcpServers": {
"querypilot": {
"command": "uvx",
"args": [
"querypilot==0.1.1"
],
"env": {
"QUERYPILOT_DATABASE_URL": "<QUERYPILOT_DATABASE_URL>",
"QUERYPILOT_DIALECT": "<QUERYPILOT_DIALECT>",
"QUERYPILOT_MAX_ROWS": "<QUERYPILOT_MAX_ROWS>",
"QUERYPILOT_TIMEOUT_SECONDS": "<QUERYPILOT_TIMEOUT_SECONDS>",
"QUERYPILOT_ACCESS_POLICY_JSON": "<QUERYPILOT_ACCESS_POLICY_JSON>",
"QUERYPILOT_MCP_TRANSPORT": "<QUERYPILOT_MCP_TRANSPORT>"
}
}
}
}
{
"servers": {
"querypilot": {
"type": "stdio",
"command": "uvx",
"args": [
"querypilot==0.1.1"
],
"env": {
"QUERYPILOT_DATABASE_URL": "<QUERYPILOT_DATABASE_URL>",
"QUERYPILOT_DIALECT": "<QUERYPILOT_DIALECT>",
"QUERYPILOT_MAX_ROWS": "<QUERYPILOT_MAX_ROWS>",
"QUERYPILOT_TIMEOUT_SECONDS": "<QUERYPILOT_TIMEOUT_SECONDS>",
"QUERYPILOT_ACCESS_POLICY_JSON": "<QUERYPILOT_ACCESS_POLICY_JSON>",
"QUERYPILOT_MCP_TRANSPORT": "<QUERYPILOT_MCP_TRANSPORT>"
}
}
}
}
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 |
|---|---|
QUERYPILOT_DATABASE_URLRequired, secret | SQLAlchemy-style database connection URL, e.g. sqlite:///demo.db or postgresql://user:pass@host:5432/db. Equivalent to --database-url. |
QUERYPILOT_DIALECTOptional | SQL dialect for the connector. Equivalent to --dialect. |
QUERYPILOT_MAX_ROWSOptional | Maximum rows returned per query. Equivalent to --max-rows. |
QUERYPILOT_TIMEOUT_SECONDSOptional | Query execution timeout in seconds. Equivalent to --timeout-seconds. |
QUERYPILOT_ACCESS_POLICY_JSONOptional | JSON-encoded AccessPolicy (blocked_columns, allowed_columns, row_filters, masking_rules) enforced before execution. Equivalent to --access-policy-json. |
QUERYPILOT_MCP_TRANSPORTOptional | MCP transport used by `querypilot mcp`. Equivalent to --transport. Most MCP clients should leave this at stdio; streamable-http is for clients that speak Streamable HTTP directly. |
Details
| Package | [email protected] (PYPI, stdio) |
| First published | 11 Jul 2026 |
| Last updated | 11 Jul 2026 |
| Registry name | io.github.nickklos10/querypilot |
More databases servers See all
Listing data from the official MCP registry. Status and tools from NestDaddy's daily check. Browse all MCP servers.
