Creates or reuses a Gravitee Application via the Management API, subscribes it to an API plan, and prints the resulting API key. Authenticates with a Personal Access Token (PAT).
This MCP server provides 4 tools for Gravitee API authentication onboarding. Tools have verb-noun naming (create_or_reuse_application, find_existing_application, pick_api_key_plan, subscribe_and_get_key) which is appropriate. All tools have non-empty descriptions (ranging 120-180 chars, within the 10-1024 baseline). However, there are significant gaps in schema quality: input parameters lack formal type constraints, range boundaries, and enum declarations. Parameter descriptions are present but terse (20-40 chars each), leaving LLMs to infer requirements. Error handling is present but generic (throws Error objects with API status codes rather than structured recovery guidance). No output schema documentation is visible, tools return JSON objects but their structure is not formally declared. The code demonstrates correct async/await patterns and proper API integration, but the MCP interface lacks the rigor expected for production agent tooling.
Creates or reuses a Gravitee Application via the Management API. Returns the application object and a flag indicating if it was reused.
Lists the caller's applications via the Management API and filters by exact name match.
Selects an API key plan for subscription. If a plan ID is provided, uses it; otherwise queries the API plans list and selects the first API_KEY-type plan found.
Subscribes an application to an API plan and retrieves the autogenerated API key from the subscription.
No output schemas documented. Tools return JSON objects (app, subscriptionId, apiKey, etc.) but their structure, field types, and required vs optional fields are not formally declared. LLMs cannot plan downstream calls or validate what fields to extract.
Input parameter constraints missing. 'name' parameter in create_or_reuse_application has no length limits, character restrictions, or format guidance. 'apiId' and 'planId' in other tools are free-form strings with no validation hints. LLMs may pass invalid values without constraint feedback.
Parameter descriptions are terse (20-40 chars). 'Application name to search for.' and 'API id to query for plans.' lack context about what format IDs should take, whether names are case-sensitive, or what happens if no match is found.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
Error responses are generic. Throws catch Error objects with HTTP status codes (400, 409, 500) and raw text. No actionable recovery guidance. 'Create application failed: 409' tells the LLM nothing, should be 'Application name already exists. Try find_existing_application() or use a different --name.'
Tool pickApiKeyPlan has implicit behavior: if planArg is omitted, it auto-selects the first API_KEY-type plan. This branching logic is not clearly documented in the description. LLMs may not understand when auto-selection happens vs when to pass --plan explicitly.
No tool declares its state-modifying intent clearly. create_or_reuse_application and subscribe_and_get_key both modify state (create records in Gravitee) but their descriptions do not explicitly say 'This tool creates...' or 'This tool modifies...'. Agents need to know which calls are idempotent and which have irreversible consequences.
Missing tool composition guidance. The tools form a workflow: create app → pick plan → subscribe. However, the descriptions do not hint at dependencies (e.g., 'Call create_or_reuse_application first, then use its application_id in subscribe_and_get_key'). Agents must infer the sequence.