@cyanheads/congressgov-mcp-server 0.8.0 → 0.9.0

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 CHANGED
@@ -1,11 +1,11 @@
1
1
  # Agent Protocol
2
2
 
3
3
  **Server:** congressgov-mcp-server
4
- **Version:** 0.8.0
5
- **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.15`
4
+ **Version:** 0.9.0
5
+ **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.18`
6
6
  **Engines:** Bun ≥1.4.0, Node ≥24.0.0
7
- **MCP SDK:** `@modelcontextprotocol/server` ^2.3.1
8
- **Zod:** ^4.6.5
7
+ **MCP SDK:** `@modelcontextprotocol/server` ^2.4.0
8
+ **Zod:** ^4.6.7
9
9
 
10
10
  > **Read the framework docs first:** `node_modules/@cyanheads/mcp-ts-core/CLAUDE.md` contains the full API reference — builders, Context, error codes, exports, patterns. This file covers server-specific conventions only.
11
11
 
@@ -83,7 +83,7 @@ Tailor suggestions to what's actually missing or stale — don't recite the full
83
83
 
84
84
  **Summary bounding** (`src/mcp-server/tools/summary-window.ts`, constants in `tool-helpers.ts`). Both summary surfaces enforce two limits. `SUMMARY_PAGE_CHARACTERS` stops a page once its serialized rows reach the budget — the first row always returns, `pagination.nextOffset` counts the rows actually returned, and an enrichment notice discloses the stop. `DEFAULT_SUMMARY_TEXT_CHARACTERS` bounds one row's upstream `text`; a windowed row gains `textTotalCharacters` / `textTruncated` / `textNextOffset`, and its window end is retracted off any HTML tag or character reference it would otherwise split (unless the construct is wider than the whole window, where the requested limit wins). A row inside both limits is returned untouched, so an unbounded page stays byte-identical. `congressgov_bill_lookup` `summaries` overrides the row window with `characterOffset`/`characterLimit` and selects one version with `versionCode` — Congress.gov publishes no version filter, so selection reads the bill's whole summary list and matches client-side.
85
85
 
86
- ### Resources (5)
86
+ ### Resources (6)
87
87
 
88
88
  | URI Template | Description |
89
89
  |:-------------|:------------|
@@ -92,6 +92,7 @@ Tailor suggestions to what's actually missing or stale — don't recite the full
92
92
  | `congress://member/{bioguideId}` | Member profile |
93
93
  | `congress://bill/{congress}/{billType}/{billNumber}` | Bill detail |
94
94
  | `congress://committee/{committeeCode}` | Committee detail |
95
+ | `skill://congressgov-guide/SKILL.md` | Published legislative research guide |
95
96
 
96
97
  ### Prompts (2)
97
98
 
@@ -256,9 +257,18 @@ import { getServerConfig } from '@/config/server-config.js';
256
257
 
257
258
  ## Skills
258
259
 
259
- Skills are modular instructions in `framework-skills/` at the project root. Read them directly when a task matches — e.g., `framework-skills/add-tool/SKILL.md` when adding a tool. `bun run list-skills` prints the full registry. The directory is deliberately not `skills/`: Claude Code and Codex auto-load a plugin's root `skills/`, so a server that ships `.claude-plugin/` or `.codex-plugin/` would hand these development skills to every agent that installs it. Keep `skills/` free for skills meant for those agents.
260
+ Two skill trees live at the project root, written for different readers:
260
261
 
261
- **Agent skill directory:** Copy skills into the directory your agent discovers (Claude Code: `.claude/skills/`, others: equivalent). This makes skills available as context without needing to reference `framework-skills/` paths manually. After framework updates, run the `maintenance` skill — it re-syncs the agent directory automatically (Phase B).
262
+ | Tree | For | Written by |
263
+ |:-----|:----|:-----------|
264
+ | `framework-skills/` | The agent developing this server — framework skills (`metadata.audience: external`) plus any development-time skills of the server's own | `init` and the `maintenance` sync (framework skills); you (your own) |
265
+ | `skills/` | The agents that install the server and call its tools — tool chains, identifier sources, gates | `congressgov-guide/SKILL.md`, maintained with the `add-skill` skill |
266
+
267
+ Development skills are modular instructions. Read them directly when a task matches — e.g., `framework-skills/add-tool/SKILL.md` when adding a tool. `bun run list-skills` prints the full registry. Their directory is deliberately not `skills/`: Claude Code and Codex auto-load a plugin's root `skills/`, so a server that ships `.claude-plugin/` or `.codex-plugin/` would hand them to every agent that installs it.
268
+
269
+ `skills/congressgov-guide/SKILL.md` reaches plugin installs and the `.mcpb` bundle as-is and ships in the npm package and Docker image. `createApp({ skills: 'skills' })` serves it through the MCP Skills extension and the `skill://congressgov-guide/SKILL.md` resource. `lint:packaging` validates the tree.
270
+
271
+ **Agent skill directory:** Copy `framework-skills/` into the directory your agent discovers (Claude Code: `.claude/skills/`, others: equivalent). Skills then load as context without referencing `framework-skills/` paths. After framework updates, run the `maintenance` skill — Phase B re-syncs the agent directory.
262
272
 
263
273
  Available skills:
264
274
 
@@ -270,6 +280,7 @@ Available skills:
270
280
  | `add-app-tool` | Scaffold an MCP App tool + paired UI resource |
271
281
  | `add-resource` | Scaffold a new resource definition |
272
282
  | `add-prompt` | Scaffold a new prompt definition |
283
+ | `add-skill` | Author a skill the server publishes in root `skills/` for the agents that use it — when one earns its place, structure, validation, delivery |
273
284
  | `add-service` | Scaffold a new service integration |
274
285
  | `add-test` | Scaffold test file for a tool, resource, or service |
275
286
  | `field-test` | Exercise tools/resources/prompts with real inputs, verify behavior, report issues |
@@ -317,7 +328,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
317
328
  | `bun run format` | Auto-fix formatting (safe fixes only) |
318
329
  | `bun run format:unsafe` | Also apply Biome's unsafe autofixes — review the diff; they can change behavior |
319
330
  | `bun run lint:mcp` | Validate MCP tool/resource/prompt definitions |
320
- | `bun run lint:packaging` | Validate env var alignment between `manifest.json` and `server.json` |
331
+ | `bun run lint:packaging` | Validate bundle exclusions, plugin manifests, published skills, env var alignment, and version parity |
321
332
  | `bun run bundle` | Build and pack as `.mcpb` for one-click Claude Desktop install |
322
333
  | `bun run changelog:build` | Regenerate `CHANGELOG.md` from `changelog/*.md` |
323
334
  | `bun run changelog:check` | Verify `CHANGELOG.md` is in sync (used by devcheck) |
@@ -330,11 +341,13 @@ When you complete a skill's checklist, check the boxes and add a completion time
330
341
 
331
342
  ---
332
343
 
344
+ **CI is one file.** `.github/workflows/codeql.yml` is the only GitHub Actions workflow. Verification — `devcheck`, tests, and release gates — runs locally; don't add a workflow that re-runs it.
345
+
333
346
  ## Bundling
334
347
 
335
- `bun run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. The pack step is followed by `scripts/clean-mcpb.ts`, which prunes dev dependencies (`mcpb clean`) and strips two classes of `node_modules/**` content that root-anchored `.mcpbignore` patterns cannot reach: dependency-shipped agent docs (`framework-skills/`, `skills/`, `.claude/`, `.agents/`, `SKILL.md`) and platform-specific native bindings, which would otherwise lock the bundle to the platform it was packed on. MCPB is stdio-only — HTTP deployments are unaffected. The bundle file ships as `dist/congressgov-mcp-server.mcpb`.
348
+ `bun run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. `.mcpbignore` excludes root development paths with anchored patterns; root `skills/` ships. `scripts/clean-mcpb.ts` prunes dev dependencies and strips dependency agent docs, platform-specific native bindings, node-gyp build output that records host paths, and framework build-only files. Compiled native addons stay. Run `lint:packaging` after the completed bundle. MCPB is stdio-only; HTTP deployments are unaffected. The bundle file ships as `dist/congressgov-mcp-server.mcpb`.
336
349
 
337
- **Adding an env var requires both files:** `server.json` (registry discovery, `environmentVariables[]`) and `manifest.json` (bundle install UX, `mcp_config.env` + `user_config`). `lint:packaging` (run by `devcheck`) verifies the env var names match.
350
+ **Adding an env var requires both files:** `server.json` (registry discovery, `environmentVariables[]`) and `manifest.json` (bundle install UX, `mcp_config.env` + `user_config`). `lint:packaging` (run by `devcheck`) verifies the env var names match, every `user_config` option is wired into `mcp_config.env` as `"X": "${user_config.X}"`, and an optional string option carries `"default": ""`. The host substitutes only the `user_config` reference; `"${X}"` reaches the server literally.
338
351
 
339
352
  ---
340
353
 
@@ -375,6 +388,7 @@ After a version bump and final commit, publish to both npm and GHCR:
375
388
  bun publish --access public
376
389
 
377
390
  docker buildx build --platform linux/amd64,linux/arm64 \
391
+ --build-arg APP_VERSION=<version> \
378
392
  -t ghcr.io/cyanheads/congressgov-mcp-server:<version> \
379
393
  -t ghcr.io/cyanheads/congressgov-mcp-server:latest \
380
394
  --push .
@@ -397,6 +411,7 @@ The `release-and-publish` run handles npm, MCP Registry, bundle, GitHub Release,
397
411
  - [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
398
412
  - [ ] Registered in `createApp()` arrays (directly or via barrel exports)
399
413
  - [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
414
+ - [ ] Root `plugin.json` metadata matches `package.json`; `mcp.json` uses the unscoped server key, `npx -y <full package name>`, and the fixed env from `.codex-plugin/mcp.json`. User variables remain in the overlays; `.codex-plugin/plugin.json` retains `mcpServers: './.codex-plugin/mcp.json'`
400
415
  - [ ] `.codex-plugin/plugin.json` populated — `name` and `interface.displayName` = unscoped repo name; `version`, `description`, `repository`, `license` and `interface.shortDescription` from `package.json`
401
416
  - [ ] `.codex-plugin/mcp.json` updated — server name key is the unscoped repo name; every user-supplied variable is listed in `env_vars`. Never write `"KEY": ""` into `env` — it overrides the user's exported key
402
417
  - [ ] `.claude-plugin/plugin.json` populated — unscoped `name`, `version`, `description`, `author`, `repository`, `license`, `keywords`; inline `mcpServers` entry keyed by the unscoped repo name. User-supplied variables use `userConfig` and `"KEY": "${user_config.<option>}"` env references, matching `manifest.json`
package/CLAUDE.md CHANGED
@@ -1,11 +1,11 @@
1
1
  # Agent Protocol
2
2
 
3
3
  **Server:** congressgov-mcp-server
4
- **Version:** 0.8.0
5
- **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.15`
4
+ **Version:** 0.9.0
5
+ **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.18`
6
6
  **Engines:** Bun ≥1.4.0, Node ≥24.0.0
7
- **MCP SDK:** `@modelcontextprotocol/server` ^2.3.1
8
- **Zod:** ^4.6.5
7
+ **MCP SDK:** `@modelcontextprotocol/server` ^2.4.0
8
+ **Zod:** ^4.6.7
9
9
 
10
10
  > **Read the framework docs first:** `node_modules/@cyanheads/mcp-ts-core/CLAUDE.md` contains the full API reference — builders, Context, error codes, exports, patterns. This file covers server-specific conventions only.
11
11
 
@@ -83,7 +83,7 @@ Tailor suggestions to what's actually missing or stale — don't recite the full
83
83
 
84
84
  **Summary bounding** (`src/mcp-server/tools/summary-window.ts`, constants in `tool-helpers.ts`). Both summary surfaces enforce two limits. `SUMMARY_PAGE_CHARACTERS` stops a page once its serialized rows reach the budget — the first row always returns, `pagination.nextOffset` counts the rows actually returned, and an enrichment notice discloses the stop. `DEFAULT_SUMMARY_TEXT_CHARACTERS` bounds one row's upstream `text`; a windowed row gains `textTotalCharacters` / `textTruncated` / `textNextOffset`, and its window end is retracted off any HTML tag or character reference it would otherwise split (unless the construct is wider than the whole window, where the requested limit wins). A row inside both limits is returned untouched, so an unbounded page stays byte-identical. `congressgov_bill_lookup` `summaries` overrides the row window with `characterOffset`/`characterLimit` and selects one version with `versionCode` — Congress.gov publishes no version filter, so selection reads the bill's whole summary list and matches client-side.
85
85
 
86
- ### Resources (5)
86
+ ### Resources (6)
87
87
 
88
88
  | URI Template | Description |
89
89
  |:-------------|:------------|
@@ -92,6 +92,7 @@ Tailor suggestions to what's actually missing or stale — don't recite the full
92
92
  | `congress://member/{bioguideId}` | Member profile |
93
93
  | `congress://bill/{congress}/{billType}/{billNumber}` | Bill detail |
94
94
  | `congress://committee/{committeeCode}` | Committee detail |
95
+ | `skill://congressgov-guide/SKILL.md` | Published legislative research guide |
95
96
 
96
97
  ### Prompts (2)
97
98
 
@@ -256,9 +257,18 @@ import { getServerConfig } from '@/config/server-config.js';
256
257
 
257
258
  ## Skills
258
259
 
259
- Skills are modular instructions in `framework-skills/` at the project root. Read them directly when a task matches — e.g., `framework-skills/add-tool/SKILL.md` when adding a tool. `bun run list-skills` prints the full registry. The directory is deliberately not `skills/`: Claude Code and Codex auto-load a plugin's root `skills/`, so a server that ships `.claude-plugin/` or `.codex-plugin/` would hand these development skills to every agent that installs it. Keep `skills/` free for skills meant for those agents.
260
+ Two skill trees live at the project root, written for different readers:
260
261
 
261
- **Agent skill directory:** Copy skills into the directory your agent discovers (Claude Code: `.claude/skills/`, others: equivalent). This makes skills available as context without needing to reference `framework-skills/` paths manually. After framework updates, run the `maintenance` skill — it re-syncs the agent directory automatically (Phase B).
262
+ | Tree | For | Written by |
263
+ |:-----|:----|:-----------|
264
+ | `framework-skills/` | The agent developing this server — framework skills (`metadata.audience: external`) plus any development-time skills of the server's own | `init` and the `maintenance` sync (framework skills); you (your own) |
265
+ | `skills/` | The agents that install the server and call its tools — tool chains, identifier sources, gates | `congressgov-guide/SKILL.md`, maintained with the `add-skill` skill |
266
+
267
+ Development skills are modular instructions. Read them directly when a task matches — e.g., `framework-skills/add-tool/SKILL.md` when adding a tool. `bun run list-skills` prints the full registry. Their directory is deliberately not `skills/`: Claude Code and Codex auto-load a plugin's root `skills/`, so a server that ships `.claude-plugin/` or `.codex-plugin/` would hand them to every agent that installs it.
268
+
269
+ `skills/congressgov-guide/SKILL.md` reaches plugin installs and the `.mcpb` bundle as-is and ships in the npm package and Docker image. `createApp({ skills: 'skills' })` serves it through the MCP Skills extension and the `skill://congressgov-guide/SKILL.md` resource. `lint:packaging` validates the tree.
270
+
271
+ **Agent skill directory:** Copy `framework-skills/` into the directory your agent discovers (Claude Code: `.claude/skills/`, others: equivalent). Skills then load as context without referencing `framework-skills/` paths. After framework updates, run the `maintenance` skill — Phase B re-syncs the agent directory.
262
272
 
263
273
  Available skills:
264
274
 
@@ -270,6 +280,7 @@ Available skills:
270
280
  | `add-app-tool` | Scaffold an MCP App tool + paired UI resource |
271
281
  | `add-resource` | Scaffold a new resource definition |
272
282
  | `add-prompt` | Scaffold a new prompt definition |
283
+ | `add-skill` | Author a skill the server publishes in root `skills/` for the agents that use it — when one earns its place, structure, validation, delivery |
273
284
  | `add-service` | Scaffold a new service integration |
274
285
  | `add-test` | Scaffold test file for a tool, resource, or service |
275
286
  | `field-test` | Exercise tools/resources/prompts with real inputs, verify behavior, report issues |
@@ -317,7 +328,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
317
328
  | `bun run format` | Auto-fix formatting (safe fixes only) |
318
329
  | `bun run format:unsafe` | Also apply Biome's unsafe autofixes — review the diff; they can change behavior |
319
330
  | `bun run lint:mcp` | Validate MCP tool/resource/prompt definitions |
320
- | `bun run lint:packaging` | Validate env var alignment between `manifest.json` and `server.json` |
331
+ | `bun run lint:packaging` | Validate bundle exclusions, plugin manifests, published skills, env var alignment, and version parity |
321
332
  | `bun run bundle` | Build and pack as `.mcpb` for one-click Claude Desktop install |
322
333
  | `bun run changelog:build` | Regenerate `CHANGELOG.md` from `changelog/*.md` |
323
334
  | `bun run changelog:check` | Verify `CHANGELOG.md` is in sync (used by devcheck) |
@@ -330,11 +341,13 @@ When you complete a skill's checklist, check the boxes and add a completion time
330
341
 
331
342
  ---
332
343
 
344
+ **CI is one file.** `.github/workflows/codeql.yml` is the only GitHub Actions workflow. Verification — `devcheck`, tests, and release gates — runs locally; don't add a workflow that re-runs it.
345
+
333
346
  ## Bundling
334
347
 
335
- `bun run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. The pack step is followed by `scripts/clean-mcpb.ts`, which prunes dev dependencies (`mcpb clean`) and strips two classes of `node_modules/**` content that root-anchored `.mcpbignore` patterns cannot reach: dependency-shipped agent docs (`framework-skills/`, `skills/`, `.claude/`, `.agents/`, `SKILL.md`) and platform-specific native bindings, which would otherwise lock the bundle to the platform it was packed on. MCPB is stdio-only — HTTP deployments are unaffected. The bundle file ships as `dist/congressgov-mcp-server.mcpb`.
348
+ `bun run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. `.mcpbignore` excludes root development paths with anchored patterns; root `skills/` ships. `scripts/clean-mcpb.ts` prunes dev dependencies and strips dependency agent docs, platform-specific native bindings, node-gyp build output that records host paths, and framework build-only files. Compiled native addons stay. Run `lint:packaging` after the completed bundle. MCPB is stdio-only; HTTP deployments are unaffected. The bundle file ships as `dist/congressgov-mcp-server.mcpb`.
336
349
 
337
- **Adding an env var requires both files:** `server.json` (registry discovery, `environmentVariables[]`) and `manifest.json` (bundle install UX, `mcp_config.env` + `user_config`). `lint:packaging` (run by `devcheck`) verifies the env var names match.
350
+ **Adding an env var requires both files:** `server.json` (registry discovery, `environmentVariables[]`) and `manifest.json` (bundle install UX, `mcp_config.env` + `user_config`). `lint:packaging` (run by `devcheck`) verifies the env var names match, every `user_config` option is wired into `mcp_config.env` as `"X": "${user_config.X}"`, and an optional string option carries `"default": ""`. The host substitutes only the `user_config` reference; `"${X}"` reaches the server literally.
338
351
 
339
352
  ---
340
353
 
@@ -375,6 +388,7 @@ After a version bump and final commit, publish to both npm and GHCR:
375
388
  bun publish --access public
376
389
 
377
390
  docker buildx build --platform linux/amd64,linux/arm64 \
391
+ --build-arg APP_VERSION=<version> \
378
392
  -t ghcr.io/cyanheads/congressgov-mcp-server:<version> \
379
393
  -t ghcr.io/cyanheads/congressgov-mcp-server:latest \
380
394
  --push .
@@ -397,6 +411,7 @@ The `release-and-publish` run handles npm, MCP Registry, bundle, GitHub Release,
397
411
  - [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
398
412
  - [ ] Registered in `createApp()` arrays (directly or via barrel exports)
399
413
  - [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
414
+ - [ ] Root `plugin.json` metadata matches `package.json`; `mcp.json` uses the unscoped server key, `npx -y <full package name>`, and the fixed env from `.codex-plugin/mcp.json`. User variables remain in the overlays; `.codex-plugin/plugin.json` retains `mcpServers: './.codex-plugin/mcp.json'`
400
415
  - [ ] `.codex-plugin/plugin.json` populated — `name` and `interface.displayName` = unscoped repo name; `version`, `description`, `repository`, `license` and `interface.shortDescription` from `package.json`
401
416
  - [ ] `.codex-plugin/mcp.json` updated — server name key is the unscoped repo name; every user-supplied variable is listed in `env_vars`. Never write `"KEY": ""` into `env` — it overrides the user's exported key
402
417
  - [ ] `.claude-plugin/plugin.json` populated — unscoped `name`, `version`, `description`, `author`, `repository`, `license`, `keywords`; inline `mcpServers` entry keyed by the unscoped repo name. User-supplied variables use `userConfig` and `"KEY": "${user_config.<option>}"` env references, matching `manifest.json`
package/Dockerfile CHANGED
@@ -9,7 +9,7 @@
9
9
  # multi-arch buildx run on an arm64 host. This stage only runs tsc and emits
10
10
  # architecture-independent JavaScript; the native deps stage cross-installs the
11
11
  # production tree, so both build-time Bun stages run on the host architecture.
12
- FROM --platform=$BUILDPLATFORM oven/bun:1.4.3 AS build
12
+ FROM --platform=$BUILDPLATFORM oven/bun:1.4.4 AS build
13
13
 
14
14
  WORKDIR /usr/src/app
15
15
 
@@ -28,6 +28,9 @@ RUN --mount=type=cache,target=/root/.bun/install/cache \
28
28
  # Copy the rest of the source code
29
29
  COPY . .
30
30
 
31
+ # Published agent skills are read from the application root at runtime.
32
+ RUN mkdir -p skills
33
+
31
34
  # Build the application
32
35
  RUN bun run build
33
36
 
@@ -45,7 +48,7 @@ RUN bun run build
45
48
  # A clean image rather than `FROM build`: the build stage's node_modules holds
46
49
  # devDependencies.
47
50
  # ==============================================================================
48
- FROM --platform=$BUILDPLATFORM oven/bun:1.4.3 AS deps
51
+ FROM --platform=$BUILDPLATFORM oven/bun:1.4.4 AS deps
49
52
 
50
53
  WORKDIR /usr/src/app
51
54
 
@@ -112,7 +115,7 @@ RUN rm -rf node_modules/@socketsecurity/bun-security-scanner
112
115
  # application. It uses a slim base image and only includes production
113
116
  # dependencies and build artifacts.
114
117
  # ==============================================================================
115
- FROM oven/bun:1.4.3-slim AS production
118
+ FROM oven/bun:1.4.4-slim AS production
116
119
 
117
120
  WORKDIR /usr/src/app
118
121
 
@@ -134,6 +137,7 @@ COPY --from=deps /usr/src/app/node_modules ./node_modules
134
137
 
135
138
  # Copy the compiled application code from the build stage
136
139
  COPY --from=build /usr/src/app/dist ./dist
140
+ COPY --from=build /usr/src/app/skills ./skills
137
141
 
138
142
  # Copy the mirror lifecycle scripts (mirror:init / mirror:refresh / mirror:verify)
139
143
  # and the shared context shim they import, then emit a runtime tsconfig so Bun
package/README.md CHANGED
@@ -1,13 +1,13 @@
1
1
  <div align="center">
2
2
  <h1>@cyanheads/congressgov-mcp-server</h1>
3
3
  <p><b>Access U.S. congressional data (bills, votes, members, committees) via MCP. STDIO or Streamable HTTP.</b>
4
- <div>11 Tools • 5 Resources • 2 Prompts</div>
4
+ <div>11 Tools • 6 Resources • 2 Prompts • 1 Skill</div>
5
5
  </p>
6
6
  </div>
7
7
 
8
8
  <div align="center">
9
9
 
10
- [![Version](https://img.shields.io/badge/Version-0.8.0-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/congressgov-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^2.3.1-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/congressgov-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/congressgov-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.4.3-blueviolet.svg?style=flat-square)](https://bun.sh/)
10
+ [![Version](https://img.shields.io/badge/Version-0.9.0-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/congressgov-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^2.4.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/congressgov-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/congressgov-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.4.4-blueviolet.svg?style=flat-square)](https://bun.sh/)
11
11
 
12
12
  </div>
13
13
 
@@ -29,7 +29,7 @@
29
29
 
30
30
  ## Overview
31
31
 
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, nominations, CRS and committee reports, and the Congressional Record. Browse legislative activity, read bill and report text, and follow the Senate confirmation pipeline from any MCP client. Runs as a stdio process, a local Streamable HTTP server, or the public hosted endpoint above.
32
+ US congressional data from Congress.gov and the Senate's official vote feed: bills, enacted laws, members, committees, roll call votes, nominations, CRS and committee reports, and the Congressional Record. Browse legislative activity, read bill and report text, and follow nominations through Senate confirmation.
33
33
 
34
34
  ### Tools
35
35
 
@@ -56,6 +56,7 @@ U.S. congressional data from the Congress.gov API v3 and the Senate's official v
56
56
  | `congress://member/{bioguideId}` | Member profile by bioguide ID |
57
57
  | `congress://bill/{congress}/{billType}/{billNumber}` | Bill detail by congress, type, and number |
58
58
  | `congress://committee/{committeeCode}` | Committee detail by committee code |
59
+ | `skill://congressgov-guide/SKILL.md` | Legislative research guide: identifier sources, discovery boundaries, votes, and document evidence |
59
60
 
60
61
  Bill, member, and committee data is also reachable through `congressgov_bill_lookup`, `congressgov_member_lookup`, and `congressgov_committee_lookup` (operation `get`), since many MCP clients are tool-only and never surface resources.
61
62
 
@@ -66,14 +67,18 @@ Bill, member, and committee data is also reachable through `congressgov_bill_loo
66
67
  | `congressgov_bill_analysis` | Structured framework for analyzing a bill |
67
68
  | `congressgov_legislative_research` | Research framework for a policy area across Congress |
68
69
 
70
+ ### Agent skill
71
+
72
+ [`congressgov-guide`](./skills/congressgov-guide/SKILL.md) guides research across bills, laws, members, committees, votes, and floor debate. It covers identifier provenance, discovery limits, and version-specific document evidence. The guide ships with plugin installs, npm, MCPB, and Docker, and is served over MCP through the Skills extension and its `skill://` resource.
73
+
69
74
  ## Capability reference
70
75
 
71
76
  ### `congressgov_bill_lookup` <sub>tool</sub>
72
77
 
73
78
  - `list` browses one `congress`, narrowed by `billType` and a `fromDateTime`/`toDateTime` range on the record's update date, newest first unless `order: 'oldest'`; `get`, `actions`, `amendments`, `cosponsors`, `committees`, `subjects`, `summaries`, `text`, `titles`, `related`, and `content` need `congress` + `billType` + `billNumber`
74
- - Copied bill-row keys `type` and `number` are accepted as `billType` and `billNumber`; bill type codes are case-insensitive, and `relatedbills` (any case) selects `related`. Send one name per field: canonical and alias keys together are rejected.
75
- - `content` reads the text version at `textVersionIndex` (0-based in `text` order, 0 is the most recent) and returns one character window in `content.text` with `totalCharacters`, `truncated`, and `nextOffset`
76
- - `summaries` takes an optional `versionCode` (`00` introduced, `49` public law) and applies the same page budget and row window as `congressgov_bill_summaries`, steered by `characterOffset`/`characterLimit`; a cut row carries `textTotalCharacters`, `textTruncated`, and `textNextOffset`
79
+ - `type` and `number` from a bill row are accepted as `billType` and `billNumber`; bill type codes are case-insensitive. Send one name per field, since canonical and alias keys together are rejected
80
+ - `content` reads the text version at `textVersionIndex` (0 is the most recent) and returns one character window in `content.text` with `totalCharacters`, `truncated`, and `nextOffset`
81
+ - `summaries` takes an optional `versionCode` (`00` introduced, `49` public law) and pages like `congressgov_bill_summaries`, using `characterOffset`/`characterLimit`
77
82
 
78
83
  ---
79
84
 
@@ -94,8 +99,7 @@ Bill, member, and committee data is also reachable through `congressgov_bill_loo
94
99
  ### `congressgov_committee_lookup` <sub>tool</sub>
95
100
 
96
101
  - `committeeCode` is a chamber prefix (`h`/`s`/`j`), letters, and a 2-digit suffix (e.g. `hsju00`); `get`, `bills`, `reports`, and the Senate-only `nominations` infer `chamber` from the prefix
97
- - A committee name in `committeeCode` resolves when exactly one committee matches, and otherwise returns the candidate rows with a notice; `list` with `filter` name-matches every committee in scope, past the 250-row page cap, and fuzzy hits carry `approximate: true`
98
- - Exact matches require every query token; typo matches require each token to match a name token at the similarity floor. Blank filters browse normally; unrelated tokens return no matches.
102
+ - A committee name in `committeeCode` resolves when exactly one committee matches, and otherwise returns candidate rows with a notice; `list` with `filter` name-matches every committee in scope, and fuzzy hits carry `approximate: true`
99
103
  - `bills` is newest first by default (`order`), and its rows carry no titles, so chain `congressgov_bill_lookup` `get` per row
100
104
 
101
105
  ---
@@ -126,7 +130,7 @@ Bill, member, and committee data is also reachable through `congressgov_bill_loo
126
130
  ### `congressgov_crs_reports` <sub>tool</sub>
127
131
 
128
132
  - `list` browses the catalog; `get` takes a `reportNumber` such as `R40097`, `RL33612`, or `IF12345`
129
- - `id`, `reportId`, and `report_id` are accepted as `reportNumber`. Send only one identifier key; canonical and alias keys together, or multiple aliases, are rejected.
133
+ - `id`, `reportId`, and `report_id` are accepted as `reportNumber`; send only one identifier key
130
134
  - `get` returns authors, topics, summary, and download formats
131
135
 
132
136
  ---
@@ -207,138 +211,52 @@ Built on [`@cyanheads/mcp-ts-core`](https://github.com/cyanheads/mcp-ts-core): s
207
211
  Congress.gov-specific:
208
212
 
209
213
  - Type-safe client for the Congress.gov REST API v3, plus a client for the Senate's LIS XML feed that backs Senate roll votes
210
- - The Congress.gov API has no keyword search, so tools browse by congress, type, date range, chamber, state, and district, and address bills by `congress` + `billType` + `billNumber`, members by `bioguideId`, and committees by system code; list operations page with `limit` 1–250 (default 20) and `offset`
211
- - `content` on bill text, committee reports, and Record articles reads `format` `text` (default) or `xml` through a `characterOffset`/`characterLimit` window (1–100,000 characters, default 25,000), fetched only from `www.congress.gov` under a 25 MB ceiling and a 30s deadline
212
- - Optional API key from [api.data.gov](https://api.data.gov/signup/): documented fallbacks are `DEMO_KEY` 30 requests/hour and 50/day per IP, registered keys 5,000/hour. Valid upstream hourly quota headers override the fallback; actual quotas vary
214
+ - The Congress.gov API has no keyword search, so tools browse by congress, type, date range, chamber, state, and district; list operations page with `limit` 1–250 (default 20) and `offset`
215
+ - `content` on bill text, committee reports, and Record articles reads `format` `text` (default) or `xml` in a `characterOffset`/`characterLimit` window (1–100,000 characters, default 25,000), fetched only from `www.congress.gov` under a 25 MB ceiling and a 30s deadline
216
+ - Optional API key from [api.data.gov](https://api.data.gov/signup/): `DEMO_KEY` allows 30 requests/hour and 50/day per IP, registered keys 5,000/hour
213
217
  - Opt-in local SQLite FTS5 mirror (`CONGRESS_MIRROR_ENABLED`) adds keyword search over bill titles and CRS summaries
214
218
 
215
219
  Agent-friendly output:
216
220
 
217
- - Every list response carries `effectiveQuery` and `totalCount`; a `notice` fires when nothing matched, and a page past the end says so in the rendered output
218
- - `list` rejects entity identities it would discard: bill `billNumber`, vote `voteNumber`, nomination `nominationNumber`, CRS/committee `reportNumber`, and Record `volumeNumber`. The `incompatible_identity` domain error names the detail operation to select or the field to remove; pagination and defaulted selectors remain accepted.
219
- - Exact character windows: `content` returns `offset`, `truncated`, and `nextOffset`, so walking a multi-megabyte bill never skips or repeats a character
220
- - Typed `content` failures (`document_unavailable`, `format_unavailable`, `document_fetch_failed`, `document_too_large`, `offset_past_end`) alongside the shared `not_found`, `rate_limited`, `invalid_request`, `upstream_error`, and `upstream_timeout` reasons, each with a recovery hint. Document byte ceilings and exhausted document/summary offsets use domain validation (-32007); malformed arguments remain protocol invalid parameters (-32602)
221
+ - Every list response carries `effectiveQuery` and `totalCount`, with a `notice` when nothing matched
222
+ - `list` rejects detail-only identifiers (`billNumber`, `voteNumber`, `nominationNumber`, `reportNumber`, `volumeNumber`) with an `incompatible_identity` error that names the operation to use instead
223
+ - `content` returns `offset`, `truncated`, and `nextOffset`, so walking a multi-megabyte bill never skips or repeats a character
224
+ - Typed failures (`document_unavailable`, `format_unavailable`, `document_fetch_failed`, `document_too_large`, `offset_past_end`, `not_found`, `rate_limited`, `invalid_request`, `upstream_error`, `upstream_timeout`), each with a recovery hint
221
225
 
222
226
  ## Getting started
223
227
 
224
- ### Public Hosted Instance
228
+ Connect to the hosted instance:
225
229
 
226
- A public instance is available at `https://congressgov.caseyjhand.com/mcp` — no installation required. Point any MCP client at it via Streamable HTTP:
227
-
228
- ```json
229
- {
230
- "mcpServers": {
231
- "congressgov-mcp-server": {
232
- "type": "streamable-http",
233
- "url": "https://congressgov.caseyjhand.com/mcp"
234
- }
235
- }
236
- }
230
+ ```sh
231
+ claude mcp add --transport http congressgov-mcp-server https://congressgov.caseyjhand.com/mcp
237
232
  ```
238
233
 
239
- ### Self-Hosted / Local
240
-
241
- Add the following to your MCP client configuration file.
234
+ Or run it locally:
242
235
 
243
- ```json
244
- {
245
- "mcpServers": {
246
- "congressgov-mcp-server": {
247
- "type": "stdio",
248
- "command": "bunx",
249
- "args": ["@cyanheads/congressgov-mcp-server@latest"],
250
- "env": {
251
- "MCP_TRANSPORT_TYPE": "stdio",
252
- "MCP_LOG_LEVEL": "info",
253
- "CONGRESS_API_KEY": "your-api-key"
254
- }
255
- }
256
- }
257
- }
236
+ ```sh
237
+ claude mcp add congressgov-mcp-server -- npx -y @cyanheads/congressgov-mcp-server
258
238
  ```
259
239
 
260
- Or with npx (no Bun required):
240
+ For other clients, add this to the MCP config file:
261
241
 
262
242
  ```json
263
243
  {
264
244
  "mcpServers": {
265
245
  "congressgov-mcp-server": {
266
- "type": "stdio",
267
246
  "command": "npx",
268
- "args": ["-y", "@cyanheads/congressgov-mcp-server@latest"],
269
- "env": {
270
- "MCP_TRANSPORT_TYPE": "stdio",
271
- "MCP_LOG_LEVEL": "info",
272
- "CONGRESS_API_KEY": "your-api-key"
273
- }
274
- }
275
- }
276
- }
277
- ```
278
-
279
- Or with Docker:
280
-
281
- ```json
282
- {
283
- "mcpServers": {
284
- "congressgov-mcp-server": {
285
- "type": "stdio",
286
- "command": "docker",
287
- "args": [
288
- "run", "-i", "--rm",
289
- "-e", "MCP_TRANSPORT_TYPE=stdio",
290
- "-e", "CONGRESS_API_KEY=your-api-key",
291
- "ghcr.io/cyanheads/congressgov-mcp-server:latest"
292
- ]
247
+ "args": ["-y", "@cyanheads/congressgov-mcp-server"]
293
248
  }
294
249
  }
295
250
  }
296
251
  ```
297
252
 
298
- For Streamable HTTP, set the transport and start the server:
299
-
300
- ```sh
301
- MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 CONGRESS_API_KEY=your-api-key bun run start:http
302
- # Server listens at http://localhost:3010/mcp
303
- ```
304
-
305
- ### Prerequisites
306
-
307
- - [Bun v1.4.0](https://bun.sh/) or higher (or Node.js v24+).
308
- - Optional: a free [api.data.gov key](https://api.data.gov/signup/) uses a documented fallback of 5,000 requests/hour instead of the demo fallback of 30/hour and 50/day per IP. Upstream hourly headers may advertise a different quota.
309
-
310
- ### Installation
311
-
312
- 1. **Clone the repository:**
313
-
314
- ```sh
315
- git clone https://github.com/cyanheads/congressgov-mcp-server.git
316
- ```
317
-
318
- 2. **Navigate into the directory:**
319
-
320
- ```sh
321
- cd congressgov-mcp-server
322
- ```
323
-
324
- 3. **Install dependencies:**
325
-
326
- ```sh
327
- bun install
328
- ```
329
-
330
- 4. **Configure environment:**
331
-
332
- ```sh
333
- cp .env.example .env
334
- # edit .env and set CONGRESS_API_KEY (and the mirror vars, if you want keyword search)
335
- ```
253
+ Optional: set `CONGRESS_API_KEY` to a free [api.data.gov key](https://api.data.gov/signup/) for 5,000 requests/hour instead of the demo key's 30/hour and 50/day per IP. For Docker or a source build, see [Running the server](#running-the-server).
336
254
 
337
255
  ## Configuration
338
256
 
339
257
  | Variable | Description | Default |
340
258
  |:---|:---|:---|
341
- | `CONGRESS_API_KEY` | API key from [api.data.gov](https://api.data.gov/signup/). Fallbacks: `DEMO_KEY` 30/hour and 50/day per IP; registered key 5,000/hour. Upstream hourly quota headers take precedence. | `DEMO_KEY` |
259
+ | `CONGRESS_API_KEY` | API key from [api.data.gov](https://api.data.gov/signup/). | `DEMO_KEY` |
342
260
  | `CONGRESS_API_BASE_URL` | Congress.gov API base URL. | `https://api.congress.gov/v3` |
343
261
  | `CONGRESS_MIRROR_ENABLED` | Enable the local bill search mirror and the `congressgov_search_bills` tool. | `false` |
344
262
  | `CONGRESS_MIRROR_PATH` | Filesystem path to the SQLite mirror index. | `.mirror/bills.sqlite3` |
@@ -360,6 +278,15 @@ See [`.env.example`](./.env.example) for the full list of optional overrides.
360
278
 
361
279
  ## Running the server
362
280
 
281
+ Requires [Bun v1.4.0](https://bun.sh/) or higher (or Node.js v24+).
282
+
283
+ ```sh
284
+ git clone https://github.com/cyanheads/congressgov-mcp-server.git
285
+ cd congressgov-mcp-server && bun install
286
+ cp .env.example .env
287
+ # Optionally set CONGRESS_API_KEY and the mirror variables in .env.
288
+ ```
289
+
363
290
  ### Local development
364
291
 
365
292
  - **Build and run the production version:**
@@ -390,17 +317,17 @@ See [`.env.example`](./.env.example) for the full list of optional overrides.
390
317
  ### Docker
391
318
 
392
319
  ```sh
393
- docker build -t congressgov-mcp-server .
394
- docker run --rm -e CONGRESS_API_KEY=your-api-key -p 3010:3010 congressgov-mcp-server
320
+ docker run --rm -e CONGRESS_API_KEY=your-api-key -p 3010:3010 ghcr.io/cyanheads/congressgov-mcp-server:latest
395
321
  ```
396
322
 
397
- 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. The image carries the mirror scripts, so `docker exec <container> bun run mirror:init` builds the index in place.
323
+ The image defaults to HTTP transport, stateless session mode, and logs to `/var/log/congressgov-mcp-server`. For stdio, use `docker run -i --rm -e MCP_TRANSPORT_TYPE=stdio ghcr.io/cyanheads/congressgov-mcp-server:latest`. To build locally, run `docker build -t congressgov-mcp-server .`; OpenTelemetry peer dependencies are installed by default, with `--build-arg OTEL_ENABLED=false` to omit them. The image carries the mirror scripts, so `docker exec <container> bun run mirror:init` builds the index in place.
398
324
 
399
325
  ## Project structure
400
326
 
401
327
  | Directory | Purpose |
402
328
  |:---|:---|
403
329
  | `src/index.ts` | `createApp()` entry point: registers tools, resources, and prompts, inits services, and schedules the mirror refresh. |
330
+ | `skills/` | Published legislative research guide for agents calling the server. |
404
331
  | `src/config/` | Server-specific environment variable parsing and validation with Zod. |
405
332
  | `src/mcp-server/tools/` | Tool definitions (`definitions/*.tool.ts`) plus shared input, formatting, and summary-window helpers. |
406
333
  | `src/mcp-server/resources/definitions/` | Resource definitions (`*.resource.ts`). |
@@ -0,0 +1,28 @@
1
+ ---
2
+ summary: "Framework errors preserve Markdown-bearing text, startup failures identify invalid configuration, and dependencies and maintenance tooling are refreshed."
3
+ breaking: false
4
+ security: false
5
+ ---
6
+
7
+ # 0.8.1 — 2026-10-25
8
+
9
+ ## Changed
10
+
11
+ - **Framework error rendering** escapes Markdown-bearing messages and recovery hints in `content[]`, preserving the original structured values.
12
+ - **Framework configuration failures** identify the environment variable and schema path at startup.
13
+ - **Maintenance tooling and references** sync with the framework, including audit attribution by the installed root version, configuration examples, and framework API guidance.
14
+ - **Hosted client examples** give separate Claude Code, Cline, Cursor, and Claude Desktop connection instructions.
15
+
16
+ ## Fixed
17
+
18
+ - **Large-document tests** verify each complete-document window independently, preserving exact text and continuation assertions without extending deadlines.
19
+
20
+ ## Dependencies
21
+
22
+ - `@cyanheads/mcp-ts-core` ^0.13.15 → ^0.13.16.
23
+ - `zod` ^4.6.5 → ^4.6.7.
24
+ - `@biomejs/biome` ^2.5.15 → ^2.6.2.
25
+ - `ignore` ^7.0.12 → ^7.0.13.
26
+ - `tsc-alias` ^1.9.7 → ^1.9.8.
27
+ - `vitest` ^5.0.3 → ^5.0.5.
28
+ - Bun 1.4.3 → 1.4.4 (`packageManager`, Docker stages, and README badge).
@@ -0,0 +1,25 @@
1
+ ---
2
+ summary: "Publish a legislative research guide over MCP and refresh framework and bundle delivery."
3
+ breaking: false
4
+ security: false
5
+ ---
6
+
7
+ # 0.9.0 — 2026-10-28
8
+
9
+ ## Added
10
+
11
+ - Publish congressgov-guide as the skill://congressgov-guide/SKILL.md MCP resource for legislative research workflows.
12
+ - **Agent Plugins manifests** add the root `plugin.json` and `mcp.json` pair alongside the existing client overlays.
13
+
14
+ ## Changed
15
+
16
+ - **MCPB delivery** excludes root development paths, dependency agent documentation, node-gyp build output, and build-only package files while retaining executable SDK skill modules ([mcp-ts-core #794](https://github.com/cyanheads/mcp-ts-core/issues/794)).
17
+ - **HTTP lifecycle** adopts the framework fix that releases request signals after responses finish.
18
+ - **Maintenance references** sync framework guidance, simplify installation examples, and correct legislative data and service documentation.
19
+
20
+ ## Dependencies
21
+
22
+ - `@cyanheads/mcp-ts-core` ^0.13.16 → ^0.13.18.
23
+ - `@biomejs/biome` ^2.6.2 → ^2.6.3.
24
+ - `ignore` ^7.0.13 → ^7.0.14.
25
+ - `tsc-alias` ^1.9.8 → ^1.9.9.
package/dist/index.js CHANGED
@@ -64,6 +64,7 @@ await createApp({
64
64
  name: 'congressgov-mcp-server',
65
65
  title: 'congressgov-mcp-server',
66
66
  sessionMode: 'stateless',
67
+ skills: 'skills',
67
68
  cacheHints,
68
69
  tools: [
69
70
  withSource(billLookupTool, 'tools', 'bill-lookup.tool.ts'),
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAQH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,0DAA0D,CAAC;AAC9F,OAAO,EAAE,yBAAyB,EAAE,MAAM,iEAAiE,CAAC;AAC5G,OAAO,EAAE,YAAY,EAAE,MAAM,qDAAqD,CAAC;AACnF,OAAO,EAAE,iBAAiB,EAAE,MAAM,2DAA2D,CAAC;AAC9F,OAAO,EAAE,iBAAiB,EAAE,MAAM,0DAA0D,CAAC;AAC7F,OAAO,EAAE,uBAAuB,EAAE,MAAM,iEAAiE,CAAC;AAC1G,OAAO,EAAE,cAAc,EAAE,MAAM,uDAAuD,CAAC;AACvF,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AACpF,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,mBAAmB,EAAE,MAAM,yDAAyD,CAAC;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,0DAA0D,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AACpF,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,aAAa,EAAE,MAAM,mDAAmD,CAAC;AAClF,OAAO,EAAE,eAAe,EAAE,MAAM,qDAAqD,CAAC;AACtF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAClF,OAAO,EAAE,qBAAqB,EAAE,MAAM,6DAA6D,CAAC;AACpG,OAAO,EACL,iBAAiB,EACjB,kBAAkB,GACnB,MAAM,uDAAuD,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,8CAA8C,CAAC;AAErF,MAAM,SAAS,GAAG,qDAAqD,CAAC;AACxE,MAAM,iBAAiB,GAAG,IAAI,eAAe,EAAE,CAAC;AAChD,IAAI,aAA2C,CAAC;AAEhD;;;;;GAKG;AACH,MAAM,MAAM,GAAG,CAAC,IAAuC,EAAE,IAAY,EAAE,EAAE,CACvE,GAAG,SAAS,6BAA6B,IAAI,gBAAgB,IAAI,EAAE,CAAC;AAEtE,MAAM,UAAU,GAAG,CACjB,GAAM,EACN,IAAuC,EACvC,IAAY,EACT,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;AAEpD;;;;;;;;;;;GAWG;AACH,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,UAAU,GAAG;IACjB,YAAY,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE;IAC7D,cAAc,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE;IAC/D,gBAAgB,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE;IACjE,0BAA0B,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE;IAC3E,iBAAiB,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE;IAClE,gBAAgB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE;CAC7B,CAAC;AAEhC,MAAM,SAAS,CAAC;IACd,IAAI,EAAE,wBAAwB;IAC9B,KAAK,EAAE,wBAAwB;IAC/B,WAAW,EAAE,WAAW;IACxB,MAAM,EAAE,QAAQ;IAChB,UAAU;IACV,KAAK,EAAE;QACL,UAAU,CAAC,cAAc,EAAE,OAAO,EAAE,qBAAqB,CAAC;QAC1D,UAAU,CAAC,eAAe,EAAE,OAAO,EAAE,sBAAsB,CAAC;QAC5D,UAAU,CAAC,gBAAgB,EAAE,OAAO,EAAE,uBAAuB,CAAC;QAC9D,UAAU,CAAC,mBAAmB,EAAE,OAAO,EAAE,0BAA0B,CAAC;QACpE,UAAU,CAAC,aAAa,EAAE,OAAO,EAAE,oBAAoB,CAAC;QACxD,UAAU,CAAC,qBAAqB,EAAE,OAAO,EAAE,4BAA4B,CAAC;QACxE,UAAU,CAAC,iBAAiB,EAAE,OAAO,EAAE,wBAAwB,CAAC;QAChE,UAAU,CAAC,cAAc,EAAE,OAAO,EAAE,qBAAqB,CAAC;QAC1D,UAAU,CAAC,oBAAoB,EAAE,OAAO,EAAE,2BAA2B,CAAC;QACtE,UAAU,CAAC,eAAe,EAAE,OAAO,EAAE,sBAAsB,CAAC;QAC5D,UAAU,CAAC,eAAe,EAAE,OAAO,EAAE,sBAAsB,CAAC;KAC7D;IACD,SAAS,EAAE;QACT,UAAU,CAAC,uBAAuB,EAAE,WAAW,EAAE,8BAA8B,CAAC;QAChF,UAAU,CAAC,iBAAiB,EAAE,WAAW,EAAE,wBAAwB,CAAC;QACpE,UAAU,CAAC,cAAc,EAAE,WAAW,EAAE,oBAAoB,CAAC;QAC7D,UAAU,CAAC,YAAY,EAAE,WAAW,EAAE,kBAAkB,CAAC;QACzD,UAAU,CAAC,iBAAiB,EAAE,WAAW,EAAE,uBAAuB,CAAC;KACpE;IACD,OAAO,EAAE;QACP,UAAU,CAAC,kBAAkB,EAAE,SAAS,EAAE,yBAAyB,CAAC;QACpE,UAAU,CAAC,yBAAyB,EAAE,SAAS,EAAE,gCAAgC,CAAC;KACnF;IACD,YAAY,EAAE,43BAA43B;IAC14B,OAAO,EAAE;QACP,QAAQ,EAAE,SAAS;QACnB,OAAO,EAAE,oEAAoE;QAC7E,WAAW,EAAE,KAAK;KACnB;IACD,KAAK,CAAC,KAAK,CAAC,IAAI;QACd,eAAe,EAAE,CAAC;QAClB,qBAAqB,EAAE,CAAC;QACxB,qBAAqB,EAAE,CAAC;QAExB;;;;;;WAMG;QACH,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,aAAa,EAAE,CAAC;YACzB,kBAAkB,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YACrF,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,KAAK,MAAM,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;gBACxE,MAAM,qBAAqB,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;YACxD,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,CAAC,QAAQ,CAAC,IAAI;QACjB,MAAM,MAAM,GAAG,eAAe,EAAE,CAAC;QACjC,IAAI,CAAC,MAAM,CAAC,aAAa;YAAE,OAAO;QAClC,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB,KAAK,MAAM,IAAI,MAAM,CAAC,iBAAiB,EAAE,CAAC;YACxE,gBAAgB,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;QAClD,CAAC;QACD,iBAAiB,CAAC,KAAK,EAAE,CAAC;QAC1B,oFAAoF;QACpF,MAAM,aAAa,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,iBAAiB,EAAE,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;IACnD,CAAC;CACF,CAAC,CAAC;AAEH,wEAAwE;AACxE,KAAK,UAAU,qBAAqB,CAAC,IAAY;IAC/C,MAAM,gBAAgB,CAAC,QAAQ,CAC7B,wBAAwB,EACxB,IAAI,EACJ,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,MAAM,CAAC,IAAI,CAAC,iDAAiD,EAAE,MAAM,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,iBAAiB,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC;YACzD,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,iBAAiB,CAAC,MAAM;SACjC,CAAC,CAAC;QACH,aAAa,GAAG,OAAO,CAAC;QACxB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC;QAC7B,MAAM,CAAC,IAAI,CACT,oDAAoD,MAAM,CAAC,cAAc,2BAA2B,MAAM,CAAC,KAAK,GAAG,EACnH,MAAM,CACP,CAAC;IACJ,CAAC,EACD,8EAA8E,CAC/E,CAAC;IACF,gBAAgB,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;AACnD,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/congressgov-mcp-server",
3
- "version": "0.8.0",
3
+ "version": "0.9.0",
4
4
  "description": "Access U.S. congressional data (bills, votes, members, committees) via MCP. STDIO or Streamable HTTP.",
5
5
  "mcpName": "io.github.cyanheads/congressgov-mcp-server",
6
6
  "type": "module",
@@ -11,6 +11,7 @@
11
11
  },
12
12
  "files": [
13
13
  "changelog/",
14
+ "skills/",
14
15
  "dist/",
15
16
  "!dist/*.mcpb",
16
17
  "scripts/_mirror-context.ts",
@@ -86,7 +87,7 @@
86
87
  "url": "git+https://github.com/cyanheads/congressgov-mcp-server.git"
87
88
  },
88
89
  "license": "Apache-2.0",
89
- "packageManager": "bun@1.4.3",
90
+ "packageManager": "bun@1.4.4",
90
91
  "engines": {
91
92
  "node": ">=24.0.0",
92
93
  "bun": ">=1.4.0"
@@ -95,21 +96,21 @@
95
96
  "access": "public"
96
97
  },
97
98
  "dependencies": {
98
- "@cyanheads/mcp-ts-core": "^0.13.15",
99
+ "@cyanheads/mcp-ts-core": "^0.13.18",
99
100
  "better-sqlite3": "^13.0.3",
100
101
  "fast-xml-parser": "^5.11.2",
101
102
  "node-cron": "^4.6.0",
102
103
  "pino-pretty": "^13.2.0",
103
- "zod": "^4.6.5"
104
+ "zod": "^4.6.7"
104
105
  },
105
106
  "devDependencies": {
106
- "@biomejs/biome": "^2.5.15",
107
+ "@biomejs/biome": "^2.6.3",
107
108
  "@socketsecurity/bun-security-scanner": "^1.1.3",
108
109
  "@types/node": "^26.6.5",
109
110
  "depcheck": "^1.4.7",
110
- "ignore": "^7.0.12",
111
- "tsc-alias": "^1.9.7",
111
+ "ignore": "^7.0.14",
112
+ "tsc-alias": "^1.9.9",
112
113
  "typescript": "^7.0.2",
113
- "vitest": "^5.0.3"
114
+ "vitest": "^5.0.5"
114
115
  }
115
116
  }
package/server.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/cyanheads/congressgov-mcp-server",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.8.0",
9
+ "version": "0.9.0",
10
10
  "remotes": [
11
11
  {
12
12
  "type": "streamable-http",
@@ -19,7 +19,7 @@
19
19
  "registryBaseUrl": "https://registry.npmjs.org",
20
20
  "identifier": "@cyanheads/congressgov-mcp-server",
21
21
  "runtimeHint": "npx",
22
- "version": "0.8.0",
22
+ "version": "0.9.0",
23
23
  "environmentVariables": [
24
24
  {
25
25
  "name": "CONGRESS_API_KEY",
@@ -44,7 +44,7 @@
44
44
  "registryBaseUrl": "https://registry.npmjs.org",
45
45
  "identifier": "@cyanheads/congressgov-mcp-server",
46
46
  "runtimeHint": "npx",
47
- "version": "0.8.0",
47
+ "version": "0.9.0",
48
48
  "environmentVariables": [
49
49
  {
50
50
  "name": "MCP_TRANSPORT_TYPE",
@@ -0,0 +1,50 @@
1
+ ---
2
+ name: congressgov-guide
3
+ description: Use congressgov_* tools for legislative research across bills, enacted laws, members, committees, votes, and Congressional Record documents. Resolve linked identifiers, select the relevant document version, and check discovery coverage before reporting absence.
4
+ license: Apache-2.0
5
+ metadata:
6
+ author: "cyanheads"
7
+ version: "1.0"
8
+ ---
9
+
10
+ ## Scope
11
+
12
+ Use for U.S. congressional research that follows legislation into its sponsors, committees, votes, reports, or floor debate. A topic alone needs a discovery path: the optional bill mirror searches titles and CRS summaries, not full bill text, CRS reports, or the Congressional Record.
13
+
14
+ ## Identifiers
15
+
16
+ Carry identifiers from returned records across tool calls:
17
+
18
+ | Entity | Provenance |
19
+ |:---|:---|
20
+ | Bill | Congress, bill type, and bill number from bill discovery, member portfolios, or related bills |
21
+ | Member | `bioguideId` from member discovery or a bill's sponsors and cosponsors |
22
+ | Committee | `systemCode` from committee discovery; resolve a committee name and inspect the candidates before following its legislation |
23
+ | Enacted law | `laws[].number` on an enacted-law row; the row's own bill number identifies the origin bill |
24
+ | Roll call | Chamber, congress, session, and roll number from vote discovery; retain the complete identity when reading detail and positions |
25
+ | Record article | Volume and issue from Record discovery, then the article's absolute position within the issue |
26
+
27
+ ## Gates
28
+
29
+ - Before topical discovery, check whether `congressgov_search_bills` is offered. If absent, obtain a bill, member, committee, or CRS report seed; do not send a topic to browse-only tools. Committee name matching resolves committee names, not policy topics.
30
+ - Before reporting no relevant bills, inspect search notices and coverage. An unbuilt mirror returns no results, and a ready mirror covers a bounded congress window and only titles and summaries. Broaden overly specific terms; report the search boundary with any negative finding.
31
+ - Before interpreting recent activity, distinguish a record's update date from its `latestAction.actionDate`. The update date does not establish when legislative action occurred.
32
+ - Before comparing provisions or quoting legislation, select the relevant published text version and inspect its label and any supplied date. A date may be absent; do not infer one from the bill's update date. A discovery preview or CRS summary is not the bill text; preserve the version and source URL with the evidence.
33
+ - Before interpreting a member's vote as support for a bill, inspect the roll call's question, associated measure, and result. Match the requested chamber and session; a vote associated with a bill does not by itself establish final passage.
34
+ - Before concluding a committee was resolved, inspect whether the response contains the requested detail or candidate rows. Choose a candidate by its returned name, chamber, and code; approximate matches need the same check.
35
+
36
+ ## Core chain
37
+
38
+ Start from a discovered bill identity and read `congressgov_bill_lookup` detail. Use its summaries for orientation and its latest action for status; inspect published text when the answer depends on a provision. Follow sponsor identities into `congressgov_member_lookup` and related bill identities back into bill lookup. Resolve committees through committee discovery. Keep each claim attached to its bill and version when combining findings across these branches.
39
+
40
+ ## Workflows
41
+
42
+ **Topic research.** When available, use `congressgov_search_bills` to obtain candidate bills, then verify candidates through live bill lookup. Search terms are AND-combined ordinary text; use fewer terms or separate searches for alternatives rather than FTS Boolean operators. Follow related bills and relevant sponsor portfolios to widen the investigation. Search silence says nothing about whether CRS analysis or floor debate exists.
43
+
44
+ **Enacted law.** Use `congressgov_enacted_laws` to resolve a law citation, then follow the returned origin bill through bill lookup. Keep the law citation and bill identity distinct. Read the intended published version before describing the enacted provisions.
45
+
46
+ **Member voting.** Resolve the person through member discovery or a bill's sponsor records. Find the relevant roll call with `congressgov_roll_votes`, inspect its detail, then read positions for that same roll call. House data comes from Congress.gov and Senate data from the Senate LIS feed; inspect the returned roster fields before joining them to member profiles.
47
+
48
+ **Floor debate.** Navigate `congressgov_daily_record` from volumes to issues to articles. When an article comes from a later page, its content selection uses the absolute issue position, not its position within that page. Read the selected article's content and retain its title and source URL.
49
+
50
+ **Document evidence.** Bill and committee-report text listings expose versions or formats; they do not contain the document body. Use the corresponding content operation to read it. Continue with the returned content offset while preserving the same document selection and format. Summary text has a separate continuation offset: use the summary row's continuation and retain its version code instead of advancing the list page. Distinguish an unfinished text window from the end of a list.