mcpbeat Sign in

Sugra API MCP Server

answering

Sugra API is answering right now. Last checked 8 min ago. 213 installs a week from pypi. It exposes 11 tools. Last commit 29 Oct 2026.

Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.

Installs per day peak 178 · avg 51 · -57% w/w
a month agotoday
Uptime history 90 days of history · worst day 98%
90 days agonow
100.0%
Uptime 24h
91 of 91 checks
11
Tools
read from the server
396 ms
Response time
average over 24h
213
Installs / week
npm and PyPI

What changed 41

Every tool that appeared, vanished or quietly changed what it asks for. Recorded since 20 August 2026. No other catalogue keeps this.

9 Oct a tool description was rewritten2 times that day get_timeseries
3 Oct a tool description was rewritten2 times that day fetch_data
3 Oct a tool changed version
3 Oct a tool changed the parameters it asks for call_endpoint
30 Sep a tool changed the parameters it asks for call_endpoint
29 Sep 2 tools changed the parameters they ask for call_endpoint, fetch_data
29 Sep 2 tools disappeared buy_plan, list_plans
29 Sep a tool description was rewritten get_snapshot
24 Sep a tool appeared buy_plan
23 Sep a tool appeared list_plans
and 29 more, back to 20 August 2026

What the code does

We read the source, 3 d ago · tools taken from the live server · rules 995398eba69f

Capabilities

What this server is able to do. For an MCP server this is often the job itself — a terminal server runs commands because that is what it is for. Listed so you know what you are plugging in, not as an accusation.

File ships in the package but is absent from the source [пакет] sugra_api_mcp/skills/__init__.py:1
этот файл ставится пользователю, но в репозитории его нет

Is this your server and something here is wrong? Tell us — corrections are free and do not require a plan.

This code can reach further than it looks

We found places where it runs commands, builds paths or queries from values it is given. None of that is a flaw by itself — it becomes one when the code changes, and code changes quietly between releases. We re-read it on every one.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 8 min ago.

run in your terminal
claude mcp add api-mcp --transport http https://app.sugra.ai/mcp
Settings → Connectors → Add custom connector, then paste this address
https://app.sugra.ai/mcp
~/.codex/config.toml
[mcp_servers.api-mcp]
url = "https://app.sugra.ai/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "api-mcp": {
      "url": "https://app.sugra.ai/mcp"
    }
  }
}
.vscode/mcp.json
{
  "servers": {
    "api-mcp": {
      "type": "http",
      "url": "https://app.sugra.ai/mcp"
    }
  }
}

Available tools 11

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

sugra
sugra_entity_lookup
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.
sugra_entity_screen
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.
call
call_endpoint
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.
data
fetch_data
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. 4. If the query names a country and the match takes a `country` or `countries` param that `params` leaves unset, return needs_params for it with query_countries (ISO2) instead of running the match without that filter. Examples: - `fetch_data("US CPI inflation", params={"series_id": "CPIAUCSL"})` runs fred_series_series_id (/api/v1/fred/series/CPIAUCSL) and returns observations. - `fetch_data("Bitcoin price")` runs onchain_bitcoin_price, which takes no params. - `fetch_data("Latest financial news")` runs news_latest, which has no required params. Only the top match runs, and a param it does not declare returns error unknown_parameters. For one coin's price, name the operation: `call_endpoint("crypto_coin_id_price", params={"coin_id": "bitcoin"})`.
describe
describe_endpoint
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.
endpoints
search_endpoints
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")
resolve
resolve_entity
Resolve free text to a canonical market or macro entity. Turns a ticker, company name, macro indicator, coin, or currency pair into the agent plane's ``{namespace, ids}`` entity for use with get_snapshot and get_timeseries. A cross-namespace collision (e.g. a ticker that is both an equity and a coin) returns status "ambiguous" with ranked candidates and NEVER silently picks one; pass type_hint (e.g. "equity", "etf", "coin") to narrow the universe. Crypto aliases resolve too (e.g. "bitcoin" -> the BTC coin entity). Status "low_confidence" means the best match cleared resolution but scored weakly - verify the returned entity before building on it, or re-query with a more specific name or type_hint. For compliance KYB lookups by LEI/VAT or sanctions screening use sugra_entity_lookup / sugra_entity_screen instead - this tool is for market-data entities. Args: query: Free-form text - ticker, company, indicator, coin, or pair. type_hint: Optional namespace hint narrowing resolution.
snapshot
get_snapshot
Composed current view of an entity via a named recipe. Executes a fixed server-side recipe (company_snapshot, etf_snapshot, quote_snapshot, macro_indicator_snapshot, macro_calendar, earnings_snapshot, debt_snapshot) and returns one envelope with freshness, provenance, per-component coverage, and billing. Composed calls charge the recipe's fixed cost (1-2 units) from the daily quota. status "partial" means an optional component was unavailable - the present components are still trustworthy; honor the freshness block (stale=true means the data aged past its budget); for macro_calendar, entity is accepted but does not filter the calendar. Args: recipe: Recipe name from the fixed manifest. entity: Entity dict from resolve_entity ({"namespace": ..., "ids": ...}).
sources
list_sources
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.
timeseries
get_timeseries
Bounded timeseries for an entity: price, macro_series, etf_flows or etf_monthly_flows. Returns points oldest-first with an explicit downsampling flag when the raw series exceeded max_points. Times are UTC. Costs 1 unit per call. Read the step from ``served_granularity``, not ``granularity``. The latter echoes the request; the former is the step the source built the points at, and the two can differ (a long price range can come back as monthly bars under a "1d" request). It reads ``mixed`` when the points do not share one step, ``unknown`` when the source does not say, and null when no point came back. It describes how each point was built, not how far apart the returned points are: a thinned daily series still reads ``1d``, and ``downsampled`` is what says points were dropped. The two ETF flow metrics answer different questions and are not interchangeable. ``etf_flows`` is an ESTIMATE at filing cadence: one point per SEC filing refresh, so ``t`` is a filing date and even a wide window yields a handful of points. ``etf_monthly_flows`` is the fund's own creations and redemptions from its NPORT-P filing, so ``t`` is a calendar month (``YYYY-MM``) and each point carries the three filed components - sales, reinvestment, redemption - beside the net. Two things to read before quoting etf_monthly_flows. NPORT-P is filed per SERIES, so for a fund with more than one share class the figures cover every class and the payload says so in ``multi_class_series``; where the class count is unknown it says ``class_scope`` instead of staying silent. And a fund that files no NPORT-P at all, such as a commodity trust, is not an error: the call returns status ``partial`` with an empty point list and a ``reason``. Args: metric: One of price / macro_series / etf_flows / etf_monthly_flows. entity: Entity dict from resolve_entity ({"namespace": ..., "ids": ...}). granularity: Requested point granularity (default "1d"). max_points: Hard cap on returned points (default 500).
toolsets
list_toolsets
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.

Tools removed

Tools this server used to expose. Anything built against them stopped working on the day they went.

buy_plan
removed 29 Sep 2026
list_plans
removed 29 Sep 2026

Endpoints

URLTransportStateLatencyChecked
https://app.sugra.ai/mcp streamable-http answering 355 ms 8 min ago

Alternatives to Sugra API

same job, measured the same way
Rooster Agent Gateway
by roosteragents

Discover, read and book verified real-world businesses through one endpoint.

3 tools answering
AISIX AI Gateway
by api7

Self-hosted AI gateway that governs MCP servers, LLM traffic, and A2A agents behind one endpoint

local only
Losbeto — Market Data for AI Agents
by rmartins1451

Market data, LLM gateway, ML forecasts, batch+bundle, self-building catalog. USDC via x402 + MPP.

5 tools answering
W
Wever World Data
by weverpay

Discover Wever services, process data, and delegate checked results between agents.

answering
Stride20k x402 Data Gateway
by marysbrain

x402 analytics feed + 20+ pay-per-call agent tools over x402 (data, LLM, risk), no accounts.

52 installs/wk local only
Locus
by paywithlocus

Pay-per-use APIs for agents: web research, data lookups, and metered endpoints billed to credits.

answering
Agent Handoff MCP
by sarutobisasuke8

Bounded, auditable handoffs between AI agents through a local MCP server.

499 installs/wk local only
OneDroid Synapse
by onedroid

Governed MCP gateway: one endpoint for your tools, with credential custody and audit log.

answering

Sugra API — questions

Answers built from our own checks of this server.

What can Sugra API do?
It exposes 11 tools, read directly from the server on our last check. Among them: call_endpoint, describe_endpoint, fetch_data, get_snapshot, get_timeseries, list_sources and 5 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
Is Sugra API working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 91 of 91 checks got a reply (100.0%), average response time 396 ms. The bar chart above shows every period we have measured.
Did Sugra API ever remove tools?
Yes. buy_plan, list_plans are no longer exposed — we recorded the date each one disappeared. A tool vanishing usually means a breaking change for anything that depended on it.
How do I connect Sugra API?
Copy the ready config from this page. We generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each in the form that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Sugra API need an API key?
No. Sugra API completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 11 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Sugra API?
It answers our handshake in 396 ms on average, which is faster than 33% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.
How many people use Sugra API?
The pypi package sugra-api-mcp was installed 213 times in the last week. Week over week that is -57%. We show installs rather than GitHub stars on purpose: a star is a bookmark, an install is someone actually running it.
Is Sugra API open source?
The code is open source: it is published under the MIT licence, written in Python, 4 stars on GitHub and 4 open issues. The licence covers the code in the repository, not the hosted service at app.sugra.ai, which runs on its operator's own terms.