Sugra API
PYPI · SUGRA-API-MCP · 2 COMPONENTS · SCANNED SEP 20
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 0 of 29 dependencies flagged as unhealthy. View diagnostics → Pass
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 8 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability82
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 2444 tokens (~143/item across 17 items; 8 tools + 9 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management83
- Stability observed for 25 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage99
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 96% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 8 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 10 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
- Supports UI / widget rendering.Pass
How do I install the Sugra API MCP server?
Sugra API runs locally as a PyPI package, launched with uvx sugra-api-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · sugra-api-mcp
claude mcp add ai-sugra-api-mcp -- uvx sugra-api-mcp
{
"mcpServers": {
"ai-sugra-api-mcp": {
"command": "uvx",
"args": [
"sugra-api-mcp"
]
}
}
} {
"servers": {
"ai-sugra-api-mcp": {
"command": "uvx",
"args": [
"sugra-api-mcp"
]
}
}
} codex mcp add ai-sugra-api-mcp -- uvx sugra-api-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"ai-sugra-api-mcp": {
"type": "local",
"command": [
"uvx",
"sugra-api-mcp"
],
"enabled": true
}
}
} openclaw mcp add ai-sugra-api-mcp --command uvx --arg sugra-api-mcp
mcp_servers:
ai-sugra-api-mcp:
command: "uvx"
args: ["sugra-api-mcp"] {
"McpServers": {
"ai-sugra-api-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"sugra-api-mcp"
]
}
}
} assistant mcp add ai-sugra-api-mcp -t stdio -c uvx -a sugra-api-mcp
{
"mcpServers": {
"ai-sugra-api-mcp": {
"command": "uvx",
"args": [
"sugra-api-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 19 Sept 26 −3
- Stability: pass → 0.80 functional
- 18 Sept 26 0
- Stability: 0.97 → pass security
- 17 Sept 26 −14
- Malware scan: pass → unverified ▼ security
- 15 Sept 26 +16
- Malware scan: unverified → pass ▲ security
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 12 Sept 26 +2
- Schema quality: 128 → 143 ▼ functional
- Tool coverage: 17% → 96% ▲ functional
- Schema quality: good → excellent functional
- Package version: 0.9.1 → 0.12.0 functional
- 11 Sept 26 −18
- Malware scan: pass → unverified ▼ security
- Stability: pass → 0.77 functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed pypi/sugra-api-mcp@0.12.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 29 packages
| Packages resolved | 29 |
|---|---|
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
call_endpoint ~367
Call a Sugra API endpoint by operation_id from the bundled catalog. Plan calls with describe_endpoint's agent_hints: duration_class "fast" usually responds in under ~2s, "slow" usually 1-5s and occasionally 15s+ on a cold upstream, "heavy" can exceed the gateway timeout - keep parallel calls within max_concurrency and prefer small batches. Bulk endpoints bill 1 request credit per body item. Failures return structured errors {error, reason, status_code, elapsed_ms, retry_hint}; after "upstream_timeout" a single retry often succeeds because the aborted attempt warms upstream caches.
| Name | Type | Req | Description |
|---|---|---|---|
| body | – | – | JSON request body for a POST operation, matching the request_body_schema returned by describe_endpoint(operation_id): a JSON object for most operations, or a JSON array when that schema's top-level t… |
| fields | – | – | Optional projection of keys to keep on each record. Dotted paths (geo.city) walk nested objects. meta.shaped reports fields_applied and fields_unmatched. Omit to keep every key. |
| include_raw | boolean | – | If true, attach the original unshaped payload under raw when it fits the size cap; otherwise meta.raw_omitted explains why. Default false. |
| limit | – | – | Bounds ONLY the top-level list: the envelope data list (or a bare top-level array). Nested lists inside records are never truncated; meta.shaped reports whether the limit applied. |
| operation_id | string | yes | – |
| params | – | – | Query and path parameters for this operation_id. Keys and types are operation-specific - call describe_endpoint(operation_id) first to get the exact parameter names, types, and examples. Omit if the… |
Structured output declared, but exposes no named fields.
No examples provided.
describe_endpoint ~136
Describe one Sugra API endpoint by operation_id. Includes agent_hints (duration_class fast/slow/heavy, max_concurrency, bulk billing) so you can budget timeouts and parallelism before calling. POST endpoints with a JSON body also carry request_body_schema (the resolved JSON schema) - construct the `body` argument from it instead of guessing key names. Call this after search_endpoints and before call_endpoint when you need the exact parameter names and examples.
| Name | Type | Req | Description |
|---|---|---|---|
| operation_id | string | yes | Catalog operation_id from search_endpoints (or from list_toolsets drill-down). Unknown ids return error unknown_operation_id. |
Structured output declared, but exposes no named fields.
No examples provided.
fetch_data ~528
One-step fetch: find the best Sugra endpoint for the query and call it. Combines search_endpoints + call_endpoint into a single round trip. Use this when you want data without manually picking an operation_id. The full search_endpoints + describe_endpoint + call_endpoint dance is still available when you need explicit control, but for most natural-language queries this tool is enough. Behavior: 1. Search the bundled catalog for the query. Top match wins. 2. If the matched endpoint has required parameters and they are all provided in `params`, call it and return the response. 3. If required parameters are missing, return the candidate endpoints and the missing-params list so the LLM can retry with the correct `params` dict on the next call. Examples: - `fetch_data("US CPI inflation", params={"series_id": "CPIAUCSL"})` → calls /api/v1/fred/series/CPIAUCSL, returns observations. - `fetch_data("Bitcoin price", params={"coin_id": "bitcoin"})` → calls /api/v1/crypto/bitcoin/price. - `fetch_data("Latest financial news")` → news_latest has no required params, returns latest news directly.
| Name | Type | Req | Description |
|---|---|---|---|
| body | – | – | JSON body for an auto-selected POST operation; the tool returns the request_body_schema to fill when the match needs one. Pass a JSON object or a JSON array as that schema's top-level type dictates. |
| fields | – | – | Optional projection of keys to keep on each record. Dotted paths (geo.city) walk nested objects. meta.shaped reports fields_applied and fields_unmatched. Omit to keep every key. |
| include_raw | boolean | – | If true, attach the original unshaped payload under raw when it fits the size cap; otherwise meta.raw_omitted explains why. Default false. |
| limit | – | – | Bounds ONLY the top-level list: the envelope data list (or a bare top-level array). Nested lists inside records are never truncated; meta.shaped reports whether the limit applied. |
| params | – | – | Parameters for the auto-selected endpoint. If omitted and the best-match endpoint has required parameters, the tool returns that endpoint's required_parameters and examples so you can retry with them… |
| query | string | yes | Natural-language request for data (examples: 'US CPI', 'Bitcoin price', 'latest news'). The tool picks the top catalog match and calls it. If required params are missing it returns needs_params inste… |
Structured output declared, but exposes no named fields.
No examples provided.
list_sources ~42
List source families in the bundled catalog with endpoint counts. Use the family names as the source filter on search_endpoints. This does not call the Sugra API.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
list_toolsets ~49
List catalog groups with endpoint counts and short descriptions. Use the group names as the toolset filter on search_endpoints. This does not call the Sugra API; it reads the bundled catalog.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
search_endpoints ~332
Search the bundled Sugra endpoint catalog by natural-language query. Use this to pick an operation_id. It does not fetch data. Typical loop: 1. search_endpoints(query) -> ranked hits with required_parameters 2. describe_endpoint(operation_id) -> params, request_body_schema, agent_hints 3. call_endpoint(operation_id, params=..., body=...) or fetch_data(query, params=...) Filter with toolset or source only after list_toolsets / list_sources; a misspelled filter is an error, not a silent empty result. Examples: - search_endpoints("US CPI inflation") - search_endpoints("AAPL price", toolset="markets") - search_endpoints("container ship AIS", toolset="network")
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum ranked hits to return. Default 10. Does not call the Sugra API; this only bounds the catalog search list. |
| query | string | yes | Natural-language search over the bundled catalog. Name the instrument, series, place, or task (examples: 'US CPI', 'AAPL quote', 'North Sea AIS'). Returns ranked operation_id hits with required_param… |
| source | – | – | Optional source-family filter as listed by list_sources (macro, markets, ...). An unknown value returns error unknown_source with known_sources. |
| toolset | – | – | Optional catalog group filter (markets, macro, news, network, ...). Call list_toolsets for the live names. An unknown value returns error unknown_toolset with known_toolsets rather than an empty hit… |
Structured output declared, but exposes no named fields.
No examples provided.
sugra_entity_lookup ~392
Resolve an entity by identifier and return its composed KYB envelope. `anchor` is `lei` (Legal Entity Identifier, resolved via the GLEIF registry) or `vat` (EU VAT number, validated via the EU VIES service). The result weaves identity, a sanctions screening signal, and - on request - ownership and adverse-media slices. The screening verdict is a SCREENING SIGNAL, not a compliance determination, and any PEP / adverse-media content is supplementary and non-comprehensive. The `disclaimer` field carries this and is always present. Output is COMPACT by default to protect the agent context budget: `{entity:{name, anchor, value, status, country}, screening:{status, top_matches:[...3], hit_count}, ids:{...}, disclaimer}`. Pass `include` to opt INTO fuller per-slice detail, e.g. `include=["ownership","adverse_media"]` adds those slices in full form. On a bad anchor or an API error this returns a clean `{error, detail}` dict rather than raising, so the agent can branch on `result.get("error")`. Args: anchor: Identifier type, one of `lei` or `vat`. value: The identifier value (the 20-char LEI code or the VAT number). include: Optional list of fuller slices to add, e.g. `["ownership", "adverse_media"]`. Omit for the compact default.
| Name | Type | Req | Description |
|---|---|---|---|
| anchor | string | yes | Identifier type: lei (GLEIF) or vat (EU VIES). |
| include | – | – | Optional fuller slices to add, e.g. ownership, adverse_media. Omit for the compact default. profile and screening are already in the compact core and are not extra slices. |
| value | string | yes | The identifier value: 20-character LEI or the VAT number. |
Structured output declared, but exposes no named fields.
No examples provided.
sugra_entity_screen ~296
Screen a person or organization name against the Sugra sanctions corpus. Returns a SCREENING SIGNAL, not a compliance determination. Sugra is a technology provider, not a sanctions authority or consumer reporting agency. PEP and adverse-media coverage is supplementary and non-comprehensive - a `clear` result is not proof of absence, and a `hit` is a candidate match to review, not a finding. Output is COMPACT to protect the agent context budget: `{status, matches:[{name, score, list, type}], disclaimer}`. The verdict `status` is one of `clear`, `review`, or `hit`. The heavy raw fields (match rationale, source ids, publish dates) are dropped; use the Sugra API directly when the full screening envelope is needed. Args: name: The person or organization name to screen (required). country: Optional ISO 3166-1 alpha-2 country to narrow the match. dob: Optional date of birth (YYYY-MM-DD) for a person. nationality: Optional nationality to narrow the match.
| Name | Type | Req | Description |
|---|---|---|---|
| country | – | – | Optional ISO 3166-1 alpha-2 country to narrow the match. |
| dob | – | – | Optional date of birth for a person, YYYY-MM-DD. |
| name | string | yes | Person or organization name to screen (required). |
| nationality | – | – | Optional nationality to narrow the match. |
Structured output declared, but exposes no named fields.
No examples provided.
What is the Sugra API MCP server?
Sugra API is an MCP server listed in the public MCP registry as ai.sugra/api-mcp. Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog. This page covers its PyPI package (sugra-api-mcp).
Is the Sugra API MCP server safe to use?
Sugra API scores 69 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Sugra API MCP server expose?
Sugra API exposes 8 tools: sugra_entity_screen, sugra_entity_lookup, search_endpoints, describe_endpoint, call_endpoint, and 3 more. Their descriptions and schemas cost roughly 2,142 tokens of context every time the server is loaded.
Is the Sugra API MCP server still maintained?
Sugra API is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the Sugra API MCP server under?
Sugra API declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.