{"$schema":"https://verifymcp.io/schemas/trust-report.json","schemaVersion":1,"license":{"name":"CC BY-NC 4.0","url":"https://creativecommons.org/licenses/by-nc/4.0/"},"generatedAt":"2026-11-06T16:32:31.013Z","url":"https://verifymcp.io/servers/ai-sugra-api-mcp/mcp","markdownUrl":"https://verifymcp.io/servers/ai-sugra-api-mcp/mcp.md","server":{"slug":"ai-sugra-api-mcp","name":"Sugra MCP","registryName":"ai.sugra/api-mcp","description":"Connect AI agents to primary sources - markets, macro, news, earth, network, entities and research.","registryStatus":"active","deletedAt":null,"statusMessage":null,"liveness":"live","publisher":{"class":"unknown","claimed":false}},"component":{"slug":"mcp","type":"remote","identifier":"https://mcp.sugra.ai/mcp","withdrawn":false,"url":"https://verifymcp.io/servers/ai-sugra-api-mcp/mcp","version":"0.14.1","transport":null,"scoredAt":"2026-11-06T04:24:03.907Z"},"score":{"total":79,"tier":"medium","status":"scored","weekDelta":null,"history":[{"date":"2026-11-06","total":79},{"date":"2026-11-05","total":78},{"date":"2026-11-04","total":78},{"date":"2026-11-03","total":78}]},"categories":[{"name":"Endpoint Security","score":91,"verdict":"fail","reasons":["The endpoint's TLS certificate is valid, in date, and uses a strong key.","Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token.","HTTPS is enforced; there's no plaintext access path.","HSTS check failed: the Strict-Transport-Security header is absent.","DNSSEC is configured correctly; the domain's records validate against the full chain to the root.","The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents."],"codes":[{"code":"tls.valid","args":{}},{"code":"auth.rfc9728_invoke","args":{}},{"code":"https.enforced","args":{}},{"code":"headers.hsts_absent","args":{}},{"code":"dnssec.validated","args":{}},{"code":"auth.registration_dcr_only","args":{}}]},{"name":"Transport & Reachability","score":100,"verdict":"pass","reasons":["Verified streamable-http transport via a live MCP handshake."],"codes":[{"code":"transport.verified","args":{"transport":"streamable-http"}}]},{"name":"Schema Quality & AI Usability","score":75,"verdict":"fail","reasons":["100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).","AI-judged instruction clarity (good).","Context-footprint check failed: tool/resource definitions use about 4420 tokens (~232/item across 19 items; 11 tools + 8 resources), over budget; trim descriptions and params.","Usage-examples check failed: none of the tools include examples."],"codes":[{"code":"schema.descriptions","args":{"pct":"100"}},{"code":"schema.ai_quality","args":{"band":"good"}},{"code":"schema.footprint_heavy","args":{"avg":"232","items":"19","tools":"11","tokens":"4420","resources":"8"}},{"code":"schema.examples_absent","args":{}}]},{"name":"Stability & Change Management","score":10,"verdict":"partial","reasons":["Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses."],"codes":[{"code":"stability.building_history","args":{"days":"3"}}]},{"name":"Tool Coverage","score":95,"verdict":"partial","reasons":["100% of tools have a non-trivial description (not blank, and not just the tool's name).","81% of tool parameters carry a description.","Structured output schemas are declared (100% of tools); any adoption earns full credit."],"codes":[{"code":"toolquality.descriptions","args":{"pct":"100"}},{"code":"toolquality.param_docs","args":{"pct":"81"}},{"code":"toolquality.output_present","args":{"pct":"100"}}]},{"name":"Tool Safety","score":100,"verdict":"pass","reasons":["No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.","We read all 11 captured tool definition(s), and no name or description among them implies an irreversible operation.","An AI judge read all 13 captured unit(s) of tool text and found none that tries to manipulate the model reading it."],"codes":[{"code":"toolsafety.injection_clean","args":{}},{"code":"toolsafety.destructive_none","args":{"tools":"11"}},{"code":"toolsafety.manipulation_clean","args":{"units":"13","judged":"13"}}]},{"name":"Capabilities","score":100,"verdict":"pass","reasons":["Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28."],"codes":[{"code":"protocol.supported","args":{"latest":"2026-07-28","version":"2025-11-25"}}]}],"inconclusive":[],"malware":[],"components":[{"slug":"mcp","type":"remote","identifier":"https://mcp.sugra.ai/mcp","withdrawn":false,"score":79,"current":true,"url":"https://verifymcp.io/servers/ai-sugra-api-mcp/mcp","markdownUrl":"https://verifymcp.io/servers/ai-sugra-api-mcp/mcp.md"},{"slug":"sugra-api-mcp","type":"pypi","identifier":"sugra-api-mcp","withdrawn":false,"score":96,"current":false,"url":"https://verifymcp.io/servers/ai-sugra-api-mcp/sugra-api-mcp","markdownUrl":"https://verifymcp.io/servers/ai-sugra-api-mcp/sugra-api-mcp.md"}],"facts":[{"label":"Endpoint","value":"https://mcp.sugra.ai/mcp"},{"label":"Transports","value":"streamable-http"},{"label":"Auth","value":"required"},{"label":"Version","value":"0.14.1"}],"install":{"available":true,"bundleSha256":null},"tools":[{"name":"sugra_entity_screen","title":null,"description":"Screen a person or organization name against the Sugra sanctions corpus.\n\nReturns a SCREENING SIGNAL, not a compliance determination. Sugra is a\ntechnology provider, not a sanctions authority or consumer reporting agency.\nPEP and adverse-media coverage is supplementary and non-comprehensive - a\n`clear` result is not proof of absence, and a `hit` is a candidate match to\nreview, not a finding.\n\nOutput is COMPACT to protect the agent context budget:\n`{status, matches:[{name, score, list, type}], disclaimer}`. The verdict\n`status` is one of `clear`, `review`, or `hit`. The heavy raw fields\n(match rationale, source ids, publish dates) are dropped; use the Sugra API\ndirectly when the full screening envelope is needed.\n\nArgs:\n    name: The person or organization name to screen (required).\n    country: Optional ISO 3166-1 alpha-2 country to narrow the match.\n    dob: Optional date of birth (YYYY-MM-DD) for a person.\n    nationality: Optional nationality to narrow the match.","inputs":[{"name":"country","type":null,"required":false,"description":"Optional ISO 3166-1 alpha-2 country to narrow the match."},{"name":"dob","type":null,"required":false,"description":"Optional date of birth for a person, YYYY-MM-DD."},{"name":"name","type":"string","required":true,"description":"Person or organization name to screen (required)."},{"name":"nationality","type":null,"required":false,"description":"Optional nationality to narrow the match."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":296},{"name":"sugra_entity_lookup","title":null,"description":"Resolve an entity by identifier and return its composed KYB envelope.\n\n`anchor` is `lei` (Legal Entity Identifier, resolved via the GLEIF registry)\nor `vat` (EU VAT number, validated via the EU VIES service). The result\nweaves identity, a sanctions screening signal, and - on request - ownership\nand adverse-media slices.\n\nThe screening verdict is a SCREENING SIGNAL, not a compliance determination,\nand any PEP / adverse-media content is supplementary and non-comprehensive.\nThe `disclaimer` field carries this and is always present.\n\nOutput is COMPACT by default to protect the agent context budget:\n`{entity:{name, anchor, value, status, country}, screening:{status,\ntop_matches:[...3], hit_count}, ids:{...}, disclaimer}`. Pass `include` to\nopt INTO fuller per-slice detail, e.g.\n`include=[\"ownership\",\"adverse_media\"]` adds those slices in full form.\n\nOn a bad anchor or an API error this returns a clean `{error, detail}` dict\nrather than raising, so the agent can branch on `result.get(\"error\")`.\n\nArgs:\n    anchor: Identifier type, one of `lei` or `vat`.\n    value: The identifier value (the 20-char LEI code or the VAT number).\n    include: Optional list of fuller slices to add, e.g.\n        `[\"ownership\", \"adverse_media\"]`. Omit for the compact default.","inputs":[{"name":"anchor","type":"string","required":true,"description":"Identifier type: lei (GLEIF) or vat (EU VIES)."},{"name":"include","type":null,"required":false,"description":"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."},{"name":"value","type":"string","required":true,"description":"The identifier value: 20-character LEI or the VAT number."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":392},{"name":"search_endpoints","title":null,"description":"Search the bundled Sugra endpoint catalog by natural-language query.\n\nUse this to pick an operation_id. It does not fetch data. Typical loop:\n1. search_endpoints(query) -> ranked hits with required_parameters\n2. describe_endpoint(operation_id) -> params, request_body_schema, agent_hints\n3. call_endpoint(operation_id, params=..., body=...) or fetch_data(query, params=...)\n\nFilter with toolset or source only after list_toolsets / list_sources;\na misspelled filter is an error, not a silent empty result.\n\nExamples:\n- search_endpoints(\"US CPI inflation\")\n- search_endpoints(\"AAPL price\", toolset=\"markets\")\n- search_endpoints(\"container ship AIS\", toolset=\"network\")","inputs":[{"name":"limit","type":"integer","required":false,"description":"Maximum ranked hits to return. Default 10. Does not call the Sugra API; this only bounds the catalog search list."},{"name":"query","type":"string","required":true,"description":"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…"},{"name":"source","type":null,"required":false,"description":"Optional source-family filter as listed by list_sources (macro, markets, ...). An unknown value returns error unknown_source with known_sources."},{"name":"toolset","type":null,"required":false,"description":"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…"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":332},{"name":"describe_endpoint","title":null,"description":"Describe one Sugra API endpoint by operation_id.\n\nIncludes agent_hints (duration_class fast/slow/heavy, max_concurrency,\nbulk billing) so you can budget timeouts and parallelism before calling.\nPOST endpoints with a JSON body also carry request_body_schema (the\nresolved JSON schema) - construct the `body` argument from it instead\nof guessing key names. Call this after search_endpoints and before\ncall_endpoint when you need the exact parameter names and examples.","inputs":[{"name":"operation_id","type":"string","required":true,"description":"Catalog operation_id from search_endpoints (or from list_toolsets drill-down). Unknown ids return error unknown_operation_id."}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":136},{"name":"call_endpoint","title":null,"description":"Call a Sugra API endpoint by operation_id from the bundled catalog.\n\nPlan calls with describe_endpoint's agent_hints: duration_class \"fast\"\nusually responds in under ~2s, \"slow\" usually 1-5s and occasionally 15s+\non a cold upstream, \"heavy\" can exceed the gateway timeout - keep parallel\ncalls within max_concurrency and prefer small batches. Bulk endpoints bill\n1 request credit per body item. Failures return structured errors {error,\nreason, status_code, elapsed_ms, retry_hint}; after \"upstream_timeout\" a\nsingle retry often succeeds because the aborted attempt warms upstream\ncaches.","inputs":[{"name":"body","type":null,"required":false,"description":"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…"},{"name":"fields","type":null,"required":false,"description":"Optional projection of keys to keep on each record of the records list: the data list, a bare top-level array, or the list inside an object data when exactly one of these keys holds a list: data, ent…"},{"name":"include_raw","type":"boolean","required":false,"description":"If true, attach the original unshaped payload under raw when it fits the size cap; otherwise meta.raw_omitted explains why. Default false."},{"name":"limit","type":null,"required":false,"description":"Bounds ONLY the records list: the data list, a bare top-level array, or the list inside an object data when exactly one of these keys holds a list: data, entries, events, history, items, observations…"},{"name":"operation_id","type":"string","required":true,"description":"Catalog operation_id to call, from search_endpoints (or from list_toolsets drill-down). Call describe_endpoint on it first for the parameter names. Unknown ids return error unknown_operation_id befor…"},{"name":"params","type":null,"required":false,"description":"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…"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":749},{"name":"list_toolsets","title":null,"description":"List catalog groups with endpoint counts and short descriptions.\n\nUse the group names as the toolset filter on search_endpoints. This\ndoes not call the Sugra API; it reads the bundled catalog.","inputs":[],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":49},{"name":"fetch_data","title":null,"description":"One-step fetch: find the best Sugra endpoint for the query and call it.\n\nCombines search_endpoints + call_endpoint into a single round trip. Use\nthis when you want data without manually picking an operation_id. The\nfull search_endpoints + describe_endpoint + call_endpoint dance is still\navailable when you need explicit control, but for most natural-language\nqueries this tool is enough.\n\nBehavior:\n1. Search the bundled catalog for the query. Top match wins.\n2. If the matched endpoint has required parameters and they are all\n   provided in `params`, call it and return the response.\n3. If required parameters are missing, return the candidate endpoints\n   and the missing-params list so the LLM can retry with the correct\n   `params` dict on the next call.\n4. If the query names a country and the match takes a `country` or\n   `countries` param that `params` leaves unset, return needs_params\n   for it with query_countries (ISO2) instead of running the match\n   without that filter.\n\nExamples:\n- `fetch_data(\"US CPI inflation\", params={\"series_id\": \"CPIAUCSL\"})`\n  runs fred_series_series_id (/api/v1/fred/series/CPIAUCSL) and returns\n  observations.\n- `fetch_data(\"Bitcoin price\")`\n  runs onchain_bitcoin_price, which takes no params.\n- `fetch_data(\"Latest financial news\")`\n  runs news_latest, which has no required params.\nOnly the top match runs, and a param it does not declare returns error\nunknown_parameters. For one coin's price, name the operation:\n`call_endpoint(\"crypto_coin_id_price\", params={\"coin_id\": \"bitcoin\"})`.","inputs":[{"name":"body","type":null,"required":false,"description":"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."},{"name":"fields","type":null,"required":false,"description":"Optional projection of keys to keep on each record of the records list: the data list, a bare top-level array, or the list inside an object data when exactly one of these keys holds a list: data, ent…"},{"name":"include_raw","type":"boolean","required":false,"description":"If true, attach the original unshaped payload under raw when it fits the size cap; otherwise meta.raw_omitted explains why. Default false."},{"name":"limit","type":null,"required":false,"description":"Bounds ONLY the records list: the data list, a bare top-level array, or the list inside an object data when exactly one of these keys holds a list: data, entries, events, history, items, observations…"},{"name":"params","type":null,"required":false,"description":"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…"},{"name":"query","type":"string","required":true,"description":"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…"}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":939},{"name":"list_sources","title":null,"description":"List source families in the bundled catalog with endpoint counts.\n\nUse the family names as the source filter on search_endpoints. This\ndoes not call the Sugra API.","inputs":[],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":42},{"name":"resolve_entity","title":null,"description":"Resolve free text to a canonical market or macro entity.\n\nTurns a ticker, company name, macro indicator, coin, or currency pair into\nthe agent plane's ``{namespace, ids}`` entity for use with get_snapshot and\nget_timeseries. A cross-namespace collision (e.g. a ticker that is both an\nequity and a coin) returns status \"ambiguous\" with ranked candidates and\nNEVER silently picks one; pass type_hint (e.g. \"equity\", \"etf\", \"coin\") to\nnarrow the universe. Crypto aliases resolve too (e.g. \"bitcoin\" -> the\nBTC coin entity). Status \"low_confidence\" means the best match cleared\nresolution but scored weakly - verify the returned entity before\nbuilding on it, or re-query with a more specific name or type_hint. For compliance KYB lookups by LEI/VAT or sanctions\nscreening use sugra_entity_lookup / sugra_entity_screen instead - this tool\nis for market-data entities.\n\nArgs:\n    query: Free-form text - ticker, company, indicator, coin, or pair.\n    type_hint: Optional namespace hint narrowing resolution.","inputs":[{"name":"query","type":"string","required":true,"description":null},{"name":"type_hint","type":null,"required":false,"description":null}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":261},{"name":"get_snapshot","title":null,"description":"Composed current view of an entity via a named recipe.\n\nExecutes a fixed server-side recipe (company_snapshot, etf_snapshot,\nquote_snapshot, macro_indicator_snapshot, macro_calendar,\nearnings_snapshot, debt_snapshot) and returns one envelope with freshness,\nprovenance, per-component coverage, and billing. Composed calls charge the\nrecipe's fixed cost (1-2 units) from the daily quota. status \"partial\"\nmeans an optional component was unavailable - the present components are\nstill trustworthy; honor the freshness block (stale=true means the data\naged past its budget); for macro_calendar, entity is accepted but does\nnot filter the calendar.\n\nArgs:\n    recipe: Recipe name from the fixed manifest.\n    entity: Entity dict from resolve_entity ({\"namespace\": ..., \"ids\": ...}).","inputs":[{"name":"entity","type":"object","required":true,"description":"Entity dict from resolve_entity ({namespace, ids}). Extra keys are ignored."},{"name":"recipe","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":201},{"name":"get_timeseries","title":null,"description":"Bounded timeseries for an entity: price, macro_series, etf_flows or\netf_monthly_flows.\n\nReturns points oldest-first with an explicit downsampling flag when the\nraw series exceeded max_points. Times are UTC. Costs 1 unit per call.\n\nRead the step from ``served_granularity``, not ``granularity``. The\nlatter echoes the request; the former is the step the source built the\npoints at, and the two can differ (a long price range can come back as\nmonthly bars under a \"1d\" request). It reads ``mixed`` when the points do\nnot share one step, ``unknown`` when the source does not say, and null\nwhen no point came back. It describes how each point was built, not how\nfar apart the returned points are: a thinned daily series still reads\n``1d``, and ``downsampled`` is what says points were dropped.\n\nThe two ETF flow metrics answer different questions and are not\ninterchangeable. ``etf_flows`` is an ESTIMATE at filing cadence: one point\nper SEC filing refresh, so ``t`` is a filing date and even a wide window\nyields a handful of points. ``etf_monthly_flows`` is the fund's own\ncreations and redemptions from its NPORT-P filing, so ``t`` is a calendar\nmonth (``YYYY-MM``) and each point carries the three filed components -\nsales, reinvestment, redemption - beside the net.\n\nTwo things to read before quoting etf_monthly_flows. NPORT-P is filed per\nSERIES, so for a fund with more than one share class the figures cover\nevery class and the payload says so in ``multi_class_series``; where the\nclass count is unknown it says ``class_scope`` instead of staying silent.\nAnd a fund that files no NPORT-P at all, such as a commodity trust, is not\nan error: the call returns status ``partial`` with an empty point list and\na ``reason``.\n\nArgs:\n    metric: One of price / macro_series / etf_flows / etf_monthly_flows.\n    entity: Entity dict from resolve_entity ({\"namespace\": ..., \"ids\": ...}).\n    granularity: Requested point granularity (default \"1d\").\n    max_points: Hard cap on returned points (default 500…","inputs":[{"name":"entity","type":"object","required":true,"description":"Entity dict from resolve_entity ({namespace, ids}). Extra keys are ignored."},{"name":"granularity","type":"string","required":false,"description":null},{"name":"max_points","type":"integer","required":false,"description":null},{"name":"metric","type":"string","required":true,"description":null}],"outputs":[],"hasOutputSchema":true,"hasExamples":false,"tokenEstimate":554}],"toolsTruncatedAtCapture":false,"diagnostics":{"capturedAt":"2026-11-06T04:24:03.000Z","track":"remote","endpoint":"https://mcp.sugra.ai/mcp","declaredUrl":null,"truncated":false,"tls":{"outcome":"valid","label":"Valid","version":"TLS 1.3","cipherSuite":"TLS_AES_128_GCM_SHA256","chainError":null,"certificates":[{"subject":"CN=app.sugra.ai","issuer":"CN=YE1,O=Let's Encrypt,C=US","notBefore":"2026-10-09T18:58:54Z","notAfter":"2027-01-07T18:58:53Z","keyType":"ECDSA","keyBits":256,"isCa":false},{"subject":"CN=YE1,O=Let's Encrypt,C=US","issuer":"CN=Root YE,O=ISRG,C=US","notBefore":"2025-09-03T00:00:00Z","notAfter":"2028-09-02T23:59:59Z","keyType":"ECDSA","keyBits":384,"isCa":true},{"subject":"CN=Root YE,O=ISRG,C=US","issuer":"CN=ISRG Root X2,O=Internet Security Research Group,C=US","notBefore":"2026-05-13T00:00:00Z","notAfter":"2032-09-02T23:59:59Z","keyType":"ECDSA","keyBits":384,"isCa":true},{"subject":"CN=ISRG Root X2,O=Internet Security Research Group,C=US","issuer":"CN=ISRG Root X1,O=Internet Security Research Group,C=US","notBefore":"2026-05-13T00:00:00Z","notAfter":"2032-09-02T23:59:59Z","keyType":"ECDSA","keyBits":384,"isCa":true}]},"dnssec":{"result":"secure","label":"Secure","name":"mcp.sugra.ai.","steps":[{"zone":".","outcome":"verified","label":"Verified"},{"zone":"ai.","outcome":"verified","label":"Verified"},{"zone":"sugra.ai.","outcome":"verified","label":"Verified"},{"zone":"mcp.sugra.ai.","outcome":"verified","label":"Verified"}]},"auth":{"outcome":"enforced_validated","label":"Enforced and verified","gate":"invoke","gateLabel":"On tool calls","status":200,"authorizationServers":["https://app.sugra.ai"]},"httpsRedirect":{"outcome":"https_enforced","label":"HTTPS enforced","status":301},"transports":[{"transport":"streamable-http","outcome":"verified","label":"Verified","status":200,"followed":false}],"provenance":null,"installScripts":[],"installScriptsTotal":null,"vulnerabilities":[],"vulnerabilitiesTotal":null,"dependencies":null},"mismatches":[],"changelog":{"trackingSince":"2026-11-03","recent":[{"id":"chg_01a1af19-7686-77e1-8963-2dad324ee6b2","kind":"score.rubric_changed","summary":"We updated how we score, so this day's move reflects our rubric, not a change to the server","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-06","url":"https://verifymcp.io/servers/ai-sugra-api-mcp/mcp#chg-chg_01a1af19-7686-77e1-8963-2dad324ee6b2"},{"id":"chg_01a1a4cb-2dc7-76df-9d40-0490af9cd50b","kind":"check.reverified","summary":"Stability (unverified → 0.03)","materiality":"functional","direction":"improvement","scoreDelta":null,"occurredOn":"2026-11-04","url":"https://verifymcp.io/servers/ai-sugra-api-mcp/mcp#chg-chg_01a1a4cb-2dc7-76df-9d40-0490af9cd50b"},{"id":"chg_01a1a050-6fbc-7116-9655-8cfcc437ff72","kind":"score.first_scored","summary":"First indexed and scored","materiality":"functional","direction":"neutral","scoreDelta":null,"occurredOn":"2026-11-03","url":"https://verifymcp.io/servers/ai-sugra-api-mcp/mcp#chg-chg_01a1a050-6fbc-7116-9655-8cfcc437ff72"}],"truncated":false,"feedUrl":"https://verifymcp.io/servers/ai-sugra-api-mcp/mcp/changelog.json"},"links":{"html":"https://verifymcp.io/servers/ai-sugra-api-mcp/mcp","markdown":"https://verifymcp.io/servers/ai-sugra-api-mcp/mcp.md","changelogJson":"https://verifymcp.io/servers/ai-sugra-api-mcp/mcp/changelog.json","changelogRss":"https://verifymcp.io/servers/ai-sugra-api-mcp/mcp.xml","external":[{"label":"Remote endpoint","href":"https://mcp.sugra.ai/mcp"},{"label":"Repository","href":"https://github.com/Sugra-Systems/sugra-api-mcp"},{"label":"Website","href":"https://mcp.sugra.ai/"}]}}