loading…
Search for a command to run...
loading…
English-first Korean equity intelligence MCP — translates Korean DART filings, foreign-holder 5%-rule flows (BlackRock / Vanguard / Norges / GIC plus 16 more),
English-first Korean equity intelligence MCP — translates Korean DART filings, foreign-holder 5%-rule flows (BlackRock / Vanguard / Norges / GIC plus 16 more), activist filings (KCGI / Align / ValueAct / Elliott), and KRX industry news to English on demand. 7 MCP tools, OSS self-host under AGPL-3.0.
Get pinged in English the moment a 5%-rule filing or DART event hits a stock you care about. (Beta — watchlist polling + alert dispatch ship Q3 2026.)
The pitch: We'll watch your KRX tickers in Korean and ping you in English when something material moves — foreign-holder 5%-rule disclosures, Korean activist filings, major DART events. KRX itself, ASIFMA, Wellington and Aberdeen all on record — Korean disclosure flow into English is structurally inadequate. Bloomberg costs $24K/yr and still misses the front page of 전자신문. We translate, classify, and route the same Korean primary sources institutional analysts read into your Discord / Telegram / inbox. Free public daily snapshot at /today (live today); paid Cloud tiers for the workflow (Solo $29/mo, Analyst $79/mo, Desk $249/mo) — lock-in pricing for waitlist; queries + hosted translation are live today, watchlist polling + alert dispatch ship Q3 2026. OSS self-host available for hackers — see Run it yourself.
For AI/MCP agent builders. koreanpulse plugs Korean equity primary sources into your existing Claude Desktop / Cursor / FastMCP agent — same MCP shape your agent already uses for US data. Three connection modes: (a) hosted remote MCP at
https://mcp.koreanpulse.dev/mcpfor ChatGPT / Claude.ai / OpenAI Responses API custom connectors, (b)pip install koreanpulse+ 4-line config for Claude Desktop / Cursor stdio, (c) Smithery marketplace listing for Smithery CLI users. The 7 tools surface DART filings, foreign-holder 5%-rule flows, Korean activist filings, and 16-sector industry news as typed function calls; the rest of your trading-agent stack stays unchanged.
Claude.ai / ChatGPT (remote MCP) — live today. Add
https://mcp.koreanpulse.dev/mcpas a custom connector in Claude.ai (Settings → Connectors), ChatGPT (Settings → Connectors or Apps SDK), or wire it directly from the OpenAI Responses API:tools=[{type: "mcp", server_url: "https://mcp.koreanpulse.dev/mcp"}]. Read-only — surfaces filings and disclosures only. No trading execution, no investment advice.
Pre-alpha (v0.1.3). 7 MCP tools shipped — 5 free + 2 paid (activist + foreign-holder classification gated to Solo $29/mo+). 181 tests pass, 1 skipped. Beta/waitlist tone — watchlist polling + alert dispatch ship Q3 2026. Beta acquisition plan in docs/BETA.md.
"Majority of foreign investors find it surprisingly difficult to penetrate the Korean hedge fund market due to its limited accessibility and availability of information in foreign language." — HedgeVista, 2025
"Published information should be made available in both Korean and English for all investors." — ASIFMA Korean Capital Markets Report, 2022
"The Korea Exchange will provide investor relations services to companies that lack the capability, particularly in English." — Wellington Management on Korea Value-Up program, 2025
The English-IR gap is multi-source verified. The triggers below sit on top of it:
| Audience | Plan | Why |
|---|---|---|
| Crypto-native rotator into KOSPI/KOSDAQ | Cloud Solo $29/mo | One Discord channel pinged on watchlist hits — that's the whole job |
| Korean diaspora / overseas Korean investor | Cloud Solo $29/mo | English digest of the news they grew up reading, alerts to Telegram |
| K-content / EM journalist | Cloud Solo $29/mo | Replaces hours of manual translation, daily English digest |
| Boutique fund analyst covering Korea | Cloud Analyst $79/mo | 25 watchlists, 1-year archive search, multiple alert channels, CSV/JSON export |
| Paid-research-budget retail trader | Cloud Analyst $79/mo | Saved searches, priority cache, multi-channel alerts |
| Boutique long/short desk, small research team | Cloud Desk $249/mo | 3 seats, shared watchlists, Slack/webhook alerts, team archive |
The free daily snapshot at /today (no login, no API key) is the funnel front door — a preview of the daily digest paying customers get pushed to their channel of choice.
Design partner program available for the first 20 named seats — contact us.
🚧 Beta — lock-in pricing for waitlist. Solo $29 / Analyst $79 / Desk $249. The hosted translation cache + license validation path are wired and verified end-to-end; the monthly query cap (2K / 15K / 100K) is metered server-side and switches to a hard cap once the first paid signup lands and per-tier counters are sealed. Watchlist polling, alert dispatch, seat enforcement, and per-tier retention windows ship Q3 2026. Until then, seat counts, watchlist counts, alert-channel limits, and archive-retention windows are paper limits. Early supporters keep the launch rate — no auto-charge until the workflow ships.
| Tier | $/mo | Watchlists | Queries/mo | Archive | Alert channels |
|---|---|---|---|---|---|
| Cloud Solo | 29 | 5 (Q3 2026) | ~2,000 (metered) | 30 days (Q3 2026) | 1 Discord or Telegram (Q3 2026) |
| Cloud Analyst | 79 | 25 (Q3 2026) | ~15,000 (metered) | 1 year (Q3 2026) | Multi (Discord / Telegram / Email) (Q3 2026) |
| Cloud Desk | 249 | shared, 3 seats (Q3 2026) | ~100,000 (metered) | team archive (Q3 2026) | Slack / webhooks (Q3 2026) |
Annual billing: −20% at launch. 30-day refund.
Subscribe: buy.polar.sh/polar_cl_dopobJlg7fyaa0Qj9noMyDOmDsFlUJOPBOwFL2JCOUB — single hosted Polar checkout covering all three tiers (Polar acts as Merchant of Record; sales tax / VAT / refunds handled).
Enterprise / SLA: contact us. No published price.
Source is AGPL-3.0. Self-hosters can run the MCP server locally with their own DART and OpenAI keys. This path is for hackers and max-privacy users.
| OSS self-host | Cloud (Solo / Analyst / Desk) | |
|---|---|---|
| Cost | $0 | $29 / $79 / $249 per month |
| Provider keys | your DART_API_KEY + your OPENAI_API_KEY |
your DART_API_KEY (stays local); we hold the OpenAI key for you |
| Local install required | yes (pip install koreanpulse) |
yes (same pip install; only translation calls hit our Worker) |
| Watchlist polling + alerts | not included | Q3 2026 ship target (waitlist) |
| Hosted archive | none | Q3 2026 ship target (30 days / 1 year / team archive) |
| Hosted translation cache | none | included (cross-tenant cache hits compound, live today) |
| Account sync | none | Q3 2026 ship target |
| Support | community only (issues/PRs) | priority support on Analyst / Desk |
| Best for | hackers, privacy-strict envs, OSS contributors | anyone who'll want the watchlist-to-alert workflow once it ships |
OSS self-host is not in the pricing table above — it's a separate lane. See docs/SELF_HOSTING.md for the install + key wiring. A true HTTP-transport remote MCP (no local install at all) is on the roadmap but not yet shipped.
7 MCP tools shipped — 5 free + 2 paid. Callable from Claude Desktop / Cursor / any MCP client. The paid tier unlocks the classification work that takes a Korean speaker to do by hand; the free tier ships the raw DART + RSS surface so distribution doesn't pay for itself.
Free tier (no license_key, no signup):
| Tool | One-line |
|---|---|
track_korean_filings |
DART filings real-time + EN translation/summary |
lookup_corp_code |
Korean company name → DART corp code |
resolve_stock_code |
KRX 6-digit → DART corp entry |
search_korean_industry_news |
etnews / 한국경제 RSS, classified into 16 industries |
koreanpulse_about |
Server info, free vs paid tool list, current Polar checkout URL |
Paid tier (Solo $29/mo+, requires license_key — pass as tool argument or via the calling client's secure-input field):
| Tool | One-line |
|---|---|
monitor_activist_investors |
Activist 5%-rule filings auto-tagged (KCGI / Align / Truston / Anda / Cha / VIP / ValueAct / Elliott) |
monitor_foreign_holders |
Foreign 5%-rule disclosures (BlackRock / Vanguard / Norges / GIC / Temasek + 15 more) |
When a paid tool is called without a license, the server returns a structured error message that surfaces the Polar checkout URL — ChatGPT / Claude.ai render that link inline so the user can subscribe in one click.
4 more planned (docs/SPEC.md): digest_analyst_reports, get_ma_pipeline, track_government_policy, summarize_korean_earnings_call.
| Bloomberg | FactSet | KED Global | koreanpulse | |
|---|---|---|---|---|
| Korean primary source depth | medium | medium | English wire only | deep |
| Real-time AI agent integration (MCP) | none | none | none | native |
| Indie/SMB pricing | none ($24K+/yr) | none | free (low signal) | $29 / $79 / $249 Cloud tiers (waitlist, lock-in) |
| Korean activist / M&A pipeline | weak | weak | reactive | proactive watch (Q3 2026) |
DART caps each API key at 40,000 calls/day (verified 2026-05). We enforce a soft cap at 32,000/day (80%) with DART_DAILY_QUOTA env override.
Filing-list responses go through list_filings_cached() with a freshness-aware TTL (60s for today's window, 1h for ≤6d old, 24h for ≥7d old). Cache hits don't burn DART quota.
| Cache hit | Customer ceiling/day | MAU ceiling (12mo mix) |
|---|---|---|
| 0% (no filing cache) | 32,000 | ~800 |
| 70% (3-mo realistic) | 107,000 | ~9,500 |
| 85% (mature) | 213,000 | ~19,000 |
| 95% (high reuse) | ~25,000 MAU (DART-limited) | — |
Hard ceiling: ~30,000 MAU per DART key. Second key (separate 사업자등록번호) required beyond that.
Forecast 12mo mix (756 MAU) sits at ~930 DART calls/day = 2.9% of soft quota with 70% cache. ~34× headroom to scale before quota engineering.
See src/koreanpulse/cache.py, src/koreanpulse/dart.py:list_filings_cached.
Live today: queries (DART filings, foreign-holder + activist tracking, industry news), hosted translation cache (Cloud KOREANPULSE_CACHE_MODE=hosted), /today daily snapshot, Polar → D1 license issuance (Polar Merchant of Record; Lemon Squeezy handler kept dormant for future re-application), first-party hosted MCP endpoint at https://mcp.koreanpulse.dev/mcp (Streamable HTTP transport for ChatGPT / Claude.ai / OpenAI Responses API custom connectors — no pip install).
Q3 2026 ship targets (waitlist):
koreanpulse.alerts)Earlier milestones:
track_korean_filings, lookup_corp_code, search_korean_industry_news, translation layer with cacheLicenseStore (replaces in-memory)cache-worker cron + daily-worker cron + koreanpulse.alerts module into the watchlist-to-alert workflow that powers Solo / Analyst / Desk. D1 schema and alert-dispatch primitives already shipped; the cron loop is the missing piece.digest_analyst_reports, summarize_korean_earnings_callKOREANPULSE_CACHE_MODE=hosted routes translation calls (only) to the Worker./today dashboard build (KST 16:30 weekdays)./v1/validate for the Cache Worker. Lemon Squeezy handler is kept dormant for future re-application once paid traction exists. Replaces the old Lightsail/FastAPI/Postgres stack so the operator runs zero servers.Two ways to run the MCP, switched via KOREANPULSE_CACHE_MODE. Both require a local install (pip install koreanpulse + 4-line Claude Desktop config); the difference is whether translation calls go through our Worker or directly to OpenAI from your machine.
local (OSS self-host) |
hosted (Cloud Solo / Analyst / Desk) |
|
|---|---|---|
| Local MCP install | required | required (same pip install) |
| Provider key | your OPENAI_API_KEY |
ours, on the Worker (no OpenAI key on your side) |
| Translation cache | local JSONL file | global Cloudflare KV (cross-tenant reuse) |
| Per-call cost | OpenAI billed to you | absorbed in your Cloud plan |
| Privacy | translation never leaves your machine + OpenAI | translation calls go to our Worker; DART traffic still local |
| Best for | hackers, OSS contributors, max-privacy envs | anyone who'll want the watchlist-to-alert workflow once it ships |
Cache hits are the entire reason a $29/mo Solo plan can sustain healthy gross margin: the same Korean filing title gets translated once, then served to every other tenant on the same plan from KV. See docs/CLAUDE_DESKTOP.md for the env-var split between modes.
Hosted HTTP transport (no local install) — live today. First-party endpoint at
https://mcp.koreanpulse.dev/mcp(Streamable HTTP, single-region node fronted by Caddy + Let's Encrypt cert). Add as a custom connector in ChatGPT (Settings → Connectors), Claude.ai (Settings → Connectors), or wire it directly from the OpenAI Responses API. Validated end-to-end against ChatGPT and Claude.ai 2026-05-06 —monitor_activist_investorschainslookup_corp_codeand returns Korean→English translated 5%-rule filings without any client-side install. The local stdio install path remains canonical for self-hosters and max-privacy users; the Smithery listing keeps Smithery CLI users in the discovery path.
Billing runs on the webhook-worker/ Cloudflare Worker + D1 (SQLite). The operator runs zero servers. Polar (polar.sh) is the active Merchant of Record as of 2026-05-06 — it handles VAT / sales tax / refunds / chargebacks. The Lemon Squeezy handler is kept dormant for future re-application once paid traction exists.
See webhook-worker/README.md for the full deploy + secrets walkthrough; the short version:
cd webhook-worker
npm install
npx wrangler d1 create koreanpulse_db # paste returned id into wrangler.toml
npm run migrate:prod # applies 0001_licenses.sql + 0002_pricing_v2.sql
# ── Polar (active provider) ──────────────────────────────────────────
npx wrangler secret put POLAR_WEBHOOK_SECRET # `polar_whs_...` from Polar webhook page
npx wrangler secret put POLAR_API_TOKEN # `polar_oat_...` (subscriptions:read scope)
npx wrangler secret put POLAR_PRODUCT_SOLO # UUID of Cloud Solo product
npx wrangler secret put POLAR_PRODUCT_ANALYST # UUID of Cloud Analyst product
npx wrangler secret put POLAR_PRODUCT_DESK # UUID of Cloud Desk product
# ── Shared ───────────────────────────────────────────────────────────
npx wrangler secret put KOREANPULSE_CACHE_SHARED_SECRET # same value cache-worker uses
# ── Lemon Squeezy (dormant — re-applies once traction exists) ────────
# npx wrangler secret put LEMONSQUEEZY_WEBHOOK_SECRET
# npx wrangler secret put LEMONSQUEEZY_VARIANT_SOLO / _ANALYST / _DESK / _LIFETIME
npm run deploy
Endpoints (deployed to https://api.koreanpulse.dev or https://koreanpulse-webhook.<account>.workers.dev):
GET /health → {"status":"ok"}POST /webhook/polar → Standard Webhooks signature verified (webhook-id / webhook-timestamp / webhook-signature), idempotent on webhook-idPOST /webhook/lemonsqueezy → HMAC-SHA256 (dormant; no LS variant secrets configured in production)POST /v1/validate → HMAC-signed by the cache-worker, validates license + atomically increments period counterPolar events handled: subscription.created / .active / .updated / .canceled / .revoked. Auto-issues license keys, upgrades plans in place, deactivates on cancellation. License rows are tagged with metadata.provider = "polar" so the source is traceable per row.
The earlier path (Python koreanpulse-webhook FastAPI on Lightsail + Postgres) is superseded as of 2026-05-05; for operator memory it lives at docs/legacy/POSTGRES_LIGHTSAIL.md. New deploys should use the Cloudflare Worker path.
Listing copy + submission checklists in docs/MARKETPLACE.md:
https://mcp.koreanpulse.dev/mcp (ChatGPT / Claude.ai / OpenAI Responses API custom connectors)Beta acquisition (50 users in 30 days) plan + crypto-native channel mix in docs/BETA.md. Demo recording script in docs/DEMO.md. CI / PyPI release pipeline in docs/CI.md.
Crypto-native rotators want pings, not dashboards. koreanpulse.alerts.send_alert(url, title=, body=) sends to any of:
https://discord.com/api/webhooks/...)https://hooks.slack.com/services/...)tg://<bot_token>/<chat_id> or full sendMessage URL)Fire-and-forget — transport / formatting failures return AlertResult(ok=False) instead of raising, so an outage in one channel never breaks a tool call. See src/koreanpulse/alerts.py.
Source: AGPL-3.0. Hosted service: commercial.
Add this to claude_desktop_config.json and restart Claude Desktop.
{
"mcpServers": {
"koreanpulse": {
"command": "npx",
"args": []
}
}
}