us-gov-open-data-mcp 1.0.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 (310) hide show
  1. package/README.md +211 -0
  2. package/dist/client.d.ts +54 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +388 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/instructions.d.ts +8 -0
  7. package/dist/instructions.d.ts.map +1 -0
  8. package/dist/instructions.js +549 -0
  9. package/dist/instructions.js.map +1 -0
  10. package/dist/modules/bea.d.ts +28 -0
  11. package/dist/modules/bea.d.ts.map +1 -0
  12. package/dist/modules/bea.js +158 -0
  13. package/dist/modules/bea.js.map +1 -0
  14. package/dist/modules/bls.d.ts +29 -0
  15. package/dist/modules/bls.d.ts.map +1 -0
  16. package/dist/modules/bls.js +244 -0
  17. package/dist/modules/bls.js.map +1 -0
  18. package/dist/modules/bts.d.ts +26 -0
  19. package/dist/modules/bts.d.ts.map +1 -0
  20. package/dist/modules/bts.js +112 -0
  21. package/dist/modules/bts.js.map +1 -0
  22. package/dist/modules/cdc.d.ts +26 -0
  23. package/dist/modules/cdc.d.ts.map +1 -0
  24. package/dist/modules/cdc.js +310 -0
  25. package/dist/modules/cdc.js.map +1 -0
  26. package/dist/modules/census.d.ts +23 -0
  27. package/dist/modules/census.d.ts.map +1 -0
  28. package/dist/modules/census.js +141 -0
  29. package/dist/modules/census.js.map +1 -0
  30. package/dist/modules/cfpb.d.ts +20 -0
  31. package/dist/modules/cfpb.d.ts.map +1 -0
  32. package/dist/modules/cfpb.js +135 -0
  33. package/dist/modules/cfpb.js.map +1 -0
  34. package/dist/modules/clinical-trials.d.ts +22 -0
  35. package/dist/modules/clinical-trials.d.ts.map +1 -0
  36. package/dist/modules/clinical-trials.js +171 -0
  37. package/dist/modules/clinical-trials.js.map +1 -0
  38. package/dist/modules/cms.d.ts +21 -0
  39. package/dist/modules/cms.d.ts.map +1 -0
  40. package/dist/modules/cms.js +135 -0
  41. package/dist/modules/cms.js.map +1 -0
  42. package/dist/modules/college-scorecard.d.ts +39 -0
  43. package/dist/modules/college-scorecard.d.ts.map +1 -0
  44. package/dist/modules/college-scorecard.js +192 -0
  45. package/dist/modules/college-scorecard.js.map +1 -0
  46. package/dist/modules/congress.d.ts +28 -0
  47. package/dist/modules/congress.d.ts.map +1 -0
  48. package/dist/modules/congress.js +883 -0
  49. package/dist/modules/congress.js.map +1 -0
  50. package/dist/modules/dol.d.ts +27 -0
  51. package/dist/modules/dol.d.ts.map +1 -0
  52. package/dist/modules/dol.js +209 -0
  53. package/dist/modules/dol.js.map +1 -0
  54. package/dist/modules/eia.d.ts +33 -0
  55. package/dist/modules/eia.d.ts.map +1 -0
  56. package/dist/modules/eia.js +227 -0
  57. package/dist/modules/eia.js.map +1 -0
  58. package/dist/modules/epa.d.ts +21 -0
  59. package/dist/modules/epa.d.ts.map +1 -0
  60. package/dist/modules/epa.js +91 -0
  61. package/dist/modules/epa.js.map +1 -0
  62. package/dist/modules/fbi.d.ts +28 -0
  63. package/dist/modules/fbi.d.ts.map +1 -0
  64. package/dist/modules/fbi.js +143 -0
  65. package/dist/modules/fbi.js.map +1 -0
  66. package/dist/modules/fda.d.ts +35 -0
  67. package/dist/modules/fda.d.ts.map +1 -0
  68. package/dist/modules/fda.js +262 -0
  69. package/dist/modules/fda.js.map +1 -0
  70. package/dist/modules/fdic.d.ts +21 -0
  71. package/dist/modules/fdic.d.ts.map +1 -0
  72. package/dist/modules/fdic.js +186 -0
  73. package/dist/modules/fdic.js.map +1 -0
  74. package/dist/modules/fec.d.ts +29 -0
  75. package/dist/modules/fec.d.ts.map +1 -0
  76. package/dist/modules/fec.js +282 -0
  77. package/dist/modules/fec.js.map +1 -0
  78. package/dist/modules/federal-register.d.ts +24 -0
  79. package/dist/modules/federal-register.d.ts.map +1 -0
  80. package/dist/modules/federal-register.js +184 -0
  81. package/dist/modules/federal-register.js.map +1 -0
  82. package/dist/modules/fema.d.ts +20 -0
  83. package/dist/modules/fema.d.ts.map +1 -0
  84. package/dist/modules/fema.js +156 -0
  85. package/dist/modules/fema.js.map +1 -0
  86. package/dist/modules/fred.d.ts +40 -0
  87. package/dist/modules/fred.d.ts.map +1 -0
  88. package/dist/modules/fred.js +143 -0
  89. package/dist/modules/fred.js.map +1 -0
  90. package/dist/modules/govinfo.d.ts +24 -0
  91. package/dist/modules/govinfo.d.ts.map +1 -0
  92. package/dist/modules/govinfo.js +147 -0
  93. package/dist/modules/govinfo.js.map +1 -0
  94. package/dist/modules/hud.d.ts +17 -0
  95. package/dist/modules/hud.d.ts.map +1 -0
  96. package/dist/modules/hud.js +170 -0
  97. package/dist/modules/hud.js.map +1 -0
  98. package/dist/modules/naep.d.ts +27 -0
  99. package/dist/modules/naep.d.ts.map +1 -0
  100. package/dist/modules/naep.js +210 -0
  101. package/dist/modules/naep.js.map +1 -0
  102. package/dist/modules/nhtsa.d.ts +13 -0
  103. package/dist/modules/nhtsa.d.ts.map +1 -0
  104. package/dist/modules/nhtsa.js +196 -0
  105. package/dist/modules/nhtsa.js.map +1 -0
  106. package/dist/modules/noaa.d.ts +41 -0
  107. package/dist/modules/noaa.d.ts.map +1 -0
  108. package/dist/modules/noaa.js +135 -0
  109. package/dist/modules/noaa.js.map +1 -0
  110. package/dist/modules/nrel.d.ts +25 -0
  111. package/dist/modules/nrel.d.ts.map +1 -0
  112. package/dist/modules/nrel.js +87 -0
  113. package/dist/modules/nrel.js.map +1 -0
  114. package/dist/modules/regulations.d.ts +24 -0
  115. package/dist/modules/regulations.d.ts.map +1 -0
  116. package/dist/modules/regulations.js +173 -0
  117. package/dist/modules/regulations.js.map +1 -0
  118. package/dist/modules/sec.d.ts +25 -0
  119. package/dist/modules/sec.d.ts.map +1 -0
  120. package/dist/modules/sec.js +192 -0
  121. package/dist/modules/sec.js.map +1 -0
  122. package/dist/modules/senate-lobbying.d.ts +21 -0
  123. package/dist/modules/senate-lobbying.d.ts.map +1 -0
  124. package/dist/modules/senate-lobbying.js +189 -0
  125. package/dist/modules/senate-lobbying.js.map +1 -0
  126. package/dist/modules/treasury.d.ts +23 -0
  127. package/dist/modules/treasury.d.ts.map +1 -0
  128. package/dist/modules/treasury.js +234 -0
  129. package/dist/modules/treasury.js.map +1 -0
  130. package/dist/modules/usaspending.d.ts +19 -0
  131. package/dist/modules/usaspending.d.ts.map +1 -0
  132. package/dist/modules/usaspending.js +204 -0
  133. package/dist/modules/usaspending.js.map +1 -0
  134. package/dist/modules/usda-fooddata.d.ts +24 -0
  135. package/dist/modules/usda-fooddata.d.ts.map +1 -0
  136. package/dist/modules/usda-fooddata.js +118 -0
  137. package/dist/modules/usda-fooddata.js.map +1 -0
  138. package/dist/modules/usda-nass.d.ts +46 -0
  139. package/dist/modules/usda-nass.d.ts.map +1 -0
  140. package/dist/modules/usda-nass.js +151 -0
  141. package/dist/modules/usda-nass.js.map +1 -0
  142. package/dist/modules/usgs.d.ts +21 -0
  143. package/dist/modules/usgs.d.ts.map +1 -0
  144. package/dist/modules/usgs.js +203 -0
  145. package/dist/modules/usgs.js.map +1 -0
  146. package/dist/modules/uspto.d.ts +13 -0
  147. package/dist/modules/uspto.d.ts.map +1 -0
  148. package/dist/modules/uspto.js +157 -0
  149. package/dist/modules/uspto.js.map +1 -0
  150. package/dist/modules/world-bank.d.ts +21 -0
  151. package/dist/modules/world-bank.d.ts.map +1 -0
  152. package/dist/modules/world-bank.js +130 -0
  153. package/dist/modules/world-bank.js.map +1 -0
  154. package/dist/prompts.d.ts +12 -0
  155. package/dist/prompts.d.ts.map +1 -0
  156. package/dist/prompts.js +858 -0
  157. package/dist/prompts.js.map +1 -0
  158. package/dist/sdk/bea.d.ts +111 -0
  159. package/dist/sdk/bea.d.ts.map +1 -0
  160. package/dist/sdk/bea.js +242 -0
  161. package/dist/sdk/bea.js.map +1 -0
  162. package/dist/sdk/bls.d.ts +65 -0
  163. package/dist/sdk/bls.d.ts.map +1 -0
  164. package/dist/sdk/bls.js +203 -0
  165. package/dist/sdk/bls.js.map +1 -0
  166. package/dist/sdk/bts.d.ts +108 -0
  167. package/dist/sdk/bts.d.ts.map +1 -0
  168. package/dist/sdk/bts.js +121 -0
  169. package/dist/sdk/bts.js.map +1 -0
  170. package/dist/sdk/cdc.d.ts +105 -0
  171. package/dist/sdk/cdc.d.ts.map +1 -0
  172. package/dist/sdk/cdc.js +222 -0
  173. package/dist/sdk/cdc.js.map +1 -0
  174. package/dist/sdk/census.d.ts +47 -0
  175. package/dist/sdk/census.d.ts.map +1 -0
  176. package/dist/sdk/census.js +99 -0
  177. package/dist/sdk/census.js.map +1 -0
  178. package/dist/sdk/cfpb.d.ts +148 -0
  179. package/dist/sdk/cfpb.d.ts.map +1 -0
  180. package/dist/sdk/cfpb.js +153 -0
  181. package/dist/sdk/cfpb.js.map +1 -0
  182. package/dist/sdk/clinical-trials.d.ts +214 -0
  183. package/dist/sdk/clinical-trials.d.ts.map +1 -0
  184. package/dist/sdk/clinical-trials.js +134 -0
  185. package/dist/sdk/clinical-trials.js.map +1 -0
  186. package/dist/sdk/cms.d.ts +81 -0
  187. package/dist/sdk/cms.d.ts.map +1 -0
  188. package/dist/sdk/cms.js +227 -0
  189. package/dist/sdk/cms.js.map +1 -0
  190. package/dist/sdk/college-scorecard.d.ts +63 -0
  191. package/dist/sdk/college-scorecard.d.ts.map +1 -0
  192. package/dist/sdk/college-scorecard.js +131 -0
  193. package/dist/sdk/college-scorecard.js.map +1 -0
  194. package/dist/sdk/congress.d.ts +575 -0
  195. package/dist/sdk/congress.d.ts.map +1 -0
  196. package/dist/sdk/congress.js +659 -0
  197. package/dist/sdk/congress.js.map +1 -0
  198. package/dist/sdk/dol.d.ts +299 -0
  199. package/dist/sdk/dol.d.ts.map +1 -0
  200. package/dist/sdk/dol.js +252 -0
  201. package/dist/sdk/dol.js.map +1 -0
  202. package/dist/sdk/eia.d.ts +91 -0
  203. package/dist/sdk/eia.d.ts.map +1 -0
  204. package/dist/sdk/eia.js +156 -0
  205. package/dist/sdk/eia.js.map +1 -0
  206. package/dist/sdk/epa.d.ts +128 -0
  207. package/dist/sdk/epa.d.ts.map +1 -0
  208. package/dist/sdk/epa.js +120 -0
  209. package/dist/sdk/epa.js.map +1 -0
  210. package/dist/sdk/fbi.d.ts +48 -0
  211. package/dist/sdk/fbi.d.ts.map +1 -0
  212. package/dist/sdk/fbi.js +69 -0
  213. package/dist/sdk/fbi.js.map +1 -0
  214. package/dist/sdk/fda.d.ts +356 -0
  215. package/dist/sdk/fda.d.ts.map +1 -0
  216. package/dist/sdk/fda.js +162 -0
  217. package/dist/sdk/fda.js.map +1 -0
  218. package/dist/sdk/fdic.d.ts +227 -0
  219. package/dist/sdk/fdic.d.ts.map +1 -0
  220. package/dist/sdk/fdic.js +172 -0
  221. package/dist/sdk/fdic.js.map +1 -0
  222. package/dist/sdk/fec.d.ts +142 -0
  223. package/dist/sdk/fec.d.ts.map +1 -0
  224. package/dist/sdk/fec.js +92 -0
  225. package/dist/sdk/fec.js.map +1 -0
  226. package/dist/sdk/federal-register.d.ts +88 -0
  227. package/dist/sdk/federal-register.d.ts.map +1 -0
  228. package/dist/sdk/federal-register.js +100 -0
  229. package/dist/sdk/federal-register.js.map +1 -0
  230. package/dist/sdk/fema.d.ts +137 -0
  231. package/dist/sdk/fema.d.ts.map +1 -0
  232. package/dist/sdk/fema.js +197 -0
  233. package/dist/sdk/fema.js.map +1 -0
  234. package/dist/sdk/fred.d.ts +72 -0
  235. package/dist/sdk/fred.d.ts.map +1 -0
  236. package/dist/sdk/fred.js +59 -0
  237. package/dist/sdk/fred.js.map +1 -0
  238. package/dist/sdk/govinfo.d.ts +64 -0
  239. package/dist/sdk/govinfo.d.ts.map +1 -0
  240. package/dist/sdk/govinfo.js +187 -0
  241. package/dist/sdk/govinfo.js.map +1 -0
  242. package/dist/sdk/hud.d.ts +87 -0
  243. package/dist/sdk/hud.d.ts.map +1 -0
  244. package/dist/sdk/hud.js +91 -0
  245. package/dist/sdk/hud.js.map +1 -0
  246. package/dist/sdk/index.d.ts +51 -0
  247. package/dist/sdk/index.d.ts.map +1 -0
  248. package/dist/sdk/index.js +51 -0
  249. package/dist/sdk/index.js.map +1 -0
  250. package/dist/sdk/naep.d.ts +93 -0
  251. package/dist/sdk/naep.d.ts.map +1 -0
  252. package/dist/sdk/naep.js +163 -0
  253. package/dist/sdk/naep.js.map +1 -0
  254. package/dist/sdk/nhtsa.d.ts +169 -0
  255. package/dist/sdk/nhtsa.d.ts.map +1 -0
  256. package/dist/sdk/nhtsa.js +102 -0
  257. package/dist/sdk/nhtsa.js.map +1 -0
  258. package/dist/sdk/noaa.d.ts +72 -0
  259. package/dist/sdk/noaa.d.ts.map +1 -0
  260. package/dist/sdk/noaa.js +64 -0
  261. package/dist/sdk/noaa.js.map +1 -0
  262. package/dist/sdk/nrel.d.ts +145 -0
  263. package/dist/sdk/nrel.d.ts.map +1 -0
  264. package/dist/sdk/nrel.js +93 -0
  265. package/dist/sdk/nrel.js.map +1 -0
  266. package/dist/sdk/regulations.d.ts +146 -0
  267. package/dist/sdk/regulations.d.ts.map +1 -0
  268. package/dist/sdk/regulations.js +103 -0
  269. package/dist/sdk/regulations.js.map +1 -0
  270. package/dist/sdk/sec.d.ts +114 -0
  271. package/dist/sdk/sec.d.ts.map +1 -0
  272. package/dist/sdk/sec.js +151 -0
  273. package/dist/sdk/sec.js.map +1 -0
  274. package/dist/sdk/senate-lobbying.d.ts +147 -0
  275. package/dist/sdk/senate-lobbying.d.ts.map +1 -0
  276. package/dist/sdk/senate-lobbying.js +125 -0
  277. package/dist/sdk/senate-lobbying.js.map +1 -0
  278. package/dist/sdk/treasury.d.ts +59 -0
  279. package/dist/sdk/treasury.d.ts.map +1 -0
  280. package/dist/sdk/treasury.js +1397 -0
  281. package/dist/sdk/treasury.js.map +1 -0
  282. package/dist/sdk/usaspending.d.ts +126 -0
  283. package/dist/sdk/usaspending.d.ts.map +1 -0
  284. package/dist/sdk/usaspending.js +270 -0
  285. package/dist/sdk/usaspending.js.map +1 -0
  286. package/dist/sdk/usda-fooddata.d.ts +112 -0
  287. package/dist/sdk/usda-fooddata.d.ts.map +1 -0
  288. package/dist/sdk/usda-fooddata.js +80 -0
  289. package/dist/sdk/usda-fooddata.js.map +1 -0
  290. package/dist/sdk/usda-nass.d.ts +75 -0
  291. package/dist/sdk/usda-nass.d.ts.map +1 -0
  292. package/dist/sdk/usda-nass.js +83 -0
  293. package/dist/sdk/usda-nass.js.map +1 -0
  294. package/dist/sdk/usgs.d.ts +221 -0
  295. package/dist/sdk/usgs.d.ts.map +1 -0
  296. package/dist/sdk/usgs.js +182 -0
  297. package/dist/sdk/usgs.js.map +1 -0
  298. package/dist/sdk/uspto.d.ts +109 -0
  299. package/dist/sdk/uspto.d.ts.map +1 -0
  300. package/dist/sdk/uspto.js +286 -0
  301. package/dist/sdk/uspto.js.map +1 -0
  302. package/dist/sdk/world-bank.d.ts +78 -0
  303. package/dist/sdk/world-bank.d.ts.map +1 -0
  304. package/dist/sdk/world-bank.js +72 -0
  305. package/dist/sdk/world-bank.js.map +1 -0
  306. package/dist/server.d.ts +22 -0
  307. package/dist/server.d.ts.map +1 -0
  308. package/dist/server.js +196 -0
  309. package/dist/server.js.map +1 -0
  310. package/package.json +113 -0
@@ -0,0 +1,147 @@
1
+ /**
2
+ * GovInfo MCP module — tools + metadata. Delegates all API calls to sdk/govinfo.
3
+ *
4
+ * Tools return raw JSON data — no markdown formatting. The client decides how to present it.
5
+ */
6
+ import { z } from "zod";
7
+ import { searchPublications, searchCboReports, getBillText, collections, billVersions, } from "../sdk/govinfo.js";
8
+ // ─── Metadata (server.ts reads these) ────────────────────────────────
9
+ export const name = "govinfo";
10
+ export const displayName = "GovInfo";
11
+ export const description = "Full-text search across Congressional bills, laws, Federal Register, CFR, CBO reports, and more";
12
+ export const auth = { envVar: "DATA_GOV_API_KEY", signup: "https://api.data.gov/signup/", note: "Same key as FBI Crime Data" };
13
+ export const workflow = "govinfo_search to find publications → govinfo_bill_text for full legislative text";
14
+ export const tips = "Package ID format for bills: BILLS-{congress}{type}{number}{version}. Example: BILLS-117hr5376enr (Inflation Reduction Act).";
15
+ export const reference = {
16
+ collections,
17
+ billVersions,
18
+ };
19
+ // ─── Tools ───────────────────────────────────────────────────────────
20
+ export const tools = [
21
+ {
22
+ name: "govinfo_search",
23
+ description: "Search across all government publications — bills, laws, CBO reports, " +
24
+ "Congressional Record, Federal Register, committee reports, and more.\n\n" +
25
+ "Collections: BILLS, PLAW (public laws), CRPT (committee reports), " +
26
+ "CREC (Congressional Record), BUDGET, FR (Federal Register), CRECB (bound CR)",
27
+ annotations: { title: "GovInfo: Search Publications", readOnlyHint: true },
28
+ parameters: z.object({
29
+ query: z.string().describe("Search query — bill name, topic, or keyword"),
30
+ collection: z.string().optional().describe("Collection: 'BILLS', 'PLAW' (public laws), 'CRPT' (committee reports), " +
31
+ "'CREC' (Congressional Record), 'BUDGET', 'FR' (Federal Register)"),
32
+ congress: z.number().int().optional().describe("Filter by Congress number (e.g., 119)"),
33
+ page_size: z.number().int().optional().describe("Results per page (default: 10, max: 100)"),
34
+ }),
35
+ execute: async ({ query, collection, congress, page_size }) => {
36
+ const data = await searchPublications({ query, collection, congress, pageSize: page_size });
37
+ if (!data.results.length)
38
+ return JSON.stringify({ summary: `No results found for "${query}".`, total: 0, results: [] });
39
+ return JSON.stringify({
40
+ summary: `GovInfo search "${query}": ${data.total} total, showing ${data.results.length}`,
41
+ total: data.total,
42
+ results: data.results,
43
+ });
44
+ },
45
+ },
46
+ {
47
+ name: "govinfo_bill_text",
48
+ description: "Get the full text of a bill or enrolled law from GovInfo. " +
49
+ "Returns the actual legislative text — tax rates, dollar amounts, provisions.\n\n" +
50
+ "Package ID examples:\n" +
51
+ "- BILLS-119hr1enr (119th Congress, HR 1, enrolled)\n" +
52
+ "- BILLS-115hr1enr (Tax Cuts and Jobs Act)\n" +
53
+ "- BILLS-117hr5376enr (Inflation Reduction Act)\n\n" +
54
+ "Version suffixes: enr (enrolled/signed), eh (engrossed House), " +
55
+ "es (engrossed Senate), ih (introduced House), is (introduced Senate)",
56
+ annotations: { title: "GovInfo: Bill/Law Full Text", readOnlyHint: true },
57
+ parameters: z.object({
58
+ congress: z.number().int().describe("Congress number (e.g., 119, 118, 117)"),
59
+ bill_type: z.string().describe("Bill type: 'hr', 's', 'hjres', 'sjres'"),
60
+ bill_number: z.number().int().describe("Bill number (e.g., 1, 5376)"),
61
+ version: z.string().optional().describe("Bill version: 'enr' (enrolled/signed, default), 'eh' (engrossed House), " +
62
+ "'es' (engrossed Senate), 'ih' (introduced House), 'is' (introduced Senate)"),
63
+ max_length: z.number().int().optional().describe("Maximum characters to return (default: 15000). Use higher for complete text."),
64
+ }),
65
+ execute: async ({ congress, bill_type, bill_number, version, max_length }) => {
66
+ try {
67
+ const data = await getBillText({
68
+ congress, billType: bill_type, billNumber: bill_number,
69
+ version, maxLength: max_length,
70
+ });
71
+ if (!data.text) {
72
+ return JSON.stringify({
73
+ summary: `${data.title}: full text not available. Try a different version (ih, eh, es, enr).`,
74
+ packageId: data.packageId,
75
+ title: data.title,
76
+ dateIssued: data.dateIssued,
77
+ textSource: null,
78
+ });
79
+ }
80
+ return JSON.stringify({
81
+ summary: `${data.title}: ${data.textLength.toLocaleString()} chars from ${data.textSource}${data.truncated ? ` (truncated to ${(max_length || 15000).toLocaleString()})` : ""}`,
82
+ packageId: data.packageId,
83
+ title: data.title,
84
+ dateIssued: data.dateIssued,
85
+ pages: data.pages,
86
+ textSource: data.textSource,
87
+ textLength: data.textLength,
88
+ truncated: data.truncated,
89
+ text: data.text,
90
+ });
91
+ }
92
+ catch (err) {
93
+ const ver = version || "enr";
94
+ const packageId = `BILLS-${congress}${bill_type.toLowerCase()}${bill_number}${ver}`;
95
+ return JSON.stringify({
96
+ summary: `Error fetching bill text for ${packageId}`,
97
+ packageId,
98
+ error: err instanceof Error ? err.message : String(err),
99
+ hints: [
100
+ "Check congress number and bill number",
101
+ "Try a different version: 'ih' (introduced), 'eh' (engrossed), 'enr' (enrolled)",
102
+ "The bill may not have reached that stage yet",
103
+ ],
104
+ });
105
+ }
106
+ },
107
+ },
108
+ {
109
+ name: "govinfo_cbo_reports",
110
+ description: "Search for Congressional Budget Office reports published through GovInfo. " +
111
+ "CBO scores tax bills with distributional analysis showing impact by income group.",
112
+ annotations: { title: "GovInfo: CBO Cost Estimates & Reports", readOnlyHint: true },
113
+ parameters: z.object({
114
+ query: z.string().describe("Search query — bill name or topic (e.g., 'Tax Cuts and Jobs Act', 'reconciliation')"),
115
+ page_size: z.number().int().optional().describe("Results per page (default: 10)"),
116
+ }),
117
+ execute: async ({ query, page_size }) => {
118
+ const data = await searchCboReports(query, page_size);
119
+ if (!data.results.length)
120
+ return JSON.stringify({ summary: `No CBO reports found for "${query}".`, total: 0, results: [] });
121
+ return JSON.stringify({
122
+ summary: `CBO/Committee reports for "${query}": ${data.results.length} results`,
123
+ total: data.total,
124
+ results: data.results,
125
+ });
126
+ },
127
+ },
128
+ ];
129
+ export const prompts = [
130
+ {
131
+ name: "recent_legislation_text",
132
+ description: "Get the full text of recently enacted legislation with vote breakdown and impact analysis.",
133
+ load: async () => "Find and present recent significant legislation:\n\n" +
134
+ "1. Use congress_recent_laws to find the 5 most recently signed laws\n" +
135
+ "2. For the most significant one, use govinfo_bill_text to get the full text\n" +
136
+ "3. Use congress_bill_details for cosponsor and committee info\n" +
137
+ "4. Use congress_house_votes for the House party-line vote breakdown\n" +
138
+ "5. Use congress_senate_votes for the Senate party-line vote breakdown\n" +
139
+ "6. Use lobbying_search to find who lobbied on this legislation\n" +
140
+ "7. Check usa_spending_by_agency to see if it affected agency spending\n\n" +
141
+ "Summarize the key provisions, show the party-line vote breakdown from both chambers, " +
142
+ "and note any lobbying activity related to the bill.",
143
+ },
144
+ ];
145
+ // ─── Re-export cache control from SDK ────────────────────────────────
146
+ export { clearCache } from "../sdk/govinfo.js";
147
+ //# sourceMappingURL=govinfo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"govinfo.js","sourceRoot":"","sources":["../../src/modules/govinfo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * HUD module — Fair Market Rents, Income Limits, geographic lookups
3
+ */
4
+ import type { Tool } from "fastmcp";
5
+ import { clearCache as sdkClearCache } from "../sdk/hud.js";
6
+ export declare const name = "hud";
7
+ export declare const displayName = "HUD";
8
+ export declare const description = "Department of Housing and Urban Development \u2014 Fair Market Rents (FMR) by bedroom count, Income Limits by household size for counties and metro areas. Essential for affordable housing, Section 8 vouchers, and housing cost analysis.";
9
+ export declare const auth: {
10
+ envVar: string;
11
+ signup: string;
12
+ };
13
+ export declare const workflow = "Use hud_list_states to get state codes \u2192 hud_list_counties to find county FIPS codes \u2192 hud_fair_market_rents for rental data \u2192 hud_income_limits for income thresholds.";
14
+ export declare const tips = "Entity IDs are county FIPS codes (e.g. '0600000001' for a CA county). Use hud_list_counties to find them. State-level tools accept two-letter codes (CA, TX). FMR data shows HUD-determined fair rents used for Section 8 voucher amounts. Income Limits show Very Low, Extremely Low, and Low income thresholds by household size (1-8 persons).";
15
+ export declare const tools: Tool<any, any>[];
16
+ export { sdkClearCache as clearCache };
17
+ //# sourceMappingURL=hud.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hud.d.ts","sourceRoot":"","sources":["../../src/modules/hud.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAQL,UAAU,IAAI,aAAa,EAC5B,MAAM,eAAe,CAAC;AAIvB,eAAO,MAAM,IAAI,QAAQ,CAAC;AAC1B,eAAO,MAAM,WAAW,QAAQ,CAAC;AACjC,eAAO,MAAM,WAAW,gPACkN,CAAC;AAC3O,eAAO,MAAM,IAAI;;;CAGhB,CAAC;AACF,eAAO,MAAM,QAAQ,2LACsJ,CAAC;AAC5K,eAAO,MAAM,IAAI,sVACoU,CAAC;AA2DtV,eAAO,MAAM,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EA0GjC,CAAC;AAEF,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,CAAC"}
@@ -0,0 +1,170 @@
1
+ /**
2
+ * HUD module — Fair Market Rents, Income Limits, geographic lookups
3
+ */
4
+ import { z } from "zod";
5
+ import { listStates, listCounties, listMetroAreas, getFairMarketRents, getStateFairMarketRents, getIncomeLimits, getStateIncomeLimits, clearCache as sdkClearCache, } from "../sdk/hud.js";
6
+ // ─── Metadata ────────────────────────────────────────────────────────
7
+ export const name = "hud";
8
+ export const displayName = "HUD";
9
+ export const description = "Department of Housing and Urban Development — Fair Market Rents (FMR) by bedroom count, Income Limits by household size for counties and metro areas. Essential for affordable housing, Section 8 vouchers, and housing cost analysis.";
10
+ export const auth = {
11
+ envVar: "HUD_USER_TOKEN",
12
+ signup: "https://www.huduser.gov/hudapi/public/register",
13
+ };
14
+ export const workflow = "Use hud_list_states to get state codes → hud_list_counties to find county FIPS codes → hud_fair_market_rents for rental data → hud_income_limits for income thresholds.";
15
+ export const tips = "Entity IDs are county FIPS codes (e.g. '0600000001' for a CA county). Use hud_list_counties to find them. State-level tools accept two-letter codes (CA, TX). FMR data shows HUD-determined fair rents used for Section 8 voucher amounts. Income Limits show Very Low, Extremely Low, and Low income thresholds by household size (1-8 persons).";
16
+ // ─── Helpers ─────────────────────────────────────────────────────────
17
+ function formatFmr(data) {
18
+ const basic = data.basicdata;
19
+ const source = basic ?? data;
20
+ const name = source.area_name ?? source.county_name ?? source.metro_name ?? "Unknown area";
21
+ const year = source.year ?? data.year ?? "?";
22
+ // Try to find rent values from various possible field names
23
+ const eff = source.Efficiency ?? source.efficiency ?? source.rent_eff ?? "N/A";
24
+ const br1 = source["One-Bedroom"] ?? source.one_bedroom ?? source.rent_1br ?? "N/A";
25
+ const br2 = source["Two-Bedroom"] ?? source.two_bedroom ?? source.rent_2br ?? "N/A";
26
+ const br3 = source["Three-Bedroom"] ?? source.three_bedroom ?? source.rent_3br ?? "N/A";
27
+ const br4 = source["Four-Bedroom"] ?? source.four_bedroom ?? source.rent_4br ?? "N/A";
28
+ const fmt = (v) => (typeof v === "number" ? `$${v.toLocaleString()}` : String(v));
29
+ return [
30
+ `Fair Market Rents — ${name} (${year})`,
31
+ ` Efficiency: ${fmt(eff)}`,
32
+ ` 1-Bedroom: ${fmt(br1)}`,
33
+ ` 2-Bedroom: ${fmt(br2)}`,
34
+ ` 3-Bedroom: ${fmt(br3)}`,
35
+ ` 4-Bedroom: ${fmt(br4)}`,
36
+ ].join("\n");
37
+ }
38
+ function formatIncomeLimits(data) {
39
+ const name = data.area_name ?? data.county_name ?? data.metro_name ?? "Unknown area";
40
+ const year = data.year ?? "?";
41
+ const median = data.median_income ?? data.median ?? "N/A";
42
+ const fmt = (v) => (typeof v === "number" ? `$${v.toLocaleString()}` : String(v));
43
+ const lines = [`Income Limits — ${name} (${year})`, `Median Family Income: ${fmt(median)}`];
44
+ const categories = [
45
+ { key: "very_low", label: "Very Low (50%)" },
46
+ { key: "extremely_low", label: "Extremely Low (30%)" },
47
+ { key: "low", label: "Low (80%)" },
48
+ ];
49
+ for (const cat of categories) {
50
+ const vals = data[cat.key];
51
+ if (vals && typeof vals === "object") {
52
+ const personCounts = Object.entries(vals)
53
+ .map(([k, v]) => `${k}-person: ${fmt(v)}`)
54
+ .join(", ");
55
+ lines.push(` ${cat.label}: ${personCounts}`);
56
+ }
57
+ }
58
+ return lines.join("\n");
59
+ }
60
+ // ─── Tools ───────────────────────────────────────────────────────────
61
+ export const tools = [
62
+ {
63
+ name: "hud_fair_market_rents",
64
+ description: "Get HUD Fair Market Rents (FMR) for a county, metro area, or entire state. Shows monthly rent by bedroom count (efficiency through 4-bedroom). FMR determines Section 8 voucher amounts.",
65
+ annotations: { title: "HUD Fair Market Rents", readOnlyHint: true },
66
+ parameters: z.object({
67
+ state: z.string().max(2).optional().describe("Two-letter state code for state-wide FMR data (e.g. CA, TX)"),
68
+ entity_id: z.string().optional().describe("County FIPS or CBSA code for specific area FMR (get from hud_list_counties)"),
69
+ year: z.number().optional().describe("Fiscal year (e.g. 2024). Defaults to current year."),
70
+ }),
71
+ execute: async (args) => {
72
+ let data;
73
+ if (args.entity_id) {
74
+ data = await getFairMarketRents(args.entity_id, args.year);
75
+ }
76
+ else if (args.state) {
77
+ data = await getStateFairMarketRents(args.state, args.year);
78
+ }
79
+ else {
80
+ return { content: [{ type: "text", text: "Provide either state or entity_id." }] };
81
+ }
82
+ // Handle state data which may return an array
83
+ if (Array.isArray(data)) {
84
+ const lines = data.slice(0, 20).map((item) => formatFmr(item));
85
+ return { content: [{ type: "text", text: lines.join("\n\n") }] };
86
+ }
87
+ return { content: [{ type: "text", text: formatFmr(data) }] };
88
+ },
89
+ },
90
+ {
91
+ name: "hud_income_limits",
92
+ description: "Get HUD Income Limits for a county, metro area, or entire state. Shows Very Low, Extremely Low, and Low income thresholds by household size (1-8 persons). Used for affordable housing eligibility.",
93
+ annotations: { title: "HUD Income Limits", readOnlyHint: true },
94
+ parameters: z.object({
95
+ state: z.string().max(2).optional().describe("Two-letter state code for state-wide income limits"),
96
+ entity_id: z.string().optional().describe("County FIPS or CBSA code (get from hud_list_counties)"),
97
+ year: z.number().optional().describe("Fiscal year (e.g. 2024). Defaults to current year."),
98
+ }),
99
+ execute: async (args) => {
100
+ let data;
101
+ if (args.entity_id) {
102
+ data = await getIncomeLimits(args.entity_id, args.year);
103
+ }
104
+ else if (args.state) {
105
+ data = await getStateIncomeLimits(args.state, args.year);
106
+ }
107
+ else {
108
+ return { content: [{ type: "text", text: "Provide either state or entity_id." }] };
109
+ }
110
+ if (Array.isArray(data)) {
111
+ const lines = data.slice(0, 20).map((item) => formatIncomeLimits(item));
112
+ return { content: [{ type: "text", text: lines.join("\n\n") }] };
113
+ }
114
+ return { content: [{ type: "text", text: formatIncomeLimits(data) }] };
115
+ },
116
+ },
117
+ {
118
+ name: "hud_list_states",
119
+ description: "List all U.S. states with their HUD state codes. Use these codes with other HUD tools.",
120
+ annotations: { title: "HUD States", readOnlyHint: true },
121
+ parameters: z.object({}),
122
+ execute: async () => {
123
+ const states = await listStates();
124
+ if (!states.length)
125
+ return { content: [{ type: "text", text: "No states returned." }] };
126
+ const lines = states.map((s) => `${s.state_code}: ${s.state_name}`);
127
+ return { content: [{ type: "text", text: lines.join("\n") }] };
128
+ },
129
+ },
130
+ {
131
+ name: "hud_list_counties",
132
+ description: "List counties in a state with their FIPS codes. Use FIPS codes as entity_id in hud_fair_market_rents and hud_income_limits.",
133
+ annotations: { title: "HUD Counties", readOnlyHint: true },
134
+ parameters: z.object({
135
+ state: z.string().max(2).describe("Two-letter state code (e.g. CA, TX, NY)"),
136
+ }),
137
+ execute: async (args) => {
138
+ const counties = await listCounties(args.state);
139
+ if (!counties.length)
140
+ return { content: [{ type: "text", text: `No counties found for state '${args.state}'.` }] };
141
+ const lines = counties.map((c) => `${c.fips_code}: ${c.county_name}`);
142
+ return {
143
+ content: [{ type: "text", text: `${counties.length} county/area(s) in ${args.state.toUpperCase()}:\n${lines.join("\n")}` }],
144
+ };
145
+ },
146
+ },
147
+ {
148
+ name: "hud_list_metro_areas",
149
+ description: "List metropolitan/CBSA areas. CBSA codes can be used as entity_id in HUD tools.",
150
+ annotations: { title: "HUD Metro Areas", readOnlyHint: true },
151
+ parameters: z.object({}),
152
+ execute: async () => {
153
+ const areas = await listMetroAreas();
154
+ if (!areas.length)
155
+ return { content: [{ type: "text", text: "No metro areas returned." }] };
156
+ const preview = areas.slice(0, 50);
157
+ const lines = preview.map((a) => `${a.cbsa_code}: ${a.area_name}`);
158
+ return {
159
+ content: [
160
+ {
161
+ type: "text",
162
+ text: `${areas.length} metro area(s)${areas.length > 50 ? " (showing first 50)" : ""}:\n${lines.join("\n")}`,
163
+ },
164
+ ],
165
+ };
166
+ },
167
+ },
168
+ ];
169
+ export { sdkClearCache as clearCache };
170
+ //# sourceMappingURL=hud.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hud.js","sourceRoot":"","sources":["../../src/modules/hud.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * NAEP (Nation's Report Card) MCP module — test scores, achievement levels, and gaps.
3
+ */
4
+ import type { Tool, InputPrompt } from "fastmcp";
5
+ export declare const name = "naep";
6
+ export declare const displayName = "NAEP (Nation's Report Card)";
7
+ export declare const description = "National Assessment of Educational Progress: reading, math, science test scores by state, grade, race, gender, school lunch eligibility \u2014 the gold standard for U.S. education measurement";
8
+ export declare const workflow = "naep_scores for current data, naep_achievement_levels for proficiency %, naep_compare_years for trends, naep_compare_states for state rankings";
9
+ export declare const tips: string;
10
+ export declare const reference: {
11
+ subjects: Record<string, {
12
+ code: string;
13
+ subscale: string;
14
+ label: string;
15
+ }>;
16
+ variables: Record<string, string>;
17
+ statTypes: Record<string, string>;
18
+ docs: {
19
+ "NAEP Data Explorer": string;
20
+ "API Documentation": string;
21
+ "Assessment Schedule": string;
22
+ };
23
+ };
24
+ export declare const tools: Tool<any, any>[];
25
+ export declare const prompts: InputPrompt<any, any>[];
26
+ export { clearCache } from "../sdk/naep.js";
27
+ //# sourceMappingURL=naep.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naep.d.ts","sourceRoot":"","sources":["../../src/modules/naep.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAejD,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,WAAW,gCAAgC,CAAC;AACzD,eAAO,MAAM,WAAW,oMAA+L,CAAC;AACxN,eAAO,MAAM,QAAQ,mJAAmJ,CAAC;AACzK,eAAO,MAAM,IAAI,QAIsE,CAAC;AAExF,eAAO,MAAM,SAAS;;;;;;;;;;;;;CASrB,CAAC;AAIF,eAAO,MAAM,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EA0KjC,CAAC;AAIF,eAAO,MAAM,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,EAe1C,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,210 @@
1
+ /**
2
+ * NAEP (Nation's Report Card) MCP module — test scores, achievement levels, and gaps.
3
+ */
4
+ import { z } from "zod";
5
+ import { getScores, getAchievementLevels, compareAcrossYears, compareAcrossJurisdictions, compareAcrossGroups, SUBJECTS, VARIABLES, STAT_TYPES, } from "../sdk/naep.js";
6
+ // ─── Metadata ────────────────────────────────────────────────────────
7
+ export const name = "naep";
8
+ export const displayName = "NAEP (Nation's Report Card)";
9
+ export const description = "National Assessment of Educational Progress: reading, math, science test scores by state, grade, race, gender, school lunch eligibility — the gold standard for U.S. education measurement";
10
+ export const workflow = "naep_scores for current data, naep_achievement_levels for proficiency %, naep_compare_years for trends, naep_compare_states for state rankings";
11
+ export const tips = "Subjects: 'reading', 'math', 'science', 'writing', 'civics', 'history'. " +
12
+ "Grades: 4, 8, 12. Jurisdiction codes: 'NP' (national public), or state abbreviations (CA, TX, NY). " +
13
+ "Variables: 'TOTAL' (all students), 'SDRACE' (race), 'GENDER', 'SLUNCH3' (poverty/lunch eligibility). " +
14
+ "Years: use specific years like '2022' or 'Current'. NAEP is assessed every 2 years.";
15
+ export const reference = {
16
+ subjects: SUBJECTS,
17
+ variables: VARIABLES,
18
+ statTypes: STAT_TYPES,
19
+ docs: {
20
+ "NAEP Data Explorer": "https://www.nationsreportcard.gov/ndecore/landing",
21
+ "API Documentation": "https://www.nationsreportcard.gov/api_documentation.aspx",
22
+ "Assessment Schedule": "https://nces.ed.gov/nationsreportcard/about/assessmentsched.aspx",
23
+ },
24
+ };
25
+ // ─── Tools ───────────────────────────────────────────────────────────
26
+ export const tools = [
27
+ {
28
+ name: "naep_scores",
29
+ description: "Get NAEP test scores (Nation's Report Card) — the gold standard for measuring U.S. student achievement.\n" +
30
+ "Returns average scale scores by subject, grade, state, and demographic group.\n\n" +
31
+ "Subjects: 'reading', 'math', 'science', 'writing', 'civics', 'history', 'geography'\n" +
32
+ "Grades: 4, 8, 12\n" +
33
+ "Variables: 'TOTAL' (all students), 'SDRACE' (race), 'GENDER', 'SLUNCH3' (school lunch/poverty), 'PARED' (parent education)\n" +
34
+ "Jurisdiction: 'NP' (national public), or state codes ('CA', 'TX', 'NY', 'MS')",
35
+ annotations: { title: "NAEP: Test Scores", readOnlyHint: true },
36
+ parameters: z.object({
37
+ subject: z.string().describe("'reading', 'math', 'science', 'writing', 'civics', 'history', 'geography'"),
38
+ grade: z.number().int().describe("4, 8, or 12"),
39
+ variable: z.string().optional().describe("'TOTAL' (default), 'SDRACE' (race), 'GENDER', 'SLUNCH3' (poverty), 'PARED' (parent ed), 'IEP' (disability), 'LEP' (English learners)"),
40
+ jurisdiction: z.string().optional().describe("'NP' (national public, default), or state codes: 'CA', 'TX', 'NY', 'MS', 'MA'. Comma-separate for multiple."),
41
+ year: z.string().optional().describe("Assessment year: '2022', '2019', '2017'. Default: most recent. Use 'Current' for latest."),
42
+ stat_type: z.string().optional().describe("'MN:MN' (mean score, default), 'ALC:AP' (% at/above proficient), 'ALC:BB' (% below basic)"),
43
+ }),
44
+ execute: async ({ subject, grade, variable, jurisdiction, year, stat_type }) => {
45
+ const data = await getScores({
46
+ subject, grade,
47
+ variable: variable || "TOTAL",
48
+ jurisdiction: jurisdiction || "NP",
49
+ year: year || "Current",
50
+ stattype: stat_type,
51
+ });
52
+ if (!data.result?.length)
53
+ return `No NAEP data found for ${subject} grade ${grade}.`;
54
+ return JSON.stringify({
55
+ summary: `NAEP ${subject} grade ${grade}: ${data.result.length} data points`,
56
+ results: data.result.map(r => ({
57
+ year: r.year, jurisdiction: r.jurisdiction,
58
+ variable: r.variable, category: r.varValueLabel || r.varValue,
59
+ value: r.value, standardError: r.se, errorFlag: r.errorFlag,
60
+ })),
61
+ });
62
+ },
63
+ },
64
+ {
65
+ name: "naep_achievement_levels",
66
+ description: "Get the percentage of students at each NAEP achievement level: Below Basic, Basic, Proficient, Advanced.\n" +
67
+ "THIS IS THE KEY LITERACY/NUMERACY METRIC — shows what % of students can read/do math at grade level.\n" +
68
+ "Example: '37% of 4th graders scored Below Basic in reading' comes from this data.",
69
+ annotations: { title: "NAEP: Achievement Levels", readOnlyHint: true },
70
+ parameters: z.object({
71
+ subject: z.string().describe("'reading', 'math', 'science'"),
72
+ grade: z.number().int().describe("4, 8, or 12"),
73
+ variable: z.string().optional().describe("'TOTAL' (default), 'SDRACE' (race), 'GENDER', 'SLUNCH3' (poverty)"),
74
+ jurisdiction: z.string().optional().describe("'NP' (national, default), or state codes"),
75
+ year: z.string().optional().describe("Year: '2022', '2019'. Default: most recent"),
76
+ }),
77
+ execute: async ({ subject, grade, variable, jurisdiction, year }) => {
78
+ const data = await getAchievementLevels({
79
+ subject, grade,
80
+ variable: variable || "TOTAL",
81
+ jurisdiction: jurisdiction || "NP",
82
+ year: year || "Current",
83
+ });
84
+ if (!data.result?.length)
85
+ return `No achievement level data found for ${subject} grade ${grade}.`;
86
+ return JSON.stringify({
87
+ summary: `NAEP achievement levels: ${subject} grade ${grade}, ${data.result.length} data points`,
88
+ results: data.result.map(r => ({
89
+ year: r.year, jurisdiction: r.jurisdiction,
90
+ variable: r.variable, category: r.varValueLabel || r.varValue,
91
+ statType: r.stattype, value: r.value, standardError: r.se,
92
+ })),
93
+ });
94
+ },
95
+ },
96
+ {
97
+ name: "naep_compare_years",
98
+ description: "Compare NAEP scores across assessment years with significance testing.\n" +
99
+ "Shows whether score changes between years are statistically significant.\n" +
100
+ "Great for tracking the COVID learning loss and recovery.",
101
+ annotations: { title: "NAEP: Compare Across Years", readOnlyHint: true },
102
+ parameters: z.object({
103
+ subject: z.string().describe("'reading', 'math', 'science'"),
104
+ grade: z.number().int().describe("4, 8, or 12"),
105
+ years: z.string().describe("Comma-separated years to compare: '2022,2019' or '2022,2019,2017'"),
106
+ variable: z.string().optional().describe("'TOTAL' (default), 'SDRACE', 'GENDER', 'SLUNCH3'"),
107
+ jurisdiction: z.string().optional().describe("'NP' (default), or state codes"),
108
+ }),
109
+ execute: async ({ subject, grade, years, variable, jurisdiction }) => {
110
+ const data = await compareAcrossYears({
111
+ subject, grade, years,
112
+ variable: variable || "TOTAL",
113
+ jurisdiction: jurisdiction || "NP",
114
+ });
115
+ if (!data.result?.length)
116
+ return `No comparison data found.`;
117
+ return JSON.stringify({
118
+ summary: `NAEP year comparison: ${subject} grade ${grade}, years ${years}`,
119
+ results: data.result.map((r) => ({
120
+ year: r.year, jurisdiction: r.jurisdiction,
121
+ category: r.varValueLabel || r.varValue,
122
+ focalValue: r.focalValue, targetValue: r.targetValue,
123
+ gap: r.gap, significance: r.significance ?? r.sig,
124
+ })),
125
+ });
126
+ },
127
+ },
128
+ {
129
+ name: "naep_compare_states",
130
+ description: "Compare NAEP scores across states/jurisdictions with significance testing.\n" +
131
+ "Shows which states score significantly higher or lower than others.\n" +
132
+ "Example: Compare Massachusetts vs Mississippi reading scores.",
133
+ annotations: { title: "NAEP: Compare States", readOnlyHint: true },
134
+ parameters: z.object({
135
+ subject: z.string().describe("'reading', 'math', 'science'"),
136
+ grade: z.number().int().describe("4, 8, or 12"),
137
+ jurisdictions: z.string().describe("Comma-separated jurisdiction codes: 'NP,CA,TX,MS,MA' or 'NP,NY'"),
138
+ variable: z.string().optional().describe("'TOTAL' (default), 'SDRACE', 'GENDER'"),
139
+ year: z.string().optional().describe("Year: '2022'. Default: most recent"),
140
+ }),
141
+ execute: async ({ subject, grade, jurisdictions, variable, year }) => {
142
+ const data = await compareAcrossJurisdictions({
143
+ subject, grade, jurisdictions,
144
+ variable: variable || "TOTAL",
145
+ year: year || "Current",
146
+ });
147
+ if (!data.result?.length)
148
+ return `No comparison data found.`;
149
+ return JSON.stringify({
150
+ summary: `NAEP state comparison: ${subject} grade ${grade}, jurisdictions ${jurisdictions}`,
151
+ results: data.result.map((r) => ({
152
+ year: r.year, jurisdiction: r.jurisdiction,
153
+ category: r.varValueLabel || r.varValue,
154
+ focalValue: r.focalValue, targetValue: r.targetValue,
155
+ gap: r.gap, significance: r.significance ?? r.sig,
156
+ })),
157
+ });
158
+ },
159
+ },
160
+ {
161
+ name: "naep_compare_groups",
162
+ description: "Compare NAEP scores across demographic groups (race, gender, poverty) with significance testing.\n" +
163
+ "Shows achievement gaps between groups (e.g., White vs Black, Male vs Female, eligible vs not eligible for free lunch).",
164
+ annotations: { title: "NAEP: Achievement Gaps", readOnlyHint: true },
165
+ parameters: z.object({
166
+ subject: z.string().describe("'reading', 'math', 'science'"),
167
+ grade: z.number().int().describe("4, 8, or 12"),
168
+ variable: z.string().describe("'SDRACE' (race gap), 'GENDER' (gender gap), 'SLUNCH3' (poverty gap), 'IEP' (disability gap), 'LEP' (ELL gap)"),
169
+ jurisdiction: z.string().optional().describe("'NP' (default), or state codes"),
170
+ year: z.string().optional().describe("Year: '2022'. Default: most recent"),
171
+ }),
172
+ execute: async ({ subject, grade, variable, jurisdiction, year }) => {
173
+ const data = await compareAcrossGroups({
174
+ subject, grade, variable,
175
+ jurisdiction: jurisdiction || "NP",
176
+ year: year || "Current",
177
+ });
178
+ if (!data.result?.length)
179
+ return `No gap data found.`;
180
+ return JSON.stringify({
181
+ summary: `NAEP achievement gaps: ${subject} grade ${grade}, by ${variable}`,
182
+ results: data.result.map((r) => ({
183
+ year: r.year, jurisdiction: r.jurisdiction,
184
+ focalCategory: r.focalVarValueLabel || r.focalVarValue,
185
+ targetCategory: r.targetVarValueLabel || r.targetVarValue,
186
+ focalValue: r.focalValue, targetValue: r.targetValue,
187
+ gap: r.gap, significance: r.significance ?? r.sig,
188
+ })),
189
+ });
190
+ },
191
+ },
192
+ ];
193
+ // ─── Prompts ─────────────────────────────────────────────────────────
194
+ export const prompts = [
195
+ {
196
+ name: "education_report_card",
197
+ description: "Comprehensive U.S. education snapshot: NAEP scores, achievement levels, trends, and demographic gaps.",
198
+ load: async () => "Build a comprehensive education report card:\n\n" +
199
+ "1. Use naep_scores for 4th grade reading (NP, TOTAL, 2022) — current national average\n" +
200
+ "2. Use naep_achievement_levels for 4th grade reading — what % are below basic, proficient, etc.\n" +
201
+ "3. Use naep_compare_years for 4th grade reading years 2022,2019,2017 — track COVID impact\n" +
202
+ "4. Use naep_compare_groups for 4th grade reading by SDRACE — racial achievement gap\n" +
203
+ "5. Use naep_compare_groups for 4th grade reading by SLUNCH3 — poverty achievement gap\n" +
204
+ "6. Repeat steps 1-2 for 4th grade math\n" +
205
+ "7. Use naep_compare_states for reading grade 4: NP,MA,MS,CA,TX — highest vs lowest states\n\n" +
206
+ "Cross-reference with Census poverty data and CDC PLACES health data to show how poverty, food insecurity, and health correlate with test scores.",
207
+ },
208
+ ];
209
+ export { clearCache } from "../sdk/naep.js";
210
+ //# sourceMappingURL=naep.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naep.js","sourceRoot":"","sources":["../../src/modules/naep.ts"],"names":[],"mappings":"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"}