Skip to main content
Glama
README.md
# appbase

appbase puts a Supabase account within reach of an MCP client or a
terminal. Projects and organizations can be listed, inspected,
created, paused, and restored. Inside a project you can look at the
schema (tables, extensions, migrations), run SQL or apply a tracked
migration, read logs and security/performance advisors, fetch the
project URL and publishable keys, generate TypeScript types from the
live schema, list and deploy Edge Functions, manage storage buckets,
and work with preview branches — create, merge, reset, rebase, and
delete them.

A Supabase personal access token is required. Put it in the
`SUPABASE_ACCESS_TOKEN` environment variable; it is sent to the
Supabase Management API as a Bearer token and never appears in
output. When the variable is missing, every call fails with an error
that names it.

## Install

```bash
npx @reneturcios/appbase list_projects
```

Or run the container image:

```bash
docker run -i -e SUPABASE_ACCESS_TOKEN ghcr.io/cloudcorprecords/appbase
```

The container defaults to the MCP server (see below). Pass CLI
arguments to use it as a CLI instead.

## CLI

Every MCP tool is also a CLI subcommand. Tool arguments are passed as
one JSON object with `--json`; project-scoped tools take the project
reference as `project_id`:

```bash
export SUPABASE_ACCESS_TOKEN=<your Supabase personal access token>

appbase list_projects
appbase list_tables --json '{"project_id": "abcdefghijklmnopqrst"}'
appbase execute_sql --json '{"project_id": "abcdefghijklmnopqrst", "query": "select 1"}'
appbase get_advisors --json '{"project_id": "abcdefghijklmnopqrst", "type": "security"}'
appbase create_branch --json '{"project_id": "abcdefghijklmnopqrst", "name": "feat-x"}'

appbase --version
```

Results print as JSON. Exit codes: `0` on success, `1` when an API
call fails (including a missing `SUPABASE_ACCESS_TOKEN`), `2` for
usage errors.

## MCP server

One bin serves both faces. The `mcp` subcommand starts a stdio MCP
server:

```bash
npx -y @reneturcios/appbase mcp
```

MCP client configuration:

```json
{
  "mcpServers": {
    "appbase": {
      "command": "npx",
      "args": ["-y", "@reneturcios/appbase", "mcp"],
      "env": { "SUPABASE_ACCESS_TOKEN": "your Supabase personal access token" }
    }
  }
}
```

### Tools

| Tool | Input (required in bold) | What it does |
| --- | --- | --- |
| `list_tables` | **`project_id`**, `schemas` | Lists tables in the given schemas (default `public`). |
| `list_extensions` | **`project_id`** | Lists installed database extensions. |
| `list_migrations` | **`project_id`** | Lists applied migrations. |
| `execute_sql` | **`project_id`**, **`query`** | Runs raw SQL in the project's database. |
| `apply_migration` | **`project_id`**, **`name`**, **`query`** | Applies SQL as a tracked migration (for DDL). |
| `get_logs` | **`project_id`**, **`service`** | Recent logs for one service. |
| `get_advisors` | **`project_id`**, **`type`** | Security or performance advisors. |
| `get_project_url` | **`project_id`** | The project's `https://<ref>.supabase.co` API URL. |
| `get_publishable_keys` | **`project_id`** | Publishable / anon API keys for the project. |
| `generate_typescript_types` | **`project_id`**, `included_schemas` | TypeScript types generated from the schema. |
| `list_edge_functions` | **`project_id`** | Lists Edge Functions. |
| `get_edge_function` | **`project_id`**, **`function_slug`** | One Edge Function's details. |
| `deploy_edge_function` | **`project_id`**, **`name`**, **`files`**, `entrypoint_path`, `import_map_path` | Deploys an Edge Function from inline files. |
| `list_storage_buckets` | **`project_id`** | Lists storage buckets. |
| `create_storage_bucket` | **`project_id`**, **`name`**, `public`, `file_size_limit`, `allowed_mime_types` | Creates a storage bucket. |
| `list_branches` | **`project_id`** | Lists preview branches. |
| `create_branch` | **`project_id`**, **`name`**, `confirm_cost_id` | Creates a preview branch. |
| `delete_branch` | **`project_id`**, **`branch_id`** | Deletes a preview branch. |
| `merge_branch` | **`project_id`**, **`branch_id`** | Merges a branch's migrations and functions into production. |
| `reset_branch` | **`project_id`**, **`branch_id`**, `migration_version` | Resets a branch to its parent state. |
| `rebase_branch` | **`project_id`**, **`branch_id`** | Rebases a branch onto its parent. |
| `list_projects` | — | Lists all projects for the user. |
| `get_project` | **`id`** | One project's details. |
| `create_project` | **`name`**, **`organization_id`**, `region`, `confirm_cost_id` | Creates a project. |
| `pause_project` | **`project_id`** | Pauses a project. |
| `restore_project` | **`project_id`** | Restores a paused project. |
| `list_organizations` | — | Lists the user's organizations. |
| `get_organization` | **`id`** | One organization's details. |

All calls go to `https://api.supabase.com/v1`. SQL tools POST to the
project's `database/query` endpoint; `list_tables` and
`list_extensions` are catalog queries through that same endpoint, and
all other SQL passes through exactly as given.

## Development

```bash
npm install
npm run build   # tsc -> dist/
npm test        # node test runner over test/*.test.ts, no network (fake fetch fixtures)
npm run dev     # run the CLI from source via tsx
```

## License

MIT — see `LICENSE`.