InsiderTrack MCP
An MCP server that exposes InsiderTrack's read-only public-disclosure analytics — Congress trades, insider cluster buys, ticker scores, and how those signals actually performed — to any MCP client (Claude Desktop, claude.ai, Claude Code).
Look things up —
searchresolves names/fragments to politician ids, fund ids and exact tickers.Track Congress —
congress_tradesfilters disclosed House/Senate PTR trades by ticker, member, buy/sell, owner, asset type and date range.Score tickers —
ticker_signalreturns the 0–100 composite, sub-scores, reasons, label and BULLISH/NEUTRAL/BEARISH signal;top_signalslists the strongest without reasons.Find insider clusters —
cluster_buysshows companies where 2+ insiders bought on the open market, market-wide, sorted by dollars.Grade the signal-sources —
member_track_recordandleaderboardmeasure members' 30/60/90-day returns vs SPY and the score weight they earn;fund_leaderboardandfund_track_recorddo the same for 13F filers, measured from the filing's public date.Check whether it works —
signal_outcomesgives per-label 30/60/90-day hit rates by scoring version;model_deskreturns the site model's morning brief, calls and how they scored.Resources & prompts —
insidertrack://brief/today,insidertrack://sources/health(data freshness/errors), plus promptsmorning_briefanddue_diligence(ticker).Deployment modes — local subprocess with no network/tokens, or HTTP with bearer-token auth and rate limiting; read-only and idempotent by default, one optional
watchlist_addwrite only whenMCP_ALLOW_WRITES=1.Guardrails — capped result sizes, errors returned as recoverable data, one audit line per call, no database credentials, every result stamped
as_ofwith a disclaimer.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@InsiderTrack MCPShow me cluster buys in the last 30 days and how those signals performed."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
InsiderTrack MCP
An MCP server for InsiderTrack: let an AI assistant — Claude Desktop, claude.ai, Claude Code, or any MCP client — ask who in Congress is buying what, which corporate insiders are clustering, what a ticker scores and why, and whether those signals actually worked.
By M.G. Network and Technology Solutions.
v0.2.0 — running in production alongside InsiderTrack: eleven read tools, two resources, two prompts, token-gated over the public URL. Connected to claude.ai as a custom connector. Design notes in DESIGN.md.
What it looks like
A question the site cannot answer on any one page — "Where are several insiders buying their own stock this month, and did anyone in Congress buy the same names? How good is that member's record?" — becomes three tool calls. Recorded against the live instance on 2026-09-20:
cluster_buys(days=30)
BABA 2 insiders $25.7M PMTS 5 insiders $12.0M
GME 4 insiders $21.7M SBLK 8 insiders $6.9M
UBER 2 insiders $15.3M NGL 2 insiders $5.8M …
congress_trades(ticker="UBER", direction="buy", since="2026-06-01")
Dan Newhouse (R-WA, House) $1,001 – $15,000 traded 2026-07-10
member_track_record(politician_id=…)
89 measured buys · 90-day win rate 43.8% · beat SPY 40.4% of the time
avg excess vs SPY −2.3 pts · weight in the composite score: 0.9So: one overlap, and the member behind it has a below-market record — the
score already discounts his trades. Claude writes that paragraph; the
server only hands it the facts, each stamped as_of and with the disclaimer.
Related MCP server: Congressional Trade Signals
How it works
InsiderTrack already computes everything — scores, member track records, cluster buys, 30/60/90-day outcomes — behind an HTTP API. This server is a small, separately deployed process that exposes a curated set of tools over that API, each described well enough that a model picks the right one, with guardrails so a chat cannot hurt the app:
read-only by construction (one optional write, off by default),
bearer-token auth and a per-client rate limit over HTTP,
capped result sizes, errors returned as data the model can recover from,
one audit line per call,
no database credentials, no volumes — the container can only reach the app.
Run it
Locally, as a subprocess for Claude Code (no network, no tokens):
python -m venv .venv && .venv/bin/pip install -e ".[dev]"
claude mcp add insidertrack -e INSIDERTRACK_URL=http://localhost:8013 -- .venv/bin/insidertrack-mcpOver HTTP, inside the InsiderTrack Compose stack: add the service from
deploy/compose.snippet.yml to its
deploy/compose.yml, put an MCP_TOKENS=name:token line in its
deploy/.env, and add a /mcp handler to the Tailscale serve config
(Tailscale strips the prefix, so the server itself listens at /).
A ready-built image is on GHCR — ghcr.io/mrgutierrezmario/insidertrack-mcp
(:main follows the branch, :0.2.0-style tags are releases, amd64 and
arm64). A staging copy ran on Kubernetes from
homelab-gitops; it is
paused (since 2026-09-23) until it moves to its own machine.
Then connect a client:
Client | How |
claude.ai / Claude Desktop | Settings → Connectors → Add custom connector → URL |
Claude Code |
|
Local, no network |
|
python -c "import secrets; print(secrets.token_urlsafe(32))" # make a tokenTools
Tool | Question it answers |
| "Who is Pelosi in this system? What's the exact ticker? Which fund is Berkshire?" — ids and symbols for the other tools |
| "What did members of Congress do in NVDA since June?" — filter by ticker, member, buy/sell, owner, asset type, dates |
| "What does KMX score, and why?" — the 0–100 composite, sub-scores and written reasons |
| "What scores highest right now?" — the strongest tickers, no reasons |
| "Where are several insiders buying their own stock?" — market-wide Form 4 clusters |
| "How have Pelosi's buys actually done?" — 30/60/90-day returns vs SPY, buys and sales, the weight it earns |
| "Which members beat the market most often?" — ranked by 90-day beat-SPY rate |
| "Does 'Strong Watch' actually go up?" — hit-rates per label per scoring version |
| "What did the site's model call this morning, and how have its calls scored?" |
| "Which 13F funds' position changes actually beat the market?" — measured from the filing's public date, not quarter end |
| "How did Renaissance's new and increased positions do?" — 30/60/90-day returns vs SPY, buys and sales |
All read-only and idempotent (declared as such in the tool annotations),
each capped to a sensible number of rows, dollars pre-formatted, no internal
ids a model cannot use. One optional write, watchlist_add, exists only when
the operator sets MCP_ALLOW_WRITES=1 and gives the server their own
watchlist identity — it never holds an admin credential.
Resources and prompts
| The site's model's morning brief and today's calls, as text |
| How fresh each data source is, and recent errors — so an answer can say "House data is two days old" |
prompt | What changed this week: cluster buys, Congress purchases, top scores, how the model's calls resolved |
prompt | A one-page note on one ticker, in a fixed order, ending with what the data supports, what it doesn't, and what would change the picture |
Every result carries as_of and a disclaimer: InsiderTrack scores public
disclosures; it is a scorecard, not investment advice.
Development
.venv/bin/ruff check . && .venv/bin/ruff format --check .
.venv/bin/python -m pytest -q
docker build -f deploy/Dockerfile -t insidertrack-mcp .Tests run against recorded API responses in tests/fixtures/ — no
InsiderTrack instance needed. CI runs lint, tests and the Docker build on
every push; Dependabot keeps the pins current (patch and minor bumps merge
themselves once CI is green).
Operations
Nothing to back up — no database, no volumes; tokens live in InsiderTrack's
.env, which its nightly backup covers. How it comes back after a reboot,
how to update or rebuild it, rotate tokens, and what to check when it's
down: deploy/OPERATIONS.md.
Versions
The version lives in VERSION and is reported by the server on
initialise and at /health. See CHANGELOG.md.
License
PolyForm Noncommercial 1.0.0 — © 2026 M.G. Network and Technology Solutions.
Available Tools
11 toolscluster_buysARead-onlyIdempotent
Companies where several corporate insiders bought their own stock on the open market.
"Cluster buys" — two or more distinct officers, directors or 10% owners filing open-market purchases (Form 4 code P) within the window — are one of the stronger public signals. Market-wide, not limited to what Congress trades. Sorted by total dollars.
Args: days: Look-back window, 1-365 (default 30). min_buyers: Minimum distinct insiders buying, 1-10 (default 2). limit: Rows to return, 1-100 (default 25).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No | ||
| min_buyers | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds meaningful behavioral context: the exact definition of a cluster buy, the filing code involved, the market-wide scope, and that results are sorted by total dollars. This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: a one-sentence summary, a precise definition, market universe and sort order, then an Arg list. It is slightly wordier than necessary—'one of the stronger public signals' is more promotional than operational—but every sentence contributes useful context and the parameter section is clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only query tool with three optional parameters and an output schema, this description is complete. It defines the domain, explains the signal semantics, specifies the sort order, and documents all parameters with ranges and defaults. The output schema covers return values, so no further return-shape detail is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for the undocumented parameters. It does so fully by explaining each parameter's purpose, allowed range, and default: days as look-back window, min_buyers as minimum distinct insiders, and limit as rows to return. This gives the agent everything needed to set meaningful values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's output: companies with cluster buys by corporate insiders. It gives a specific definition (two or more distinct officers, directors, or 10% owners filing Form 4 code P) and distinguishes itself from Congress-only trading by saying it is market-wide. It does not use an explicit verb like 'returns' or 'lists,' and it doesn't name a sibling tool, but the resource and scope are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use this tool: when you want open-market insider cluster-buy signals across all companies. It also explicitly says it is 'not limited to what Congress trades,' which hints at a distinction from congress_trades. However, it does not explicitly state when to use this vs. a specific alternative, nor does it mention any exclusions or complementary tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
congress_tradesARead-onlyIdempotent
Stock trades disclosed by members of Congress (House and Senate PTRs).
Filter by ticker and/or politician id (from search), direction, who in
the household traded, asset type, and a date range on the trade date.
Newest first. Amounts are the dollar brackets the law requires, not exact
figures. direction already treats a put purchase as the bearish bet it is.
Args:
ticker: Exact symbol, e.g. NVDA.
politician_id: From search.
direction: buy or sell.
owner: self, spouse, child or joint.
asset_type: stock, option or other.
since: Earliest trade date, YYYY-MM-DD.
until: Latest trade date, YYYY-MM-DD.
limit: Rows to return, 1-100 (default 25).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| owner | No | ||
| since | No | ||
| until | No | ||
| ticker | No | ||
| direction | No | ||
| asset_type | No | ||
| politician_id | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses three behavioral traits: newest-first order, legally required dollar brackets rather than exact amounts, and the already-normalized direction semantics for put purchases. These are exactly the non-obvious behaviors an agent needs to interpret results correctly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose first, then key filter semantics, then a tidy Args block with one line per parameter. No wordy filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All eight optional parameters receive adequate guidance, and the tool's output-related caveats (sort order, amount granularity, direction normalization) are covered. With annotations covering safety and an output schema present, nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description fully compensates by documenting every parameter: ticker format, politician_id origin, direction values, owner values, asset_type values, date format, and limit range with default. This is more informative than the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Stock trades disclosed by members of Congress (House and Senate PTRs)', clearly identifying the resource and data scope. It does not explicitly contrast itself with sibling tools like top_signals or member_track_record, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit usage context by enumerating the available filters (ticker, politician_id, direction, owner, asset_type, date range) and noting that politician_id comes from `search`. It does not name alternative tools for signals or track records, but the filter list makes the tool's intended role clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fund_leaderboardARead-onlyIdempotent
Institutional investors (13F filers) ranked by how their position changes performed vs SPY.
Each fund's new and increased positions are measured from the day the
13F became public (up to 45 days after quarter end — the date that
matters, not the quarter end) at 30/60/90 days against SPY. window is
the longest horizon with data; a fund needs two loaded quarters to be
measured at all, so early on only a few are ranked and the rest show
measured: false. Use fund_track_record for the detail.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, but the description adds meaningful behavior beyond those: the 13F public-date timing, 30/60/90-day measurement windows, the meaning of `window`, and the `measured: false` outcome for funds without enough history. This is substantial behavioral context that an agent cannot infer from annotations or the empty input schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose is in the first sentence, followed by the most important measurement nuance and a pointer to the sibling detail tool. Every sentence adds distinct value, and the structure moves from high-level purpose to operational detail without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, an existing output schema, and read-only/idempotent annotations, the description covers everything an agent needs to decide whether to call this tool. It explains the ranking methodology, data timing, eligibility caveats, and where to get more detail, making the definition self-sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so the baseline is 4 because there are no parameter semantics to document. The description goes further by defining `window` as the longest horizon with data, which likely corresponds to an output concept and helps interpret results. There is no missing parameter documentation to penalize.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a precise statement: 'Institutional investors (13F filers) ranked by how their position changes performed vs SPY.' This names the subject, the action, and the comparison benchmark, making it clearly distinguishable from siblings like leaderboard or fund_track_record. It also immediately clarifies what the tool measures rather than just restating the name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when results are meaningful, noting a fund needs two loaded quarters and that early on only a few are ranked, which guides expectations. It also explicitly points to a sibling, 'Use fund_track_record for the detail,' providing a concrete alternative. It does not enumerate other alternatives or edge cases, but the context it gives is useful and clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fund_track_recordARead-onlyIdempotent
How one institutional investor's 13F position changes performed vs SPY.
"Buys" are new and increased positions, "sales" trims and exits
(measured in the inverted sense: a good sale is one the stock then
fell). Every change is measured from the 13F's public date — a quarter-
end snapshot the fund filed up to 45 days later — so this is what a
person copying the filing could have done, not what the fund did.
Windows with n 0 simply have no resolved data yet.
Args:
holder_id: From fund_leaderboard or search.
recent_changes: Measured changes to list, 0-50 (default 10).
| Name | Required | Description | Default |
|---|---|---|---|
| holder_id | Yes | ||
| recent_changes | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide the read-only and idempotent safety profile, while the description adds important behavioral nuance: measurements are anchored to the 13F public date, sales are evaluated in the inverted sense, and windows with zero resolved data are explicitly called out. This goes well beyond what annotations alone convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: purpose, definitions/caveats, then parameters. Each section adds value, but the text is somewhat dense and the stray 'n' reference could be simplified or aligned with the actual parameter name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the read-only annotations and the presence of an output schema, the description covers the essential conceptual model, parameter sourcing, and edge-case behavior. Small gaps—no explicit alternative routing and the ambiguous 'n' reference—keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden for parameter meaning. It explains holder_id's provenance and gives recent_changes a range and default. The cryptic 'Windows with n 0' phrasing is ambiguous and weakens an otherwise solid parameter explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the resource ('one institutional investor's 13F position changes') and the benchmark ('vs SPY'), and it explains buys/sales semantics. It lacks an explicit performative verb like 'returns' or 'computes' and does not directly distinguish itself from sibling track-record tools, so it falls just short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The first sentence establishes a clear use case, and the Args section tells the agent where to obtain holder_id ('From fund_leaderboard or search'). It does not explicitly state when not to use this tool or point to alternatives, but the context is clear enough to guide selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
leaderboardARead-onlyIdempotent
Members of Congress ranked by how often their stock buys beat SPY at 90 days.
Only members with at least min_trades measured buys are ranked, so a
lucky single trade does not top the list. weight_in_score is the
multiplier that record earns their trades in the composite score.
Args: min_trades: Minimum measured buys to qualify, 1-200 (default 10). limit: Rows to return, 1-50 (default 20).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| min_trades | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and closed-world behavior, so the description's job is lighter. It adds meaningful context about how the leaderboard is computed, including the min_trades qualification to avoid single-trade outliers and the composite-score multiplier, which goes beyond the annotation metadata.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the first sentence, followed by a compact rationale and a clearly formatted args list. Every sentence earns its place; there is no filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only query tool with an output schema present, the description covers ranking semantics, qualification threshold, score composition, and parameter constraints. Nothing essential is missing for correct selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully carries parameter documentation. It explicitly defines min_trades with its purpose, valid range, and default, and limit with its purpose, range, and default. This is exemplary compensation for an empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-resource relationship: members of Congress are ranked by how often their stock buys beat SPY at 90 days. This clearly distinguishes the tool from the sibling list by naming the exact ranking metric and population.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: an agent should invoke this when a ranked leaderboard of Congress members' trading performance is needed. However, there is no explicit guidance about when to prefer this tool over siblings such as top_signals or member_track_record, and no when-not-to-use exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
member_track_recordARead-onlyIdempotent
How a member of Congress's disclosed stock buys (and sales) actually performed.
Every buy is measured from the first close after disclosure at 30/60/90
days, against SPY over the same days. weight_in_score is what that
record earns the member's trades in the composite score (1.0 = neutral).
Sales are measured the same way (a good sale is one the stock then fell).
Args:
politician_id: From search.
recent_trades: Measured buys to list, 0-50 (default 10).
| Name | Required | Description | Default |
|---|---|---|---|
| politician_id | Yes | ||
| recent_trades | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint true and idempotentHint true, so safety profile is covered. The description adds valuable behavioral context: measurement window (first close after disclosure, 30/60/90 days), comparison against SPY, meaning of weight_in_score, and treatment of sales. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is compact and front-loaded with purpose, then methodology, then parameter guidance. Every sentence contributes; no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given output schema exists and annotations cover read-only behavior, the description is sufficient. It covers purpose, measurement methodology, and parameter semantics. Minor gaps like error handling are not necessary because of output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so description carries full parameter documentation burden. It adds meaning beyond schema: politician_id sourced from search, recent_trades defined as measured buys with range 0-50 and default.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb+resource: it evaluates how a member's disclosed stock trades performed, with defined measurement methodology. It distinguishes from sibling tools like search and leaderboard by focusing on individual member trade performance.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description clearly implies usage: to get performance of a specific member's trades, and references 'search' as source of politician_id. It does not explicitly compare against alternatives or state when-not-to-use, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_deskARead-onlyIdempotent
The site's own AI model's morning brief and directional calls — and how they scored.
Each morning the model reads the day's disclosures and makes 3-5 calls (ticker, bullish/bearish, 30/60/90-day horizon, confidence, reasoning). Calls are scored at their horizon against SPY exactly like members' trades. Treat it as a scorecard of the model, not a forecast.
Args: history: Also return this many past calls, newest first, 0-100 (default 0).
| Name | Required | Description | Default |
|---|---|---|---|
| history | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description adds useful behavioral detail: the model reads daily disclosures, makes 3–5 calls with specific fields, and scores them against SPY like member trades. This enriches the agent's understanding of the data and its provenance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficient and well-organized: a clear opening statement, a concise explanation of the model's process, and a focused Args section. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter surface (one optional arg), rich annotations, and the presence of an output schema, the description sufficiently covers the tool's purpose, behavior, and parameter semantics. Nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has zero description coverage, but the description fully documents the history parameter: range 0–100, default 0, and ordering (newest first). This is essential for correct invocation and completely compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool as returning the site's AI model's morning brief and directional calls with scoring, and explicitly differentiates it from a forecast ('scorecard of the model, not a forecast'). This distinguishes it from sibling tools like top_signals or signal_outcomes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives interpretive guidance ('treat it as a scorecard of the model, not a forecast') but does not explicitly state when to use this tool over siblings or provide exclusions. An agent must infer its comparative utility.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchARead-onlyIdempotent
Find members of Congress, tickers, 13F funds and Fed officials by name or symbol.
Use this first when you have a name or part of a ticker and need the politician id, fund id or exact symbol that the other tools take. Matching is case-insensitive and partial ("pelosi", "NVD", "berkshire").
Args: query: A name or ticker fragment, 1-80 characters.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnlyHint and idempotentHint annotations, the description adds meaningful behavioral detail: matching is case-insensitive and partial, with concrete examples. This tells the agent how querying will behave, though it does not discuss result limits or ordering, which are minor given the output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: purpose first, usage context second, matching behavior with examples third, and parameter spec last. Every sentence contributes necessary decision-making information with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter search tool with an output schema and read-only, idempotent annotations, the description provides the necessary purpose, usage trigger, matching semantics, and parameter constraints. There is no material missing information an agent would need to choose and call the tool successfully.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description fully compensates by defining the single parameter: 'A name or ticker fragment, 1-80 characters.' It also implies valid input types and length constraints, so the agent can construct the query correctly without further schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Find') and explicitly lists the four resource types (members of Congress, tickers, 13F funds, Fed officials), plus the concrete outputs (politician id, fund id, exact symbol). This clearly distinguishes it from the sibling tools that consume those IDs rather than performing lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this first when you have a name or part of a ticker and need the politician id, fund id or exact symbol that the other tools take' is explicit guidance on when to invoke this tool before others. It also frames the tool as a lookup/disambiguation step within the broader toolset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signal_outcomesARead-onlyIdempotent
Does a label actually go up? Hit-rates of every score bucket at 30/60/90 days.
InsiderTrack snapshots every ticker's score daily and fills in what the
price did 30, 60 and 90 days later. This is the scorecard: per label, how
many snapshots resolved, how many went up/down/flat, and the win rate.
Scoring regimes change over time; results are per version (default: the
current one). Small totals mean the regime is young — say so.
Args: score_version: Restrict to one scoring regime; default is the current one.
| Name | Required | Description | Default |
|---|---|---|---|
| score_version | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true and idempotentHint=true, and the description adds substantial behavioral context beyond that: results are per scoring regime version, default to the current version, and small `total`s signal a young regime that should be flagged. It also explains the data flow (daily snapshots paired with future price moves), which is genuinely useful for interpreting results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear purpose, then provides a concise mechanism explanation, a caveat about young regimes, and a dedicated Args section. Every sentence adds information relevant to selecting or invoking the tool, with no filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and there is only one optional parameter, the description is complete: it explains conceptual purpose, data provenance, per-version behavior, default parameter handling, and an interpretive caveat. No critical information needed to call the tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full explanatory burden for score_version. It does so by stating the parameter restricts results to one scoring regime and defaults to the current one. This is sufficient for a single optional parameter, though it could have added a bit more detail on how versions are identified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific function: computing hit-rates for every score bucket at 30/60/90 days. It explains the underlying snapshot-and-price mechanism and frames the output as a scorecard of per-label resolved snapshots and win rates. This is distinct enough to separate from sibling tools like top_signals or ticker_signal, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening question 'Does a label actually go up?' and the description of the scorecard give clear context for when to use this tool: when an agent needs outcome validation per score label over 30/60/90 day horizons. It does not explicitly name alternatives or exclusion cases, but the use case is clearly scoped.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
ticker_signalARead-onlyIdempotent
InsiderTrack's composite score for one ticker, with the reasons behind it.
Score is 0-100: smart money (13F holders) + Congress buying weighted by each
member's track record + corporate insiders (Form 4) + momentum, minus a risk
penalty. label is the human bucket (e.g. "Strong Watch", "High Risk");
signal is BULLISH / NEUTRAL / BEARISH. Only tickers traded by a tracked
member of Congress in the window have a score.
Args: ticker: Exact symbol, e.g. NVDA.
| Name | Required | Description | Default |
|---|---|---|---|
| ticker | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it readOnly and idempotent, and the description adds meaningful behavioral context: the 0-100 formula, label/signal semantics, and the condition that not all tickers are eligible. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: a one-line summary, the scoring rule and output buckets, an important eligibility boundary, and the argument definition. Front-loaded and free of filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only single-ticker lookup with an output schema already present, this description covers the meaning, composition, output labels, eligibility condition, and parameter format. Nothing essential is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must carry the parameter meaning. It does: 'ticker: Exact symbol, e.g. NVDA' adds precision that the bare schema string lacks. This is sufficient for a single simple parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource ('InsiderTrack's composite score for one ticker') and a clear verb implied ('get'/'return'). The 'for one ticker' scope and signaled outputs ('label', 'signal') set it apart from siblings like top_signals or leaderboard without needing to open them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clear context: this tool answers single-ticker signal questions and explicitly notes that only tickers traded by a tracked member of Congress will have a score. It does not name sibling alternatives or state when not to use it, but the boundaries are clear enough for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
top_signalsARead-onlyIdempotent
The strongest composite scores right now, highest first (use ticker_signal for the reasons).
Args: limit: Rows to return, 1-25 (default 10). min_score: Only tickers scoring at least this (0-100).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| min_score | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnlyHint and idempotentHint, so the description does not need to restate safety. It adds modest context: the results are a current snapshot, sorted highest first, and constrained by limit/min_score, but does not disclose deeper behavior such as data age or scoring source.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one sentence, followed by compact, scannable parameter lines. There is no filler or repetition of schema fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple ranked-list tool with an output schema, the description is complete: the agent knows what it returns, how it is ordered, the parameter constraints, and the sibling to use for underlying reasons.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the Args section fully compensates: limit is described with range (1-25) and default (10), and min_score is described as a 0-100 threshold. This adds real meaning beyond the bare type/default fields in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence states a specific, scannable purpose: returning 'the strongest composite scores right now, highest first.' It also distinguishes itself from the sibling ticker_signal by directing reason-seeking users there.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when not to use this tool and where to go instead: 'use ticker_signal for the reasons.' It does not discuss other siblings like search or leaderboard, but the most confusable alternative is handled.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v0.2.0- Added
fund_leaderboard - Added
fund_track_record
9 tool updates
v0.1.0- First observed
cluster_buys - First observed
congress_trades - First observed
leaderboard - First observed
member_track_record - First observed
model_desk - First observed
search - First observed
signal_outcomes - First observed
ticker_signal - First observed
top_signals
TDQS
Scored across 11 tools
Each tool targets a distinguishable slice: search, fund vs. congressional leaderboards/records, trade lists, cluster buys, model calls, and signal scorecards. The main ambiguity risk is among the signal-named tools (ticker_signal, top_signals, signal_outcomes) and between leaderboard and fund_leaderboard, but their descriptions clarify the boundaries.
Names are uniformly snake_case and mostly follow noun-phrase patterns like fund_leaderboard/fund_track_record and member_track_record. Minor inconsistencies exist: the generic leaderboard lacks a congress_ prefix that its fund counterpart has, and search stands alone as a bare verb.
Eleven tools is well-scoped for a read-only analytics server covering congressional trades, 13F funds, insider activity, and signal scoring. Each tool has a distinct query purpose, and none feel redundant or like padding.
The surface covers discovery, per-entity track records, aggregate leaderboards, raw trade listings, signal scores, and outcome validation, so core user workflows are supported. Minor gaps exist, such as no detailed corporate insider transaction list beyond cluster_buys and no fund holdings breakdown, but agents can work around them.
Maintenance
Related MCP Connectors
Ask your AI about the markets: filings, insider & congress trades, fund flows, options, macro
US stock market data for AI agents: SEC filings, financials, insider trades, 13F, options, macro.
SEC EDGAR financials, insider trading, and economic data for AI agents. US GAAP + IFRS.
Real SEC, 13F, insider, congress & macro data your AI agent can cite. Hosted MCP, 24 tools.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables users to query and analyze U.S. politician stock trades with real-time pricing data from Capitol Trades, with no API key required.6209 npm5MIT
- AlicenseNot gradedqualityDmaintenanceEnables querying of U.S. congressional stock trade data, including price history, recent trades, buy signals, stock activity, and politician activity, through natural language tools.1MIT
- FlicenseNot gradedqualityCmaintenanceConnects Claude to live U.S. Congress stock trades and institutional 13F holdings from free public sources, enabling natural language queries about political insider trading and fund overlap.-
- AlicenseNot gradedqualityDmaintenanceConnects AI assistants to SEC EDGAR filings for retrieving company data, financial statements, and insider transactions with exact precision.MIT