Firebase MCP Server
OFFICIAL SERVERFirebase's own MCP server, run from the Firebase CLI, for managing projects, data and deploys
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
Opens the app, which asks before it adds the server.
claude mcp add --transport http appwrite https://mcp.appwrite.io/https://mcp.appwrite.io/{
"mcpServers": {
"appwrite": {
"url": "https://mcp.appwrite.io/"
}
}
}{
"servers": {
"appwrite": {
"type": "http",
"url": "https://mcp.appwrite.io/"
}
}
}[mcp_servers.appwrite]
url = "https://mcp.appwrite.io/"{
"mcpServers": {
"appwrite": {
"serverUrl": "https://mcp.appwrite.io/"
}
}
}gemini mcp add --transport http appwrite https://mcp.appwrite.io/{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"appwrite": {
"type": "remote",
"url": "https://mcp.appwrite.io/",
"enabled": true
}
}
}Opens the app, which asks before it adds the server. Then replace each <NAME> in its settings with your value.
It needs APPWRITE_PROJECT_ID, APPWRITE_API_KEY. Replace each <NAME> with your value.
claude mcp add appwrite -e APPWRITE_PROJECT_ID=<APPWRITE_PROJECT_ID> -e APPWRITE_API_KEY=<APPWRITE_API_KEY> -- uvx mcp-server-appwrite{
"mcpServers": {
"appwrite": {
"command": "uvx",
"args": [
"mcp-server-appwrite"
],
"env": {
"APPWRITE_PROJECT_ID": "<APPWRITE_PROJECT_ID>",
"APPWRITE_API_KEY": "<APPWRITE_API_KEY>"
}
}
}
}{
"mcpServers": {
"appwrite": {
"command": "uvx",
"args": [
"mcp-server-appwrite"
],
"env": {
"APPWRITE_PROJECT_ID": "<APPWRITE_PROJECT_ID>",
"APPWRITE_API_KEY": "<APPWRITE_API_KEY>"
}
}
}
}{
"servers": {
"appwrite": {
"type": "stdio",
"command": "uvx",
"args": [
"mcp-server-appwrite"
],
"env": {
"APPWRITE_PROJECT_ID": "<APPWRITE_PROJECT_ID>",
"APPWRITE_API_KEY": "<APPWRITE_API_KEY>"
}
}
}
}[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 mcp add --scope user -e APPWRITE_PROJECT_ID=<APPWRITE_PROJECT_ID> -e APPWRITE_API_KEY=<APPWRITE_API_KEY> appwrite uvx -- mcp-server-appwriteAPPWRITE_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. |
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. |
DOCS_SEARCH_LIMIT |
Optional: Pages returned by docs search, capped at 10. |
DOCS_SEARCH_MIN_SCORE |
Optional: Minimum similarity score for a docs match. |
MCP_APPS |
Optional: Set to 1 to offer the interactive view tools to clients that render MCP Apps. |
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.
| To run it yourself | Python 3.12+ |
|---|---|
| Runs on | macOS, Windows, Linux |
| Appwrite Cloud | Free tierFor the hosted endpoint, signed in by OAuth |
| Appwrite | Your own instanceLocal run: a project ID and a project API key with the scopes you want |
| Also |
|
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.
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.
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.
5 only read, 1 changes things, 1 can delete or overwrite. A ? marks an optional parameter.
appwrite_get_contextproject_id?: stringenvironment_id?: stringorganization_id?: stringinclude_services?: booleanservice_detail?: enumsample_limit?: integerappwrite_search_toolsquery: stringservice_hints?: anyargument_hints?: objectinclude_mutating?: booleanlimit?: integerappwrite_call_tooltool_name: stringarguments?: objectproject_id?: stringorganization_id?: stringenvironment_id?: stringappwrite_call_write_tool deletestool_name: stringreason: stringconfirm_write?: booleanarguments?: objectproject_id?: stringorganization_id?: stringenvironment_id?: stringappwrite_search_docsquery: stringlimit?: integerappwrite_showview: enumappwrite_view_write changestool_name: enumarguments: objectconfirm_write: booleanproject_id?: stringenvironment_id?: stringreason?: stringappwrite://operator/catalogappwrite://operator/results/{result_id}