Gateway connector between LLM agents and Sugra API world data through a bundled endpoint catalog and operation_id calls. Works with Anthropic Claude, OpenAI GPT, Google Gemini, xAI, and any MCP-enabled IDE.
Sugra API MCP demonstrates strong tool naming, mostly complete parameter schemas, and clear descriptions. However, there are notable gaps: several tools lack detailed output schema documentation, some parameter descriptions are generic, and error handling guidance is minimal. The 11 tools are well-named with action verbs (call_, search_, describe_, list_, resolve_, get_, fetch_, sugra_*) and most include comprehensive input schemas. All descriptions are present and substantive (100+ chars typical). Key concern: tools 2-11 appear in evals/scoring.py with no explicit registration visible in server code; tool definitions are inferred rather than directly registered, which caps confidence. The server follows good patterns for discovery tools (list_toolsets, list_sources, search_endpoints) and includes proper entity resolution (resolve_entity, sugra_entity_lookup). Security-wise, API keys are handled server-side (SUGRA_API_KEY env var), not exposed as parameters. Composition is sound: tools chain logically (search→describe→call). Main weaknesses: undocumented output schemas, sparse error guidance, and lack of visible destructiveHint/idempotentHint annotations on read-only tools.
Call an endpoint by operation_id with optional parameters, body, field selection, and output limits.
Describe an endpoint in detail by operation_id, including parameters, request/response schemas, and examples.
Fetch raw data from the Sugra API for any endpoint with full parameter and field control.
Get a snapshot of entity data (company_snapshot, etf_snapshot, etc.) with billing tracking and freshness metadata.
Get time series data for an entity with downsampling, max_points limiting, and granularity control.
List all available data sources in the catalog.
Output schemas not documented for any tool. LLMs cannot plan downstream calls or extract fields without knowing what each tool returns.
Tool definitions (tools 2-11) appear in evals/scoring.py and are inferred rather than explicitly registered in server code (sugra_api_mcp/server.py). Only tool 1 (call_endpoint) is explicitly visible in server.py. This caps confidence in tool registration and makes it unclear if all tools are actually exposed.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | A | 81 | 2025-06-18+ | v2 |
List all available catalog toolsets with endpoint counts and descriptions.
Resolve an entity query to entity references (equity, etf, fund, etc.) with ambiguity detection and ranking.
Search the bundled endpoint catalog by query, toolset, and source.
Look up entity information and resolve entity identifiers with cross-reference support.
Screen an entity (person, company, wallet, etc.) against sanctions and PEP lists with regime filtering.
Enum/pattern constraints missing on several parameters. 'regimes' (sugra_entity_screen), 'fields' (sugra_entity_lookup, get_timeseries), 'recipe' (get_snapshot), 'granularity' (get_timeseries) lack formal constraints or examples. LLMs will hallucinate invalid values.
Duplicate/overlapping tool scope: call_endpoint and fetch_data perform nearly identical operations. No clear distinction in descriptions about when to use each. Violates single-responsibility principle.
Object-type parameters (entity in get_snapshot, get_timeseries; body in call_endpoint, fetch_data) lack schema definitions. LLMs cannot determine required sub-fields or structure.
Error handling guidance absent from all tool descriptions. If call_endpoint fails, what should the LLM do next? No recovery hints like 'Check operation_id with search_endpoints()' or categorization (retryable vs user-fixable).
No tool annotations visible (readOnlyHint, destructiveHint, idempotentHint). All tools are READ_ONLY but no hint attribute present in schema. This blocks client-side safety optimizations.