Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Authorization not required, issuer https://app.sugra.ai
Authorization not required, issuer https://app.sugra.ai
Authorization not required, issuer https://app.sugra.ai
Authorization not required, issuer https://app.sugra.ai
Authorization not required, issuer https://app.sugra.ai
Authorization not required, issuer https://app.sugra.ai
Authorization not required, issuer https://app.sugra.ai
Certificate changed, valid to 2027-01-07
Authorization not required, issuer https://app.sugra.ai
Changed the definition of "get_timeseries"
⟨114 unchanged words⟩ are: a thinned daily series still readsdaily``1d``, and ``downsampled`` is what says points were ⟨192 unchanged words⟩
Changed the definition of "get_timeseries"
⟨24 unchanged words⟩ 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 daily, and ``downsampled`` is what says points were dropped. The two ETF flow metrics answer different questions ⟨183 unchanged words⟩
Recently observed → Live
Live → Recently observed
Authorization not required, issuer https://app.sugra.ai
Authorization not required, issuer https://app.sugra.ai
Changed the definition of "fetch_data"
⟨111 unchanged words⟩ 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", ⟨62 unchanged words⟩
Changed the definition of "call_endpoint" and "fetch_data"
⟨400 unchanged words⟩ ,"title":"Limit"},"operation_id":{"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 before any request is made.","title":"Operation Id","type":"string" ⟨72 unchanged words⟩
⟨125 unchanged words⟩ , params={"series_id": "CPIAUCSL"})`→runscallsfred_series_series_id
Authorization not required, issuer https://app.sugra.ai
Changed the definition of "call_endpoint"
⟨443 unchanged words⟩ and examples. Omit if the operation takes none. A key the operation does not declare returns error unknown_parameters with the accepted names and did_you_mean, before any request is made.","title":"Params"}},"required": ⟨5 unchanged words⟩
Authorization not required, issuer https://app.sugra.ai
Changed the definition of "get_snapshot"
⟨65 unchanged words⟩ 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 ⟨11 unchanged words⟩
Changed the definition of "call_endpoint" and "fetch_data"
⟨264 unchanged words⟩ , series, timeseries (for example data.items).NoWhen data has no such single list but every one of its values is an object holding exactly one list named observations, limit bounds each data.<key>.observations list on its own (records_path data.*.observations); fields there still names keys of data. Otherwise, no such list, or several, means the limit does not apply. ⟨12 unchanged words⟩ and lists nested inside records are never truncated. limit keeps the newest N records when every record carries one date or period key in one format and the list runs one way by it, else the first N, and meta.shaped reports limit_applied, records_path and,records_path.for a bounded records list, order (asc, desc or unknown) and kept_end (newest or first), as maps by name for sibling sub-series.
Removed "buy_plan" and "list_plans" (13 tools before, 11 now)
Buy a Sugra API plan and receive a new API key, paid by the agent. Payment uses the Payment HTTP authentication scheme with Stripe. The first call fails with JSON-RPC error -32042 (Payment Required) and the payment challenge in error.data.challenges. Pay it, then call again with the same arguments and the credential in params._meta["org.paymentauth/credential"]. The result carries api_key, and the receipt is in result._meta["org.paymentauth/receipt"]. A refused payment fails with -32043 and a fresh challenge. The purchase creates a new Sugra account for email; an email that already has one …
List the paid Sugra API plans with prices, limits and checkout links. Four plans: Dev and Pro, each monthly or annual, priced in US dollars. Every plan includes every endpoint; plans differ only in the daily request limit. Give the chosen plan's checkout_url to your human: they sign up or sign in and pay in Stripe Checkout. Purchases through these links do not auto-renew: annual covers one fixed year, and monthly is bought again after the current month ends. This tool makes no network call and needs no API key.
Authorization not required, issuer https://app.sugra.ai
Authorization not required, issuer https://app.sugra.ai
Added "buy_plan" (12 tools before, 13 now)
Buy a Sugra API plan and receive a new API key, paid by the agent. Payment uses the Payment HTTP authentication scheme with Stripe. The first call fails with JSON-RPC error -32042 (Payment Required) and the payment challenge in error.data.challenges. Pay it, then call again with the same arguments and the credential in params._meta["org.paymentauth/credential"]. The result carries api_key, and the receipt is in result._meta["org.paymentauth/receipt"]. A refused payment fails with -32043 and a fresh challenge. The purchase creates a new Sugra account for email; an email that already has one …
Added "list_plans" (11 tools before, 12 now)
List the paid Sugra API plans with prices, limits and checkout links. Four plans: Dev and Pro, each monthly or annual, priced in US dollars. Every plan includes every endpoint; plans differ only in the daily request limit. Give the chosen plan's checkout_url to your human: they sign up or sign in and pay in Stripe Checkout. Purchases through these links do not auto-renew: annual covers one fixed year, and monthly is bought again after the current month ends. This tool makes no network call and needs no API key.
Authorization not required, issuer https://app.sugra.ai
Authorization not required, issuer https://app.sugra.ai
Authorization not required, issuer https://app.sugra.ai
Certificate changed, valid to 2026-12-15
Authorization not required, issuer https://app.sugra.ai
Authorization not required, issuer https://app.sugra.ai
Authorization not required, issuer https://app.sugra.ai
Changed the definition of "get_snapshot" and "get_timeseries"
{"$defsproperties":{"AgentEntityentity":{"additionalProperties":true,"description":"The agent-plane entity shape returned by resolve_entity and consumed by\nget_snapshot / get_timeseries. ExtraEntitykeysdict froma resolve resultresolve_entity (label{namespace,\nconfidence)are accepted and ignored - only namespaceids}).+Extra
Authorization not required, issuer https://app.sugra.ai
Certificate recorded, valid to 2026-10-16
Authorization not required, issuer https://app.sugra.ai
First tool surface recorded: 11 tools (server version 0.12.0)
Showing the latest 39 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨262 unchanged words⟩ , series, timeseries (for example data.items).NoWhen data has no such single list but every one of its values is an object holding exactly one list named observations, limit bounds each data.<key>.observations list on its own (records_path data.*.observations); fields there still names keys of data. Otherwise, no such list, or several, means the limit does not apply. ⟨12 unchanged words⟩ and lists nested inside records are never truncated. limit keeps the newest N records when every record carries one date or period key in one format and the list runs one way by it, else the first N, and meta.shaped reports limit_applied, records_path and,records_path.for a bounded records list, order (asc, desc or unknown) and kept_end (newest or first), as maps by name for sibling sub-series.","title":"Limit"},"params":{ ⟨87 unchanged words⟩
{"$defsproperties":{"AgentEntityentity":{"additionalProperties":true,"description":"The agent-plane entity shape returned by resolve_entity and consumed by\nget_snapshot / get_timeseries. ExtraEntitykeysdict froma resolve resultresolve_entity (label{namespace,\nconfidence)are accepted and ignored - only namespaceids}).+Extraidskeys aresent on.ignored.","properties":{"ids":{"additionalProperties":true,"titledescription":"IdsIdentifier map from resolve_entity.","type":"object"},"namespace":{"titledescription":"NamespaceEntity namespace from resolve_entity.","type":"string"}},"required":["namespace","ids"],"title":"AgentEntity","type":"object"}},"properties":{"entity":{"$ref":"#/$defs/AgentEntity"},"granularity":{"default":"1d", ⟨29 unchanged words⟩