Repository navigation
feat: use-case server instructions and serverInfo.description - #141
Conversation
Agents decide when to reach for a server from its instructions, so lead with what can be built (auth, every database type, storage, functions, hosting, messaging, network) rather than "manage Appwrite projects". The list follows the appwrite-console 0.12 catalog and current docs; console-only APIs (dedicated databases, domain registration, migrations, usage) are omitted from the API-key stdio wording. The prose moves to assets/instructions.json as ordered sections with transport/docs conditions, so wording changes no longer touch code.
🔵 Tier A · Mergeable after minor fixes
The PR moves MCP instructions into an ordered JSON asset and expands the capability and workflow guidance, with sections conditioned on transport and documentation availability. It adds a shared Latest changes: The latest commit adds GitLab and Bitbucket alongside GitHub as listed Git deployment providers.
Note Not approving while a bug finding is open: Avoid advertising unavailable APIs in stdio server metadata Fix with agent prompt### Issue 1
src/mcp_server_appwrite/assets/instructions.json:2
**Avoid advertising unavailable APIs in stdio server metadata**
This description is passed to `Server` for both transports, but the stdio API-key catalog excludes the PostgreSQL/MySQL services and domain registration. MCP clients use `serverInfo.description` for discovery, so stdio connections are still advertised as offering capabilities they cannot invoke; make this description transport-aware or phrase it as Appwrite platform capabilities rather than what this connection can do.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.📂 Walkthrough · 10
⏳ Still open from earlier reviews · 1
Reviewed the commits since |
Replace the product list with instructions that tell agents when to reach for Appwrite (any app needing a backend, managed database or hosting) and what each service covers, rendered as Markdown so the structure survives. Keep the tool workflow guidance, and tell stdio sessions which APIs need the hosted server. Set serverInfo.description (spec 2025-11-25), which clients read when choosing servers and we never sent, from the same JSON file. Align the PyPI description with it and give the registry a 100-character variant.
| @@ -0,0 +1,111 @@ | |||
| { | |||
| "description": "Build and deploy application backends. Add authentication, PostgreSQL/MySQL databases, vector databases, storage, serverless functions, realtime, messaging, hosting, domains, CDN and firewall.", | |||
There was a problem hiding this comment.
Avoid advertising unavailable APIs in stdio server metadata
This description is passed to Server for both transports, but the stdio API-key catalog excludes the PostgreSQL/MySQL services and domain registration. MCP clients use serverInfo.description for discovery, so stdio connections are still advertised as offering capabilities they cannot invoke; make this description transport-aware or phrase it as Appwrite platform capabilities rather than what this connection can do.
Prompt To Fix With AI
This is a comment left during a code review.
Path: src/mcp_server_appwrite/assets/instructions.json
Line: 2
Comment:
**Avoid advertising unavailable APIs in stdio server metadata**
This description is passed to `Server` for both transports, but the stdio API-key catalog excludes the PostgreSQL/MySQL services and domain registration. MCP clients use `serverInfo.description` for discovery, so stdio connections are still advertised as offering capabilities they cannot invoke; make this description transport-aware or phrase it as Appwrite platform capabilities rather than what this connection can do.
---
For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.🟡 Minor · bug · Reply if this doesn't apply.
GitLab, Bitbucket and Gitea are OAuth login providers; the deploy docs and the console SDK only support GitHub repositories.
What
appwrite_get_context→appwrite_search_tools→appwrite_call_tool,confirm_write,project_id/organization_id, uploads, how results come back, and docs search. On stdio it also says that dedicated databases, domain registration, migrations and usage metrics need the hosted server, because a project API key can't reach those APIs.serverInfo.descriptionis now set. It has been in the spec since 2025-11-25 so clients can see what a server does, and we never sent it: "Build and deploy application backends. Add authentication, PostgreSQL/MySQL databases, vector databases, storage, serverless functions, realtime, messaging, hosting, domains, CDN and firewall."assets/instructions.json: adescriptionplus ordered sections of Markdown lines, each section with optionaltransportsanddocsconditions. Lines are joined with newlines and sections with blank lines, so the structure survives.instructions.pyloads and checks the file. Changing the wording no longer touches code.pyproject.tomldescription now matchesserverInfo.description, and a test keeps them in sync.server.template.jsongets a variant within the Registry's 100-character limit: "Build and deploy backends: auth, Postgres/MySQL/vector databases, storage, functions, hosting, CDN".Neither the MCP spec nor the Registry
server.jsonschema has a keywords field, so the capability wording lives indescriptionandinstructions.Why
MCP clients decide when to use a server from its description and instructions. Describing what can be built, instead of "manage your Appwrite projects", matches requests from agents that don't already have Appwrite in mind.
Testing
ruff,black --check,pyright: clean.pyproject.tomlandserverInfo.descriptiontexts match.initializeflow now checksserverInfo.descriptionand the start of the instructions over real HTTP.scripts/render_server_json.pyrenders the new Registry description.