Skip to main content
Glama
mrgutierrezmario

InsiderTrack MCP

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.3.0 — running in production alongside InsiderTrack: twelve 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.9

So: 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-mcp

Over 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 https://<host>/mcp, transport Streamable HTTP, Authentication No sign-in, request header X-API-Key = the token. (claude.ai keeps the Authorization header for its own OAuth, so use X-API-Key.) The nine tools appear under Read-only tools; set them to Always allow.

Claude Code

claude mcp add --transport http insidertrack https://<host>/mcp --header "Authorization: Bearer <token>"

Local, no network

claude mcp add insidertrack -e INSIDERTRACK_URL=http://localhost:8013 -- .venv/bin/insidertrack-mcp

python -c "import secrets; print(secrets.token_urlsafe(32))"   # make a token

Tools

Tool

Question it answers

search

"Who is Pelosi in this system? What's the exact ticker? Which fund is Berkshire?" — ids and symbols for the other tools

congress_trades

"What did members of Congress do in NVDA since June?" — filter by ticker, member, buy/sell, owner, asset type, dates

ticker_signal

"What does KMX score, and why?" — the 0–100 composite, sub-scores and written reasons

top_signals

"What scores highest right now?" — the strongest tickers, no reasons

cluster_buys

"Where are several insiders buying their own stock?" — market-wide Form 4 clusters

member_track_record

"How have Pelosi's buys actually done?" — 30/60/90-day returns vs SPY, buys and sales, the weight it earns

leaderboard

"Which members beat the market most often?" — ranked by 90-day beat-SPY rate

late_filers

"Who reports their trades late?" — members ranked by trades disclosed past the STOCK Act's 45-day limit, with the worst filing linked

signal_outcomes

"Does 'Strong Watch' actually go up — and beat SPY?" — hit-rates and excess vs SPY per label per scoring version

model_desk

"What did the site's model call this morning, and how have its calls scored?"

fund_leaderboard

"Which 13F funds' position changes actually beat the market?" — measured from the filing's public date, not quarter end

fund_track_record

"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

insidertrack://brief/today

The site's model's morning brief and today's calls, as text

insidertrack://sources/health

How fresh each data source is, and recent errors — so an answer can say "House data is two days old"

prompt morning_brief

What changed this week: cluster buys, Congress purchases, top scores, how the model's calls resolved

prompt due_diligence(ticker)

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

12 tools
cluster_buysA
Read-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).

NameRequiredDescriptionDefault
daysNo
limitNo
min_buyersNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_tradesA
Read-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).

NameRequiredDescriptionDefault
limitNo
ownerNo
sinceNo
untilNo
tickerNo
directionNo
asset_typeNo
politician_idNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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_leaderboardA
Read-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.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_recordA
Read-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).

NameRequiredDescriptionDefault
holder_idYes
recent_changesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines4/5

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.

late_filersA
Read-onlyIdempotent

Members of Congress who disclose trades after the STOCK Act deadline.

A trade must be reported no later than 45 days after it happened. This ranks members by how many of their trades were disclosed later than that (trade date to filing date), with the share late, how many reports, the typical and longest delay, and a link to the worst filing. Late usually means one big catch-up report covering many trades; a multi-year "longest" can be a typo in the filing itself — the link lets a reader check. Late filing is a disclosure failure, not evidence of insider trading; say so if the user implies otherwise.

Args: days: Only trades disclosed in the last N days, 1-3650; omit for all history. limit: Members to return, 1-50 (default 15).

NameRequiredDescriptionDefault
daysNo
limitNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety (readOnly, idempotent, closed-world), and the description layers on real behavioral context: the 45-day legal threshold that defines "late," the fact that lateness is usually one big catch-up report rather than many, and that a multi-year "longest" delay may be a filing typo checkable via the returned link. It also pre-empts a likely misinterpretation, which is exactly the kind of disclosure annotations cannot provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the definition and the 45-day rule, then output shape, then caveats, then args — a sensible order with no filler. It runs a bit long, and the caveat sentences serve response framing as much as tool selection, but each one carries non-obvious information rather than restating structured fields.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Only two optional parameters, an output schema is present so return values needn't be described in detail, and annotations cover the safety profile. The description still explains the ranking's components and the caveats around interpreting them, leaving nothing an agent needs in order to call it correctly or frame the result honestly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

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 and does: days is bounded 1-3650 and omitting it means all history; limit is bounded 1-50 with a stated default of 15. Both parameters gain range, default, and semantic meaning that the bare schema does not supply.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific population (members of Congress who disclose trades after the STOCK Act deadline) and states exactly what the tool produces: a ranking by count of late trades with share-late, report counts, typical and longest delay, and a link to the worst filing. That is clearly distinct from siblings like congress_trades (raw trades) and member_track_record (performance), so an agent can pick it without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete usage guidance for the scope parameter ("omit for all history") and, unusually, interpretive guidance: late filing is a disclosure failure, not evidence of insider trading, and the agent should say so if the user implies otherwise. It doesn't explicitly name which sibling to use instead for other trade questions, so it falls short of a full when/when-not routing statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

leaderboardA
Read-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).

NameRequiredDescriptionDefault
limitNo
min_tradesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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_recordA
Read-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).

NameRequiredDescriptionDefault
politician_idYes
recent_tradesNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_deskA
Read-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).

NameRequiredDescriptionDefault
historyNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

signal_outcomesA
Read-onlyIdempotent

Does a label actually go up — and beat the market? 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, the win rate, and — against SPY over the same trading days — the average excess return in percentage points and how often the label beat SPY. A label that goes up in a rising market but trails SPY has no edge; lead with the SPY numbers. Scoring regimes change over time; results are per version (default: the current one). Small resolved counts mean the regime is young — say so.

Args: score_version: Restrict to one scoring regime; default is the current one.

NameRequiredDescriptionDefault
score_versionNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint and closed-world, so the safety profile is covered; the description goes beyond that by explaining what the numbers mean (excess return in percentage points over the same trading days as SPY) and warning that results are regime-scoped and can be thin. It never says what happens with an invalid/nonexistent score_version, which keeps it from a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The payload is front-loaded into the first sentence and the supporting detail follows in a logical order (what is snapshotted → what is returned → how to read it → regime caveat → args). It runs longer than strictly necessary and re-explains the SPY logic twice, so a sentence or two could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, the description needn't enumerate return fields, and it instead supplies the interpretive context an agent needs: the 30/60/90-day horizon, SPY-relative framing, sample-size caveat, and version scoping. The only remaining gap is not stating what an out-of-range or unknown score_version yields.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema only offers a nullable integer with default null, so the description has to carry the meaning — and it does: the parameter restricts to one scoring regime and defaults to the current one. The only weakness is a mild mismatch with the schema's literal null default, leaving an agent to infer that null means 'current regime'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a concrete verb+resource question ('Does a label actually go up — and beat the market?') and then states exactly the artifact: per-label score-bucket outcomes at 30/60/90 days with resolved counts, up/down/flat, win rate, and excess return vs SPY. That is specific enough to separate it from siblings like ticker_signal, top_signals, or leaderboard, which do not report resolved forward returns.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit consumption guidance ('lead with the SPY numbers') and a reporting rule ('Small resolved counts mean the regime is young — say so'), plus the caveat that scoring regimes change over time. It does not name a sibling tool or state when to prefer one over the other, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ticker_signalA
Read-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.

NameRequiredDescriptionDefault
tickerYes

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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_signalsA
Read-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).

NameRequiredDescriptionDefault
limitNo
min_scoreNo

Output Schema

NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 1 tool updatev0.3.0
    • Addedlate_filers
  2. 2 tool updatesv0.2.0
    • Addedfund_leaderboard
    • Addedfund_track_record
  3. 9 tool updatesv0.1.0
    • First observedcluster_buys
    • First observedcongress_trades
    • First observedleaderboard
    • First observedmember_track_record
    • First observedmodel_desk
    • First observedsearch
    • First observedsignal_outcomes
    • First observedticker_signal
    • First observedtop_signals

TDQS

A4.2/5.0

Scored across 12 tools

Disambiguation4/5

Most tools have clearly distinct purposes, but there are list/detail pairs (leaderboard vs member_track_record, fund_leaderboard vs fund_track_record, top_signals vs ticker_signal) that could be momentarily confused. Descriptions mostly resolve the boundaries, so the set is usable without much misselection risk.

Naming Consistency4/5

Tool names are consistently snake_case and largely follow an entity_or_feature + descriptor pattern. Minor deviations such as the verb-like `search` and the single-word `leaderboard` prevent a perfect score, but the convention is predictable.

Tool Count5/5

Twelve tools is well within the appropriate range for a multi-source market intelligence server. Each tool maps to a meaningful analytical surface, and the count does not feel bloated or thin.

Completeness3/5

The surface covers congressional trades, member performance, 13F fund performance, corporate insider clusters, ticker signals, signal outcomes, late filings, and model calls. However, `search` explicitly supports Fed officials but no other tool consumes a Fed official id, creating a dead end; raw corporate insider trades and some drill-down detail are also absent.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables querying of U.S. congressional stock trade data, including price history, recent trades, buy signals, stock activity, and politician activity, through natural language tools.
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Connects 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.
    -