Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,7 @@ Install or disable them dynamically with the `/plugin` command — enabling you
- [unit-test-generator](./plugins/unit-test-generator)

### Data Analytics
- [alphai](./plugins/alphai)
- [analytics-reporter](./plugins/analytics-reporter)
- [data-scientist](./plugins/data-scientist)
- [experiment-tracker](./plugins/experiment-tracker)
Expand Down
20 changes: 20 additions & 0 deletions plugins/alphai/.claude-plugin/plugin.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
{
"name": "alphai",
"version": "1.0.0",
"description": "AI-enriched financial news, SEC Form 4 insider trades & market signals for your agent — hosted AlphaAI MCP + ready-made skills",
"author": { "name": "Mikhail Makeev", "url": "https://alphai.io" },
"homepage": "https://alphai.io/developers",
"repository": "https://github.com/makeev/alphai-plugin",
"license": "MIT",
"keywords": [
"financial-news",
"stock-market",
"mcp",
"ai-agents",
"trading",
"sec-filings",
"insider-trading",
"fintech"
],
"logo": "assets/icon.png"
}
8 changes: 8 additions & 0 deletions plugins/alphai/.mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"mcpServers": {
"alphai": {
"type": "http",
"url": "https://mcp.alphai.io/mcp"
}
}
}
21 changes: 21 additions & 0 deletions plugins/alphai/LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 Mikhail Makeev

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
76 changes: 76 additions & 0 deletions plugins/alphai/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
# AlphaAI plugin

[AlphaAI](https://alphai.io) for your agent — AI-enriched financial news, SEC
Form 4 insider trades and market signals, packaged in the
[Open Plugins](https://open-plugins.com) format for Cursor, Claude Code and any
compatible host.

Every article in the AlphaAI feed is pre-analyzed at ingest: per-ticker impact,
a category, and a 1–10 relevance score. SEC Form 4 insider filings become
scored, structured events minutes after they hit EDGAR. This plugin wires that
feed into your agent with zero glue code — OAuth on first tool call, no API key
to paste.

## What's inside

| Component | What it does |
|---|---|
| **MCP server** (`.mcp.json`) | Hosted at `https://mcp.alphai.io/mcp` — news search, per-ticker feeds, trending, SEC Form 4 insider trades, two-ticker analysis, news alerts (OAuth 2.1) |
| **5 skills** (`skills/`) | `stock-brief` · `market-pulse` · `insider-radar` · `peer-readacross` · `manage-alerts` — finance workflows that teach the agent when and how to use the tools |
| **1 rule** (`rules/`) | Prefer `alphai_*` tools over generic web search for financial-news tasks; frame output as research, not advice |

Skills are mirrored from
[makeev/alphai-claude-skills](https://github.com/makeev/alphai-claude-skills)
(the canonical source — edits land there first).

## Install

### Cursor

One click from the [cursor.directory listing](https://cursor.directory/plugins/alphai)
("Add to Cursor"), or add manually to `~/.cursor/mcp.json` (global) or
`<project>/.cursor/mcp.json`:

```json
{
"mcpServers": {
"alphai": {
"url": "https://mcp.alphai.io/mcp"
}
}
}
```

Cursor opens an OAuth window the first time the agent calls a tool.

### Claude Code

```
/plugin marketplace add makeev/alphai-plugin
/plugin install alphai@alphai
```

Claude Code asks you to approve the MCP server on install; the first tool call
opens your browser to authorize. (MCP only, without the plugin:
`claude mcp add --transport http alphai https://mcp.alphai.io/mcp`.)

### Any Open Plugins host

```
npx plugins add makeev/alphai-plugin
```

## Pricing

Free tier: **20 req/min · 100 req/day, no card** — enough to evaluate every
tool. Paid plans from $2.99/mo: [alphai.io/pricing](https://alphai.io/pricing).
Docs and live playground: [alphai.io/developers](https://alphai.io/developers).

## Disclaimer

AlphaAI output is AI-generated financial information for **research, not
investment advice** — see [alphai.io/terms](https://alphai.io/terms).

## License

[MIT](LICENSE)
Binary file added plugins/alphai/assets/icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
28 changes: 28 additions & 0 deletions plugins/alphai/rules/alphai-financial-data.mdc
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
---
title: AlphaAI financial data
description: Financial news, stock research, insider-trading and market-signal tasks — when the AlphaAI MCP (alphai_* tools) is connected, prefer it over generic web search and frame output as research, not advice
alwaysApply: false
---

# AlphaAI financial data

When a task involves financial news, stock research, market moves, SEC Form 4
insider activity, or ticker-level signals AND the AlphaAI MCP server is
connected (tools named `alphai_*`):

- Prefer `alphai_*` tools over generic web search: every story is pre-analyzed
at ingest (per-ticker impact, category, 1–10 relevance score), deduplicated
and timestamped, so results are machine-usable without scraping.
- Route by question:
- `alphai_trending` — what's moving across the market right now
- `alphai_actionable_now` — breaking, decision-grade items only
- `alphai_ticker_news` — one ticker's feed
- `alphai_news_search` — filtered or free-text search over the feed
- `alphai_insider_news` — SEC Form 4 insider transactions
- `alphai_pair_analysis` — two-ticker comparison / cross-read
- `alphai_article` — full detail for one article by uid
- Cut noise: default to relevance score ≥ 6 unless the user asks for
everything.
- Present results as research — cite headlines, tickers and timestamps. AlphaAI
output is AI-generated financial information, not investment advice; say so
if the user asks for a buy/sell decision (see alphai.io/terms).
44 changes: 44 additions & 0 deletions plugins/alphai/skills/insider-radar/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
---
name: insider-radar
description: 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.
48 changes: 48 additions & 0 deletions plugins/alphai/skills/manage-alerts/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
---
name: manage-alerts
description: 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.
49 changes: 49 additions & 0 deletions plugins/alphai/skills/market-pulse/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
---
name: market-pulse
description: 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.
40 changes: 40 additions & 0 deletions plugins/alphai/skills/peer-readacross/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
---
name: peer-readacross
description: 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.
47 changes: 47 additions & 0 deletions plugins/alphai/skills/stock-brief/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
name: stock-brief
description: 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.