A Model Context Protocol server that provides tools for interacting with Aha! product management platform. Supports searching, creating, and editing features in Aha!.
The Aha! MCP server has 12 tools with schemas and descriptions present, but exhibits significant quality gaps. All tools have verb-prefixed names (search_, get_, create_, etc.) which is correct. However, descriptions are minimal (10-50 chars for most tools), parameter descriptions lack specificity about formats/constraints, and output schemas are entirely undocumented. No error handling guidance is visible. The implementation uses fastmcp with httpx, but tool definitions appear to be in examples.py rather than properly registered through the mcp framework. This is a below-average community server, functional but not production-grade.
Add tags to a feature
Create a new feature in Aha!
Delete a feature from Aha!
Get detailed information about a specific feature
List all epics in Aha!
List all features in a specific epic
List all features in a specific release
No output schemas documented. Tools accept input parameters but their return types are not specified. LLMs cannot plan downstream tool calls or extract fields without knowing the response structure (e.g., what fields does get_feature return? Is it a single object or array?).
Parameter descriptions lack format/constraint specifications. E.g., 'limit' parameter says 'Maximum number of results to return (default: 20)' but does not specify min/max bounds (1-100?), units, or what happens if exceeded. 'status' lacks enum values, what are valid Aha! workflow statuses?
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 51 | - | v1 |
List all releases in Aha!
Search for features in Aha! using various filter criteria
Update an existing feature in Aha!
Update the priority score of a feature
Update the workflow status of a feature
delete_feature tool has 'confirm' boolean parameter but no guidance on what happens if confirm=false. Error handling is not documented, how should the LLM handle deletion failures? What if the feature is locked or in use?
Tool descriptions are under 50 characters for most tools (e.g., 'List all releases in Aha!' is 28 chars). Descriptions lack context about WHEN to use each tool vs similar ones. E.g., what distinguishes search_features from list_features_by_release?
No error handling guidance visible. Tools lack recovery hints (e.g., 'Feature not found. Try search_features() with a partial name.'). No indication whether errors are retryable or require user intervention.
Tool definitions appear in examples.py rather than explicitly registered in aha_mcp_server.py. No visible @mcp.tool() decorators or tool registration calls in the provided code. This suggests tools may not be properly exposed to the MCP protocol.
No pagination documented beyond 'limit' parameter. list_features_by_release, list_features_by_epic, list_releases, list_epics have no offset/cursor support or indication of whether results are paginated. Without pagination info, LLM cannot fetch additional pages.
Parameters like 'assignee', 'release_id', 'epic_id' accept strings but no guidance on whether to use email, username, display name, or internal ID. For 'assignee' in search_features, is it '[email protected]' or 'john.smith'? LLM will guess incorrectly.
Tool annotations (destructiveHint, readOnlyHint, idempotentHint) are noted in the metadata (e.g., Risk: WRITE, Risk: DESTRUCTIVE) but not visible in the actual schema/code. MCP spec requires these as tool properties for agents to reason about safety.