legismcp 0.3.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.
Files changed (71) hide show
  1. package/README.md +69 -0
  2. package/bin/legismcp.js +2 -0
  3. package/dist/services/CongressApiService.d.ts +128 -0
  4. package/dist/services/CongressApiService.d.ts.map +1 -0
  5. package/dist/services/CongressApiService.js +355 -0
  6. package/dist/services/CongressApiService.js.map +1 -0
  7. package/dist/services/RateLimitService.d.ts +38 -0
  8. package/dist/services/RateLimitService.d.ts.map +1 -0
  9. package/dist/services/RateLimitService.js +57 -0
  10. package/dist/services/RateLimitService.js.map +1 -0
  11. package/dist/stdio.d.ts +3 -0
  12. package/dist/stdio.d.ts.map +1 -0
  13. package/dist/stdio.js +39 -0
  14. package/dist/stdio.js.map +1 -0
  15. package/dist/tools/analysis/billAnalysisParams.d.ts +11 -0
  16. package/dist/tools/analysis/billAnalysisParams.d.ts.map +1 -0
  17. package/dist/tools/analysis/billAnalysisParams.js +21 -0
  18. package/dist/tools/analysis/billAnalysisParams.js.map +1 -0
  19. package/dist/tools/analysis/billAnalysisTool.d.ts +9 -0
  20. package/dist/tools/analysis/billAnalysisTool.d.ts.map +1 -0
  21. package/dist/tools/analysis/billAnalysisTool.js +9 -0
  22. package/dist/tools/analysis/billAnalysisTool.js.map +1 -0
  23. package/dist/tools/analysis/enhancedBillAnalysisTool.d.ts +17 -0
  24. package/dist/tools/analysis/enhancedBillAnalysisTool.d.ts.map +1 -0
  25. package/dist/tools/analysis/enhancedBillAnalysisTool.js +202 -0
  26. package/dist/tools/analysis/enhancedBillAnalysisTool.js.map +1 -0
  27. package/dist/tools/bills/getBill.d.ts +13 -0
  28. package/dist/tools/bills/getBill.d.ts.map +1 -0
  29. package/dist/tools/bills/getBill.js +87 -0
  30. package/dist/tools/bills/getBill.js.map +1 -0
  31. package/dist/tools/bills/listRecentBills.d.ts +14 -0
  32. package/dist/tools/bills/listRecentBills.d.ts.map +1 -0
  33. package/dist/tools/bills/listRecentBills.js +83 -0
  34. package/dist/tools/bills/listRecentBills.js.map +1 -0
  35. package/dist/tools/errors/index.d.ts +25 -0
  36. package/dist/tools/errors/index.d.ts.map +1 -0
  37. package/dist/tools/errors/index.js +43 -0
  38. package/dist/tools/errors/index.js.map +1 -0
  39. package/dist/tools/index.d.ts +9 -0
  40. package/dist/tools/index.d.ts.map +1 -0
  41. package/dist/tools/index.js +52 -0
  42. package/dist/tools/index.js.map +1 -0
  43. package/dist/tools/members/memberDetails.d.ts +47 -0
  44. package/dist/tools/members/memberDetails.d.ts.map +1 -0
  45. package/dist/tools/members/memberDetails.js +173 -0
  46. package/dist/tools/members/memberDetails.js.map +1 -0
  47. package/dist/tools/members/memberSearch.d.ts +78 -0
  48. package/dist/tools/members/memberSearch.d.ts.map +1 -0
  49. package/dist/tools/members/memberSearch.js +244 -0
  50. package/dist/tools/members/memberSearch.js.map +1 -0
  51. package/dist/tools/subresource/subresourceTool.d.ts +56 -0
  52. package/dist/tools/subresource/subresourceTool.d.ts.map +1 -0
  53. package/dist/tools/subresource/subresourceTool.js +209 -0
  54. package/dist/tools/subresource/subresourceTool.js.map +1 -0
  55. package/dist/tools/trending/trendingBillsTool.d.ts +44 -0
  56. package/dist/tools/trending/trendingBillsTool.d.ts.map +1 -0
  57. package/dist/tools/trending/trendingBillsTool.js +140 -0
  58. package/dist/tools/trending/trendingBillsTool.js.map +1 -0
  59. package/dist/utils/congress.d.ts +6 -0
  60. package/dist/utils/congress.d.ts.map +1 -0
  61. package/dist/utils/congress.js +14 -0
  62. package/dist/utils/congress.js.map +1 -0
  63. package/dist/utils/errors.d.ts +66 -0
  64. package/dist/utils/errors.d.ts.map +1 -0
  65. package/dist/utils/errors.js +105 -0
  66. package/dist/utils/errors.js.map +1 -0
  67. package/dist/utils/member.d.ts +12 -0
  68. package/dist/utils/member.d.ts.map +1 -0
  69. package/dist/utils/member.js +35 -0
  70. package/dist/utils/member.js.map +1 -0
  71. package/package.json +50 -0
@@ -0,0 +1,83 @@
1
+ import { z } from "zod";
2
+ import { getCurrentCongress } from "../../utils/congress.js";
3
+ export const TOOL_NAME = "list-recent-bills";
4
+ export const TOOL_DESCRIPTION = `Lists recent congressional bills sorted by date of latest action.
5
+ Returns the most recently updated bills from Congress.
6
+
7
+ Since the Congress.gov API does not support text search, this tool helps you:
8
+ - See what bills are currently active in Congress
9
+ - Find bills by browsing recent activity
10
+ - Get bill identifiers for further analysis`;
11
+ export const TOOL_PARAMS = {
12
+ congress: z.number().int().min(100).max(150).optional().describe("Filter by specific congress number (e.g., 119). If omitted, defaults to the current congress."),
13
+ billType: z.string().optional().describe("Filter by bill type: hr, s, hjres, sjres, hconres, sconres, hres, sres"),
14
+ limit: z.number().int().min(1).max(100).default(20).describe("Number of bills to return (max 100)"),
15
+ offset: z.number().int().min(0).default(0).describe("Number of bills to skip for pagination")
16
+ };
17
+ export async function handleListRecentBills(args, congressApi) {
18
+ try {
19
+ const filters = {};
20
+ if (args.congress) {
21
+ filters.congress = args.congress.toString();
22
+ }
23
+ else {
24
+ // Default to current congress to avoid returning ancient bills
25
+ filters.congress = String(getCurrentCongress());
26
+ }
27
+ if (args.billType) {
28
+ filters.billType = args.billType.toLowerCase();
29
+ }
30
+ const data = await congressApi.searchCollection('bill', {
31
+ limit: args.limit,
32
+ offset: args.offset,
33
+ sort: 'updateDate+desc',
34
+ filters
35
+ });
36
+ const bills = data.bills || [];
37
+ // Format the response
38
+ let content = `Found ${bills.length} recent bills`;
39
+ if (args.congress) {
40
+ content += ` from the ${args.congress}th Congress`;
41
+ }
42
+ if (args.billType) {
43
+ content += ` of type ${args.billType.toUpperCase()}`;
44
+ }
45
+ content += ":\n\n";
46
+ bills.forEach((bill, index) => {
47
+ const billType = (bill.type || bill.billType || '').toUpperCase();
48
+ const billNumber = bill.number || bill.billNumber || '';
49
+ const congress = bill.congress || '';
50
+ content += `${index + 1}. **${billType} ${billNumber}** (${congress}th Congress)\n`;
51
+ content += ` Title: ${bill.title}\n`;
52
+ if (bill.sponsors && bill.sponsors.length > 0) {
53
+ const sponsor = bill.sponsors[0];
54
+ content += ` Sponsor: ${sponsor.fullName || sponsor.firstName + ' ' + sponsor.lastName} (${sponsor.party || '?'}-${sponsor.state || '?'})\n`;
55
+ }
56
+ if (bill.latestAction) {
57
+ content += ` Latest Action: ${bill.latestAction.text} (${bill.latestAction.actionDate})\n`;
58
+ }
59
+ if (bill.policyArea) {
60
+ content += ` Policy Area: ${bill.policyArea.name || bill.policyArea}\n`;
61
+ }
62
+ content += ` Bill ID: ${congress}-${billType.toLowerCase()}-${billNumber}\n`;
63
+ content += "\n";
64
+ });
65
+ if (bills.length === args.limit) {
66
+ content += `\nShowing ${args.offset + 1}-${args.offset + bills.length} results. `;
67
+ content += `Use offset=${args.offset + args.limit} to see more.`;
68
+ }
69
+ return {
70
+ content: [{ text: content, type: "text" }],
71
+ };
72
+ }
73
+ catch (error) {
74
+ return {
75
+ content: [{
76
+ text: `Failed to list recent bills: ${error instanceof Error ? error.message : String(error)}`,
77
+ type: "text"
78
+ }],
79
+ isError: true
80
+ };
81
+ }
82
+ }
83
+ //# sourceMappingURL=listRecentBills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"listRecentBills.js","sourceRoot":"","sources":["../../../src/tools/bills/listRecentBills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Custom error types for MCP tools
3
+ * These map to appropriate MCP ErrorCode values
4
+ */
5
+ export declare class ValidationError extends Error {
6
+ details?: any;
7
+ constructor(message: string, details?: any);
8
+ }
9
+ export declare class NotFoundError extends Error {
10
+ constructor(message: string);
11
+ }
12
+ export declare class RateLimitError extends Error {
13
+ constructor(message: string);
14
+ }
15
+ export declare class ApiError extends Error {
16
+ statusCode: number;
17
+ constructor(message: string, statusCode: number);
18
+ }
19
+ export declare class InvalidParameterError extends Error {
20
+ constructor(message: string);
21
+ }
22
+ export declare class AuthenticationError extends Error {
23
+ constructor(message: string);
24
+ }
25
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/tools/errors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,qBAAa,eAAgB,SAAQ,KAAK;IACjC,OAAO,CAAC,EAAE,GAAG,CAAC;gBAET,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG;CAK3C;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,cAAe,SAAQ,KAAK;gBAC3B,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,QAAS,SAAQ,KAAK;IAC1B,UAAU,EAAE,MAAM,CAAC;gBAEd,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM;CAKhD;AAED,qBAAa,qBAAsB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI5B;AAED,qBAAa,mBAAoB,SAAQ,KAAK;gBAChC,OAAO,EAAE,MAAM;CAI5B"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Custom error types for MCP tools
3
+ * These map to appropriate MCP ErrorCode values
4
+ */
5
+ export class ValidationError extends Error {
6
+ constructor(message, details) {
7
+ super(message);
8
+ this.name = 'ValidationError';
9
+ this.details = details;
10
+ }
11
+ }
12
+ export class NotFoundError extends Error {
13
+ constructor(message) {
14
+ super(message);
15
+ this.name = 'NotFoundError';
16
+ }
17
+ }
18
+ export class RateLimitError extends Error {
19
+ constructor(message) {
20
+ super(message);
21
+ this.name = 'RateLimitError';
22
+ }
23
+ }
24
+ export class ApiError extends Error {
25
+ constructor(message, statusCode) {
26
+ super(message);
27
+ this.name = 'ApiError';
28
+ this.statusCode = statusCode;
29
+ }
30
+ }
31
+ export class InvalidParameterError extends Error {
32
+ constructor(message) {
33
+ super(message);
34
+ this.name = 'InvalidParameterError';
35
+ }
36
+ }
37
+ export class AuthenticationError extends Error {
38
+ constructor(message) {
39
+ super(message);
40
+ this.name = 'AuthenticationError';
41
+ }
42
+ }
43
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/tools/errors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAGxC,YAAY,OAAe,EAAE,OAAa;QACxC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,eAAe,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGjC,YAAY,OAAe,EAAE,UAAkB;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,KAAK;IAC9C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,KAAK;IAC5C,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
2
+ import { CongressApiService } from "../services/CongressApiService.js";
3
+ /**
4
+ * Register all MCP tools with the server
5
+ * @param server - The MCP server instance
6
+ * @param congressApi - CongressApiService instance for direct API access
7
+ */
8
+ export declare function registerTools(server: McpServer, congressApi: CongressApiService): void;
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AAoDvE;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,QAyE/E"}
@@ -0,0 +1,52 @@
1
+ import { z } from "zod";
2
+ // Import comprehensive tool implementations
3
+ import { TOOL_NAME as BILL_ANALYSIS_NAME, TOOL_DESCRIPTION as BILL_ANALYSIS_DESC, TOOL_PARAMS as BILL_ANALYSIS_PARAMS } from "./analysis/billAnalysisParams.js";
4
+ import { handleBillAnalysis } from "./analysis/billAnalysisTool.js";
5
+ // Import new bill tools
6
+ import { TOOL_NAME as LIST_RECENT_BILLS_NAME, TOOL_DESCRIPTION as LIST_RECENT_BILLS_DESC, TOOL_PARAMS as LIST_RECENT_BILLS_PARAMS, handleListRecentBills } from "./bills/listRecentBills.js";
7
+ import { TOOL_NAME as GET_BILL_NAME, TOOL_DESCRIPTION as GET_BILL_DESC, TOOL_PARAMS as GET_BILL_PARAMS, handleGetBill } from "./bills/getBill.js";
8
+ // Import trending bills tool
9
+ import { handleTrendingBills } from "./trending/trendingBillsTool.js";
10
+ // Import comprehensive member tools
11
+ import { TOOL_NAME as MEMBER_DETAILS_NAME, TOOL_DESCRIPTION as MEMBER_DETAILS_DESC, TOOL_PARAMS as MEMBER_DETAILS_PARAMS, handleMemberDetails } from "./members/memberDetails.js";
12
+ import { TOOL_NAME as MEMBER_SEARCH_NAME, TOOL_DESCRIPTION as MEMBER_SEARCH_DESC, TOOL_PARAMS as MEMBER_SEARCH_PARAMS, handleMemberSearch } from "./members/memberSearch.js";
13
+ import { TOOL_NAME as SUBRESOURCE_NAME, TOOL_DESCRIPTION as SUBRESOURCE_DESC, TOOL_PARAMS as SUBRESOURCE_PARAMS, handleSubresource } from "./subresource/subresourceTool.js";
14
+ /**
15
+ * Register all MCP tools with the server
16
+ * @param server - The MCP server instance
17
+ * @param congressApi - CongressApiService instance for direct API access
18
+ */
19
+ export function registerTools(server, congressApi) {
20
+ // Register the bill analysis tool
21
+ server.tool(BILL_ANALYSIS_NAME, BILL_ANALYSIS_DESC, BILL_ANALYSIS_PARAMS, async (args) => {
22
+ return handleBillAnalysis(args, congressApi);
23
+ });
24
+ // Register list recent bills tool
25
+ server.tool(LIST_RECENT_BILLS_NAME, LIST_RECENT_BILLS_DESC, LIST_RECENT_BILLS_PARAMS, async (args) => {
26
+ return handleListRecentBills(args, congressApi);
27
+ });
28
+ // Register get bill tool
29
+ server.tool(GET_BILL_NAME, GET_BILL_DESC, GET_BILL_PARAMS, async (args) => {
30
+ return handleGetBill(args, congressApi);
31
+ });
32
+ // Register trending bills tool
33
+ server.tool("trending-bills", "List recently active congressional bills with sub-resource data. Returns raw data sorted by latest update date.", {
34
+ timeframe: z.enum(["week", "month", "quarter", "year"]).optional().default("month").describe("Time period to look back for recent activity"),
35
+ limit: z.number().min(1).max(50).optional().default(10).describe("Maximum number of results to return"),
36
+ congress: z.number().optional().describe("Specific Congress number to search")
37
+ }, async (args) => {
38
+ return handleTrendingBills(args, congressApi);
39
+ });
40
+ // Register comprehensive member tools
41
+ server.tool(MEMBER_DETAILS_NAME, MEMBER_DETAILS_DESC, MEMBER_DETAILS_PARAMS, async (args) => {
42
+ return handleMemberDetails(args, congressApi);
43
+ });
44
+ server.tool(MEMBER_SEARCH_NAME, MEMBER_SEARCH_DESC, MEMBER_SEARCH_PARAMS, async (args) => {
45
+ return handleMemberSearch(args, congressApi);
46
+ });
47
+ // Register subresource tool
48
+ server.tool(SUBRESOURCE_NAME, SUBRESOURCE_DESC, SUBRESOURCE_PARAMS, async (args) => {
49
+ return handleSubresource(args, congressApi);
50
+ });
51
+ }
52
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ import { z } from "zod";
3
+ import { CongressApiService } from "../../services/CongressApiService.js";
4
+ /**
5
+ * Zod schema for member details parameters
6
+ */
7
+ export declare const memberDetailsParamsSchema: z.ZodObject<{
8
+ memberId: z.ZodString;
9
+ congress: z.ZodOptional<z.ZodString>;
10
+ includeDetails: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ memberId: string;
13
+ includeDetails: boolean;
14
+ congress?: string | undefined;
15
+ }, {
16
+ memberId: string;
17
+ congress?: string | undefined;
18
+ includeDetails?: boolean | undefined;
19
+ }>;
20
+ export type MemberDetailsParams = z.infer<typeof memberDetailsParamsSchema>;
21
+ /**
22
+ * Member details tool — fetches member data with optional sub-resources
23
+ */
24
+ export declare class MemberDetailsTool {
25
+ private congressApi;
26
+ constructor(congressApi: CongressApiService);
27
+ /**
28
+ * Get member details with optional sub-resources
29
+ */
30
+ getMemberDetails(params: MemberDetailsParams): Promise<any>;
31
+ /**
32
+ * Fetch member with sub-resource data
33
+ */
34
+ private fetchMemberWithSubresources;
35
+ }
36
+ /**
37
+ * Handle member details tool execution
38
+ */
39
+ export declare function handleMemberDetails(params: MemberDetailsParams, congressApi: CongressApiService): Promise<CallToolResult>;
40
+ export declare const TOOL_NAME = "member-details";
41
+ export declare const TOOL_DESCRIPTION = "Get detailed information about a specific member of Congress.\n\nUse this tool after finding a member's bioguideId via member-search. Returns\nraw member data, sponsored/cosponsored legislation, leadership positions, and\nrecent activity counts. For questions like \"What has Nancy Pelosi sponsored?\",\nfirst use member-search to find the bioguideId, then use this tool.\n\nProvides:\n- Basic member information (name, party, state, chamber, district)\n- Sponsored and cosponsored legislation (top 10 each)\n- Legislative counts (sponsored, cosponsored, total)\n- Leadership positions\n- Recent activity counts (last 6 months)\n\nExamples:\n- Get Nancy Pelosi's details: memberId = \"P000197\"\n- Get specific congress data: memberId = \"P000197\", congress = \"118\"\n- Basic info only: memberId = \"P000197\", includeDetails = false";
42
+ export declare const TOOL_PARAMS: {
43
+ memberId: z.ZodString;
44
+ congress: z.ZodOptional<z.ZodString>;
45
+ includeDetails: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
46
+ };
47
+ //# sourceMappingURL=memberDetails.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memberDetails.d.ts","sourceRoot":"","sources":["../../../src/tools/members/memberDetails.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAG1E;;GAEG;AACH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;EAIpC,CAAC;AAEH,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAE5E;;GAEG;AACH,qBAAa,iBAAiB;IAChB,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,kBAAkB;IAEnD;;OAEG;IACG,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,GAAG,OAAO,CAAC,GAAG,CAAC;IAoCjE;;OAEG;YACW,2BAA2B;CAgF1C;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,mBAAmB,EAC3B,WAAW,EAAE,kBAAkB,GAC9B,OAAO,CAAC,cAAc,CAAC,CAsBzB;AAGD,eAAO,MAAM,SAAS,mBAAmB,CAAC;AAC1C,eAAO,MAAM,gBAAgB,w0BAiBmC,CAAC;AAEjE,eAAO,MAAM,WAAW;;;;CAIvB,CAAC"}
@@ -0,0 +1,173 @@
1
+ import { z } from "zod";
2
+ import { NotFoundError } from "../../utils/errors.js";
3
+ /**
4
+ * Zod schema for member details parameters
5
+ */
6
+ export const memberDetailsParamsSchema = z.object({
7
+ memberId: z.string().min(1).describe("Bioguide ID of the member (e.g., 'P000197')"),
8
+ congress: z.string().optional().describe("Specific congress number (e.g., '118')"),
9
+ includeDetails: z.boolean().optional().default(true).describe("Whether to include detailed sub-resource data")
10
+ });
11
+ /**
12
+ * Member details tool — fetches member data with optional sub-resources
13
+ */
14
+ export class MemberDetailsTool {
15
+ constructor(congressApi) {
16
+ this.congressApi = congressApi;
17
+ }
18
+ /**
19
+ * Get member details with optional sub-resources
20
+ */
21
+ async getMemberDetails(params) {
22
+ try {
23
+ console.log('Fetching member details', { memberId: params.memberId });
24
+ const memberData = await this.congressApi.getMemberDetails({
25
+ memberId: params.memberId,
26
+ congress: params.congress
27
+ });
28
+ if (!memberData.member) {
29
+ throw new NotFoundError(`Member not found: ${params.memberId}`);
30
+ }
31
+ const member = memberData.member;
32
+ if (params.includeDetails) {
33
+ return await this.fetchMemberWithSubresources(member);
34
+ }
35
+ return {
36
+ member,
37
+ metadata: {
38
+ fetchedAt: new Date().toISOString(),
39
+ congress: params.congress
40
+ }
41
+ };
42
+ }
43
+ catch (error) {
44
+ console.error('Error fetching member details', {
45
+ memberId: params.memberId,
46
+ error: error.message
47
+ });
48
+ throw error;
49
+ }
50
+ }
51
+ /**
52
+ * Fetch member with sub-resource data
53
+ */
54
+ async fetchMemberWithSubresources(member) {
55
+ const memberId = member.bioguideId;
56
+ if (!memberId) {
57
+ return {
58
+ member,
59
+ metadata: { fetchedAt: new Date().toISOString() }
60
+ };
61
+ }
62
+ try {
63
+ const parentUri = `congress-gov:/member/${memberId}`;
64
+ const [sponsoredResult, cosponsoredResult] = await Promise.allSettled([
65
+ this.congressApi.getSubResource(parentUri, 'sponsored-legislation', { limit: 50 }),
66
+ this.congressApi.getSubResource(parentUri, 'cosponsored-legislation', { limit: 50 })
67
+ ]);
68
+ const sponsoredLegislation = sponsoredResult.status === 'fulfilled' ? sponsoredResult.value : null;
69
+ const cosponsoredLegislation = cosponsoredResult.status === 'fulfilled' ? cosponsoredResult.value : null;
70
+ const sponsoredBills = sponsoredLegislation?.sponsoredLegislation || [];
71
+ const cosponsoredBills = cosponsoredLegislation?.cosponsoredLegislation || [];
72
+ // Extract leadership positions from member data
73
+ const leadershipPositions = [];
74
+ if (member.leadership) {
75
+ leadershipPositions.push({
76
+ type: 'Chamber Leadership',
77
+ title: member.leadership
78
+ });
79
+ }
80
+ // Recent activity (last 6 months)
81
+ const sixMonthsAgo = new Date(Date.now() - 6 * 30 * 24 * 60 * 60 * 1000);
82
+ const recentSponsored = sponsoredBills.filter((bill) => new Date(bill.introducedDate) >= sixMonthsAgo);
83
+ const recentCosponsored = cosponsoredBills.filter((bill) => new Date(bill.introducedDate) >= sixMonthsAgo);
84
+ return {
85
+ member,
86
+ sponsoredLegislation: sponsoredBills.slice(0, 10),
87
+ cosponsoredLegislation: cosponsoredBills.slice(0, 10),
88
+ legislativeCounts: {
89
+ sponsored: sponsoredBills.length,
90
+ cosponsored: cosponsoredBills.length,
91
+ total: sponsoredBills.length + cosponsoredBills.length
92
+ },
93
+ leadershipPositions,
94
+ recentActivity: {
95
+ recentSponsored: recentSponsored.length,
96
+ recentCosponsored: recentCosponsored.length,
97
+ recentTotal: recentSponsored.length + recentCosponsored.length
98
+ },
99
+ metadata: {
100
+ fetchedAt: new Date().toISOString()
101
+ }
102
+ };
103
+ }
104
+ catch (error) {
105
+ console.warn('Failed to fetch sub-resources for member', {
106
+ memberId,
107
+ error: error.message
108
+ });
109
+ return {
110
+ member,
111
+ sponsoredLegislation: [],
112
+ cosponsoredLegislation: [],
113
+ legislativeCounts: { sponsored: 0, cosponsored: 0, total: 0 },
114
+ leadershipPositions: [],
115
+ recentActivity: { recentSponsored: 0, recentCosponsored: 0, recentTotal: 0 },
116
+ metadata: {
117
+ fetchedAt: new Date().toISOString()
118
+ }
119
+ };
120
+ }
121
+ }
122
+ }
123
+ /**
124
+ * Handle member details tool execution
125
+ */
126
+ export async function handleMemberDetails(params, congressApi) {
127
+ try {
128
+ const tool = new MemberDetailsTool(congressApi);
129
+ const result = await tool.getMemberDetails(params);
130
+ return {
131
+ content: [{
132
+ type: "text",
133
+ text: JSON.stringify(result, null, 2)
134
+ }]
135
+ };
136
+ }
137
+ catch (error) {
138
+ console.error('Error in handleMemberDetails:', error);
139
+ return {
140
+ content: [{
141
+ type: "text",
142
+ text: `Failed to get member details: ${error instanceof Error ? error.message : String(error)}`
143
+ }],
144
+ isError: true
145
+ };
146
+ }
147
+ }
148
+ // Export constants for tool registration
149
+ export const TOOL_NAME = "member-details";
150
+ export const TOOL_DESCRIPTION = `Get detailed information about a specific member of Congress.
151
+
152
+ Use this tool after finding a member's bioguideId via member-search. Returns
153
+ raw member data, sponsored/cosponsored legislation, leadership positions, and
154
+ recent activity counts. For questions like "What has Nancy Pelosi sponsored?",
155
+ first use member-search to find the bioguideId, then use this tool.
156
+
157
+ Provides:
158
+ - Basic member information (name, party, state, chamber, district)
159
+ - Sponsored and cosponsored legislation (top 10 each)
160
+ - Legislative counts (sponsored, cosponsored, total)
161
+ - Leadership positions
162
+ - Recent activity counts (last 6 months)
163
+
164
+ Examples:
165
+ - Get Nancy Pelosi's details: memberId = "P000197"
166
+ - Get specific congress data: memberId = "P000197", congress = "118"
167
+ - Basic info only: memberId = "P000197", includeDetails = false`;
168
+ export const TOOL_PARAMS = {
169
+ memberId: z.string().min(1).describe("Bioguide ID of the member (e.g., 'P000197')"),
170
+ congress: z.string().optional().describe("Specific congress number (e.g., '118')"),
171
+ includeDetails: z.boolean().optional().default(true).describe("Whether to include detailed sub-resource data")
172
+ };
173
+ //# sourceMappingURL=memberDetails.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memberDetails.js","sourceRoot":"","sources":["../../../src/tools/members/memberDetails.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import { CallToolResult } from "@modelcontextprotocol/sdk/types.js";
2
+ import { z } from "zod";
3
+ import { CongressApiService } from "../../services/CongressApiService.js";
4
+ /**
5
+ * Zod schema for member search parameters
6
+ */
7
+ export declare const memberSearchParamsSchema: z.ZodObject<{
8
+ query: z.ZodOptional<z.ZodString>;
9
+ chamber: z.ZodOptional<z.ZodEnum<["house", "senate"]>>;
10
+ state: z.ZodOptional<z.ZodString>;
11
+ party: z.ZodOptional<z.ZodEnum<["D", "R", "I"]>>;
12
+ currentMember: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
13
+ congress: z.ZodOptional<z.ZodString>;
14
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
15
+ offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
16
+ }, "strip", z.ZodTypeAny, {
17
+ currentMember: boolean;
18
+ limit: number;
19
+ offset: number;
20
+ congress?: string | undefined;
21
+ chamber?: "house" | "senate" | undefined;
22
+ query?: string | undefined;
23
+ party?: "D" | "R" | "I" | undefined;
24
+ state?: string | undefined;
25
+ }, {
26
+ congress?: string | undefined;
27
+ currentMember?: boolean | undefined;
28
+ chamber?: "house" | "senate" | undefined;
29
+ query?: string | undefined;
30
+ limit?: number | undefined;
31
+ offset?: number | undefined;
32
+ party?: "D" | "R" | "I" | undefined;
33
+ state?: string | undefined;
34
+ }>;
35
+ export type MemberSearchParams = z.infer<typeof memberSearchParamsSchema>;
36
+ /**
37
+ * Member search tool with filtering
38
+ */
39
+ export declare class MemberSearchTool {
40
+ private congressApi;
41
+ constructor(congressApi: CongressApiService);
42
+ /**
43
+ * Search for members with filtering
44
+ */
45
+ searchMembers(params: MemberSearchParams): Promise<any>;
46
+ private static STATE_MAP;
47
+ private static PARTY_MAP;
48
+ private static CHAMBER_MAP;
49
+ /**
50
+ * Apply local filters that may not be supported by API
51
+ */
52
+ private applyLocalFilters;
53
+ /**
54
+ * Generate member summary
55
+ */
56
+ private generateMemberSummary;
57
+ /**
58
+ * Format search criteria for display
59
+ */
60
+ private formatSearchCriteria;
61
+ }
62
+ /**
63
+ * Handle member search tool execution
64
+ */
65
+ export declare function handleMemberSearch(params: MemberSearchParams, congressApi: CongressApiService): Promise<CallToolResult>;
66
+ export declare const TOOL_NAME = "member-search";
67
+ export declare const TOOL_DESCRIPTION = "Search for members of Congress with filtering.\n\nUse this tool to find members by name, state, party, or chamber. This is the\nstarting point for member-related queries like \"Who represents Texas?\" or\n\"Find Ted Cruz\". Use the returned bioguideId with member-details for full info.\n\nFiltering capabilities:\n- Name-based search with partial matching\n- Chamber filtering (House/Senate)\n- State and party filtering\n- Current/former member filtering\n\nExamples:\n- Search by name: query = \"Pelosi\"\n- Search by state: state = \"CA\"\n- Search House Republicans: chamber = \"house\", party = \"R\"\n- Search former members: currentMember = false";
68
+ export declare const TOOL_PARAMS: {
69
+ query: z.ZodOptional<z.ZodString>;
70
+ chamber: z.ZodOptional<z.ZodEnum<["house", "senate"]>>;
71
+ state: z.ZodOptional<z.ZodString>;
72
+ party: z.ZodOptional<z.ZodEnum<["D", "R", "I"]>>;
73
+ currentMember: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
74
+ congress: z.ZodOptional<z.ZodString>;
75
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
76
+ offset: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
77
+ };
78
+ //# sourceMappingURL=memberSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memberSearch.d.ts","sourceRoot":"","sources":["../../../src/tools/members/memberSearch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,kBAAkB,EAAE,MAAM,sCAAsC,CAAC;AAG1E;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;EASnC,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;GAEG;AACH,qBAAa,gBAAgB;IACf,OAAO,CAAC,WAAW;gBAAX,WAAW,EAAE,kBAAkB;IAEnD;;OAEG;IACG,aAAa,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,GAAG,CAAC;IAkF7D,OAAO,CAAC,MAAM,CAAC,SAAS,CAatB;IAEF,OAAO,CAAC,MAAM,CAAC,SAAS,CAEtB;IAEF,OAAO,CAAC,MAAM,CAAC,WAAW,CAExB;IAEF;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAqDzB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAI7B;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAY7B;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,kBAAkB,EAC1B,WAAW,EAAE,kBAAkB,GAC9B,OAAO,CAAC,cAAc,CAAC,CAsBzB;AAGD,eAAO,MAAM,SAAS,kBAAkB,CAAC;AACzC,eAAO,MAAM,gBAAgB,mpBAgBkB,CAAC;AAEhD,eAAO,MAAM,WAAW;;;;;;;;;CASvB,CAAC"}