# Rayana AI

> Read-only impersonal market research: portfolio rankings, ticker scores, signals, daily briefs.

- name: ai.rayana/rayana-ai
- version: 1.1.1
- connection class: R0 (autonomous)
- trust: 82/100 flags: no-repository
- quality: 92/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/ai.rayana%2Frayana-ai
- tools: https://api.protogrid.dev/v1/servers/ai.rayana%2Frayana-ai/tools

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

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "rayana-ai": {
      "type": "http",
      "url": "https://mcp.rayana.ai/mcp",
      "headers": {
        "X-API-Key": "${X_API_KEY}"
      }
    }
  }
}
```

Placeholders to fill: `${X_API_KEY}`.

## Trust

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

## Quality 92/100 (strong)

### 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: 93 (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`: 20 of 20 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 1 of 20 tools declare all four hints; missing: rayana_ai_lanes (destructiveHint, idempotentHint); rayana_ai_consensus (destructiveHint, idempotentHint); rayana_ai_ticker_analyst (destructiveHint, idempotentHint); …
- pass `tools.token_cost`: about 2,768 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

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

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

- tools: 20, about 2,768 tokens to load them all
- tool set hash: 55729ea4a416850ffdef8e868b8a4eb5
- tools last changed: 2026-10-21T00:18:10.221Z
- badge: [![protogrid quality](https://protogrid.dev/badge/ai.rayana/rayana-ai.svg)](https://protogrid.dev/servers/ai.rayana/rayana-ai)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-21 `rayana_ai_complete_setup` changed (title, description, annotations) **meaning changed**
  - before: Exchange a pairing code from your principal's account page for an API key. Ask them to confirm before you call this: it issues a new key and immediately invalidates the account's previous one, so any other client already using a key will stop working until it is given the new value. The key comes back once and is not retrievable afterwards — only a hash of it is stored. Put it in the ``X-API-Key`` header on this connection and on any REST call. Codes are single-use, expire in 15 minutes, and are burnt after a few wrong guesses; if one is refused, ask for a fresh one rather than retrying.
  - after: For clients that connect with an API key rather than OAuth: exchanges a pairing code from the user's account page for an API key. Destructive: it issues a new key and immediately revokes the account's previous one, so any other client still using the old key stops working. OAuth connections are not affected. The key is returned once and cannot be retrieved later; only a hash of it is stored. It is sent as the `X-API-Key` header on MCP and REST requests. Codes are single-use, expire after 15 minutes, and are invalidated after a few wrong attempts.
- 2026-10-21 `rayana_ai_start_checkout` changed (title, description, annotations) **meaning changed**
  - before: Get a link your principal opens in a browser to subscribe. No API key needed. Give them the URL — you cannot complete this yourself, and should not try: they sign in, accept the Terms and authenticate the payment. If the tier includes API access, their account page then shows a short pairing code; read it back into ``rayana_ai_complete_setup`` to get your API key without them pasting a secret into this conversation. **Standard does not include API or MCP access** — if the point of the purchase is a key for you, ask for pro or elite.
  - after: Returns a subscription link for a tier, which the user opens in a browser. Works without signing in or an API key. The tool itself takes no payment: the user signs in, accepts the Terms of Service and pays on Stripe's hosted checkout page. Standard does not include access to this server's research tools; Pro and Elite do. After payment, a connection that signs in with OAuth (as Claude's connectors do) reaches the research tools once the user signs in with the same account. A client that connects with an API key instead gets one through a pairing code on the account page (see `rayana_ai_complete_setup`).
- 2026-10-21 `rayana_ai_plans` changed (title, description, annotations) **meaning changed**
  - before: What Rayana AI costs and what each tier unlocks. No API key needed — call this first if a research tool refused you for want of one. API and MCP access start at the Pro tier. Prices are USD; annual billing is ten months' price for twelve. Use ``rayana_ai_start_checkout`` to turn a choice here into a link your principal can open.
  - after: Rayana AI's subscription tiers: price, rate limits, and what each tier includes. Works without signing in or an API key. The research tools on this server require the Pro tier or higher. Prices are USD; annual billing is ten months' price for twelve. `rayana_ai_start_checkout` returns a subscription link for a tier listed here.
- 2026-10-21 `rayana_ai_articles` changed (title, description, annotations)
  - before: The public articles feed, newest first, when ``slug`` is omitted; one published article's full body when ``slug`` is given.
  - after: The public articles feed, newest first, when `slug` is omitted; one published article's full body when `slug` is given.
- 2026-10-21 `rayana_ai_search` changed (title, description, annotations)
  - before: Resolve free text (ticker or company name) to known Rayana AI symbols, best match first. Pure resolution — never accrues signal.
  - after: Resolve free text (ticker or company name) to known Rayana AI symbols, best match first. Pure resolution — never accrues signal.
- 2026-10-21 `rayana_ai_portfolio` changed (title, description, annotations)
  - before: One model portfolio's full detail: holdings, overlay legs, event feed, NAV series, and windowed returns. Returns an error if the slug's tier (e.g. an Elite-only book) is above this key's own tier — a Pro key does not get Elite content just because it has MCP access.
  - after: One model portfolio's full detail: holdings, overlay legs, event feed, NAV series, and windowed returns. Returns an error if the book's tier (e.g. an Elite-only book) is above the caller's own subscription tier.
- 2026-10-21 `rayana_ai_portfolios` changed (title, description, annotations)
  - before: The full shelf of Rayana AI's broadcast model portfolios as merchandising cards, with each card's tier/openable/delayed flags.
  - after: The full shelf of Rayana AI's broadcast model portfolios as merchandising cards, with each card's tier/openable/delayed flags.
- 2026-10-21 `rayana_ai_analyst_brief` changed (title, description, annotations)
  - before: The portfolio-analyst brief with its per-ticker views — the broadcast opinion layer, identical for every caller.
  - after: The portfolio-analyst brief with its per-ticker views — the broadcast opinion layer, identical for every caller.
- 2026-10-21 `rayana_ai_market_brief` changed (title, description, annotations)
  - before: The daily market brief: a generic engine-wide read with no recommendations, descriptive only. Latest by default; pass ``date`` (YYYY-MM-DD) for a specific day.
  - after: The daily market brief: a generic engine-wide read with no recommendations, descriptive only. Latest by default; pass `date` (YYYY-MM-DD) for a specific day.
- 2026-10-21 `rayana_ai_trends_detail` changed (title, description, annotations)
  - before: The attention layer's raw texture. ``sources``: per-source reach today. ``heat``: per-(ticker, source) attention contributions. ``search``: rising/breakout consumer search queries. ``video``: rising video-view velocity. ``limit`` applies to search/video only; omit it to use that view's own default.
  - after: The attention layer's raw texture. `sources`: per-source reach today. `heat`: per-(ticker, source) attention contributions. `search`: rising/breakout consumer search queries. `video`: rising video-view velocity. `limit` applies to search/video only; omit it to use that view's own default.

Full history: https://api.protogrid.dev/v1/servers/ai.rayana%2Frayana-ai/changes

## Remotes

- https://mcp.rayana.ai/mcp (streamable-http, auth none, reachable true, uptime30d 0.9649123)

## Packages

_none_

## Tools (20)

- `rayana_ai_analyst_brief`: The portfolio-analyst brief with its per-ticker views — the broadcast
opinion layer, identical for every caller.
- `rayana_ai_articles`: The public articles feed, newest first, when `slug` is omitted; one
published article's full body when `slug` is given.
- `rayana_ai_complete_setup`: For clients that connect with an API key rather than OAuth: exchanges a
pairing code from the user's account page for an API key. Destructive: it
issues a new key and immediately revokes the account's previous one, so
any other client still using the old key stops working. OAuth connections
are not affected.

The key is returned once and cannot be retrieved later; only a hash of it
is stored. It is sent as the `X-API-Key` header on MCP and REST
requests. Codes are single-use, expire after 15 minutes, and are
invalidated after a few wrong attempts.
- `rayana_ai_consensus`: Per-source consensus snapshots (insider trades, congressional trades,
earnings beats, dated catalysts, on-chain flows, 13F filings, AI
news-beneficiary reads). Omit `source` for every source at once, or
pass one of the slugs returned in a rankings/signals row's source list.

`limit` caps rows per source. The sources are very unevenly sized —
institutional holdings runs to ~1700 rows where on-chain flows may have
two — so a source that comes back with exactly `limit` rows probably has
more, and narrowing with `source` and raising `limit` reads that one
layer deeply for far less context than raising `limit` across all
seven.
- `rayana_ai_lanes`: Which lanes (daily/turtle/mr) currently have a batch available.
- `rayana_ai_market_brief`: The daily market brief: a generic engine-wide read with no
recommendations, descriptive only. Latest by default; pass
`date` (YYYY-MM-DD) for a specific day.
- `rayana_ai_plans`: Rayana AI's subscription tiers: price, rate limits, and what each tier
includes. Works without signing in or an API key.

The research tools on this server require the Pro tier or higher. Prices
are USD; annual billing is ten months' price for twelve.
`rayana_ai_start_checkout` returns a subscription link for a tier listed
here.
- `rayana_ai_portfolio`: One model portfolio's full detail: holdings, overlay legs, event feed,
NAV series, and windowed returns. Returns an error if the book's tier
(e.g. an Elite-only book) is above the caller's own subscription tier.
- `rayana_ai_portfolios`: The full shelf of Rayana AI's broadcast model portfolios as
merchandising cards, with each card's tier/openable/delayed flags.
- `rayana_ai_rankings`: Latest ranked candidate batch for a lane: daily (the main research
lane), turtle (breakout system), or mr (mean-reversion). Rows come back in
rank order, best first, so the default page is the top of the batch.

`total` in the response is the batch size; when it exceeds `count`,
later rows are reached with `offset`. `include_assessment` adds each
row's technical detail (pattern and cluster validation, volume profile)
and roughly triples the response; `rayana_ai_ticker` returns the same
detail for a single name.
- `rayana_ai_rotation`: Cluster-rotation layer. `summary`: latest per-cluster RRG
quadrant/rank rows with deltas, plus the most recent quadrant-crossing
events (`days` controls the window both are computed over).
`laggards`: members trailing a firing cluster's leader. `discovered`:
unsupervised cluster-discovery cohorts the structural taxonomy misses.
`members`: structural cluster membership.

On `summary`, two blocks are trimmed because together they are 80% of
the response while answering a narrower question than the rows do.
`include_trajectory` adds each cluster's full rank series — a chart
payload, off by default. `events` returns the newest 25 crossings; if
exactly 25 come back there are probably older ones, and a wider `days`
is not what returns them.
- `rayana_ai_search`: Resolve free text (ticker or company name) to known Rayana AI symbols,
best match first. Pure resolution — never accrues signal.
- `rayana_ai_signals`: Latest aggregator-consensus batch for one asset lane: which tickers
cleared the signal pipeline, blended agg_score, confirming source count.
- `rayana_ai_start_checkout`: Returns a subscription link for a tier, which the user opens in a
browser. Works without signing in or an API key. The tool itself takes no
payment: the user signs in, accepts the Terms of Service and pays on
Stripe's hosted checkout page.

Standard does not include access to this server's research tools; Pro and
Elite do. After payment, a connection that signs in with OAuth (as
Claude's connectors do) reaches the research tools once the user signs in
with the same account. A client that connects with an API key instead gets
one through a pairing code on the account page (see
`rayana_ai_complete_setup`).
- `rayana_ai_ticker`: Full per-ticker research view: score, lane membership, per-source
signals, virality, consensus, cluster-rotation position, forward returns.
- `rayana_ai_ticker_analyst`: Today's cached AI ticker-analyst read (lean, conviction, thesis,
evidence for/against, invalidation condition). Never triggers a new
model call; 404s if nothing was generated today for this ticker.
- `rayana_ai_ticker_articles`: One ticker's published article history, newest first.
- `rayana_ai_ticker_price`: Daily close-price history for one ticker over the given period.

Long periods are evenly sampled down to `max_points` bars rather than
cut short, so the series still spans the whole period — `5Y` and `MAX`
return the shape of the history, not its last year. `last_close`,
`change_pct` and the `range_low`/`range_high` extremes are computed
over every bar regardless of sampling.
- `rayana_ai_trends`: The attention leaderboard: latest virality snapshot ranked by VScore,
with the full intensity/breadth/slope/vramp decomposition.
- `rayana_ai_trends_detail`: The attention layer's raw texture. `sources`: per-source reach today.
`heat`: per-(ticker, source) attention contributions. `search`:
rising/breakout consumer search queries. `video`: rising video-view
velocity. `limit` applies to search/video only; omit it to use that
view's own default.
