@cyanheads/congressgov-mcp-server 0.7.0 → 0.7.2
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 +31 -19
- package/CLAUDE.md +31 -19
- package/Dockerfile +2 -2
- package/README.md +216 -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/0.7.x/0.7.2.md +20 -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 +12 -4
- package/dist/mcp-server/tools/definitions/bill-lookup.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/bill-lookup.tool.js +94 -3
- package/dist/mcp-server/tools/definitions/bill-lookup.tool.js.map +1 -1
- 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 +34 -6
- package/dist/mcp-server/tools/definitions/bill-summaries.tool.js.map +1 -1
- 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 +9 -2
- 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 +9 -2
- 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/format-helpers.d.ts.map +1 -1
- package/dist/mcp-server/tools/format-helpers.js +85 -30
- package/dist/mcp-server/tools/format-helpers.js.map +1 -1
- package/dist/mcp-server/tools/summary-window.d.ts +112 -0
- package/dist/mcp-server/tools/summary-window.d.ts.map +1 -0
- package/dist/mcp-server/tools/summary-window.js +182 -0
- package/dist/mcp-server/tools/summary-window.js.map +1 -0
- package/dist/mcp-server/tools/tool-helpers.d.ts +26 -2
- package/dist/mcp-server/tools/tool-helpers.d.ts.map +1 -1
- package/dist/mcp-server/tools/tool-helpers.js +26 -2
- 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-documents/extract-text-stream.js +1 -1
- package/dist/services/congress-documents/extract-text-stream.js.map +1 -1
- package/dist/services/congress-documents/extract-text.d.ts +0 -6
- package/dist/services/congress-documents/extract-text.d.ts.map +1 -1
- package/dist/services/congress-documents/extract-text.js +4 -37
- package/dist/services/congress-documents/extract-text.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/normalize.d.ts +4 -1
- package/dist/services/congress-mirror/normalize.d.ts.map +1 -1
- package/dist/services/congress-mirror/normalize.js +8 -12
- package/dist/services/congress-mirror/normalize.js.map +1 -1
- package/dist/services/congress-mirror/types.d.ts +1 -1
- package/dist/services/senate-lis/parse.d.ts.map +1 -1
- package/dist/services/senate-lis/parse.js +74 -2
- package/dist/services/senate-lis/parse.js.map +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/dist/services/senate-lis/types.d.ts +8 -1
- package/dist/services/senate-lis/types.d.ts.map +1 -1
- package/dist/utils/character-references.d.ts +27 -0
- package/dist/utils/character-references.d.ts.map +1 -0
- package/dist/utils/character-references.js +60 -0
- package/dist/utils/character-references.js.map +1 -0
- package/package.json +11 -9
- package/server.json +3 -3
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Ten domain-specific markdown formatters replace the generic formatResult; core 0.1.29 → 0.2.3 bump; report-issue skills added
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.3.5 — 2026-03-28
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
|
|
10
|
+
- Rewrote tool output formatting — replaced generic `formatResult` with 10 domain-specific markdown formatters (`formatBills`, `formatMembers`, `formatSummaries`, `formatCommittees`, `formatCommitteeReports`, `formatCrsReports`, `formatDailyRecord`, `formatLaws`, `formatVotes`, `formatNominations`) for richer, more readable LLM output
|
|
11
|
+
- Bumped `@cyanheads/mcp-ts-core` from ^0.1.29 to ^0.2.3
|
|
12
|
+
- Updated `polish-docs-meta` skill to v1.2 — added GitHub repo metadata sync step and description propagation guidance
|
|
13
|
+
|
|
14
|
+
### Added
|
|
15
|
+
|
|
16
|
+
- `report-issue-framework` skill for filing bugs against `@cyanheads/mcp-ts-core`
|
|
17
|
+
- `report-issue-local` skill for filing bugs against this server's repo
|
|
18
|
+
- Security overrides for `brace-expansion` (>=2.0.3) and `path-to-regexp` (>=8.4.0)
|
|
19
|
+
- `LOGS_DIR` env var documented in README and skill references
|
|
20
|
+
|
|
21
|
+
### Removed
|
|
22
|
+
|
|
23
|
+
- `tsx` dev dependency (no longer needed)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Author metadata + funding links, core 0.2.8 → 0.2.10 bump, skill updates (add-tool v1.1, add-resource v1.1, design-mcp-server v2.1)
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.3.7 — 2026-03-30
|
|
7
|
+
|
|
8
|
+
### Changed
|
|
9
|
+
|
|
10
|
+
- Updated author metadata and added funding links (GitHub Sponsors, Buy Me a Coffee) in package.json
|
|
11
|
+
- Bumped `@cyanheads/mcp-ts-core` from ^0.2.8 to ^0.2.10
|
|
12
|
+
- Bumped `@biomejs/biome` from ^2.4.9 to ^2.4.10
|
|
13
|
+
- Updated `add-tool` skill to v1.1 — expanded `format()` template with content-complete rendering, added Tool Response Design section (partial success, empty results, error classification, operational metadata, context budget)
|
|
14
|
+
- Updated `add-resource` skill to v1.1 — added tool coverage guidance (resources invisible to tool-only clients)
|
|
15
|
+
- Updated `design-mcp-server` skill to v2.1 — live API probing, batch input design, error classification table, convenience shortcuts, tool-first surface design, service resilience planning
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: AGENTS.md for non-Claude agents, add-app-tool skill, shared schema helpers, core 0.2.10 → 0.3.5 bump, stricter tool schemas and service resilience improvements
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.3.8 — 2026-04-19
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
|
|
10
|
+
- Added `AGENTS.md` for non-Claude agents
|
|
11
|
+
- Added the `add-app-tool` skill for MCP Apps tool and UI resource scaffolding
|
|
12
|
+
- Added shared tool schema helpers in `src/mcp-server/tools/tool-helpers.ts`
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Bumped `@cyanheads/mcp-ts-core` from `^0.2.10` to `^0.3.5`
|
|
17
|
+
- Bumped `@biomejs/biome` from `^2.4.10` to `^2.4.12`, `@types/node` from `^25.5.0` to `^25.6.0`, `typescript` from `^6.0.2` to `^6.0.3`, and `vitest` from `^4.1.2` to `^4.1.4`
|
|
18
|
+
- Updated Congress.gov tool and resource outputs to use stricter schemas, preserve pagination metadata, and pass request context through service calls. Tools return only normalized fields (`data`/`pagination` for lists, `bill`/`member`/`committee`/etc. for details) — upstream envelopes are no longer duplicated in structured output
|
|
19
|
+
- Updated markdown formatters to surface upstream URLs and improve empty-field handling
|
|
20
|
+
- Updated `CongressApiService` to use framework retry and timeout utilities, and carry request context and abort signals through HTTP calls
|
|
21
|
+
- Updated project skills for direct `createApp()` registration guidance, external-service resilience, testing layout, field-test coverage, and devcheck expectations
|
|
22
|
+
- Dropped the `overrides` block for `brace-expansion` and `path-to-regexp` — upstream chains now resolve to patched versions and `bun audit` is clean without them
|
|
23
|
+
|
|
24
|
+
### Fixed
|
|
25
|
+
|
|
26
|
+
- Fixed `getLaw` returning an empty `law` field — Congress.gov returns the law endpoint payload under `bill`, not `law`, so the normalized field was always undefined. Added a service-level test asserting `result.law` is populated
|
|
27
|
+
- Fixed CRS report error handling to distinguish structured upstream "not found" responses from real service outages
|
|
28
|
+
- Fixed member lookup validation to reject ambiguous `congress` and location filters instead of silently dropping one
|
|
29
|
+
- Fixed the `CLAUDE.md` commands table to use `bun run test`
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: Fix list-rendering regressions across crs-reports, daily-record, roll-votes, bill actions, committee reports, and committee detail; bill summaries doc clarity; format-helpers regression tests
|
|
3
|
+
breaking: false
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 0.3.9 — 2026-04-19
|
|
7
|
+
|
|
8
|
+
### Fixed
|
|
9
|
+
|
|
10
|
+
- Fixed `congressgov_crs_reports` list rendering every entry as "Report number not available" — `renderCrsReportItem` now falls back to the API's `id` field (e.g., `R46991`) when `reportNumber` and `number` are absent, and also checks `publishDate` when `updateDate` is missing (closes #2)
|
|
11
|
+
- Fixed `congressgov_daily_record`, `congressgov_roll_votes`, `congressgov_bill_lookup` (actions sub-resource), and `congressgov_committee_reports` (text sub-resource) rendering every list entry as `"Item"` — added domain-specific renderers (`renderDailyRecordItem`, `renderRollVoteItem`, `renderBillActionItem`, `renderCommitteeReportTextItem`) that use the actual field shapes returned by Congress.gov (closes #2)
|
|
12
|
+
- Fixed `congressgov_committee_lookup` detail view hiding the committee name — `formatCommittees` now extracts the display name from `history[0].officialName` (with `libraryOfCongressName` fallback) and surfaces it as a top-level heading (closes #2)
|
|
13
|
+
|
|
14
|
+
### Changed
|
|
15
|
+
|
|
16
|
+
- Clarified `congressgov_bill_summaries` description and parameter docs — `fromDateTime`/`toDateTime` filter on the summary update time, not the bill action date. The list heading now shows both the bill's action date and the summary update date (closes #2)
|
|
17
|
+
- Documented ordering behavior on `congressgov_committee_lookup`'s `bills` sub-resource — results are ascending by update date and the upstream API does not honor a `sort` parameter; description now explains the `offset = count - limit` workaround for reaching recent activity (closes #2)
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- Added `tests/mcp-server/tools/format-helpers.test.ts` with extensive regression coverage for every renderer, using fixtures captured from live Congress.gov API responses
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "New congressgov_search_bills tool — keyword search over a local SQLite + FTS5 mirror of bill titles and CRS summaries, the discovery path the Congress.gov API lacks. Opt-in, off by default (CONGRESS_MIRROR_ENABLED); adds node-cron + optional better-sqlite3, four optional mirror env vars, and mirror:init/refresh/verify scripts."
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
agent-notes: |
|
|
6
|
+
The mirror and congressgov_search_bills are opt-in and off by default
|
|
7
|
+
(CONGRESS_MIRROR_ENABLED=false); until enabled the tool registers via
|
|
8
|
+
disabledTool() (visible but uncallable) and no existing tool changes. Even
|
|
9
|
+
when enabled, search returns results only after an out-of-band
|
|
10
|
+
`bun run mirror:init` builds the index — the mirror is never built on server
|
|
11
|
+
startup. Hosted deployments need a persistent volume at CONGRESS_MIRROR_PATH
|
|
12
|
+
(default .mirror/bills.sqlite3) to survive container recreates.
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
# 0.4.0 — 2026-06-30
|
|
16
|
+
|
|
17
|
+
## Added
|
|
18
|
+
|
|
19
|
+
- **`congressgov_search_bills`** — keyword search over bill titles and CRS summary text, the discovery path the Congress.gov API structurally lacks (it exposes no keyword search). Backed by a local SQLite + FTS5 mirror; returns BM25-ranked matches, each with the derived bill id (`congress/billType/billNumber`) for a follow-up `congressgov_bill_lookup` call and a truncated summary preview, narrowable by optional `congress`, `billType`, and `originChamber` filters. Opt-in and off by default — registered via `disabledTool()` (visible but uncallable) until `CONGRESS_MIRROR_ENABLED=true`, so no existing tool changes. ([#40](https://github.com/cyanheads/congressgov-mcp-server/issues/40))
|
|
20
|
+
- **`CongressMirrorService`** (`src/services/congress-mirror/`) — a local FTS5 mirror of bill title + CRS summary built on the framework `MirrorService`, ingesting through the existing `CongressApiService` (bill list + `/summaries`). No live-API fallback: a mirror that has not finished its initial build returns an empty result with a notice, not an error.
|
|
21
|
+
- **Mirror lifecycle scripts** — `mirror:init` (full out-of-band build), `mirror:refresh` (incremental re-scan from the last `updateDate` checkpoint), and `mirror:verify` (readiness + SQLite integrity check), sharing a `scripts/_mirror-context.ts` bootstrap. Under HTTP transport, `CONGRESS_MIRROR_REFRESH_CRON` schedules an in-process incremental refresh; the mirror is never built or refreshed on server startup.
|
|
22
|
+
- **Four optional mirror env vars** — `CONGRESS_MIRROR_ENABLED` (default `false`), `CONGRESS_MIRROR_PATH` (default `.mirror/bills.sqlite3`), `CONGRESS_MIRROR_REFRESH_CRON` (unset), and `CONGRESS_MIRROR_CONGRESSES` (default: current congress + the one prior). None required — the standard deploy stays config-free.
|
|
23
|
+
- **`Dockerfile`** — mirror-CLI copy stanza so `docker exec <container> bun run mirror:init` / `mirror:refresh` / `mirror:verify` work against a deployed image; copies the lifecycle scripts and emits a runtime `tsconfig.json` resolving the `@/` alias against `./dist`.
|
|
24
|
+
|
|
25
|
+
## Dependencies
|
|
26
|
+
|
|
27
|
+
- **`node-cron`** `^4.4.1` added — in-process incremental-refresh scheduler.
|
|
28
|
+
- **`better-sqlite3`** `^12.0.0` added as an optional peer dependency (`^12.11.1` devDependency) — Bun uses its built-in `bun:sqlite` at runtime; `better-sqlite3` covers the Node install path.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Packaging fix — ships the 0.4.0 mirror feature's GHCR image, which 0.4.0 couldn't build. The build-stage bun install skips better-sqlite3's node-gyp postinstall (the image uses bun:sqlite), and better-sqlite3 becomes a regular dependency so npm/Node consumers of the opt-in mirror install it. No runtime change."
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.4.1 — 2026-06-30
|
|
8
|
+
|
|
9
|
+
Ships the GHCR container image for the 0.4.0 `congressgov_search_bills` mirror feature — 0.4.0 published to npm, the MCP Registry, and GitHub, but its multi-arch image failed to build. Packaging only; no source or runtime behavior change.
|
|
10
|
+
|
|
11
|
+
## Fixed
|
|
12
|
+
|
|
13
|
+
- **Container image build** — the 0.4.0 multi-arch GHCR build failed because `better-sqlite3`'s `node-gyp` postinstall ran during `bun install` in the toolchain-less `oven/bun` base image. The build-stage `bun install` now passes `--ignore-scripts`, matching the production stage; the image runs under Bun and uses `bun:sqlite`, so the native `better-sqlite3` binding is never loaded or needed in the container. ([#40](https://github.com/cyanheads/congressgov-mcp-server/issues/40))
|
|
14
|
+
|
|
15
|
+
## Changed
|
|
16
|
+
|
|
17
|
+
- **`better-sqlite3`** — promoted from an optional peer dependency to a regular `dependency` (`^12.11.1`); `trustedDependencies` removed. npm/Node consumers of the opt-in mirror now install it automatically; Bun continues to use its built-in `bun:sqlite` at runtime.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Fixes chainable list-row identifiers, committee_lookup filtered pagination and single-word name resolution, reversed date-range validation, and exhausted-page notices bleeding into no-match guidance; adopts mcp-ts-core ^0.11.5 and TypeScript 7."
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.4.2 — 2026-08-16
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **Supply-chain guards** — `bunfig.toml` now blocks installing package versions published in the last 3 days (`minimumReleaseAge`, `@cyanheads/mcp-ts-core` excluded for same-day adoption) and scans installs with `@socketsecurity/bun-security-scanner`.
|
|
12
|
+
- **Community health files** — `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`, `SECURITY.md`, `FUNDING.yml`, and `.gitattributes`.
|
|
13
|
+
|
|
14
|
+
## Changed
|
|
15
|
+
|
|
16
|
+
- **Upstream HTTP diagnostics** now read from the framework's canonical `error.data.status`/`error.data.body` fields instead of `statusCode`/`responseBody`, and 404 is marked an expected status so a Congress.gov not-found response logs at debug rather than error severity.
|
|
17
|
+
- **Docker build** uses BuildKit cache mounts and installs production dependencies with `--omit=peer`, keeping the framework's optional peer tiers (test runner, service SDKs, parsers) out of the runtime image.
|
|
18
|
+
|
|
19
|
+
## Fixed
|
|
20
|
+
|
|
21
|
+
- **`congressgov_bill_lookup`/`congressgov_daily_record`** — `billNumber`, `volumeNumber`, and `issueNumber` now accept the digit-string form list rows carry (e.g. `"9479"`), not just a JSON number, so a list row's identifier chains directly into the matching detail call. ([#43](https://github.com/cyanheads/congressgov-mcp-server/issues/43))
|
|
22
|
+
- **`congressgov_committee_lookup`** — the filtered `list` result is now paginated by `offset`/`limit` with a real `nextOffset`, instead of returning every match regardless of the caller's page size. ([#44](https://github.com/cyanheads/congressgov-mcp-server/issues/44))
|
|
23
|
+
- **`congressgov_committee_lookup`** — `committeeCode` now resolves single-word committee names (e.g. `Judiciary`) the same way multi-word names already did; matching routes on committee-code shape rather than on the presence of whitespace. ([#46](https://github.com/cyanheads/congressgov-mcp-server/issues/46))
|
|
24
|
+
- **`congressgov_bill_lookup`/`congressgov_bill_summaries`** — a reversed `fromDateTime`/`toDateTime` pair is now rejected as an input error instead of silently returning an empty result indistinguishable from a genuine no-match. ([#48](https://github.com/cyanheads/congressgov-mcp-server/issues/48))
|
|
25
|
+
- **Exhausted-page notices** — a shared `notifyIfNoMatches()` now gates every browse/list tool's no-match enrichment notice on the upstream total, across 22 call sites in 11 tool definitions, so paging past the end of a non-empty result set no longer pairs the accurate "page is empty" text with a contradictory "no matches" notice. ([#49](https://github.com/cyanheads/congressgov-mcp-server/issues/49))
|
|
26
|
+
|
|
27
|
+
## Dependency bumps
|
|
28
|
+
|
|
29
|
+
- `@cyanheads/mcp-ts-core` `^0.10.10` → `^0.11.5`
|
|
30
|
+
- `typescript` `^6.0.3` → `^7.0.2`
|
|
31
|
+
- `better-sqlite3` `^12.11.1` → `^13.0.3`
|
|
32
|
+
- `fast-xml-parser` `^5.9.3` → `^5.10.1`
|
|
33
|
+
- `node-cron` `^4.4.1` → `^4.6.0`
|
|
34
|
+
- `@biomejs/biome` `^2.5.1` → `^2.5.8`
|
|
35
|
+
- `@types/node` `^26.0.1` → `^26.2.0`
|
|
36
|
+
- `ignore` `^7.0.5` → `^7.0.6`
|
|
37
|
+
- `tsc-alias` `^1.8.17` → `^1.9.1`
|
|
38
|
+
- `vitest` `^4.1.9` → `^4.1.10`
|
|
39
|
+
- `@socketsecurity/bun-security-scanner` added at `^1.1.2`
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Fix silent data loss and truncation across detail/list rendering, HTML-to-Markdown spacing, and the enacted-laws list-to-get chain."
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.4.3 — 2026-08-16
|
|
8
|
+
|
|
9
|
+
## Fixed
|
|
10
|
+
|
|
11
|
+
- **`congressgov_enacted_laws` list rows** now render the public/private law citation (`**Law:** Public Law 118-90`), shared by `lawCitations()` with bill lists and member sponsored/cosponsored legislation ([#45](https://github.com/cyanheads/congressgov-mcp-server/issues/45)).
|
|
12
|
+
- **Detail renderers no longer silently drop or cut off upstream data.** The member, roll-vote, senate-vote, and nomination detail formatters now fall through to `renderDetailRest` for any field outside their curated header set, and every hard cap on nested arrays (terms, leadership, nominees) and inline-string previews was removed — `renderInline` recurses into nested objects/arrays instead of truncating or JSON-stringifying them ([#50](https://github.com/cyanheads/congressgov-mcp-server/issues/50)).
|
|
13
|
+
- **Curated collection rows** (member terms, party history, leadership; nomination nominees) now append their own fields the curated line doesn't name, via a new `withUnnamedFields()` helper — found verifying #50, since the `renderDetailRest` fall-through only reaches a record's top level, not a collection the header renders itself.
|
|
14
|
+
- **`htmlToMarkdown()` boundary whitespace.** Emphasis spans (`<em>`/`<strong>`) are now matched and wrapped as whole units so a space inside the tag boundary (`<em>de minimis </em>treatment`) stays outside the Markdown marker instead of corrupting word spacing ([#51](https://github.com/cyanheads/congressgov-mcp-server/issues/51)).
|
|
15
|
+
- **`bill_lookup operation:"subjects"` now includes the policy area.** `extractSubjectItems()` emits it ahead of `legislativeSubjects[]`, each row tagged with a new `subjectType` field (`policyArea` | `legislativeSubject`) — previously dropped by `extractListItems()`'s single-array extraction, so pagination's advertised total exceeded what a caller could retrieve ([#47](https://github.com/cyanheads/congressgov-mcp-server/issues/47)).
|
|
16
|
+
- **`enacted_laws` `lawNumber` accepts the citation list rows actually carry.** `lawNumber` now takes either the bare integer or the compound `{congress}-{number}` citation (`"118-90"`), cross-checked against the supplied `congress` and normalized via `toLawNumber()` — removes the undocumented split-on-hyphen step between `list` and `get` ([#54](https://github.com/cyanheads/congressgov-mcp-server/issues/54)).
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Add bounded legislative document text retrieval (`content`) to bill, committee-report, and daily-record tools; fix list-row field loss and make the research prompt mirror-aware."
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.5.0 — 2026-08-16
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **`content` operation** on `congressgov_bill_lookup`, `congressgov_committee_reports`, and `congressgov_daily_record` retrieves the actual document text behind their format URLs, one exact character window at a time (`characterOffset`/`characterLimit`, default 25,000, max 100,000) — pick a `format` (`text` or `xml`) and follow `nextOffset` to walk a whole document. Backed by a new `CongressDocumentsService` reaching `www.congress.gov` — a second host from the rest of the server, no API key, bounded by a 5,000,000-byte fetch ceiling, a 30s deadline, and host/content-type allowlists. Adds five error contracts: `document_unavailable`, `format_unavailable`, `document_fetch_failed`, `document_too_large`, `offset_past_end` ([#53](https://github.com/cyanheads/congressgov-mcp-server/issues/53)).
|
|
12
|
+
|
|
13
|
+
## Changed
|
|
14
|
+
|
|
15
|
+
- **`congressgov_legislative_research` prompt** now emits a discovery plan matching the deployment: with `CONGRESS_MIRROR_ENABLED` it routes through `congressgov_search_bills`; without it, it asks for a bill/member/committee/report seed instead of naming tools that can't filter by topic ([#52](https://github.com/cyanheads/congressgov-mcp-server/issues/52)).
|
|
16
|
+
|
|
17
|
+
## Fixed
|
|
18
|
+
|
|
19
|
+
- **List-row renderers no longer drop fields the curated line doesn't name.** New `withRowRest()`/`pick()` primitives in `format-helpers.ts` extend the existing completeness invariant from detail views to list rows — recovers values like a subcommittee row's `parent.systemCode` and a House vote row's `bioguideId` ([#55](https://github.com/cyanheads/congressgov-mcp-server/issues/55)).
|
|
20
|
+
- **`bill_lookup content` no longer serves the wrong version past the end of the list.** Congress.gov appends the enacted "Public Law" text version to every page, so an out-of-range `textVersionIndex` silently returned that row instead of failing — now decided from `pagination.count`.
|
|
21
|
+
- **`renderGenericItem` no longer drops `citation`/`bioguideId`/`systemCode`** when a row also carries a `type`+`number` pair.
|
|
22
|
+
- **`latestAction` rendering no longer drops `actionTime`** at the six sites that render it.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Raise the `content` document ceiling to 25 MB via a streaming extractor, reaching the largest enacted bills; map mid-stream fetch failures correctly and fix the too-large recovery hint."
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.5.1 — 2026-08-17
|
|
8
|
+
|
|
9
|
+
## Changed
|
|
10
|
+
|
|
11
|
+
- **`content` document ceiling raised 5,000,000 → 25,000,000 bytes**, backed by a new incremental extractor (`extract-text-stream.ts`) that extracts text as the body streams and retains only the requested character window instead of buffering the whole document — a read's live set stays flat in size regardless of the document. The largest enacted bills are now reachable in either published format: 116th Congress H.R. 133 is 6,790,482 bytes as Formatted Text and 9,812,888 as XML, both previously refused outright. The extractor is held byte-for-byte identical to the existing whole-string `extract-text.ts`, which remains the normative definition of the extraction, by a differential test ([#56](https://github.com/cyanheads/congressgov-mcp-server/issues/56)).
|
|
12
|
+
- **`document_too_large` recovery hint** no longer points callers at the other format, which fails the same way — it names the `sourceUrl` instead.
|
|
13
|
+
|
|
14
|
+
## Fixed
|
|
15
|
+
|
|
16
|
+
- **A document body that fails mid-stream now maps to `document_fetch_failed`** instead of surfacing an unmapped, retried `Error`.
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Adopts mcp-ts-core 0.12.x: HTTP serves protocol revision 2026-07-28, tool arguments are strict and advertised as 2020-12 JSON Schema with a declared error envelope, and the catalog and resource reads now carry cache hints."
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.5.2 — 2026-08-25
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **Cache hints on the cacheable results** ([mcp-ts-core#359](https://github.com/cyanheads/mcp-ts-core/issues/359)). `createApp({ cacheHints })` marks the catalog operations — `tools/list`, `prompts/list`, `resources/list`, `resources/templates/list`, `server/discover` — cacheable for an hour and `resources/read` for five minutes, both `public`; `congress://bill-types` overrides to a day and `congress://current` to an hour. Honored on protocol revision 2026-07-28 only, so 2025-era responses are unchanged.
|
|
12
|
+
|
|
13
|
+
## Changed
|
|
14
|
+
|
|
15
|
+
- **HTTP serves protocol revision `2026-07-28`** alongside the `initialize`-negotiated 2025 revisions, and `/.well-known/mcp.json` reports `mcp_version: 2026-07-28`.
|
|
16
|
+
- **Tool arguments are strict** ([mcp-ts-core#232](https://github.com/cyanheads/mcp-ts-core/issues/232)). An argument key no tool declares is rejected by name instead of silently stripped, and every advertised `inputSchema` carries `additionalProperties: false` — a caller who sends `querry` gets an `unrecognized_keys` failure rather than an unfiltered answer.
|
|
17
|
+
- **Advertised schemas are JSON Schema 2020-12**, and every tool's `outputSchema` declares the failure envelope ([mcp-ts-core#241](https://github.com/cyanheads/mcp-ts-core/issues/241)): success fields become optional, `error` is declared, and an `anyOf` restores requiredness per branch. A client that validates `structuredContent` without checking `isError` no longer rejects error results with `-32602`.
|
|
18
|
+
- **`resources/subscribe` and `logging` are advertised and backed.** `logging/setLevel` resolves, and handler log lines reach the client as `notifications/message` at their RFC 5424 level.
|
|
19
|
+
- **The API, document, and Senate LIS services derive their network context from the handler's own context** via `requestContextService.createRequestContext({ parentContext: ctx })`, replacing a local `RequestContextLike` shim — the request ID now carries into upstream fetch logs and retry reports instead of being replaced by a per-service literal.
|
|
20
|
+
- **Bun pins move to `1.4.0`** — both `Dockerfile` stages and `packageManager`; `engines.bun` stays `>=1.3.0`. The build stage is pinned to `--platform=$BUILDPLATFORM`, since Bun ≥1.4 aborts under QEMU user-mode emulation and would kill the `linux/amd64` leg of a multi-arch `buildx` run on an arm64 host.
|
|
21
|
+
- **`MCP_SESSION_MODE` is documented** in `.env.example` and the README config table: `auto` by default, resolving to `stateful`, while the published Docker image runs `stateless`. No behavior change — the image already set it.
|
|
22
|
+
|
|
23
|
+
## Dependencies
|
|
24
|
+
|
|
25
|
+
- `@cyanheads/mcp-ts-core` `^0.11.5` → `^0.12.3`
|
|
26
|
+
- `@biomejs/biome` `^2.5.8` → `^2.5.10`
|
|
27
|
+
- `fast-xml-parser` `^5.10.1` → `^5.11.0`
|
|
28
|
+
- `tsc-alias` `^1.9.1` → `^1.9.2`
|
|
29
|
+
- `vitest` `^4.1.10` → `^4.1.11`
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Tightens advertised tool contracts: names every result root, adds readable titles, and validates searches and member identifiers at the MCP boundary."
|
|
3
|
+
breaking: true
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.6.0 — 2026-08-30
|
|
8
|
+
|
|
9
|
+
## Changed
|
|
10
|
+
|
|
11
|
+
- **`tools/list` output schemas** now declare every non-list result root while retaining permissive nested Congress.gov records ([#64](https://github.com/cyanheads/congressgov-mcp-server/issues/64)).
|
|
12
|
+
- **Tool titles** now use explicit `Congress.gov` branding, preserve `CRS`, and omit internal committee-filter implementation details ([#65](https://github.com/cyanheads/congressgov-mcp-server/issues/65)).
|
|
13
|
+
- **`congressgov_search_bills.query`** now requires at least one Unicode letter or number and rejects tokenless searches at the MCP boundary ([#61](https://github.com/cyanheads/congressgov-mcp-server/issues/61)).
|
|
14
|
+
- **`congressgov_member_lookup` identifiers** now validate Bioguide IDs as one ASCII letter plus six digits and state codes as two ASCII letters ([#66](https://github.com/cyanheads/congressgov-mcp-server/issues/66)).
|
|
15
|
+
|
|
16
|
+
## Fixed
|
|
17
|
+
|
|
18
|
+
- **List formatters** now preserve list rendering when results also carry named document-content metadata.
|
|
19
|
+
|
|
20
|
+
## Dependencies
|
|
21
|
+
|
|
22
|
+
- `fast-xml-parser` `^5.11.0` → `^5.11.1`
|
|
23
|
+
- `@biomejs/biome` `^2.5.10` → `^2.5.11`
|
|
24
|
+
- `@types/node` `^26.2.0` → `^26.4.0`
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Preserves HTML list structure, safely fences document text, and separates adjacent XML elements in the content contract."
|
|
3
|
+
breaking: true
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.7.0 — 2026-08-30
|
|
8
|
+
|
|
9
|
+
## Changed
|
|
10
|
+
|
|
11
|
+
- **Rendered HTML lists** now preserve item and following-paragraph boundaries in `content[]` while retaining the source HTML in structured results ([#58](https://github.com/cyanheads/congressgov-mcp-server/issues/58)).
|
|
12
|
+
- **Document `content[]`** now wraps exact structured text in a Markdown fence longer than any backtick run it contains ([#59](https://github.com/cyanheads/congressgov-mcp-server/issues/59)).
|
|
13
|
+
- **XML document extraction** now separates adjacent structural siblings while leaving inline tags and existing whitespace transparent; this intentionally changes `content` text, offsets, `nextOffset`, and total characters for no-`<pre>` XML documents ([#60](https://github.com/cyanheads/congressgov-mcp-server/issues/60)).
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "With MCP_SESSION_MODE unset, HTTP defaults to stateless; an explicit MCP_SESSION_MODE value still overrides it. This release also adopts mcp-ts-core 0.13.6 with typed argument recovery."
|
|
3
|
+
breaking: true
|
|
4
|
+
security: false
|
|
5
|
+
agent-notes: |
|
|
6
|
+
Require Bun 1.4.0 or newer. Development skills now live in framework-skills/ rather than skills/.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# 0.7.1 — 2026-09-19
|
|
10
|
+
|
|
11
|
+
## Changed
|
|
12
|
+
|
|
13
|
+
- **`@cyanheads/mcp-ts-core`** advances from `^0.12.3` to `^0.13.6`. Require Bun 1.4.0 or newer; development skills now live in `framework-skills/` rather than `skills/`.
|
|
14
|
+
- **HTTP sessions:** With `MCP_SESSION_MODE` unset, HTTP defaults to stateless; an explicit `MCP_SESSION_MODE` value still overrides it.
|
|
15
|
+
- **Tool argument rejections** now use typed `InvalidParams` envelopes with schema-derived recovery advice and client-visible reason text.
|
|
16
|
+
- **Environment configuration** treats empty strings and whole-value unsubstituted `${…}` placeholders as unset.
|
|
17
|
+
- **Argument key normalization** accepts `state_code` as `stateCode` when the canonical key is absent; unrelated unknown keys remain rejected.
|
|
18
|
+
- **Plugins and MCPB metadata** now expose `CONGRESS_API_KEY` as optional user configuration.
|
|
19
|
+
- **Development tooling and documentation** refresh the capability reference and contributor metadata, synchronize framework build and validation scripts, add CodeQL analysis, and include per-version changelogs in the npm package.
|
|
20
|
+
|
|
21
|
+
## Fixed
|
|
22
|
+
|
|
23
|
+
- **Upstream requests** preserve caller cancellation and non-retryable outcomes across Congress.gov documents, Congress.gov API calls, and Senate LIS votes.
|
|
24
|
+
- **Mirror lifecycle** stops scheduled refreshes and awaits cancellation before closing SQLite during teardown.
|
|
25
|
+
- **`congressgov_member_lookup` documentation** no longer advertises a nonexistent chamber filter ([#72](https://github.com/cyanheads/congressgov-mcp-server/issues/72)).
|
|
26
|
+
|
|
27
|
+
## Dependencies
|
|
28
|
+
|
|
29
|
+
- `@cyanheads/mcp-ts-core` `^0.12.3` → `^0.13.6`
|
|
30
|
+
- `zod` `^4.4.3` → `^4.6.5`
|
|
31
|
+
- `@biomejs/biome` `^2.5.11` → `^2.5.14`
|
|
32
|
+
- `@types/node` `^26.4.0` → `^26.6.1`
|
|
33
|
+
- `ignore` `^7.0.6` → `^7.0.9`
|
|
34
|
+
- `tsc-alias` `^1.9.2` → `^1.9.5`
|
|
35
|
+
- `vitest` `^4.1.11` → `^5.0.1`
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Character references now decode in a single pass, closing three CodeQL double-escaping alerts. This release also resolves Senate roll-call vote dates and bounds summary text windows."
|
|
3
|
+
breaking: false
|
|
4
|
+
security: true
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.7.2 — 2026-09-22
|
|
8
|
+
|
|
9
|
+
## Fixed
|
|
10
|
+
|
|
11
|
+
- **`congressgov_roll_votes` Senate list rows** now carry a resolved `voteDateIso` beside the menu's year-less `voteDate`, derived by walking the session's vote sequence across December→January rollovers. ([#67](https://github.com/cyanheads/congressgov-mcp-server/issues/67))
|
|
12
|
+
- **`congressgov_bill_summaries` and `congressgov_bill_lookup` `summaries`** now bound page size and per-row summary text — a windowed row carries `textTotalCharacters`/`textTruncated`/`textNextOffset`, and `summaries` gains a `versionCode` selector. ([#70](https://github.com/cyanheads/congressgov-mcp-server/issues/70))
|
|
13
|
+
|
|
14
|
+
## Security
|
|
15
|
+
|
|
16
|
+
- **Character references** decode in a single pass through a shared decoder (`src/utils/character-references.ts`) — replacing the two `replace()` chains in tool formatting and the one in the search mirror, and taking over the single-pass decoder document extraction already used. A reference naming an inherited object member (`&constructor;`) now stays verbatim instead of resolving to it. Closes three CodeQL `js/double-escaping` alerts. ([#73](https://github.com/cyanheads/congressgov-mcp-server/issues/73))
|
|
17
|
+
|
|
18
|
+
## Dependencies
|
|
19
|
+
|
|
20
|
+
- `@types/node` `^26.6.1` → `^26.6.2`
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
---
|
|
2
|
+
# FORMAT REFERENCE — do not edit. Copy this file to
|
|
3
|
+
# `changelog/<major.minor>.x/<version>.md` (e.g. `changelog/0.8.x/0.8.6.md`)
|
|
4
|
+
# to author a new release. Set that file's H1 to `# <version> — YYYY-MM-DD`
|
|
5
|
+
# with a concrete date.
|
|
6
|
+
|
|
7
|
+
# Required. One-line GitHub Release-style headline. 350 character cap — a
|
|
8
|
+
# ceiling, not a target. Default short and scannable. Don't pad, don't stitch
|
|
9
|
+
# unrelated changes with commas/semicolons into an inventory — pick the one
|
|
10
|
+
# headline the release is about. Quotes required: unquoted YAML treats
|
|
11
|
+
# `: ` inside the value as a key separator and fails GitHub's strict parser.
|
|
12
|
+
summary: ""
|
|
13
|
+
|
|
14
|
+
# Set `true` when consumers must change code to upgrade: API removals,
|
|
15
|
+
# signature changes, config renames, behavior changes that break existing
|
|
16
|
+
# usage. Flagged as `Breaking` in the rollup.
|
|
17
|
+
breaking: false
|
|
18
|
+
|
|
19
|
+
# Set `true` ONLY for a security fix in THIS project's own source code — a
|
|
20
|
+
# vulnerability or hardening in code you ship. A dependency or transitive CVE
|
|
21
|
+
# bump is routine maintenance, NOT a security release: record it under
|
|
22
|
+
# `## Dependencies` (with the advisory ID) and leave this `false`. When true,
|
|
23
|
+
# pairs with the `## Security` section below and flags `Security` in the rollup.
|
|
24
|
+
security: false
|
|
25
|
+
|
|
26
|
+
# Optional free-form notes for maintenance agents processing this release.
|
|
27
|
+
# Not rendered in CHANGELOG — consumed by agents running `maintenance` on
|
|
28
|
+
# downstream servers. ADOPTION STEPS ONLY — new files to create, fields to
|
|
29
|
+
# populate, one-time migration steps. Never a second rendering of the body:
|
|
30
|
+
# if a body bullet already says it, name the bullet's symbol instead of
|
|
31
|
+
# re-explaining. Omit the field entirely when there's nothing to say.
|
|
32
|
+
# agent-notes: |
|
|
33
|
+
# <instructions for downstream maintenance agents>
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
# <version> — YYYY-MM-DD
|
|
37
|
+
|
|
38
|
+
<!--
|
|
39
|
+
AUTHORING GUIDE — applies to the new per-version file you create from this
|
|
40
|
+
template.
|
|
41
|
+
|
|
42
|
+
Audience: someone scanning release notes to decide what affects them. Lead
|
|
43
|
+
each bullet with the symbol or concept name in **bold** so they can skip
|
|
44
|
+
what's irrelevant and zoom in on what's not.
|
|
45
|
+
|
|
46
|
+
Tone: terse, fact-dense, not verbose. Bullet shape: **symbol** + what
|
|
47
|
+
changed + at most one consumer-facing caveat. One sentence by default, two
|
|
48
|
+
when the second carries weight — a bullet past ~40 words or three sentences
|
|
49
|
+
is wrong. The depth lives one hop away: the linked issue carries the why,
|
|
50
|
+
the commit diff carries the how. The changelog names what changed and what
|
|
51
|
+
a consumer does about it; a reader who wants mechanism opens the link.
|
|
52
|
+
|
|
53
|
+
Model length on THIS guide, never on the previous entry — entries modeled
|
|
54
|
+
on entries compound.
|
|
55
|
+
|
|
56
|
+
Cut (each has shipped as a wall of text; these are the cruft):
|
|
57
|
+
- History/justification narration — how the bug worked, why the old
|
|
58
|
+
behavior was wrong. One short clause at most; the issue carries the story.
|
|
59
|
+
- Design-rationale defense — "chosen over Y because…", "guarding the
|
|
60
|
+
getter is not enough…". That is the author arguing with a reviewer;
|
|
61
|
+
reviewers read the PR, not the changelog.
|
|
62
|
+
- Defensive unchanged-clauses — "X is unchanged", "byte-identical to
|
|
63
|
+
<prev>". Keep one only where its absence would cause a real misread,
|
|
64
|
+
as a short parenthetical.
|
|
65
|
+
- Edge-case inventories — marker lists, not-flagged lists, escape tables.
|
|
66
|
+
Tests and the issue carry those.
|
|
67
|
+
- Mechanism walkthroughs (JSDoc, CLAUDE.md/AGENTS.md, or the relevant
|
|
68
|
+
skill own those), ceremonial framings ("This release introduces…"),
|
|
69
|
+
backwards-compat paragraphs, file-by-file test enumerations. Prefer
|
|
70
|
+
code/symbol names over English re-explanations.
|
|
71
|
+
|
|
72
|
+
Verified ≠ included: the every-claim-verified-from-the-diff rule bounds
|
|
73
|
+
the TRUTH of what you write, never the AMOUNT.
|
|
74
|
+
|
|
75
|
+
Example — same fact, right size:
|
|
76
|
+
|
|
77
|
+
TOO LONG: **`fetchWithTimeout`'s `timeoutMs` bounds the whole exchange**
|
|
78
|
+
(#341). `fetch` resolves once headers arrive and the deadline was
|
|
79
|
+
cleared as the helper returned, so a peer that answered promptly and
|
|
80
|
+
then stalled the stream held the request open indefinitely. A 2xx
|
|
81
|
+
carrying a body now comes back as a passthrough wrapper that disarms
|
|
82
|
+
the deadline when the body closes, errors, or is cancelled; …
|
|
83
|
+
[+90 more words of mechanism and edge cases]
|
|
84
|
+
|
|
85
|
+
RIGHT: **`fetchWithTimeout`'s `timeoutMs` now bounds the whole
|
|
86
|
+
exchange, not just the headers** (#341). A stalled body aborts with
|
|
87
|
+
the same `Timeout` error; the returned `Response` is a wrapper, so
|
|
88
|
+
identity assertions (`toBe(response)`) no longer hold.
|
|
89
|
+
|
|
90
|
+
Narrative intro: skip by default. Add one short sentence only when the
|
|
91
|
+
release theme genuinely needs framing the bullets can't carry. When many
|
|
92
|
+
bullets share one upgrade consequence, state it ONCE — intro line or
|
|
93
|
+
agent-notes — never per bullet.
|
|
94
|
+
|
|
95
|
+
Sections: Keep a Changelog order — Added, Changed, Deprecated, Removed,
|
|
96
|
+
Fixed, Security. Include only sections with entries; delete the rest
|
|
97
|
+
(including the commented-out scaffolding below). Don't ship empty headers.
|
|
98
|
+
|
|
99
|
+
Include: every distinct fact a reader needs to adopt or audit the release —
|
|
100
|
+
new exports, signatures, lint rule IDs, env vars, breaking changes, version
|
|
101
|
+
bumps on shipped skills. Nothing more.
|
|
102
|
+
|
|
103
|
+
Links: link issues, PRs, docs, or skills where they help a reader jump to
|
|
104
|
+
context. Once per item per entry — don't re-link the same issue in summary,
|
|
105
|
+
narrative, and bullet. Skip links for inline symbol names; code spans speak
|
|
106
|
+
for themselves.
|
|
107
|
+
|
|
108
|
+
Issue/PR URLs: use full URLs. GitHub's bare `#NN` auto-link only resolves
|
|
109
|
+
inside its own UI, not in npm reads or local editors.
|
|
110
|
+
|
|
111
|
+
[#38](https://github.com/cyanheads/mcp-ts-core/issues/38) ← issue
|
|
112
|
+
[#42](https://github.com/cyanheads/mcp-ts-core/pull/42) ← PR
|
|
113
|
+
|
|
114
|
+
Verify numbers exist before linking (`gh issue view NN`, `gh pr view NN`).
|
|
115
|
+
Never speculate on a future number — `#42` for an upcoming PR silently
|
|
116
|
+
resolves to whatever real item already owns 42, and timeline previews pull
|
|
117
|
+
in that unrelated item's metadata.
|
|
118
|
+
|
|
119
|
+
TAG ANNOTATIONS — the annotated tag body renders as the GitHub Release body
|
|
120
|
+
via `gh release create --notes-from-tag`. It is a condensed digest of this
|
|
121
|
+
entry, never a copy, and its format is owned by the `release-and-publish`
|
|
122
|
+
skill (step 4, "Create the annotated tag"): a short subject line without the
|
|
123
|
+
version, flat headline bullets — no Keep-a-Changelog section headers, no
|
|
124
|
+
gates line — at most one deps line, issue backlinks, and the changelog link
|
|
125
|
+
last. In release-PR mode the `git-wrapup` skill authors those bullets as the
|
|
126
|
+
PR body's `## Changes` and the tag copies them.
|
|
127
|
+
-->
|
|
128
|
+
|
|
129
|
+
## Added
|
|
130
|
+
|
|
131
|
+
-
|
|
132
|
+
|
|
133
|
+
## Changed
|
|
134
|
+
|
|
135
|
+
-
|
|
136
|
+
|
|
137
|
+
<!-- ## Deprecated
|
|
138
|
+
|
|
139
|
+
- -->
|
|
140
|
+
|
|
141
|
+
<!-- ## Removed
|
|
142
|
+
|
|
143
|
+
- -->
|
|
144
|
+
|
|
145
|
+
## Fixed
|
|
146
|
+
|
|
147
|
+
-
|
|
148
|
+
|
|
149
|
+
<!-- ## Security
|
|
150
|
+
|
|
151
|
+
- -->
|
|
@@ -15,10 +15,10 @@ export declare function currentCongressNumber(date?: Date): number;
|
|
|
15
15
|
declare const ServerConfigSchema: z.ZodObject<{
|
|
16
16
|
apiKey: z.ZodDefault<z.ZodString>;
|
|
17
17
|
baseUrl: z.ZodDefault<z.ZodString>;
|
|
18
|
-
mirrorEnabled: z.
|
|
18
|
+
mirrorEnabled: z.ZodDefault<z.ZodCodec<z.ZodString, z.ZodBoolean>>;
|
|
19
19
|
mirrorPath: z.ZodDefault<z.ZodString>;
|
|
20
|
-
mirrorRefreshCron: z.
|
|
21
|
-
congresses: z.ZodPreprocess<z.ZodArray<z.ZodNumber
|
|
20
|
+
mirrorRefreshCron: z.ZodOptional<z.ZodString>;
|
|
21
|
+
congresses: z.ZodPreprocess<z.ZodArray<z.ZodNumber>, unknown>;
|
|
22
22
|
}, z.core.$strip>;
|
|
23
23
|
export type ServerConfig = z.infer<typeof ServerConfigSchema>;
|
|
24
24
|
export declare function getServerConfig(): ServerConfig;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAG3C,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAErE;AAoBD,QAAA,MAAM,kBAAkB;;;;;;;
|
|
1
|
+
{"version":3,"file":"server-config.d.ts","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAG3C,8DAA8D;AAC9D,eAAO,MAAM,mBAAmB,0BAA0B,CAAC;AAE3D;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,GAAE,IAAiB,GAAG,MAAM,CAErE;AAoBD,QAAA,MAAM,kBAAkB;;;;;;;iBA6CtB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAI9D,wBAAgB,eAAe,IAAI,YAAY,CAU9C;AAED,2CAA2C;AAC3C,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
|
@@ -45,10 +45,11 @@ const ServerConfigSchema = z.object({
|
|
|
45
45
|
/**
|
|
46
46
|
* Master switch for the local bill FTS mirror + `congressgov_search_bills`.
|
|
47
47
|
* Off by default so the standard deploy stays config-free and the live-API
|
|
48
|
-
* tools are unaffected. Unset/empty
|
|
48
|
+
* tools are unaffected. Unset/empty uses `false`; malformed values are rejected.
|
|
49
49
|
*/
|
|
50
50
|
mirrorEnabled: z
|
|
51
|
-
.
|
|
51
|
+
.stringbool()
|
|
52
|
+
.default(false)
|
|
52
53
|
.describe('Enable the local bill search mirror and the congressgov_search_bills tool.'),
|
|
53
54
|
/** Filesystem path to the SQLite mirror index file (matches the Dockerfile `.mirror` dir). */
|
|
54
55
|
mirrorPath: z
|
|
@@ -61,7 +62,9 @@ const ServerConfigSchema = z.object({
|
|
|
61
62
|
* Unset means no in-process schedule — run `bun run mirror:refresh` out-of-band.
|
|
62
63
|
*/
|
|
63
64
|
mirrorRefreshCron: z
|
|
64
|
-
.
|
|
65
|
+
.string()
|
|
66
|
+
.min(1)
|
|
67
|
+
.optional()
|
|
65
68
|
.describe('Cron schedule for the in-process mirror refresh (HTTP only; omit to run manually).'),
|
|
66
69
|
/**
|
|
67
70
|
* Congresses to mirror. Defaults to the current congress plus the one prior.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAI,GAAS,IAAI,IAAI,EAAE;IAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,OAAO,KAAK;aACT,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;aACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IACxC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,OAAO,CAAC,UAAU,CAAC;SACnB,QAAQ,CACP,+FAA+F,CAChG;IACH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,EAAE;SACL,OAAO,CAAC,6BAA6B,CAAC;SACtC,QAAQ,CAAC,2BAA2B,CAAC;IAExC;;;;OAIG;IACH,aAAa,EAAE,CAAC;SACb,UAAU,
|
|
1
|
+
{"version":3,"file":"server-config.js","sourceRoot":"","sources":["../../src/config/server-config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,8DAA8D;AAC9D,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAE3D;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,IAAI,GAAS,IAAI,IAAI,EAAE;IAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,OAAO,KAAK;aACT,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;aACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACjD,CAAC;IACD,MAAM,OAAO,GAAG,qBAAqB,EAAE,CAAC;IACxC,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,MAAM,EAAE,CAAC;SACN,MAAM,EAAE;SACR,OAAO,CAAC,UAAU,CAAC;SACnB,QAAQ,CACP,+FAA+F,CAChG;IACH,OAAO,EAAE,CAAC;SACP,MAAM,EAAE;SACR,GAAG,EAAE;SACL,OAAO,CAAC,6BAA6B,CAAC;SACtC,QAAQ,CAAC,2BAA2B,CAAC;IAExC;;;;OAIG;IACH,aAAa,EAAE,CAAC;SACb,UAAU,EAAE;SACZ,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CAAC,4EAA4E,CAAC;IACzF,8FAA8F;IAC9F,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,OAAO,CAAC,mBAAmB,CAAC;SAC5B,QAAQ,CAAC,kDAAkD,CAAC;IAC/D;;;OAGG;IACH,iBAAiB,EAAE,CAAC;SACjB,MAAM,EAAE;SACR,GAAG,CAAC,CAAC,CAAC;SACN,QAAQ,EAAE;SACV,QAAQ,CAAC,oFAAoF,CAAC;IACjG;;;;OAIG;IACH,UAAU,EAAE,CAAC;SACV,UAAU,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACxE,QAAQ,CAAC,uEAAuE,CAAC;CACrF,CAAC,CAAC;AAIH,IAAI,OAAiC,CAAC;AAEtC,MAAM,UAAU,eAAe;IAC7B,OAAO,KAAK,cAAc,CAAC,kBAAkB,EAAE;QAC7C,MAAM,EAAE,kBAAkB;QAC1B,OAAO,EAAE,uBAAuB;QAChC,aAAa,EAAE,yBAAyB;QACxC,UAAU,EAAE,sBAAsB;QAClC,iBAAiB,EAAE,8BAA8B;QACjD,UAAU,EAAE,4BAA4B;KACzC,CAAC,CAAC;IACH,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,iBAAiB;IAC/B,OAAO,GAAG,SAAS,CAAC;AACtB,CAAC"}
|