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,13 @@
1
+ /**
2
+ * NHTSA module — vehicle recalls, safety complaints, and VIN decoding
3
+ */
4
+ import type { Tool } from "fastmcp";
5
+ import { clearCache as sdkClearCache } from "../sdk/nhtsa.js";
6
+ export declare const name = "nhtsa";
7
+ export declare const displayName = "NHTSA";
8
+ export declare const description = "National Highway Traffic Safety Administration \u2014 vehicle recalls, consumer complaints, VIN decoding, vehicle specifications. No API key required.";
9
+ export declare const workflow = "Use nhtsa_recalls to search for recalls by make/model/year \u2192 nhtsa_complaints for consumer complaints \u2192 nhtsa_decode_vin to decode a specific VIN \u2192 nhtsa_models to browse available models for a make.";
10
+ export declare const tips = "Use common make names like 'honda', 'toyota', 'ford', 'chevrolet', 'tesla'. Model names should match official names: 'civic', 'camry', 'f-150', 'model 3'. VINs are 17 characters.";
11
+ export declare const tools: Tool<any, any>[];
12
+ export { sdkClearCache as clearCache };
13
+ //# sourceMappingURL=nhtsa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nhtsa.d.ts","sourceRoot":"","sources":["../../src/modules/nhtsa.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAOL,UAAU,IAAI,aAAa,EAG5B,MAAM,iBAAiB,CAAC;AAIzB,eAAO,MAAM,IAAI,UAAU,CAAC;AAC5B,eAAO,MAAM,WAAW,UAAU,CAAC;AACnC,eAAO,MAAM,WAAW,2JAC6H,CAAC;AACtJ,eAAO,MAAM,QAAQ,2NACsL,CAAC;AAC5M,eAAO,MAAM,IAAI,uLACqK,CAAC;AA6CvL,eAAO,MAAM,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAiJjC,CAAC;AAEF,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,CAAC"}
@@ -0,0 +1,196 @@
1
+ /**
2
+ * NHTSA module — vehicle recalls, safety complaints, and VIN decoding
3
+ */
4
+ import { z } from "zod";
5
+ import { getRecalls, getComplaints, decodeVin, getModelsForMake, getSafetyRatingVehicles, getSafetyRatingDetail, clearCache as sdkClearCache, } from "../sdk/nhtsa.js";
6
+ // ─── Metadata ────────────────────────────────────────────────────────
7
+ export const name = "nhtsa";
8
+ export const displayName = "NHTSA";
9
+ export const description = "National Highway Traffic Safety Administration — vehicle recalls, consumer complaints, VIN decoding, vehicle specifications. No API key required.";
10
+ export const workflow = "Use nhtsa_recalls to search for recalls by make/model/year → nhtsa_complaints for consumer complaints → nhtsa_decode_vin to decode a specific VIN → nhtsa_models to browse available models for a make.";
11
+ export const tips = "Use common make names like 'honda', 'toyota', 'ford', 'chevrolet', 'tesla'. Model names should match official names: 'civic', 'camry', 'f-150', 'model 3'. VINs are 17 characters.";
12
+ // ─── Helpers ─────────────────────────────────────────────────────────
13
+ function summarizeRecalls(data) {
14
+ if (!data.length)
15
+ return "No recalls found for this vehicle.";
16
+ const lines = data.map((r) => {
17
+ const parts = [
18
+ `Campaign: ${r.NHTSACampaignNumber ?? "?"}`,
19
+ `${r.ModelYear ?? "?"} ${r.Make ?? "?"} ${r.Model ?? "?"}`,
20
+ `Component: ${r.Component ?? "?"}`,
21
+ `Summary: ${r.Summary ?? "N/A"}`,
22
+ `Consequence: ${r.Consequence ?? "N/A"}`,
23
+ `Remedy: ${r.Remedy ?? "N/A"}`,
24
+ ];
25
+ if (r.parkIt)
26
+ parts.push("⚠ PARK IT: Do not drive");
27
+ return parts.join("\n ");
28
+ });
29
+ return `${data.length} recall(s) found:\n\n${lines.join("\n\n")}`;
30
+ }
31
+ function summarizeComplaints(data) {
32
+ if (!data.length)
33
+ return "No complaints found for this vehicle.";
34
+ const stats = {
35
+ total: data.length,
36
+ crashes: data.filter((c) => c.crash).length,
37
+ fires: data.filter((c) => c.fire).length,
38
+ injuries: data.reduce((sum, c) => sum + (c.numberOfInjuries ?? 0), 0),
39
+ deaths: data.reduce((sum, c) => sum + (c.numberOfDeaths ?? 0), 0),
40
+ };
41
+ const header = `${stats.total} complaint(s) — ${stats.crashes} crash(es), ${stats.fires} fire(s), ${stats.injuries} injury(ies), ${stats.deaths} death(s)`;
42
+ const preview = data.slice(0, 10);
43
+ const lines = preview.map((c) => {
44
+ const date = c.dateOfIncident ?? c.dateComplaintFiled ?? "?";
45
+ const product = c.products?.[0];
46
+ const vehicle = product ? `${product.productYear ?? ""} ${product.productMake ?? ""} ${product.productModel ?? ""}`.trim() : "?";
47
+ return `[${c.odiNumber ?? "?"}] ${date} — ${vehicle}\n Component: ${c.components ?? "?"}\n ${c.summary ?? "No summary"}${c.crash ? "\n ⚠ CRASH" : ""}${c.fire ? "\n 🔥 FIRE" : ""}`;
48
+ });
49
+ return `${header}\n\n${lines.join("\n\n")}${data.length > 10 ? `\n\n... and ${data.length - 10} more` : ""}`;
50
+ }
51
+ // ─── Tools ───────────────────────────────────────────────────────────
52
+ export const tools = [
53
+ {
54
+ name: "nhtsa_recalls",
55
+ description: "Search NHTSA vehicle recalls by make, model, and model year. Returns campaign numbers, affected components, consequences, and remedies.",
56
+ annotations: { title: "NHTSA Vehicle Recalls", readOnlyHint: true },
57
+ parameters: z.object({
58
+ make: z.string().describe("Vehicle make (e.g. 'honda', 'toyota', 'ford', 'tesla')"),
59
+ model: z.string().describe("Vehicle model (e.g. 'civic', 'camry', 'f-150', 'model 3')"),
60
+ model_year: z.number().describe("Model year (e.g. 2020, 2023)"),
61
+ }),
62
+ execute: async (args) => {
63
+ const data = await getRecalls({
64
+ make: args.make,
65
+ model: args.model,
66
+ modelYear: args.model_year,
67
+ });
68
+ return { content: [{ type: "text", text: summarizeRecalls(data) }] };
69
+ },
70
+ },
71
+ {
72
+ name: "nhtsa_complaints",
73
+ description: "Search NHTSA consumer complaints about vehicles. Shows crash/fire/injury/death counts, affected components, and complaint summaries.",
74
+ annotations: { title: "NHTSA Vehicle Complaints", readOnlyHint: true },
75
+ parameters: z.object({
76
+ make: z.string().describe("Vehicle make (e.g. 'honda', 'toyota', 'ford', 'tesla')"),
77
+ model: z.string().describe("Vehicle model (e.g. 'civic', 'camry', 'f-150', 'model 3')"),
78
+ model_year: z.number().describe("Model year (e.g. 2020, 2023)"),
79
+ }),
80
+ execute: async (args) => {
81
+ const data = await getComplaints({
82
+ make: args.make,
83
+ model: args.model,
84
+ modelYear: args.model_year,
85
+ });
86
+ return { content: [{ type: "text", text: summarizeComplaints(data) }] };
87
+ },
88
+ },
89
+ {
90
+ name: "nhtsa_decode_vin",
91
+ description: "Decode a Vehicle Identification Number (VIN) to get vehicle specifications: make, model, year, engine, body class, drive type, fuel type, manufacturer, plant location.",
92
+ annotations: { title: "NHTSA VIN Decoder", readOnlyHint: true },
93
+ parameters: z.object({
94
+ vin: z.string().min(11).max(17).describe("Vehicle Identification Number (VIN), 11-17 characters"),
95
+ }),
96
+ execute: async (args) => {
97
+ const result = await decodeVin(args.vin);
98
+ if (result.ErrorCode && result.ErrorCode !== "0") {
99
+ return { content: [{ type: "text", text: `VIN decode error: ${result.ErrorText ?? "Unknown error"}` }] };
100
+ }
101
+ const fields = [
102
+ ["Make", result.Make],
103
+ ["Model", result.Model],
104
+ ["Year", result.ModelYear],
105
+ ["Manufacturer", result.Manufacturer],
106
+ ["Vehicle Type", result.VehicleType],
107
+ ["Body Class", result.BodyClass],
108
+ ["Drive Type", result.DriveType],
109
+ ["Fuel Type", result.FuelTypePrimary],
110
+ ["Engine", result.EngineModel],
111
+ ["Cylinders", result.EngineCylinders],
112
+ ["Displacement (L)", result.DisplacementL],
113
+ ["Transmission", result.TransmissionStyle],
114
+ ["Plant City", result.PlantCity],
115
+ ["Plant Country", result.PlantCountry],
116
+ ]
117
+ .filter(([, v]) => v)
118
+ .map(([k, v]) => `${k}: ${v}`);
119
+ return { content: [{ type: "text", text: fields.join("\n") || "No data returned for this VIN." }] };
120
+ },
121
+ },
122
+ {
123
+ name: "nhtsa_models",
124
+ description: "Get all models available for a given vehicle make, optionally filtered by model year. Useful for discovering valid model names before searching recalls/complaints.",
125
+ annotations: { title: "NHTSA Vehicle Models", readOnlyHint: true },
126
+ parameters: z.object({
127
+ make: z.string().describe("Vehicle make (e.g. 'honda', 'toyota', 'ford')"),
128
+ model_year: z.number().optional().describe("Optional model year filter"),
129
+ }),
130
+ execute: async (args) => {
131
+ const data = await getModelsForMake({
132
+ make: args.make,
133
+ modelYear: args.model_year,
134
+ });
135
+ if (!data.length)
136
+ return { content: [{ type: "text", text: `No models found for make '${args.make}'.` }] };
137
+ const models = data.map((m) => m.Model_Name).sort();
138
+ return {
139
+ content: [{ type: "text", text: `${models.length} model(s) for ${args.make}${args.model_year ? ` (${args.model_year})` : ""}:\n${models.join(", ")}` }],
140
+ };
141
+ },
142
+ },
143
+ {
144
+ name: "nhtsa_safety_ratings",
145
+ description: "Get NHTSA 5-star safety ratings for a vehicle.\n" +
146
+ "Shows overall rating, frontal crash, side crash, rollover risk, and safety technology (ESC, forward collision warning, lane departure warning).\n" +
147
+ "Also shows complaint, recall, and investigation counts for the vehicle.",
148
+ annotations: { title: "NHTSA Safety Ratings", readOnlyHint: true },
149
+ parameters: z.object({
150
+ make: z.string().describe("Vehicle make: 'honda', 'toyota', 'ford', 'tesla'"),
151
+ model: z.string().describe("Vehicle model: 'civic', 'camry', 'f-150', 'model 3'"),
152
+ model_year: z.number().describe("Model year: 2020, 2023, 2024"),
153
+ }),
154
+ execute: async (args) => {
155
+ const vehicles = await getSafetyRatingVehicles({ make: args.make, model: args.model, modelYear: args.model_year });
156
+ if (!vehicles.length)
157
+ return { content: [{ type: "text", text: `No safety ratings found for ${args.model_year} ${args.make} ${args.model}. Try different spelling or year.` }] };
158
+ // Get detailed ratings for each variant
159
+ const details = [];
160
+ for (const v of vehicles.slice(0, 5)) {
161
+ if (v.VehicleId) {
162
+ const rating = await getSafetyRatingDetail(v.VehicleId);
163
+ if (rating)
164
+ details.push(rating);
165
+ }
166
+ }
167
+ if (!details.length) {
168
+ const names = vehicles.map(v => v.VehicleDescription).join(", ");
169
+ return { content: [{ type: "text", text: `Found ${vehicles.length} variant(s): ${names}\nNo detailed ratings available yet.` }] };
170
+ }
171
+ const lines = details.map(r => {
172
+ const parts = [
173
+ `${r.VehicleDescription ?? "?"}`,
174
+ ` Overall: ${r.OverallRating ?? "N/R"} stars`,
175
+ ` Front Crash: ${r.OverallFrontCrashRating ?? "N/R"} (driver: ${r.FrontCrashDriversideRating ?? "?"}, passenger: ${r.FrontCrashPassengersideRating ?? "?"})`,
176
+ ` Side Crash: ${r.OverallSideCrashRating ?? "N/R"} (driver: ${r.SideCrashDriversideRating ?? "?"}, passenger: ${r.SideCrashPassengersideRating ?? "?"})`,
177
+ ` Rollover: ${r.RolloverRating ?? "N/R"} (risk: ${r.RolloverPossibility != null ? r.RolloverPossibility + "%" : "?"})`,
178
+ ];
179
+ if (r.SidePoleCrashRating)
180
+ parts.push(` Side Pole Crash: ${r.SidePoleCrashRating}`);
181
+ if (r.NHTSAElectronicStabilityControl)
182
+ parts.push(` ESC: ${r.NHTSAElectronicStabilityControl}`);
183
+ if (r.NHTSAForwardCollisionWarning)
184
+ parts.push(` Forward Collision Warning: ${r.NHTSAForwardCollisionWarning}`);
185
+ if (r.NHTSALaneDepartureWarning)
186
+ parts.push(` Lane Departure Warning: ${r.NHTSALaneDepartureWarning}`);
187
+ if (r.ComplaintsCount != null)
188
+ parts.push(` Complaints: ${r.ComplaintsCount} | Recalls: ${r.RecallsCount ?? 0} | Investigations: ${r.InvestigationCount ?? 0}`);
189
+ return parts.join("\n");
190
+ });
191
+ return { content: [{ type: "text", text: `NHTSA Safety Ratings for ${args.model_year} ${args.make} ${args.model}:\n\n${lines.join("\n\n")}` }] };
192
+ },
193
+ },
194
+ ];
195
+ export { sdkClearCache as clearCache };
196
+ //# sourceMappingURL=nhtsa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nhtsa.js","sourceRoot":"","sources":["../../src/modules/nhtsa.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * NOAA Climate MCP module — weather, temperature, precipitation tools.
3
+ */
4
+ import type { Tool, InputPrompt } from "fastmcp";
5
+ export declare const name = "noaa";
6
+ export declare const displayName = "NOAA Climate Data Online";
7
+ export declare const description = "Weather observations, temperature, precipitation, climate normals from NOAA stations across the U.S.";
8
+ export declare const auth: {
9
+ envVar: string;
10
+ signup: string;
11
+ };
12
+ export declare const workflow = "noaa_stations to find a station \u2192 noaa_climate_data to get observations";
13
+ export declare const tips = "Datasets: GHCND (daily), GSOM (monthly summary), GSOY (annual summary). Location IDs: FIPS:36 (NY), FIPS:06 (CA)";
14
+ export declare const reference: {
15
+ datasets: {
16
+ GHCND: string;
17
+ GSOM: string;
18
+ GSOY: string;
19
+ NORMAL_DLY: string;
20
+ NORMAL_MLY: string;
21
+ NORMAL_ANN: string;
22
+ };
23
+ commonDataTypes: {
24
+ TMAX: string;
25
+ TMIN: string;
26
+ TAVG: string;
27
+ PRCP: string;
28
+ SNOW: string;
29
+ SNWD: string;
30
+ AWND: string;
31
+ };
32
+ docs: {
33
+ "API Docs": string;
34
+ "Get Key": string;
35
+ "Dataset List": string;
36
+ };
37
+ };
38
+ export declare const tools: Tool<any, any>[];
39
+ export declare const prompts: InputPrompt<any, any>[];
40
+ export { clearCache } from "../sdk/noaa.js";
41
+ //# sourceMappingURL=noaa.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noaa.d.ts","sourceRoot":"","sources":["../../src/modules/noaa.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAKjD,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,WAAW,6BAA6B,CAAC;AACtD,eAAO,MAAM,WAAW,yGAAyG,CAAC;AAClI,eAAO,MAAM,IAAI;;;CAAgF,CAAC;AAClG,eAAO,MAAM,QAAQ,iFAA4E,CAAC;AAClG,eAAO,MAAM,IAAI,qHAAqH,CAAC;AAEvI,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;CAuBrB,CAAC;AAIF,eAAO,MAAM,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EA8EjC,CAAC;AAEF,eAAO,MAAM,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,EAiB1C,CAAC;AAIF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,135 @@
1
+ /**
2
+ * NOAA Climate MCP module — weather, temperature, precipitation tools.
3
+ */
4
+ import { z } from "zod";
5
+ import { listDatasets, searchStations, getClimateData, searchLocations } from "../sdk/noaa.js";
6
+ // ─── Metadata ────────────────────────────────────────────────────────
7
+ export const name = "noaa";
8
+ export const displayName = "NOAA Climate Data Online";
9
+ export const description = "Weather observations, temperature, precipitation, climate normals from NOAA stations across the U.S.";
10
+ export const auth = { envVar: "NOAA_API_KEY", signup: "https://www.ncei.noaa.gov/cdo-web/token" };
11
+ export const workflow = "noaa_stations to find a station → noaa_climate_data to get observations";
12
+ export const tips = "Datasets: GHCND (daily), GSOM (monthly summary), GSOY (annual summary). Location IDs: FIPS:36 (NY), FIPS:06 (CA)";
13
+ export const reference = {
14
+ datasets: {
15
+ GHCND: "Global Historical Climatology Network - Daily (temp, precipitation, snow)",
16
+ GSOM: "Global Summary of the Month",
17
+ GSOY: "Global Summary of the Year",
18
+ NORMAL_DLY: "Climate Normals Daily (1991–2020 averages)",
19
+ NORMAL_MLY: "Climate Normals Monthly",
20
+ NORMAL_ANN: "Climate Normals Annual",
21
+ },
22
+ commonDataTypes: {
23
+ TMAX: "Maximum temperature (°F × 10)",
24
+ TMIN: "Minimum temperature (°F × 10)",
25
+ TAVG: "Average temperature (°F × 10)",
26
+ PRCP: "Precipitation (inches × 100)",
27
+ SNOW: "Snowfall (inches × 10)",
28
+ SNWD: "Snow depth (inches)",
29
+ AWND: "Average wind speed (mph × 10)",
30
+ },
31
+ docs: {
32
+ "API Docs": "https://www.ncei.noaa.gov/cdo-web/webservices/v2",
33
+ "Get Key": "https://www.ncei.noaa.gov/cdo-web/token",
34
+ "Dataset List": "https://www.ncei.noaa.gov/cdo-web/datasets",
35
+ },
36
+ };
37
+ // ─── Tools ───────────────────────────────────────────────────────────
38
+ export const tools = [
39
+ {
40
+ name: "noaa_datasets",
41
+ description: "List available NOAA climate datasets (GHCND daily, GSOM monthly, GSOY annual, normals, etc.)",
42
+ annotations: { title: "NOAA: List Datasets", readOnlyHint: true },
43
+ parameters: z.object({}),
44
+ execute: async () => {
45
+ const datasets = await listDatasets();
46
+ return JSON.stringify({
47
+ summary: `${datasets.length} NOAA climate datasets available`,
48
+ datasets,
49
+ });
50
+ },
51
+ },
52
+ {
53
+ name: "noaa_stations",
54
+ description: "Search for NOAA weather stations by location or dataset.\nUse location IDs like FIPS:36 (New York), FIPS:06 (California), CITY:US360019 (NYC).",
55
+ annotations: { title: "NOAA: Search Stations", readOnlyHint: true },
56
+ parameters: z.object({
57
+ dataset_id: z.string().optional().describe("e.g. 'GHCND', 'GSOM'"),
58
+ location_id: z.string().optional().describe("e.g. 'FIPS:36' (NY), 'FIPS:06' (CA)"),
59
+ limit: z.number().int().max(1000).optional().describe("Max results (default 25)"),
60
+ }),
61
+ execute: async ({ dataset_id, location_id, limit }) => {
62
+ const stations = await searchStations({
63
+ datasetId: dataset_id, locationId: location_id, limit,
64
+ });
65
+ return JSON.stringify({
66
+ summary: `${stations.length} stations found`,
67
+ stations: stations.slice(0, 50),
68
+ });
69
+ },
70
+ },
71
+ {
72
+ name: "noaa_climate_data",
73
+ description: "Get climate observations (temperature, precipitation, snow, wind) from NOAA.\nRequires dataset ID + date range. Optionally filter by station or location.",
74
+ annotations: { title: "NOAA: Climate Data", readOnlyHint: true },
75
+ parameters: z.object({
76
+ dataset_id: z.string().describe("Dataset: 'GHCND' (daily), 'GSOM' (monthly), 'GSOY' (annual)"),
77
+ start_date: z.string().describe("Start date YYYY-MM-DD"),
78
+ end_date: z.string().describe("End date YYYY-MM-DD"),
79
+ station_id: z.string().optional().describe("Station ID, e.g. 'GHCND:USW00094728' (Central Park, NYC)"),
80
+ location_id: z.string().optional().describe("Location ID, e.g. 'FIPS:36' (NY state)"),
81
+ datatype_id: z.string().optional().describe("Data type: TMAX, TMIN, TAVG, PRCP, SNOW, SNWD, AWND"),
82
+ limit: z.number().int().max(1000).optional().describe("Max observations (default 1000)"),
83
+ }),
84
+ execute: async ({ dataset_id, start_date, end_date, station_id, location_id, datatype_id, limit }) => {
85
+ const result = await getClimateData({
86
+ datasetId: dataset_id, startDate: start_date, endDate: end_date,
87
+ stationId: station_id, locationId: location_id, datatypeId: datatype_id, limit,
88
+ });
89
+ return JSON.stringify({
90
+ summary: `${result.data.length} of ${result.count} observations, ${start_date} to ${end_date}`,
91
+ total: result.count,
92
+ data: result.data.slice(0, 200),
93
+ });
94
+ },
95
+ },
96
+ {
97
+ name: "noaa_locations",
98
+ description: "Search NOAA location IDs (states, cities, countries) for use with other NOAA tools.",
99
+ annotations: { title: "NOAA: Search Locations", readOnlyHint: true },
100
+ parameters: z.object({
101
+ category: z.string().optional().describe("Category: 'ST' (states), 'CITY', 'CNTRY' (countries), 'CLIM_REG'"),
102
+ dataset_id: z.string().optional().describe("Filter by dataset, e.g. 'GHCND'"),
103
+ limit: z.number().int().max(1000).optional().describe("Max results (default 50)"),
104
+ }),
105
+ execute: async ({ category, dataset_id, limit }) => {
106
+ const locations = await searchLocations({ categoryId: category, datasetId: dataset_id, limit });
107
+ return JSON.stringify({
108
+ summary: `${locations.length} locations found`,
109
+ locations,
110
+ });
111
+ },
112
+ },
113
+ ];
114
+ export const prompts = [
115
+ {
116
+ name: "climate_trends",
117
+ description: "Temperature and precipitation trends for a U.S. location over time.",
118
+ arguments: [
119
+ { name: "location", description: "State or city name", required: false },
120
+ ],
121
+ load: async (args) => {
122
+ const location = args?.location;
123
+ return (`Analyze climate trends${location ? ` for ${location}` : " nationally"}:\n\n` +
124
+ "1. Use noaa_locations to find the location ID (category 'ST' for states)\n" +
125
+ "2. Use noaa_stations to find stations in that location with dataset GSOM (monthly summary)\n" +
126
+ "3. Use noaa_climate_data with GSOM dataset for TAVG (temperature) and PRCP (precipitation) for the last 10 years\n" +
127
+ "4. Compare recent years to historical averages\n\n" +
128
+ "Present temperature and precipitation trends. Note: NOAA values are scaled (temps ×10, precip ×100).\n" +
129
+ "If energy data would add context, use eia_state_energy for the same state.");
130
+ },
131
+ },
132
+ ];
133
+ // ─── Re-export cache control ─────────────────────────────────────────
134
+ export { clearCache } from "../sdk/noaa.js";
135
+ //# sourceMappingURL=noaa.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"noaa.js","sourceRoot":"","sources":["../../src/modules/noaa.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * NREL MCP module — alt fuel stations, utility rates, solar resource data.
3
+ */
4
+ import type { Tool } from "fastmcp";
5
+ export declare const name = "nrel";
6
+ export declare const displayName = "NREL (Clean Energy)";
7
+ export declare const description = "EV charging stations, alt fuel stations, electricity rates, solar resource data from the National Renewable Energy Laboratory";
8
+ export declare const auth: {
9
+ envVar: string;
10
+ signup: string;
11
+ };
12
+ export declare const workflow = "nrel_fuel_stations to find EV chargers/alt fuel \u2192 nrel_utility_rates for electricity costs \u2192 nrel_solar for solar potential";
13
+ export declare const tips = "Fuel types: ELEC (EV), E85 (ethanol), CNG (natural gas), LPG (propane), BD (biodiesel), HY (hydrogen). Status: E=open, P=planned, T=temporarily unavailable.";
14
+ export declare const reference: {
15
+ fuelTypes: Record<string, string>;
16
+ docs: {
17
+ "NREL Developer": string;
18
+ "Alt Fuel Stations API": string;
19
+ "Utility Rates API": string;
20
+ "Solar Resource API": string;
21
+ };
22
+ };
23
+ export declare const tools: Tool<any, any>[];
24
+ export { clearCache } from "../sdk/nrel.js";
25
+ //# sourceMappingURL=nrel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nrel.d.ts","sourceRoot":"","sources":["../../src/modules/nrel.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAGpC,eAAO,MAAM,IAAI,SAAS,CAAC;AAC3B,eAAO,MAAM,WAAW,wBAAwB,CAAC;AACjD,eAAO,MAAM,WAAW,kIAAkI,CAAC;AAC3J,eAAO,MAAM,IAAI;;;CAAyE,CAAC;AAC3F,eAAO,MAAM,QAAQ,0IAAgI,CAAC;AACtJ,eAAO,MAAM,IAAI,iKAAiK,CAAC;AAEnL,eAAO,MAAM,SAAS;;;;;;;;CAQrB,CAAC;AAEF,eAAO,MAAM,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAkEjC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * NREL MCP module — alt fuel stations, utility rates, solar resource data.
3
+ */
4
+ import { z } from "zod";
5
+ import { searchAltFuelStations, getUtilityRates, getSolarResource, FUEL_TYPES } from "../sdk/nrel.js";
6
+ export const name = "nrel";
7
+ export const displayName = "NREL (Clean Energy)";
8
+ export const description = "EV charging stations, alt fuel stations, electricity rates, solar resource data from the National Renewable Energy Laboratory";
9
+ export const auth = { envVar: "DATA_GOV_API_KEY", signup: "https://api.data.gov/signup/" };
10
+ export const workflow = "nrel_fuel_stations to find EV chargers/alt fuel → nrel_utility_rates for electricity costs → nrel_solar for solar potential";
11
+ export const tips = "Fuel types: ELEC (EV), E85 (ethanol), CNG (natural gas), LPG (propane), BD (biodiesel), HY (hydrogen). Status: E=open, P=planned, T=temporarily unavailable.";
12
+ export const reference = {
13
+ fuelTypes: FUEL_TYPES,
14
+ docs: {
15
+ "NREL Developer": "https://developer.nrel.gov/",
16
+ "Alt Fuel Stations API": "https://developer.nrel.gov/docs/transportation/alt-fuel-stations-v1/",
17
+ "Utility Rates API": "https://developer.nrel.gov/docs/electricity/utility-rates-v3/",
18
+ "Solar Resource API": "https://developer.nrel.gov/docs/solar/solar-resource-v1/",
19
+ },
20
+ };
21
+ export const tools = [
22
+ {
23
+ name: "nrel_fuel_stations",
24
+ description: "Search for EV charging stations, hydrogen stations, biodiesel, CNG, and other alternative fuel stations.\n" +
25
+ "Covers all U.S. alt fuel infrastructure. Filter by state, zip, fuel type, radius.\n\n" +
26
+ "Fuel types: 'ELEC' (EV), 'HY' (hydrogen), 'CNG' (natural gas), 'LPG' (propane), 'BD' (biodiesel), 'E85' (ethanol)",
27
+ annotations: { title: "NREL: Alt Fuel Stations", readOnlyHint: true },
28
+ parameters: z.object({
29
+ state: z.string().optional().describe("Two-letter state code: 'CA', 'TX', 'NY'"),
30
+ zip: z.string().optional().describe("ZIP code to search near"),
31
+ fuel_type: z.string().optional().describe("'ELEC' (EV charging), 'HY' (hydrogen), 'CNG', 'LPG', 'BD', 'E85'"),
32
+ radius: z.number().optional().describe("Search radius in miles from zip (default 25)"),
33
+ limit: z.number().int().max(200).optional().describe("Max results (default 20)"),
34
+ status: z.string().optional().describe("'E' (open), 'P' (planned), 'T' (temp unavailable)"),
35
+ }),
36
+ execute: async ({ state, zip, fuel_type, radius, limit, status }) => {
37
+ const data = await searchAltFuelStations({ state, zip, fuel_type, limit, radius, status });
38
+ if (!data.fuel_stations?.length)
39
+ return `No ${fuel_type || "alt fuel"} stations found${state ? ` in ${state}` : ""}.`;
40
+ return JSON.stringify({
41
+ summary: `Alt fuel stations: ${data.total_results} total${state ? ` in ${state}` : ""}${fuel_type ? ` (${fuel_type})` : ""}, showing ${data.fuel_stations.length}`,
42
+ total: data.total_results,
43
+ stations: data.fuel_stations.slice(0, 50).map((s) => ({
44
+ name: s.station_name, address: s.street_address, city: s.city, state: s.state, zip: s.zip,
45
+ fuelType: s.fuel_type_code, network: s.ev_network, status: s.status_code,
46
+ evLevel2: s.ev_level2_evse_num, evDCFast: s.ev_dc_fast_num, accessCode: s.access_code,
47
+ })),
48
+ });
49
+ },
50
+ },
51
+ {
52
+ name: "nrel_utility_rates",
53
+ description: "Get residential, commercial, and industrial electricity rates for any U.S. location.\nProvide latitude/longitude to get the local utility and their rates ($/kWh).",
54
+ annotations: { title: "NREL: Electricity Rates", readOnlyHint: true },
55
+ parameters: z.object({
56
+ lat: z.number().describe("Latitude (e.g. 40.7128 for NYC, 34.0522 for LA)"),
57
+ lon: z.number().describe("Longitude (e.g. -74.0060 for NYC, -118.2437 for LA)"),
58
+ }),
59
+ execute: async ({ lat, lon }) => {
60
+ const data = await getUtilityRates(lat, lon);
61
+ return JSON.stringify({
62
+ summary: `Utility rates for ${data.outputs.utility_name}: residential $${data.outputs.residential}/kWh, commercial $${data.outputs.commercial}/kWh, industrial $${data.outputs.industrial}/kWh`,
63
+ ...data.outputs,
64
+ });
65
+ },
66
+ },
67
+ {
68
+ name: "nrel_solar",
69
+ description: "Get solar energy resource data for any U.S. location — monthly and annual solar irradiance.\nShows potential for solar panels at a given location.",
70
+ annotations: { title: "NREL: Solar Resource", readOnlyHint: true },
71
+ parameters: z.object({
72
+ lat: z.number().describe("Latitude"),
73
+ lon: z.number().describe("Longitude"),
74
+ }),
75
+ execute: async ({ lat, lon }) => {
76
+ const data = await getSolarResource(lat, lon);
77
+ return JSON.stringify({
78
+ summary: `Solar resource at ${lat}, ${lon}: avg GHI ${data.outputs.avg_ghi?.annual} kWh/m²/day, avg DNI ${data.outputs.avg_dni?.annual} kWh/m²/day`,
79
+ globalHorizontalIrradiance: data.outputs.avg_ghi,
80
+ directNormalIrradiance: data.outputs.avg_dni,
81
+ tiltedAtLatitude: data.outputs.avg_lat_tilt,
82
+ });
83
+ },
84
+ },
85
+ ];
86
+ export { clearCache } from "../sdk/nrel.js";
87
+ //# sourceMappingURL=nrel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nrel.js","sourceRoot":"","sources":["../../src/modules/nrel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Regulations.gov MCP module — search regulatory documents, public comments, and dockets.
3
+ */
4
+ import type { Tool } from "fastmcp";
5
+ export declare const name = "regulations";
6
+ export declare const displayName = "Regulations.gov";
7
+ export declare const description = "Federal rulemaking: proposed rules, final rules, public comments, and regulatory dockets from all federal agencies";
8
+ export declare const auth: {
9
+ envVar: string;
10
+ signup: string;
11
+ };
12
+ export declare const workflow = "regulations_search_documents to find rules \u2192 regulations_document_detail for full info \u2192 regulations_search_comments for public feedback";
13
+ export declare const tips = "Document types: 'Proposed Rule', 'Rule', 'Supporting & Related Material', 'Other'. Sort by '-postedDate' for newest first. Agency IDs: EPA, FDA, DOL, HHS, DOT, etc.";
14
+ export declare const reference: {
15
+ documentTypes: Record<string, string>;
16
+ docketTypes: Record<string, string>;
17
+ docs: {
18
+ "API Docs": string;
19
+ "Regulations.gov": string;
20
+ };
21
+ };
22
+ export declare const tools: Tool<any, any>[];
23
+ export { clearCache } from "../sdk/regulations.js";
24
+ //# sourceMappingURL=regulations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"regulations.d.ts","sourceRoot":"","sources":["../../src/modules/regulations.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAYpC,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAClC,eAAO,MAAM,WAAW,oBAAoB,CAAC;AAC7C,eAAO,MAAM,WAAW,uHAAuH,CAAC;AAChJ,eAAO,MAAM,IAAI;;;CAAyE,CAAC;AAC3F,eAAO,MAAM,QAAQ,uJAA6I,CAAC;AACnK,eAAO,MAAM,IAAI,yKAAyK,CAAC;AAE3L,eAAO,MAAM,SAAS;mBAMf,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;iBAItB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;;;;;CAK5B,CAAC;AAIF,eAAO,MAAM,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAkJjC,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC"}