@cyanheads/congressgov-mcp-server 0.8.1 → 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,10 +1,10 @@
1
1
  # Agent Protocol
2
2
 
3
3
  **Server:** congressgov-mcp-server
4
- **Version:** 0.8.1
5
- **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.16`
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
7
+ **MCP SDK:** `@modelcontextprotocol/server` ^2.4.0
8
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.
@@ -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) |
@@ -334,7 +345,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
334
345
 
335
346
  ## Bundling
336
347
 
337
- `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`.
338
349
 
339
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.
340
351
 
@@ -400,6 +411,7 @@ The `release-and-publish` run handles npm, MCP Registry, bundle, GitHub Release,
400
411
  - [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
401
412
  - [ ] Registered in `createApp()` arrays (directly or via barrel exports)
402
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'`
403
415
  - [ ] `.codex-plugin/plugin.json` populated — `name` and `interface.displayName` = unscoped repo name; `version`, `description`, `repository`, `license` and `interface.shortDescription` from `package.json`
404
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
405
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,10 +1,10 @@
1
1
  # Agent Protocol
2
2
 
3
3
  **Server:** congressgov-mcp-server
4
- **Version:** 0.8.1
5
- **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.16`
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
7
+ **MCP SDK:** `@modelcontextprotocol/server` ^2.4.0
8
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.
@@ -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) |
@@ -334,7 +345,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
334
345
 
335
346
  ## Bundling
336
347
 
337
- `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`.
338
349
 
339
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.
340
351
 
@@ -400,6 +411,7 @@ The `release-and-publish` run handles npm, MCP Registry, bundle, GitHub Release,
400
411
  - [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
401
412
  - [ ] Registered in `createApp()` arrays (directly or via barrel exports)
402
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'`
403
415
  - [ ] `.codex-plugin/plugin.json` populated — `name` and `interface.displayName` = unscoped repo name; `version`, `description`, `repository`, `license` and `interface.shortDescription` from `package.json`
404
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
405
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
@@ -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
 
@@ -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.1-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.4-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
 
@@ -56,6 +56,7 @@ US congressional data from Congress.gov and the Senate's official vote feed: bil
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,6 +67,10 @@ 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>
@@ -220,140 +225,32 @@ Agent-friendly output:
220
225
 
221
226
  ## Getting started
222
227
 
223
- ### Public Hosted Instance
224
-
225
- A public instance is available at `https://congressgov.caseyjhand.com/mcp` — no installation required. It serves Streamable HTTP; each client takes its own config shape.
226
-
227
- For Claude Code:
228
+ Connect to the hosted instance:
228
229
 
229
230
  ```sh
230
231
  claude mcp add --transport http congressgov-mcp-server https://congressgov.caseyjhand.com/mcp
231
232
  ```
232
233
 
233
- For Cline (`cline_mcp_settings.json`):
234
+ Or run it locally:
234
235
 
235
- ```json
236
- {
237
- "mcpServers": {
238
- "congressgov-mcp-server": {
239
- "type": "streamableHttp",
240
- "url": "https://congressgov.caseyjhand.com/mcp"
241
- }
242
- }
243
- }
244
- ```
245
-
246
- For Cursor (`mcp.json`):
247
-
248
- ```json
249
- {
250
- "mcpServers": {
251
- "congressgov-mcp-server": {
252
- "url": "https://congressgov.caseyjhand.com/mcp"
253
- }
254
- }
255
- }
256
- ```
257
-
258
- Claude Desktop adds remote servers under Settings → Connectors.
259
-
260
- ### Self-Hosted / Local
261
-
262
- Add the following to your MCP client configuration file.
263
-
264
- ```json
265
- {
266
- "mcpServers": {
267
- "congressgov-mcp-server": {
268
- "type": "stdio",
269
- "command": "bunx",
270
- "args": ["@cyanheads/congressgov-mcp-server@latest"],
271
- "env": {
272
- "MCP_TRANSPORT_TYPE": "stdio",
273
- "MCP_LOG_LEVEL": "info",
274
- "CONGRESS_API_KEY": "your-api-key"
275
- }
276
- }
277
- }
278
- }
236
+ ```sh
237
+ claude mcp add congressgov-mcp-server -- npx -y @cyanheads/congressgov-mcp-server
279
238
  ```
280
239
 
281
- Or with npx (no Bun required):
240
+ For other clients, add this to the MCP config file:
282
241
 
283
242
  ```json
284
243
  {
285
244
  "mcpServers": {
286
245
  "congressgov-mcp-server": {
287
- "type": "stdio",
288
246
  "command": "npx",
289
- "args": ["-y", "@cyanheads/congressgov-mcp-server@latest"],
290
- "env": {
291
- "MCP_TRANSPORT_TYPE": "stdio",
292
- "MCP_LOG_LEVEL": "info",
293
- "CONGRESS_API_KEY": "your-api-key"
294
- }
295
- }
296
- }
297
- }
298
- ```
299
-
300
- Or with Docker:
301
-
302
- ```json
303
- {
304
- "mcpServers": {
305
- "congressgov-mcp-server": {
306
- "type": "stdio",
307
- "command": "docker",
308
- "args": [
309
- "run", "-i", "--rm",
310
- "-e", "MCP_TRANSPORT_TYPE=stdio",
311
- "-e", "CONGRESS_API_KEY=your-api-key",
312
- "ghcr.io/cyanheads/congressgov-mcp-server:latest"
313
- ]
247
+ "args": ["-y", "@cyanheads/congressgov-mcp-server"]
314
248
  }
315
249
  }
316
250
  }
317
251
  ```
318
252
 
319
- For Streamable HTTP, set the transport and start the server:
320
-
321
- ```sh
322
- MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 CONGRESS_API_KEY=your-api-key bun run start:http
323
- # Server listens at http://localhost:3010/mcp
324
- ```
325
-
326
- ### Prerequisites
327
-
328
- - [Bun v1.4.0](https://bun.sh/) or higher (or Node.js v24+).
329
- - Optional: a free [api.data.gov key](https://api.data.gov/signup/) raises the limit to 5,000 requests/hour from the demo key's 30/hour and 50/day per IP.
330
-
331
- ### Installation
332
-
333
- 1. **Clone the repository:**
334
-
335
- ```sh
336
- git clone https://github.com/cyanheads/congressgov-mcp-server.git
337
- ```
338
-
339
- 2. **Navigate into the directory:**
340
-
341
- ```sh
342
- cd congressgov-mcp-server
343
- ```
344
-
345
- 3. **Install dependencies:**
346
-
347
- ```sh
348
- bun install
349
- ```
350
-
351
- 4. **Configure environment:**
352
-
353
- ```sh
354
- cp .env.example .env
355
- # edit .env and set CONGRESS_API_KEY (and the mirror vars, if you want keyword search)
356
- ```
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).
357
254
 
358
255
  ## Configuration
359
256
 
@@ -381,6 +278,15 @@ See [`.env.example`](./.env.example) for the full list of optional overrides.
381
278
 
382
279
  ## Running the server
383
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
+
384
290
  ### Local development
385
291
 
386
292
  - **Build and run the production version:**
@@ -411,17 +317,17 @@ See [`.env.example`](./.env.example) for the full list of optional overrides.
411
317
  ### Docker
412
318
 
413
319
  ```sh
414
- docker build -t congressgov-mcp-server .
415
- 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
416
321
  ```
417
322
 
418
- 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.
419
324
 
420
325
  ## Project structure
421
326
 
422
327
  | Directory | Purpose |
423
328
  |:---|:---|
424
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. |
425
331
  | `src/config/` | Server-specific environment variable parsing and validation with Zod. |
426
332
  | `src/mcp-server/tools/` | Tool definitions (`definitions/*.tool.ts`) plus shared input, formatting, and summary-window helpers. |
427
333
  | `src/mcp-server/resources/definitions/` | Resource definitions (`*.resource.ts`). |
@@ -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":";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,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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/congressgov-mcp-server",
3
- "version": "0.8.1",
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",
@@ -95,7 +96,7 @@
95
96
  "access": "public"
96
97
  },
97
98
  "dependencies": {
98
- "@cyanheads/mcp-ts-core": "^0.13.16",
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",
@@ -103,12 +104,12 @@
103
104
  "zod": "^4.6.7"
104
105
  },
105
106
  "devDependencies": {
106
- "@biomejs/biome": "^2.6.2",
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.13",
111
- "tsc-alias": "^1.9.8",
111
+ "ignore": "^7.0.14",
112
+ "tsc-alias": "^1.9.9",
112
113
  "typescript": "^7.0.2",
113
114
  "vitest": "^5.0.5"
114
115
  }
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.1",
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.1",
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.1",
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.