Query PostgreSQL databases in plain English β LLM-generated, safety-validated SQL.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Ask your database questions in plain English. PlainQuery connects PostgreSQL databases to Claude, Cursor, or VS Code β and answers with real, structured data instead of guesses.
You connect a database once. Then, from any MCP client, you ask questions like:
"How many orders did we ship in March?" "Which 5 customers spent the most last year?" "What's the average order value by month?"
PlainQuery introspects your schema, generates SQL with an LLM, validates it for safety, runs it, and returns structured JSON. If a query fails, it reads the error and retries automatically.
INSERT/UPDATE/DELETE/DDL) are blocked, dangerous functions and patterns are scanned out, and a LIMIT is injected automatically.
https://plainquery.in and verify your email.That's it β start asking questions.
See Self-hosting & local development below.
PlainQuery is published on the official MCP Registry as io.github.Jarvis-27/mcp-db-agent, so registry-aware clients can discover it directly.
To configure a client manually, point it at the MCP endpoint and pass your API key:
The backend can also generate ready-to-paste config for VS Code, Cursor, and generic HTTP clients β call POST /api/v1/account/setup-payloads (see Setup payloads). MCP clients can authenticate with an OAuth 2.1 bearer token or an API key, depending on MCP_AUTH_MODE.
uvpnpm for the frontendANTHROPIC_API_KEY or GROQ_API_KEY)Edit .env with at least:
CREDENTIAL_ENCRYPTION_KEYSREGISTRATION_OPEN=trueLLM_PROVIDERRun the backend:
The backend mounts:
http://localhost:8000/apihttp://localhost:8000/mcpOpen http://localhost:3000, sign up, complete setup, link your OAuth identity via account settings, then connect an MCP client at http://localhost:8000/mcp. The client will complete the OAuth flow automatically, or you can use an API key in api_key_only / hybrid mode.
src.app:appfrontend/oauth_only), API keys (api_key_only), or both (hybrid) β set via MCP_AUTH_MODEPOST /api/v1/account/setup-payloadsThe product model is single-account and user-scoped:
signup β verify email β connect database β link OAuth identity β use /mcp β upgrade with Stripe
LIMIT injection.| Variable | Description |
|---|---|
AUTH_DATABASE_URL | Auth/account database used by the hosted product |
CREDENTIAL_ENCRYPTION_KEYS | Encrypts stored database URLs and other secrets |
REGISTRATION_OPEN | Enables or disables public signup |
ANTHROPIC_API_KEY / GROQ_API_KEY | LLM credentials for SQL generation |
LLM_PROVIDER | Active provider name |
APP_BASE_URL | Base URL used in setup payloads |
FRONTEND_BASE_URL | Base URL used in email links |
STRIPE_SECRET_KEY / STRIPE_WEBHOOK_SECRET | Stripe API and webhook credentials |
STRIPE_PRO_PRICE_ID | Stripe Price ID that maps to the Pro plan |
STRIPE_CHECKOUT_SUCCESS_URL / STRIPE_CHECKOUT_CANCEL_URL | Optional Checkout redirect overrides |
STRIPE_CUSTOMER_PORTAL_RETURN_URL | Optional Customer Portal return URL override |
See .env.example for the current full set.
POST /api/v1/auth/signupGET /api/v1/auth/verify-emailPOST /api/v1/auth/request-login-linkGET /api/v1/auth/exchange-login-linkPOST /api/v1/auth/logoutAll account routes use session token auth (x-session-token: <session-token> or Authorization: Bearer <session-token>):
GET /api/v1/accountGET /api/v1/account/statusPUT /api/v1/account/databaseGET /api/v1/account/api-keysPOST /api/v1/account/api-keysDELETE /api/v1/account/api-keys/{id}POST /api/v1/account/api-keys/{id}/rotatePOST /api/v1/account/setup-payloadsGET /api/v1/account/dashboardGET /api/v1/account/usage/recentGET /api/v1/account/billingPOST /api/v1/account/billing/checkout-sessionPOST /api/v1/account/billing/portal-sessionPOST /api/v1/billing/webhookStripe webhooks are the source of truth for plan transitions. Checkout or
subscription activation moves a user to plan_code=pro; canceled, unpaid, or
past-due states restrict paid entitlements without deleting database setup.
GET /api/v1/account/mcp-oauth/statusPOST /api/v1/account/mcp-oauth/startGET /api/v1/account/mcp-oauth/callbackDELETE /api/v1/account/mcp-oauth/linkPOST /mcpMCP_AUTH_MODEPOST /api/v1/account/setup-payloads returns client configuration material for VS Code, Cursor, generic HTTP MCP clients, and the current ChatGPT placeholder.
The backend never stores raw API keys after creation. A raw key is only embedded in setup payloads when you explicitly send it in the request.
After each hosted deploy, verify the public MCP OAuth discovery surface:
The smoke test checks the unauthenticated /mcp challenge, protected resource
metadata, ChatGPT/Claude well-known discovery routes, and issuer metadata. To
also verify authenticated MCP initialize, tools/list, and resources/list,
pass a linked user's access token with --access-token or
MCP_SMOKE_ACCESS_TOKEN.
Run the hosted HTTP stack:
The container image serves only the hosted HTTP runtime. The MCP endpoint remains http://localhost:8000/mcp.
MIT Β© 2026 PlainQuery
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/mcp-db-agent)<a href="https://allmcps.com/mcp/mcp-db-agent"><img src="https://allmcps.com/api/badge/mcp-db-agent?style=directory" alt="MCP DB Agent on AllMCPs" /></a>