Skip to main content

Scribase

com.scribase/scribaseVersion 1.0.0

Supabase-compatible Postgres for agents: projects, branches, SQL, auth, storage, email.

Status

Responds171 msAnswered our handshake without sign-in.

Registry data may be out of date

We could not refresh it, so this page shows the last copy.
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 ms
No sign-in

Claude Code

claude mcp add --transport http scribase https://api.scribase.com/mcp

Claude Desktop and claude.ai

Settings > Connectors > Add custom connector
Name: scribase
Remote MCP server URL: https://api.scribase.com/mcp

Cursor

{
  "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.

Host your own MCP server on run.zero

Tools

98 tools

Tools of Scribase
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.NoYesYesNo
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.NoYesYesNo
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.NoYesYesNo
apikey.listList API keys for an organization. GET /v1/organizations/{id}/api-keys.NoYesYesNo
apikey.revokeRevoke an API key. DELETE /v1/organizations/{id}/api-keys/{key_id}.YesNoNoNo
audit.listList audit events for an organization. GET /v1/organizations/{id}/audit-events. Pass after and limit together to page.NoYesYesNo
auth.config.getAuth settings (site URL, redirect allow list, JWT expiry, sign-up rules) and providers. Scope: auth:read.NoYesYesNo
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.NoNoNoNo
auth.usersList auth users via the per-environment GoTrue admin API. GET .../auth/users.NoYesYesNo
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.NoNoNoNo
backup.getGet one backup record. GET /v1/organizations/{id}/projects/{project}/backups/{backup_id}?environment={env}.NoYesYesNo
backup.listList durable backups for an environment, newest first. GET .../environments/{env}/backups.NoYesYesNo
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.YesNoNoNo
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.NoYesYesNo
branch.diffTwo-way schema diff between two environments of a project. POST /v1/organizations/{id}/projects/{project}/branches/diff.NoYesYesNo
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.NoNoNoNo
branch.listList recorded branches for a project. GET /v1/organizations/{id}/projects/{project}/branches.NoYesYesNo
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.YesNoNoNo
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.NoNoNoNo
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.NoNoNoNo
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.YesNoNoNo
branches.listBranches of a project with kind, status, parent and expiry. Production is protected. Scope: branches:read.NoYesYesNo
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.NoNoNoNo
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.NoNoNoNo
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.YesNoNoNo
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.YesNoNoNo
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.NoNoNoNo
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.NoYesYesNo
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.NoYesYesNo
database.tablesIntrospect public tables: columns, access rules, security notes. GET .../database/tables.NoYesYesNo
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.NoYesYesNo
docs.searchSearch Scribase docs: how to connect an app, row level security, branching, migrations, functions, storage, auth, tokens. Returns short answers with links.NoYesYesNo
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.NoYesYesNo
environment.createProvision an environment. POST /v1/environments. kind is preview, staging, or production; data_mode is schema_only, sanitized, or snapshot.NoNoNoNo
environment.deleteDelete an environment. DELETE /v1/organizations/{id}/projects/{project}/environments/{env}.YesNoNoNo
environment.getRead one environment, including its phase and last error. GET /v1/organizations/{id}/projects/{project}/environments/{env}.NoYesYesNo
environment.listList environments in an organization, optionally filtered to a project. GET /v1/environments.NoYesYesNo
environment.resumeResume a suspended environment. POST .../environments/{env}/resume.NoNoNoNo
environment.suspendSuspend an environment. POST .../environments/{env}/suspend.YesNoNoNo
errors.getOne issue with its latest event and stack trace. `issue_id` is the numeric id from errors.list. Scope: logs:read.NoYesYesNo
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.NoYesYesNo
export.runAssemble a runnable, signed export bundle. POST .../environments/{env}/exports. format is compose (default) or kustomize.NoYesYesNo
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.NoNoNoNo
extensions.listPostgres extensions this branch can enable (vector, pgmq, pg_jsonschema, index_advisor, ...) and which are on. Pass `category` to filter. Scope: database:read.NoYesYesNo
flags.listThe flags of this branch's environment: key, on or off, value and description. Scope: projects:read.NoYesYesNo
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.NoNoNoNo
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.NoNoNoNo
functions.listEdge functions deployed to a branch. Scope: functions:read.NoYesYesNo
functions.logsRecent log lines of one edge function. Scope: logs:read.NoYesYesNo
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.NoNoNoNo
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.NoYesYesNo
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.NoNoNoNo
insights.getCollect workload from the tenant database and return analyzed, agent-actionable findings. GET .../insights.NoYesYesNo
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.NoYesYesNo
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.NoNoNoNo
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.NoYesYesNo
logs.getRecent log lines for a branch, newest first: auth, rest, storage, realtime, functions or gateway. Scope: logs:read.NoYesYesNo
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.NoYesYesNo
member.putSet a member's role. PUT /v1/organizations/{id}/memberships. Role is one of owner, admin, developer, viewer.NoNoNoNo
metrics.getGet environment metrics. GET .../metrics. Optional period: the window the server accepts (e.g. 1h, 24h, 7d).NoYesYesNo
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.NoNoNoNo
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.YesNoNoNo
migrations.listMigrations already applied to a branch, oldest first. Scope: database:read.NoYesYesNo
operation.getPoll an asynchronous operation. GET /v1/operations/{id}. Requires the owning organization so the read stays inside its tenant.NoYesYesNo
org.getRead an organization. GET /v1/organizations/{id}.NoYesYesNo
org.listList all organizations the caller belongs to. GET /v1/organizations.NoYesYesNo
org.putCreate or update an organization. PUT /v1/organizations/{id}.NoNoNoNo
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.NoYesYesNo
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.YesNoNoNo
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.NoYesYesNo
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.NoNoNoNo
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.NoNoNoNo
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.NoYesYesNo
project.listList all projects in an organization. GET /v1/organizations/{id}/projects.NoYesYesNo
project.putCreate or update a project. PUT /v1/organizations/{id}/projects/{project}.NoNoNoNo
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.NoNoNoNo
projects.listList your projects with their branches and status. Start here to find project ids. Scope: projects:read.NoYesYesNo
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.NoNoNoNo
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.NoNoNoNo
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.NoYesYesNo
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.NoNoNoNo
schedule.deleteDelete a job and stop its runs. Show the user which job goes, then call with confirm: true. Scope: database:write.YesNoNoNo
schedule.listThe branch's scheduled jobs (pg_cron): name, schedule, target, whether active, and the last run. Scope: database:read.NoYesYesNo
schedule.runRun a job once now, outside its timer. The run is logged like any other. Scope: database:write.NoNoNoNo
schedule.runsRecent runs of one job: when, how long, succeeded or failed, and the message. Scope: database:read.NoYesYesNo
schedule.updateChange a job: `active` false pauses it, true resumes it; `schedule` sets a new timer. Scope: database:write.NoNoNoNo
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.YesNoNoNo
schema.proposeCompile a schema and return the SQL it would apply. Read-only; touches no database. Row level security is always enabled and forced.NoYesYesNo
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.YesNoNoNo
sql.explainExplain a single SELECT. Read-only; writes are refused.NoYesYesNo
storage.bucketsList storage buckets in the environment. GET .../storage/buckets.NoYesYesNo
storage.buckets.createCreate a storage bucket. Private by default; public: true makes objects readable by URL. Scope: storage:write.NoNoNoNo
storage.buckets.listStorage buckets on a branch. Scope: storage:read.NoYesYesNo
tables.describeColumns, primary key, foreign keys, indexes, row level security and policies of one table. Scope: database:read.NoYesYesNo
tables.listTables on a branch with row counts, and whether row level security is on. Scope: database:read.NoYesYesNo
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.NoYesYesNo
uptime.statusThe project's uptime checks with their current state (up, down or waiting), last result and public status page. Scope: projects:read.NoYesYesNo
usage.getGet the environment's flat-price usage envelope. GET .../usage.NoYesYesNo

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

Are you the operator? Claim this listing