@cyanheads/congressgov-mcp-server 0.3.3

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 (94) hide show
  1. package/CLAUDE.md +270 -0
  2. package/Dockerfile +99 -0
  3. package/LICENSE +191 -0
  4. package/README.md +296 -0
  5. package/dist/config/server-config.d.ts +13 -0
  6. package/dist/config/server-config.d.ts.map +1 -0
  7. package/dist/config/server-config.js +22 -0
  8. package/dist/config/server-config.js.map +1 -0
  9. package/dist/index.d.ts +7 -0
  10. package/dist/index.d.ts.map +1 -0
  11. package/dist/index.js +50 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/mcp-server/prompts/definitions/bill-analysis.prompt.d.ts +11 -0
  14. package/dist/mcp-server/prompts/definitions/bill-analysis.prompt.d.ts.map +1 -0
  15. package/dist/mcp-server/prompts/definitions/bill-analysis.prompt.js +36 -0
  16. package/dist/mcp-server/prompts/definitions/bill-analysis.prompt.js.map +1 -0
  17. package/dist/mcp-server/prompts/definitions/legislative-research.prompt.d.ts +10 -0
  18. package/dist/mcp-server/prompts/definitions/legislative-research.prompt.d.ts.map +1 -0
  19. package/dist/mcp-server/prompts/definitions/legislative-research.prompt.js +47 -0
  20. package/dist/mcp-server/prompts/definitions/legislative-research.prompt.js.map +1 -0
  21. package/dist/mcp-server/resources/definitions/bill-types.resource.d.ts +8 -0
  22. package/dist/mcp-server/resources/definitions/bill-types.resource.d.ts.map +1 -0
  23. package/dist/mcp-server/resources/definitions/bill-types.resource.js +39 -0
  24. package/dist/mcp-server/resources/definitions/bill-types.resource.js.map +1 -0
  25. package/dist/mcp-server/resources/definitions/bill.resource.d.ts +11 -0
  26. package/dist/mcp-server/resources/definitions/bill.resource.d.ts.map +1 -0
  27. package/dist/mcp-server/resources/definitions/bill.resource.js +31 -0
  28. package/dist/mcp-server/resources/definitions/bill.resource.js.map +1 -0
  29. package/dist/mcp-server/resources/definitions/committee.resource.d.ts +9 -0
  30. package/dist/mcp-server/resources/definitions/committee.resource.d.ts.map +1 -0
  31. package/dist/mcp-server/resources/definitions/committee.resource.js +26 -0
  32. package/dist/mcp-server/resources/definitions/committee.resource.js.map +1 -0
  33. package/dist/mcp-server/resources/definitions/current-congress.resource.d.ts +8 -0
  34. package/dist/mcp-server/resources/definitions/current-congress.resource.d.ts.map +1 -0
  35. package/dist/mcp-server/resources/definitions/current-congress.resource.js +18 -0
  36. package/dist/mcp-server/resources/definitions/current-congress.resource.js.map +1 -0
  37. package/dist/mcp-server/resources/definitions/member.resource.d.ts +9 -0
  38. package/dist/mcp-server/resources/definitions/member.resource.d.ts.map +1 -0
  39. package/dist/mcp-server/resources/definitions/member.resource.js +21 -0
  40. package/dist/mcp-server/resources/definitions/member.resource.js.map +1 -0
  41. package/dist/mcp-server/tools/definitions/bill-lookup.tool.d.ts +37 -0
  42. package/dist/mcp-server/tools/definitions/bill-lookup.tool.d.ts.map +1 -0
  43. package/dist/mcp-server/tools/definitions/bill-lookup.tool.js +105 -0
  44. package/dist/mcp-server/tools/definitions/bill-lookup.tool.js.map +1 -0
  45. package/dist/mcp-server/tools/definitions/bill-summaries.tool.d.ts +23 -0
  46. package/dist/mcp-server/tools/definitions/bill-summaries.tool.d.ts.map +1 -0
  47. package/dist/mcp-server/tools/definitions/bill-summaries.tool.js +57 -0
  48. package/dist/mcp-server/tools/definitions/bill-summaries.tool.js.map +1 -0
  49. package/dist/mcp-server/tools/definitions/committee-lookup.tool.d.ts +24 -0
  50. package/dist/mcp-server/tools/definitions/committee-lookup.tool.d.ts.map +1 -0
  51. package/dist/mcp-server/tools/definitions/committee-lookup.tool.js +70 -0
  52. package/dist/mcp-server/tools/definitions/committee-lookup.tool.js.map +1 -0
  53. package/dist/mcp-server/tools/definitions/committee-reports.tool.d.ts +22 -0
  54. package/dist/mcp-server/tools/definitions/committee-reports.tool.d.ts.map +1 -0
  55. package/dist/mcp-server/tools/definitions/committee-reports.tool.js +80 -0
  56. package/dist/mcp-server/tools/definitions/committee-reports.tool.js.map +1 -0
  57. package/dist/mcp-server/tools/definitions/crs-reports.tool.d.ts +15 -0
  58. package/dist/mcp-server/tools/definitions/crs-reports.tool.d.ts.map +1 -0
  59. package/dist/mcp-server/tools/definitions/crs-reports.tool.js +41 -0
  60. package/dist/mcp-server/tools/definitions/crs-reports.tool.js.map +1 -0
  61. package/dist/mcp-server/tools/definitions/daily-record.tool.d.ts +17 -0
  62. package/dist/mcp-server/tools/definitions/daily-record.tool.d.ts.map +1 -0
  63. package/dist/mcp-server/tools/definitions/daily-record.tool.js +67 -0
  64. package/dist/mcp-server/tools/definitions/daily-record.tool.js.map +1 -0
  65. package/dist/mcp-server/tools/definitions/enacted-laws.tool.d.ts +20 -0
  66. package/dist/mcp-server/tools/definitions/enacted-laws.tool.d.ts.map +1 -0
  67. package/dist/mcp-server/tools/definitions/enacted-laws.tool.js +55 -0
  68. package/dist/mcp-server/tools/definitions/enacted-laws.tool.js.map +1 -0
  69. package/dist/mcp-server/tools/definitions/member-lookup.tool.d.ts +21 -0
  70. package/dist/mcp-server/tools/definitions/member-lookup.tool.d.ts.map +1 -0
  71. package/dist/mcp-server/tools/definitions/member-lookup.tool.js +86 -0
  72. package/dist/mcp-server/tools/definitions/member-lookup.tool.js.map +1 -0
  73. package/dist/mcp-server/tools/definitions/roll-votes.tool.d.ts +18 -0
  74. package/dist/mcp-server/tools/definitions/roll-votes.tool.d.ts.map +1 -0
  75. package/dist/mcp-server/tools/definitions/roll-votes.tool.js +65 -0
  76. package/dist/mcp-server/tools/definitions/roll-votes.tool.js.map +1 -0
  77. package/dist/mcp-server/tools/definitions/senate-nominations.tool.d.ts +21 -0
  78. package/dist/mcp-server/tools/definitions/senate-nominations.tool.d.ts.map +1 -0
  79. package/dist/mcp-server/tools/definitions/senate-nominations.tool.js +90 -0
  80. package/dist/mcp-server/tools/definitions/senate-nominations.tool.js.map +1 -0
  81. package/dist/mcp-server/tools/format-helpers.d.ts +12 -0
  82. package/dist/mcp-server/tools/format-helpers.d.ts.map +1 -0
  83. package/dist/mcp-server/tools/format-helpers.js +72 -0
  84. package/dist/mcp-server/tools/format-helpers.js.map +1 -0
  85. package/dist/services/congress-api/congress-api-service.d.ts +75 -0
  86. package/dist/services/congress-api/congress-api-service.d.ts.map +1 -0
  87. package/dist/services/congress-api/congress-api-service.js +292 -0
  88. package/dist/services/congress-api/congress-api-service.js.map +1 -0
  89. package/dist/services/congress-api/types.d.ts +122 -0
  90. package/dist/services/congress-api/types.d.ts.map +1 -0
  91. package/dist/services/congress-api/types.js +6 -0
  92. package/dist/services/congress-api/types.js.map +1 -0
  93. package/package.json +71 -0
  94. package/server.json +111 -0
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Resource for fetching committee detail by system code.
3
+ * @module mcp-server/resources/definitions/committee
4
+ */
5
+ import { z } from '@cyanheads/mcp-ts-core';
6
+ export declare const committeeResource: import("@cyanheads/mcp-ts-core").ResourceDefinition<z.ZodObject<{
7
+ committeeCode: z.ZodString;
8
+ }, z.core.$strip>, undefined>;
9
+ //# sourceMappingURL=committee.resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"committee.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/committee.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAY,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAGrD,eAAO,MAAM,iBAAiB;;6BAmB5B,CAAC"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @fileoverview Resource for fetching committee detail by system code.
3
+ * @module mcp-server/resources/definitions/committee
4
+ */
5
+ import { resource, z } from '@cyanheads/mcp-ts-core';
6
+ import { getCongressApi } from '../../../services/congress-api/congress-api-service.js';
7
+ export const committeeResource = resource('congress://committee/{committeeCode}', {
8
+ name: 'committee-detail',
9
+ description: 'Committee detail: name, chamber, subcommittees, history, legislation counts.',
10
+ mimeType: 'application/json',
11
+ params: z.object({
12
+ committeeCode: z.string().describe("Committee system code (e.g., 'hsju00')."),
13
+ }),
14
+ async handler(params, ctx) {
15
+ const api = getCongressApi();
16
+ const chamber = params.committeeCode.startsWith('s')
17
+ ? 'senate'
18
+ : params.committeeCode.startsWith('j')
19
+ ? 'joint'
20
+ : 'house';
21
+ const result = await api.getCommittee(chamber, params.committeeCode);
22
+ ctx.log.info('Committee resource fetched', { committeeCode: params.committeeCode });
23
+ return result.committee;
24
+ },
25
+ });
26
+ //# sourceMappingURL=committee.resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"committee.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/committee.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AAEjF,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,sCAAsC,EAAE;IAChF,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,8EAA8E;IAC3F,QAAQ,EAAE,kBAAkB;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;KAC9E,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;QACvB,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC;YAClD,CAAC,CAAC,QAAQ;YACV,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,UAAU,CAAC,GAAG,CAAC;gBACpC,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,OAAO,CAAC;QACd,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,CAAC,CAAC;QACrE,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA4B,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC;QACpF,OAAO,MAAM,CAAC,SAAS,CAAC;IAC1B,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @fileoverview Resource providing current congress number, session dates, and chamber info.
3
+ * @module mcp-server/resources/definitions/current-congress
4
+ */
5
+ export declare const currentCongressResource: import("@cyanheads/mcp-ts-core").ResourceDefinition<import("zod").ZodObject<Readonly<{
6
+ [k: string]: import("zod/v4/core").$ZodType<unknown, unknown, import("zod/v4/core").$ZodTypeInternals<unknown, unknown>>;
7
+ }>, import("zod/v4/core").$strip>, undefined>;
8
+ //# sourceMappingURL=current-congress.resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current-congress.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/current-congress.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,eAAO,MAAM,uBAAuB;;6CAYlC,CAAC"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @fileoverview Resource providing current congress number, session dates, and chamber info.
3
+ * @module mcp-server/resources/definitions/current-congress
4
+ */
5
+ import { resource } from '@cyanheads/mcp-ts-core';
6
+ import { getCongressApi } from '../../../services/congress-api/congress-api-service.js';
7
+ export const currentCongressResource = resource('congress://current', {
8
+ name: 'current-congress',
9
+ description: 'Current congress number, session dates, and chamber info. Baseline context for queries.',
10
+ mimeType: 'application/json',
11
+ async handler(_params, ctx) {
12
+ const api = getCongressApi();
13
+ const congress = await api.getCurrentCongress();
14
+ ctx.log.info('Current congress fetched', { congress: congress.congress });
15
+ return congress;
16
+ },
17
+ });
18
+ //# sourceMappingURL=current-congress.resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"current-congress.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/current-congress.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AAEjF,MAAM,CAAC,MAAM,uBAAuB,GAAG,QAAQ,CAAC,oBAAoB,EAAE;IACpE,IAAI,EAAE,kBAAkB;IACxB,WAAW,EACT,yFAAyF;IAC3F,QAAQ,EAAE,kBAAkB;IAE5B,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG;QACxB,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,kBAAkB,EAAE,CAAC;QAChD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,EAAE,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,OAAO,QAAQ,CAAC;IAClB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @fileoverview Resource for fetching a member profile by bioguide ID.
3
+ * @module mcp-server/resources/definitions/member
4
+ */
5
+ import { z } from '@cyanheads/mcp-ts-core';
6
+ export declare const memberResource: import("@cyanheads/mcp-ts-core").ResourceDefinition<z.ZodObject<{
7
+ bioguideId: z.ZodString;
8
+ }, z.core.$strip>, undefined>;
9
+ //# sourceMappingURL=member.resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member.resource.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/member.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAY,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAGrD,eAAO,MAAM,cAAc;;6BAczB,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * @fileoverview Resource for fetching a member profile by bioguide ID.
3
+ * @module mcp-server/resources/definitions/member
4
+ */
5
+ import { resource, z } from '@cyanheads/mcp-ts-core';
6
+ import { getCongressApi } from '../../../services/congress-api/congress-api-service.js';
7
+ export const memberResource = resource('congress://member/{bioguideId}', {
8
+ name: 'member-profile',
9
+ description: 'Member profile: name, state, party, terms, leadership, office, legislation counts.',
10
+ mimeType: 'application/json',
11
+ params: z.object({
12
+ bioguideId: z.string().describe('Bioguide identifier for the member (e.g., P000197).'),
13
+ }),
14
+ async handler(params, ctx) {
15
+ const api = getCongressApi();
16
+ const result = await api.getMember(params.bioguideId);
17
+ ctx.log.info('Member resource fetched', { bioguideId: params.bioguideId });
18
+ return result.member;
19
+ },
20
+ });
21
+ //# sourceMappingURL=member.resource.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"member.resource.js","sourceRoot":"","sources":["../../../../src/mcp-server/resources/definitions/member.resource.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AAEjF,MAAM,CAAC,MAAM,cAAc,GAAG,QAAQ,CAAC,gCAAgC,EAAE;IACvE,IAAI,EAAE,gBAAgB;IACtB,WAAW,EAAE,oFAAoF;IACjG,QAAQ,EAAE,kBAAkB;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qDAAqD,CAAC;KACvF,CAAC;IAEF,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG;QACvB,MAAM,GAAG,GAAG,cAAc,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACtD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,yBAAyB,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QAC3E,OAAO,MAAM,CAAC,MAAM,CAAC;IACvB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * @fileoverview Tool for browsing and retrieving U.S. legislative bill data from Congress.gov.
3
+ * @module mcp-server/tools/definitions/bill-lookup
4
+ */
5
+ import { z } from '@cyanheads/mcp-ts-core';
6
+ export declare const billLookupTool: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
7
+ operation: z.ZodEnum<{
8
+ text: "text";
9
+ actions: "actions";
10
+ amendments: "amendments";
11
+ cosponsors: "cosponsors";
12
+ committees: "committees";
13
+ subjects: "subjects";
14
+ summaries: "summaries";
15
+ titles: "titles";
16
+ get: "get";
17
+ list: "list";
18
+ related: "related";
19
+ }>;
20
+ congress: z.ZodNumber;
21
+ billType: z.ZodOptional<z.ZodEnum<{
22
+ hr: "hr";
23
+ s: "s";
24
+ hjres: "hjres";
25
+ sjres: "sjres";
26
+ hconres: "hconres";
27
+ sconres: "sconres";
28
+ hres: "hres";
29
+ sres: "sres";
30
+ }>>;
31
+ billNumber: z.ZodOptional<z.ZodNumber>;
32
+ fromDateTime: z.ZodOptional<z.ZodString>;
33
+ toDateTime: z.ZodOptional<z.ZodString>;
34
+ limit: z.ZodDefault<z.ZodNumber>;
35
+ offset: z.ZodDefault<z.ZodNumber>;
36
+ }, z.core.$strip>, z.ZodObject<{}, z.core.$loose>>;
37
+ //# sourceMappingURL=bill-lookup.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bill-lookup.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/bill-lookup.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AA0BjD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kDAwFzB,CAAC"}
@@ -0,0 +1,105 @@
1
+ /**
2
+ * @fileoverview Tool for browsing and retrieving U.S. legislative bill data from Congress.gov.
3
+ * @module mcp-server/tools/definitions/bill-lookup
4
+ */
5
+ import { tool, z } from '@cyanheads/mcp-ts-core';
6
+ import { formatResult } from '../../../mcp-server/tools/format-helpers.js';
7
+ import { getCongressApi } from '../../../services/congress-api/congress-api-service.js';
8
+ const BillTypeEnum = z.enum(['hr', 's', 'hjres', 'sjres', 'hconres', 'sconres', 'hres', 'sres']);
9
+ const OperationEnum = z.enum([
10
+ 'list',
11
+ 'get',
12
+ 'actions',
13
+ 'amendments',
14
+ 'cosponsors',
15
+ 'committees',
16
+ 'subjects',
17
+ 'summaries',
18
+ 'text',
19
+ 'titles',
20
+ 'related',
21
+ ]);
22
+ const SUB_RESOURCE_MAP = {
23
+ related: 'relatedbills',
24
+ };
25
+ export const billLookupTool = tool('congressgov_bill_lookup', {
26
+ description: `Browse and retrieve U.S. legislative bill data from Congress.gov.
27
+
28
+ IMPORTANT: This API has no keyword search. To find bills, filter by congress number, bill type, and/or date range. Use 'congressgov_bill_summaries' to discover recently summarized legislation, or 'congressgov_member_lookup' to find bills via their sponsor.
29
+
30
+ Operations:
31
+ - list: Browse bills. Requires 'congress'. Add 'billType' to narrow by chamber/type.
32
+ - get: Full bill detail including sponsor, policy area, CBO estimates, and law info.
33
+ - actions/amendments/cosponsors/committees/subjects/summaries/text/titles/related: Sub-resources for a specific bill. Require congress + billType + billNumber.
34
+
35
+ For enacted laws, use 'congressgov_enacted_laws' instead.`,
36
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
37
+ input: z.object({
38
+ operation: OperationEnum.describe('Which data to retrieve.'),
39
+ congress: z.number().int().positive().describe('Congress number (e.g., 118, 119).'),
40
+ billType: BillTypeEnum.optional().describe('Bill type code. Required for get and sub-resource operations.'),
41
+ billNumber: z
42
+ .number()
43
+ .int()
44
+ .positive()
45
+ .optional()
46
+ .describe('Bill number. Required for get and sub-resource operations.'),
47
+ fromDateTime: z
48
+ .string()
49
+ .optional()
50
+ .describe('Start of date range filter (ISO 8601). Filters by latest action date.'),
51
+ toDateTime: z.string().optional().describe('End of date range filter (ISO 8601).'),
52
+ limit: z.number().int().min(1).max(250).default(20).describe('Results per page (1-250).'),
53
+ offset: z.number().int().min(0).default(0).describe('Pagination offset.'),
54
+ }),
55
+ output: z.object({}).passthrough().describe('Bill data from Congress.gov API.'),
56
+ format: formatResult,
57
+ async handler(input, ctx) {
58
+ const api = getCongressApi();
59
+ if (input.operation === 'list') {
60
+ const result = await api.listBills({
61
+ congress: input.congress,
62
+ billType: input.billType,
63
+ fromDateTime: input.fromDateTime,
64
+ toDateTime: input.toDateTime,
65
+ limit: input.limit,
66
+ offset: input.offset,
67
+ });
68
+ ctx.log.info('Bills listed', { congress: input.congress, count: result.data.length });
69
+ return result;
70
+ }
71
+ if (!input.billType || !input.billNumber) {
72
+ throw new Error(`The '${input.operation}' operation requires congress, billType, and billNumber. Use 'list' first to find the bill, then request its ${input.operation}.`);
73
+ }
74
+ if (input.operation === 'get') {
75
+ const result = await api.getBill({
76
+ congress: input.congress,
77
+ billType: input.billType,
78
+ billNumber: input.billNumber,
79
+ });
80
+ ctx.log.info('Bill retrieved', {
81
+ congress: input.congress,
82
+ billType: input.billType,
83
+ billNumber: input.billNumber,
84
+ });
85
+ return result;
86
+ }
87
+ const subResource = SUB_RESOURCE_MAP[input.operation] ?? input.operation;
88
+ const result = await api.getBillSubResource({
89
+ congress: input.congress,
90
+ billType: input.billType,
91
+ billNumber: input.billNumber,
92
+ subResource: subResource,
93
+ limit: input.limit,
94
+ offset: input.offset,
95
+ });
96
+ ctx.log.info('Bill sub-resource retrieved', {
97
+ congress: input.congress,
98
+ billType: input.billType,
99
+ billNumber: input.billNumber,
100
+ subResource,
101
+ });
102
+ return result;
103
+ },
104
+ });
105
+ //# sourceMappingURL=bill-lookup.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bill-lookup.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/bill-lookup.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * @fileoverview Tool for browsing recent CRS bill summaries — the "what's happening" feed.
3
+ * @module mcp-server/tools/definitions/bill-summaries
4
+ */
5
+ import { z } from '@cyanheads/mcp-ts-core';
6
+ export declare const billSummariesTool: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
7
+ congress: z.ZodOptional<z.ZodNumber>;
8
+ billType: z.ZodOptional<z.ZodEnum<{
9
+ hr: "hr";
10
+ s: "s";
11
+ hjres: "hjres";
12
+ sjres: "sjres";
13
+ hconres: "hconres";
14
+ sconres: "sconres";
15
+ hres: "hres";
16
+ sres: "sres";
17
+ }>>;
18
+ fromDateTime: z.ZodOptional<z.ZodString>;
19
+ toDateTime: z.ZodOptional<z.ZodString>;
20
+ limit: z.ZodDefault<z.ZodNumber>;
21
+ offset: z.ZodDefault<z.ZodNumber>;
22
+ }, z.core.$strip>, z.ZodObject<{}, z.core.$loose>>;
23
+ //# sourceMappingURL=bill-summaries.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bill-summaries.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/bill-summaries.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAKjD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;kDAwD5B,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * @fileoverview Tool for browsing recent CRS bill summaries — the "what's happening" feed.
3
+ * @module mcp-server/tools/definitions/bill-summaries
4
+ */
5
+ import { tool, z } from '@cyanheads/mcp-ts-core';
6
+ import { formatResult } from '../../../mcp-server/tools/format-helpers.js';
7
+ import { getCongressApi } from '../../../services/congress-api/congress-api-service.js';
8
+ export const billSummariesTool = tool('congressgov_bill_summaries', {
9
+ description: `Browse recent CRS (Congressional Research Service) bill summaries.
10
+
11
+ This is the best tool for answering "what's happening in Congress?" — CRS analysts write plain-language summaries of bills at each legislative stage.
12
+
13
+ By default, returns summaries from the last 7 days. Specify fromDateTime/toDateTime for custom ranges. Each summary includes the associated bill reference (congress, type, number) for follow-up with congressgov_bill_lookup.`,
14
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
15
+ input: z.object({
16
+ congress: z
17
+ .number()
18
+ .int()
19
+ .positive()
20
+ .optional()
21
+ .describe('Congress number. Optional — omit for summaries across all congresses.'),
22
+ billType: z
23
+ .enum(['hr', 's', 'hjres', 'sjres', 'hconres', 'sconres', 'hres', 'sres'])
24
+ .optional()
25
+ .describe("Bill type filter. Requires 'congress'."),
26
+ fromDateTime: z
27
+ .string()
28
+ .optional()
29
+ .describe('Start of date range (ISO 8601). Defaults to 7 days ago if neither date param is set.'),
30
+ toDateTime: z.string().optional().describe('End of date range (ISO 8601). Defaults to now.'),
31
+ limit: z.number().int().min(1).max(250).default(20).describe('Results per page (1-250).'),
32
+ offset: z.number().int().min(0).default(0).describe('Pagination offset.'),
33
+ }),
34
+ output: z.object({}).passthrough().describe('Bill summary data from Congress.gov API.'),
35
+ format: formatResult,
36
+ async handler(input, ctx) {
37
+ if (input.billType && !input.congress) {
38
+ throw new Error("The 'billType' filter requires 'congress'. Provide both or omit billType to browse across all types.");
39
+ }
40
+ const fromDateTime = input.fromDateTime ??
41
+ (!input.toDateTime
42
+ ? new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString().replace(/\.\d{3}Z$/, 'Z')
43
+ : undefined);
44
+ const api = getCongressApi();
45
+ const result = await api.listSummaries({
46
+ congress: input.congress,
47
+ billType: input.billType,
48
+ fromDateTime,
49
+ toDateTime: input.toDateTime,
50
+ limit: input.limit,
51
+ offset: input.offset,
52
+ });
53
+ ctx.log.info('Summaries listed', { count: result.data.length });
54
+ return result;
55
+ },
56
+ });
57
+ //# sourceMappingURL=bill-summaries.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bill-summaries.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/bill-summaries.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @fileoverview Tool for browsing congressional committees and their activity.
3
+ * @module mcp-server/tools/definitions/committee-lookup
4
+ */
5
+ import { z } from '@cyanheads/mcp-ts-core';
6
+ export declare const committeeLookupTool: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
7
+ operation: z.ZodEnum<{
8
+ bills: "bills";
9
+ reports: "reports";
10
+ nominations: "nominations";
11
+ get: "get";
12
+ list: "list";
13
+ }>;
14
+ congress: z.ZodOptional<z.ZodNumber>;
15
+ chamber: z.ZodOptional<z.ZodEnum<{
16
+ house: "house";
17
+ senate: "senate";
18
+ joint: "joint";
19
+ }>>;
20
+ committeeCode: z.ZodOptional<z.ZodString>;
21
+ limit: z.ZodDefault<z.ZodNumber>;
22
+ offset: z.ZodDefault<z.ZodNumber>;
23
+ }, z.core.$strip>, z.ZodObject<{}, z.core.$loose>>;
24
+ //# sourceMappingURL=committee-lookup.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"committee-lookup.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/committee-lookup.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAKjD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;kDAuE9B,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * @fileoverview Tool for browsing congressional committees and their activity.
3
+ * @module mcp-server/tools/definitions/committee-lookup
4
+ */
5
+ import { tool, z } from '@cyanheads/mcp-ts-core';
6
+ import { formatResult } from '../../../mcp-server/tools/format-helpers.js';
7
+ import { getCongressApi } from '../../../services/congress-api/congress-api-service.js';
8
+ export const committeeLookupTool = tool('congressgov_committee_lookup', {
9
+ description: `Browse congressional committees and their legislation, reports, and nominations.
10
+
11
+ Committee codes follow the pattern: chamber prefix (h/s/j) + abbreviation + number. Use 'list' to discover codes, then drill into bills, reports, or nominations.
12
+
13
+ The 'nominations' operation is available for Senate committees only. The committeeCode also works with the congress://committee/{committeeCode} resource.`,
14
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
15
+ input: z.object({
16
+ operation: z
17
+ .enum(['list', 'get', 'bills', 'reports', 'nominations'])
18
+ .describe('Which data to retrieve.'),
19
+ congress: z.number().int().positive().optional().describe('Congress number.'),
20
+ chamber: z
21
+ .enum(['house', 'senate', 'joint'])
22
+ .optional()
23
+ .describe("Chamber filter. Required for 'get' and sub-resources."),
24
+ committeeCode: z
25
+ .string()
26
+ .optional()
27
+ .describe("Committee system code (e.g., 'hsju00'). Required for get and sub-resources."),
28
+ limit: z.number().int().min(1).max(250).default(20).describe('Results per page (1-250).'),
29
+ offset: z.number().int().min(0).default(0).describe('Pagination offset.'),
30
+ }),
31
+ output: z.object({}).passthrough().describe('Committee data from Congress.gov API.'),
32
+ format: formatResult,
33
+ async handler(input, ctx) {
34
+ const api = getCongressApi();
35
+ if (input.operation === 'list') {
36
+ const result = await api.listCommittees({
37
+ congress: input.congress,
38
+ chamber: input.chamber,
39
+ limit: input.limit,
40
+ offset: input.offset,
41
+ });
42
+ ctx.log.info('Committees listed', { count: result.data.length });
43
+ return result;
44
+ }
45
+ if (!input.chamber || !input.committeeCode) {
46
+ throw new Error(`The '${input.operation}' operation requires chamber and committeeCode. Use 'list' to discover available committees.`);
47
+ }
48
+ if (input.operation === 'get') {
49
+ const result = await api.getCommittee(input.chamber, input.committeeCode);
50
+ ctx.log.info('Committee retrieved', { committeeCode: input.committeeCode });
51
+ return result;
52
+ }
53
+ if (input.operation === 'nominations' && input.chamber !== 'senate') {
54
+ throw new Error("Nominations are only referred to Senate committees. Use chamber='senate' or a Senate committee code (s-prefix).");
55
+ }
56
+ const result = await api.getCommitteeSubResource({
57
+ chamber: input.chamber,
58
+ committeeCode: input.committeeCode,
59
+ subResource: input.operation,
60
+ limit: input.limit,
61
+ offset: input.offset,
62
+ });
63
+ ctx.log.info('Committee sub-resource retrieved', {
64
+ committeeCode: input.committeeCode,
65
+ subResource: input.operation,
66
+ });
67
+ return result;
68
+ },
69
+ });
70
+ //# sourceMappingURL=committee-lookup.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"committee-lookup.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/committee-lookup.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAEjD,OAAO,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,iDAAiD,CAAC;AAEjF,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,CAAC,8BAA8B,EAAE;IACtE,WAAW,EAAE;;;;0JAI2I;IACxJ,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;aACT,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC;aACxD,QAAQ,CAAC,yBAAyB,CAAC;QACtC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QAC7E,OAAO,EAAE,CAAC;aACP,IAAI,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;aAClC,QAAQ,EAAE;aACV,QAAQ,CAAC,uDAAuD,CAAC;QACpE,aAAa,EAAE,CAAC;aACb,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,6EAA6E,CAAC;QAC1F,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,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IACpF,MAAM,EAAE,YAAY;IAEpB,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,MAAM,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC;gBACtC,QAAQ,EAAE,KAAK,CAAC,QAAQ;gBACxB,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,MAAM,EAAE,KAAK,CAAC,MAAM;aACrB,CAAC,CAAC;YACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACjE,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,aAAa,EAAE,CAAC;YAC3C,MAAM,IAAI,KAAK,CACb,QAAQ,KAAK,CAAC,SAAS,8FAA8F,CACtH,CAAC;QACJ,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,KAAK,KAAK,EAAE,CAAC;YAC9B,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;YAC1E,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAqB,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,aAAa,EAAE,CAAC,CAAC;YAC5E,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,KAAK,aAAa,IAAI,KAAK,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CACb,iHAAiH,CAClH,CAAC;QACJ,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,uBAAuB,CAAC;YAC/C,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,WAAW,EAAE,KAAK,CAAC,SAAS;YAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC;QACH,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,kCAAkC,EAAE;YAC/C,aAAa,EAAE,KAAK,CAAC,aAAa;YAClC,WAAW,EAAE,KAAK,CAAC,SAAS;SAC7B,CAAC,CAAC;QACH,OAAO,MAAM,CAAC;IAChB,CAAC;CACF,CAAC,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @fileoverview Tool for browsing and retrieving committee reports from Congress.gov.
3
+ * @module mcp-server/tools/definitions/committee-reports
4
+ */
5
+ import { z } from '@cyanheads/mcp-ts-core';
6
+ export declare const committeeReportsTool: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
7
+ operation: z.ZodEnum<{
8
+ text: "text";
9
+ get: "get";
10
+ list: "list";
11
+ }>;
12
+ congress: z.ZodNumber;
13
+ reportType: z.ZodOptional<z.ZodEnum<{
14
+ hrpt: "hrpt";
15
+ srpt: "srpt";
16
+ erpt: "erpt";
17
+ }>>;
18
+ reportNumber: z.ZodOptional<z.ZodNumber>;
19
+ limit: z.ZodDefault<z.ZodNumber>;
20
+ offset: z.ZodDefault<z.ZodNumber>;
21
+ }, z.core.$strip>, z.ZodObject<{}, z.core.$loose>>;
22
+ //# sourceMappingURL=committee-reports.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"committee-reports.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/committee-reports.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAKjD,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;kDA8E/B,CAAC"}
@@ -0,0 +1,80 @@
1
+ /**
2
+ * @fileoverview Tool for browsing and retrieving committee reports from Congress.gov.
3
+ * @module mcp-server/tools/definitions/committee-reports
4
+ */
5
+ import { tool, z } from '@cyanheads/mcp-ts-core';
6
+ import { formatResult } from '../../../mcp-server/tools/format-helpers.js';
7
+ import { getCongressApi } from '../../../services/congress-api/congress-api-service.js';
8
+ export const committeeReportsTool = tool('congressgov_committee_reports', {
9
+ description: `Browse and retrieve committee reports from Congress.gov.
10
+
11
+ Committee reports accompany legislation reported out of committee. They explain the bill's purpose, committee amendments, dissenting views, and the committee vote.
12
+
13
+ Report types:
14
+ - hrpt: House reports
15
+ - srpt: Senate reports
16
+ - erpt: Executive reports`,
17
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
18
+ input: z.object({
19
+ operation: z.enum(['list', 'get', 'text']).describe('Which data to retrieve.'),
20
+ congress: z.number().int().positive().describe('Congress number.'),
21
+ reportType: z
22
+ .enum(['hrpt', 'srpt', 'erpt'])
23
+ .optional()
24
+ .describe('Report type. Required for get and text operations.'),
25
+ reportNumber: z
26
+ .number()
27
+ .int()
28
+ .positive()
29
+ .optional()
30
+ .describe('Committee report number. Required for get and text operations.'),
31
+ limit: z.number().int().min(1).max(250).default(20).describe('Results per page (1-250).'),
32
+ offset: z.number().int().min(0).default(0).describe('Pagination offset.'),
33
+ }),
34
+ output: z.object({}).passthrough().describe('Committee report data from Congress.gov API.'),
35
+ format: formatResult,
36
+ async handler(input, ctx) {
37
+ const api = getCongressApi();
38
+ if (input.operation === 'list') {
39
+ const result = await api.listCommitteeReports({
40
+ congress: input.congress,
41
+ reportType: input.reportType,
42
+ limit: input.limit,
43
+ offset: input.offset,
44
+ });
45
+ ctx.log.info('Committee reports listed', {
46
+ congress: input.congress,
47
+ count: result.data.length,
48
+ });
49
+ return result;
50
+ }
51
+ if (!input.reportType || !input.reportNumber) {
52
+ throw new Error(`The '${input.operation}' operation requires reportType and reportNumber. Use 'list' to browse available reports.`);
53
+ }
54
+ if (input.operation === 'text') {
55
+ const result = await api.getCommitteeReportText({
56
+ congress: input.congress,
57
+ reportType: input.reportType,
58
+ reportNumber: input.reportNumber,
59
+ });
60
+ ctx.log.info('Committee report text retrieved', {
61
+ congress: input.congress,
62
+ reportType: input.reportType,
63
+ reportNumber: input.reportNumber,
64
+ });
65
+ return result;
66
+ }
67
+ const result = await api.getCommitteeReport({
68
+ congress: input.congress,
69
+ reportType: input.reportType,
70
+ reportNumber: input.reportNumber,
71
+ });
72
+ ctx.log.info('Committee report retrieved', {
73
+ congress: input.congress,
74
+ reportType: input.reportType,
75
+ reportNumber: input.reportNumber,
76
+ });
77
+ return result;
78
+ },
79
+ });
80
+ //# sourceMappingURL=committee-reports.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"committee-reports.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/committee-reports.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * @fileoverview Tool for browsing and retrieving CRS policy analysis reports.
3
+ * @module mcp-server/tools/definitions/crs-reports
4
+ */
5
+ import { z } from '@cyanheads/mcp-ts-core';
6
+ export declare const crsReportsTool: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
7
+ operation: z.ZodEnum<{
8
+ get: "get";
9
+ list: "list";
10
+ }>;
11
+ reportNumber: z.ZodOptional<z.ZodString>;
12
+ limit: z.ZodDefault<z.ZodNumber>;
13
+ offset: z.ZodDefault<z.ZodNumber>;
14
+ }, z.core.$strip>, z.ZodObject<{}, z.core.$loose>>;
15
+ //# sourceMappingURL=crs-reports.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"crs-reports.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/crs-reports.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAKjD,eAAO,MAAM,cAAc;;;;;;;;kDAsCzB,CAAC"}