IOL MCP server has 8 tools with basic naming and descriptions, but significant gaps in schema completeness and parameter documentation. Tool names follow verb_noun convention (get_*, set_*, cancel_*), which is good. However, most tools lack comprehensive input validation, parameter descriptions are minimal, and output schemas are not documented. The server exposes credentials via parameters (get_token accepts username/password), violating secret-injection patterns. Error handling is present but generic. No tool annotations (readOnlyHint, destructiveHint) despite clear risk levels. Average tool score: 52/100.
Cancel a pending operation
Get account status
Check which IOL environment variables are configured on the server
Get a specific operation by number
Get operations list
Get portfolio by country
Get token for an IOL account
get_token exposes credentials as tool parameters (username, password). Credentials must never appear in tool parameters, use server-side secret injection via environment variables. Agent traces log all parameters, leaking secrets into logs and prompt history.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. cancel_operation is marked DESTRUCTIVE but lacks destructiveHint annotation. get_token is marked WRITE but lacks annotation. Agents need explicit hints to reason about side effects.
Output schemas are not documented. Tools return JSON.stringify(data) without specifying what fields the response contains. LLMs cannot plan downstream calls or extract required data (e.g., operation IDs for chaining) without knowing response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
Set the active user for subsequent operations. If not set, uses IOL_USERNAME env.
get_operations accepts optional country and status filters but lacks pagination (limit, offset, page_size). Large result sets will blow context windows. No documented limit on returned items.
Error messages are generic ('Error: <message>'). No recovery guidance. When a token is missing, the error says 'Please login first' but does not suggest calling get_token with specific parameters or explain what credentials are needed.