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.
- package/README.md +69 -0
- package/bin/legismcp.js +2 -0
- package/dist/services/CongressApiService.d.ts +128 -0
- package/dist/services/CongressApiService.d.ts.map +1 -0
- package/dist/services/CongressApiService.js +355 -0
- package/dist/services/CongressApiService.js.map +1 -0
- package/dist/services/RateLimitService.d.ts +38 -0
- package/dist/services/RateLimitService.d.ts.map +1 -0
- package/dist/services/RateLimitService.js +57 -0
- package/dist/services/RateLimitService.js.map +1 -0
- package/dist/stdio.d.ts +3 -0
- package/dist/stdio.d.ts.map +1 -0
- package/dist/stdio.js +39 -0
- package/dist/stdio.js.map +1 -0
- package/dist/tools/analysis/billAnalysisParams.d.ts +11 -0
- package/dist/tools/analysis/billAnalysisParams.d.ts.map +1 -0
- package/dist/tools/analysis/billAnalysisParams.js +21 -0
- package/dist/tools/analysis/billAnalysisParams.js.map +1 -0
- package/dist/tools/analysis/billAnalysisTool.d.ts +9 -0
- package/dist/tools/analysis/billAnalysisTool.d.ts.map +1 -0
- package/dist/tools/analysis/billAnalysisTool.js +9 -0
- package/dist/tools/analysis/billAnalysisTool.js.map +1 -0
- package/dist/tools/analysis/enhancedBillAnalysisTool.d.ts +17 -0
- package/dist/tools/analysis/enhancedBillAnalysisTool.d.ts.map +1 -0
- package/dist/tools/analysis/enhancedBillAnalysisTool.js +202 -0
- package/dist/tools/analysis/enhancedBillAnalysisTool.js.map +1 -0
- package/dist/tools/bills/getBill.d.ts +13 -0
- package/dist/tools/bills/getBill.d.ts.map +1 -0
- package/dist/tools/bills/getBill.js +87 -0
- package/dist/tools/bills/getBill.js.map +1 -0
- package/dist/tools/bills/listRecentBills.d.ts +14 -0
- package/dist/tools/bills/listRecentBills.d.ts.map +1 -0
- package/dist/tools/bills/listRecentBills.js +83 -0
- package/dist/tools/bills/listRecentBills.js.map +1 -0
- package/dist/tools/errors/index.d.ts +25 -0
- package/dist/tools/errors/index.d.ts.map +1 -0
- package/dist/tools/errors/index.js +43 -0
- package/dist/tools/errors/index.js.map +1 -0
- package/dist/tools/index.d.ts +9 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +52 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/members/memberDetails.d.ts +47 -0
- package/dist/tools/members/memberDetails.d.ts.map +1 -0
- package/dist/tools/members/memberDetails.js +173 -0
- package/dist/tools/members/memberDetails.js.map +1 -0
- package/dist/tools/members/memberSearch.d.ts +78 -0
- package/dist/tools/members/memberSearch.d.ts.map +1 -0
- package/dist/tools/members/memberSearch.js +244 -0
- package/dist/tools/members/memberSearch.js.map +1 -0
- package/dist/tools/subresource/subresourceTool.d.ts +56 -0
- package/dist/tools/subresource/subresourceTool.d.ts.map +1 -0
- package/dist/tools/subresource/subresourceTool.js +209 -0
- package/dist/tools/subresource/subresourceTool.js.map +1 -0
- package/dist/tools/trending/trendingBillsTool.d.ts +44 -0
- package/dist/tools/trending/trendingBillsTool.d.ts.map +1 -0
- package/dist/tools/trending/trendingBillsTool.js +140 -0
- package/dist/tools/trending/trendingBillsTool.js.map +1 -0
- package/dist/utils/congress.d.ts +6 -0
- package/dist/utils/congress.d.ts.map +1 -0
- package/dist/utils/congress.js +14 -0
- package/dist/utils/congress.js.map +1 -0
- package/dist/utils/errors.d.ts +66 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +105 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/member.d.ts +12 -0
- package/dist/utils/member.d.ts.map +1 -0
- package/dist/utils/member.js +35 -0
- package/dist/utils/member.js.map +1 -0
- 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":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAE7D,MAAM,CAAC,MAAM,SAAS,GAAG,mBAAmB,CAAC;AAE7C,MAAM,CAAC,MAAM,gBAAgB,GAAG;;;;;;4CAMY,CAAC;AAE7C,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAC9D,+FAA+F,CAChG;IACD,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACtC,wEAAwE,CACzE;IACD,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,CAC1D,qCAAqC,CACtC;IACD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CACjD,wCAAwC,CACzC;CACF,CAAC;AAIF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,IAA2B,EAC3B,WAA+B;IAE/B,IAAI,CAAC;QACH,MAAM,OAAO,GAA2B,EAAE,CAAC;QAC3C,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAC9C,CAAC;aAAM,CAAC;YACN,+DAA+D;YAC/D,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC,CAAC;QAClD,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QACjD,CAAC;QAED,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,gBAAgB,CAAC,MAAM,EAAE;YACtD,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,IAAI,EAAE,iBAAiB;YACvB,OAAO;SACR,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;QAE/B,sBAAsB;QACtB,IAAI,OAAO,GAAG,SAAS,KAAK,CAAC,MAAM,eAAe,CAAC;QACnD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,IAAI,aAAa,IAAI,CAAC,QAAQ,aAAa,CAAC;QACrD,CAAC;QACD,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,OAAO,IAAI,YAAY,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,OAAO,CAAC;QAEnB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAS,EAAE,KAAa,EAAE,EAAE;YACzC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;YAClE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,IAAI,EAAE,CAAC;YACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,IAAI,EAAE,CAAC;YACrC,OAAO,IAAI,GAAG,KAAK,GAAG,CAAC,OAAO,QAAQ,IAAI,UAAU,OAAO,QAAQ,gBAAgB,CAAC;YACpF,OAAO,IAAI,aAAa,IAAI,CAAC,KAAK,IAAI,CAAC;YACvC,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;gBACjC,OAAO,IAAI,eAAe,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,SAAS,GAAG,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,KAAK,IAAI,GAAG,IAAI,OAAO,CAAC,KAAK,IAAI,GAAG,KAAK,CAAC;YACjJ,CAAC;YACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;gBACtB,OAAO,IAAI,qBAAqB,IAAI,CAAC,YAAY,CAAC,IAAI,KAAK,IAAI,CAAC,YAAY,CAAC,UAAU,KAAK,CAAC;YAC/F,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACpB,OAAO,IAAI,mBAAmB,IAAI,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI,CAAC,UAAU,IAAI,CAAC;YAC5E,CAAC;YACD,OAAO,IAAI,eAAe,QAAQ,IAAI,QAAQ,CAAC,WAAW,EAAE,IAAI,UAAU,IAAI,CAAC;YAC/E,OAAO,IAAI,IAAI,CAAC;QAClB,CAAC,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAChC,OAAO,IAAI,aAAa,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,YAAY,CAAC;YAClF,OAAO,IAAI,cAAc,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,eAAe,CAAC;QACnE,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;SAC3C,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,gCAAgC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;oBAC9F,IAAI,EAAE,MAAM;iBACb,CAAC;YACF,OAAO,EAAE,IAAI;SACd,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -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"}
|