Neon MCP
Neon
Neon
Neon's hosted MCP server lets AI clients manage Neon projects, branches, endpoints and database schemas, run SQL, and inspect observability data through the Neon API. It supports OAuth or API-key authentication with selectable tool categories and read-only grants.
The official unauthenticated /api/list-tools endpoint returned 127 tools on 2026-10-28 for the unfiltered default endpoint. This snapshot is conditional: readonly, projectId, roleName, category filters, auth grants, plan and regional availability change the exposed set. The docs-page interactive preview showed 119 while the current endpoint returned 127; use the live endpoint for the current inventory.
list_organizationsList all organizations the current user belongs to. Supports optional `search` parameter to filter by name or ID.
run_sqlExecute 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_transactionExecute 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_schemaGet 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_tablesList 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_migrationApply 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_migrationApply 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 false to discard; omitting it applies the migration.
describe_branchGet 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_stringGet 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; `project_id` follows the connection scope. Requires write access: the connection string carries a privileged role password, so it is unavailable in read-only mode. A read-only caller who needs a DATABASE_URL must copy it from https://console.neon.tech manually.
get_neon_auth_configRead Neon Auth config for a branch with OAuth and SMTP secrets redacted as "***redacted***". Requires provision_neon_auth first.
explain_sql_statementGenerate 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 query results (use `run_sql` instead).
prepare_query_tuningAnalyze 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 if they reject, so the temporary branch is deleted. Do not use prepare_database_migration.
complete_query_tuningApply 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 temporary_branch_id. Set apply_changes true to apply; omitting it discards. Call this even when the user rejects the changes. Do not use prepare_database_migration.
list_slow_queriesList queries from pg_stat_statements by execution time, slowest first. For sizes, indexes, locks, cache, bloat, or replication use inspect_database.
inspect_databaseRun 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 compute-wide. If a check needs an extension, the tool names `CREATE EXTENSION`; ask before running it.
searchSearch 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) or to search Neon documentation (use `search_docs`).
fetchFetch detailed information about a specific organization, project, or branch using the ID returned by the `search` tool.
search_docsSearch neon.com: docs, API reference, PostgreSQL tutorial, guides, FAQs, changelog, and blog. Returns ranked pages with title, URL, the matching section, and a slug; read a full page with get_doc.
get_docFetch one neon.com page as markdown. Pass the slug of a search_docs hit (for example docs/guides/prisma).
send_feedbackSend 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_projectsList 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_projectRetrieves the project record (settings, compute, usage). Call `list_branches` for branches.
create_projectCreates 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 `get_connection_string` with the project id.
update_projectUpdates the specified project.
delete_projectDelete a Neon project and all its data. NEVER run autonomously; always ask the user first. For a single branch, use `delete_branch`.
recover_projectRecovers a deleted project within the 7-day deletion recovery period.
list_project_permissionsRetrieves 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_membersLists organization members and their per-project roles for an org-owned project. Returns every page. Pass limit to cap how many.
list_regionsLists Neon regions available to the authenticated account.
list_operationsLists operations for a project. Omitting `limit` returns every remaining page. There is no `cursor` argument.
get_operationRetrieves details for the specified operation.
list_branchesRetrieves a list of branches for the specified project. Returns every page. Pass limit to cap how many.
get_branchRetrieves information about the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_branchCreates 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 `restore_snapshot`.
update_branchUpdates the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_branchDelete 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_branchResolve the project's default branch by the default flag, not by name.
set_default_branchSets 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_parentReset 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 to the new branch. Point-in-time restore is `restore_snapshot`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
compare_database_schemaCompare 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. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
finalize_branch_restoreFinalize 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_rolesRetrieves 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_roleRetrieves 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_roleCreates 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_roleDeletes 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_passwordResets 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_databasesRetrieves 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_databaseRetrieves 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_databaseCreates 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_databaseUpdates the specified database in the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_postgres_databaseDeletes the specified database from the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_postgres_endpointsRetrieves a list of compute endpoints for the specified project.
list_branch_computesRetrieves a list of compute endpoints for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_postgres_endpointRetrieves information about the specified compute endpoint.
create_postgres_endpointCreates a compute endpoint on a branch. Does not return a connection string; call `get_connection_string`.
update_postgres_endpointUpdates the specified compute endpoint.
delete_postgres_endpointDeletes the specified compute endpoint.
start_postgres_endpointStarts a compute endpoint.
suspend_postgres_endpointSuspends the specified compute endpoint.
restart_postgres_endpointRestarts the specified compute endpoint by immediately suspending it and then starting it again.
list_snapshotsLists the snapshots for the specified project.
get_snapshot_scheduleReturns the backup schedule for the specified branch, including the configured snapshot frequencies. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
set_snapshot_scheduleReplace a branch's automatic snapshot schedule. Frequency must be daily, weekly, or monthly. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_snapshotCreates a snapshot from the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_snapshotUpdates the specified snapshot.
delete_snapshotDeletes the specified snapshot.
restore_snapshotRestore a snapshot onto a new or existing branch. The call waits until the branch is ready. Pass `target_branch_id` to restore onto an existing branch; omit it to create one. Pass `finalize: false` then call `finalize_branch_restore` to swap names later.
get_authRetrieves the Neon Auth integration details for the specified branch, including the auth provider type and integration status. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
provision_neon_authEnables Neon Auth for the specified branch by connecting it to an authentication provider. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
disable_authDisables the Neon Auth integration for the specified branch, removing the connection to the authentication provider. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_auth_configUpdates the auth configuration for the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_auth_oauth_providersLists the social login providers (Google, GitHub, Microsoft, Vercel) configured for the branch's Neon Auth integration, which users sign in with. This is not the OAuth Provider plugin that makes Neon Auth an OAuth 2.1 authorization server; for that use `get_auth_oauth_server` and `update_auth_oauth_server`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
add_auth_oauth_providerAdds a social login provider (Google, GitHub, Microsoft, Vercel) that users sign in with to the branch's Neon Auth integration. Takes the provider `id` and optionally `client_id`, `client_secret` and, for Microsoft, `microsoft_tenant_id`. This is not the OAuth Provider plugin that makes Neon Auth an OAuth 2.1 authorization server; for that use `get_auth_oauth_server` and `update_auth_oauth_server`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_auth_oauth_providerUpdates a social login provider (Google, GitHub, Microsoft, Vercel) that users sign in with on the branch's Neon Auth integration. This is not the OAuth Provider plugin that makes Neon Auth an OAuth 2.1 authorization server; for that use `get_auth_oauth_server` and `update_auth_oauth_server`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_auth_oauth_providerDeletes a social login provider (Google, GitHub, Microsoft, Vercel) from the branch's Neon Auth integration. This is not the OAuth Provider plugin that makes Neon Auth an OAuth 2.1 authorization server; for that use `get_auth_oauth_server` and `update_auth_oauth_server`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_auth_trusted_domainsLists the trusted domains in the redirect URI whitelist for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
add_auth_trusted_domainAdds a domain to the redirect URI whitelist for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_auth_trusted_domainRemoves a domain from the redirect URI whitelist for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_auth_userCreates a new user in the Neon Auth user directory for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_auth_userDeletes the specified user from the Neon Auth user directory for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_auth_user_roleUpdates the role of a user in the Neon Auth user directory for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_auth_oauth_serverRetrieves how Neon Auth acts as an OAuth 2.1 authorization server for the branch, including for MCP servers. This is Better Auth's OAuth Provider plugin (API plugin `oauth_provider`), not social login; for providers such as GitHub or Google call `list_auth_oauth_providers`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_auth_oauth_serverConfigures Neon Auth as an OAuth 2.1 authorization server for the branch, including for MCP servers. This is Better Auth's OAuth Provider plugin (API plugin `oauth_provider`), not social login; for providers such as GitHub or Google see `list_auth_oauth_providers`. Enabling requires `login_page`, `consent_page` and at least one resource (or an MCP resource). `resources` replaces the stored list: call `get_auth_oauth_server` first and send the full list to add or remove one. `mcp.resource` is required whenever `mcp` is sent; omitted `mcp` booleans keep their stored value, and `mcp.resource: ""` removes the MCP configuration. Prefer `client_id_metadata_documents` over the deprecated `dynamic_registration`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_auth_oauth_clientsLists the OAuth clients registered with the branch's Neon Auth OAuth server (apps and MCP clients that users authorize). Not social login providers. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_auth_oauth_clientReturns an OAuth client registered with the branch's Neon Auth OAuth server. Not a social login provider. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_auth_oauth_clientRegisters an OAuth client with the branch's Neon Auth OAuth server. A confidential client returns `client_secret` only once: show it to the user and tell them to store it. Every entry in `resources` must already be configured on the OAuth server (see `get_auth_oauth_server`) or be its MCP resource. `type` cannot be changed later. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_auth_oauth_clientUpdates an OAuth client of the Neon Auth OAuth server. `redirect_uris` and `resources` replace the stored lists, so send the full list. At least one resource is required. `type` cannot be changed. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_auth_oauth_clientDeletes an OAuth client from the Neon Auth OAuth server. Irreversible. Tokens already issued to the client are not revoked. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
rotate_auth_oauth_client_secretGenerates a new secret for a confidential client of the Neon Auth OAuth server. The old secret stops working immediately. The new `client_secret` is shown only once: show it to the user and tell them to store it. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_data_apiRetrieves the Neon Data API configuration for the specified branch, including endpoint URL, enabled state, and database settings. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
provision_neon_data_apiCreates a new instance of Neon Data API in the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_data_apiUpdates the Neon Data API configuration for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_data_apiDeletes the Neon Data API for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
query_logsReturns logs for a branch. Pass `limit` to cap how many. There is no `cursor` argument. Filters combine with AND. Pass `logql` instead of structured filters, not with them. Give the window as `since` or `start_time`, not both; default is the previous hour, max seven days; `end_time` is exclusive. Private beta; a branch without logs access returns HTTP 404 with reason "telemetry_not_enabled". branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_log_fieldsLists the low-cardinality log fields observed on this branch. Call `list_log_field_values` with `field_name` to list distinct values. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_log_field_valuesLists distinct values for a low-cardinality log field. Call `list_log_fields` first for `field_name`; a field the branch has never emitted returns `unknown_field`. Pass `since` or `start_time`, not both; default is the previous six hours, max seven days. Private beta. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_ai_gatewayReturns the AI Gateway endpoint host for the specified branch, used to render code-snippet base URLs. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_functionsLists functions on the specified branch. Returns every page. Pass limit to cap how many. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_functionReturns the function identified by its slug. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_functionUpdates the function's mutable metadata — currently only the display `name`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_functionDeletes the function identified by its slug. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
deploy_functionCreates a deployment for the function. Supply at least one of `zip`, `environment`, or `runtime`; omitted fields inherit the latest version. The first deployment must include `zip`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_functions_custom_domainsLists all custom domains registered on the branch, across every target entity. Returns every page. Pass limit to cap how many. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
register_functions_custom_domainRegisters a hostname on the branch and routes it to a function. Pass `entity_type: "function"` and `entity_id` as the slug from `list_functions`. Point a CNAME at the returned `cname_target`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_functions_custom_domainRemoves a custom domain registered on the branch and stops routing it. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_triggersLists the complete project-bounded set of triggers visible on the branch, ordered by `trigger_id`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_triggerReturns the trigger visible on the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_triggerCreates a trigger for a Function visible on the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_triggerApplies a partial update. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_triggerDeletes a branch-local trigger or writes a branch-local tombstone for an inherited trigger so it does not reappear. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_credentialsReturns metadata for customer-issued credentials on the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_credentialIssues a new scoped service credential anchored to the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
revoke_credentialSoft-deletes the credential. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
rotate_credentialReplaces the secret material on an existing scoped credential in place. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_storageReturns whether branchable object storage is usable for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_storage_bucketsLists branchable object storage buckets visible on the specified branch, including those inherited from ancestor branches. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_storage_bucketCreates a new branchable object storage bucket on the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_storage_bucketDeletes the named bucket from the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_storage_objectsLists objects visible in the named bucket on the specified branch, including those inherited from ancestor branches. Returns every page. Pass limit to cap how many. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_storage_objectDeletes the named object from the bucket on the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_storage_objects_by_prefixSoft-deletes every object on the specified branch whose key starts with `prefix`, in a single call. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
presign_storage_objectReturns a presigned URL that transfers bytes directly to or from the object's bucket on the specified branch, without the caller ever handling S3 credentials. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_realtimeRetrieves whether Realtime is enabled for the branch, whether a change is still being applied, and, once provisioned, its invocation URL and allowed origins. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
enable_realtimeEnables Realtime for the branch, or applies new options to an enabled branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
disable_realtimeDisables Realtime for the branch and discards its shared secret. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_realtime_secretRetrieves the secret the application backend issues Realtime tokens with. Requires write access: the secret lets its holder issue Realtime tokens for the branch, so it is unavailable in read-only mode. Call `enable_realtime` first. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
rotate_realtime_secretReplaces the branch's Realtime shared secret and waits until the change is applied. NEVER run autonomously; always ask the user first. Call `get_realtime_secret` afterwards and update the application backend with the new value. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
Neon documents a public unauthenticated /api/list-tools endpoint to preview the live tool set. The current default endpoint returned 127 tools at retrieval time. This is conditional: read-only mode, project scoping, category filters, OAuth grants and plan/region support can change the live tools/list.
Neon documents a public unauthenticated /api/list-tools endpoint to preview the live tool set. The current default endpoint returned 127 tools at retrieval time. This is conditional: read-only mode, project scoping, category filters, OAuth grants and plan/region support can change the live tools/list.
Documentation checked 2026-10-28T12:50:00.000Z. Connection has not been runtime tested.
Neon
Neon's hosted MCP server lets AI clients manage Neon projects, branches, endpoints and database schemas, run SQL, and inspect observability data through the Neon API. It supports OAuth or API-key authentication with selectable tool categories and read-only grants.
The official unauthenticated /api/list-tools endpoint returned 127 tools on 2026-10-28 for the unfiltered default endpoint. This snapshot is conditional: readonly, projectId, roleName, category filters, auth grants, plan and regional availability change the exposed set. The docs-page interactive preview showed 119 while the current endpoint returned 127; use the live endpoint for the current inventory.
list_organizationsList all organizations the current user belongs to. Supports optional `search` parameter to filter by name or ID.
run_sqlExecute 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_transactionExecute 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_schemaGet 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_tablesList 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_migrationApply 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_migrationApply 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 false to discard; omitting it applies the migration.
describe_branchGet 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_stringGet 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; `project_id` follows the connection scope. Requires write access: the connection string carries a privileged role password, so it is unavailable in read-only mode. A read-only caller who needs a DATABASE_URL must copy it from https://console.neon.tech manually.
get_neon_auth_configRead Neon Auth config for a branch with OAuth and SMTP secrets redacted as "***redacted***". Requires provision_neon_auth first.
explain_sql_statementGenerate 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 query results (use `run_sql` instead).
prepare_query_tuningAnalyze 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 if they reject, so the temporary branch is deleted. Do not use prepare_database_migration.
complete_query_tuningApply 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 temporary_branch_id. Set apply_changes true to apply; omitting it discards. Call this even when the user rejects the changes. Do not use prepare_database_migration.
list_slow_queriesList queries from pg_stat_statements by execution time, slowest first. For sizes, indexes, locks, cache, bloat, or replication use inspect_database.
inspect_databaseRun 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 compute-wide. If a check needs an extension, the tool names `CREATE EXTENSION`; ask before running it.
searchSearch 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) or to search Neon documentation (use `search_docs`).
fetchFetch detailed information about a specific organization, project, or branch using the ID returned by the `search` tool.
search_docsSearch neon.com: docs, API reference, PostgreSQL tutorial, guides, FAQs, changelog, and blog. Returns ranked pages with title, URL, the matching section, and a slug; read a full page with get_doc.
get_docFetch one neon.com page as markdown. Pass the slug of a search_docs hit (for example docs/guides/prisma).
send_feedbackSend 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_projectsList 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_projectRetrieves the project record (settings, compute, usage). Call `list_branches` for branches.
create_projectCreates 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 `get_connection_string` with the project id.
update_projectUpdates the specified project.
delete_projectDelete a Neon project and all its data. NEVER run autonomously; always ask the user first. For a single branch, use `delete_branch`.
recover_projectRecovers a deleted project within the 7-day deletion recovery period.
list_project_permissionsRetrieves 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_membersLists organization members and their per-project roles for an org-owned project. Returns every page. Pass limit to cap how many.
list_regionsLists Neon regions available to the authenticated account.
list_operationsLists operations for a project. Omitting `limit` returns every remaining page. There is no `cursor` argument.
get_operationRetrieves details for the specified operation.
list_branchesRetrieves a list of branches for the specified project. Returns every page. Pass limit to cap how many.
get_branchRetrieves information about the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_branchCreates 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 `restore_snapshot`.
update_branchUpdates the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_branchDelete 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_branchResolve the project's default branch by the default flag, not by name.
set_default_branchSets 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_parentReset 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 to the new branch. Point-in-time restore is `restore_snapshot`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
compare_database_schemaCompare 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. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
finalize_branch_restoreFinalize 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_rolesRetrieves 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_roleRetrieves 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_roleCreates 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_roleDeletes 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_passwordResets 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_databasesRetrieves 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_databaseRetrieves 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_databaseCreates 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_databaseUpdates the specified database in the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_postgres_databaseDeletes the specified database from the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_postgres_endpointsRetrieves a list of compute endpoints for the specified project.
list_branch_computesRetrieves a list of compute endpoints for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_postgres_endpointRetrieves information about the specified compute endpoint.
create_postgres_endpointCreates a compute endpoint on a branch. Does not return a connection string; call `get_connection_string`.
update_postgres_endpointUpdates the specified compute endpoint.
delete_postgres_endpointDeletes the specified compute endpoint.
start_postgres_endpointStarts a compute endpoint.
suspend_postgres_endpointSuspends the specified compute endpoint.
restart_postgres_endpointRestarts the specified compute endpoint by immediately suspending it and then starting it again.
list_snapshotsLists the snapshots for the specified project.
get_snapshot_scheduleReturns the backup schedule for the specified branch, including the configured snapshot frequencies. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
set_snapshot_scheduleReplace a branch's automatic snapshot schedule. Frequency must be daily, weekly, or monthly. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_snapshotCreates a snapshot from the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_snapshotUpdates the specified snapshot.
delete_snapshotDeletes the specified snapshot.
restore_snapshotRestore a snapshot onto a new or existing branch. The call waits until the branch is ready. Pass `target_branch_id` to restore onto an existing branch; omit it to create one. Pass `finalize: false` then call `finalize_branch_restore` to swap names later.
get_authRetrieves the Neon Auth integration details for the specified branch, including the auth provider type and integration status. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
provision_neon_authEnables Neon Auth for the specified branch by connecting it to an authentication provider. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
disable_authDisables the Neon Auth integration for the specified branch, removing the connection to the authentication provider. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_auth_configUpdates the auth configuration for the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_auth_oauth_providersLists the social login providers (Google, GitHub, Microsoft, Vercel) configured for the branch's Neon Auth integration, which users sign in with. This is not the OAuth Provider plugin that makes Neon Auth an OAuth 2.1 authorization server; for that use `get_auth_oauth_server` and `update_auth_oauth_server`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
add_auth_oauth_providerAdds a social login provider (Google, GitHub, Microsoft, Vercel) that users sign in with to the branch's Neon Auth integration. Takes the provider `id` and optionally `client_id`, `client_secret` and, for Microsoft, `microsoft_tenant_id`. This is not the OAuth Provider plugin that makes Neon Auth an OAuth 2.1 authorization server; for that use `get_auth_oauth_server` and `update_auth_oauth_server`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_auth_oauth_providerUpdates a social login provider (Google, GitHub, Microsoft, Vercel) that users sign in with on the branch's Neon Auth integration. This is not the OAuth Provider plugin that makes Neon Auth an OAuth 2.1 authorization server; for that use `get_auth_oauth_server` and `update_auth_oauth_server`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_auth_oauth_providerDeletes a social login provider (Google, GitHub, Microsoft, Vercel) from the branch's Neon Auth integration. This is not the OAuth Provider plugin that makes Neon Auth an OAuth 2.1 authorization server; for that use `get_auth_oauth_server` and `update_auth_oauth_server`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_auth_trusted_domainsLists the trusted domains in the redirect URI whitelist for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
add_auth_trusted_domainAdds a domain to the redirect URI whitelist for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_auth_trusted_domainRemoves a domain from the redirect URI whitelist for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_auth_userCreates a new user in the Neon Auth user directory for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_auth_userDeletes the specified user from the Neon Auth user directory for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_auth_user_roleUpdates the role of a user in the Neon Auth user directory for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_auth_oauth_serverRetrieves how Neon Auth acts as an OAuth 2.1 authorization server for the branch, including for MCP servers. This is Better Auth's OAuth Provider plugin (API plugin `oauth_provider`), not social login; for providers such as GitHub or Google call `list_auth_oauth_providers`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_auth_oauth_serverConfigures Neon Auth as an OAuth 2.1 authorization server for the branch, including for MCP servers. This is Better Auth's OAuth Provider plugin (API plugin `oauth_provider`), not social login; for providers such as GitHub or Google see `list_auth_oauth_providers`. Enabling requires `login_page`, `consent_page` and at least one resource (or an MCP resource). `resources` replaces the stored list: call `get_auth_oauth_server` first and send the full list to add or remove one. `mcp.resource` is required whenever `mcp` is sent; omitted `mcp` booleans keep their stored value, and `mcp.resource: ""` removes the MCP configuration. Prefer `client_id_metadata_documents` over the deprecated `dynamic_registration`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_auth_oauth_clientsLists the OAuth clients registered with the branch's Neon Auth OAuth server (apps and MCP clients that users authorize). Not social login providers. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_auth_oauth_clientReturns an OAuth client registered with the branch's Neon Auth OAuth server. Not a social login provider. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_auth_oauth_clientRegisters an OAuth client with the branch's Neon Auth OAuth server. A confidential client returns `client_secret` only once: show it to the user and tell them to store it. Every entry in `resources` must already be configured on the OAuth server (see `get_auth_oauth_server`) or be its MCP resource. `type` cannot be changed later. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_auth_oauth_clientUpdates an OAuth client of the Neon Auth OAuth server. `redirect_uris` and `resources` replace the stored lists, so send the full list. At least one resource is required. `type` cannot be changed. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_auth_oauth_clientDeletes an OAuth client from the Neon Auth OAuth server. Irreversible. Tokens already issued to the client are not revoked. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
rotate_auth_oauth_client_secretGenerates a new secret for a confidential client of the Neon Auth OAuth server. The old secret stops working immediately. The new `client_secret` is shown only once: show it to the user and tell them to store it. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_data_apiRetrieves the Neon Data API configuration for the specified branch, including endpoint URL, enabled state, and database settings. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
provision_neon_data_apiCreates a new instance of Neon Data API in the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_data_apiUpdates the Neon Data API configuration for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_data_apiDeletes the Neon Data API for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
query_logsReturns logs for a branch. Pass `limit` to cap how many. There is no `cursor` argument. Filters combine with AND. Pass `logql` instead of structured filters, not with them. Give the window as `since` or `start_time`, not both; default is the previous hour, max seven days; `end_time` is exclusive. Private beta; a branch without logs access returns HTTP 404 with reason "telemetry_not_enabled". branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_log_fieldsLists the low-cardinality log fields observed on this branch. Call `list_log_field_values` with `field_name` to list distinct values. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_log_field_valuesLists distinct values for a low-cardinality log field. Call `list_log_fields` first for `field_name`; a field the branch has never emitted returns `unknown_field`. Pass `since` or `start_time`, not both; default is the previous six hours, max seven days. Private beta. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_ai_gatewayReturns the AI Gateway endpoint host for the specified branch, used to render code-snippet base URLs. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_functionsLists functions on the specified branch. Returns every page. Pass limit to cap how many. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_functionReturns the function identified by its slug. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_functionUpdates the function's mutable metadata — currently only the display `name`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_functionDeletes the function identified by its slug. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
deploy_functionCreates a deployment for the function. Supply at least one of `zip`, `environment`, or `runtime`; omitted fields inherit the latest version. The first deployment must include `zip`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_functions_custom_domainsLists all custom domains registered on the branch, across every target entity. Returns every page. Pass limit to cap how many. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
register_functions_custom_domainRegisters a hostname on the branch and routes it to a function. Pass `entity_type: "function"` and `entity_id` as the slug from `list_functions`. Point a CNAME at the returned `cname_target`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_functions_custom_domainRemoves a custom domain registered on the branch and stops routing it. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_triggersLists the complete project-bounded set of triggers visible on the branch, ordered by `trigger_id`. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_triggerReturns the trigger visible on the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_triggerCreates a trigger for a Function visible on the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
update_triggerApplies a partial update. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_triggerDeletes a branch-local trigger or writes a branch-local tombstone for an inherited trigger so it does not reappear. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_credentialsReturns metadata for customer-issued credentials on the branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_credentialIssues a new scoped service credential anchored to the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
revoke_credentialSoft-deletes the credential. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
rotate_credentialReplaces the secret material on an existing scoped credential in place. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_storageReturns whether branchable object storage is usable for the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_storage_bucketsLists branchable object storage buckets visible on the specified branch, including those inherited from ancestor branches. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
create_storage_bucketCreates a new branchable object storage bucket on the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_storage_bucketDeletes the named bucket from the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
list_storage_objectsLists objects visible in the named bucket on the specified branch, including those inherited from ancestor branches. Returns every page. Pass limit to cap how many. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_storage_objectDeletes the named object from the bucket on the specified branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
delete_storage_objects_by_prefixSoft-deletes every object on the specified branch whose key starts with `prefix`, in a single call. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
presign_storage_objectReturns a presigned URL that transfers bytes directly to or from the object's bucket on the specified branch, without the caller ever handling S3 credentials. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_realtimeRetrieves whether Realtime is enabled for the branch, whether a change is still being applied, and, once provisioned, its invocation URL and allowed origins. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
enable_realtimeEnables Realtime for the branch, or applies new options to an enabled branch. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
disable_realtimeDisables Realtime for the branch and discards its shared secret. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
get_realtime_secretRetrieves the secret the application backend issues Realtime tokens with. Requires write access: the secret lets its holder issue Realtime tokens for the branch, so it is unavailable in read-only mode. Call `enable_realtime` first. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
rotate_realtime_secretReplaces the branch's Realtime shared secret and waits until the change is applied. NEVER run autonomously; always ask the user first. Call `get_realtime_secret` afterwards and update the application backend with the new value. branch_id is a branch id (br-...), not a branch name. Call list_branches to resolve a name.
Neon documents a public unauthenticated /api/list-tools endpoint to preview the live tool set. The current default endpoint returned 127 tools at retrieval time. This is conditional: read-only mode, project scoping, category filters, OAuth grants and plan/region support can change the live tools/list.
Neon documents a public unauthenticated /api/list-tools endpoint to preview the live tool set. The current default endpoint returned 127 tools at retrieval time. This is conditional: read-only mode, project scoping, category filters, OAuth grants and plan/region support can change the live tools/list.
Documentation checked 2026-10-28T12:50:00.000Z. Connection has not been runtime tested.