Best backend for Claude Code: how to choose one
Claude Code can create tables, run migrations and delete rows through a backend’s MCP server, and the backend decides what happens when one of those calls is wrong. This guide sets out what to check, what Supabase, Neon, Convex, Appwrite, Firebase, InsForge and Backenly document today, and when to pick something other than Backenly.
Updated October 24, 2026Written by Backenly, one of the seven optionsEvery row links its source
What to check
Connected over MCP, Claude Code calls a backend’s tools itself: it reads the schema, writes a migration and runs it, often several calls in one turn. What matters most is what happens when one of those calls is wrong. These are the nine questions this guide asks of each backend, and you can ask them of any other.
- How the agent connects. An official MCP server is maintained by the vendor with the product. A hosted one needs nothing installed; a local one runs on your machine with the credentials it finds there.
- A read-only mode. Most of an agent’s calls only read. A read-only connection, enforced by the server or by database grants rather than by instructions, means a misread request cannot write.
- What happens to DROP and delete. One call can drop a table. Check whether the server refuses it, asks a person, or runs it, and whether your client’s own prompt is the only thing in the way.
- Whether schema changes are checked. A migration can run without an error and still break the app. Check whether the platform tests the result, or whether that is left to you and the agent.
- Restore points and branches. When a change goes wrong: how far back you can go, what a restore does to data written since, and what the free plan includes.
- What happens to problems after launch. Most problems show up after the agent’s session ends: a slow query, a missing index, a table open to everyone. Check whether the platform only reports them, or also fixes the safe ones itself.
- The data model. Tables or documents decide how the agent models your data, and it is the choice that is hardest to undo later.
- Self-hosting and licence. Whether you can run the backend yourself, and under which licence, if the hosted service stops suiting you.
- The free tier. What you can build before paying, and the limits you reach first.
Connecting the agent
All seven have an official MCP server. Where it runs decides whose credentials it acts with, and a read-only mode decides whether a question about production can turn into a write.
How the agent connects
| Backend | What it documents |
|---|---|
| SupabaseMCP server docs | Official MCP server, hosted at mcp.supabase.com/mcp. A local one runs with the Supabase CLI for local development. |
| NeonMCP server docs | Official MCP server, hosted at mcp.neon.tech/mcp. The local stdio package is deprecated. |
| ConvexMCP server docs | Official MCP server, run locally with npx convex mcp start. It connects to your development deployment by default. |
| AppwriteMCP server docsSelf-hosted MCP docs | Official MCP server, hosted at mcp.appwrite.io for Appwrite Cloud, with an OAuth sign-in. Self-hosted Appwrite uses a local server over stdio instead. |
| FirebaseMCP server docs | Official MCP server in firebase-tools, run locally over stdio. It acts with the credentials your Firebase CLI is signed in with. |
| InsForgeMCP setup docsCLI docs | Official MCP server for Claude Code, Cursor, Codex and other clients. Write and admin actions need your admin API key. A CLI, @insforge/cli, gives the agent the schema, config, deploys and diagnostics as JSON. |
| Backenlyapp/mcp/data.ts | Official MCP server, remote at backenly.com/api/mcp or local over stdio with @backenly/mcp-server. It operates a Backenly project, on Cloud or self-hosted, not a Postgres database Backenly does not run. |
A read-only mode
| Backend | What it documents |
|---|---|
| SupabaseMCP server docs | Yes. read_only=true runs every query as a read-only Postgres user, and project_ref scopes the server to one project. |
| NeonMCP server docs | Yes. readonly=true keeps SELECT queries and schema inspection and turns writes off. roleName makes the SQL tools log in as a Postgres role you choose. |
| ConvexMCP server docs | On a production deployment, by default, only read-only tools that expose no personal data. --disable-tools turns off any tool. |
| AppwriteMCP server docsSelf-hosted MCP docs | Not documented. The local server for self-hosted Appwrite connects with an API key you create with the scopes it needs. |
| FirebaseMCP server docs | Not documented. --only limits the tools to the feature groups you name; the core tools are always on. |
| InsForgeMCP setup docs | Not documented. Write and admin actions need your admin API key. |
| Backenlyapp/mcp/data.ts | Yes. A read-only key or connection sees 16 of the 23 tools, a write called anyway is refused with READ_ONLY_KEY, and an agent cannot upgrade its own key. |
Two of the vendors also advise against connecting an agent to production at all. Neon recommends its MCP server for development and testing only, not production environments (MCP server docs). Supabase says to connect a production project only when the task needs production evidence, and to scope the server and turn on read-only mode first (MCP server docs).
When the agent changes something
Three questions: what stops a destructive call, who checks a schema change after it runs, and how you get back when one goes wrong.
What happens to DROP and delete
| Backend | What it documents |
|---|---|
| SupabaseMCP server docs | execute_sql and apply_migration ask for confirmation when they detect destructive SQL, if your client supports it. The docs call this a guardrail that may not catch every destructive operation. |
| NeonMCP server docs | Not documented. The docs say to review and authorize every action the LLM requests. |
| ConvexMCP server docs | The write tools (run, envSet, envRemove) are blocked on production unless the server starts with --dangerously-enable-production-deployments. On development deployments every tool is allowed. |
| AppwriteMCP server docs | Not documented. |
| FirebaseMCP server docs | Not documented, beyond a note that the tools act “with your approval”. They include firestore_delete_document and firestore_delete_database. |
| InsForgeMCP setup docs | run-raw-sql runs raw SQL in strict mode with the admin key, with system tables and auth.users blocked. The tools include delete-bucket and delete-function. A step that waits for a person: Not documented. |
| Backenlyapp/mcp/data.ts | apply_migration refuses DROP with DESTRUCTIVE_REFUSED. Dropping a table or column, deleting files and revoking keys wait for a person to approve. Row inserts, updates and deletes run as normal. |
As Supabase’s docs note, most MCP clients also ask you to accept each tool call before it runs (MCP server docs). The rows above describe what each server does on its own, whatever the client is set to allow.
Whether schema changes are checked
| Backend | What it documents |
|---|---|
| SupabaseMCP server docs | Not documented as a check after a migration. get_advisors returns security and performance advisors when the agent calls it. |
| NeonMCP server repository | prepare_database_migration applies a migration to a temporary branch so it can be tested; complete_database_migration then applies it to the main branch. |
| ConvexSchemas docs | The first push after a schema change validates every existing document against it, and the push fails if any do not match. Later inserts and updates are validated too. |
| AppwriteDatabases docs | Not documented. |
| FirebaseFirestore data model | Firestore is schemaless: documents in the same collection can have different fields. |
| InsForgeMigrations docs | Not documented as a check after a change. Migrations are forward-only SQL files the CLI applies in a transaction and records only on success. |
| Backenlylib/changes/verify.ts | Backenly checks each schema change after it runs: every reported step happened, nothing disappeared as a side effect, and row-level security was not weakened. A check that could not run leaves the change marked unverified. |
Restore points and branches
| Backend | What it documents |
|---|---|
| SupabaseBackups docsPricing | Daily backups on Pro and above, the last 7 days on Pro; point-in-time recovery is an add-on. The project is inaccessible while a restore runs. Free includes no automatic backups, point-in-time recovery or branching. |
| NeonInstant restore docsPricing | Instant restore returns a root branch to any point in its history window, and keeps the state before the restore as a backup branch. On Free the window is up to 6 hours or 1 GB of changes, with 10 branches per project and 1 snapshot. |
| ConvexBackup and restore docs | Backups of table data: up to two per deployment on Free, scheduled daily or weekly on Pro. A restore wipes the existing data and replaces it with the backup’s. |
| AppwriteBackups docs | Backups on Pro and Enterprise, with a daily backup policy on Pro. A restore creates a new database. |
| FirebaseFirestore backups docsFirestore PITR docs | Scheduled Firestore backups, kept up to 14 weeks and restored to a new database, need the Blaze plan. Point-in-time recovery keeps up to 7 days and needs billing enabled. |
| InsForgeBackups docsBranching docs | Daily backups on paid plans, kept 7 days, and manual backups: 1 slot on Free, 5 on paid plans. A restore replaces the database: the project goes offline, data created after the backup is lost, and the restore cannot be undone. A branch is a child project with its own Postgres, auth, storage and functions, merged back with a three-way diff or reset to its starting snapshot. Two active branches per parent. |
| Backenlydocs/CHANGE_RECOVERY.mdapp/pricing/page.tsxapp/docs/content.ts | Every change, to the schema, auth, storage, functions, webhooks, environment variables, keys or integrations, is one entry in History. Restore it alone, or everything back to a point; data your app wrote is never rewound, and a secret never comes back. A restore point before each schema change, kept 7 days on Free and 30 on Pro; each change shows whether it can still be restored. Daily backups are kept 7 days. A restore that would affect data written since the change waits for a person, who sees the impact first. Branches, copies of the schema to try a change on first, are in beta on Backenly Cloud. |
After the agent leaves
Most problems show up when no agent is connected. What differs is whether a fix waits for you or your agent to apply it, or the platform applies the safe ones itself.
What happens to problems after launch
| Backend | What it documents |
|---|---|
| SupabaseAdvisors docs | Advisors flag health, security and performance issues. The documented fixes are SQL or settings changes you run. |
| NeonMonitoring docs | Monitoring, query performance and logs, plus Data API Advisors that detect security and performance issues. Fixes it applies itself: Not documented. |
| ConvexHealth page docs | The Health page shows the failure rate and insights with suggestions to improve performance and reliability, each linking to how to resolve it. Fixes it applies itself: Not documented. |
| AppwriteDatabases docs | Not documented. |
| FirebaseQuery insights docs | Query insights, in the Enterprise edition, shows query latency and reads for tuning. Fixes it applies itself: Not documented. |
| InsForgeDiagnostics docs | An advisor scans for security, performance and health issues and writes a remediation for each. The agent fetches the findings and applies the fix itself. |
| Backenlyapp/docs/content.ts | Checked every minute on every plan, Free included. It applies a short list of safe, additive fixes itself, such as a missing index, verifies and records each one, and holds anything risky for a person. |
The platform underneath
The last three questions decide whether the backend suits your app, not only your agent.
The data model
| Backend | What it documents |
|---|---|
| SupabasePricing | PostgreSQL. Every project comes with its own Postgres instance. |
| NeonMCP server docs | PostgreSQL, organized in projects and branches. |
| ConvexDatabase docs | A relational data model over JSON-like documents in tables, with or without a schema. |
| AppwriteDatabases docs | TablesDB (typed columns, rows and relationships), DocumentsDB (schemaless documents), or managed PostgreSQL and MySQL on dedicated infrastructure. |
| FirebaseFirestore data modelSQL Connect docs | Cloud Firestore: documents in collections, with no tables or rows. SQL Connect, formerly Data Connect, is a separate PostgreSQL service on Cloud SQL. |
| InsForgeProducts docs | PostgreSQL for every project, with every table served as a typed REST and SDK surface. |
| Backenlyapp/docs/content.ts | PostgreSQL. Each project has its own schema, and every table is served as a REST API. |
Self-hosting and licence
| Backend | What it documents |
|---|---|
| SupabaseRepositorySelf-hosting docs | Apache-2.0. Self-hosting with Docker is documented. Branching, managed backups and point-in-time recovery are not available self-hosted. |
| NeonRepository | Apache-2.0. Self-hosting: Not documented. The README covers running Neon on a workstation for small experiments. |
| ConvexSelf-hosting docs | Self-hosting is documented and runs the same code as the cloud service. The FSL Apache 2.0 licence allows almost anything Apache-2.0 does except a product that competes with Convex Cloud, and code becomes Apache-2.0 two years after it is written. |
| AppwriteRepository | BSD-3-Clause. Self-hosting with Docker is documented. |
| FirebaseEmulator Suite docsfirebase-tools repository | Not documented. The docs say not to use the local emulators as self-hosted versions of Firebase services. firebase-tools, which contains the MCP server, is MIT. |
| InsForgeRepositorySelf-hosting docs | Apache-2.0. Self-hosting with Docker Compose is documented. |
| Backenlyapp/pricing/page.tsxpackages/ | The platform is Apache-2.0 and free to self-host. The SDK, CLI and MCP server are MIT. |
The free tier
| Backend | What it documents |
|---|---|
| SupabasePricing | $0: 2 active projects and a 500 MB database per project. Free projects are paused after a week of inactivity. |
| NeonPricing | $0 with no credit card: 100 projects, with 1 GB of storage and 100 CU-hours of compute a month per project. |
| ConvexLimits docs | Hard caps: 0.5 GB of database storage and 1,000,000 function calls a month. |
| AppwriteFree plan docs | One organization and 2 projects per account, sharing the plan’s resources. |
| FirebasePricing | The Spark plan needs no payment method. Firestore is free up to 1 GiB stored, 50,000 reads and 20,000 writes a day. |
| InsForgePricing | $0: a 500 MB database, 1 GB of file storage and 50,000 monthly active users. Free projects are paused after a week of inactivity. |
| Backenlyapp/pricing/page.tsx | $0 with no credit card: 1 live project and a 512 MB Postgres database. |
Prices and limits change often. The pricing pages linked above have the current figures.
When to pick something else
Backenly is the wrong choice for some projects, starting with any where the agent has to work on a database you already run elsewhere: Backenly’s MCP server only operates a Backenly project. These are the other clear cases.
- You already run a Supabase project. Supabase’s MCP server works on it as it is, with project scoping and a read-only mode, and its tools also cover Edge Functions and account management (MCP server docs). Moving to Backenly means a
pg_dumpof the data and rewriting your row-level security policies, and there is no migration service to do it for you. - You want point-in-time restore and many free databases on plain Postgres. Neon restores a branch to any point in its history window and keeps the state before the restore as a branch you can go back to (Instant restore docs). Its Free plan includes 100 projects (Pricing). Backenly’s Free plan has one live project.
- Your data is documents, and you want writes checked against a schema. Convex validates documents against your schema, and a push that changes the schema fails if existing documents do not match it (Schemas docs). Its MCP server keeps an agent from writing to a production deployment unless you start it with a flag (MCP server docs). Backenly keeps your data in PostgreSQL tables.
- Your app must keep working offline on a phone. Firestore caches the data an app is using, so reads, writes and queries keep working offline and sync when the device reconnects. This is on by default on Android and Apple platforms (Offline data docs). Backenly has no offline layer.
- You want a model gateway, payments and site hosting in the same platform as the backend. InsForge ships ten products behind one MCP server and SDK, among them sites, a model gateway, analytics and payments (Products docs). Its branches copy the whole backend, auth, storage and functions included (Branching docs). Backenly’s branches cover data and the REST API; auth, functions and storage stay on main.
- You want one platform to host your web app as well. Appwrite Sites deploys web apps from source control, each with its own URL, custom domains and environment variables (Sites docs). Backenly publishes the backend; your frontend is hosted wherever you choose.
How this was checked
Backenly wrote this guide, and Backenly is one of the seven options in it. So every row about another product restates that vendor’s own documentation, pricing page or repository, read on October 24, 2026, and links it. Nothing comes from reviews, benchmarks or memory, and nothing is ranked: which backend suits you depends on which rows matter for your app.
“Not documented” means the linked pages do not say. It does not mean the product cannot do it, so check with the vendor before you rule something out.
Backenly’s rows link the code and docs in its public repository, and a test keeps them in line with that code: the tool counts, the refusal codes, the licences and the free plan. The same test fails if a claim about another product loses its source. Other backends were not checked; the nine questions apply to them too.
Products change faster than guides. If a row is out of date, tell us through the contact page and it will be corrected.
Read next
- MCP serverWhat your agent can callBackenly’s tools, the install for Claude Code and other clients, and what waits for you.
- GuideSafe database changes with AI coding agentsHow Backenly checkpoints, verifies and recovers an agent’s schema changes, and why some undos need a person.
- ComparisonBackenly vs SupabaseThe same Postgres and query API. The difference is who handles schema changes, access rules and upkeep.
Try it on a live project
One free project, no credit card. Connect Claude Code with a read-only key first, then ask for a change and see what waits for you.