# Neon MCP connector

The Neon connector brings your Postgres projects, branches, tables and queries to Claude, ChatGPT, Cursor and any MCP client, so your team can query live data, plan migrations and tune slow queries with their own Neon access.

Source: https://elaichi.ai/connectors/neon/

## Facts

| | |
| --- | --- |
| Application | Neon |
| Category | Database |
| AI tools | 114 |
| Authentication | Connects over OAuth |
| Bring your own OAuth app | No |
| Native MCP | Yes. Neon builds and runs this MCP server. Elaichi adds sign-in, access controls and an audit log on top |
| Support for its tools | neon.com/docs/introduction/support |
| MCP endpoint | https://api.elaichi.ai/mcp |
| Works with | Claude, ChatGPT, Cursor, any MCP client, and the Elaichi Agent |
| Tools advertised by name | No. Connected tools are never listed one by one, however few there are. The endpoint advertises `search_tools` and `execute_tool` instead |

## What you can ask once Neon is connected

- List the slow queries in the production project this week.
- Describe the schema of the orders table on the main branch.
- Prepare a migration that adds an index to the users table.

## Connect Neon in Elaichi

This happens once for the organization, before any client is involved.

1. Open Connections, choose Add connection, and pick Neon.
2. Optionally set Share with, then press Connect.
3. Approve it in Neon. Neon's own window opens. Whoever approves it decides what this connection can reach.

Credentials are vaulted and nobody, including the AI, reads them back. The connection becomes a toolbox immediately, so you can curate which Neon tools are exposed, rename them, or freeze arguments before anyone points a client at it.

## Neon MCP connector for Claude

Endpoint: https://api.elaichi.ai/mcp

1. Open Customize, then Connectors.
2. Press Add.
3. Name it, paste the MCP server URL, then Continue.
4. Sign in and approve.

On Team and Enterprise, an Owner adds it once. Everyone else turns it on for themselves.

## Neon MCP connector for ChatGPT

Endpoint: https://api.elaichi.ai/mcp

1. Open Plugins, then press the + button.
2. Name it and paste the endpoint into Server URL.
3. Leave Authentication on OAuth, then tick the risk acknowledgement.
4. Press Create, then sign in and approve.

Works on the web today. The plugin directory lives at chatgpt.com/plugins.

## Neon MCP connector for Cursor

Endpoint: https://api.elaichi.ai/mcp

1. Open `~/.cursor/mcp.json`.
2. Add the endpoint under `mcpServers`.
3. Reload Cursor, then sign in and approve.

Set up per machine, so repeat it on each computer you work from.

## Connect Neon to any MCP client

Endpoint: https://api.elaichi.ai/mcp

1. Add the endpoint as a remote MCP server.
2. Sign in and approve.

The Elaichi Agent already has these tools, with nothing to set up.

## What the consent screen decides

Only Read is granted by default, which is not enough to call a Neon tool. Over MCP there is no trusted place to confirm a write in the moment, so the consent screen is the standing approval rather than a formality. Grant Read and Run tools. Think hard before granting Delete, which reaches into connected apps and cannot be undone.

## What teams do with Neon through Elaichi

### Plan a migration before touching production

Engineering. Ask for the schema of the orders table, have the agent prepare the migration on a branch, review the change, then complete it once you are satisfied.

### Answer a question straight from the tables

Data. Type the question in plain words, let the agent run the query against the right branch, and get the numbers back without opening a SQL editor.

### Find the queries slowing a project down

Platform. Pull the list of slow queries for a project, ask the agent to explain the worst one, and walk through query tuning before it reaches customers.

### Look up a customer's record during a ticket

Support. Run a read against the production branch to confirm what the account actually holds, instead of waiting for an engineer to check.

### Set up a project for a new experiment

Product. Create a Neon project, describe its branches, and hand the connection string to the team building the feature, all from one conversation.

### Check what a table really contains

Analytics. Inspect the database, read the table schema and sample the rows before building a report on top of it, so the report starts from facts.

## Elaichi vs Zapier MCP vs Composio for Neon

All three can connect Neon to an AI assistant, and all three have admin controls. They differ in where access lives and how you pay.

| What to check | Elaichi | Zapier MCP | Composio |
| --- | --- | --- | --- |
| Where the AI connects | One address for the whole organization. Endpoint: https://api.elaichi.ai/mcp | A server per member, created at sign-in. | An MCP endpoint per team, or an SDK. |
| Control over Neon tools | Allow or restrict single Neon tools, per role or user. | App and action restrictions on the account. | Role permissions, down to the action. |
| Record of calls | One audit entry per Neon call. | A History tab of tool calls. | A log of every tool call. |
| Single sign-on | SAML or OIDC, plus SCIM, on Gold. | SAML on Enterprise. | SAML and OIDC on Enterprise. |
| Price | $15 per user per month. | 2 tasks per successful call. | Billed per tool call. |

Sources: Zapier MCP [docs](https://docs.zapier.com/mcp/get-started/quickstart), [security](https://docs.zapier.com/mcp/manage/security), [usage](https://docs.zapier.com/mcp/features/usage); Composio [docs](https://docs.composio.dev/docs/composio-connect), [gateway](https://composio.dev/mcp-gateway), [enterprise](https://composio.dev/enterprise), [pricing](https://composio.dev/pricing). Checked September 2026.

Longer take: [Zapier MCP alternative](/blog/zapier-mcp-alternative/) and [when you don't need an MCP gateway](/blog/when-you-dont-need-an-mcp-gateway/).

## Frequently asked questions

### How do I connect Neon to Claude?

Connect Neon in Elaichi first: pick Neon from the catalog, click connect, and approve the request on Neon's own sign-in page, since Neon connects over OAuth with no client ID or secret to generate. Then open Claude, go to Customize, then Connectors, then Add, and paste https://api.elaichi.ai/mcp. Claude asks you to sign in to Elaichi, and from then on your Neon projects, branches and tables are available in every conversation.

### Does Neon work with ChatGPT and Cursor as well as Claude?

Yes. Once Neon is connected in Elaichi, the same endpoint, https://api.elaichi.ai/mcp, works in Claude, ChatGPT, Cursor, any other MCP client and the Elaichi Agent. You connect Neon once and every client picks it up.

### What can an AI agent actually do with my Neon data?

With Neon connected, an agent can list your projects and branches, describe a table's schema, run a query or a transaction, explain why a statement is slow, prepare and complete a migration, fetch a connection string, and create or update a project. Short, concrete asks work best: "show me the slow queries in the billing project" gets a better answer from Neon than a long paragraph of instructions.

### Does connecting Neon give the AI every project and branch?

No. Every call to Neon runs as the person who signed in, so the agent sees only the organizations, projects and branches that person can already reach in Neon. Elaichi can narrow that further, for example to read-only queries on one project, but it can never widen it beyond what Neon itself allows that person.

### Can my team share one Neon connection?

Yes. One person connects Neon in Elaichi and shares the connection with a team, and nobody else ever handles a connection string or a credential. Each teammate still signs in to Elaichi as themselves, so every Neon query in the audit log carries the name of the person who ran it.

### Can I stop an agent from deleting or changing things in Neon?

Yes. Restrictions in Elaichi apply per action, so you can allow reading tables and explaining queries in Neon while blocking migrations, transactions and project updates. A restricted action is never advertised to Claude, ChatGPT or Cursor at all, so no prompt, however it is worded, can reach it.

### What happens to a Neon connection when someone leaves?

Offboarding a person in Elaichi ends their access to Neon through every client at once. If they connected a Neon account that is shared with a team, the connection keeps working for everyone else. Disconnecting Neon once in Elaichi removes it from Claude, ChatGPT, Cursor and every other client together.

### Does the Neon MCP connector work with Gemini, Codex, Claude Code or other MCP clients?

Yes. Neon is reached over the same MCP endpoint every client uses, so anything that speaks MCP can call it — Gemini, Codex, Claude Code, Windsurf, Cline, Zed and OpenCode among them — alongside Claude, ChatGPT, Cursor, and the Elaichi Agent. The tools on offer and the access behind them are identical whichever client asks. Only the setup screen differs.

### Is Elaichi an alternative to Zapier MCP for Neon?

Yes. Both let Claude, ChatGPT or Cursor use Neon. Zapier MCP fits a team that already automates in Zapier, since each person signs in and acts as themselves in that account. Elaichi fits when IT wants one address for the whole company, per-tool rules by role, and a record of every Neon call.

### How is Elaichi different from Composio for Neon?

Composio gives AI agents tools and sign-in handling across 1,000+ apps, for developers building agents or people using an assistant, billed per tool call. Elaichi gives a company's own people governed access to Neon: one address, restrictions per role or user, and $15 per user per month. Both have role permissions and a log of every call.

## All 114 Neon tools

Every tool below is callable through https://api.elaichi.ai/mcp once Neon is connected, subject to the toolbox it is in and the restrictions on the caller.

- **List organizations** (List). List all organizations the current user belongs to. Supports optional `search` parameter to filter by name or ID.
- **Run SQL** (Run). Execute one SQL statement on a Neon database. If a prior step created a temporary branch, pass that branch_id. NEVER run destructive SQL autonomously; always ask the user first.
- **Run SQL transaction** (Run). Execute multiple SQL statements as one transaction. If a prior step created a temporary branch, pass that branch_id. NEVER run destructive SQL autonomously; always ask the user first.
- **Describe table schema** (Describe). Get column definitions, data types, and constraints for a specific table. Do not use when you need all tables in a database (use `get_database_tables` instead).
- **Get database tables** (Get). List all tables in a Neon database. Do not use when you need column-level detail for a specific table (use `describe_table_schema` instead).
- **Prepare database migration** (Action). Apply a schema change on a temporary branch and return a migration_id. Test with run_sql on that branch, ask the user, then complete_database_migration — even if they reject, so the temporary branch is deleted. Pass every field from the prepare response.
- **Complete database migration** (Complete). Apply or discard a prepared migration and delete the temporary branch. NEVER run autonomously; always ask the user first. Pass migration_id, migration_sql, database_name, project_id, temporary_branch_id, and parent_branch_id from prepare_database_migration. Set apply_changes…
- **Describe branch** (Describe). Get a tree view of all objects in a branch, including databases, schemas, tables, views, and functions. Do not use when you only need table names (use `get_database_tables` instead) or column detail (use `describe_table_schema` instead).
- **Get connection string** (Get). Get a PostgreSQL connection string for a Neon database. The branch must have a compute endpoint. `create_project` and `create_branch` do not return one; call this after they succeed. Branch, compute, and database are optional and resolved automatically if not specified;…
- **Get Neon auth config** (Get). Read Neon Auth config for a branch with OAuth and SMTP secrets redacted as "***redacted***". Requires provision_neon_auth first.
- **Explain SQL statement** (Action). Generate the execution plan for a SQL statement. When `analyze` is true, PostgreSQL executes the statement and any side effects. Use `analyze: false` to inspect a statement without executing it. Never analyze potentially destructive SQL autonomously. Do not use when you need…
- **Prepare query tuning** (Search). Analyze a slow query on a temporary branch and return a tuning_id. Apply suggested SQL with run_sql on that branch, re-run explain_sql_statement there, then complete_query_tuning with the tuning_id (not the branch id) — apply_changes true if they accept, omit it or pass false…
- **Complete query tuning** (Search). Apply or discard query-tuning changes and delete the temporary branch. NEVER run autonomously. Before calling, apply suggested SQL with run_sql on the temporary branch and re-run explain_sql_statement. Pass the tuning_id from prepare_query_tuning, not the branch id, plus…
- **List slow queries** (List). List queries from pg_stat_statements by execution time, slowest first. For sizes, indexes, locks, cache, bloat, or replication use inspect_database.
- **Inspect database** (Action). Run one read-only neon inspect db check (pick `check` from the input schema). Not for arbitrary SQL (`run_sql`), one statement's plan (`explain_sql_statement`), or applying indexes (`prepare_query_tuning`). Omit `database_name` to cover every database; some checks are…
- **Search** (Search). Search across all organizations, projects, and branches by keyword. Returns matching items with id, title, and URL. Query must be at least 3 characters. Do not use when you need all projects (use `list_projects` instead).
- **Fetch** (Action). Fetch detailed information about a specific organization, project, or branch using the ID returned by the `search` tool.
- **List docs resources** (List). List Neon documentation page slugs from neon.com/docs/llms.txt. Call this before get_doc_resource; do not guess slugs.
- **Get doc resource** (Get). Fetch one Neon documentation page as markdown. Pass a slug from list_docs_resources (for example docs/guides/prisma.md).
- **Send feedback** (Send). Send anonymous feedback about Neon or this MCP server to the Neon team. Only call this when the user asks to give feedback. Sends only the feedback text, not account, project, or connection details.
- **List projects** (List). List Neon projects you own. Returns every page. Pass limit to cap how many. There is no `cursor` argument. `org_id` is optional: organization API keys use their organization; personal API keys auto-select when unambiguous and otherwise return the IDs to choose from.
- **Describe project** (Describe). Retrieves the project record (settings, compute, usage). Call `list_branches` for branches.
- **Create project** (Create). Creates a Neon project and waits until the default compute is ready. `org_id` is optional: organization API keys use their organization; personal API keys auto-select when unambiguous and otherwise return the IDs to choose from. Does not return a connection string; call…
- **Update project** (Update). Updates the specified project.
- **Delete project** (Delete). Delete a Neon project and all its data. NEVER run autonomously; always ask the user first. For a single branch, use `delete_branch`.
- **Recover project** (Action). Recovers a deleted project within the 7-day deletion recovery period.
- **List project permissions** (List). Retrieves details about users who have access to the project, including the permission `id`, the granted-to email address, and the date project access was granted.
- **List project members** (List). Lists organization members and their per-project roles for an org-owned project. Returns every page. Pass limit to cap how many.
- **List regions** (List). Lists Neon regions available to the authenticated account.
- **List operations** (List). Lists operations for a project. Omitting `limit` returns every remaining page. There is no `cursor` argument.
- **Get operation** (Get). Retrieves details for the specified operation.
- **List branches** (List). Retrieves a list of branches for the specified project. Returns every page. Pass limit to cap how many.
- **Get branch** (Get). Retrieves information about the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- **Create branch** (Create). Creates a branch with a read-write compute and waits until it is ready. Pass `no_compute: true` to skip the endpoint. Does not return a connection string; call `get_connection_string` with the project and branch id. Copies the parent at HEAD; point-in-time restore is…
- **Update branch** (Update). Updates the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- **Delete branch** (Delete). Delete a branch and all its data. NEVER run autonomously; always ask the user first. For the whole project, use `delete_project`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- **Get default branch** (Get). Resolve the project's default branch by the default flag, not by name.
- **Set default branch** (Set). Sets the specified branch as the project's default branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- **Reset from parent** (Action). Reset a branch to its parent's current HEAD. Discards every change the branch has written since it diverged. NEVER run autonomously; always ask the user first. `preserve_under_name` saves the current state first and is required when the branch has children; those children move…
- **Compare database schema** (Action). Compare one database's SQL schema on a branch to another. `database_name` is required. Omit `base_branch_id` to compare against the parent; it is a branch id (`br-...`), not a name. Pass `lsn`, `timestamp`, `base_lsn`, or `base_timestamp` only for a point-in-time comparison.…
- **Finalize branch restore** (Restore). Finalize a branch created with `restore_snapshot` and `finalize: false`: reassign computes (this restarts them) and swap names so it replaces the original branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- **List postgres roles** (List). Retrieves a list of Postgres roles from the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- **Get postgres role** (Get). Retrieves details about the specified role. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- **Create postgres role** (Create). Creates a Postgres role in the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- **Delete postgres role** (Delete). Deletes the specified Postgres role from the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- **Reset postgres role password** (Action). Resets the password for the specified Postgres role. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- **List postgres databases** (List). Retrieves a list of databases for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- **Get postgres database** (Get). Retrieves information about the specified database. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- **Create postgres database** (Create). Creates a database in the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- **Update postgres database** (Update). Updates the specified database in the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
- ...and 64 more tools. Call `tools/list` via the MCP endpoint, or see the full catalog via the API, for the complete set.
