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 0000000..ff23970 Binary files /dev/null and b/plugins/alphai/assets/icon.png differ diff --git a/plugins/alphai/rules/alphai-financial-data.mdc b/plugins/alphai/rules/alphai-financial-data.mdc new file mode 100644 index 0000000..447e97b --- /dev/null +++ b/plugins/alphai/rules/alphai-financial-data.mdc @@ -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). diff --git a/plugins/alphai/skills/insider-radar/SKILL.md b/plugins/alphai/skills/insider-radar/SKILL.md new file mode 100644 index 0000000..96e7578 --- /dev/null +++ b/plugins/alphai/skills/insider-radar/SKILL.md @@ -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 ", "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.