From 59ea8e4bf60c7c3d0b40570cdb41b2d61f0c7773 Mon Sep 17 00:00:00 2001 From: Mikhail Makeev Date: Tue, 7 Jul 2026 20:34:30 +0300 Subject: [PATCH] Add alphai plugin (financial news MCP + 5 skills) to Data Analytics --- README.md | 1 + plugins/alphai/.claude-plugin/plugin.json | 20 +++++ plugins/alphai/.mcp.json | 8 ++ plugins/alphai/LICENSE | 21 +++++ plugins/alphai/README.md | 76 ++++++++++++++++++ plugins/alphai/assets/icon.png | Bin 0 -> 7797 bytes .../alphai/rules/alphai-financial-data.mdc | 28 +++++++ plugins/alphai/skills/insider-radar/SKILL.md | 44 ++++++++++ plugins/alphai/skills/manage-alerts/SKILL.md | 48 +++++++++++ plugins/alphai/skills/market-pulse/SKILL.md | 49 +++++++++++ .../alphai/skills/peer-readacross/SKILL.md | 40 +++++++++ plugins/alphai/skills/stock-brief/SKILL.md | 47 +++++++++++ 12 files changed, 382 insertions(+) create mode 100644 plugins/alphai/.claude-plugin/plugin.json create mode 100644 plugins/alphai/.mcp.json create mode 100644 plugins/alphai/LICENSE create mode 100644 plugins/alphai/README.md create mode 100644 plugins/alphai/assets/icon.png create mode 100644 plugins/alphai/rules/alphai-financial-data.mdc create mode 100644 plugins/alphai/skills/insider-radar/SKILL.md create mode 100644 plugins/alphai/skills/manage-alerts/SKILL.md create mode 100644 plugins/alphai/skills/market-pulse/SKILL.md create mode 100644 plugins/alphai/skills/peer-readacross/SKILL.md create mode 100644 plugins/alphai/skills/stock-brief/SKILL.md diff --git a/README.md b/README.md index e4de615..70382dd 100644 --- a/README.md +++ b/README.md @@ -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) diff --git a/plugins/alphai/.claude-plugin/plugin.json b/plugins/alphai/.claude-plugin/plugin.json new file mode 100644 index 0000000..c9c39dd --- /dev/null +++ b/plugins/alphai/.claude-plugin/plugin.json @@ -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" +} diff --git a/plugins/alphai/.mcp.json b/plugins/alphai/.mcp.json new file mode 100644 index 0000000..c89b36c --- /dev/null +++ b/plugins/alphai/.mcp.json @@ -0,0 +1,8 @@ +{ + "mcpServers": { + "alphai": { + "type": "http", + "url": "https://mcp.alphai.io/mcp" + } + } +} diff --git a/plugins/alphai/LICENSE b/plugins/alphai/LICENSE new file mode 100644 index 0000000..d86dea1 --- /dev/null +++ b/plugins/alphai/LICENSE @@ -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. diff --git a/plugins/alphai/README.md b/plugins/alphai/README.md new file mode 100644 index 0000000..96dee0c --- /dev/null +++ b/plugins/alphai/README.md @@ -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 +`/.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) diff --git a/plugins/alphai/assets/icon.png b/plugins/alphai/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ff23970441e88b5051ad43eccce8b6d134ed49d8 GIT binary patch literal 7797 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", "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="")`. 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. diff --git a/plugins/alphai/skills/manage-alerts/SKILL.md b/plugins/alphai/skills/manage-alerts/SKILL.md new file mode 100644 index 0000000..03653c3 --- /dev/null +++ b/plugins/alphai/skills/manage-alerts/SKILL.md @@ -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 ", "subscribe me to earnings news", "what alerts do I have?", "stop alerts for ", 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 +> 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. diff --git a/plugins/alphai/skills/market-pulse/SKILL.md b/plugins/alphai/skills/market-pulse/SKILL.md new file mode 100644 index 0000000..0231f40 --- /dev/null +++ b/plugins/alphai/skills/market-pulse/SKILL.md @@ -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. diff --git a/plugins/alphai/skills/peer-readacross/SKILL.md b/plugins/alphai/skills/peer-readacross/SKILL.md new file mode 100644 index 0000000..20998fe --- /dev/null +++ b/plugins/alphai/skills/peer-readacross/SKILL.md @@ -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 's news mean for ", 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. diff --git a/plugins/alphai/skills/stock-brief/SKILL.md b/plugins/alphai/skills/stock-brief/SKILL.md new file mode 100644 index 0000000..e0077b6 --- /dev/null +++ b/plugins/alphai/skills/stock-brief/SKILL.md @@ -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 ", "what's going on with ", "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.