Appwrite MCP server

Appwrite's own MCP server for running projects, databases, users, storage and functions from a chat client

Official · Appwrite Python Remote (hosted) · Streamable HTTPLocal · stdio Cloud platformsDatabasesDeveloper tools

67 popularity score ★ 72 ↓ 132k/mo

Connect your client

Remote (hosted)

Add in one click

Opens the app, which asks before it adds the server.

Or add it by command or config

Claude Codeterminal, then run /mcp in a session to sign in
claude mcp add --transport http appwrite https://mcp.appwrite.io/
Claude (desktop and web)Settings → Connectors → Add custom connector
https://mcp.appwrite.io/
Cursor~/.cursor/mcp.json or .cursor/mcp.json
{
  "mcpServers": {
    "appwrite": {
      "url": "https://mcp.appwrite.io/"
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "appwrite": {
      "type": "http",
      "url": "https://mcp.appwrite.io/"
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.appwrite]
url = "https://mcp.appwrite.io/"
windsurf~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "appwrite": {
      "serverUrl": "https://mcp.appwrite.io/"
    }
  }
}
Gemini CLIterminal
gemini mcp add --transport http appwrite https://mcp.appwrite.io/
opencodeopencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "appwrite": {
      "type": "remote",
      "url": "https://mcp.appwrite.io/",
      "enabled": true
    }
  }
}
Local (PyPI)

Add in one click

Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.

Or add it by command or config

It needs APPWRITE_PROJECT_ID, APPWRITE_API_KEY. Replace each <NAME> with your value.

Claude CodeTerminal
claude mcp add appwrite -e APPWRITE_PROJECT_ID=<APPWRITE_PROJECT_ID> -e APPWRITE_API_KEY=<APPWRITE_API_KEY> -- uvx mcp-server-appwrite
Claude Desktopclaude_desktop_config.json
{
  "mcpServers": {
    "appwrite": {
      "command": "uvx",
      "args": [
        "mcp-server-appwrite"
      ],
      "env": {
        "APPWRITE_PROJECT_ID": "<APPWRITE_PROJECT_ID>",
        "APPWRITE_API_KEY": "<APPWRITE_API_KEY>"
      }
    }
  }
}
Cursor~/.cursor/mcp.json
{
  "mcpServers": {
    "appwrite": {
      "command": "uvx",
      "args": [
        "mcp-server-appwrite"
      ],
      "env": {
        "APPWRITE_PROJECT_ID": "<APPWRITE_PROJECT_ID>",
        "APPWRITE_API_KEY": "<APPWRITE_API_KEY>"
      }
    }
  }
}
VS Code.vscode/mcp.json
{
  "servers": {
    "appwrite": {
      "type": "stdio",
      "command": "uvx",
      "args": [
        "mcp-server-appwrite"
      ],
      "env": {
        "APPWRITE_PROJECT_ID": "<APPWRITE_PROJECT_ID>",
        "APPWRITE_API_KEY": "<APPWRITE_API_KEY>"
      }
    }
  }
}
Codex~/.codex/config.toml
[mcp_servers.appwrite]
command = "uvx"
args = ["mcp-server-appwrite"]

[mcp_servers.appwrite.env]
APPWRITE_PROJECT_ID = "<APPWRITE_PROJECT_ID>"
APPWRITE_API_KEY = "<APPWRITE_API_KEY>"
Gemini CLITerminal
gemini mcp add --scope user -e APPWRITE_PROJECT_ID=<APPWRITE_PROJECT_ID> -e APPWRITE_API_KEY=<APPWRITE_API_KEY> appwrite uvx -- mcp-server-appwrite

Settings 8

APPWRITE_PROJECT_ID Required: ID of the Appwrite project to work on (local run).
APPWRITE_API_KEY secret Required: Project API key; its scopes decide what the tools can do (local run).
APPWRITE_ENDPOINT Optional: API base of your instance ending in /v1, e.g. http://localhost:9501/v1 for local Docker; set it for self-hosted. Default https://cloud.appwrite.io/v1.
APPWRITE_ENVIRONMENT_ID Optional: Cloud environment such as staging to act in; fixed for the server's lifetime.
OPENAI_API_KEY secret Optional: Enables docs search; one embedding call per search. For appwrite_search_docs.
DOCS_SEARCH_LIMIT Optional: Pages returned by docs search, capped at 10. Default 5. For appwrite_search_docs.
DOCS_SEARCH_MIN_SCORE Optional: Minimum similarity score for a docs match. Default 0.25. For appwrite_search_docs.
MCP_APPS Optional: Set to 1 to offer the interactive view tools to clients that render MCP Apps. For appwrite_show.

What it does

This server gives an MCP client access to the Appwrite API: tables and documents, users and teams, storage buckets, functions, messaging, sites and, on Appwrite Cloud, the console side such as projects and organizations. Appwrite publishes it in its own GitHub organization.

You don't get one tool per API method. The client sees a handful of tools instead. appwrite_get_context summarises the workspace and appwrite_search_tools looks up methods in an internal catalog. Reads (list and get) run through appwrite_call_tool. Everything else, from create to delete, goes through appwrite_call_write_tool, which wants confirm_write=true plus a one-line reason of up to 256 characters. Appwrite stores that reason in the project's audit log, so the Activity tab shows why each change was made. A reason that is blank, too long or has line breaks is rejected before any request goes out.

On Appwrite Cloud each call can also take an environment_id, for example staging, together with the project_id the environment belongs to. A local run has its environment fixed by APPWRITE_ENVIRONMENT_ID and refuses calls that name a different one.

What the catalog holds depends on how you connect. The hosted server at https://mcp.appwrite.io/ signs in through the browser with OAuth and registers 1029 methods across 41 services. A local stdio run with a project API key gets 689 methods across 27 services, since project keys can't reach console routes. The local run is aimed at self-hosted instances, though without APPWRITE_ENDPOINT it talks to https://cloud.appwrite.io/v1.

Results longer than 4000 characters come back as a preview plus an MCP resource address. The server keeps the last 50 of them. A docs tool, appwrite_search_docs, only shows up when OPENAI_API_KEY is set, and each query costs one OpenAI embedding call. Setting MCP_APPS=1 adds appwrite_show, an interactive view of tables, deployments, files, users or usage for clients that can render MCP Apps.

What it needs

To run it yourselfPython 3.12+
Runs onmacOS, Windows, Linux
Appwrite CloudFree tierFor the hosted endpoint, signed in by OAuth
AppwriteYour own instanceLocal run: a project ID and a project API key with the scopes you want
Also
  • uv on PATH for the local uvx command

Hosted: a client that can do OAuth sign-in. Codex also needs `codex mcp login appwrite`. Claude Desktop custom connectors need a Pro or Max plan, or an owner on Team and Enterprise plans. Otherwise bridge with `npx -y mcp-remote https://mcp.appwrite.io/`, which needs Node.js, as do JetBrains and Cline. Local: create a project API key in the Appwrite Console and set APPWRITE_ENDPOINT to your instance's API base ending in /v1, not the Console URL.

Limits

  • Not covered The local API-key run hides console services such as organizations, projects, domains, billing, migrations, dedicated databases, usage, VCS and WAF administration
  • Not covered Each call is still limited by the API key's scopes or the scopes approved at OAuth sign-in
  • Limit Writes are refused without confirm_write=true and a one-line reason of at most 256 characters
  • Limit A local run works in one environment, set by APPWRITE_ENVIRONMENT_ID; run one server per environment
  • Not covered Environments exist on Appwrite Cloud only; self-hosted Appwrite has none, and older self-hosted versions ignore the reason header
  • Limit appwrite_search_docs is absent unless OPENAI_API_KEY is set; each search is one paid OpenAI embedding call
  • Size cap Catalog search returns 8 matches by default, up to 20; docs search 5 pages by default, up to 10
  • Size cap Results over 4000 characters are stored as resources, and only the latest 50 are kept
  • Early release MCP Events (webhook subscriptions to project changes) are described as in development and not available yet
  • Limit The local process exits at start if endpoint, project ID or key is wrong, or the key can read none of the services it probes

The local API-key run cannot reach console services (organizations, projects, domains, billing, migrations, dedicated databases, usage, VCS and WAF administration); those are on the hosted server only. Even on the hosted server, each call is limited by the scopes granted at sign-in. Documentation search is absent unless OPENAI_API_KEY is set. MCP Events (webhook subscriptions to project changes) are described in its docs as in development and not available yet. The local process exits at start if the endpoint, project ID or key is wrong, or the key has no readable scope among those it probes.

Who it suits

A good fit for Appwrite Cloud users who want an assistant to look at and change their projects without handling keys. The hosted endpoint signs in through the browser, reaches the full catalog and can work in environments such as staging. Self-hosted Appwrite users get a local stdio run tied to one project and one key. Since the write tool can create and delete data, grant the key or OAuth consent only the scopes you need, and use the audit log reasons to review what changed. If you only want documentation answers, note that the docs tool needs your own OpenAI key.

Tools 7

5 only read, 1 changes things, 1 can delete or overwrite. A ? marks an optional parameter.

appwrite_get_context
Summarises the project, or with OAuth the account, organization and projects, and lists a project's environmentsproject_id?: stringenvironment_id?: stringorganization_id?: stringinclude_services?: booleanservice_detail?: enumsample_limit?: integer
appwrite_search_tools
Finds API methods in the internal catalog and says which call tool runs eachquery: stringservice_hints?: anyargument_hints?: objectinclude_mutating?: booleanlimit?: integer
appwrite_call_tool
Runs a read-only catalog method (list or get)tool_name: stringarguments?: objectproject_id?: stringorganization_id?: stringenvironment_id?: string
appwrite_call_write_tool deletes
Runs a catalog method that creates, updates or deletes datatool_name: stringreason: stringconfirm_write?: booleanarguments?: objectproject_id?: stringorganization_id?: stringenvironment_id?: string
appwrite_search_docs
Semantic search over Appwrite documentation, present only with OPENAI_API_KEY setquery: stringlimit?: integer
appwrite_show
Opens an interactive view of a table, deployment, executions, files, users or usage; only with MCP_APPS=1view: enum
appwrite_view_write changes
Applies a change the user confirmed inside the interactive view, from a fixed set of writes; only with MCP_APPS=1tool_name: enumarguments: objectconfirm_write: booleanproject_id?: stringenvironment_id?: stringreason?: string

Resources 2

appwrite://operator/catalog
The full internal method catalog as JSON
appwrite://operator/results/{result_id}
A stored large result from a call or docs search

Similar servers