MCP server for Zed editor — extension management, settings, collaborator bridge
Server has 9 tools with basic structure but significant quality gaps. All tools have descriptions (good), but most descriptions are under 100 chars and lack actionable context. Input schemas are present for most tools but lack depth, parameters have type and description but no enums, ranges, or validation guidance. Output schemas are documented in descriptions but not formally in JSON Schema. Error handling exists but is generic. No tool annotations despite having destructive operations (zed_uninstall_extension). Naming is clear and verb-based (get_, set_, list_, install_, uninstall_, open_). Composition is reasonable, each tool has one responsibility. However, parameter descriptions are minimal (e.g., 'Extension ID to remove' lacks format/validation hints). No pagination support despite list_extensions and list_themes potentially returning large results. Overall: functional but below production baseline.
Read the full Zed settings.json. ## Return Format {"settings": dict, "path": str}
Get the current Zed theme from settings. ## Return Format {"theme": str, "message": str}
Install a Zed extension from the marketplace. Uses `zed --install <extension_id>` CLI command. ## Return Format {"success": bool, "extension": str, "message": str} ## Examples zed_install_extension("catppuccin") zed_install_extension("rust")
List all installed Zed extensions with name and version. ## Return Format {"extensions": [{"id": str, "name": str, "version": str}], "count": int, "message": str}
List all installed themes available in Zed. Scans the themes directory and extension-installed themes. ## Return Format {"themes": [str], "count": int, "message": str}
Open a file or directory in Zed using the CLI.
Missing tool annotations for destructive operations. zed_uninstall_extension and zed_set_setting (which modifies state) lack destructiveHint or idempotentHint annotations. Agents cannot distinguish safe from risky calls.
Parameter descriptions lack validation constraints. 'extension_id' and 'theme_name' have no format hints, length limits, or valid value ranges. LLMs cannot self-validate input.
No pagination support for list tools. zed_list_themes and zed_list_extensions return unbounded arrays with no limit, offset, or cursor. Large result sets will exhaust context.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 54 | <=2025-11-25 | v2 |
Set a single Zed setting. Merges into existing settings.json. Creates a backup before writing. ## Return Format {"success": bool, "key": str, "value": any, "message": str} ## Examples zed_set_setting("theme", "One Dark Pro") zed_set_setting("tab_size", "4")
Change the Zed theme by writing to settings.json. ## Return Format {"success": bool, "theme": str, "message": str} ## Examples zed_set_theme("catppuccin") zed_set_theme("One Dark Pro")
Uninstall a Zed extension by removing its directory. ## Return Format {"success": bool, "extension": str, "message": str} ## Examples zed_uninstall_extension("catppuccin")
zed_open_file description is incomplete (40 chars). Missing return format, side effects, and when to use it. Does it block? Return a file handle? Open in foreground?
Error responses are generic. _error_response() returns 'success: false' and 'error' but does not categorize errors as retryable, user-fixable, or fatal. Agents cannot decide next steps.