# StockDrifts

> Rated 13F funds with average buy prices, company KPIs, Japan investor ratings, Korea insider buys.

- name: io.stockdrifts/mcp
- version: 1.29.0
- connection class: R1 (autonomous)
- trust: 100/100
- quality: 79/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.stockdrifts%2Fmcp
- tools: https://api.protogrid.dev/v1/servers/io.stockdrifts%2Fmcp/tools

**An agent can connect on its own if it already holds `STOCKDRIFTS_TOKEN`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "stockdrifts": {
      "type": "http",
      "url": "https://mcp.stockdrifts.io/mcp/",
      "headers": {
        "Authorization": "Bearer ${STOCKDRIFTS_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${STOCKDRIFTS_TOKEN}`.

## Trust

- hygiene: 100
- liveness: 100
- freshness: 100
- provenance: 100
- drivers: +repository +namespace-matches-repo +dns-namespace +website +reachable +uptime-100% +updated-15d-ago
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 79/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 71 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- fail `tools.annotations`: no tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: list_recent_trades_kr (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); list_top_buys_kr (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); list_opportunities_kr (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
- pass `tools.token_cost`: about 6,124 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 32, about 6,124 tokens to load them all
- tool set hash: 35997325851b554172c27b11bce43071
- badge: [![protogrid quality](https://protogrid.dev/badge/io.stockdrifts/mcp.svg)](https://protogrid.dev/servers/io.stockdrifts/mcp)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://mcp.stockdrifts.io/mcp/ (streamable-http, auth api_key ${STOCKDRIFTS_TOKEN}, reachable true, uptime30d 1)

## Packages

_none_

## Tools (32)

- `get_insider_summary_jp`: Pre-aggregated shareholding summary for one JP ticker
- `get_insider_summary_kr`: Pre-aggregated insider summary for one KR ticker
- `get_investor_catalyst_record_us`: One fund's binary-event track record per sector, with best/worst calls

The fund's record of holding names through binary events (price-defined single-day moves — readouts/FDA/buyouts in biotech, earnings/M&A elsewhere; not verified cause labels): one row per sector bucket, the 'all' rollup first, each with hits, blowups, hit rate, dollar-weighted impact, and the five best and worst resolved calls. 404 means the fund had no scored events in the window, not that it is a bad fund.
- `get_investor_changes_us`: QoQ position diff for one investor between two periods
- `get_investor_holdings_us`: Latest 13F holdings for one investor (or for a specific period)
- `get_investor_sector_exposure_us`: Sector-exposure history for one investor (newest quarter first)

Per-quarter portfolio composition by sector for one 13F filer, including the biotech tier and top biotech positions. Use it to see whether a fund was already a sector specialist in earlier quarters, or how its sector mix is shifting. `unclassified_pct` reports how much top-50 value had no sector tag.
- `get_kpi`: Latest normalized KPI snapshot for one ticker
- `get_plan_executions_kr`: Cross-reference one D005 plan against its actual executions
- `list_convergence_jp`: JP tickers with multiple distinct investors filing on the same name
- `list_insider_filings_jp`: Shareholding-report filings for one JP ticker
- `list_insider_trades_kr`: Insider trades for one KR ticker
- `list_investor_filings_jp`: All JP filings made by one investor (EDINET code)
- `list_investor_periods_us`: All 13F periods on file for one investor
- `list_leaderboard_jp`: Top JP investors by star rating + avg return
- `list_leaderboard_kr`: Top KR insiders by historical avg return on their buys
- `list_opportunities_jp`: Recent JP BUY/INITIAL filings whose price hasn't moved much yet
- `list_opportunities_kr`: Recent KR open-market BUYs whose price hasn't moved much yet
- `list_plans_kr`: KR pre-disclosure (D005) plans — announced but not yet executed trades
- `list_recent_filings_jp`: Recent JP filings across all tickers
- `list_recent_trades_kr`: Recent KR insider trades across all tickers
- `list_ticker_holders_us`: Investors with `ticker` in their top-50 positions, sorted by position size

Returns 13F filers that hold `ticker` **as one of their 50 largest positions**, scoped to the most recent reporting period by default. Only top-50 positions per investor are surfaced — smaller positions are not included. Pass an explicit `period` to query a different quarter.
- `list_top_buys_jp`: Top JP tickers by aggregated insider buying over a window
- `list_top_buys_kr`: Top KR tickers by aggregated insider buying over a window
- `list_top_sells_jp`: Top JP tickers by aggregated insider selling over a window
- `list_top_sells_kr`: Top KR tickers by aggregated insider selling over a window
- `screen_holdings_us`: Screen 13F holdings by period, ticker, value, and rating; returns each matched fund with only the position(s) that matched

Results are wrapped in an envelope: `results` holds up to `limit` funds (max 500), `total_count` is the full server-side match count, and `truncated` says whether paging with `offset` would surface more. `period` accepts '2026-Q2' or an ISO date like '2026-06-30'.
- `screen_insiders`: Screen insider activity by country, date, value, role, and ticker

Screens one market per call, selected by `country`: 'KR' returns individual insider transactions, 'JP' returns 5%+ shareholding reports. The response echoes `country` — switch on it before reading `results`, since the two markets return different record shapes. There is no US coverage; use the 13F screen for US institutional flows.
- `screen_investor_catalyst_record_us`: Screen funds by their track record on binary events (any sector)

Ranks 13F filers by how their positions resolved through binary events — single-day moves >= ~25%, price-defined, NOT verified cause labels. In biotech these are trial readouts / FDA decisions / buyouts; elsewhere earnings blowups, guidance cuts, M&A. `sector='all'` (default) ranks across everything; `'biotech'` and lowercased sector names ('technology', 'energy', ...) scope the record. `hit_rate` = pops held / events decided; `impact_usd` is dollar-weighted (position value x event return). Always pass `min_events` (>= 5) — a perfect rate on 2 events is noise. Chain with `get_investor_holdings_us` to see what a proven event-caller is buying now, or `screen_investor_sector_exposure_us` to intersect with sector specialists.
- `screen_investor_sector_exposure_us`: Screen investors by sector concentration (e.g. top biotech specialists)

Ranks 13F filers by the share of their portfolio in one sector, computed from sector-tagged top-50 holdings. `tier` buckets: specialist (>=60%), heavy (30-60%), tilted (10-30%), minimal (<10%). Interpretation caveats: corporate venture arms (Gilead, Pfizer, GSK) and single-stock endowments (e.g. Lilly Endowment holds only LLY) rank as specialists — pass `min_positions` (e.g. 5) to screen for genuinely diversified sector pickers. Chain with `get_investor_holdings_us` / `get_investor_changes_us` to see what a specialist is buying now.
- `search_companies_jp`: Search JP companies by stock_code, Japanese name, or English name
- `search_companies_kr`: Search KR companies by stock_code, Korean name, or English name
- `search_investors_us`: Fuzzy-search investors by name; resolves to CIKs ordered by AUM

Case-insensitive partial-name match against the latest-holdings view. Returns the largest funds first so the most likely match is at the top. Use this to resolve a manager name to a CIK before calling investor-axis tools (`get_investor_holdings_us`, `list_investor_periods_us`, `get_investor_changes_us`).
