MCP server for controlled Appwrite mutations with preview/apply workflow, plan hashing, per-target auth contexts, and safety checks for destructive operations.
For personal local use, copy these two blocks.
- Save as
/absolute/path/project-auth.json:
{
"default_endpoint": "https://your-appwrite-domain/v1",
"projects": {
"YOUR_PROJECT_ID": {
"api_key": "sk_your_api_key"
}
}
}- Add this under
mcpin~/.config/opencode/opencode.json:
{
"appwrite_local": {
"type": "local",
"enabled": true,
"environment": {
"APPWRITE_PROJECT_AUTH_FILE": "/absolute/path/project-auth.json",
"APPWRITE_MCP_CONFIRM_SECRET": "change-me-before-production"
},
"command": [
"npx",
"-y",
"--package",
"https://github.com/sigee-min/appwrite-mcp/releases/latest/download/appwrite-mcp-npx.tgz",
"appwrite-mcp"
]
}
}Verify with opencode mcp list.
For version pinning and release assets, see docs/releases.md.
APPWRITE_PROJECT_AUTH_FILE=/absolute/path/project-auth.json \
APPWRITE_MCP_CONFIRM_SECRET=change-me-before-production \
npx -y --package https://github.com/sigee-min/appwrite-mcp/releases/latest/download/appwrite-mcp-npx.tgz appwrite-mcpnpm install
APPWRITE_PROJECT_AUTH_FILE=/path/to/project-auth.json npm run devstdio is the default transport.
- JSON-RPC tools:
capabilities.list,context.get,targets.resolve,scopes.catalog.get,changes.preview,changes.apply,confirm.issue - Transports:
stdio(default),streamable-http(opt-in) - Safety controls: plan hash validation, confirmation tokens for critical destructive operations, auth-context resolution, secret redaction
- Read-only:
auth.users.list,database.list,function.list,function.execution.status - Mutations:
project.create|delete,database.create|upsert_collection|delete_collection,auth.users.create|update.*,function.create|update|deployment.trigger|execution.trigger - Compatibility alias:
auth.users.update(deprecated, still supported unless blocked)
changes.applyrequires matchingplan_idandplan_hashfrom preview.- Critical destructive operations require
confirm.issuetoken. project.*actions require management capability and management auth context.- Scope metadata in auth file is optional for user-facing setup.
- In production, set
APPWRITE_MCP_CONFIRM_SECRETto a non-default value.
Required shape:
{
"default_endpoint": "https://cloud.appwrite.io/v1",
"projects": {
"PROJECT_A": {
"api_key": "sk_a"
}
}
}Optional fields:
projects.<id>.aliasesandprojects.<id>.default_for_autodefaults.auto_target_project_idsanddefaults.target_selectormanagementauth context forproject.*operations
Example files: deploy/config/project-auth.example.json
APPWRITE_PROJECT_AUTH_FILE=/path/to/project-auth.json \
APPWRITE_MCP_ENABLE_STREAMABLE_HTTP=true \
APPWRITE_MCP_TRANSPORT=streamable-http \
npm run devAdditional bind settings:
APPWRITE_MCP_HTTP_HOST(default:127.0.0.1)APPWRITE_MCP_HTTP_PORT(default:8080)APPWRITE_MCP_HTTP_PATH(default:/mcp)APPWRITE_MCP_ALLOW_REMOTE_HTTP=true(required for non-loopback bind)
npm test
npm run build
npm run test:openapi:online
npm run test:e2e:live
npm run test:e2e:live:extended
npm run smoke:e2e:manualcd deploy
cp .env.example .env
cp config/project-auth.example.json config/project-auth.json
docker compose up -d --build- API endpoint mapping:
docs/api-endpoint-mapping.md - Operations runbook:
docs/ops-runbook.md - Release runbook:
docs/releases.md - Manual smoke scenario:
docs/scn-020-manual-smoke.md
MIT. See LICENSE.