A comprehensive MCP server toolkit for building, managing, and running AI agents compatible with the A4E ecosystem.
This MCP server has significant quality gaps across naming, descriptions, parameter schemas, and error handling. While tool names are generally well-chosen (verb-starting, clear actions), the parameter documentation is inconsistent, schemas are incomplete, and error guidance is minimal. The server exposes file system operations without proper validation or user-friendly error recovery. Of 21 tools examined, only a handful have complete parameter descriptions and type specifications. Most descriptions lack context on WHEN to use the tool or WHAT consequences result. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) are present despite many destructive operations. Error responses are often raw exceptions rather than actionable recovery guidance. This is typical of community-built agent toolkits that prioritize functionality over LLM-friendly design.
Add a new skill to the agent
Add a new tool with @tool decorator
Add a new React view to the agent
Check development environment
Deploy agent to production
Start development server
Stop development server
Generate schemas for tools, views, and skills
15 of 21 tools have no visible parameter schema definitions in source code. Only add_tool, list_tools, remove_tool, and update_tool show explicit schemas. The remaining tools (initialize_project, get_agent_info, get_instructions, add_view, list_views, remove_view, update_view, add_skill, list_skills, remove_skill, update_skill, generate_schemas, validate, dev_start, dev_stop, check_environment, deploy) appear to have only bare docstrings with no @mcp.tool() registration visible with schema. This violates the fundamental MCP requirement that tool input schemas must be machine-readable.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 33 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 34 | - | v1 |
Get agent information
Get instructions for AI agents on how to use A4E tools
Initialize a new A4E agent project
List all skills in the agent
List all tools available in the current agent project
List all views in the agent
Remove a skill from the agent
Remove a tool from the agent
Remove a view from the agent
Update an existing skill
Update an existing tool's description or parameters.
Update an existing view
Validate agent project
Destructive operations (remove_tool, remove_view, remove_skill, deploy) lack dry-run support, confirmation steps, or explicit destructive annotations. An LLM can accidentally delete multiple tools or deploy untested code. add_tool and update_tool directly modify the file system without user confirmation, and the error recovery path is unclear if schema generation fails mid-operation.
No tool annotations present (readOnlyHint, destructiveHint, idempotentHint). 9 tools modify state (add_tool, remove_tool, update_tool, add_view, remove_view, update_view, add_skill, remove_skill, update_skill, initialize_project, generate_schemas, dev_start, dev_stop, deploy) but are not marked as destructive. This prevents MCP clients from warning users or restricting unsafe operations.
Error handling is inconsistent and sometimes raw. add_tool returns structured error objects with 'success', 'error', 'fix' fields, good. But many other tools likely fail with stack traces. None of the error responses are explicitly shown with recovery guidance (e.g., 'User not found. Try search_users()' pattern). Errors should categorize as retryable, user-fixable, or fatal.
15 of 21 tools have only minimal or missing descriptions (under 20 chars or not visible). 'Get agent information', 'List all skills in the agent', 'Check development environment' provide zero actionable context. Descriptions lack WHEN to call the tool, WHAT it modifies, and WHAT to do if it fails. For example, 'deploy' has no description visible, does it deploy to staging or production? Does it require approval? Is it reversible?
Parameters lack proper constraints and validation. For example, add_tool accepts 'parameters' as a raw dict but provides no enum values, regex patterns, or constraints on what valid parameter types are. The code handles type mapping internally (e.g., 'string' → 'str') but this logic is hidden from the LLM. An LLM could pass invalid type names like 'datetime' or 'UUID' and get unclear errors.
No pagination or result limits documented for list_* tools (list_tools, list_views, list_skills). If an agent has thousands of tools, a single list_tools call could return a massive array and exhaust context. The tools do not document whether results are capped, whether pagination is supported, or what the practical limit is.
Output schemas are not documented for any tool. LLMs cannot infer what fields to expect from list_tools, get_agent_info, or validate. For example, list_tools returns {'tools': [...], 'count': ...} but this is buried in code, not declared as the tool's return schema. This forces LLMs to guess at response structure and wastes tokens on parsing.
Path traversal and file system injection risks. Functions like get_project_dir() resolve 'agent_name' into a file path without clear sanitization. An attacker/LLM could pass '../../etc/passwd' and potentially read arbitrary files. While the code likely has some protection, these file system operations should be explicitly gated with validation.
No audit trail or logging hooks visible. Destructive operations like remove_tool, remove_view, deploy should log who called them, when, and with what arguments. The code shows no explicit logging declarations, making it difficult to trace agent-initiated actions for compliance or debugging.