AI-enriched financial news, SEC Form 4 insider trades & market signals for your agent — hosted AlphaAI MCP + ready-made skills
Compare two tickers and surface the cross-read between them using the AlphaAI MCP. Use when the user asks to "compare X and Y", "NVDA vs AMD", "what does <peer>'s news mean for <ticker>", or wants the read-across between two related names (competitors, supplier/customer, same theme).
# Peer read-across
When two names are linked — competitors, a supplier and its customer, two plays
on one theme — the interesting signal is the **read-across**: a peer's print that
resets the other's setup. `alphai_pair_analysis` is built for exactly this.
## Steps
1. **Resolve both tickers.** If given company names, map them with
`alphai_tickers(q=...)`. Any symbol that isn't a recognized active ticker
comes back in `unknown_tickers` and contributes no rows — surface that.
2. **Run the comparison.** Call `alphai_pair_analysis(ticker_a, ticker_b)`. It
returns three things: news naming **both** companies (the shared read-across),
plus each ticker's **own** recent news for context.
3. **Tighten on request.** Raise `min_relevance` (default 4) for only the
strongest items, or `limit` for more rows per list.
## Output
- **Shared story** — the news naming both names: what links them right now and
which way the read-across cuts (does A's news help or hurt B?).
- **{Ticker A}** — 2–3 of its own top stories, one-liners.
- **{Ticker B}** — same.
- **Net read** — one or two sentences: are they moving together or diverging, and
what's the single linking factor (a shared customer, a sector catalyst, a
head-to-head product)?
## Guardrails
- If `alphai_pair_analysis` returns no shared rows, say so — the two names may
simply not be in the same story flow right now; fall back to summarizing each
side's own news rather than forcing a connection.
- Lead with `relevance_score`.
- Describe the read-across the reporting supports; don't manufacture a causal
link. News, not advice.Produce a situational brief on a single stock/ticker — its recent high-relevance news, insider activity, and what to watch next — using the AlphaAI MCP. Use when the user asks to "brief me on <ticker>", "what's going on with <company>", "catch me up on NVDA", or wants a quick read on one name.
# Stock brief
Give a tight, decision-useful read on **one ticker** from AlphaAI's enriched
feed. Not a price quote — a *news* brief: what's been happening, who's buying or
selling, and what to keep an eye on.
## Steps
1. **Resolve the ticker.** If the user gave a company name, not a symbol, call
`alphai_tickers(q=...)` to find it. If `alphai_ticker_news` returns
`unknown_ticker=true`, tell the user and stop — don't invent coverage.
2. **Pull the ticker feed.** Call `alphai_ticker_news(ticker, collapse_stories=true)`.
`collapse_stories` folds syndicated reprints into one row each and adds a
`sources_count` corroboration signal — prefer it for a clean brief. Insider
news is included by default; keep it.
3. **Optional context.** If the user wants the wider tape, call
`alphai_trending(limit=5)` and note any market-level story that touches this
name or its sector.
4. **Deep-dive on demand.** If one story clearly drives the brief and the user
wants detail, fetch it with `alphai_article(uid)` for the full enrichment
(ticker analysis, key entities). The article *body* is not served — work from
the enrichment and summary.
## Output
Keep it to a screen. Structure:
- **One-line read** — the single most important thing about this name right now.
- **Top stories** — 3–5 bullets, each: headline · relevance score · one-clause
"why it matters". Lead with the highest `relevance_score`.
- **Insider activity** — any Form 4 / 13F rows from the feed: who, buy or sell,
size if given. "No notable insider activity in the window" is a valid line.
- **Watch next** — 1–2 concrete things that would change the picture.
## Guardrails
- Every story carries a 1–10 `relevance_score`; lead with the high ones and say
the score so the user can calibrate.
- This is news, not advice. Don't issue buy/sell calls or price targets —
summarize what the reporting says and let the user decide.
- If the feed is thin, say so plainly rather than padding. A short honest brief
beats a long speculative one.Scan SEC Form 4 insider trades and 13F ownership moves for a ticker or a watchlist using the AlphaAI MCP. Use when the user asks about "insider buying", "insider selling", "Form 4 activity", "who's buying <ticker>", "institutional ownership changes", or wants an insider-activity sweep.
# Insider radar
Surface ownership-change signal: **SEC Form 4** trades (officers, directors, 10%
owners trading their own stock) and **13F** moves (funds and foundations
adjusting stakes). AlphaAI templates each filing into a relevance-scored news row,
so the read-across is already done.
## Steps
1. **Single ticker.** Call `alphai_insider_news(ticker="<SYM>")`. If the user
wants only the strongest signal, raise the floor with `min_relevance=8`.
2. **Watchlist.** Call `alphai_insider_news(ticker=...)` once per name. If the
user gave none, call `alphai_insider_news()` unfiltered for the broad tape.
3. **Time-box on request.** For "this week" / "since earnings", pass
`from_date` (ISO, UTC). Paginate with `cursor` only if they ask for more.
4. **Distinguish buys from sells.** Open-market *purchases* by insiders are the
higher-signal event; routine 10b5-1 scheduled sales and option-exercise sales
are noise more often than not. Call that out — don't treat every sale as
bearish.
## Output
- **Notable buys** — insider purchases first: ticker · who/role · size if given ·
relevance. These are what most users actually want.
- **Notable sells** — flag whether each looks like a discretionary sale vs a
scheduled/10b5-1 or option-related sale, where the feed says.
- **Institutional (13F)** — any fund stake increases/trims worth a mention.
- **Read** — one line: is the cluster leaning accumulation or distribution, or is
it just routine?
## Guardrails
- An insider sale is not automatically bearish (taxes, diversification, scheduled
plans). Say what the filing shows; don't over-read it.
- One filing can span several tranches sharing a row — report the *event*, not a
count of line items.
- Lead with `relevance_score`; "no notable insider activity in the window" is a
valid, useful answer.
- News, not advice.List, add, or remove the user's ticker news-alert subscriptions through the AlphaAI MCP. Use when the user asks to "alert me on <ticker>", "subscribe me to <ticker> earnings news", "what alerts do I have?", "stop alerts for <ticker>", or to manage their AlphaAI alert inventory. Requires a paid (Basic/Pro) AlphaAI plan.
# Manage alerts
Let the user manage their own AlphaAI ticker news-alert subscriptions from the
chat. Identity comes from the OAuth login — these tools act on the **caller's
own** account.
> **Tier-gated.** `alphai_alerts_*` require a **Basic or Pro** plan. On the Free
> tier they return `tier_not_paid` — relay that and point to
> <https://alphai.io/pricing> instead of retrying.
## Steps
1. **Show current state first.** For any add/remove, call `alphai_alerts_list()`
up front so you (and the user) can see existing subscriptions, the per-alert
filters, and the tier limit (`current` / `limit`).
2. **Subscribe / update.** `alphai_alerts_subscribe(ticker, category_filter?,
min_relevance_score?)`.
- This is a **partial update**: omitting a field on an *existing* subscription
preserves its current value. A brand-new subscription defaults
`min_relevance_score` to 6.
- `category_filter` is an optional whitelist from the 14 categories (e.g.
`["earnings", "insider"]`) — only those categories trigger the alert.
- Confirm the ticker is real first if unsure (`alphai_tickers`); the tool
raises `unknown_ticker` / `limit_reached` otherwise.
3. **Unsubscribe.** `alphai_alerts_unsubscribe(ticker)` — idempotent; returns
`{removed: false}` if it was already inactive.
## Output
- After a change, restate the resulting subscription in one line: ticker, which
categories trigger it, and the minimum relevance — so the user sees exactly
what they'll be alerted on.
- For a list request, render the subscriptions as a short table (ticker ·
categories · min relevance · delivery mode) and note `current/limit`.
## Guardrails
- **Confirm before mutating.** Read back what you're about to subscribe to or
remove before calling the write tool, especially for bulk changes.
- Handle errors plainly: `tier_not_paid` → suggest upgrading; `limit_reached` →
list current alerts so the user can free a slot; `unknown_ticker` → don't guess
a substitute.
- Never subscribe to tickers the user didn't ask for.Summarize what's moving in the market right now using the AlphaAI MCP. Use when the user asks "what's moving?", "what's the big story today?", "anything breaking?", "market pulse", or wants a fast read on the current tape rather than one specific ticker.
# Market pulse
Answer "what's happening *right now*?" from AlphaAI's feed. Two tools cover two
different questions — pick the right one:
- **`alphai_actionable_now`** — breaking, *decision-grade* news from the last few
hours. The gate is strict: by default only `actionability='high'` (something to
act on TODAY — guidance cut, halted trading, breaking M&A, surprise print).
- **`alphai_trending`** — top stories of the last 48h by relevance. The "big
picture", not necessarily urgent.
## Steps
1. **Start narrow, with `alphai_actionable_now()`** (defaults: last 6h,
high-actionability). This is the real "is anything breaking" signal.
2. **Read an empty result correctly.** Outside major market hours (nights,
weekends — crypto trades 24/7, but high-actionability prints still cluster in
US/European/Asian sessions) an empty list is *expected* — it means no
high-actionability prints in the window, **not** that the tool failed. Before
concluding "nothing happened", widen once: `alphai_actionable_now(hours=24, min_actionability='medium')`.
3. **Add the backdrop with `alphai_trending(limit=10)`.** Use this for the
"bigger stories shaping the week" layer even when nothing is breaking.
4. **Optional focus.** If the user named a sector or theme, resolve it to
tickers (`alphai_tickers(q=...)` or your own knowledge), then
`alphai_news_search(tickers=[...], min_relevance=7)` — there is no free-text
news search; match themes client-side on the returned titles/summaries.
## Output
- **Breaking now** — the high-actionability items, if any. Each: headline ·
ticker(s) · one clause on the decision it forces. If none, say so in one line
and note the window you checked.
- **Big picture** — 3–5 trending stories by relevance, each a one-liner.
- **So what** — one or two sentences tying it together (risk-on/off, a sector in
focus, an event everyone's positioning around).
## Guardrails
- Don't conflate "trending" with "actionable". A story can dominate the tape
(trending) without being something to act on today (actionable). Label which
layer each item came from if it matters.
- Report relevance / actionability honestly; don't upgrade a medium item to
"breaking".
- News, not advice — no trade calls.