@cyanheads/congressgov-mcp-server 0.7.0 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +22 -15
- package/CLAUDE.md +22 -15
- package/Dockerfile +2 -2
- package/README.md +211 -92
- package/changelog/0.1.x/0.1.0.md +36 -0
- package/changelog/0.2.x/0.2.0.md +26 -0
- package/changelog/0.2.x/0.2.1.md +16 -0
- package/changelog/0.3.x/0.3.0.md +26 -0
- package/changelog/0.3.x/0.3.1.md +14 -0
- package/changelog/0.3.x/0.3.10.md +15 -0
- package/changelog/0.3.x/0.3.11.md +18 -0
- package/changelog/0.3.x/0.3.12.md +15 -0
- package/changelog/0.3.x/0.3.13.md +20 -0
- package/changelog/0.3.x/0.3.14.md +30 -0
- package/changelog/0.3.x/0.3.15.md +28 -0
- package/changelog/0.3.x/0.3.16.md +34 -0
- package/changelog/0.3.x/0.3.17.md +28 -0
- package/changelog/0.3.x/0.3.18.md +18 -0
- package/changelog/0.3.x/0.3.19.md +36 -0
- package/changelog/0.3.x/0.3.2.md +12 -0
- package/changelog/0.3.x/0.3.20.md +22 -0
- package/changelog/0.3.x/0.3.21.md +15 -0
- package/changelog/0.3.x/0.3.22.md +29 -0
- package/changelog/0.3.x/0.3.23.md +25 -0
- package/changelog/0.3.x/0.3.24.md +20 -0
- package/changelog/0.3.x/0.3.25.md +12 -0
- package/changelog/0.3.x/0.3.26.md +25 -0
- package/changelog/0.3.x/0.3.27.md +16 -0
- package/changelog/0.3.x/0.3.28.md +18 -0
- package/changelog/0.3.x/0.3.29.md +13 -0
- package/changelog/0.3.x/0.3.3.md +11 -0
- package/changelog/0.3.x/0.3.30.md +28 -0
- package/changelog/0.3.x/0.3.31.md +28 -0
- package/changelog/0.3.x/0.3.32.md +21 -0
- package/changelog/0.3.x/0.3.4.md +18 -0
- package/changelog/0.3.x/0.3.5.md +23 -0
- package/changelog/0.3.x/0.3.6.md +10 -0
- package/changelog/0.3.x/0.3.7.md +15 -0
- package/changelog/0.3.x/0.3.8.md +29 -0
- package/changelog/0.3.x/0.3.9.md +21 -0
- package/changelog/0.4.x/0.4.0.md +28 -0
- package/changelog/0.4.x/0.4.1.md +17 -0
- package/changelog/0.4.x/0.4.2.md +39 -0
- package/changelog/0.4.x/0.4.3.md +16 -0
- package/changelog/0.5.x/0.5.0.md +22 -0
- package/changelog/0.5.x/0.5.1.md +16 -0
- package/changelog/0.5.x/0.5.2.md +29 -0
- package/changelog/0.6.x/0.6.0.md +24 -0
- package/changelog/0.7.x/0.7.0.md +13 -0
- package/changelog/0.7.x/0.7.1.md +35 -0
- package/changelog/template.md +151 -0
- package/dist/config/server-config.d.ts +3 -3
- package/dist/config/server-config.d.ts.map +1 -1
- package/dist/config/server-config.js +6 -3
- package/dist/config/server-config.js.map +1 -1
- package/dist/index.js +23 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/bill-lookup.tool.d.ts +7 -0
- package/dist/mcp-server/tools/definitions/bill-lookup.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/bill-lookup.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/bill-summaries.tool.d.ts +4 -0
- package/dist/mcp-server/tools/definitions/bill-summaries.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/bill-summaries.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/committee-lookup.tool.d.ts +4 -0
- package/dist/mcp-server/tools/definitions/committee-lookup.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/committee-lookup.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/committee-reports.tool.d.ts +7 -0
- package/dist/mcp-server/tools/definitions/committee-reports.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/committee-reports.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/crs-reports.tool.d.ts +4 -0
- package/dist/mcp-server/tools/definitions/crs-reports.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/crs-reports.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/daily-record.tool.d.ts +7 -0
- package/dist/mcp-server/tools/definitions/daily-record.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/daily-record.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/enacted-laws.tool.d.ts +4 -0
- package/dist/mcp-server/tools/definitions/enacted-laws.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/enacted-laws.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/member-lookup.tool.d.ts +4 -0
- package/dist/mcp-server/tools/definitions/member-lookup.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/member-lookup.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/roll-votes.tool.d.ts +4 -0
- package/dist/mcp-server/tools/definitions/roll-votes.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/roll-votes.tool.js +2 -2
- package/dist/mcp-server/tools/definitions/search-bills.tool.d.ts +1 -1
- package/dist/mcp-server/tools/definitions/search-bills.tool.js +3 -3
- package/dist/mcp-server/tools/definitions/senate-nominations.tool.d.ts +4 -0
- package/dist/mcp-server/tools/definitions/senate-nominations.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/senate-nominations.tool.js +2 -2
- package/dist/mcp-server/tools/tool-helpers.d.ts +7 -0
- package/dist/mcp-server/tools/tool-helpers.d.ts.map +1 -1
- package/dist/mcp-server/tools/tool-helpers.js +7 -0
- package/dist/mcp-server/tools/tool-helpers.js.map +1 -1
- package/dist/services/congress-api/congress-api-service.d.ts.map +1 -1
- package/dist/services/congress-api/congress-api-service.js +8 -11
- package/dist/services/congress-api/congress-api-service.js.map +1 -1
- package/dist/services/congress-documents/congress-documents-service.d.ts.map +1 -1
- package/dist/services/congress-documents/congress-documents-service.js +10 -9
- package/dist/services/congress-documents/congress-documents-service.js.map +1 -1
- package/dist/services/congress-mirror/congress-mirror-service.js +1 -1
- package/dist/services/congress-mirror/ingest.d.ts +1 -1
- package/dist/services/congress-mirror/types.d.ts +1 -1
- package/dist/services/senate-lis/senate-vote-service.d.ts.map +1 -1
- package/dist/services/senate-lis/senate-vote-service.js +9 -7
- package/dist/services/senate-lis/senate-vote-service.js.map +1 -1
- package/package.json +11 -9
- package/server.json +3 -3
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/congressgov-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/congressgov-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
@@ -27,9 +27,11 @@
|
|
|
27
27
|
|
|
28
28
|
---
|
|
29
29
|
|
|
30
|
-
##
|
|
30
|
+
## Overview
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
U.S. congressional data from the Congress.gov API v3 and the Senate's official vote feed — bills, enacted laws, members, committees, roll call votes, and presidential nominations. Browse legislative activity, read bill and report text, and track the Senate confirmation pipeline from any MCP client. Runs as a stdio process, a local Streamable HTTP server, or the public hosted endpoint above.
|
|
33
|
+
|
|
34
|
+
### Tools
|
|
33
35
|
|
|
34
36
|
| Tool | Description |
|
|
35
37
|
|:---|:---|
|
|
@@ -45,122 +47,188 @@ Eleven read-only tools for querying U.S. legislative data:
|
|
|
45
47
|
| `congressgov_daily_record` | Browse the daily Congressional Record — floor speeches, debates, and proceedings |
|
|
46
48
|
| `congressgov_search_bills` | Keyword-search bill titles and CRS summaries via a local full-text mirror (opt-in, off by default) |
|
|
47
49
|
|
|
48
|
-
###
|
|
50
|
+
### Resources
|
|
49
51
|
|
|
50
|
-
|
|
52
|
+
| Resource | Description |
|
|
53
|
+
|:---|:---|
|
|
54
|
+
| `congress://current` | Current congress number, session dates, chamber info |
|
|
55
|
+
| `congress://bill-types` | Reference table of valid bill type codes |
|
|
56
|
+
| `congress://member/{bioguideId}` | Member profile by bioguide ID |
|
|
57
|
+
| `congress://bill/{congress}/{billType}/{billNumber}` | Bill detail by congress, type, and number |
|
|
58
|
+
| `congress://committee/{committeeCode}` | Committee detail by committee code |
|
|
59
|
+
|
|
60
|
+
Bill, member, and committee data is also reachable through `congressgov_bill_lookup`, `congressgov_member_lookup`, and `congressgov_committee_lookup` (operation `get`) — many MCP clients are tool-only and never surface resources.
|
|
51
61
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
62
|
+
### Prompts
|
|
63
|
+
|
|
64
|
+
| Prompt | Description |
|
|
65
|
+
|:---|:---|
|
|
66
|
+
| `congressgov_bill_analysis` | Structured framework for analyzing a bill |
|
|
67
|
+
| `congressgov_legislative_research` | Research framework for a policy area across Congress |
|
|
68
|
+
|
|
69
|
+
## Capability reference
|
|
70
|
+
|
|
71
|
+
### `congressgov_bill_lookup` <sub>tool</sub>
|
|
72
|
+
|
|
73
|
+
- Operations: `list` (browse by congress/billType/date range — no keyword search), `get` (full detail), or drill into `actions`, `amendments`, `cosponsors`, `committees`, `subjects`, `summaries`, `text`, `titles`, `related`
|
|
74
|
+
- `list` defaults to `order='recent'` (newest update-date first); `limit` 1–250, `offset` pagination
|
|
75
|
+
- `content` reads a text version's actual document text: select the version with `textVersionIndex` (0-based, against `text`'s order), the window with `characterOffset`/`characterLimit` (1–100,000 chars, default 25,000), and follow `nextOffset` to walk a full bill
|
|
76
|
+
- Typed failures on `content`: `document_unavailable`, `format_unavailable`, `document_fetch_failed`, `document_too_large`, `offset_past_end`, alongside the shared `not_found` / `rate_limited` / `invalid_request` / `upstream_error` set
|
|
57
77
|
|
|
58
78
|
---
|
|
59
79
|
|
|
60
|
-
### `
|
|
80
|
+
### `congressgov_enacted_laws` <sub>tool</sub>
|
|
61
81
|
|
|
62
|
-
|
|
82
|
+
- `list` filters by congress and `lawType` (`pub` public laws, `priv` private) — the enactment-status filter `congressgov_bill_lookup` doesn't offer
|
|
83
|
+
- `get` returns the origin bill record; the law citation lives on the bill's `laws[]` array (e.g. `{"number":"118-2","type":"Public Law"}`)
|
|
84
|
+
- `lawNumber` accepts either the bare number (`90`) or the full `{congress}-{number}` citation a `list` row carries; a citation naming a different congress than the `congress` param is rejected rather than silently resolved
|
|
85
|
+
- `limit` 1–250, `offset` pagination for `list`
|
|
63
86
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
### `congressgov_member_lookup` <sub>tool</sub>
|
|
90
|
+
|
|
91
|
+
- No name search — `list` filters by `stateCode` (+ optional `district`, which requires `stateCode`), `congress`, and `currentMember`
|
|
92
|
+
- `get` returns the full profile by `bioguideId` (e.g. `P000197`); `sponsored`/`cosponsored` return that member's legislative portfolio
|
|
93
|
+
- `limit` 1–250, `offset` pagination
|
|
67
94
|
|
|
68
95
|
---
|
|
69
96
|
|
|
70
|
-
### `congressgov_committee_lookup`
|
|
97
|
+
### `congressgov_committee_lookup` <sub>tool</sub>
|
|
98
|
+
|
|
99
|
+
- Committee codes are chamber-prefix (`h`/`s`/`j`) + abbreviation + 2-digit number (e.g. `hsju00`); `get` and sub-resources infer chamber from the prefix, or accept an explicit override
|
|
100
|
+
- `committeeCode` also accepts a committee name, resolved automatically (all-token match, then a bigram-similarity fallback labeled `approximate: true`) against the full cross-chamber roster
|
|
101
|
+
- `list` with `filter` name-matches the same way, paging past the 250-row upstream cap to search the complete roster before filtering
|
|
102
|
+
- `bills` sub-resource defaults to `order='recent'` (newest update-date first, computed client-side since upstream ignores sort); rows carry no titles — chain `congressgov_bill_lookup get` per row
|
|
103
|
+
- `nominations` sub-resource is Senate-only
|
|
104
|
+
|
|
105
|
+
---
|
|
71
106
|
|
|
72
|
-
|
|
107
|
+
### `congressgov_roll_votes` <sub>tool</sub>
|
|
73
108
|
|
|
74
|
-
-
|
|
75
|
-
-
|
|
76
|
-
-
|
|
77
|
-
-
|
|
109
|
+
- `chamber` is `house` (default, Congress.gov API) or `senate` (the Senate's official LIS XML feed — the API exposes no Senate votes)
|
|
110
|
+
- `list` browses by congress + session (1 or 2), newest-first by default (computed client-side for strict ordering); `get` returns tallies and party breakdown, `members` returns each member's recorded position
|
|
111
|
+
- Roll call numbers reset each session and are specific to one chamber
|
|
112
|
+
- `limit` 1–250, `offset` pagination for `list` and `members`
|
|
78
113
|
|
|
79
114
|
---
|
|
80
115
|
|
|
81
|
-
### `
|
|
116
|
+
### `congressgov_senate_nominations` <sub>tool</sub>
|
|
117
|
+
|
|
118
|
+
- Nominations use `PN` numbering; `list` browses by congress, `get` returns detail, `actions`/`committees`/`hearings` cover the confirmation pipeline, `nominees` returns individuals in a batch (requires `ordinal`)
|
|
119
|
+
- Multi-part parents (e.g. `PN851`) carry no activity of their own — sub-resources live on partitioned children (`851-1`, `851-2`, …); a bare-parent sub-resource call on such a nomination returns an enrichment notice pointing at the partitioned form
|
|
120
|
+
- `ordinal` is discovered from the nomination's `nominees` array via `get` first
|
|
121
|
+
|
|
122
|
+
---
|
|
82
123
|
|
|
83
|
-
|
|
124
|
+
### `congressgov_bill_summaries` <sub>tool</sub>
|
|
84
125
|
|
|
85
|
-
-
|
|
86
|
-
-
|
|
87
|
-
-
|
|
88
|
-
- `members` returns each member's recorded position
|
|
126
|
+
- Filters by `congress` and `billType` (requires `congress`); date filters apply to the CRS summary's update time, not the bill's action date
|
|
127
|
+
- Defaults to summaries updated in the last 7 days when neither date bound is supplied
|
|
128
|
+
- For summaries of one specific bill, use `congressgov_bill_lookup` with `operation='summaries'` instead
|
|
89
129
|
|
|
90
130
|
---
|
|
91
131
|
|
|
92
|
-
### `
|
|
132
|
+
### `congressgov_crs_reports` <sub>tool</sub>
|
|
133
|
+
|
|
134
|
+
- Report IDs use letter-number codes (e.g. `R40097`, `RL33612`, `IF12345`)
|
|
135
|
+
- `list` browses the catalog; `get` returns full detail (authors, topics, summary, download formats) by `reportNumber`
|
|
136
|
+
- `limit` 1–250, `offset` pagination for `list`
|
|
93
137
|
|
|
94
|
-
|
|
138
|
+
---
|
|
95
139
|
|
|
96
|
-
|
|
97
|
-
|
|
140
|
+
### `congressgov_committee_reports` <sub>tool</sub>
|
|
141
|
+
|
|
142
|
+
- Report types: `hrpt` (House), `srpt` (Senate), `erpt` (Executive); `list` browses by congress + optional `reportType`, `get` returns citation/title/committees/associated bill
|
|
143
|
+
- `text` lists each format's `{type, url}` link (report formats arrive one per entry, unlike bill text versions); `content` then reads the actual text, a bounded character window at a time via `characterOffset`/`characterLimit` (1–100,000 chars, default 25,000)
|
|
144
|
+
- Typed failures on `content`: `document_unavailable`, `format_unavailable`, `document_fetch_failed`, `document_too_large`, `offset_past_end`
|
|
98
145
|
|
|
99
146
|
---
|
|
100
147
|
|
|
101
|
-
### `
|
|
148
|
+
### `congressgov_daily_record` <sub>tool</sub>
|
|
149
|
+
|
|
150
|
+
- Hierarchical navigation: `list` (volumes) → `issues` (within a volume) → `articles` (within an issue)
|
|
151
|
+
- `content` reads one article's text, selected by `articleIndex` (0-based) and bounded by `characterOffset`/`characterLimit`; the Congressional Record publishes Formatted Text and PDF only (no XML)
|
|
152
|
+
- Typed failures on `content`: `document_unavailable`, `format_unavailable`, `document_fetch_failed`, `document_too_large`, `offset_past_end`
|
|
102
153
|
|
|
103
|
-
|
|
154
|
+
---
|
|
104
155
|
|
|
105
|
-
|
|
106
|
-
|
|
156
|
+
### `congressgov_search_bills` <sub>tool</sub>
|
|
157
|
+
|
|
158
|
+
- **Opt-in:** off by default and absent from `tools/list` entirely until `CONGRESS_MIRROR_ENABLED=true`
|
|
159
|
+
- Keyword-searches a local SQLite FTS5 mirror of bill titles + CRS summaries — the discovery path the Congress.gov API itself lacks; policy area and full bill text are not indexed
|
|
160
|
+
- Narrows with `congress`, `billType`, and `originChamber`; returns BM25-ranked matches with each bill's derived id, ready for a follow-up `congressgov_bill_lookup` call
|
|
161
|
+
- With the flag set but the index not yet built (`bun run mirror:init`), the tool answers with an empty result and a build-the-index notice instead of an error
|
|
162
|
+
- `limit` 1–100 (a narrower cap than the other tools' 1–250), `offset` pagination
|
|
107
163
|
|
|
108
164
|
---
|
|
109
165
|
|
|
110
|
-
### `
|
|
166
|
+
### `congress://current` <sub>resource</sub>
|
|
111
167
|
|
|
112
|
-
|
|
168
|
+
- Current congress number, session dates, and chamber info — baseline context for other queries
|
|
169
|
+
- Cached publicly for 1 hour
|
|
113
170
|
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
### `congress://bill-types` <sub>resource</sub>
|
|
174
|
+
|
|
175
|
+
- Static reference table of the 8 valid bill type codes (`hr`, `s`, `hjres`, `sjres`, `hconres`, `sconres`, `hres`, `sres`) with chamber and an example citation
|
|
176
|
+
- Cached publicly for 24 hours — fixed by chamber rules, not fetched upstream
|
|
117
177
|
|
|
118
178
|
---
|
|
119
179
|
|
|
120
|
-
### `
|
|
180
|
+
### `congress://member/{bioguideId}` <sub>resource</sub>
|
|
121
181
|
|
|
122
|
-
|
|
182
|
+
- `bioguideId` must match one uppercase letter followed by 6 digits (e.g. `P000197`)
|
|
183
|
+
- Returns the member profile — name, state, party, terms, leadership, office, legislation counts
|
|
123
184
|
|
|
124
|
-
|
|
125
|
-
- Narrow with `congress`, `billType`, and `originChamber` filters
|
|
126
|
-
- Returns BM25-ranked matches with each bill's derived id, ready for a follow-up `congressgov_bill_lookup` call
|
|
185
|
+
---
|
|
127
186
|
|
|
128
|
-
|
|
187
|
+
### `congress://bill/{congress}/{billType}/{billNumber}` <sub>resource</sub>
|
|
129
188
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
| `congress://current` | Current congress number, session dates, chamber info |
|
|
133
|
-
| `congress://bill-types` | Reference table of valid bill type codes |
|
|
134
|
-
| `congress://member/{bioguideId}` | Member profile by bioguide ID |
|
|
135
|
-
| `congress://bill/{congress}/{billType}/{billNumber}` | Bill detail by congress, type, and number |
|
|
136
|
-
| `congress://committee/{committeeCode}` | Committee detail by committee code |
|
|
189
|
+
- `congress` and `billNumber` must be positive integers; `billType` must be a valid bill type code
|
|
190
|
+
- Returns bill detail — sponsor, status, policy area, committees, latest action
|
|
137
191
|
|
|
138
|
-
|
|
192
|
+
---
|
|
139
193
|
|
|
140
|
-
|
|
141
|
-
|:---|:---|
|
|
142
|
-
| `congressgov_bill_analysis` | Structured framework for analyzing a bill |
|
|
143
|
-
| `congressgov_legislative_research` | Research framework for a policy area across Congress |
|
|
194
|
+
### `congress://committee/{committeeCode}` <sub>resource</sub>
|
|
144
195
|
|
|
145
|
-
|
|
196
|
+
- `committeeCode` must match `h`/`s`/`j` followed by 3–8 lowercase alphanumeric characters (e.g. `hsju00`); chamber is inferred from the first letter
|
|
197
|
+
- Returns committee detail — name, chamber, subcommittees, history, legislation counts
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
201
|
+
### `congressgov_bill_analysis` <sub>prompt</sub>
|
|
202
|
+
|
|
203
|
+
- Arguments: `congress`, `billType`, `billNumber` — all required strings
|
|
204
|
+
- Returns one user message framing a structured analysis (summary, sponsors, committee referrals, action timeline, related legislation, policy implications, outlook) and naming which tools to call for each section
|
|
205
|
+
|
|
206
|
+
---
|
|
146
207
|
|
|
147
|
-
|
|
208
|
+
### `congressgov_legislative_research` <sub>prompt</sub>
|
|
148
209
|
|
|
149
|
-
-
|
|
150
|
-
-
|
|
151
|
-
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
210
|
+
- Arguments: `topic` required; `congress` optional (defaults to the current congress)
|
|
211
|
+
- The discovery plan is configuration-aware: with `CONGRESS_MIRROR_ENABLED` it opens with `congressgov_search_bills`; without it, it asks for a seed (a bill, member, committee, or CRS report id) since no registered tool accepts a topic string
|
|
212
|
+
- Synthesizes findings into landscape, key players, substance, recent activity, and outlook
|
|
213
|
+
|
|
214
|
+
## Features
|
|
215
|
+
|
|
216
|
+
Built on [`@cyanheads/mcp-ts-core`](https://github.com/cyanheads/mcp-ts-core): stdio and Streamable HTTP transports, pluggable auth (`none` / `jwt` / `oauth`), swappable storage (`in-memory`, `filesystem`, `Supabase`, `Cloudflare KV/R2/D1`), structured logging with optional OpenTelemetry tracing.
|
|
155
217
|
|
|
156
218
|
Congress.gov-specific:
|
|
157
219
|
|
|
158
|
-
- Type-safe client for the Congress.gov REST API v3
|
|
220
|
+
- Type-safe client for the Congress.gov REST API v3, plus a second client for the Senate's official LIS XML feed (`fast-xml-parser`) backing Senate roll votes
|
|
159
221
|
- Optional API key from [api.data.gov](https://api.data.gov/signup/) — defaults to `DEMO_KEY` (30 req/hr); own key gets 5,000 req/hr
|
|
160
|
-
-
|
|
161
|
-
-
|
|
222
|
+
- Bounded document-text retrieval for bill text, committee reports, and Congressional Record articles — a 25 MB fetch ceiling, 30s deadline, and a `www.congress.gov` host allowlist
|
|
223
|
+
- Opt-in local SQLite FTS5 mirror (`CONGRESS_MIRROR_ENABLED`) adds keyword search over bill titles and CRS summaries, the one discovery path the API itself lacks
|
|
162
224
|
- All tools are read-only and idempotent
|
|
163
225
|
|
|
226
|
+
Agent-friendly output:
|
|
227
|
+
|
|
228
|
+
- Effective-query echo and total-count enrichment on every browse/list operation, plus a notice when a query resolves to zero matches or an offset runs past the end
|
|
229
|
+
- Character-exact document windows — `content` operations return `offset`/`nextOffset` so walking a multi-megabyte bill or report never skips or repeats a character
|
|
230
|
+
- Typed failure reasons on document reads (`document_unavailable`, `format_unavailable`, `document_too_large`, `offset_past_end`, …) alongside the shared upstream-error set, each resolved to a recovery hint
|
|
231
|
+
|
|
164
232
|
## Getting started
|
|
165
233
|
|
|
166
234
|
### Public Hosted Instance
|
|
@@ -190,6 +258,8 @@ Add the following to your MCP client configuration file.
|
|
|
190
258
|
"command": "bunx",
|
|
191
259
|
"args": ["@cyanheads/congressgov-mcp-server@latest"],
|
|
192
260
|
"env": {
|
|
261
|
+
"MCP_TRANSPORT_TYPE": "stdio",
|
|
262
|
+
"MCP_LOG_LEVEL": "info",
|
|
193
263
|
"CONGRESS_API_KEY": "your-api-key"
|
|
194
264
|
}
|
|
195
265
|
}
|
|
@@ -207,6 +277,8 @@ Or with npx (no Bun required):
|
|
|
207
277
|
"command": "npx",
|
|
208
278
|
"args": ["-y", "@cyanheads/congressgov-mcp-server@latest"],
|
|
209
279
|
"env": {
|
|
280
|
+
"MCP_TRANSPORT_TYPE": "stdio",
|
|
281
|
+
"MCP_LOG_LEVEL": "info",
|
|
210
282
|
"CONGRESS_API_KEY": "your-api-key"
|
|
211
283
|
}
|
|
212
284
|
}
|
|
@@ -214,11 +286,37 @@ Or with npx (no Bun required):
|
|
|
214
286
|
}
|
|
215
287
|
```
|
|
216
288
|
|
|
289
|
+
Or with Docker:
|
|
290
|
+
|
|
291
|
+
```json
|
|
292
|
+
{
|
|
293
|
+
"mcpServers": {
|
|
294
|
+
"congressgov-mcp-server": {
|
|
295
|
+
"type": "stdio",
|
|
296
|
+
"command": "docker",
|
|
297
|
+
"args": [
|
|
298
|
+
"run", "-i", "--rm",
|
|
299
|
+
"-e", "MCP_TRANSPORT_TYPE=stdio",
|
|
300
|
+
"-e", "CONGRESS_API_KEY=your-api-key",
|
|
301
|
+
"ghcr.io/cyanheads/congressgov-mcp-server:latest"
|
|
302
|
+
]
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
```
|
|
307
|
+
|
|
217
308
|
Get a free API key at [api.data.gov/signup](https://api.data.gov/signup/) for 5,000 req/hr. Without a key the server falls back to `DEMO_KEY` (30 req/hr).
|
|
218
309
|
|
|
310
|
+
For Streamable HTTP, set the transport and start the server:
|
|
311
|
+
|
|
312
|
+
```sh
|
|
313
|
+
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 CONGRESS_API_KEY=your-api-key bun run start:http
|
|
314
|
+
# Server listens at http://localhost:3010/mcp
|
|
315
|
+
```
|
|
316
|
+
|
|
219
317
|
### Prerequisites
|
|
220
318
|
|
|
221
|
-
- [Bun v1.
|
|
319
|
+
- [Bun v1.4.0](https://bun.sh/) or higher (or Node.js v24+).
|
|
222
320
|
|
|
223
321
|
### Installation
|
|
224
322
|
|
|
@@ -240,22 +338,33 @@ cd congressgov-mcp-server
|
|
|
240
338
|
bun install
|
|
241
339
|
```
|
|
242
340
|
|
|
243
|
-
|
|
341
|
+
4. **Configure environment:**
|
|
244
342
|
|
|
245
|
-
|
|
343
|
+
```sh
|
|
344
|
+
cp .env.example .env
|
|
345
|
+
# edit .env and set required vars
|
|
346
|
+
```
|
|
347
|
+
|
|
348
|
+
## Configuration
|
|
246
349
|
|
|
247
350
|
| Variable | Description | Default |
|
|
248
351
|
|:---|:---|:---|
|
|
249
|
-
| `CONGRESS_API_KEY` |
|
|
250
|
-
| `CONGRESS_API_BASE_URL` | Congress.gov API base URL | `https://api.congress.gov/v3` |
|
|
251
|
-
| `
|
|
252
|
-
| `
|
|
253
|
-
| `
|
|
254
|
-
| `
|
|
255
|
-
| `
|
|
352
|
+
| `CONGRESS_API_KEY` | API key from [api.data.gov](https://api.data.gov/signup/). Omit to use `DEMO_KEY` (30 req/hr); own key: 5,000 req/hr. | `DEMO_KEY` |
|
|
353
|
+
| `CONGRESS_API_BASE_URL` | Congress.gov API base URL. | `https://api.congress.gov/v3` |
|
|
354
|
+
| `CONGRESS_MIRROR_ENABLED` | Enable the local bill search mirror and the `congressgov_search_bills` tool. | `false` |
|
|
355
|
+
| `CONGRESS_MIRROR_PATH` | Filesystem path to the SQLite mirror index. | `.mirror/bills.sqlite3` |
|
|
356
|
+
| `CONGRESS_MIRROR_REFRESH_CRON` | Cron schedule for the in-process mirror refresh (HTTP transport only). Unset runs `mirror:refresh` manually. | — |
|
|
357
|
+
| `CONGRESS_MIRROR_CONGRESSES` | Comma-separated congress numbers to mirror (e.g. `118,119`). | current congress + 1 prior |
|
|
358
|
+
| `MCP_TRANSPORT_TYPE` | Transport: `stdio` or `http`. | `stdio` |
|
|
359
|
+
| `MCP_HTTP_PORT` | HTTP server port. | `3010` |
|
|
360
|
+
| `MCP_AUTH_MODE` | Authentication: `none`, `jwt`, or `oauth`. | `none` |
|
|
361
|
+
| `MCP_SESSION_MODE` | HTTP session mode: `auto`, `stateful`, or `stateless`; `auto` resolves to `stateful`. | `stateless` |
|
|
362
|
+
| `MCP_LOG_LEVEL` | Log level (`debug`, `info`, `notice`, `warning`, `error`, etc.). | `info` |
|
|
256
363
|
| `LOGS_DIR` | Directory for log files (Node.js only). | `<project-root>/logs` |
|
|
257
|
-
| `STORAGE_PROVIDER_TYPE` | Storage backend | `in-memory` |
|
|
258
|
-
| `OTEL_ENABLED` | Enable [OpenTelemetry instrumentation](https://github.com/cyanheads/mcp-ts-core/tree/main/docs/telemetry) (spans, metrics, completion logs) | `false` |
|
|
364
|
+
| `STORAGE_PROVIDER_TYPE` | Storage backend. | `in-memory` |
|
|
365
|
+
| `OTEL_ENABLED` | Enable [OpenTelemetry instrumentation](https://github.com/cyanheads/mcp-ts-core/tree/main/docs/telemetry) (spans, metrics, completion logs). | `false` |
|
|
366
|
+
|
|
367
|
+
See [`.env.example`](./.env.example) for the full list of optional overrides.
|
|
259
368
|
|
|
260
369
|
## Running the server
|
|
261
370
|
|
|
@@ -269,27 +378,36 @@ All configuration is validated at startup via Zod schemas in `src/config/server-
|
|
|
269
378
|
```
|
|
270
379
|
|
|
271
380
|
- **Run checks and tests:**
|
|
381
|
+
|
|
272
382
|
```sh
|
|
273
|
-
bun run devcheck
|
|
274
|
-
bun run test
|
|
383
|
+
bun run devcheck # Lint, format, typecheck, security
|
|
384
|
+
bun run test # Vitest test suite
|
|
385
|
+
bun run lint:mcp # Validate MCP definitions against spec
|
|
275
386
|
```
|
|
276
387
|
|
|
277
388
|
### Docker
|
|
278
389
|
|
|
279
390
|
```sh
|
|
280
391
|
docker build -t congressgov-mcp-server .
|
|
281
|
-
docker run -e CONGRESS_API_KEY=your-api-key -p 3010:3010 congressgov-mcp-server
|
|
392
|
+
docker run --rm -e CONGRESS_API_KEY=your-api-key -p 3010:3010 congressgov-mcp-server
|
|
282
393
|
```
|
|
283
394
|
|
|
395
|
+
The Dockerfile defaults to HTTP transport, stateless session mode, and logs to `/var/log/congressgov-mcp-server`. OpenTelemetry peer dependencies are installed by default — build with `--build-arg OTEL_ENABLED=false` to omit them.
|
|
396
|
+
|
|
284
397
|
## Project structure
|
|
285
398
|
|
|
286
399
|
| Directory | Purpose |
|
|
287
400
|
|:---|:---|
|
|
288
|
-
| `src/
|
|
289
|
-
| `src/mcp-server/resources/definitions/` | Resource definitions. Congress, bill, member, and committee resources. |
|
|
290
|
-
| `src/mcp-server/prompts/definitions/` | Prompt definitions. Bill analysis and legislative research prompts. |
|
|
291
|
-
| `src/services/congress-api/` | Congress.gov API client — auth, pagination, rate limiting. |
|
|
401
|
+
| `src/index.ts` | `createApp()` entry point — registers tools/resources/prompts and inits services. |
|
|
292
402
|
| `src/config/` | Server-specific environment variable parsing and validation with Zod. |
|
|
403
|
+
| `src/mcp-server/tools/definitions/` | Tool definitions (`*.tool.ts`) — eleven Congress.gov tools. |
|
|
404
|
+
| `src/mcp-server/resources/definitions/` | Resource definitions (`*.resource.ts`) — congress, bill, member, and committee resources. |
|
|
405
|
+
| `src/mcp-server/prompts/definitions/` | Prompt definitions (`*.prompt.ts`) — bill analysis and legislative research. |
|
|
406
|
+
| `src/services/congress-api/` | Congress.gov API client — auth, pagination, rate limiting. |
|
|
407
|
+
| `src/services/congress-documents/` | Bounded document-text fetch — host allowlist, byte ceiling, character window. |
|
|
408
|
+
| `src/services/congress-mirror/` | Local SQLite FTS5 bill-search mirror — ingest, normalize, schema. |
|
|
409
|
+
| `src/services/senate-lis/` | Senate LIS XML client for Senate roll call votes. |
|
|
410
|
+
| `scripts/` | Mirror lifecycle CLI scripts (`mirror:init` / `mirror:refresh` / `mirror:verify`). |
|
|
293
411
|
| `tests/` | Unit and integration tests, mirroring the `src/` structure. |
|
|
294
412
|
|
|
295
413
|
## Development guide
|
|
@@ -297,12 +415,13 @@ docker run -e CONGRESS_API_KEY=your-api-key -p 3010:3010 congressgov-mcp-server
|
|
|
297
415
|
See [`CLAUDE.md`](./CLAUDE.md) for development guidelines and architectural rules. The short version:
|
|
298
416
|
|
|
299
417
|
- Handlers throw, framework catches — no `try/catch` in tool logic
|
|
300
|
-
- Use `ctx.log` for logging, `ctx.state` for storage
|
|
301
|
-
- All tools are read-only with `readOnlyHint: true` and `idempotentHint: true`
|
|
418
|
+
- Use `ctx.log` for request-scoped logging, `ctx.state` for tenant-scoped storage
|
|
419
|
+
- All tools are read-only, with `readOnlyHint: true` and `idempotentHint: true` annotations
|
|
420
|
+
- Wrap external API calls: validate raw → normalize to a domain type → return the output schema; never fabricate missing fields
|
|
302
421
|
|
|
303
422
|
## Contributing
|
|
304
423
|
|
|
305
|
-
Issues
|
|
424
|
+
Issues are welcome. Run checks and tests before submitting:
|
|
306
425
|
|
|
307
426
|
```sh
|
|
308
427
|
bun run devcheck
|
|
@@ -311,4 +430,4 @@ bun run test
|
|
|
311
430
|
|
|
312
431
|
## License
|
|
313
432
|
|
|
314
|
-
|
|
433
|
+
Apache-2.0 — see [LICENSE](./LICENSE) for details.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Initial release — MCP server wrapping Congress.gov API v3 with 10 tools, 5 resources, and 2 prompts for U.S. legislative data
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.1.0 — 2026-03-24
|
|
7
|
+
|
|
8
|
+
Initial release. MCP server wrapping the Congress.gov API v3 — the official machine-readable interface to U.S. legislative data maintained by the Library of Congress.
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **10 read-only tools** for querying legislative data:
|
|
13
|
+
- `congressgov_bill_lookup` — browse, filter, and retrieve bill data (actions, sponsors, summaries, text, related bills)
|
|
14
|
+
- `congressgov_enacted_laws` — browse enacted public and private laws by congress
|
|
15
|
+
- `congressgov_member_lookup` — discover members by state/district/congress, retrieve legislative portfolios
|
|
16
|
+
- `congressgov_committee_lookup` — browse committees and retrieve legislation, reports, nominations
|
|
17
|
+
- `congressgov_roll_votes` — retrieve House roll call votes and member voting positions
|
|
18
|
+
- `congressgov_senate_nominations` — browse presidential nominations, track Senate confirmation pipeline
|
|
19
|
+
- `congressgov_bill_summaries` — browse recent CRS bill summaries
|
|
20
|
+
- `congressgov_crs_reports` — browse and retrieve nonpartisan CRS policy analysis reports
|
|
21
|
+
- `congressgov_committee_reports` — browse and retrieve committee reports accompanying legislation
|
|
22
|
+
- `congressgov_daily_record` — browse daily Congressional Record (floor speeches, debates, proceedings)
|
|
23
|
+
- **5 resources** for direct data access:
|
|
24
|
+
- `congress://current` — current congress number, session dates, chamber info
|
|
25
|
+
- `congress://bill-types` — reference table of valid bill type codes
|
|
26
|
+
- `congress://member/{bioguideId}` — member profile
|
|
27
|
+
- `congress://bill/{congress}/{billType}/{billNumber}` — bill detail
|
|
28
|
+
- `congress://committee/{committeeCode}` — committee detail
|
|
29
|
+
- **2 prompt templates** for structured analysis:
|
|
30
|
+
- `congressgov_bill_analysis` — framework for analyzing a bill
|
|
31
|
+
- `congressgov_legislative_research` — research framework for a policy area across Congress
|
|
32
|
+
- **Congress API service** with authentication, pagination, rate limiting, and response normalization
|
|
33
|
+
- **Server configuration** via `CONGRESS_API_KEY` env var (free key from api.data.gov)
|
|
34
|
+
- Dual transport support: stdio and streamable HTTP
|
|
35
|
+
- Docker support
|
|
36
|
+
- Built on `@cyanheads/mcp-ts-core` framework
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: API response key corrections across four endpoints, getVoteMembers + getNominee service methods, dedicated members/nominees tool operations
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.0 — 2026-03-24
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- Corrected API response keys for laws (`laws` → `bills`), House votes (`houseVotes` → `houseRollCallVotes`), committee reports (`committeeReports` → `reports`), and CRS reports endpoint path (`/crs-report` → `/crsreport`)
|
|
11
|
+
- Handled array-wrapped responses from committee report detail endpoint
|
|
12
|
+
- Added nested array unwrapping in `fetchList` for endpoints that nest arrays inside objects (e.g. committee-bills)
|
|
13
|
+
- Fixed committee bills sub-resource list key (`bills` → `committee-bills`)
|
|
14
|
+
- Stripped milliseconds from default ISO date in bill summaries for API compatibility
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- `getVoteMembers()` service method — dedicated endpoint for individual member voting positions
|
|
19
|
+
- `getNominee()` service method — individual nominee lookup by ordinal within a nomination
|
|
20
|
+
- Separate 'members' operation path in `congressgov_roll_votes` using the new vote members endpoint
|
|
21
|
+
- Separate 'nominees' operation in `congressgov_senate_nominations` with ordinal requirement and actionable error message
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- Added missing `idempotentHint: true` annotation to all tool definitions
|
|
26
|
+
- Updated dev dependencies: `@biomejs/biome` 2.4.7→2.4.8, `tsx` 4.19.0→4.21.0, `vitest` 4.1.0→4.1.1
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Full test suite (10 tool + 5 resource + 2 prompt tests + service), tree.md refresh
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.2.1 — 2026-03-24
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- Full test suite: 10 tool tests, 5 resource tests, 2 prompt tests, and congress-api-service tests using `createMockContext` and Vitest
|
|
11
|
+
- Updated `docs/tree.md` to reflect new `tests/` directory structure
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- Operator precedence parentheses in `congress-api-service.ts` for nullish coalescing expressions
|
|
16
|
+
- Formatting in `senate-nominations.tool.ts`
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Scoped package rename to @cyanheads/congressgov-mcp-server, TS 5.9 → 6.0, pagination improvements, format-helpers.ts, README overhaul
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.3.0 — 2026-03-24
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
|
|
10
|
+
- Renamed package to `@cyanheads/congressgov-mcp-server` (scoped under `@cyanheads`)
|
|
11
|
+
- Bumped TypeScript from `^5.9.3` to `^6.0.2`
|
|
12
|
+
- `getDailyIssues` now uses `fetchList` with full pagination support
|
|
13
|
+
- `getMemberLegislation` simplified to return `fetchList` result directly
|
|
14
|
+
- Removed redundant duplicate key from `fetchList` return shape
|
|
15
|
+
- README overhaul: scoped package name, npm badge, npx/Docker/HTTP config examples, cleaner table formatting
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- `format-helpers.ts` — shared `formatResult` formatter for all tool output (readable text with HTML stripping, list summarization, pagination headers)
|
|
20
|
+
- All 10 tools now use `format: formatResult` for structured text output
|
|
21
|
+
- `notFound` error for missing committee reports instead of returning empty objects
|
|
22
|
+
- Detection of Congress.gov API 500-as-404 responses (structured JSON error bodies vs. real outages)
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- Daily record `issues` operation now passes `limit` and `offset` params through to the API
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: 5xx retry with exponential backoff (3 attempts, 1s/2s/4s), npm badge URL fix
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.3.1 — 2026-03-24
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
|
|
10
|
+
- Added retry with exponential backoff for 5xx API errors (3 attempts with 1s/2s/4s delays)
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- npm badge URL now points to scoped package `@cyanheads/congressgov-mcp-server`
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: New `order` input on committee_lookup bills sub-resource, core 0.3.5 → 0.3.7 bump, tool description cleanup
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.3.10 — 2026-04-19
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- Added an `order` input to `congressgov_committee_lookup` for the `bills` sub-resource (`'recent'` default, `'oldest'` alternative). `'recent'` surfaces newest-activity bills directly — the tool handles the count probe + tail fetch internally so callers no longer need the `offset = count - limit` workaround
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- Bumped `@cyanheads/mcp-ts-core` from `^0.3.5` to `^0.3.7`
|
|
15
|
+
- Cleaned tool descriptions — removed cross-references to sibling tools and resource URIs, and dropped internal API/implementation notes from `congressgov_bill_lookup`, `congressgov_bill_summaries`, `congressgov_committee_lookup`, `congressgov_enacted_laws`, and `congressgov_member_lookup`
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Security — API key moved from query string to X-Api-Key header (rotate keys); roll-votes members operation now paginates client-side; ordinal description clarified
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.3.11 — 2026-04-19
|
|
7
|
+
|
|
8
|
+
### Security
|
|
9
|
+
|
|
10
|
+
- Switched Congress.gov API auth from the `?api_key=` query parameter to the `X-Api-Key` header, so the key is no longer embedded in request URLs. Previously, upstream fetch failures (e.g., HTTP 500 on an unknown CRS report ID) surfaced the full URL — including the key — in the error message returned to clients. Rotate any key that was in use before this release
|
|
11
|
+
|
|
12
|
+
### Fixed
|
|
13
|
+
|
|
14
|
+
- Fixed `congressgov_roll_votes` `members` operation silently ignoring `limit` and `offset` — the `/house-vote/.../members` endpoint returns the full ~435-member list and does not honor upstream pagination, so the service now paginates the `results` array client-side and returns a `pagination: { count, nextOffset }` alongside the vote record
|
|
15
|
+
|
|
16
|
+
### Changed
|
|
17
|
+
|
|
18
|
+
- Clarified the `ordinal` parameter description on `congressgov_senate_nominations` — the value addresses a batch of nominees, not a single individual; the `nominees` operation returns every person in that batch
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Core 0.3.7 → 0.5.2 bump, four tools relaxed to passthrough output schemas for format-parity compliance, test fixup
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.3.12 — 2026-04-20
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
|
|
10
|
+
- Bumped `@cyanheads/mcp-ts-core` from `^0.3.7` to `^0.5.2`
|
|
11
|
+
- Simplified the output schemas on `congressgov_bill_lookup`, `congressgov_bill_summaries`, `congressgov_crs_reports`, and `congressgov_member_lookup` to `z.object({}).passthrough()`, aligning them with the other six tools in this server. The upstream Congress.gov API returns highly variable shapes across endpoint families, so the previously typed fields were aspirational documentation rather than a real contract — handler return values, rendered `content[]` markdown, and `structuredContent` payloads are unchanged. Only the advertised JSON Schema on `tools/list` is now looser for these four tools. This was also required to satisfy the new `format-parity` lint rule introduced in `@cyanheads/mcp-ts-core` 0.5.x; see [cyanheads/mcp-ts-core#37](https://github.com/cyanheads/mcp-ts-core/issues/37) for context on the tradeoff
|
|
12
|
+
|
|
13
|
+
### Fixed
|
|
14
|
+
|
|
15
|
+
- Corrected a stale assertion in `tests/services/congress-api/congress-api-service.test.ts` that still expected the API key to appear in the URL `?api_key=` query parameter; the service has sent it via the `X-Api-Key` header since 0.3.11 (see that release's Security note). The production auth path was already correct — only the test was out of date
|