# Onvexia: Crypto Fundamentals, Sentiment & Onchain Tracking

> Crypto fundamentals, sentiment, whale tracking and influencer call accuracy for traders and agents.

- name: com.onvexia/onvexia
- version: 1.0.9
- connection class: R0 (autonomous)
- trust: 95/100
- quality: 79/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.onvexia%2Fonvexia
- tools: https://api.protogrid.dev/v1/servers/com.onvexia%2Fonvexia/tools

**An agent can connect right now, no human step.** Remote endpoint, no authentication, reachable on the last probe.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "onvexia": {
      "type": "http",
      "url": "https://onvexia.com/mcp"
    }
  }
}
```


## Trust

- hygiene: 100
- liveness: 99
- freshness: 100
- provenance: 85
- drivers: +repository +dns-namespace +website +reachable +uptime-97% +updated-16d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 79/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 66 of 66 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- warn `tools.token_cost`: about 10,242 tokens to load every tool
- warn `tools.api_dump`: 66 tools, 89% named like REST operations: looks like an API mapped one endpoint per tool

### stability: 50 (weight 15)

- pass `stability.changes`: 2 tool changes in 30 days
- fail `stability.rug_pull`: 1 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 66, about 10,242 tokens to load them all
- tool set hash: b982e3f5a504a02bf1a0d1d8d681c89f
- tools last changed: 2026-09-25T15:06:02.243Z
- badge: [![protogrid quality](https://protogrid.dev/badge/com.onvexia/onvexia.svg)](https://protogrid.dev/servers/com.onvexia/onvexia)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-09-25 `get_influencer_leaderboard` changed (description, inputSchema)
  - before: The influencer accountability leaderboard, ranked by what people actually got RIGHT rather than by how loud they are. Each entry is scored Predictor vs Reactor: did the call come before the move, or after it. This is the flagship differentiator — reach and accuracy are different axes, and most rankings only publish the first.
  - after: The influencer leaderboard, ranked by what people actually got RIGHT rather than by how loud they are. rank_by="accountability" (default): scored Predictor vs Reactor — did the call come before the move, or after it. rank_by="accuracy": ranked by how often their price calls came true, by the Wilson lower bound of the hit rate (>= 20 resolved calls to rank), over `window_days` (30/90/180) judged at `horizon_hours` (24/168/720). Reach and accuracy are different axes, and most rankings only publish the first.
- 2026-09-25 `get_influencer_ledger` changed (description, inputSchema) **meaning changed**
  - before: Get an influencer's accountability record: did their calls precede the move (Predictor) or react to it (Reactor)? Includes hit rate and track record.
  - after: Get an influencer's track record. `view` picks one of three records: accountability (default) — did their calls precede the move (Predictor) or react to it (Reactor)? Hit rate and track record. accuracy — did their price calls come true? Hit rate over 30/90/180 days at 24h, 7d and 30d, with the Wilson lower bound and excess over BTC. calls — the receipts: each call's post excerpt and link, entry price, and what happened after 24h/7d/30d. `horizon_hours` (24, 168, 720) picks which outcome the list is sorted and filtered on. One request per call. `influencer_id` is a creator id or username.

Full history: https://api.protogrid.dev/v1/servers/com.onvexia%2Fonvexia/changes

## Remotes

- https://onvexia.com/mcp (streamable-http, auth none, reachable true, uptime30d 0.9745763)

## Packages

_none_

## Tools (66)

- `analyze_sentiment`: Score any text for crypto sentiment, tuned for crypto slang and tickers.

        Takes arbitrary text you supply — it does not look anything up. General
        sentiment models read "this is going to zero" and "wagmi" badly; this
        one is fitted to the register. Returns polarity plus the terms that
        drove it, so a score can be checked rather than trusted.
- `get_address_coverage`: What we index per chain for watched addresses: what we see, what we miss, and what an empty feed actually means.
- `get_address_events`: Events on watched addresses. Check get_address_coverage before reading an empty result as silence — below the observed USD floor, movement is invisible to us.
- `get_agent_findings`: What this platform's own monitoring agents are currently complaining
        about — dead collectors, stale data streams, coverage drops.

        Worth checking before relying on a number: a stream flagged stale here
        is still being served, it is just old.
- `get_ai_substance`: Does an AI-sector project actually ship code, against how much
        attention it gets.

        Four states, and the fourth is not a verdict:
          ships           public repo with development activity in 30 days
          silent          public repo, no activity in 30 days
          no_public_repo  no repository is published for this asset
          unmapped        WE have not checked. This is a gap in OUR coverage
                          and must NEVER be reported as the project failing to
                          ship. RENDER sat in this state with 447 posts while
                          publishing code the whole time.

        `dev_events_30d` is null rather than 0 for the last two states: there is
        no repository to have produced a zero. `attention_without_substance` is
        only ever set where the state was actually measured.
        
- `get_aspect_sentiment`: Split an asset's sentiment by what people are actually talking about:
        technology, price, team and community.

        The aggregate can be flat while the parts disagree sharply — bullish on
        technology, bearish on team is a different situation from uniformly
        neutral, and only this tool can tell them apart.
- `get_asset`: An asset's core profile by symbol: name, category and cross-system
        identifiers (CoinGecko id, contract addresses, chains).

        Start here when you have a ticker and need to be sure which asset it
        refers to. Tickers collide across chains — if the symbol is ambiguous,
        resolve_ticker is the tool that says so instead of guessing.
- `get_asset_fundamentals`: Get the full fundamental brief for an asset: market snapshot, supply
        and valuation, project, TVL, revenue, treasury, security, governance,
        unlock schedule, derivatives positioning, competitive rank, valuation
        ratios and a graded scorecard — in one call.

        READ THE SECTION STATES, NOT ONLY THE VALUES. Each section is
        `measured`, `not_held` or `failed`, and sections the asset class cannot
        have are returned separately in `not_applicable`. "This chain has no
        DAO treasury" and "we could not read it" are different facts and this
        response keeps them apart.

        Revenue is split: `S06` is the entity's own fees, `S06b` is the total
        earned by protocols deployed on a chain. The two can differ by two
        orders of magnitude and only the first accrues to the token.
        
- `get_asset_platforms`: Every chain an asset is deployed on, with its contract address and
        token decimals.
- `get_asset_revisions`: Metrics for this asset that CHANGED after they were first published,
        with the old value, the new one and why. An agent that quoted an earlier
        number can find out here that it moved.
- `get_asset_scores`: An asset's Galaxy Score and AltRank, with the components behind each.

        Galaxy Score is a composite of social and market health on a 0-100
        scale; AltRank is relative standing against the rest of the universe,
        where 1 is best. READ THE COMPONENT BREAKDOWN — a score moved by
        sentiment and one moved by volume mean different things, and the
        composite alone cannot tell you which happened.
- `get_asset_social_signal`: Per-asset social signal over time. The `available` field states plainly whether we hold it.
- `get_asset_technicals`: Get support and resistance merged across 1w/1d/4h/1h, per-timeframe
        indicators, and derived spot/long/short setups for an asset.

        Each level carries the timeframes that confirmed it and the method on
        each — a level agreed by four charts is a different claim from one seen
        on the hourly. `measured_against` names the exchange and pair every
        distance was computed from, and `price_age_minutes` says how old that
        price is.

        Setups are GEOMETRY, not forecasts: an entry is a level cluster, a stop
        is that level offset by a measured multiple of daily range, and
        `rr_ratio` is computed from those prices. `status` is derived per
        request — pending, in_zone or passed.
        
- `get_bot_detections`: Accounts flagged as automated or coordinated, with the behavioural
        evidence. Volume from these should not be read as organic attention.

        READ `coverage` AND `note` BEFORE YOU READ THE LIST. No scorer is
        currently running, so `bot_probability` is NULL for every account and
        this list comes back EMPTY. An empty list here says nothing whatsoever
        about how clean the corpus is — it means nobody has been scored yet,
        and the response says so explicitly in `note`.

        `coverage.accounts_scored` vs `accounts_total` is the honest number:
        while the first is 0, treat this tool as reporting our coverage, not
        the market's cleanliness.
- `get_chain_coverage`: Per-chain coverage — tokens mapped, labelled addresses, whale
        transactions seen, and how many were attributed to a named entity.
        Attribution is Etherscan-derived, so it is strong on Ethereum and sparse
        on other chains.
- `get_constellation`: Asset co-mention graph — which assets are discussed together, with what was filtered out.
- `get_coordinated_campaigns`: Detected coordinated posting campaigns — the same message pushed by
        multiple accounts. Matching is exact-text, so this catches copypasta and
        misses the same campaign reworded.
- `get_correlation`: How closely an asset's social activity tracks its price, with the lead/lag.

        Correlation is not causation and this endpoint does not claim it is. A
        high coefficient says the two series moved together over the window —
        it does not say which one moved first. Use get_leading_indicators for
        that question.
- `get_creator_rankings`: Rank social creators across the whole corpus by measured influence.

        Corpus-wide, unlike get_influencers which is scoped to one asset.
        Influence is computed from engagement our collectors actually observed,
        so a creator we do not ingest is absent rather than ranked low — an
        absence here is a coverage fact, not a judgement.
- `get_data_coverage`: What data this platform actually holds right now: asset count, how many
        are priced, chains covered, labelled addresses, social corpus size, and
        freshness timestamps. Call this to check whether an answer is supportable
        before asserting it.
- `get_disclosures`: Public-record documents about issuers we track: SEC filings and
        federal court dockets.

        Exists because both RWA failures of 2026 were disclosed in public text
        before the price moved -- RealT's tax delinquency sat in court filings
        for a year, Goldfinch's borrower defaults were in governance forums
        before the vote.

        TWO THINGS YOU MUST NOT MISREPORT:

        A null `severity` means the document was FOUND and NOT ASSESSED. It is
        unjudged, not benign, and must never be summarised as "nothing
        concerning".

        `match_confidence: name_unverified` means the document was matched on a
        NAME and may concern a different company entirely -- searching for
        'RealT' returns 'Broadway White Realty'. Do not attribute an unverified
        filing to an issuer without checking it.

        An empty result means nothing has been found, which for a subject never
        searched is not a statement about them at all.
        
- `get_emerging_dex_pairs`: Newly created DEX pairs above a USD liquidity floor.

        THE FLOOR IS RETURNED IN THE RESPONSE, and it is load-bearing: this is
        the long tail where most pairs are rugs or noise, and the floor is the
        only thing separating a signal from a list of scams. Raising it shrinks
        the result set and raises its quality.
- `get_entities`: Named entities extracted from social documents about an asset —
        people, organisations, products and other tickers mentioned alongside
        it. Use it to find what a narrative is actually about.
- `get_entity_flows`: Whale flow per labelled entity over the window. Inflow to an exchange
        is distribution pressure; outflow is accumulation.
- `get_exchange_flows`: Net movement of an asset into and out of exchange wallets.

        Inflows are supply arriving somewhere it can be sold; outflows are
        supply leaving to self-custody. The conventional reading is
        distribution vs accumulation, but a single large transfer can be an
        exchange rebalancing its own wallets — check get_entity_flows before
        attributing intent.
- `get_exchange_listings`: Recent exchange listing announcements — an asset being added to a venue.

        A listing is an ATTENTION event, not a fundamental one: it changes who
        can buy, not what the project is worth. Use it to explain a volume or
        social spike, not as a valuation input.
- `get_exchange_netflow`: Per-token flow onto and off exchanges. Inflow is distribution pressure, outflow is accumulation. net_usd where the token can be priced.
- `get_hodl_waves`: Bitcoin supply split by coin age over time — which cohorts are holding and which are moving.
- `get_influencer_leaderboard`: The influencer leaderboard, ranked by what people actually got RIGHT
        rather than by how loud they are.

        rank_by="accountability" (default): scored Predictor vs Reactor — did the
        call come before the move, or after it.
        rank_by="accuracy": ranked by how often their price calls came true, by the
        Wilson lower bound of the hit rate (>= 20 resolved calls to rank), over
        `window_days` (30/90/180) judged at `horizon_hours` (24/168/720).

        Reach and accuracy are different axes, and most rankings only publish
        the first.
- `get_influencer_ledger`: Get an influencer's track record. `view` picks one of three records:

        accountability (default) — did their calls precede the move (Predictor)
          or react to it (Reactor)? Hit rate and track record.
        accuracy — did their price calls come true? Hit rate over 30/90/180 days
          at 24h, 7d and 30d, with the Wilson lower bound and excess over BTC.
        calls — the receipts: each call's post excerpt and link, entry price, and
          what happened after 24h/7d/30d. `horizon_hours` (24, 168, 720) picks
          which outcome the list is sorted and filtered on.

        One request per call. `influencer_id` is a creator id or username.
- `get_influencers`: The accounts driving conversation about one asset, by reach and engagement.

        Ranked by measured activity in our corpus, NOT by follower count, and
        NOT by whether they were right — see get_influencer_ledger for track
        record. A large account posting noise ranks here; that is the point of
        keeping the two tools separate.
- `get_leading_indicators`: Which social and on-chain signals have historically MOVED FIRST for an asset.

        This is the lead/lag question that get_correlation deliberately does not
        answer. A lead measured over a past window is not a forecast and the
        response does not present it as one — it is the observed ordering of two
        series, and it can break.
- `get_metric_metadata`: Describe one metric before you use it: parity, category, minimum interval
        and any caveat attached to it.

        CALL THIS BEFORE get_metric_timeseries if the metric is unfamiliar. The
        minimum interval tells you the finest resolution that is real rather
        than interpolated, and the caveat is where an approximate metric admits
        what it approximates.
- `get_metric_revisions`: Restatements of published numbers — what changed, over which period, and why. A correction is not a market move.
- `get_metrics_batch`: Latest value of MANY metrics for ONE asset in a single call.
        `metrics` is comma-separated. The mirror of get_metric_timeseries_multi.
- `get_metric_timeseries`: Timeseries for any available metric on any asset.

        Accepts Santiment-style relative dates ("utc_now-7d") as well as ISO
        timestamps. If the metric is not available this returns an error naming it
        rather than an empty series — an empty result here always means "no data in
        that range", never "we do not have this metric".
- `get_metric_timeseries_multi`: Timeseries for ONE metric across MANY assets in a single call.

        `assets` is comma-separated (e.g. "BTC,ETH,SOL"). Prefer this over
        looping get_metric_timeseries — it is one round trip instead of N, and
        the values are guaranteed to come from the same read.
- `get_narrative_clusters`: The raw clusters behind the stories, without the prose — for a model
        doing its own summarisation. Every cluster has >= 2 distinct authors;
        near-identical posts from one account are copypasta and excluded.
- `get_narrative_rotation`: Which crypto narrative is GAINING or LOSING attention share, with a
        liquidity confirmation leg.

        Compares the last `days` against the equally long window immediately
        before. Covers the 2026 narrative set — RWA, tokenized equities and
        treasuries, stablecoins, DePIN, perp DEXs, prediction markets, AI agents
        — as well as DeFi, NFT, Gaming and the L1/L2 split.

        READ `vocabulary_stale` BEFORE QUOTING ANY DELTA. When true, the corpus
        spans two keyword vocabularies and a narrative whose keywords were just
        added will appear to be rising purely because only recent posts were
        ever tested against them. That is a rotation signal manufactured by a
        deploy, not by the market.

        A narrative with `unconfirmed: true` has measured attention and NO
        liquidity confirmation — the confirmation is absent, not zero, and the
        row states why.
        
- `get_ohlcv`: Daily candles (open/high/low/close/volume) for an asset, with the
        venue they came from. Coverage is bounded by which assets have a USDT
        pair on Binance or Bybit — an asset absent here has no candle source we
        collect, which is not the same as having no price.
- `get_research_report`: One asset's generated report. The `unavailable` field lists metrics
        the report could NOT use — read it, because a report that silently omits
        funding rate reads as a report about an asset with unremarkable funding.
- `get_sentiment_trends`: Sentiment over time for an asset, with sample size and confidence
        interval. IMPORTANT: sentiment measured on few documents is unreliable —
        our own bootstrap put the direction wrong 35.6% of the time at n=1 and
        9.5% at n=20. Read n before quoting a direction.
- `get_signal_integrity`: Get the Signal Integrity score (0-100) — is the move real or exit liquidity?
        Fuses social authenticity + on-chain reality + fundamental backing, with an
        Exit Liquidity Radar flag.
- `get_similar_posts`: Posts nearest a given post in embedding space. Read the returned BAND, never the raw cosine — 43% of this corpus sits at 0.80-0.90 by default.
- `get_social_coverage`: How many assets actually clear the document floor that makes each
        social metric computable.

        Call this BEFORE quoting sentiment for an asset. A large corpus total
        does not mean sentiment works everywhere: attention is a power law and
        the documents pile onto BTC, so most assets stay uncomputable.
- `get_social_dominance`: Each asset's SHARE of total social attention over a window, with the posts,
        distinct authors, engagement and sentiment behind the share.

        Share is relative and sums across the universe, so an asset's dominance
        can fall while its absolute volume rises — that is the market getting
        louder, not the asset getting quieter. Distinct authors is the column
        that separates a real conversation from one account posting 400 times.
- `get_social_posts`: Collected social posts, optionally filtered by platform (bluesky, farcaster, reddit, 4chan, bitcointalk, rss).
- `get_sql_schema`: List every relation and column queryable via run_sql, plus the rules and what is deliberately not exposed.
- `get_story_posts`: The individual posts a story was assembled from — the receipts.

        Call this whenever a story matters enough to check. A generated story is
        a summary over these posts; this is how you verify it says what the
        sources say rather than taking the summary on trust.
- `get_top_altranks`: The assets ranked best by AltRank right now — relative standing, not absolute.

        AltRank is a RANK: 1 is the strongest in the universe. A rising AltRank
        in a falling market means outperforming the fall, not going up. Pair
        with get_asset_scores when the distinction matters.
- `get_top_galaxy_scores`: The assets with the strongest Galaxy Score right now.

        Galaxy Score is 0-100 and composite: social volume, engagement,
        sentiment and market health folded together. A high score is a
        statement about ATTENTION AND HEALTH, not about valuation — it does not
        mean an asset is cheap. Call get_asset_scores for the breakdown.
- `get_topic_rank`: Rank what the market is TALKING ABOUT — themes and narratives, not assets.

        Ranked by mentions weighted by engagement over the window, so a topic
        posted about loudly by few accounts does not outrank one discussed
        widely. Use get_trending_assets for tickers; this is the layer above,
        where "restaking" and "AI agents" live.
- `get_trending_assets`: Assets trending now by social activity, with the hype score that
        separates a real move from a burst of noise.
- `get_trending_stories`: Current narratives, each an LLM summary of a CLUSTER of posts rather
        than a single document.

        Read author_count before quoting one: a high post_count with a low
        author_count is one person repeating themselves, not a narrative. These
        are machine summaries, not edited articles.
- `get_whale_transactions`: Recent large on-chain transfers, optionally filtered to one asset.

        "Whale" is a SIZE threshold, not an identity. A large transfer is very
        often an exchange moving its own funds between wallets, which is not a
        market action at all — counterparty labels are included where we hold
        them, and a null label means WE HAVE NO LABEL, never that the
        counterparty is unknown or safe.
- `get_wrapper_basis`: Cross-wrapper spread for tokenized equities: one real company, every
        issuer that tokenizes it, and how far apart they trade.

        SpaceX trades under five wrappers and they do not agree. Spreads run
        roughly 0.1-0.9 percent between programs referencing the same share.

        This is a CROSS-WRAPPER comparison, deliberately not a comparison
        against the underlying stock — that needs a licensed equity feed and no
        free commercially-usable one exists.

        A spread is NOT free money. Each issuer carries its own credit,
        redemption terms and transfer restrictions, and the cheapest wrapper is
        often cheapest for a reason. Do not present it as an arbitrage.
        
- `list_labelled_addresses`: Browse labelled addresses, filtered by chain, entity (e.g. Binance) or
        category (exchange | bridge | dex | mev | staking | mining | sanctioned).
- `list_metrics`: List every metric Onvexia knows, with its parity and caveats.

        parity=exact means we compute it the way Santiment does; approximate means
        same concept but different coverage or method (read the caveat before
        relying on the number); unavailable means we do NOT serve it yet.
        Unavailable metrics are listed on purpose — check here before asserting
        that Onvexia can answer a question.
- `list_nl_screens`: Previously compiled natural-language screens: the English somebody
        wrote and the filter it compiled to, INCLUDING refusals. Useful as
        worked examples of the screener's filter grammar before you write one.
- `list_research_reports`: List the assets that currently have a generated research report available.

        Returns the index, not the reports — call get_research_report with a
        symbol for the body. An asset missing from this list has not been
        written up; that is a statement about our coverage, not about the
        asset.
- `lookup_address`: Identify a blockchain address — exchange, bridge, DEX, MEV bot, mining
        pool, or OFAC-sanctioned — with the source and confidence of each label.
        IMPORTANT: `known: false` means no label is held. It does NOT mean the
        address is clean or unflagged.
- `resolve_ticker`: Does a bare ticker actually mean the crypto asset?

        verdict 'crypto' means mentions are about the asset; 'equity'/'other'
        means the bare word is dominated by something else (TIA is Spanish
        'tia'; GRT collides with 'graph'). A 404 is NOT a clean bill of health —
        it means nobody has adjudicated that ticker yet.
- `run_sql`: Run a read-only SELECT against the platform's data. One statement, 15s timeout, 10,000-row cap; truncation is always reported. Call get_sql_schema first for the queryable relations.
- `screen_assets`: Filter the whole asset universe server-side and return the matches.

        `filter` is comma-separated `field:op:value` terms, e.g.
        "market_cap:gt:1000000000,funding_rate:lt:0" — assets over $1B whose
        funding rate is negative. Ops: gt, gte, lt, lte, eq, ne.
        Call screener_fields() first to see what fields exist and their ranges;
        guessing a field name gets the whole query rejected.
- `screener_fields`: Every field the screener accepts, with type and description. Call this
        before building a filter rather than guessing field names.
- `search_assets`: Search the whole asset universe (~1,900 assets) by symbol or name.
        Use this to resolve a user's loose reference into a real symbol before
        calling the other tools.
