Server has 6 tools with basic Zod schemas and descriptions. Naming follows verb_noun convention (list_, get_, search_, test_). However, descriptions are minimal (10-50 chars), lack context on WHEN to use each tool, and parameter descriptions are sparse. Schemas are present but lack constraints (enums, ranges, patterns). No output schema documentation. Error handling is absent, no recovery guidance or categorization. The test_api tool accepts 'any' type for body, which is unsafe. Overall: functional but below production baseline.
Get a specific API by ID from a project
Get a specific project by ID from Eolink
List all APIs for a project, optionally filtered by space
List all projects from Eolink
Search for APIs across all projects
Test an API endpoint with custom headers, query parameters, path parameters, and request body
Tool descriptions are too brief (10-50 chars) and lack context. 'List all projects from Eolink' does not explain WHEN to call this vs other discovery tools, what structure is returned, or prerequisites. LLMs cannot reliably select tools without richer descriptions.
test_api accepts body as z.any(), which is unsafe and unvalidated. LLMs cannot infer valid request body structure. Should constrain to z.record(z.any()) or document expected JSON schema.
No output schemas documented. Tools return JSON.stringify() of responses, but LLMs do not know what fields to expect (project structure, api structure, response format). This breaks downstream tool chaining and forces LLMs to guess field names.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
No error handling or recovery guidance. If a project ID is invalid or API call fails, tools return raw errors with no actionable next steps. LLMs cannot self-correct or retry intelligently.
list_apis and list_projects lack pagination parameters (limit, offset, page_size). Large result sets will blow context windows. No total count or next_cursor returned.