Read-only impersonal market research: portfolio rankings, ticker scores, signals, daily briefs.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Your Rayana AI API key (Pro tier or above), from rayana.ai/account. Leave blank to see plans and subscribe first.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
The portfolio-analyst brief with its per-ticker views — the broadcast opinion layer, identical for every caller.
The portfolio-analyst brief with its per-ticker views — the broadcast opinion layer, identical for every caller.
| Argument | Type | Description |
|---|---|---|
| date | any |
{
"type": "object",
"title": "rayana_ai_analyst_briefArguments",
"properties": {
"date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Date",
"default": null
}
}
}The public articles feed, newest first, when `slug` is omitted; one published article's full body when `slug` is given.
| Argument | Type | Description |
|---|---|---|
| slug | any | |
| limit | integer | |
| offset | integer |
{
"type": "object",
"title": "rayana_ai_articlesArguments",
"properties": {
"slug": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Slug",
"default": null
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 30
},
"offset": {
"type": "integer",
"title": "Offset",
"default": 0
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| code* | string |
{
"type": "object",
"title": "rayana_ai_complete_setupArguments",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"title": "Code"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| limit | integer | |
| source | any |
{
"type": "object",
"title": "rayana_ai_consensusArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 25
},
"source": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Source",
"default": null
}
}
}Which lanes (daily/turtle/mr) currently have a batch available.
No arguments.
{
"type": "object",
"title": "rayana_ai_lanesArguments",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| date | any |
{
"type": "object",
"title": "rayana_ai_market_briefArguments",
"properties": {
"date": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"title": "Date",
"default": null
}
}
}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.
No arguments.
{
"type": "object",
"title": "rayana_ai_plansArguments",
"properties": {}
}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.
| Argument | Type | Description |
|---|---|---|
| slug* | string |
{
"type": "object",
"title": "rayana_ai_portfolioArguments",
"required": [
"slug"
],
"properties": {
"slug": {
"type": "string",
"title": "Slug"
}
}
}The full shelf of Rayana AI's broadcast model portfolios as merchandising cards, with each card's tier/openable/delayed flags.
| Argument | Type | Description |
|---|---|---|
| include_retired | boolean |
{
"type": "object",
"title": "rayana_ai_portfoliosArguments",
"properties": {
"include_retired": {
"type": "boolean",
"title": "Include Retired",
"default": false
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| lane | string | |
| limit | integer | |
| offset | integer | |
| include_assessment | boolean |
{
"type": "object",
"title": "rayana_ai_rankingsArguments",
"properties": {
"lane": {
"enum": [
"daily",
"turtle",
"mr"
],
"type": "string",
"title": "Lane",
"default": "daily"
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 25
},
"offset": {
"type": "integer",
"title": "Offset",
"default": 0
},
"include_assessment": {
"type": "boolean",
"title": "Include Assessment",
"default": false
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| days | integer | |
| view | string | |
| include_trajectory | boolean |
{
"type": "object",
"title": "rayana_ai_rotationArguments",
"properties": {
"days": {
"type": "integer",
"title": "Days",
"default": 45
},
"view": {
"enum": [
"summary",
"laggards",
"discovered",
"members"
],
"type": "string",
"title": "View",
"default": "summary"
},
"include_trajectory": {
"type": "boolean",
"title": "Include Trajectory",
"default": false
}
}
}Resolve free text (ticker or company name) to known Rayana AI symbols, best match first. Pure resolution — never accrues signal.
| Argument | Type | Description |
|---|---|---|
| q* | string | |
| limit | integer |
{
"type": "object",
"title": "rayana_ai_searchArguments",
"required": [
"q"
],
"properties": {
"q": {
"type": "string",
"title": "Q"
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 8
}
}
}Latest aggregator-consensus batch for one asset lane: which tickers cleared the signal pipeline, blended agg_score, confirming source count.
| Argument | Type | Description |
|---|---|---|
| lane | string | |
| limit | integer |
{
"type": "object",
"title": "rayana_ai_signalsArguments",
"properties": {
"lane": {
"enum": [
"equity",
"crypto",
"commodity"
],
"type": "string",
"title": "Lane",
"default": "equity"
},
"limit": {
"type": "integer",
"title": "Limit",
"default": 60
}
}
}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`).
| Argument | Type | Description |
|---|---|---|
| tier | string | |
| interval | string |
{
"type": "object",
"title": "rayana_ai_start_checkoutArguments",
"properties": {
"tier": {
"enum": [
"standard",
"pro",
"elite"
],
"type": "string",
"title": "Tier",
"default": "pro"
},
"interval": {
"enum": [
"month",
"year"
],
"type": "string",
"title": "Interval",
"default": "month"
}
}
}Full per-ticker research view: score, lane membership, per-source signals, virality, consensus, cluster-rotation position, forward returns.
| Argument | Type | Description |
|---|---|---|
| symbol* | string |
{
"type": "object",
"title": "rayana_ai_tickerArguments",
"required": [
"symbol"
],
"properties": {
"symbol": {
"type": "string",
"title": "Symbol"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| symbol* | string |
{
"type": "object",
"title": "rayana_ai_ticker_analystArguments",
"required": [
"symbol"
],
"properties": {
"symbol": {
"type": "string",
"title": "Symbol"
}
}
}One ticker's published article history, newest first.
| Argument | Type | Description |
|---|---|---|
| symbol* | string |
{
"type": "object",
"title": "rayana_ai_ticker_articlesArguments",
"required": [
"symbol"
],
"properties": {
"symbol": {
"type": "string",
"title": "Symbol"
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| period | string | |
| symbol* | string | |
| max_points | integer |
{
"type": "object",
"title": "rayana_ai_ticker_priceArguments",
"required": [
"symbol"
],
"properties": {
"period": {
"enum": [
"1M",
"6M",
"YTD",
"1Y",
"5Y",
"MAX"
],
"type": "string",
"title": "Period",
"default": "1Y"
},
"symbol": {
"type": "string",
"title": "Symbol"
},
"max_points": {
"type": "integer",
"title": "Max Points",
"default": 260
}
}
}The attention leaderboard: latest virality snapshot ranked by VScore, with the full intensity/breadth/slope/vramp decomposition.
| Argument | Type | Description |
|---|---|---|
| limit | integer |
{
"type": "object",
"title": "rayana_ai_trendsArguments",
"properties": {
"limit": {
"type": "integer",
"title": "Limit",
"default": 40
}
}
}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.
| Argument | Type | Description |
|---|---|---|
| view* | string | |
| limit | any |
{
"type": "object",
"title": "rayana_ai_trends_detailArguments",
"required": [
"view"
],
"properties": {
"view": {
"enum": [
"sources",
"heat",
"search",
"video"
],
"type": "string",
"title": "View"
},
"limit": {
"anyOf": [
{
"type": "integer"
},
{
"type": "null"
}
],
"title": "Limit",
"default": null
}
}
}