@cyanheads/congressgov-mcp-server 0.3.23 → 0.3.25

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.
Files changed (56) hide show
  1. package/AGENTS.md +1 -1
  2. package/CLAUDE.md +1 -1
  3. package/README.md +1 -1
  4. package/dist/mcp-server/tools/definitions/bill-lookup.tool.d.ts +25 -1
  5. package/dist/mcp-server/tools/definitions/bill-lookup.tool.d.ts.map +1 -1
  6. package/dist/mcp-server/tools/definitions/bill-lookup.tool.js +2 -1
  7. package/dist/mcp-server/tools/definitions/bill-lookup.tool.js.map +1 -1
  8. package/dist/mcp-server/tools/definitions/bill-summaries.tool.d.ts +25 -1
  9. package/dist/mcp-server/tools/definitions/bill-summaries.tool.d.ts.map +1 -1
  10. package/dist/mcp-server/tools/definitions/bill-summaries.tool.js +2 -1
  11. package/dist/mcp-server/tools/definitions/bill-summaries.tool.js.map +1 -1
  12. package/dist/mcp-server/tools/definitions/committee-lookup.tool.d.ts +25 -1
  13. package/dist/mcp-server/tools/definitions/committee-lookup.tool.d.ts.map +1 -1
  14. package/dist/mcp-server/tools/definitions/committee-lookup.tool.js +2 -1
  15. package/dist/mcp-server/tools/definitions/committee-lookup.tool.js.map +1 -1
  16. package/dist/mcp-server/tools/definitions/committee-reports.tool.d.ts +25 -1
  17. package/dist/mcp-server/tools/definitions/committee-reports.tool.d.ts.map +1 -1
  18. package/dist/mcp-server/tools/definitions/committee-reports.tool.js +2 -1
  19. package/dist/mcp-server/tools/definitions/committee-reports.tool.js.map +1 -1
  20. package/dist/mcp-server/tools/definitions/crs-reports.tool.d.ts +25 -1
  21. package/dist/mcp-server/tools/definitions/crs-reports.tool.d.ts.map +1 -1
  22. package/dist/mcp-server/tools/definitions/crs-reports.tool.js +2 -1
  23. package/dist/mcp-server/tools/definitions/crs-reports.tool.js.map +1 -1
  24. package/dist/mcp-server/tools/definitions/daily-record.tool.d.ts +25 -1
  25. package/dist/mcp-server/tools/definitions/daily-record.tool.d.ts.map +1 -1
  26. package/dist/mcp-server/tools/definitions/daily-record.tool.js +2 -1
  27. package/dist/mcp-server/tools/definitions/daily-record.tool.js.map +1 -1
  28. package/dist/mcp-server/tools/definitions/enacted-laws.tool.d.ts +25 -1
  29. package/dist/mcp-server/tools/definitions/enacted-laws.tool.d.ts.map +1 -1
  30. package/dist/mcp-server/tools/definitions/enacted-laws.tool.js +2 -1
  31. package/dist/mcp-server/tools/definitions/enacted-laws.tool.js.map +1 -1
  32. package/dist/mcp-server/tools/definitions/member-lookup.tool.d.ts +25 -1
  33. package/dist/mcp-server/tools/definitions/member-lookup.tool.d.ts.map +1 -1
  34. package/dist/mcp-server/tools/definitions/member-lookup.tool.js +2 -1
  35. package/dist/mcp-server/tools/definitions/member-lookup.tool.js.map +1 -1
  36. package/dist/mcp-server/tools/definitions/roll-votes.tool.d.ts +25 -1
  37. package/dist/mcp-server/tools/definitions/roll-votes.tool.d.ts.map +1 -1
  38. package/dist/mcp-server/tools/definitions/roll-votes.tool.js +11 -20
  39. package/dist/mcp-server/tools/definitions/roll-votes.tool.js.map +1 -1
  40. package/dist/mcp-server/tools/definitions/senate-nominations.tool.d.ts +25 -1
  41. package/dist/mcp-server/tools/definitions/senate-nominations.tool.d.ts.map +1 -1
  42. package/dist/mcp-server/tools/definitions/senate-nominations.tool.js +2 -1
  43. package/dist/mcp-server/tools/definitions/senate-nominations.tool.js.map +1 -1
  44. package/dist/mcp-server/tools/format-helpers.d.ts.map +1 -1
  45. package/dist/mcp-server/tools/format-helpers.js +62 -20
  46. package/dist/mcp-server/tools/format-helpers.js.map +1 -1
  47. package/dist/mcp-server/tools/tool-helpers.d.ts +34 -0
  48. package/dist/mcp-server/tools/tool-helpers.d.ts.map +1 -1
  49. package/dist/mcp-server/tools/tool-helpers.js +63 -3
  50. package/dist/mcp-server/tools/tool-helpers.js.map +1 -1
  51. package/dist/services/congress-api/congress-api-service.d.ts +3 -1
  52. package/dist/services/congress-api/congress-api-service.d.ts.map +1 -1
  53. package/dist/services/congress-api/congress-api-service.js +89 -14
  54. package/dist/services/congress-api/congress-api-service.js.map +1 -1
  55. package/package.json +1 -1
  56. package/server.json +3 -3
@@ -23,7 +23,31 @@ export declare const memberLookupTool: import("@cyanheads/mcp-ts-core").ToolDefi
23
23
  count: z.ZodNumber;
24
24
  nextOffset: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
25
25
  }, z.core.$strip>>;
26
- }, z.core.$loose>, undefined, {
26
+ }, z.core.$loose>, readonly [{
27
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
28
+ readonly reason: "not_found";
29
+ readonly retryable: false;
30
+ readonly when: "A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov.";
31
+ readonly recovery: "Use the tool's list or browse operation to discover valid identifiers, then retry with one that exists.";
32
+ }, {
33
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.RateLimited;
34
+ readonly reason: "rate_limited";
35
+ readonly retryable: true;
36
+ readonly when: "The Congress.gov API rate limit (5,000 requests/hour per key) was exceeded.";
37
+ readonly recovery: "Wait for the hourly rate-limit window to reset before retrying, or reduce the request frequency.";
38
+ }, {
39
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
40
+ readonly reason: "invalid_request";
41
+ readonly retryable: false;
42
+ readonly when: "Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape.";
43
+ readonly recovery: "Check parameter formats: dates must be ISO 8601 like 2026-05-01T00:00:00Z and identifiers must match their documented shape.";
44
+ }, {
45
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ServiceUnavailable;
46
+ readonly reason: "upstream_error";
47
+ readonly retryable: true;
48
+ readonly when: "Congress.gov returned an unexpected error (5xx or another non-2xx status).";
49
+ readonly recovery: "Retry after a short delay; if the failure persists the Congress.gov service may be temporarily degraded.";
50
+ }], {
27
51
  effectiveQuery: z.ZodString;
28
52
  totalCount: z.ZodNumber;
29
53
  notice: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"member-lookup.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/member-lookup.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAWjD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;EAmH3B,CAAC"}
1
+ {"version":3,"file":"member-lookup.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/member-lookup.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAYjD,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoH3B,CAAC"}
@@ -5,11 +5,12 @@
5
5
  import { tool, z } from '@cyanheads/mcp-ts-core';
6
6
  import { validationError } from '@cyanheads/mcp-ts-core/errors';
7
7
  import { formatMembers } from '../../../mcp-server/tools/format-helpers.js';
8
- import { buildEffectiveQuery, listEnrichment, listOrDetail, } from '../../../mcp-server/tools/tool-helpers.js';
8
+ import { buildEffectiveQuery, congressErrorContracts, listEnrichment, listOrDetail, } from '../../../mcp-server/tools/tool-helpers.js';
9
9
  import { getCongressApi } from '../../../services/congress-api/congress-api-service.js';
10
10
  export const memberLookupTool = tool('congressgov_member_lookup', {
11
11
  description: `Discover congressional members and their legislative activity. No name search. For 'list', filter by stateCode (optionally with district), by congress, or by both together (e.g., 118th Congress + CA, or CA district 12 in the 118th). Add currentMember=true to restrict to currently serving members. Once you have a bioguideId, use 'get' for full profile or 'sponsored'/'cosponsored' for their legislative portfolio.`,
12
12
  annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
13
+ errors: congressErrorContracts,
13
14
  input: z.object({
14
15
  operation: z
15
16
  .enum(['list', 'get', 'sponsored', 'cosponsored'])
@@ -1 +1 @@
1
- {"version":3,"file":"member-lookup.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/member-lookup.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"member-lookup.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/member-lookup.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EACL,mBAAmB,EACnB,sBAAsB,EACtB,cAAc,EACd,YAAY,GACb,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AAEjF,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC,2BAA2B,EAAE;IAChE,WAAW,EAAE,gaAAga;IAC7a,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAC9E,MAAM,EAAE,sBAAsB;IAC9B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,CAAC;aACT,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC,CAAC;aACjD,QAAQ,CAAC,yBAAyB,CAAC;QACtC,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,qFAAqF,CACtF;QACH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC1F,SAAS,EAAE,CAAC;aACT,MAAM,EAAE;aACR,MAAM,CAAC,CAAC,CAAC;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,2CAA2C,CAAC;QACxD,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,EAAE;aACV,QAAQ,CAAC,wEAAwE,CAAC;QACrF,aAAa,EAAE,CAAC;aACb,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CACP,uFAAuF,CACxF;QACH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACzF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KAC1E,CAAC;IACF,MAAM,EAAE,YAAY,CAClB,QAAQ,EACR,8IAA8I,CAC/I;IACD,UAAU,EAAE,cAAc;IAC1B,MAAM,EAAE,aAAa;IAErB,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;QAE7B,IAAI,KAAK,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;gBACrD,MAAM,eAAe,CACnB,yGAAyG,EACzG,EAAE,KAAK,EAAE,WAAW,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CACjD,CAAC;YACJ,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,WAAW,CAClC;gBACE,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,aAAa,EAAE,KAAK,CAAC,aAAa;gBAClC,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,EACD,GAAG,CACJ,CAAC;YACF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YAC9D,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,mBAAmB,CAAC,SAAS,EAAE;gBAC7B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,aAAa,EAAE,KAAK,CAAC,aAAa;aACnC,CAAC,CACH,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;gBAC1B,GAAG,CAAC,MAAM,CAAC,MAAM,CACf,mGAAmG,CACpG,CAAC;YACJ,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,eAAe,CACnB,QAAQ,KAAK,CAAC,SAAS,6FAA6F,EACpH,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CACpD,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;YAC1D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,kBAAkB,EAAE,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YACnE,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9C,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,MAAM,IAAI,GACR,KAAK,CAAC,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,yBAAyB,CAAC;QACxF,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,oBAAoB,CAC3C;YACE,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,IAAI;YACJ,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,EACD,GAAG,CACJ,CAAC;QACF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,8BAA8B,EAAE;YAC3C,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,IAAI,EAAE,KAAK,CAAC,SAAS;SACtB,CAAC,CAAC;QACH,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,SAAS,oBAAoB,KAAK,CAAC,UAAU,EAAE,CAAC,CAAC;QAC1E,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;YAC1B,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,SAAS,iCAAiC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;QAC/F,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC"}
@@ -24,7 +24,31 @@ export declare const rollVotesTool: import("@cyanheads/mcp-ts-core").ToolDefinit
24
24
  count: z.ZodNumber;
25
25
  nextOffset: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
26
26
  }, z.core.$strip>>;
27
- }, z.core.$loose>, undefined, {
27
+ }, z.core.$loose>, readonly [{
28
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
29
+ readonly reason: "not_found";
30
+ readonly retryable: false;
31
+ readonly when: "A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov.";
32
+ readonly recovery: "Use the tool's list or browse operation to discover valid identifiers, then retry with one that exists.";
33
+ }, {
34
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.RateLimited;
35
+ readonly reason: "rate_limited";
36
+ readonly retryable: true;
37
+ readonly when: "The Congress.gov API rate limit (5,000 requests/hour per key) was exceeded.";
38
+ readonly recovery: "Wait for the hourly rate-limit window to reset before retrying, or reduce the request frequency.";
39
+ }, {
40
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
41
+ readonly reason: "invalid_request";
42
+ readonly retryable: false;
43
+ readonly when: "Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape.";
44
+ readonly recovery: "Check parameter formats: dates must be ISO 8601 like 2026-05-01T00:00:00Z and identifiers must match their documented shape.";
45
+ }, {
46
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ServiceUnavailable;
47
+ readonly reason: "upstream_error";
48
+ readonly retryable: true;
49
+ readonly when: "Congress.gov returned an unexpected error (5xx or another non-2xx status).";
50
+ readonly recovery: "Retry after a short delay; if the failure persists the Congress.gov service may be temporarily degraded.";
51
+ }], {
28
52
  effectiveQuery: z.ZodString;
29
53
  totalCount: z.ZodNumber;
30
54
  notice: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"roll-votes.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/roll-votes.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAWjD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;EAyHxB,CAAC"}
1
+ {"version":3,"file":"roll-votes.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/roll-votes.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAYjD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgHxB,CAAC"}
@@ -5,11 +5,12 @@
5
5
  import { tool, z } from '@cyanheads/mcp-ts-core';
6
6
  import { validationError } from '@cyanheads/mcp-ts-core/errors';
7
7
  import { formatVotes } from '../../../mcp-server/tools/format-helpers.js';
8
- import { buildEffectiveQuery, listEnrichment, listOrDetail, } from '../../../mcp-server/tools/tool-helpers.js';
8
+ import { buildEffectiveQuery, congressErrorContracts, listEnrichment, listOrDetail, } from '../../../mcp-server/tools/tool-helpers.js';
9
9
  import { getCongressApi } from '../../../services/congress-api/congress-api-service.js';
10
10
  export const rollVotesTool = tool('congressgov_roll_votes', {
11
11
  description: `Retrieve House roll call vote data and individual member voting positions — House-only, as Senate vote data is not yet in the Congress.gov API. Use 'list' to find votes by congress and session (defaults to most-recently-updated first), 'get' for vote details (question, result, associated bill), or 'members' for how each representative voted.`,
12
12
  annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
13
+ errors: congressErrorContracts,
13
14
  input: z.object({
14
15
  operation: z.enum(['list', 'get', 'members']).describe('Which data to retrieve.'),
15
16
  congress: z.number().int().positive().describe('Congress number.'),
@@ -76,29 +77,19 @@ export const rollVotesTool = tool('congressgov_roll_votes', {
76
77
  session: input.session,
77
78
  voteNumber: input.voteNumber,
78
79
  };
79
- const result = input.operation === 'members'
80
- ? await api.getVoteMembers({ ...voteParams, limit: input.limit, offset: input.offset }, ctx)
81
- : await api.getVote(voteParams, ctx);
82
- ctx.log.info('Vote retrieved', {
83
- ...voteParams,
84
- operation: input.operation,
85
- });
86
- if (input.operation === 'get') {
87
- ctx.enrich.echo(`roll call ${input.voteNumber} in the ${input.congress}th Congress, session ${input.session}`);
88
- ctx.enrich.total(1);
89
- return result;
90
- }
91
80
  if (input.operation === 'members') {
92
- const membersResult = result;
81
+ const membersResult = await api.getVoteMembers({ ...voteParams, limit: input.limit, offset: input.offset }, ctx);
82
+ ctx.log.info('Vote retrieved', { ...voteParams, operation: input.operation });
93
83
  ctx.enrich.echo(`member votes for roll ${input.voteNumber} in the ${input.congress}th Congress, session ${input.session}`);
94
- ctx.enrich.total(membersResult.pagination?.count ?? 0);
95
- const voteResults = Array.isArray(membersResult.vote?.results)
96
- ? membersResult.vote.results
97
- : [];
98
- if (voteResults.length === 0)
84
+ ctx.enrich.total(membersResult.pagination.count);
85
+ if (membersResult.data.length === 0)
99
86
  ctx.enrich.notice(`No member vote records found for roll ${input.voteNumber}.`);
100
- return result;
87
+ return membersResult;
101
88
  }
89
+ const result = await api.getVote(voteParams, ctx);
90
+ ctx.log.info('Vote retrieved', { ...voteParams, operation: input.operation });
91
+ ctx.enrich.echo(`roll call ${input.voteNumber} in the ${input.congress}th Congress, session ${input.session}`);
92
+ ctx.enrich.total(1);
102
93
  return result;
103
94
  },
104
95
  });
@@ -1 +1 @@
1
- {"version":3,"file":"roll-votes.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/roll-votes.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EACL,mBAAmB,EACnB,cAAc,EACd,YAAY,GACb,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AAEjF,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,CAAC,wBAAwB,EAAE;IAC1D,WAAW,EAAE,yVAAyV;IACtW,WAAW,EAAE,EAAE,YAAY,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE;IAC9E,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC;QACd,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACjF,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAClE,OAAO,EAAE,CAAC;aACP,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,CAAC,CAAC;aACN,QAAQ,CAAC,yEAAyE,CAAC;QACtF,UAAU,EAAE,CAAC;aACV,MAAM,EAAE;aACR,GAAG,EAAE;aACL,QAAQ,EAAE;aACV,QAAQ,EAAE;aACV,QAAQ,CAAC,0DAA0D,CAAC;QACvE,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;aAC1B,OAAO,CAAC,QAAQ,CAAC;aACjB,QAAQ,CACP,mNAAmN,CACpN;QACH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACzF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KAC1E,CAAC;IACF,MAAM,EAAE,YAAY,CAClB,MAAM,EACN,4GAA4G,CAC7G;IACD,UAAU,EAAE,cAAc;IAC1B,MAAM,EAAE,WAAW;IAEnB,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG;QACtB,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;QAE7B,IAAI,KAAK,CAAC,SAAS,KAAK,MAAM,EAAE,CAAC;YAC/B,MAAM,cAAc,GAAG,mBAAmB,CAAC,iBAAiB,EAAE;gBAC5D,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;aACvB,CAAC,CAAC;YACH,IAAI,KAAK,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CACnC;oBACE,QAAQ,EAAE,KAAK,CAAC,QAAQ;oBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;iBACrB,EACD,GAAG,CACJ,CAAC;gBACF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;gBAChC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;oBAC1B,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC;gBAChF,OAAO,MAAM,CAAC;YAChB,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAChC;gBACE,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,EACD,GAAG,CACJ,CAAC;YACF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACnF,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAChC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAC1C,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;gBAC1B,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,0DAA0D,CAAC,CAAC;YAChF,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,CAAC;YACtB,MAAM,eAAe,CACnB,QAAQ,KAAK,CAAC,SAAS,wEAAwE,EAC/F,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CACpD,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG;YACjB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,UAAU,EAAE,KAAK,CAAC,UAAU;SAC7B,CAAC;QAEF,MAAM,MAAM,GACV,KAAK,CAAC,SAAS,KAAK,SAAS;YAC3B,CAAC,CAAC,MAAM,GAAG,CAAC,cAAc,CAAC,EAAE,GAAG,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,EAAE,GAAG,CAAC;YAC5F,CAAC,CAAC,MAAM,GAAG,CAAC,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACzC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,EAAE;YAC7B,GAAG,UAAU;YACb,SAAS,EAAE,KAAK,CAAC,SAAS;SAC3B,CAAC,CAAC;QACH,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC9B,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,aAAa,KAAK,CAAC,UAAU,WAAW,KAAK,CAAC,QAAQ,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAC9F,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YACpB,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,IAAI,KAAK,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAClC,MAAM,aAAa,GAAG,MAGrB,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,IAAI,CACb,yBAAyB,KAAK,CAAC,UAAU,WAAW,KAAK,CAAC,QAAQ,wBAAwB,KAAK,CAAC,OAAO,EAAE,CAC1G,CAAC;YACF,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;YACvD,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC;gBAC5D,CAAC,CAAE,aAAa,CAAC,IAAI,CAAC,OAAqB;gBAC3C,CAAC,CAAC,EAAE,CAAC;YACP,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC;gBAC1B,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,yCAAyC,KAAK,CAAC,UAAU,GAAG,CAAC,CAAC;YAClF,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;;GAOG;AACH,KAAK,UAAU,gBAAgB,CAC7B,MAA4E,EAC5E,GAAY;IAEZ,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;IAC7B,MAAM,SAAS,GAAG,GAAG,CAAC;IACtB,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,SAAS,CAC/B,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,EAAE,EACnF,GAAG,CACJ,CAAC;IACF,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC;IACrC,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,CAAC;IACtE,CAAC;IAED,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC7B,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,cAAc,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAC9C,GAAG,CAAC,SAAS,CACX;QACE,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,SAAS;QAChB,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS;KAC5B,EACD,GAAG,CACJ,CACF,CACF,CAAC;IACF,MAAM,GAAG,GAAG,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE7D,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChB,MAAM,EAAE,GAAI,CAA6B,CAAC,UAAU,IAAI,EAAE,CAAC;QAC3D,MAAM,EAAE,GAAI,CAA6B,CAAC,UAAU,IAAI,EAAE,CAAC;QAC3D,OAAO,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACrE,MAAM,UAAU,GACd,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IAClF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,qCAAqC,EAAE;QAClD,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,GAAG,CAAC,MAAM;QACjB,QAAQ,EAAE,KAAK,CAAC,MAAM;QACtB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,gBAAgB,EAAE,CAAC,GAAG,cAAc;KACrC,CAAC,CAAC;IACH,OAAO,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,EAAE,EAAE,CAAC;AAClF,CAAC"}
1
+ {"version":3,"file":"roll-votes.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/roll-votes.tool.ts"],"names":[],"mappings":"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"}
@@ -23,7 +23,31 @@ export declare const senateNominationsTool: import("@cyanheads/mcp-ts-core").Too
23
23
  count: z.ZodNumber;
24
24
  nextOffset: z.ZodOptional<z.ZodNullable<z.ZodNumber>>;
25
25
  }, z.core.$strip>>;
26
- }, z.core.$loose>, undefined, {
26
+ }, z.core.$loose>, readonly [{
27
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.NotFound;
28
+ readonly reason: "not_found";
29
+ readonly retryable: false;
30
+ readonly when: "A requested bill, member, committee, report, vote, or nomination does not exist in Congress.gov.";
31
+ readonly recovery: "Use the tool's list or browse operation to discover valid identifiers, then retry with one that exists.";
32
+ }, {
33
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.RateLimited;
34
+ readonly reason: "rate_limited";
35
+ readonly retryable: true;
36
+ readonly when: "The Congress.gov API rate limit (5,000 requests/hour per key) was exceeded.";
37
+ readonly recovery: "Wait for the hourly rate-limit window to reset before retrying, or reduce the request frequency.";
38
+ }, {
39
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.InvalidParams;
40
+ readonly reason: "invalid_request";
41
+ readonly retryable: false;
42
+ readonly when: "Congress.gov rejected the request as malformed — a bad date range or an identifier with an unexpected shape.";
43
+ readonly recovery: "Check parameter formats: dates must be ISO 8601 like 2026-05-01T00:00:00Z and identifiers must match their documented shape.";
44
+ }, {
45
+ readonly code: import("@cyanheads/mcp-ts-core/errors").JsonRpcErrorCode.ServiceUnavailable;
46
+ readonly reason: "upstream_error";
47
+ readonly retryable: true;
48
+ readonly when: "Congress.gov returned an unexpected error (5xx or another non-2xx status).";
49
+ readonly recovery: "Retry after a short delay; if the failure persists the Congress.gov service may be temporarily degraded.";
50
+ }], {
27
51
  effectiveQuery: z.ZodString;
28
52
  totalCount: z.ZodNumber;
29
53
  notice: z.ZodOptional<z.ZodString>;
@@ -1 +1 @@
1
- {"version":3,"file":"senate-nominations.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/senate-nominations.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAUjD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;EA2HhC,CAAC"}
1
+ {"version":3,"file":"senate-nominations.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/senate-nominations.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAWjD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA4HhC,CAAC"}
@@ -5,11 +5,12 @@
5
5
  import { tool, z } from '@cyanheads/mcp-ts-core';
6
6
  import { validationError } from '@cyanheads/mcp-ts-core/errors';
7
7
  import { formatNominations } from '../../../mcp-server/tools/format-helpers.js';
8
- import { buildEffectiveQuery, listEnrichment, listOrDetail, } from '../../../mcp-server/tools/tool-helpers.js';
8
+ import { buildEffectiveQuery, congressErrorContracts, listEnrichment, listOrDetail, } from '../../../mcp-server/tools/tool-helpers.js';
9
9
  import { getCongressApi } from '../../../services/congress-api/congress-api-service.js';
10
10
  export const senateNominationsTool = tool('congressgov_senate_nominations', {
11
11
  description: `Browse presidential nominations to federal positions and track the Senate confirmation process. Use 'list' to browse, 'get' for nomination detail, 'actions'/'committees'/'hearings' for confirmation pipeline data, or 'nominees' to retrieve individual appointees in a multi-nominee batch. Nominations use 'PN' (Presidential Nomination) numbering. Most nominations carry confirmation activity on the parent (e.g., PN1000); multi-part parents (e.g., PN851) carry no activity of their own — their actions, committees, hearings, and nominees live on partitioned children (PN851-1, PN851-2, …). 'get' on a parent that has no \`nominees\` array signals the partitioned form is needed for everything below it.`,
12
12
  annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
13
+ errors: congressErrorContracts,
13
14
  input: z.object({
14
15
  operation: z
15
16
  .enum(['list', 'get', 'nominees', 'actions', 'committees', 'hearings'])
@@ -1 +1 @@
1
- {"version":3,"file":"senate-nominations.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/senate-nominations.tool.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"senate-nominations.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/senate-nominations.tool.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"format-helpers.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/format-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,KAAK,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAknChD,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAUxE;AAqCD,2DAA2D;AAC3D,eAAO,MAAM,eAAe,WAlEhB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,SAAS,EAkEkB,CAAC;AAEpE,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAoB1E;AAWD,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAkB7E;AAED,kDAAkD;AAClD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CASnF;AAED,mCAAmC;AACnC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAK7E;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAY9E;AAED,8FAA8F;AAC9F,eAAO,MAAM,UAAU,WA7JX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,SAAS,EA6JiC,CAAC;AAEnF,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAIxE;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAa9E"}
1
+ {"version":3,"file":"format-helpers.d.ts","sourceRoot":"","sources":["../../../src/mcp-server/tools/format-helpers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,KAAK,SAAS,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AA0qChD,sFAAsF;AACtF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAUxE;AAqCD,2DAA2D;AAC3D,eAAO,MAAM,eAAe,WAlEhB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,SAAS,EAkEkB,CAAC;AAEpE,oEAAoE;AACpE,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAoB1E;AAWD,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAkB7E;AAED,kDAAkD;AAClD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CASnF;AAED,mCAAmC;AACnC,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAK7E;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAY9E;AAED,8FAA8F;AAC9F,eAAO,MAAM,UAAU,WA7JX,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,SAAS,EA6JiC,CAAC;AAEnF,yDAAyD;AACzD,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAMxE;AAED,iEAAiE;AACjE,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,CAa9E"}
@@ -824,30 +824,69 @@ function renderRollVoteDetail(item) {
824
824
  lines.push(`- **${party}:** Yea ${yea}, Nay ${nay}, Present ${present}, Not Voting ${notVoting}`);
825
825
  }
826
826
  }
827
- const results = item.results;
828
- if (Array.isArray(results) && results.length > 0) {
829
- lines.push(`\n**Member Votes:** ${results.length} on this page`);
830
- for (const r of results.slice(0, 20)) {
831
- const name = s(r, 'firstName') && s(r, 'lastName')
832
- ? `${s(r, 'firstName')} ${s(r, 'lastName')}`
833
- : (s(r, 'bioguideId') ?? '?');
834
- const vote = s(r, 'voteCast');
835
- const party = s(r, 'voteParty');
836
- const state = s(r, 'voteState');
837
- const parts = [
838
- name,
839
- party && state ? `(${party}-${state})` : undefined,
840
- vote ? `→ ${vote}` : undefined,
841
- ].filter(Boolean);
842
- lines.push(`- ${parts.join(' ')}`);
843
- }
844
- if (results.length > 20)
845
- lines.push(`- _...${results.length - 20} more_`);
846
- }
847
827
  if (sourceUrl)
848
828
  lines.push(`\n**Source Data URL:** ${sourceUrl}`);
849
829
  return lines.join('\n');
850
830
  }
831
+ /** One member's position: "Warren Davidson (R-OH) → Nay". */
832
+ function renderMemberVoteRow(r) {
833
+ const first = s(r, 'firstName');
834
+ const last = s(r, 'lastName');
835
+ const name = first && last ? `${first} ${last}` : (last ?? first ?? s(r, 'bioguideId') ?? '?');
836
+ const party = s(r, 'voteParty');
837
+ const state = s(r, 'voteState');
838
+ const cast = s(r, 'voteCast');
839
+ const loc = party && state
840
+ ? `(${party}-${state})`
841
+ : party
842
+ ? `(${party})`
843
+ : state
844
+ ? `(${state})`
845
+ : undefined;
846
+ return `- ${[name, loc, cast ? `→ ${cast}` : undefined].filter(Boolean).join(' ')}`;
847
+ }
848
+ /**
849
+ * Member voting positions for one roll call — vote-context header, the
850
+ * `pagination`-derived range footer, then the paginated roster from `data[]`.
851
+ * The `vote` sibling carries the vote record (sans the roster); `get` adds party
852
+ * totals this `/members` endpoint omits.
853
+ */
854
+ function renderVoteMembers(result) {
855
+ const vote = (result.vote ?? {});
856
+ const rows = (result.data ?? []);
857
+ const pagination = result.pagination;
858
+ const total = pagination?.count ?? rows.length;
859
+ const nextOffset = pagination?.nextOffset;
860
+ const roll = s(vote, 'rollCallNumber');
861
+ const congress = s(vote, 'congress');
862
+ const session = s(vote, 'sessionNumber');
863
+ const rollLabel = roll ? `Roll ${roll}` : 'Roll call';
864
+ const scope = join([congress ? `${congress}th Congress` : undefined, session ? `session ${session}` : undefined], ', ');
865
+ const lines = [`# ${scope ? `${rollLabel} — ${scope}` : rollLabel}`];
866
+ const context = join([s(vote, 'voteQuestion') ? `**${s(vote, 'voteQuestion')}**` : undefined, s(vote, 'result')], ' — ');
867
+ if (context)
868
+ lines.push(context);
869
+ const legType = s(vote, 'legislationType')?.toUpperCase();
870
+ const legNum = s(vote, 'legislationNumber');
871
+ if (legType && legNum)
872
+ lines.push(`**Legislation:** ${legType} ${legNum}`);
873
+ if (rows.length === 0) {
874
+ lines.push('', total > 0
875
+ ? `_Page is empty — offset is past the end of ${total} member position${total !== 1 ? 's' : ''}._`
876
+ : '_No member positions recorded for this roll call._');
877
+ return lines.join('\n');
878
+ }
879
+ /** `pagination` omits the current offset; derive the page's 1-based range from
880
+ * the row count and `nextOffset` (= offset + page length, or null on the last page). */
881
+ const end = nextOffset ?? total;
882
+ const start = end - rows.length + 1;
883
+ lines.push('', `**Members ${start}–${end} of ${total}**${nextOffset != null ? ` · next offset: ${nextOffset}` : ''}`, '');
884
+ for (const r of rows) {
885
+ if (typeof r === 'object' && r !== null)
886
+ lines.push(renderMemberVoteRow(r));
887
+ }
888
+ return lines.join('\n');
889
+ }
851
890
  /** Bill / law detail — title-first header, then the rest of the structured fields. */
852
891
  function renderBillDetail(item) {
853
892
  const type = s(item, 'type')?.toUpperCase() ?? '';
@@ -1219,6 +1258,9 @@ export function formatDailyRecord(result) {
1219
1258
  export const formatLaws = makeFormatter(['law'], renderBillItem, renderBillDetail);
1220
1259
  /** House roll call votes and member voting positions. */
1221
1260
  export function formatVotes(result) {
1261
+ /** `members`: roster in `data[]` with the vote record as a sibling context object. */
1262
+ if (Array.isArray(result.data) && result.vote != null)
1263
+ return tb(renderVoteMembers(result));
1222
1264
  if (Array.isArray(result.data))
1223
1265
  return tb(renderList(result, renderRollVoteItem));
1224
1266
  if (result.vote != null)