@cyanheads/openstates-mcp-server 0.1.1

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 (77) hide show
  1. package/CLAUDE.md +397 -0
  2. package/Dockerfile +99 -0
  3. package/LICENSE +201 -0
  4. package/README.md +324 -0
  5. package/changelog/0.1.x/0.1.0.md +23 -0
  6. package/changelog/0.1.x/0.1.1.md +29 -0
  7. package/changelog/template.md +119 -0
  8. package/dist/config/server-config.d.ts +13 -0
  9. package/dist/config/server-config.d.ts.map +1 -0
  10. package/dist/config/server-config.js +19 -0
  11. package/dist/config/server-config.js.map +1 -0
  12. package/dist/index.d.ts +7 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +50 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/mcp-server/prompts/definitions/bill-research.prompt.d.ts +11 -0
  17. package/dist/mcp-server/prompts/definitions/bill-research.prompt.d.ts.map +1 -0
  18. package/dist/mcp-server/prompts/definitions/bill-research.prompt.js +65 -0
  19. package/dist/mcp-server/prompts/definitions/bill-research.prompt.js.map +1 -0
  20. package/dist/mcp-server/prompts/definitions/legislator-profile.prompt.d.ts +10 -0
  21. package/dist/mcp-server/prompts/definitions/legislator-profile.prompt.d.ts.map +1 -0
  22. package/dist/mcp-server/prompts/definitions/legislator-profile.prompt.js +55 -0
  23. package/dist/mcp-server/prompts/definitions/legislator-profile.prompt.js.map +1 -0
  24. package/dist/mcp-server/resources/definitions/jurisdiction.resource.d.ts +9 -0
  25. package/dist/mcp-server/resources/definitions/jurisdiction.resource.d.ts.map +1 -0
  26. package/dist/mcp-server/resources/definitions/jurisdiction.resource.js +60 -0
  27. package/dist/mcp-server/resources/definitions/jurisdiction.resource.js.map +1 -0
  28. package/dist/mcp-server/tools/definitions/get-bill.tool.d.ts +121 -0
  29. package/dist/mcp-server/tools/definitions/get-bill.tool.d.ts.map +1 -0
  30. package/dist/mcp-server/tools/definitions/get-bill.tool.js +319 -0
  31. package/dist/mcp-server/tools/definitions/get-bill.tool.js.map +1 -0
  32. package/dist/mcp-server/tools/definitions/get-committee.tool.d.ts +30 -0
  33. package/dist/mcp-server/tools/definitions/get-committee.tool.d.ts.map +1 -0
  34. package/dist/mcp-server/tools/definitions/get-committee.tool.js +89 -0
  35. package/dist/mcp-server/tools/definitions/get-committee.tool.js.map +1 -0
  36. package/dist/mcp-server/tools/definitions/get-event.tool.d.ts +65 -0
  37. package/dist/mcp-server/tools/definitions/get-event.tool.d.ts.map +1 -0
  38. package/dist/mcp-server/tools/definitions/get-event.tool.js +231 -0
  39. package/dist/mcp-server/tools/definitions/get-event.tool.js.map +1 -0
  40. package/dist/mcp-server/tools/definitions/get-jurisdiction.tool.d.ts +34 -0
  41. package/dist/mcp-server/tools/definitions/get-jurisdiction.tool.d.ts.map +1 -0
  42. package/dist/mcp-server/tools/definitions/get-jurisdiction.tool.js +99 -0
  43. package/dist/mcp-server/tools/definitions/get-jurisdiction.tool.js.map +1 -0
  44. package/dist/mcp-server/tools/definitions/get-legislators-by-location.tool.d.ts +53 -0
  45. package/dist/mcp-server/tools/definitions/get-legislators-by-location.tool.d.ts.map +1 -0
  46. package/dist/mcp-server/tools/definitions/get-legislators-by-location.tool.js +156 -0
  47. package/dist/mcp-server/tools/definitions/get-legislators-by-location.tool.js.map +1 -0
  48. package/dist/mcp-server/tools/definitions/list-jurisdictions.tool.d.ts +42 -0
  49. package/dist/mcp-server/tools/definitions/list-jurisdictions.tool.d.ts.map +1 -0
  50. package/dist/mcp-server/tools/definitions/list-jurisdictions.tool.js +110 -0
  51. package/dist/mcp-server/tools/definitions/list-jurisdictions.tool.js.map +1 -0
  52. package/dist/mcp-server/tools/definitions/search-bills.tool.d.ts +102 -0
  53. package/dist/mcp-server/tools/definitions/search-bills.tool.d.ts.map +1 -0
  54. package/dist/mcp-server/tools/definitions/search-bills.tool.js +285 -0
  55. package/dist/mcp-server/tools/definitions/search-bills.tool.js.map +1 -0
  56. package/dist/mcp-server/tools/definitions/search-committees.tool.d.ts +44 -0
  57. package/dist/mcp-server/tools/definitions/search-committees.tool.d.ts.map +1 -0
  58. package/dist/mcp-server/tools/definitions/search-committees.tool.js +127 -0
  59. package/dist/mcp-server/tools/definitions/search-committees.tool.js.map +1 -0
  60. package/dist/mcp-server/tools/definitions/search-events.tool.d.ts +62 -0
  61. package/dist/mcp-server/tools/definitions/search-events.tool.d.ts.map +1 -0
  62. package/dist/mcp-server/tools/definitions/search-events.tool.js +198 -0
  63. package/dist/mcp-server/tools/definitions/search-events.tool.js.map +1 -0
  64. package/dist/mcp-server/tools/definitions/search-people.tool.d.ts +64 -0
  65. package/dist/mcp-server/tools/definitions/search-people.tool.d.ts.map +1 -0
  66. package/dist/mcp-server/tools/definitions/search-people.tool.js +193 -0
  67. package/dist/mcp-server/tools/definitions/search-people.tool.js.map +1 -0
  68. package/dist/services/openstates/openstates-service.d.ts +30 -0
  69. package/dist/services/openstates/openstates-service.d.ts.map +1 -0
  70. package/dist/services/openstates/openstates-service.js +246 -0
  71. package/dist/services/openstates/openstates-service.js.map +1 -0
  72. package/dist/services/openstates/types.d.ts +324 -0
  73. package/dist/services/openstates/types.d.ts.map +1 -0
  74. package/dist/services/openstates/types.js +6 -0
  75. package/dist/services/openstates/types.js.map +1 -0
  76. package/package.json +91 -0
  77. package/server.json +99 -0
@@ -0,0 +1,127 @@
1
+ /**
2
+ * @fileoverview Search committees for a jurisdiction (experimental — not all states have coverage).
3
+ * @module mcp-server/tools/definitions/search-committees
4
+ */
5
+ import { tool, z } from '@cyanheads/mcp-ts-core';
6
+ import { getOpenStatesApiService } from '../../../services/openstates/openstates-service.js';
7
+ const CommitteeIncludeEnum = z.enum(['memberships', 'links', 'sources']);
8
+ export const searchCommittees = tool('openstates_search_committees', {
9
+ title: 'Search Committees',
10
+ description: 'List committees for a jurisdiction. Experimental — Open States is actively working to restore committee support and not all states have data. Use chamber to scope to upper (senate) or lower (house) committees. Use classification=subcommittee to find subcommittees of a parent. Use include=memberships to get the full roster with member roles. The coverage_note field in the output will always note the experimental coverage limitations.',
11
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
12
+ input: z.object({
13
+ jurisdiction: z
14
+ .string()
15
+ .optional()
16
+ .describe('State name, abbreviation, or OCD-ID. Strongly recommended.'),
17
+ classification: z
18
+ .enum(['committee', 'subcommittee'])
19
+ .optional()
20
+ .describe('Filter to parent committees or subcommittees only. Omit for all.'),
21
+ chamber: z
22
+ .enum(['upper', 'lower'])
23
+ .optional()
24
+ .describe('Filter by chamber. "upper" = Senate, "lower" = House/Assembly.'),
25
+ parent: z
26
+ .string()
27
+ .optional()
28
+ .describe('OCD organization ID of a parent committee to retrieve its subcommittees.'),
29
+ include: z
30
+ .array(CommitteeIncludeEnum)
31
+ .optional()
32
+ .describe('Related data to inline. "memberships" includes the full roster with member roles.'),
33
+ page: z.coerce.number().int().min(1).default(1).describe('Page number (1-indexed).'),
34
+ per_page: z.coerce
35
+ .number()
36
+ .int()
37
+ .min(1)
38
+ .max(20)
39
+ .default(10)
40
+ .describe('Results per page. Maximum 20.'),
41
+ }),
42
+ output: z.object({
43
+ results: z
44
+ .array(z
45
+ .object({
46
+ id: z
47
+ .string()
48
+ .describe('OCD organization ID — use as committee_id in openstates_get_committee.'),
49
+ name: z.string().describe('Committee name.'),
50
+ classification: z
51
+ .string()
52
+ .describe('Committee classification: "committee" or "subcommittee".'),
53
+ parent_id: z
54
+ .string()
55
+ .nullable()
56
+ .describe('OCD ID of parent committee, or null for top-level committees.'),
57
+ memberships: z
58
+ .array(z
59
+ .object({
60
+ person_id: z.string().describe('OCD person ID of the member.'),
61
+ person_name: z.string().describe('Member name.'),
62
+ role: z.string().describe('Member role (e.g., "chair", "member").'),
63
+ })
64
+ .describe('Committee membership record.'))
65
+ .optional()
66
+ .describe('Membership roster when include=memberships is requested.'),
67
+ })
68
+ .describe('Committee record.'))
69
+ .describe('Committees matching the search criteria.'),
70
+ pagination: z
71
+ .object({
72
+ page: z.number().describe('Current page.'),
73
+ per_page: z.number().describe('Results per page.'),
74
+ max_page: z.number().describe('Total pages.'),
75
+ total_items: z.number().describe('Total matching committees.'),
76
+ })
77
+ .describe('Pagination metadata.'),
78
+ coverage_note: z
79
+ .string()
80
+ .describe('Committee data is experimental — not all states have coverage in Open States. Empty results may indicate the state lacks data, not that no committees exist.'),
81
+ }),
82
+ async handler(input, ctx) {
83
+ const svc = getOpenStatesApiService();
84
+ const result = await svc.searchCommittees({
85
+ jurisdiction: input.jurisdiction,
86
+ classification: input.classification,
87
+ chamber: input.chamber,
88
+ parent: input.parent,
89
+ include: input.include && input.include.length > 0 ? input.include : undefined,
90
+ page: input.page,
91
+ per_page: input.per_page,
92
+ }, ctx);
93
+ ctx.log.info('Searched committees', {
94
+ jurisdiction: input.jurisdiction,
95
+ count: result.results.length,
96
+ total: result.pagination.total_items,
97
+ });
98
+ return {
99
+ results: result.results,
100
+ pagination: result.pagination,
101
+ coverage_note: 'Committee data is experimental — Open States is working to restore support and not all states have coverage. Empty results may indicate the state lacks data, not that no committees exist.',
102
+ };
103
+ },
104
+ format: (result) => {
105
+ const lines = [
106
+ `**${result.pagination.total_items} committees** (page ${result.pagination.page}/${result.pagination.max_page}, per page ${result.pagination.per_page}, showing ${result.results.length})`,
107
+ '',
108
+ `> ${result.coverage_note}`,
109
+ ];
110
+ for (const committee of result.results) {
111
+ lines.push('');
112
+ lines.push(`## ${committee.name}`);
113
+ lines.push(`**ID:** ${committee.id}`);
114
+ lines.push(`**Classification:** ${committee.classification}`);
115
+ if (committee.parent_id)
116
+ lines.push(`**Parent ID:** ${committee.parent_id}`);
117
+ if (committee.memberships?.length) {
118
+ lines.push('**Members:**');
119
+ for (const m of committee.memberships) {
120
+ lines.push(`- ${m.person_name} (${m.role}) — ID: ${m.person_id}`);
121
+ }
122
+ }
123
+ }
124
+ return [{ type: 'text', text: lines.join('\n') }];
125
+ },
126
+ });
127
+ //# sourceMappingURL=search-committees.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-committees.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-committees.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @fileoverview Search hearings, floor sessions, and committee meetings (experimental).
3
+ * @module mcp-server/tools/definitions/search-events
4
+ */
5
+ import { z } from '@cyanheads/mcp-ts-core';
6
+ export declare const searchEvents: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
7
+ jurisdiction: z.ZodOptional<z.ZodString>;
8
+ after: z.ZodOptional<z.ZodString>;
9
+ before: z.ZodOptional<z.ZodString>;
10
+ require_bills: z.ZodDefault<z.ZodBoolean>;
11
+ include: z.ZodOptional<z.ZodArray<z.ZodEnum<{
12
+ sources: "sources";
13
+ documents: "documents";
14
+ links: "links";
15
+ media: "media";
16
+ participants: "participants";
17
+ agenda: "agenda";
18
+ }>>>;
19
+ page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
20
+ per_page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
21
+ }, z.core.$strip>, z.ZodObject<{
22
+ results: z.ZodArray<z.ZodObject<{
23
+ id: z.ZodString;
24
+ name: z.ZodString;
25
+ description: z.ZodString;
26
+ classification: z.ZodString;
27
+ start_date: z.ZodString;
28
+ end_date: z.ZodOptional<z.ZodString>;
29
+ status: z.ZodString;
30
+ jurisdiction: z.ZodObject<{
31
+ id: z.ZodString;
32
+ name: z.ZodString;
33
+ }, z.core.$strip>;
34
+ location: z.ZodOptional<z.ZodObject<{
35
+ name: z.ZodString;
36
+ url: z.ZodOptional<z.ZodString>;
37
+ }, z.core.$strip>>;
38
+ participants: z.ZodOptional<z.ZodArray<z.ZodObject<{
39
+ name: z.ZodString;
40
+ entity_type: z.ZodString;
41
+ role: z.ZodString;
42
+ }, z.core.$strip>>>;
43
+ agenda: z.ZodOptional<z.ZodArray<z.ZodObject<{
44
+ description: z.ZodString;
45
+ classification: z.ZodArray<z.ZodString>;
46
+ subjects: z.ZodArray<z.ZodString>;
47
+ related_entities: z.ZodArray<z.ZodObject<{
48
+ name: z.ZodString;
49
+ entity_type: z.ZodString;
50
+ }, z.core.$strip>>;
51
+ }, z.core.$strip>>>;
52
+ }, z.core.$strip>>;
53
+ pagination: z.ZodObject<{
54
+ page: z.ZodNumber;
55
+ per_page: z.ZodNumber;
56
+ max_page: z.ZodNumber;
57
+ total_items: z.ZodNumber;
58
+ }, z.core.$strip>;
59
+ coverage_note: z.ZodString;
60
+ message: z.ZodOptional<z.ZodString>;
61
+ }, z.core.$strip>, undefined>;
62
+ //# sourceMappingURL=search-events.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-events.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-events.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAYjD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAuNvB,CAAC"}
@@ -0,0 +1,198 @@
1
+ /**
2
+ * @fileoverview Search hearings, floor sessions, and committee meetings (experimental).
3
+ * @module mcp-server/tools/definitions/search-events
4
+ */
5
+ import { tool, z } from '@cyanheads/mcp-ts-core';
6
+ import { getOpenStatesApiService } from '../../../services/openstates/openstates-service.js';
7
+ const EventIncludeEnum = z.enum([
8
+ 'links',
9
+ 'sources',
10
+ 'media',
11
+ 'documents',
12
+ 'participants',
13
+ 'agenda',
14
+ ]);
15
+ export const searchEvents = tool('openstates_search_events', {
16
+ title: 'Search Events',
17
+ description: 'Search hearings, floor sessions, and committee meetings. Experimental — most states do not publish event data to Open States. Use after and before to scope to a date range. Set require_bills=true to filter to events with bills on the agenda, which is the most useful filter for tracking legislation through committee. Use include=agenda,participants for full meeting context. Empty results often indicate the state lacks event data rather than no events occurring.',
18
+ annotations: { readOnlyHint: true, idempotentHint: true, openWorldHint: true },
19
+ input: z.object({
20
+ jurisdiction: z
21
+ .string()
22
+ .optional()
23
+ .describe('State name, abbreviation, or OCD-ID. Strongly recommended.'),
24
+ after: z
25
+ .string()
26
+ .optional()
27
+ .describe('ISO 8601 datetime — events starting after this time. Use to find upcoming hearings.'),
28
+ before: z.string().optional().describe('ISO 8601 datetime — events starting before this time.'),
29
+ require_bills: z
30
+ .boolean()
31
+ .default(false)
32
+ .describe('When true, only return events with at least one bill on the agenda. Most useful for tracking legislation through committee.'),
33
+ include: z
34
+ .array(EventIncludeEnum)
35
+ .optional()
36
+ .describe('Related data to inline. "agenda" includes the meeting agenda with bill references. "participants" includes the committee or chamber hosting the event.'),
37
+ page: z.coerce.number().int().min(1).default(1).describe('Page number (1-indexed).'),
38
+ per_page: z.coerce
39
+ .number()
40
+ .int()
41
+ .min(1)
42
+ .max(20)
43
+ .default(10)
44
+ .describe('Results per page. Maximum 20.'),
45
+ }),
46
+ output: z.object({
47
+ results: z
48
+ .array(z
49
+ .object({
50
+ id: z.string().describe('OCD event ID — use in openstates_get_event.'),
51
+ name: z.string().describe('Event name.'),
52
+ description: z.string().describe('Event description.'),
53
+ classification: z
54
+ .string()
55
+ .describe('Event classification (e.g., "committee-meeting").'),
56
+ start_date: z.string().describe('Event start datetime.'),
57
+ end_date: z
58
+ .string()
59
+ .optional()
60
+ .describe('Event end datetime. Absent when not recorded.'),
61
+ status: z.string().describe('Event status.'),
62
+ jurisdiction: z
63
+ .object({
64
+ id: z.string().describe('OCD jurisdiction ID.'),
65
+ name: z.string().describe('Jurisdiction name.'),
66
+ })
67
+ .describe('Hosting jurisdiction.'),
68
+ location: z
69
+ .object({
70
+ name: z.string().describe('Location name.'),
71
+ url: z.string().optional().describe('Location URL when available.'),
72
+ })
73
+ .optional()
74
+ .describe('Event location when available.'),
75
+ participants: z
76
+ .array(z
77
+ .object({
78
+ name: z.string().describe('Participant name.'),
79
+ entity_type: z
80
+ .string()
81
+ .describe('Entity type (e.g., "organization", "person").'),
82
+ role: z.string().describe('Participant role.'),
83
+ })
84
+ .describe('Participant record.'))
85
+ .optional()
86
+ .describe('Participants when include=participants is requested.'),
87
+ agenda: z
88
+ .array(z
89
+ .object({
90
+ description: z.string().describe('Agenda item description.'),
91
+ classification: z.array(z.string()).describe('Agenda item classification.'),
92
+ subjects: z.array(z.string()).describe('Subject tags for this agenda item.'),
93
+ related_entities: z
94
+ .array(z
95
+ .object({
96
+ name: z.string().describe('Related entity name.'),
97
+ entity_type: z
98
+ .string()
99
+ .describe('Entity type (e.g., "bill", "person", "organization").'),
100
+ })
101
+ .describe('Related entity record.'))
102
+ .describe('Bills, people, or organizations referenced in this agenda item.'),
103
+ })
104
+ .describe('Agenda item record.'))
105
+ .optional()
106
+ .describe('Agenda items when include=agenda is requested.'),
107
+ })
108
+ .describe('Event record.'))
109
+ .describe('Events matching the search criteria.'),
110
+ pagination: z
111
+ .object({
112
+ page: z.number().describe('Current page.'),
113
+ per_page: z.number().describe('Results per page.'),
114
+ max_page: z.number().describe('Total pages.'),
115
+ total_items: z.number().describe('Total matching events.'),
116
+ })
117
+ .describe('Pagination metadata.'),
118
+ coverage_note: z
119
+ .string()
120
+ .describe('Event data is experimental — most states do not publish event data to Open States. Empty results may indicate the state lacks data, not that no events occurred.'),
121
+ message: z
122
+ .string()
123
+ .optional()
124
+ .describe('Recovery hint when results are empty. Absent when results are returned.'),
125
+ }),
126
+ async handler(input, ctx) {
127
+ const svc = getOpenStatesApiService();
128
+ const result = await svc.searchEvents({
129
+ jurisdiction: input.jurisdiction,
130
+ after: input.after,
131
+ before: input.before,
132
+ require_bills: input.require_bills,
133
+ include: input.include && input.include.length > 0 ? input.include : undefined,
134
+ page: input.page,
135
+ per_page: input.per_page,
136
+ }, ctx);
137
+ ctx.log.info('Searched events', {
138
+ jurisdiction: input.jurisdiction,
139
+ count: result.results.length,
140
+ total: result.pagination.total_items,
141
+ });
142
+ const coverage_note = 'Event data is experimental — most states do not publish event data to Open States. Empty results may indicate the state lacks data, not that no events occurred.';
143
+ if (result.results.length === 0) {
144
+ return {
145
+ results: [],
146
+ pagination: result.pagination,
147
+ coverage_note,
148
+ message: 'No events found. Event coverage is experimental — most states do not publish event data to Open States. If you expected results, the state may lack event data entirely.',
149
+ };
150
+ }
151
+ return { results: result.results, pagination: result.pagination, coverage_note };
152
+ },
153
+ format: (result) => {
154
+ const lines = [
155
+ `**${result.pagination.total_items} events** (page ${result.pagination.page}/${result.pagination.max_page}, per page ${result.pagination.per_page}, showing ${result.results.length})`,
156
+ '',
157
+ `> ${result.coverage_note}`,
158
+ ];
159
+ if (result.message) {
160
+ lines.push('');
161
+ lines.push(`> ${result.message}`);
162
+ }
163
+ for (const event of result.results) {
164
+ lines.push('');
165
+ lines.push(`## ${event.name}`);
166
+ lines.push(`**ID:** ${event.id}`);
167
+ lines.push(`**Classification:** ${event.classification} | **Status:** ${event.status}`);
168
+ lines.push(event.end_date
169
+ ? `**Start:** ${event.start_date} | **End:** ${event.end_date}`
170
+ : `**Start:** ${event.start_date}`);
171
+ lines.push(`**Jurisdiction:** ${event.jurisdiction.name} (${event.jurisdiction.id})`);
172
+ if (event.description)
173
+ lines.push(event.description);
174
+ if (event.location) {
175
+ const locStr = event.location.url
176
+ ? `${event.location.name} — ${event.location.url}`
177
+ : event.location.name;
178
+ lines.push(`**Location:** ${locStr}`);
179
+ }
180
+ if (event.participants?.length) {
181
+ lines.push(`**Participants:** ${event.participants.map((p) => `${p.name} (${p.role}, ${p.entity_type})`).join(', ')}`);
182
+ }
183
+ if (event.agenda?.length) {
184
+ lines.push('**Agenda:**');
185
+ for (const item of event.agenda) {
186
+ const cls = item.classification.length > 0 ? ` [${item.classification.join(', ')}]` : '';
187
+ const subj = item.subjects.length > 0 ? ` | Subjects: ${item.subjects.join(', ')}` : '';
188
+ lines.push(`- ${item.description}${cls}${subj}`);
189
+ if (item.related_entities.length > 0) {
190
+ lines.push(` Related: ${item.related_entities.map((e) => `${e.name} (${e.entity_type})`).join(', ')}`);
191
+ }
192
+ }
193
+ }
194
+ }
195
+ return [{ type: 'text', text: lines.join('\n') }];
196
+ },
197
+ });
198
+ //# sourceMappingURL=search-events.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-events.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-events.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * @fileoverview Search state legislators and officials by name, jurisdiction, chamber, or district.
3
+ * @module mcp-server/tools/definitions/search-people
4
+ */
5
+ import { z } from '@cyanheads/mcp-ts-core';
6
+ export declare const searchPeople: import("@cyanheads/mcp-ts-core").ToolDefinition<z.ZodObject<{
7
+ jurisdiction: z.ZodOptional<z.ZodString>;
8
+ name: z.ZodOptional<z.ZodString>;
9
+ org_classification: z.ZodOptional<z.ZodEnum<{
10
+ upper: "upper";
11
+ lower: "lower";
12
+ legislature: "legislature";
13
+ executive: "executive";
14
+ government: "government";
15
+ }>>;
16
+ district: z.ZodOptional<z.ZodString>;
17
+ include: z.ZodOptional<z.ZodArray<z.ZodEnum<{
18
+ other_identifiers: "other_identifiers";
19
+ sources: "sources";
20
+ links: "links";
21
+ other_names: "other_names";
22
+ offices: "offices";
23
+ }>>>;
24
+ page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
25
+ per_page: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
26
+ }, z.core.$strip>, z.ZodObject<{
27
+ results: z.ZodArray<z.ZodObject<{
28
+ id: z.ZodString;
29
+ name: z.ZodString;
30
+ party: z.ZodString;
31
+ current_role: z.ZodNullable<z.ZodObject<{
32
+ title: z.ZodString;
33
+ org_classification: z.ZodString;
34
+ district: z.ZodNullable<z.ZodString>;
35
+ }, z.core.$strip>>;
36
+ jurisdiction: z.ZodObject<{
37
+ id: z.ZodString;
38
+ name: z.ZodString;
39
+ }, z.core.$strip>;
40
+ given_name: z.ZodString;
41
+ family_name: z.ZodString;
42
+ email: z.ZodString;
43
+ openstates_url: z.ZodString;
44
+ offices: z.ZodOptional<z.ZodArray<z.ZodObject<{
45
+ name: z.ZodString;
46
+ classification: z.ZodString;
47
+ voice: z.ZodOptional<z.ZodString>;
48
+ fax: z.ZodOptional<z.ZodString>;
49
+ address: z.ZodOptional<z.ZodString>;
50
+ }, z.core.$strip>>>;
51
+ links: z.ZodOptional<z.ZodArray<z.ZodObject<{
52
+ url: z.ZodString;
53
+ note: z.ZodString;
54
+ }, z.core.$strip>>>;
55
+ }, z.core.$strip>>;
56
+ pagination: z.ZodObject<{
57
+ page: z.ZodNumber;
58
+ per_page: z.ZodNumber;
59
+ max_page: z.ZodNumber;
60
+ total_items: z.ZodNumber;
61
+ }, z.core.$strip>;
62
+ message: z.ZodOptional<z.ZodString>;
63
+ }, z.core.$strip>, undefined>;
64
+ //# sourceMappingURL=search-people.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-people.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-people.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAWjD,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6BAiMvB,CAAC"}