MCP server for Spot.io (Spotinst) API - manage Ocean clusters, VNGs, and Elastigroups
Server defines 7 tools with mixed quality. Naming follows verb_noun convention (list_, get_, probe_), which is good. Descriptions are present for all tools and reasonably detailed (80-200 chars range), explaining WHAT and WHEN. However, there are significant gaps in schema completeness, parameter descriptions, and output documentation. Two tools have incomplete/truncated input schema documentation in the provided code. Error handling is not evident in the visible code. The server accepts environment variables for secrets (SPOTINST_TOKEN, SPOTINST_ACCOUNT_ID), which is correct, but no explicit security guidance appears in tool descriptions.
Get details of a specific AWS Ocean cluster.
Get details of a specific Azure Ocean cluster.
List all Spotinst accounts accessible with the current token.
List ALL Ocean clusters across ALL accounts and cloud providers (AWS + Azure). Scans every account in parallel and returns a unified list with account and cloud info. Returns compact summaries by default (id, name, region, account, capacity). Set verbose=true for full cluster configs (networking, instance types, autoscaler).
List AWS Ocean Kubernetes clusters in a Spotinst account. Returns compact summaries by default (id, name, region, capacity). Set verbose=true for full cluster configs (networking, instance types, autoscaler).
get_cluster_azure has truncated input schema in provided code. cluster_id parameter description ends abruptly at '(e', this looks like incomplete documentation that would confuse LLMs about the parameter format and constraints.
Output schemas are not documented for any tool. The visible code shows response formatting via _format() and _truncate_items() helpers, but LLMs have no schema guidance for what fields to expect (e.g., does list_clusters return {items: [], _truncated: bool, _total_count: int}?). This forces LLMs to guess at response structure and breaks downstream tool chaining.
list_accounts and list_clusters_azure descriptions are minimal (60 and 80 chars respectively). list_accounts lacks guidance on WHEN to call it vs list_all_clusters, and doesn't explain the difference between account discovery and cluster discovery. This violates the pattern that tool descriptions must answer WHAT, WHEN, and WHY.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 63 | 2026-07-28+ | v2 |
List Azure Ocean clusters in a Spotinst account. Returns compact summaries by default (id, name, capacity). Set verbose=true for full cluster configs (networking, VM sizes, autoscaler).
Probe which Spot.io API endpoints the current token can access. Call this first to understand what tools will work with your token. Returns a report of accessible vs denied endpoints.
Pagination support is unclear. list_all_clusters and list_clusters mention compact/verbose modes but do not document pagination parameters (limit, offset, next_cursor). The helper _truncate_items() accepts a 'limit' parameter, but it's not exposed in the tool signatures visible in the code. Without pagination, large result sets will blow context windows.
No tool descriptions explicitly mention error recovery or what to do on failure. For instance, probe_token_capabilities should document what 'denied endpoints' means and how to interpret the report. Error handling guidance is absent.
account_id parameter in list_clusters, get_cluster, and get_cluster_azure is described as 'Optional account ID to query' and 'Defaults to SPOTINST_ACCOUNT_ID env var', but the get_cluster_azure signature shows only 'Optional account ID to query' without the env var reference. Inconsistent descriptions across similar tools will confuse LLMs.