Skip to content

mcp for api changelog

io.github.appwrite/mcp-for-api

2 changes recorded. MCP Harbor re-reads this listing from the official registry every six hours and asks the live server what it exposes, and keeps what changed between one look and the next.

  • AGENTS.md +21 −10

    https://raw.githubusercontent.com/appwrite/mcp-for-api/HEAD/AGENTS.md

    −   key (`APPWRITE_PROJECT_ID`, `APPWRITE_API_KEY`, `APPWRITE_ENDPOINT`).− | `operator.py` | The compact "operator" surface — `appwrite_search_tools`, `appwrite_call_tool`, result/resource storage, write confirmation. |− | `context.py` | `appwrite_get_context` — workspace summary (project, services, account/org for OAuth). |− needs no credentials. Dashboards live in the `dashboards` repo under `MCP/`.− The server boots in a compact workflow: the client sees up to 4 tools− (`appwrite_get_context`, `appwrite_search_tools`, `appwrite_call_tool`, and− optionally `appwrite_search_docs`), while the full OAuth Appwrite catalog (41− 27-service catalog. Mutating hidden tools require− `confirm_write=true`. Large outputs are stored as MCP resources and returned as a− preview + resource URI.+   key (`APPWRITE_PROJECT_ID`, `APPWRITE_API_KEY`, `APPWRITE_ENDPOINT`, and+   optionally `APPWRITE_ENVIRONMENT_ID` for a project environment).+ | `operator.py` | The compact "operator" surface — `appwrite_search_tools`, `appwrite_call_tool` / `appwrite_call_write_tool`, tool annotations, result/resource storage, write confirmation. |+ | `context.py` | `appwrite_get_context` — workspace summary (project, services, account/org for OAuth, a focused project's environments). |+ | `headers.py` | Per-call request headers: `X-Appwrite-Environment` (a project environment, next to the project's ID) and `X-Appwrite-Reason` (why a write is made, validated and percent-encoded as Appwrite expects). |+ | `apps/` | MCP Apps (behind `flags.APPS`): `protocol.py` (the `io.modelcontextprotocol/ui` extension and per-client gating), `views.py` (`appwrite_show` and the view-only `appwrite_view_write`), `resource.py` (`ui://appwrite/view`, served from `assets/view.html`: plain JavaScript, no build step). See [docs/apps.md](docs/apps.md). |+ needs no credentials. The MCP dashboard lives in `appwrite-labs/monitoring` at+ `dashboards/Cloud/mcp.json`, synced to monitoring.appwrite.systems by Grafana Git Sync.+ The server boots in a compact workflow: the client sees up to 5 tools+ (`appwrite_get_context`, `appwrite_search_tools`, `appwrite_call_tool` for+ reads, `appwrite_call_write_tool` for everything else, and optionally+ `appwrite_search_docs`), while the full OAuth Appwrite catalog (41+ 27-service catalog. Mutating hidden tools run only through+ `appwrite_call_write_tool` and require `confirm_write=true` and a one-line+ `reason` (sent as `X-Appwrite-Reason`, recorded on the audit log), so each+ exposed tool's annotations match every call it accepts. Large outputs are stored as MCP+ resources and returned as a preview + resource URI.+ With MCP Apps on (`flags.APPS`), hosts that render them also see+ `appwrite_show`, whose result the host renders as an interactive view+ (`ui://appwrite/view`), and the view can call `appwrite_view_write`, which the+ model never sees. See [docs/apps.md](docs/apps.md).

  • AGENTS.md +24 −7

    https://raw.githubusercontent.com/appwrite/mcp-for-api/HEAD/AGENTS.md

    − optionally `appwrite_search_docs`), while the full OAuth Appwrite catalog (38− 26-service catalog. Mutating hidden tools require− `main`. **All four jobs must pass.**− 5. **Docker build** (`docker` job)− 6. **Integration tests** (`integration` job) — *CI runs these only for pushes and− - Add unit tests under `tests/unit/` for any non-trivial logic; add integration−   coverage under `tests/integration/` when touching real API behavior.+ | `instructions.py` | `serverInfo.description` and the server instructions sent on initialize, rendered from `assets/instructions.json` (a description plus ordered, transport/docs-conditional Markdown sections). Edit the JSON to change the wording; keep the `pyproject.toml` description in sync (a test enforces it). |+ | `events/` | MCP Events (behind `flags.EVENTS`, HTTP only): `catalog.py` (event catalog), `protocol.py` (capability, `events/list` and the subscribe methods), `subscriptions.py` + `webhooks.py` (`events/subscribe` / `events/unsubscribe`: one managed Appwrite webhook per subscription), `envelope.py` (subscription state sealed with the `mcp-event-subscriptions` JWE profile), `egress.py` + `delivery.py` (SSRF-safe signed delivery), `projection.py` + `ingress.py` (Appwrite webhook ingress at `/appw+ optionally `appwrite_search_docs`), while the full OAuth Appwrite catalog (41+ 27-service catalog. Mutating hidden tools require+ uv sync --group e2e          # + e2e-test deps+ `main`. **All five jobs must pass.**+ 5. **E2E tests** (`e2e` job)+    uv sync --group e2e+    uv run --group e2e python -m unittest discover -s tests/e2e -v+    ```+    Boots the real hosted HTTP app on a random localhost port and drives it over+    real HTTP the way an MCP client does. No credentials: only the OAuth token+    verifier is stubbed. Runs on every PR, forks included. The push delivery+    flows start a real `dragonfly` (CI) or `redis-server`, which must be on+    `PATH` (`brew install redis` or `apt-get install redis-server`). Prefer adding+    assertions to an existing flow over adding unit tests; add a unit test only+    for what no e2e flow can reach, and say why in its module docstring.+ 6. **Docker build** (`docker` job)+    ```bash+ 7. **Integration tests** (`integration` job) — *CI runs these only for pushes and+ - Cover hosted-server behavior with end-to-end flows under `tests/e2e/` (shared+   harness in `tests/e2e/support.py`). Add unit tests under `tests/unit/` only for+   what no e2e flow can reach. Add integration coverage under+   `tests/integration/` when touching real Appwrite API behavior.