← Sugra APICONTENT HISTORY

Update to Sugra API

Snapshot Oct 24, 2026 · 18:04 UTC · version 1.2.1

WHAT CHANGED

Package or technical metadata updated

Package or technical metadata updated

Observed in package metadata. These changes alone do not establish a new customer-facing feature.

Save Sugra API and check future changes in Following.

Up to 10 plugins free · no card required.

All fields and original values.

These are saved file metadata. Open a changed file to read its text edits.

Package file

Before

Sep 30, 2026 · 22:51 UTC

a9a6bf346a91b32eb011f3e4b38db58ff7c0e215f808a6674920cbda5f3c5bf8

After

Oct 24, 2026 · 18:04 UTC

3f446f1e11ce26bada7c6b8c7d920ca03ecd229ab34080f7fc040418c7075933

Package file

Before

Sep 30, 2026 · 22:51 UTC

127

After

Oct 24, 2026 · 18:04 UTC

101

Package file

Before

Sep 30, 2026 · 22:51 UTC

{"sha256":"640b022d7ee1321920a1c93ddcd8a783e4669ce9aef4aac4b2d82a2630f5cf96","size":3205}

After

Oct 24, 2026 · 18:04 UTC

Not present

Package file

Before

Sep 30, 2026 · 22:51 UTC

fd74fdb64b5f63338a4bc7361c6a66b2826f43052876f655b54d960bde8e4bdf

After

Oct 24, 2026 · 18:04 UTC

87de22ea82764b9bbbc2de6840518f80eca86e8af51e406f9ba5283b2bd3b9fa

Compare saved observations

Download comparison JSON

skills/discover-and-call/SKILL.md

− removed · + added

--- before
+++ after
@@ -0,0 +1,60 @@
+---
+name: discover-and-call
+description: Find the right Sugra operation, call it over HTTPS or MCP, and check that the result answers the question. Use when the path or operation_id is unknown, before guessing parameters, before quoting a figure, or after a catalog miss. Confirm details on https://docs.sugra.ai. Do not invent routes.
+license: MIT
+---
+
+# Discover and call
+
+Do not invent paths or `operation_id`s. Confirm the operation on https://docs.sugra.ai (search or Ask AI, then the endpoint page). Two complete loops, same API.
+
+## HTTP loop
+
+1. If the path is already known, skip to step 4 after confirming it on docs.sugra.ai.
+2. Search https://docs.sugra.ai. Machine companion: `GET https://sugra.ai/openapi.json`. List of source names: `GET https://sugra.ai/sources`.
+3. Read every parameter with its default and, for POST, the request body. Parameter names come from docs or the spec, spelled exactly: over HTTP most routes ignore an unknown query parameter without an error, so a misspelled filter (`country` for `countries`) returns the default data.
+4. Call `https://sugra.ai` with `x-api-key`. Set every parameter the question names (place, identifier, period, frequency, unit). GET uses query params. POST uses JSON body plus any path or query params the spec lists.
+5. Parse `{data, meta}`, or the flat object with `meta` / `_meta` that a few payloads return. Check the answer (below), then cite the source and the figure's date (check 4). Read `X-RateLimit-Remaining`.
+
+```
+GET https://sugra.ai/api/v1/etf/sectors/relative-strength?window=1m
+x-api-key: sugra_...
+```
+
+## MCP loop
+
+Works on hosted and stdio. Do not call hosted-only names on stdio. The catalog tools (`search_endpoints`, `describe_endpoint`, `list_toolsets`, `list_sources`) read the catalog bundled with the server and do not call https://sugra.ai; only `call_endpoint`, `fetch_data`, and the entity tools do.
+
+1. `search_endpoints(query=..., toolset=None, source=None, limit=10)`. Unknown `toolset` / `source` returns `unknown_toolset` / `unknown_source` with the valid set, not an empty hit list.
+2. Pick an `operation_id` from `results` by its summary, not by its rank: the first hit is not always the measure asked for (a search for an unemployment rate can rank a labour force participation series first). Confirm it on docs.sugra.ai.
+3. `describe_endpoint(operation_id=...)` - params with defaults, `request_body_schema` on POST, `agent_hints` (`duration_class`, `max_concurrency`, `bulk_cost`).
+4. `call_endpoint(operation_id=..., params={...}, body=...)`. Set every parameter the question names. On the hosted server a key the operation does not declare returns `unknown_parameters` with `accepted` and, when close, `did_you_mean`.
+
+`fetch_data(query=...)` is a one-shot: it calls the top catalog match with the params given. A missing required parameter returns `needs_params` with the selected endpoint and candidates; a missing optional one silently takes its default. Check the answer below before using it; if the operation or the place is wrong, use the four-step loop. `list_toolsets` and `list_sources` (resources `sugra://catalog/domains`, `sugra://catalog/sources`) are the map, not the query.
+
+Shaping on `call_endpoint` / `fetch_data` (`limit`, `fields` as dotted paths, `include_raw`): skill `envelope-and-attribution`.
+
+Hosted only: `resolve_entity`, `get_snapshot`, `get_timeseries`. LEI/VAT and sanctions on every transport: `sugra_entity_lookup`, `sugra_entity_screen`.
+
+The MCP prompts (`market_snapshot`, `macro_briefing`, `sanctions_screening`, `sector_compare`, `earth_conditions`, `source_overview`) are numbered recipes over the gateway tools. They are not the catalog and do not cover every direction. For anything they do not name, use the loop above.
+
+## Check the answer before quoting it
+
+1. `meta.endpoint` is the operation you meant.
+2. The place, entity, and period in `data` are the ones asked about, not a default.
+3. The measure is the one asked about: a participation rate is not an unemployment rate, a level is not a change, a monthly figure is not an annual one.
+4. The figure is dated by an `as_of` (in a record, in `data`, or in `meta`), by `meta.period`, or by a `data_time` the source stated, never by one that fell back to the response time. With none of them, say the source time is unavailable (skill `envelope-and-attribution`).
+
+If any check fails, fix the call. Do not present a near miss as the answer, and do not fill a gap from memory.
+
+## Misses and errors
+
+A miss is not "Sugra has no data". Search docs.sugra.ai. Widen the query. Drop a bad MCP `toolset`/`source` filter. If MCP search still misses, fetch live `/openapi.json` (the wheel catalog can lag), then HTTP-call if the spec has it.
+
+An error message usually names the fix: read it before retrying. A 400 or 422 over HTTPS names the parameter or value to change; over MCP a 422 can arrive as a bare `HTTP 422`. Full table: skill `auth-and-quota`.
+
+Do not add per-endpoint MCP tools to skip this loop. Do not skip `describe_endpoint` when the parameter list is unknown.
+
+## Timeouts
+
+30 seconds covers most GETs. Bulk or live-upstream POSTs can run longer. MCP `agent_hints.duration_class` is the budget hint. A timeout is not empty data.
Full technical diff · 19 changed fields

changed /files/.app.json/sha256

BEFORE
"a9a6bf346a91b32eb011f3e4b38db58ff7c0e215f808a6674920cbda5f3c5bf8"
AFTER
"3f446f1e11ce26bada7c6b8c7d920ca03ecd229ab34080f7fc040418c7075933"

changed /files/.app.json/size

BEFORE
127
AFTER
101

removed /files/.codex-plugin~1plugin.json

BEFORE
{
  "sha256": "640b022d7ee1321920a1c93ddcd8a783e4669ce9aef4aac4b2d82a2630f5cf96",
  "size": 3205
}
AFTER
Field is absent

changed /files/assets~1logo.png/sha256

BEFORE
"fd74fdb64b5f63338a4bc7361c6a66b2826f43052876f655b54d960bde8e4bdf"
AFTER
"87de22ea82764b9bbbc2de6840518f80eca86e8af51e406f9ba5283b2bd3b9fa"

changed /files/assets~1logo.png/size

BEFORE
10242
AFTER
10425

added /files/mcp.json

BEFORE
Field was absent
AFTER
{
  "sha256": "330035c23f4e4834aec8936e428b3800da68267393739c79d3fab333f5777ca5",
  "size": 196
}

added /files/plugin.json

BEFORE
Field was absent
AFTER
{
  "sha256": "d1b4e45932a114fcc0714e884efd62cdd69c609d04c2709a4dfdb18db58491df",
  "size": 2242
}

added /files/skills~1auth-and-quota~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "18ce5fd0733830f9ffec0dcdd23caea7bab320ae8d5a079d6a9d7ef26cf86288",
  "size": 4712
}

added /files/skills~1auth-and-quota~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "6038f65651101cbc2115c28e347c17deba523d0cc5009e1617e968294a5ef28f",
  "size": 221
}

added /files/skills~1cross-domain-briefing~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "5bff04a3c3b44f27e604a8b2aafb8b1a89b7d9a90e09619f4966cc013e938436",
  "size": 2115
}

added /files/skills~1cross-domain-briefing~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "f54f8ce1d0d94e1d3f4acb5c5e764680cce656453d72d3e2a1ccec55991e4ea2",
  "size": 241
}

added /files/skills~1discover-and-call~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "b7a648fd1ce2e39612ef509c37c9202b74469e467371fa5780c02e02f15937fb",
  "size": 5245
}

added /files/skills~1discover-and-call~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "2c4bb1d37b8f426651a4472614f2caa972fc42f2668c315adf1ffacbcf84f551",
  "size": 226
}

added /files/skills~1envelope-and-attribution~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "e5241b9d8dea55b47251db85c0cc500d08abb272c3f242c4715103b1a92715c9",
  "size": 6008
}

added /files/skills~1envelope-and-attribution~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "10834f55e183cd43bb1be1e3f2a47ce2ea1a6e2839804dfe8c585867d67b8154",
  "size": 241
}

added /files/skills~1live-docs~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "3af18eb9cdcd0e483206df7b0fbeea66441b4c6be5c3c59e6832dd7e74718b85",
  "size": 2609
}

added /files/skills~1live-docs~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "bbd8b385c43aa8b4017cd7eea32f39d4997438da1b24587b6ab16560aaf41908",
  "size": 213
}

added /files/skills~1using-sugra-api~1SKILL.md

BEFORE
Field was absent
AFTER
{
  "sha256": "d981b6e137cf06a1d2bd8380f2ab9659ad99c0249f4b9bf46efa14ed6e616d9c",
  "size": 2918
}

added /files/skills~1using-sugra-api~1agents~1openai.yaml

BEFORE
Field was absent
AFTER
{
  "sha256": "544c62aa8e5122875b31ac6834d398bb4e30920a862383b5e477eba190162537",
  "size": 212
}
Full snapshot data
{
  "files": {
    ".app.json": {
      "sha256": "3f446f1e11ce26bada7c6b8c7d920ca03ecd229ab34080f7fc040418c7075933",
      "size": 101
    },
    "assets/logo.png": {
      "sha256": "87de22ea82764b9bbbc2de6840518f80eca86e8af51e406f9ba5283b2bd3b9fa",
      "size": 10425
    },
    "mcp.json": {
      "sha256": "330035c23f4e4834aec8936e428b3800da68267393739c79d3fab333f5777ca5",
      "size": 196
    },
    "plugin.json": {
      "sha256": "d1b4e45932a114fcc0714e884efd62cdd69c609d04c2709a4dfdb18db58491df",
      "size": 2242
    },
    "skills/auth-and-quota/SKILL.md": {
      "sha256": "18ce5fd0733830f9ffec0dcdd23caea7bab320ae8d5a079d6a9d7ef26cf86288",
      "size": 4712
    },
    "skills/auth-and-quota/agents/openai.yaml": {
      "sha256": "6038f65651101cbc2115c28e347c17deba523d0cc5009e1617e968294a5ef28f",
      "size": 221
    },
    "skills/cross-domain-briefing/SKILL.md": {
      "sha256": "5bff04a3c3b44f27e604a8b2aafb8b1a89b7d9a90e09619f4966cc013e938436",
      "size": 2115
    },
    "skills/cross-domain-briefing/agents/openai.yaml": {
      "sha256": "f54f8ce1d0d94e1d3f4acb5c5e764680cce656453d72d3e2a1ccec55991e4ea2",
      "size": 241
    },
    "skills/discover-and-call/SKILL.md": {
      "sha256": "b7a648fd1ce2e39612ef509c37c9202b74469e467371fa5780c02e02f15937fb",
      "size": 5245
    },
    "skills/discover-and-call/agents/openai.yaml": {
      "sha256": "2c4bb1d37b8f426651a4472614f2caa972fc42f2668c315adf1ffacbcf84f551",
      "size": 226
    },
    "skills/envelope-and-attribution/SKILL.md": {
      "sha256": "e5241b9d8dea55b47251db85c0cc500d08abb272c3f242c4715103b1a92715c9",
      "size": 6008
    },
    "skills/envelope-and-attribution/agents/openai.yaml": {
      "sha256": "10834f55e183cd43bb1be1e3f2a47ce2ea1a6e2839804dfe8c585867d67b8154",
      "size": 241
    },
    "skills/live-docs/SKILL.md": {
      "sha256": "3af18eb9cdcd0e483206df7b0fbeea66441b4c6be5c3c59e6832dd7e74718b85",
      "size": 2609
    },
    "skills/live-docs/agents/openai.yaml": {
      "sha256": "bbd8b385c43aa8b4017cd7eea32f39d4997438da1b24587b6ab16560aaf41908",
      "size": 213
    },
    "skills/using-sugra-api/SKILL.md": {
      "sha256": "d981b6e137cf06a1d2bd8380f2ab9659ad99c0249f4b9bf46efa14ed6e616d9c",
      "size": 2918
    },
    "skills/using-sugra-api/agents/openai.yaml": {
      "sha256": "544c62aa8e5122875b31ac6834d398bb4e30920a862383b5e477eba190162537",
      "size": 212
    }
  }
}

SHA-256 of public snapshot: cc65924b70b2d99af409d6b15388e85e5c4ae687616835336a0d06f84cb1f3da