Scribase
com.scribase/scribaseVersion 1.0.0Supabase-compatible Postgres for agents: projects, branches, SQL, auth, storage, email.
Status
Responds171 msAnswered our handshake without sign-in.- Last checked
- Nov 14, 2026, 14:14 UTC
- Latency
- 171 ms
- Remotes responding
- 1 of 1
- Sign-in
- No sign-in
- Hosting
- Hosted outside the EU (detected)
- Registry data as of
- Nov 14, 2026, 21:12 UTC
Data from the official MCP Registry, checked by run.zero. How we check
Connect
Streamable HTTP
https://api.scribase.com/mcpResponds171 msNo sign-in
Claude Code
claude mcp add --transport http scribase https://api.scribase.com/mcpClaude Desktop and claude.ai
Settings > Connectors > Add custom connector
Name: scribase
Remote MCP server URL: https://api.scribase.com/mcpCursor
{
"mcpServers": {
"scribase": {
"url": "https://api.scribase.com/mcp"
}
}
}VS Code
code --add-mcp '{"name":"scribase","type":"http","url":"https://api.scribase.com/mcp"}'Built your own server? run.zero hosts MCP servers on European infrastructure.
Tools
98 tools
Read-only | Idempotent | Open world | ||
|---|---|---|---|---|
addon.statusWhether the organization's Portfolio add-on is active, since when, when it renews, and which slots it unlocks. Scope: projects:read. | No | Yes | Yes | No |
ai.keysThe AI gateway for this branch: its keys' daily and monthly caps and usage, and which providers are connected. Never returns a key. Scope: keys:read. | No | Yes | Yes | No |
analytics.summaryVisitors and events of the app on this branch over 7 days, the visit to sign-up to first action funnel, the plan cap note, and page speed with a marker per deploy when that is switched on. Scope: projects:read. | No | Yes | Yes | No |
apikey.listList API keys for an organization. GET /v1/organizations/{id}/api-keys. | No | Yes | Yes | No |
apikey.revokeRevoke an API key. DELETE /v1/organizations/{id}/api-keys/{key_id}. | Yes | No | No | No |
audit.listList audit events for an organization. GET /v1/organizations/{id}/audit-events. Pass after and limit together to page. | No | Yes | Yes | No |
auth.config.getAuth settings (site URL, redirect allow list, JWT expiry, sign-up rules) and providers. Scope: auth:read. | No | Yes | Yes | No |
auth.config.setChange auth settings (`settings`, a partial object: site_url, uri_allow_list, jwt_exp, ...) and/or one provider (`provider` such as google, github, apple, email with `provider_config` such as {enabled, client_id, secret}). Applied to the running auth service. Needs an owner or admin. Scope: auth:write. | No | No | No | No |
auth.usersList auth users via the per-environment GoTrue admin API. GET .../auth/users. | No | Yes | Yes | No |
backup.createRecord a new pending backup for an environment. POST .../environments/{env}/backups. idempotency_key uniquely identifies this backup; retrying with the same key is safe. | No | No | No | No |
backup.getGet one backup record. GET /v1/organizations/{id}/projects/{project}/backups/{backup_id}?environment={env}. | No | Yes | Yes | No |
backup.listList durable backups for an environment, newest first. GET .../environments/{env}/backups. | No | Yes | Yes | No |
backup.restoreRestore a verified backup into a target environment. POST .../backups/{backup_id}/restore. Source environment is named by environment_id; target by target_environment_id. | Yes | No | No | No |
billing.productsThe products and prices on the user's own connected payment account for this branch, and whether a processor is connected. The buyer pays the user's account directly. Scope: projects:read. | No | Yes | Yes | No |
branch.diffTwo-way schema diff between two environments of a project. POST /v1/organizations/{id}/projects/{project}/branches/diff. | No | Yes | Yes | No |
branch.link_pull_requestLink a branch to a pull request and post its status comment on GitHub or GitLab. POST /v1/organizations/{id}/projects/{project}/branches/{branch}/pr. | No | No | No | No |
branch.listList recorded branches for a project. GET /v1/organizations/{id}/projects/{project}/branches. | No | Yes | Yes | No |
branch.mergeThree-way merge of branch `head` into its parent `base` using the recorded fork base. Without `apply` this is a dry run returning the plan and conflicts; with `apply` a clean plan is applied. Conflicting plans need a forced merge from the console. POST /v1/organizations/{id}/projects/{project}/branches/merge. | Yes | No | No | No |
branch.registerRecord a branch's lineage by hand (for environments created before lineage was automatic): the parent's current schema becomes the fork base. POST /v1/organizations/{id}/projects/{project}/branches. | No | No | No | No |
branches.createFork a branch from production (or `from`) for one task, agent or pull request: a copy-on-write database with its own URL and keys. Expires after ttl_hours. Returns its URL and publishable key once live. Scope: branches:write. | No | No | No | No |
branches.deleteDelete a branch and its database. Destructive: needs confirm: true and the destructive scope; a production branch additionally needs production:destructive. Scope: branches:write. | Yes | No | No | No |
branches.listBranches of a project with kind, status, parent and expiry. Production is protected. Scope: branches:read. | No | Yes | Yes | No |
branches.masking.setWhat a sanitized branch (branches.create data: "sanitized") masks. Every sanitized branch already hashes auth emails and phone numbers and removes sign-in metadata, password hashes and IP addresses; add the project's own columns as [schema.]table.column:transform (hash, null, mask or empty_json). Without rules it shows the current ones. Needs an owner or admin token. Scope: branches:write. | No | No | No | No |
branches.mergeMerge a branch's schema changes into its parent (default production). Without apply it is a dry run that shows the plan and conflicts; apply: true with confirm: true applies it. Scope: branches:write. | No | No | No | No |
branches.resetThrow away a branch's changes and take its parent's current data, in place: the URL and keys stay. Destructive: needs confirm: true and the destructive scope. Refused on production. Scope: branches:write. | Yes | No | No | No |
branches.restoreRewind a branch in place to a point in time; the URL and keys stay and the state before is kept. Destructive: needs confirm: true and the destructive scope; production additionally needs production:destructive. Scope: branches:write. | Yes | No | No | No |
capabilities.addTurn on a capability slot such as email for a branch. When it needs the person's own credential, the answer holds a connect_url to hand to them; never ask for a key in chat. Then poll capabilities.status until live is true. Scope: projects:write. | No | No | No | No |
capabilities.statusWhich one-command add-ons (email, errors, ...) a branch has and whether each is live, with a proof record {kind, id, at}. Pass `slot` for one. Never returns a credential. Scope: projects:read. | No | Yes | Yes | No |
database.queryRun a single read-only statement (SELECT/WITH/EXPLAIN) against the environment database inside a bounded read-only transaction. Writes and DDL are rejected here and again by the server. POST .../database/query. | No | Yes | Yes | No |
database.tablesIntrospect public tables: columns, access rules, security notes. GET .../database/tables. | No | Yes | Yes | No |
deploy.runReturns the one command that deploys this project's app to the user's own Cloudflare account (run it in the app's folder: it links the deploy slot on first use), with the slot state and the latest deploys. Nothing is changed by this call. Scope: projects:read. | No | Yes | Yes | No |
docs.searchSearch Scribase docs: how to connect an app, row level security, branching, migrations, functions, storage, auth, tokens. Returns short answers with links. | No | Yes | Yes | No |
draft_x_launch_postTurn a launch into an X (Twitter) post or a numbered thread. Returns posts, each with text, weighted_length (twitter-text parseTweet: 280 max, URLs count as 23, emoji and CJK count extra) and intent_url (https://x.com/intent/post) that opens the composer prefilled. It does not call X, sign in, or post. mode single (default) is one post and refuses over 280; mode thread splits on sentence or word boundaries and numbers posts like 1/3. tone is excited (default), plain, technical, or casual. | No | Yes | Yes | No |
environment.createProvision an environment. POST /v1/environments. kind is preview, staging, or production; data_mode is schema_only, sanitized, or snapshot. | No | No | No | No |
environment.deleteDelete an environment. DELETE /v1/organizations/{id}/projects/{project}/environments/{env}. | Yes | No | No | No |
environment.getRead one environment, including its phase and last error. GET /v1/organizations/{id}/projects/{project}/environments/{env}. | No | Yes | Yes | No |
environment.listList environments in an organization, optionally filtered to a project. GET /v1/environments. | No | Yes | Yes | No |
environment.resumeResume a suspended environment. POST .../environments/{env}/resume. | No | No | No | No |
environment.suspendSuspend an environment. POST .../environments/{env}/suspend. | Yes | No | No | No |
errors.getOne issue with its latest event and stack trace. `issue_id` is the numeric id from errors.list. Scope: logs:read. | No | Yes | Yes | No |
errors.listErrors from the app on this branch, grouped into issues, with usage and the DSN to put in the Sentry SDK. Turn the slot on with capabilities.add slot errors. Scope: logs:read. | No | Yes | Yes | No |
export.runAssemble a runnable, signed export bundle. POST .../environments/{env}/exports. format is compose (default) or kustomize. | No | Yes | Yes | No |
extensions.enableEnable an allowlisted Postgres extension on a branch. With name vector and search_table: true it also creates a semantic search table and match function. Scope: database:write. | No | No | No | No |
extensions.listPostgres extensions this branch can enable (vector, pgmq, pg_jsonschema, index_advisor, ...) and which are on. Pass `category` to filter. Scope: database:read. | No | Yes | Yes | No |
flags.listThe flags of this branch's environment: key, on or off, value and description. Scope: projects:read. | No | Yes | Yes | No |
flags.setCreates or changes one flag of this branch's environment; apps read the change within a minute with no redeploy. Reversible: set it back the same way. Scope: projects:write. | No | No | No | No |
functions.deployCreate or replace an edge function (Deno, TypeScript). Pass `source` for a single file, or `files` (path -> source) with an `entrypoint`. It is served at <project URL>/functions/v1/<name>. Scope: functions:write. | No | No | No | No |
functions.listEdge functions deployed to a branch. Scope: functions:read. | No | Yes | Yes | No |
functions.logsRecent log lines of one edge function. Scope: logs:read. | No | Yes | Yes | No |
import.postgresImport a plain Postgres database (Neon, Render, RDS, self-hosted) into an environment. POST /v1/imports. Only a connection string is needed: unlike Supabase, there is no platform API alongside the database, so no service key or storage is asked for. With dry_run true it reports what would move and changes nothing; without it the import starts in the background (so requires confirm) and returns an import_id to follow with import.status. | No | No | No | No |
import.statusFollow a background import. GET /v1/imports/{id}. Returns status (running, succeeded, failed, interrupted), the current phase, counts moved so far, findings, errors, whether it is resumable, and the full report once it has finished. | No | Yes | Yes | No |
import.supabaseImport a live Supabase project into an environment. POST /v1/imports. With dry_run true it reports what would move and changes nothing; without it the import starts in the background (so requires confirm) and returns an import_id to follow with import.status. | No | No | No | No |
insights.getCollect workload from the tenant database and return analyzed, agent-actionable findings. GET .../insights. | No | Yes | Yes | No |
keys.getThe project URL and publishable (anon) key for supabase-js, as .env lines. The secret (server-only) key is included only with include_secret: true and the keys:secret scope; it bypasses row level security and must never reach client code. Scope: keys:read. | No | Yes | Yes | No |
links.createA short link that opens the app on `path` (and after install, on first launch); a computer goes to the web fallback with the same path. Answers the code and URL. Scope: functions:write. | No | No | No | No |
links.listThe branch's link host, what still stops links from opening the app, the short links with their in-app paths and clicks, and last week's clicks by platform. Scope: logs:read. | No | Yes | Yes | No |
logs.getRecent log lines for a branch, newest first: auth, rest, storage, realtime, functions or gateway. Scope: logs:read. | No | Yes | Yes | No |
logs.tailTail the environment's most-recent log lines, newest first. GET .../logs. level is debug, info, warn, or error. from is an opaque pagination cursor. | No | Yes | Yes | No |
member.putSet a member's role. PUT /v1/organizations/{id}/memberships. Role is one of owner, admin, developer, viewer. | No | No | No | No |
metrics.getGet environment metrics. GET .../metrics. Optional period: the window the server accepts (e.g. 1h, 24h, 7d). | No | Yes | Yes | No |
migrate.runPlan, lint, and optionally apply migrations. POST .../environments/{env}/migrations. migrations is a JSON array of {version,name,up,down?}. Without apply it only plans and lints; with apply true it applies and so requires confirm. | No | No | No | No |
migrations.applyRecord and apply one migration (name + SQL) in a single transaction, then reload the REST API's schema cache. It is linted first: a table without row level security is blocked. dry_run: true only lints. Destructive SQL needs confirm: true and the destructive scope (production:destructive on production). Scope: database:write. | Yes | No | No | No |
migrations.listMigrations already applied to a branch, oldest first. Scope: database:read. | No | Yes | Yes | No |
operation.getPoll an asynchronous operation. GET /v1/operations/{id}. Requires the owning organization so the read stays inside its tenant. | No | Yes | Yes | No |
org.getRead an organization. GET /v1/organizations/{id}. | No | Yes | Yes | No |
org.listList all organizations the caller belongs to. GET /v1/organizations. | No | Yes | Yes | No |
org.putCreate or update an organization. PUT /v1/organizations/{id}. | No | No | No | No |
ota.releasesPublished releases, newest first: id, platform, channel, target app version, whether it is on, the share of devices that get it, and its message. Scope: functions:read. | No | Yes | Yes | No |
ota.rollbackTurns off the newest release that is on for a platform and channel; devices on it go back to the release before it (or the bundle built into the app) on their next launch. Needs "confirm": true after the user agrees. Scope: functions:write. | Yes | No | No | No |
ota.statusWhether over-the-air updates are set up on this branch, the update URL the app reads, and the newest release per platform and channel. Set it up with capabilities.add slot ota (or `scribase ota setup`); publish with the unmodified hot-updater CLI (`npx hot-updater deploy -p ios`). Scope: functions:read. | No | Yes | Yes | No |
policy.simulateApply the schema to a scratch branch and prove tenant isolation: two users, an anonymous client, forged ownership, ownership transfer. Returns a token only when every check passes. | No | No | No | No |
policy.testRun the Aegis mutation harness: prove isolation on a fresh branch, then break each guarantee on purpose (FORCE RLS removed, a policy made USING (true), a WITH CHECK dropped) on throwaway branches and require every break to be caught. Returns an apply token only when the baseline is safe and no mutant slipped through. Use this before schema.apply or merging a preview branch, and confirm with the user first. | No | No | No | No |
project.getRead a project. GET /v1/organizations/{id}/projects/{project}. Also starts the project's production environment in the background, so the next query does not wait for a cold start. | No | Yes | Yes | No |
project.listList all projects in an organization. GET /v1/organizations/{id}/projects. | No | Yes | Yes | No |
project.putCreate or update a project. PUT /v1/organizations/{id}/projects/{project}. | No | No | No | No |
projects.createCreate a new backend (Postgres, Auth, Storage, Realtime, Functions) and wait until it is live. Everything is optional: the name, region and database engine are picked for you. Returns the project URL and publishable key, ready for createClient(). If the project adds to this month's bill the answer is 402 confirm_billable with the amount: ask the user, and only if they approve call again with confirm_billable_cents. Scope: projects:write. | No | No | No | No |
projects.listList your projects with their branches and status. Start here to find project ids. Scope: projects:read. | No | Yes | Yes | No |
projects.startBootstrap a real backend (Postgres, Auth, Storage, Realtime, Functions) with no account and no bearer token: call this before `initialize` ever sees an Authorization header. Solves its own proof-of-work, creates a temporary project (expires in about 72h unless claimed), and returns connection details, a project-scoped agent token you can use as the bearer for every tool after this one, a claim_url, and claim_before (the UTC time the project is deleted). Always show the person the `keep.hint` line (or `tell_the_person`) right away: "Keep this project before <claim_before>: <claim_url>" — the project is deleted at that time otherwise, and only a person can claim it (sign up + card, same URL and keys). If you already have a bearer token, use projects.create instead. | No | No | No | No |
push.send_testSends one push to every device of one app user (by `user_id` or `email`) through the Expo push service. Answers devices, sent, failed and pruned (dead tokens removed). Scope: functions:write. | No | No | No | No |
push.statusWhether push is set up on this branch and how many devices and users it reaches. Set it up with capabilities.add slot push. Scope: logs:read. | No | Yes | Yes | No |
schedule.createRun SQL or a function on a timer. `schedule` is five cron fields in UTC ("0 3 * * *") or "N seconds" (1 to 59). Give exactly one of `sql` or `function`; `payload` goes with `function`. Jobs run while the project sleeps and every run is logged. Scope: database:write. | No | No | No | No |
schedule.deleteDelete a job and stop its runs. Show the user which job goes, then call with confirm: true. Scope: database:write. | Yes | No | No | No |
schedule.listThe branch's scheduled jobs (pg_cron): name, schedule, target, whether active, and the last run. Scope: database:read. | No | Yes | Yes | No |
schedule.runRun a job once now, outside its timer. The run is logged like any other. Scope: database:write. | No | No | No | No |
schedule.runsRecent runs of one job: when, how long, succeeded or failed, and the message. Scope: database:read. | No | Yes | Yes | No |
schedule.updateChange a job: `active` false pauses it, true resumes it; `schedule` sets a new timer. Scope: database:write. | No | No | No | No |
schema.applyApply a schema that policy.test (or policy.simulate) already proved safe. Takes the token it issued, not SQL — there is no way to apply a policy that has not been proven. | Yes | No | No | No |
schema.proposeCompile a schema and return the SQL it would apply. Read-only; touches no database. Row level security is always enabled and forced. | No | Yes | Yes | No |
sql.executeRun SQL on a branch as the project's database role (never a superuser). Read-only by default. For writes pass read_only: false (database:write). DROP, TRUNCATE, ALTER ... DROP and DELETE/UPDATE without WHERE are destructive: they need confirm: true plus the destructive scope, and on production also production:destructive. Prefer migrations.apply for schema changes. Scope: database:read. | Yes | No | No | No |
sql.explainExplain a single SELECT. Read-only; writes are refused. | No | Yes | Yes | No |
storage.bucketsList storage buckets in the environment. GET .../storage/buckets. | No | Yes | Yes | No |
storage.buckets.createCreate a storage bucket. Private by default; public: true makes objects readable by URL. Scope: storage:write. | No | No | No | No |
storage.buckets.listStorage buckets on a branch. Scope: storage:read. | No | Yes | Yes | No |
tables.describeColumns, primary key, foreign keys, indexes, row level security and policies of one table. Scope: database:read. | No | Yes | Yes | No |
tables.listTables on a branch with row counts, and whether row level security is on. Scope: database:read. | No | Yes | Yes | No |
types.generateThe supabase-js `Database` TypeScript type for a branch's schema. Save it as database.types.ts and use createClient<Database>(url, key). Scope: database:read. | No | Yes | Yes | No |
uptime.statusThe project's uptime checks with their current state (up, down or waiting), last result and public status page. Scope: projects:read. | No | Yes | Yes | No |
usage.getGet the environment's flat-price usage envelope. GET .../usage. | No | Yes | Yes | No |
Details
- Registry status
- Active
- Published
- Oct 13, 2026
- Updated
- Oct 13, 2026
- Repository
- Not given
- Categories (suggested)
- DatabasesSuggested categories are assigned automatically from the registry text and may be wrong. Verified operators can correct them.
- GDPR
- Not declared