Veridion Disclosures
Server Details
Congressional stock-trade reports and the President's OGE reports, each row linked to its filing.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-06-18
- URL
TDQS
Scored across 5 tools
Each tool targets a distinct aspect: coverage counts, per-disclosure version history, source health, filer directory, and search. The only mild overlap is between get_coverage (counts) and get_status (freshness/health), both being metadata endpoints, but their descriptions clearly separate them.
Names follow a predictable verb_noun pattern (get_coverage, get_disclosure_history, get_status, list_members, search_disclosures) with clear intent. The only deviation is that three different verbs (get/list/search) are used, but each is idiomatic for its operation.
Five tools is a reasonable, well-scoped surface for a read-only disclosures API, with each endpoint earning its place. It sits at the lower end of the ideal range, and get_coverage/get_status could conceivably be consolidated.
The surface covers the core read workflows: search, point-in-time reconstruction, version history, filer identity resolution, coverage metrics, and source health. Minor gaps exist (e.g., no direct single-disclosure-by-id fetch or bulk export tool despite bulk_export being referenced in get_status), but agents can work around them.
Available Tools
5 toolsget_coverageARead-onlyIdempotentInspect
Live coverage counts (rows, filers, per-source totals) measured from the serving views. Prefer these numbers over any cached figure.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| cache | Yes | |
| notice | Yes | |
| dataset | Yes | |
| serving | Yes | Rows /v1/disclosures returns right now, counted from the serving view at read time after every exclusion. Not the count of rows that qualify. Every count is nullable because the measurement reports unavailable rather than guessing when it cannot reach the view. |
| version | Yes | |
| congress | Yes | |
| exclusions | Yes | |
| provenance | Yes | |
| description | Yes | |
| generated_at | Yes | |
| request_access | Yes | |
| sources_of_record | Yes | |
| provenance_field_coverage | Yes | |
| provenance_reconciliation | Yes | |
| house_clerk_ptr_completeness | Yes | Held and served coverage from one completed House Clerk PTR index run, both read through the same funnel helper as /data-api. Aggregate rates are withheld if archive-year totals disagree with distinct indexed documents. These are archive-year scopes, not filing-date buckets. Every rate names its sibling numerator and denominator in rate_basis. House PTR type P only, for the stated archive years; not Senate eFD, other filing types, or a claim that the Clerk's index is complete. measurement_definition carries this boundary even when counts are unavailable. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive, closed-world behavior, so the bar is low. The description adds genuinely useful behavioral context beyond that: the counts are live and measured from serving views, and they should supersede cached figures, which tells the agent about freshness and authority of the data.
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?
Two sentences, both earning their place: the first defines the payload and its source, the second states the precedence rule. The most decision-relevant content is front-loaded with 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?
For a zero-parameter tool with an output schema, the description needs only to say what is returned and any caveats; it does both by enumerating the counts and flagging their live/authoritative nature. Nothing required to call or interpret it 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?
The tool takes zero parameters, so there is no parameter semantics to document; the baseline for a no-parameter tool is 4. Nothing in the description misleads about inputs, and the absence of parameters is consistent with a pure read of aggregate coverage.
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 names a specific resource (live coverage counts) and enumerates the exact metrics returned (rows, filers, per-source totals), plus the data source (serving views). It is unambiguous about what the tool produces, though it does not explicitly contrast itself with siblings like get_status or get_disclosure_history.
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?
"Prefer these numbers over any cached figure" gives a clear selection rule for when this tool's output should be trusted over other sources. It stops short of naming alternative tools or stating when not to use it, so it is strong context rather than full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_disclosure_historyARead-onlyIdempotentInspect
Every observed version of one disclosure, oldest first. The change stream is append-only, so an amendment supersedes rather than overwrites -- the before and after of a restated filing are both here, each with its own change block and receipt.url. restated=true states that content changed after first publication; report what changed and when, never why.
| Name | Required | Description | Default |
|---|---|---|---|
| disclosure_id | Yes | Permanent disclosure_id from search_disclosures. Identifiers survive restatement and are never reused. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | Every observed version of this disclosure_id, oldest first. Each entry carries its own change block (upsert or supersede, active or withdrawn) and version_id. The last entry is the current state. |
| cache | Yes | |
| access | Yes | |
| notice | Yes | |
| history | Yes | |
| version | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, closed-world, non-destructive), yet the description adds real behavioral context: the stream is append-only, amendments supersede rather than overwrite, both before/after versions persist, each with its own change block and receipt.url. That predicts the shape and completeness of results in a way annotations cannot.
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?
Front-loaded with what the tool returns and in what order, followed by the append/amend model. Dense but mostly load-bearing; the 'never why' clause is more interpretive guidance than tool behavior, though it is short.
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?
With an output schema present, return values need not be re-explained, and the description still characterizes the version chain and restatement semantics. An agent has what it needs to call this correctly and read the results.
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?
There is only one parameter and schema description coverage is 100%, including the fact that identifiers survive restatement and are never reused. The description adds no further syntax or format detail for disclosure_id, so the baseline of 3 applies.
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 and verb-equivalent action: every observed version of one disclosure, returned oldest first. It is clearly distinguishable from search_disclosures (which finds disclosures) and from the other siblings (coverage, status, members).
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?
Usage is implied — you need a disclosure_id (from search_disclosures, per the schema) to trace its history — but the description never states when to prefer this over search_disclosures or when it is not applicable. The 'restated=true' and 'report what changed and when, never why' lines guide interpretation rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusARead-onlyIdempotentInspect
Source freshness and bulk-snapshot health. This endpoint downgrades itself when its own arithmetic says stale — it never guesses green. When state is 'degraded', degraded_reasons names each cause with its measurement; sources[].index_reconciliation says whether the government's own index lists filings not yet served; bulk_export.merkle_root is the day's commitment over every row's content_hash. Check it before trusting a large pull.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| cache | Yes | Always no-store with zero max-age at every layer: a status page that could be served stale would defeat itself. age_header is null because no cache is permitted to add one. |
| state | Yes | ready when no check below is failing. degraded when any source is stale or unavailable, the export is stale, unavailable or missing its merkle_root, coverage recovery is stale or unavailable, the Congress summary is stale, unavailable or unattested, a temporal-conformance contract fails, the temporal window is unreadable, the House index lists unaccounted filings, or a pipeline job is not delivering. unavailable when the status itself could not be measured. The endpoint never reports a state more optimistic than its own arithmetic: a stored 'ready' older than its threshold is reported stale. |
| detail | No | Present only on the unavailable body, naming what could not be read. |
| notice | No | Standing guidance on reading this block: what no_data means, what degraded does and does not imply, and how to verify a download. |
| sources | Yes | Freshness of every source Veridion polls, measured from the same table the serving views read. One entry per source system, including the ones that publish nothing. |
| version | Yes | The contract version this response was produced under; the same value as X-API-Version. |
| pipeline | No | Attendance of the jobs that produce this API's data, from the cron attendance store. Absent only on the fail-closed 503 body. A missed, died or never-run job, a failed export run, or an unreadable store degrades the endpoint by name. |
| universe | No | How fresh the scored universe is. A buyer's first question about a score is how old it is, and the answer is a distribution: newest, median, oldest, and the share scored inside a day. Measured on a cron and read as one stored row; the block reports the age of its own measurement so a stale measurement cannot masquerade as a current one. Absent only on the unavailable body, where no read was attempted at all: this endpoint does not publish a block it did not measure. |
| bulk_export | No | The daily bulk snapshot: its day, generation, size, file hash and Merkle commitment. Absent only on the unavailable body. |
| billing_gate | Yes | A completed UTC day qualifies only when all 24 distinct hourly observations are present and operational. Operational means the public status evaluator returned ready with no degraded reasons. Missing hours break the streak; today's incomplete hour is not missing until it ends. A recorded non-operational sample today resets the streak immediately. No history is backfilled. Hourly samples do not establish continuous availability or a service-level guarantee. |
| generated_at | Yes | When this response was computed. Every age_seconds below is measured from this instant, so the block is internally consistent even when read from a cache. |
| track_record | No | When the published track record was last successfully computed, and whether the latest run succeeded. The figures a buyer reads on /track-record are dated by published_at; this block lets a pipeline learn that date, and learn that a later run failed, without scraping the page. Read live from two indexed single-row lookups, so unlike universe it carries no measurement age of its own. Absent only on the unavailable body, where no read was attempted. |
| temporal_window | Yes | How far back as_of reads can go. The floor is the activation instant of retained payload history; depth is the time since. Neither says anything about filing completeness before the floor, which is what /v1/coverage measures. |
| degraded_reasons | Yes | Which checks pulled state down, and their measurements. Empty when ready. An unavailable response carries any observed read failures, including named timed_out deadlines; missing configuration has no measured read outcomes. |
| coverage_recovery | No | Where House Clerk document recovery stands: how many documents are parsed, queued, failing, terminally failed, or withheld by the lossless-reparse check. Absent only on the unavailable body. |
| observation_delay | No | Hours from a filing's filed_date to Veridion's first observation, per source. Published only over rows with verified continuity; withheld with the reason otherwise. Absent only on the unavailable body. |
| temporal_conformance | No | The four temporal contracts, verified against the pinned bulk snapshot. A failing contract degrades the endpoint by name. Absent only on the unavailable body. |
| institutional_delivery | Yes | A declared boundary, stated rather than discovered. |
| congress_public_summary | No | The Congress public summary that /api/congress/summary serves, its age, and whether the newest owner outcome attests to it. Absent only on the unavailable body. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description goes well beyond them: it discloses that the endpoint self-downgrades when its own arithmetic detects staleness and "never guesses green," and it explains what degraded_reasons, sources[].index_reconciliation and bulk_export.merkle_root actually mean. That is exactly the kind of trust/verification context an agent cannot get from the 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?
Front-loaded with the one-line purpose, then detail in descending priority, ending on the actionable precondition. It is dense with domain jargon (merkle_root, index_reconciliation) but every sentence carries information; it is not padded.
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?
An output schema exists, so the description is not obliged to enumerate return fields, yet it still explains the semantics of the most consequential ones (degraded states and their causes, index reconciliation, the daily commitment). Combined with full annotation coverage and no parameters, nothing an agent needs in order to call this 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?
The tool takes zero parameters, so there is nothing for the description to disambiguate and the baseline is 4. No parameter-level guidance is needed here.
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 opening line names a specific resource and scope — source freshness plus bulk-snapshot health — so an agent knows this is a health/status read rather than a data-retrieval call. It does not explicitly distinguish itself from the sibling get_coverage, which is the one tool an agent might plausibly confuse it with, so it stops 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?
"Check it before trusting a large pull" gives a concrete precondition for calling the tool, which is real usage guidance. There is no explicit when-not or named alternative (e.g. get_coverage), so it is clear context without full routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_membersARead-onlyIdempotentInspect
List filers with official identity (congressional filers carry their Bioguide ID; executive-branch filers return null with an explanation — identifiers are never invented). Filter by bioguide, by the exact member_id a disclosure row carries, or by a substring of the name as filed. Resolve a person with name first, then confirm with the returned member_id or bioguide.
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Case-insensitive substring of the filer's full name, e.g. pelosi | |
| bioguide | No | Official Bioguide ID, e.g. P000197 | |
| member_id | No | Exact filer identifier from a disclosure row, e.g. nancy-pelosi |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| cache | Yes | |
| count | Yes | |
| notice | Yes | |
| version | Yes | |
| directory | Yes | Which relation answered and how old it is. Present on every directory response so a reader never has to assume the age of what they were served. |
| served_at | Yes | |
| identity_join | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-open-world, so the safety profile is covered. The description adds genuinely useful behavior beyond that: executive-branch filers return null with an explanation and identifiers are never invented, which sets expectations for partial results. It stops short of rate limits or pagination, so not 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the core behavior and edge case, then filtering modes, then the recommended resolution sequence. Every sentence carries distinct information with no redundancy.
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?
An output schema exists and the annotations are rich, so return formatting and safety need not be repeated. For a 3-param, 0-required lookup tool, the purpose, edge-case null behavior, filtering semantics, and resolution workflow are all present.
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 100%, so parameter meaning is already fully documented (substring name, Bioguide example, exact member_id). The description largely restates the same semantics plus a resolution order, adding little that isn't already in the schema; baseline 3 applies.
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 action (list filers with official identity) and clearly scopes the population (congressional filers carry Bioguide IDs; executive-branch filers return null). An agent understands what it returns. It does not differentiate from siblings, though none of the listed siblings genuinely overlap, so a 4 rather than 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?
Gives an explicit resolution workflow: 'Resolve a person with name first, then confirm with the returned member_id or bioguide,' and enumerates the three filtering modes. It provides clear context but does not state when to prefer this over an alternative tool, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_disclosuresARead-onlyIdempotentInspect
Search receipt-linked US government financial disclosures. Both chambers of Congress under the STOCK Act, plus executive-branch OGE filings -- filter chamber='executive' for those, which is where the President's disclosures are. Every row resolves to the government's own PDF via receipt.url — cite it. Supports point-in-time reconstruction via as_of (rows observed on or before that timestamp; no look-ahead bias) and change polling via updated_since. Paginate with the returned page.next_cursor.
| Name | Required | Description | Default |
|---|---|---|---|
| as_of | No | ISO timestamp: only rows first observed on/before this instant | |
| limit | No | Rows per page (free tier caps at 25; licensed 1000) | |
| cursor | No | Opaque page.next_cursor from a previous call | |
| ticker | No | Filter by ticker symbol, e.g. NVDA | |
| chamber | No | Filter by filing body. 'house' and 'senate' are STOCK Act periodic transaction reports; 'executive' is executive-branch OGE filings, which is where the President's disclosures are. Omit to search all. | |
| member_id | No | Filter to one filer by slug, e.g. donald-trump or nancy-pelosi. Use list_members to resolve a name to its identifier. | |
| updated_since | No | ISO timestamp: only rows first observed after this instant | |
| min_delay_days | No | Only rows filed at least this many days after the transaction. The STOCK Act window is 45 days, so 46 returns filings outside it. Rows without a computed delay are excluded, not guessed at. | |
| within_statutory_window | No | false returns only filings made outside the statutory window that applies to that row (served as statutory_window_days); true returns only filings inside it. Prefer this over min_delay_days when the question is 'was it late', because the boundary is the row's own window, not a number you supply. Annual reports have no window and are excluded by either value. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| page | Yes | |
| cache | Yes | |
| access | Yes | |
| notice | Yes | |
| version | Yes | |
| coverage | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description adds real behavioral context beyond them: every row resolves to a citable government PDF via receipt.url, and as_of guarantees no look-ahead bias. It does not discuss rate limits or result-size behavior, keeping it at a 4.
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?
Roughly five dense sentences, front-loaded with the core purpose before the filtering/pagination mechanics. Nearly every clause carries information, though the receipt.url citation instruction is a soft nudge rather than strictly necessary.
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?
An output schema exists, so return values need not be explained, yet the description still surfaces the two most important output affordances (receipt.url for citation, page.next_cursor for pagination). Combined with the 9-parameter surface fully covered, an agent has everything needed to call this correctly.
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 100%, so a baseline of 3 applies, but the description adds meaning: chamber='executive' is where the President's disclosures live, as_of yields observed-on-or-before rows without look-ahead bias, and updated_since drives change polling. These clarify intent rather than just restating the schema, warranting a 4.
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 verb ('Search') and resource ('receipt-linked US government financial disclosures') and immediately scopes the corpus (both chambers under the STOCK Act plus executive-branch OGE filings). It also distinguishes itself from the sibling list_members by naming it as the resolver for member_id.
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?
Gives concrete routing conditions: chamber='executive' for OGE/President filings, as_of for point-in-time reconstruction, updated_since for change polling, and next_cursor for pagination. It does not explicitly say when NOT to use this tool or name alternative search siblings, so it stops short of full when/when-not guidance.
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.
5 tool updates
- First observed
get_coverage - First observed
get_disclosure_history - First observed
get_status - First observed
list_members - First observed
search_disclosures
Related MCP Connectors
Read-only U.S. congressional stock trade disclosures (STOCK Act filings), parsed and source-linked.
Stock trades of U.S. Congress & executive-branch officials, with conflict flags. Read-only.
US Congress stock trades and financial disclosures by member, ticker, or date, hosted MCP.
Live feed of insider, Congress and White House trades from public filings. Information only.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables querying US congressional and executive stock trading disclosures, including recent trades, top movers, and individual member activity, with filters and performance analytics.453 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables querying and analysis of US congressional stock-trade disclosures from capitoltrades.com, providing tools for filtering, ranking, and exporting trade data.1-
- FlicenseNot gradedqualityCmaintenanceEnables querying U.S. politician stock trades from public disclosures, running backtests, and generating daily briefings via MCP tools.11-
- FlicenseNot gradedqualityAmaintenanceQuery normalized U.S. House and Senate STOCK Act disclosures, member trading histories, and aggregate trading statistics through MCP.-
Glama MCP Gateway
Add one secure layer between your agents and this server.