Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.SharpLu/ko-mcp

REMOTE · MCP.KO.IO

Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.

Available components

0 this week 86 Trust /100

Last scanned (19 hours ago)

Scores higher than 92% of remote servers

Reachable. Last reached 7 Nov 2026.

Category Finance and Payments

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security80
  • The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
  • No authorisation is required to call this server. Nothing on it is marked destructive, but we can't show that an anonymous caller can only read: full credit needs the server to list at least one tool and every tool to be verifiably read-only. We use a best-effort check of tool names and descriptions to tell read-only tools from tools that change things, so some genuinely read-only tools may not get full credit. Names that start with a read verb (get, list, read, search and similar) and accurate readOnlyHint annotations help. Meet that to earn full credit, or require authorisation. See how to fix → View diagnostics → Partial
  • HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
  • The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
  • DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
Schema Quality & AI Usability68
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 5147 tokens (~160/item across 32 items; 32 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage92
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 73% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 32 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 32 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
What we tested

Checks we ran (13)

  • TLS certificate
  • Authorization
  • HTTPS
  • HSTS header
  • DNSSEC
  • Transport
  • Schema quality
  • Stability
  • Tool coverage
  • Injection markers
  • Destructive annotations
  • Judged manipulation
  • MCP protocol

Does not apply to this hosted endpoint (2)

  • Supply Chain SecurityScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.
  • Provenance & TransparencyScored on package channels only. This is a hosted endpoint, so there is nothing to install or inspect.

The score does not measure everything. What the score does not measure →

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 6 Nov 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Oct 26 0
    • Tool “get_stock_financials” rewrote its description, which is the text the model reads security
  • 17 Oct 26 −1
    • Tool coverage: 96% → 73% ▼ functional
    • Server version: 1.3.0 → 1.4.0 functional
    • New tool “get_gov_contracts” functional
    • New tool “search_gov_contracts” functional
  • 13 Oct 26 0
    • “get_form144_notices” reworded the description of “insider_cik” cosmetic

    1 cosmetic change on this day. Switch on “Show cosmetic changes” to see it.

  • 12 Oct 26 0
    • Schema quality: 3600 → 4529 ▼ functional
    • Server version: 1.2.0 → 1.3.0 functional
    • New tool “get_eu_annual_reports” functional
    • New tool “get_eu_insider_dealings” functional
    • New tool “get_eu_issuer” functional
    • New tool “get_eu_major_holdings” functional
    • New tool “get_eu_markets” functional
    • New tool “get_eu_short_positions” functional
  • 29 Sept 26 0
    • Tool “get_stock_activity” rewrote its description, which is the text the model reads security
  • 28 Sept 26 0
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 27 Sept 26 0
    • Authorization: unverified → partial ▲ security
    • Tool “get_ftd_data” rewrote its description, which is the text the model reads security
    • Tool “get_insider_trades” rewrote its description, which is the text the model reads security
    • Tool “get_institution_holdings” rewrote its description, which is the text the model reads security
    • Tool “get_stock_activity” rewrote its description, which is the text the model reads security
    • Tool “get_stock_financials” rewrote its description, which is the text the model reads security
    • Tool “sec_get_filing_document” rewrote its description, which is the text the model reads security
    • Schema quality: 115 → 148 ▼ functional
    • Tool “get_congress_member” now declares an output schema ▲ functional
    • Tool “get_congress_trades” now declares an output schema ▲ functional
    • Tool “get_crypto_exposure” now declares an output schema ▲ functional
    • Tool “get_crypto_holder” now declares an output schema ▲ functional
    • Tool “get_crypto_holders” now declares an output schema ▲ functional
    • Tool “get_economic_indicators” now declares an output schema ▲ functional
    • Tool “get_fed_rates” now declares an output schema ▲ functional
    • Tool “get_financial_stress” now declares an output schema ▲ functional
    • Tool “get_form144_notices” now declares an output schema ▲ functional
    • Tool “get_ftd_data” now declares an output schema ▲ functional
    • Tool “get_insider_trades” now declares an output schema ▲ functional
    • Tool “get_institution_holdings” now declares an output schema ▲ functional
    • Tool “get_stock_activity” now declares an output schema ▲ functional
    • Tool “get_stock_financials” now declares an output schema ▲ functional
    • Tool “get_stock_holders” now declares an output schema ▲ functional
    • Tool “get_stock_price” now declares an output schema ▲ functional
    • Tool “get_stock_profile” now declares an output schema ▲ functional
    • Tool “get_treasury_yields” now declares an output schema ▲ functional
    • Tool “list_insider_traders” now declares an output schema ▲ functional
    • Tool “list_institutions” now declares an output schema ▲ functional
    • Tool “search” now declares an output schema ▲ functional
    • Tool “sec_get_filing_document” now declares an output schema ▲ functional
    • Tool “sec_get_filing_index” now declares an output schema ▲ functional
    • Tool “sec_list_filings” now declares an output schema ▲ functional
    • First check of Tool coverage: 100 functional
    • Server version: 1.1.0 → 1.2.0 functional
    • “get_insider_trades” added an optional parameter “period” cosmetic
    • “get_institution_holdings” added an optional parameter “entity” cosmetic
    • “get_institution_holdings” added an optional parameter “ticker” cosmetic
    • “get_ftd_data” reworded the description of “days” cosmetic
    • “get_insider_trades” reworded the description of “executive_cik” cosmetic
    • “get_insider_trades” reworded the description of “limit” cosmetic
    • “get_stock_activity” reworded the description of “quarters” cosmetic
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 7 Nov 2026 · Probed https://mcp.ko.io/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=ko.io CN=WE1,O=Google Trust Services,C=US 12 Sept 2026 11 Dec 2026 ECDSA 256 ECDSA-SHA256 75f8487b11c301a1333c64923766cfa
SANs: ko.io, *.ko.io
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of mcp.ko.io. — Not signed

Zone DS Keys Algorithms Outcome
. Trust anchor 20326, 38696 8, 8 Verified
io. DS published 38690 8 Verified
ko.io. No DS Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication No authorisation required

The endpoint answered without asking for a token. Anyone who knows the URL can reach it.

Result No authorisation required
HTTP status 200
Header Value
strict-transport-security max-age=31536000; includeSubDomains
x-content-type-options nosniff

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://mcp.ko.io/mcp Verified 200
http (plaintext) http://mcp.ko.io/mcp HTTPS enforced 301 https://mcp.ko.io/mcp
MCP tools · 32 exposed · ~5,147 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
get_congress_member ~88

Get detailed trading history of a specific U.S. Congress member. Shows individual trades with transaction types, amounts, and disclosure dates.

NameTypeReqDescription
limitinteger––
memberstringyesMember slug (e.g. 'nancy-pelosi', 'dan-crenshaw'). Use get_congress_trades or search to find exact slugs.
pageinteger––
NameTypeReqDescription
coverage–yes–
memberstringyes–
pagingobjectyesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
rowsarrayyes–

No examples provided.

get_congress_trades ~273

Search individual stock trades disclosed by U.S. Congress members (House and Senate) under the STOCK Act. Returns a markdown table of transactions: member name, chamber, ticker, buy/sell type, transaction date, disclosure date (the gap between the two reveals reporting delay), dollar amount range, and owner (self/spouse/joint). Use for questions like 'What did Nancy Pelosi trade recently?', 'Which members bought NVDA?', or 'Show the largest Senate trades this quarter'. Filter by chamber, ticker, or member name; sort by traded value, trade count, or recency. For one member's profile and complete trading history, use get_congress_member instead.

NameTypeReqDescription
chamberstring–Congressional chamber: house, senate, or all (default all)
limitinteger–Trades per page, 1-50 (default 20)
pageinteger–Page number for pagination (default 1)
searchstring–Full or partial member name, e.g. 'Pelosi' or 'Dan Crenshaw'
sortstring–Sort order — volume (most traded value), trades (most trades), recent (latest first)
tickerstring–Stock ticker symbol to filter by, e.g. NVDA or AAPL
NameTypeReqDescription
filtersobjectyes–
pagingobjectyesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
rowsarrayyes–

No examples provided.

get_crypto_exposure ~75

Get a market-wide summary of institutional exposure to US spot crypto ETFs (Bitcoin ETF complex: IBIT, FBTC, GBTC, etc.) from the latest quarter of SEC 13F filings. Returns total institutional USD held, quarter-over-quarter change, and a per-ETF breakdown (holders, USD, QoQ).

Input schema present but exposes no named parameters.

NameTypeReqDescription
complexobjectyes–
productsarrayyes–

No examples provided.

get_crypto_holder ~106

Get one institution's spot crypto-ETF holdings (Bitcoin ETF complex): its per-ETF positions in the latest filed quarter (shares, USD, QoQ change, action) plus its rank among all crypto-ETF holders. Use a CIK number (find it with get_crypto_holders or the search tool).

NameTypeReqDescription
institutionstringyesInstitution CIK number (e.g. '1512857' for Brevan Howard) or name (e.g. 'BlackRock').
NameTypeReqDescription
cikstring|nullyes–
institution–yes–
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
positionsarrayyes–
requestedstringyes–

No examples provided.

get_crypto_holders ~114

List institutional investors holding US spot crypto ETFs (Bitcoin ETF complex), ranked by total USD held, from the latest quarter of SEC 13F filings. Optionally filter to holders of a specific ETF via the `product` parameter (e.g. 'IBIT').

NameTypeReqDescription
limitinteger–Results per page
pageinteger–Page number
productstring–Filter to holders of a specific spot crypto ETF ticker, e.g. 'IBIT', 'FBTC', 'GBTC'.
NameTypeReqDescription
pagingobjectyesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
productstring|nullyes–
rowsarrayyes–
total_holders–yes–

No examples provided.

get_economic_indicators ~163

Get U.S. economic indicators from BLS — CPI (inflation), PPI (producer prices), Non-farm Payrolls (employment), Unemployment Rate, JOLTS. Filter by category.

NameTypeReqDescription
categorystring–Category (case-insensitive): cpi/inflation, ppi, nfp/payrolls, unemployment, jolts, or all
daysinteger–Number of days of history (default 365)
limitinteger–Rows per page, 1-500 (default 100). A long `days` window can hold more rows than one page; the answer says when the page is full and names the next one.
pageinteger–Page number (default 1)
NameTypeReqDescription
categorystringyes–
pagingobjectyesPaging state reconciled from ko.io meta.total_count and meta.softwall
rowsarrayyes–

No examples provided.

get_eu_annual_reports ~170

European annual financial report filings for Sweden, Netherlands, Denmark or the UK, newest first: issuer, LEI, period end, link to the original report where the source allows, per-row source credit. Filter by issuer id; check get_eu_markets for which markets are live.

NameTypeReqDescription
countrystringyesMarket: se (Sweden), nl (Netherlands), dk (Denmark) or uk (United Kingdom)
issuerstring–ko.io issuer id as returned in a row's issuer.id: lei:<LEI>, isin:<ISIN>, co:<register id> or name:<hash>
limitinteger–Rows per page, 1-100 (default 25)
pageinteger–Page number (default 1)
NameTypeReqDescription
countrystringyesMarket code as requested, upper-case
covered_countries–yesMarkets ko.io covers; set when status is not_covered
datasetstringyes–
issuer_filterstring|nullyes–
latest_retrieved_at–yes–
latest_source_date–yes–
paging–yesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
rows–yesnull = the dataset is not served (status is not live): unknown, NOT empty
statusstringyeslive = served; pending = offered but not activated yet (not an outage, not empty); not_offered = a fixed source/licensing fact; not_covered = no such market

No examples provided.

get_eu_insider_dealings ~191

European insider dealings: transactions by managers and closely associated persons (PDMR, MAR article 19) from the national registers of Sweden, Netherlands, Denmark or the UK, newest first. One row per notice transaction line with person, role, nature, quantity, price and per-row source credit. Filter by issuer id; check get_eu_markets for which markets are live.

NameTypeReqDescription
countrystringyesMarket: se (Sweden), nl (Netherlands), dk (Denmark) or uk (United Kingdom)
issuerstring–ko.io issuer id as returned in a row's issuer.id: lei:<LEI>, isin:<ISIN>, co:<register id> or name:<hash>
limitinteger–Rows per page, 1-100 (default 25)
pageinteger–Page number (default 1)
NameTypeReqDescription
countrystringyesMarket code as requested, upper-case
covered_countries–yesMarkets ko.io covers; set when status is not_covered
datasetstringyes–
issuer_filterstring|nullyes–
latest_retrieved_at–yes–
latest_source_date–yes–
paging–yesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
rows–yesnull = the dataset is not served (status is not live): unknown, NOT empty
statusstringyeslive = served; pending = offered but not activated yet (not an outage, not empty); not_offered = a fixed source/licensing fact; not_covered = no such market

No examples provided.

get_eu_issuer ~144

One European issuer in one market (se, nl, dk, uk): identity (name, LEI, ISIN, venue) and its newest rows of insider dealings, major holdings, net short positions and annual reports, each with source credit. Takes the issuer id from any get_eu_* row (issuer.id).

NameTypeReqDescription
countrystringyesMarket: se (Sweden), nl (Netherlands), dk (Denmark) or uk (United Kingdom)
issuerstringyesko.io issuer id as returned in a row's issuer.id: lei:<LEI>, isin:<ISIN>, co:<register id> or name:<hash>
NameTypeReqDescription
annual_reports–yes–
countrystringyes–
covered_countries–yes–
insider_dealings–yesnull = dataset not live in this market (unknown, not empty)
issuer–yes–
live_datasets–yes–
major_holdings–yes–
match_basis–yes–
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
requestedstringyes–
short_positions–yesnull also where short positions are not offered (UK)
statusstringyeslive = served; pending = offered but not activated yet (not an outage, not empty); not_offered = a fixed source/licensing fact; not_covered = no such market

No examples provided.

get_eu_major_holdings ~176

European major holdings (voting-rights) notifications for Sweden, Netherlands, Denmark or the UK, newest first: issuer, holder(s), voting-rights % after (incl. instruments), shares %, reason, per-row source credit. Filter by issuer id; check get_eu_markets for which markets are live.

NameTypeReqDescription
countrystringyesMarket: se (Sweden), nl (Netherlands), dk (Denmark) or uk (United Kingdom)
issuerstring–ko.io issuer id as returned in a row's issuer.id: lei:<LEI>, isin:<ISIN>, co:<register id> or name:<hash>
limitinteger–Rows per page, 1-100 (default 25)
pageinteger–Page number (default 1)
NameTypeReqDescription
countrystringyesMarket code as requested, upper-case
covered_countries–yesMarkets ko.io covers; set when status is not_covered
datasetstringyes–
issuer_filterstring|nullyes–
latest_retrieved_at–yes–
latest_source_date–yes–
paging–yesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
rows–yesnull = the dataset is not served (status is not live): unknown, NOT empty
statusstringyeslive = served; pending = offered but not activated yet (not an outage, not empty); not_offered = a fixed source/licensing fact; not_covered = no such market

No examples provided.

get_eu_markets ~78

Which European markets and datasets ko.io serves: for Sweden, Netherlands, Denmark and the UK, the status of insider dealings (PDMR), major holdings, net short positions and annual reports -- live (with latest source date), pending (not activated yet) or not offered. Call first when unsure whether an EU dataset is live.

Input schema present but exposes no named parameters.

NameTypeReqDescription
live_countintegeryesLive (country, dataset) pairs
marketsarrayyes–

No examples provided.

get_eu_short_positions ~170

European disclosed net short positions for Sweden, Netherlands or Denmark (not offered for the UK), newest position date first: holder, issuer, ISIN, net short % of issued capital, per-row source credit. Filter by issuer id; check get_eu_markets for which markets are live.

NameTypeReqDescription
countrystringyesMarket: se (Sweden), nl (Netherlands), dk (Denmark) or uk (United Kingdom)
issuerstring–ko.io issuer id as returned in a row's issuer.id: lei:<LEI>, isin:<ISIN>, co:<register id> or name:<hash>
limitinteger–Rows per page, 1-100 (default 25)
pageinteger–Page number (default 1)
NameTypeReqDescription
countrystringyesMarket code as requested, upper-case
covered_countries–yesMarkets ko.io covers; set when status is not_covered
datasetstringyes–
issuer_filterstring|nullyes–
latest_retrieved_at–yes–
latest_source_date–yes–
paging–yesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
rows–yesnull = the dataset is not served (status is not live): unknown, NOT empty
statusstringyeslive = served; pending = offered but not activated yet (not an outage, not empty); not_offered = a fixed source/licensing fact; not_covered = no such market

No examples provided.

get_fed_rates ~146

Get daily U.S. policy and money-market interest rates as a markdown table: Effective Fed Funds Rate, SOFR, Prime Rate, and benchmark Treasury yields (3M, 2Y, 10Y, 30Y) per date, newest first. Use for monetary-policy questions like 'Where is the Fed funds rate now?' or 'How has SOFR moved this quarter?', or to compare policy rates against long-end yields for inversion analysis. Covers up to 10 years of daily history. For the full Treasury curve across all maturities, use get_treasury_yields instead.

NameTypeReqDescription
daysinteger–Number of days of history (default 30)
NameTypeReqDescription
rowsarrayyes–
unitstringyes–

No examples provided.

get_financial_stress ~114

Get the OFR Financial Stress Index — a daily indicator of stress in global financial markets. Values above 0 indicate above-average stress.

NameTypeReqDescription
daysinteger–Number of days of history (default 365)
limitinteger–Rows per page, 1-500 (default 100). A long `days` window can hold more rows than one page; the answer says when the page is full and names the next one.
pageinteger–Page number (default 1)
NameTypeReqDescription
pagingobjectyesPaging state reconciled from ko.io meta.total_count and meta.softwall
rowsarrayyes–

No examples provided.

get_form144_notices ~136

Get SEC Form 144 filings — notices of proposed sale of restricted/controlled securities by insiders. Filed before selling, these signal upcoming insider sales. Complements Form 4 (post-trade) with pre-trade intent.

NameTypeReqDescription
insider_cikstring–Filter by the CIK that FILED the notice (usually the selling insider, sometimes a filing agent such as the issuer itself) -- not the issuer whose stock is sold. Leading zeros ignored; combines with t…
limitinteger–Max notices to return
tickerstring–Filter by stock ticker (e.g. 'AAPL')
NameTypeReqDescription
filtersobjectyes–
pagingobjectyesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
rowsarrayyes–

No examples provided.

get_ftd_data ~256

Get SEC fails-to-deliver (FTD) data for a stock. Each quantity is the aggregate net BALANCE of shares that had failed to deliver and were still outstanding on that settlement date, as published by the SEC -- NOT the number of new fails that day. Balances carry over between days, so never sum quantities across dates (that counts the same unsettled shares repeatedly); compare levels or take the maximum instead. Fails arise from many causes (operational and processing delays, long sales, market-maker activity), and FTD data on its own is not evidence of naked short selling. Free/keyless access covers the trailing 92 days. structuredContent carries the exact share quantities.

NameTypeReqDescription
daysinteger–Days of settlement-date history (default 90; Free/keyless access allows up to 92)
limitinteger–Rows per page, 1-500 (default 100). A long `days` window can hold more rows than one page; the answer says when the page is full and names the next one.
pageinteger–Page number (default 1)
tickerstringyesStock ticker symbol (e.g. 'GME', 'TSLA')
NameTypeReqDescription
measurestringyesEach quantity is the balance of fails outstanding on that settlement date -- not new fails that day; never sum across dates
pagingobjectyesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
rowsarrayyes–
tickerstringyes–

No examples provided.

get_gov_contracts ~207

U.S. federal prime-contract obligations (USAspending, FY2015+) attributed to one issuer, across all share classes. Gross, signed deobligations, net, monthly series and agencies. include=actions adds actions; award_id returns only attributed actions on that award plus award context. Exact decimal strings. Recent months are provisional; Defense reports about 90 days late. Automatic exact matches cover companies listed today, plus reviewed links. No link does not mean no contracts. Free: trailing 92 days; history: Pro.

NameTypeReqDescription
agencystring––
award_idstring––
fiscal_yearinteger––
fromstring––
includestring––
limitinteger––
pageinteger––
periodstring––
sortstring––
sub_agencystring––
tickerstringyes–
tostring––
NameTypeReqDescription
actionsarray––
agenciesarray––
award–––
caveatsarrayyes–
cikstringyes–
company_namestringyes–
issuer_tickersarrayyes–
link_tiersarray––
match_statusstringyes–
monthlyarray––
pagingobject–Paging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
provisional_fromstringyes–
refreshed_atstring|nullyes–
scopestringyes–
tickerstringyes–
totalsobject––
windowobjectyes–

No examples provided.

get_insider_trades ~429

Get insider (SEC Form 4) transactions for one company. Two grains, and the answer says which: (1) with `executive_cik` -> one row per Form 4 transaction line, with its SEC code (P open-market or private purchase, S open-market or private sale, M/X/C option or RSU exercise/conversion, A grant/award, F shares withheld for tax, G gift, ...), shares, price and value; (2) without it -> one row per insider per trade date that AGGREGATES all that day's lines, split into code P/S purchases/sales (open market or private) versus all acquisitions/dispositions (which also count vests, exercises and tax withholding), with both dollar totals and the line count; when ko.io reports them, the Lines cell and structuredContent also carry that day's SEC codes (e.g. '4 (F 1, M 2, S 1)'). Do not read an aggregate day's total disposed value as a sale decision; use the P/S columns, whose dollar totals cover priced lines only (unpriced lines are counted and flagged as partial). Keyless/Free access covers the trailing 92 days; `period` beyond 1Q requires Pro. structuredContent carries the exact share counts and dollar amounts.

NameTypeReqDescription
executive_cikstring–Insider's SEC CIK (from a previous answer's person_cik, or list_insider_traders). When given, returns that insider's individual Form 4 transaction lines in this company, newest first.
limitinteger–Rows per page, 1-200
pageinteger–Page number
periodstring–Trade-date window for the per-day view: 1Q = trailing 90 days (default, allowed on every plan); 2Q / 1Y / ALL require Pro. Ignored when executive_cik is given (that view returns the full history your…
tickerstringyesStock ticker symbol (e.g. 'AAPL')
NameTypeReqDescription
executive_cikstring|nullyes–
grainstringyesinsider_trade_date = one row per insider per day, aggregating that day's Form 4 lines; form4_transaction_line = one row per line
pagingobjectyesPaging state reconciled from ko.io meta.total_count and meta.softwall
period–yes–
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
rowsarrayyes–
tickerstringyes–

No examples provided.

get_institution_holdings ~307

Get current stock holdings of an institutional investor (hedge fund, mutual fund, pension fund) from their latest SEC 13F filing. Returns top positions with share counts, values, and quarter-over-quarter changes. Every answer states its grain: ENTITY (a CIK that belongs to a manager family is answered for the whole family by default -- pass entity='filer' for that one filer's own 13F) and SECURITY (the default portfolio merges an issuer's share classes into one row, e.g. GOOG+GOOGL, and lists the per-class breakdown; pass `ticker` to get only that security). Shares and value are the 13F-reported totals over all legs; option legs are flagged. structuredContent carries exact shares/values and the grain fields.

NameTypeReqDescription
entitystring–family (default): consolidate every 13F filer in the manager family; filer: only the requested CIK's own filing.
institutionstringyesInstitution CIK number (e.g. '1067983'), slug (e.g. 'berkshire-hathaway'), or name (e.g. 'Berkshire Hathaway') — names are resolved automatically.
limitinteger–Results per page
pageinteger–Page number
tickerstring–Only this security (e.g. 'GOOG'). Returns the security grain: GOOG is Class C only, not the Alphabet issuer total.
NameTypeReqDescription
entity_grainstringyesfiler = one 13F filer's own filing; family = consolidated across a manager family's filers
family–yesThe manager family, when the answer is at family grain and ko.io named it
pagingobjectyesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
position_basisstring|nullyesWhat shares_held/holding_value count, when ko.io stated it (e.g. 13f_reported_all_legs)
quarter_datestring|nullyesThe snapshot's quarter; null for a history (each row carries its own quarter_date)
quartersarrayyesDistinct quarter-ends present in rows, newest first
requestedstringyesThe institution identifier the caller passed
requested_cikstring|nullyesThe CIK/slug the request was made for
resolved_cikstring|nullyesThe CIK ko.io answered for (the family's canonical CIK at family grain)
rowsarrayyes–
security_grainstringyessecurity = one row per security/share class; issuer = share classes of one issuer merged; mixed = portfolio with some merged rows
ticker_filter–yes–
viewstringyessnapshot = one quarter's holdings; history = one position across quarters (family + ticker), one row per quarter, newest first

No examples provided.

get_stock_activity ~199

Get institutional buying/selling activity trend for a stock over multiple quarters. Shows how many institutions are buying vs selling, net share changes, and value flows — useful for detecting accumulation or distribution patterns. Plan limits: Free/keyless access covers the latest 13F quarter only; the multi-quarter trend requires Pro. Omit `quarters` to get the most your plan allows. structuredContent carries the exact net shares/values. Each quarter carries ko.io's comparability state (comparable / split_adjusted with its split factor / not_comparable / first_reported): a null share or value flow means UNKNOWN (withheld), never zero.

NameTypeReqDescription
quartersinteger–Number of quarters to return. Omit for the plan default (Pro: 8 = 2 years; Free/keyless: the latest quarter only). An explicit value above what your plan allows returns a plan-limit error.
tickerstringyesStock ticker symbol
NameTypeReqDescription
latest–yes–
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
plan_notestring|nullyesSet when the plan limited how many quarters were returned
quarters_requested–yesnull = the plan default was used
quarters_returnedintegeryes–
tickerstringyes–
trendarrayyes–

No examples provided.

get_stock_financials ~284

Get quarterly or annual financial statements for a company from SEC 10-K/10-Q filings: revenue, net income, EPS, margins, operating cash flow, cash, capex, free cash flow, buybacks, dividends, investing/financing cash flow, total assets/liabilities and debt ratios. capex, stock_repurchase (buybacks) and dividends_paid are each normally a positive cash payment (USD); negative values are passed through as filed or derived; a negative capex makes free_cash_flow null. free_cash_flow = operating_cashflow - capex only when both are reported and capex >= 0, otherwise null (never computed from a missing or negative value). cash_and_equivalents excludes short-term investments; long_term_debt is us-gaap LongTermDebt, which includes the current portion. Plan limits: the Free plan and keyless access return only the latest quarterly statement; annual statements and earlier quarters require Pro (a request for them returns an explicit plan-limit error, never 'no data'). structuredContent carries the exact reported values.

NameTypeReqDescription
limitinteger–Number of periods to return (default 8)
period_typestring–Period type — quarterly (10-Q) or annual (10-K)
tickerstringyesStock ticker symbol (e.g. 'AAPL', 'MSFT')
NameTypeReqDescription
period_typestringyes–
periodsarrayyes–
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
plan_notestring|nullyesSet when the caller's plan limited which periods were returned
tickerstringyes–

No examples provided.

get_stock_holders ~82

Get top institutional holders of a stock from SEC 13F filings. Shows which hedge funds, mutual funds, and pension funds own the most shares, with quarter-over-quarter changes.

NameTypeReqDescription
limitinteger–Results per page
pageinteger–Page number
tickerstringyesStock ticker symbol (e.g. 'NVDA')
NameTypeReqDescription
entity_grain–yesfiler = each row is one 13F filer CIK (not consolidated into manager families); null = ko.io did not state it
family–yes–
pagingobjectyesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
position_basis–yes–
position_basis_note–yes–
quarter_datestring|nullyes–
requested_cik–yes–
rowsarrayyes–
tickerstringyes–
total_institutions–yes–

No examples provided.

get_stock_price ~110

Get historical daily stock prices (OHLC). Returns a summary by default; set series=true to get the full daily price series (for backtesting / charting).

NameTypeReqDescription
limitinteger–Max rows of the daily series to return when series=true.
periodstring–Look-back window
seriesboolean–If true, return the full daily OHLC series (up to `limit` rows) instead of just a summary.
tickerstringyesStock ticker symbol
NameTypeReqDescription
days_requestedintegeryes–
latest–yes–
periodstringyes–
period_high_close–yes–
period_low_close–yes–
period_start–yes–
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
rowsarrayyesThe rows rendered: the full series (series=true, up to limit) or the latest 10
rows_returnedintegeryes–
tickerstringyes–
total_return_pct–yes(latest close - period-start close) / period-start close x 100, from the returned rows

No examples provided.

get_stock_profile ~66

Get a company's profile — sector, market cap, price, P/E ratio, 52-week range, beta, dividend yield, and other key financials.

NameTypeReqDescription
tickerstringyesStock ticker symbol (e.g. 'AAPL', 'NVDA', 'MSFT')
NameTypeReqDescription
position_basis–yes–
stockobjectyes–
tickerstringyes–
top_holdersarrayyes–

No examples provided.

get_treasury_yields ~72

Get U.S. Treasury yield curve data — daily yields for maturities from 1-month to 30-year. Essential for understanding interest rate environment and yield curve shape.

NameTypeReqDescription
daysinteger–Days of daily history to return, 1-3650 (default 30 = last month)
NameTypeReqDescription
rowsarrayyes–
unitstringyes–

No examples provided.

list_insider_traders ~96

List executives/insiders who have recently traded their company stock. Filter by role (CEO only or all executives). Useful for finding notable insider buying/selling activity across the market.

NameTypeReqDescription
limitinteger––
pageinteger––
rolestring–Filter by role (case-insensitive): CEO, executive/officer, or all
searchstring–Search by name or ticker
NameTypeReqDescription
grainstringyes–
pagingobjectyesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
rolestringyes–
rowsarrayyes–
searchstring|nullyes–

No examples provided.

list_institutions ~88

List top institutional investors (hedge funds, mutual funds, etc.) tracked in the SEC 13F database. Supports search by name and pagination.

NameTypeReqDescription
limitinteger–Results per page
pageinteger–Page number
searchstring–Search by institution name, CIK, or manager name (e.g. 'Klarman' -> Baupost)
NameTypeReqDescription
pagingobjectyesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
rowsarrayyes–
searchstring|nullyes–

No examples provided.

search ~118

Search across institutions, stocks, and insider traders in the ko.io SEC database. Institutions match by firm name OR manager name ('Seth Klarman' -> Baupost, 'Ackman' -> Pershing Square; person hits carry matched_person). Use this first when you have a name but need the CIK number, ticker, or slug to use with other tools.

NameTypeReqDescription
limitinteger–Max results per category
querystringyesSearch query — company name, ticker, person name, or institution name (min 2 characters)
NameTypeReqDescription
congressarrayyes–
insidersarrayyes–
institutionsarrayyes–
querystringyes–
stocksarrayyes–

No examples provided.

search_gov_contracts ~246

Search U.S. federal prime-contract actions (USAspending, FY2015+) across companies, or rank companies by obligations with view=companies. Companies listed today plus reviewed links. Filter by ticker(s), agency, sub-agency, fiscal year or dates. Actions also support recipient, NAICS, award type and minimum absolute amount. Without tickers the window is at most 366 days. Exact decimal strings; signed obligations, not payments. Provisional recent months; Defense reports about 90 days late. Free: trailing 92 days; history: Pro.

NameTypeReqDescription
agencystring––
award_typestring––
fiscal_yearinteger––
fromstring––
limitinteger––
min_amountstring––
naicsstring––
pageinteger––
periodstring––
recipientstring––
sort_actionsstring––
sort_companiesstring––
sub_agencystring––
tickerstring––
tostring––
viewstring––
NameTypeReqDescription
actionsarray––
caveatsarrayyes–
companiesarray––
pagingobjectyesPaging state reconciled from ko.io meta.total_count and meta.softwall
plan_limit–yesThe Free/keyless plan limits ko.io applied to this answer (null for paid callers)
universestringyes–
viewstringyes–
windowobjectyes–

No examples provided.

sec_get_filing_document ~200

Get a source document from a SEC filing, served by ko.io. Returns a ko.io LINK to the rendered document (open in a browser) plus, optionally, an extracted text excerpt. Never returns the whole file — for full content, open the link or request a specific section. Requires a paid ko.io plan (Pro): on Free or keyless access the call returns an explicit plan-limit error. Use sec_list_filings / sec_get_filing_index (open on every plan) to find filings and their files.

NameTypeReqDescription
accession_nostringyesAccession number, e.g. '0000320193-23-000106'
cikstringyesCompany CIK number
filestring–File name within the filing (from sec_get_filing_index). Omit for the primary document.
include_excerptboolean–Include a text excerpt (first ~6000 chars) in the response
NameTypeReqDescription
accession_nostringyes–
cikstringyes–
excerptobjectyes–
filestring|nullyes–
linkobjectyes–

No examples provided.

sec_get_filing_index ~87

Enumerate every file in a single SEC filing (primary document, exhibits, images, XBRL, the full .txt submission). Pass a file name from here to sec_get_filing_document.

NameTypeReqDescription
accession_nostringyesAccession number, e.g. '0000320193-23-000106'
cikstringyesCompany CIK number
NameTypeReqDescription
accession–yes–
cikstring|nullyes–
filesarrayyes–

No examples provided.

sec_list_filings ~156

List an entity's SEC filings from EDGAR (most recent first), each with its accession number. Provide the company's CIK (use search or get_stock_profile to find it). Returns accession numbers to pass to sec_get_filing_index / sec_get_filing_document.

NameTypeReqDescription
cikstringyesCompany CIK number (e.g. '320193' for Apple)
form_typestring–Exact SEC form filter, e.g. '10-K', '13F-HR', '8-K'
fromstring–Earliest filing date, ISO YYYY-MM-DD
limitinteger–Max filings to return
tostring–Latest filing date, ISO YYYY-MM-DD
NameTypeReqDescription
cikstringyes–
filtersobjectyes–
rowsarrayyes–

No examples provided.

Install

How do I install the io.github.SharpLu/ko-mcp server?

io.github.SharpLu/ko-mcp is a hosted endpoint at https://mcp.ko.io/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · mcp.ko.io

# add to Claude Code
claude mcp add --transport http sharplu-ko-mcp 'https://mcp.ko.io/mcp'
Common questions

What is the io.github.SharpLu/ko-mcp server?

io.github.SharpLu/ko-mcp is listed in the public MCP registry as io.github.SharpLu/ko-mcp. Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools. This page covers its hosted endpoint (https://mcp.ko.io/mcp).

Is the io.github.SharpLu/ko-mcp server safe to use?

io.github.SharpLu/ko-mcp scores 86 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.SharpLu/ko-mcp server expose?

io.github.SharpLu/ko-mcp exposes 32 tools: get_institution_holdings, list_institutions, get_stock_profile, get_stock_holders, get_stock_activity, and 27 more. Their descriptions and schemas cost roughly 5,147 tokens of context every time the server is loaded.

Does the io.github.SharpLu/ko-mcp server require authentication?

No. We connected to io.github.SharpLu/ko-mcp without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

Is the io.github.SharpLu/ko-mcp server still maintained?

io.github.SharpLu/ko-mcp is still listed as active in the MCP registry. We last reached this channel on 7 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What did VerifyMCP test on the io.github.SharpLu/ko-mcp server?

VerifyMCP ran 13 checks on io.github.SharpLu/ko-mcp, covering TLS certificate, Authorization, HTTPS, HSTS header and 9 more. Supply Chain Security and Provenance & Transparency do not apply to a hosted endpoint, so they were not tested. The score does not measure everything, and the scoring documentation lists what it leaves out.