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.
- package/README.md +211 -0
- package/dist/client.d.ts +54 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +388 -0
- package/dist/client.js.map +1 -0
- package/dist/instructions.d.ts +8 -0
- package/dist/instructions.d.ts.map +1 -0
- package/dist/instructions.js +549 -0
- package/dist/instructions.js.map +1 -0
- package/dist/modules/bea.d.ts +28 -0
- package/dist/modules/bea.d.ts.map +1 -0
- package/dist/modules/bea.js +158 -0
- package/dist/modules/bea.js.map +1 -0
- package/dist/modules/bls.d.ts +29 -0
- package/dist/modules/bls.d.ts.map +1 -0
- package/dist/modules/bls.js +244 -0
- package/dist/modules/bls.js.map +1 -0
- package/dist/modules/bts.d.ts +26 -0
- package/dist/modules/bts.d.ts.map +1 -0
- package/dist/modules/bts.js +112 -0
- package/dist/modules/bts.js.map +1 -0
- package/dist/modules/cdc.d.ts +26 -0
- package/dist/modules/cdc.d.ts.map +1 -0
- package/dist/modules/cdc.js +310 -0
- package/dist/modules/cdc.js.map +1 -0
- package/dist/modules/census.d.ts +23 -0
- package/dist/modules/census.d.ts.map +1 -0
- package/dist/modules/census.js +141 -0
- package/dist/modules/census.js.map +1 -0
- package/dist/modules/cfpb.d.ts +20 -0
- package/dist/modules/cfpb.d.ts.map +1 -0
- package/dist/modules/cfpb.js +135 -0
- package/dist/modules/cfpb.js.map +1 -0
- package/dist/modules/clinical-trials.d.ts +22 -0
- package/dist/modules/clinical-trials.d.ts.map +1 -0
- package/dist/modules/clinical-trials.js +171 -0
- package/dist/modules/clinical-trials.js.map +1 -0
- package/dist/modules/cms.d.ts +21 -0
- package/dist/modules/cms.d.ts.map +1 -0
- package/dist/modules/cms.js +135 -0
- package/dist/modules/cms.js.map +1 -0
- package/dist/modules/college-scorecard.d.ts +39 -0
- package/dist/modules/college-scorecard.d.ts.map +1 -0
- package/dist/modules/college-scorecard.js +192 -0
- package/dist/modules/college-scorecard.js.map +1 -0
- package/dist/modules/congress.d.ts +28 -0
- package/dist/modules/congress.d.ts.map +1 -0
- package/dist/modules/congress.js +883 -0
- package/dist/modules/congress.js.map +1 -0
- package/dist/modules/dol.d.ts +27 -0
- package/dist/modules/dol.d.ts.map +1 -0
- package/dist/modules/dol.js +209 -0
- package/dist/modules/dol.js.map +1 -0
- package/dist/modules/eia.d.ts +33 -0
- package/dist/modules/eia.d.ts.map +1 -0
- package/dist/modules/eia.js +227 -0
- package/dist/modules/eia.js.map +1 -0
- package/dist/modules/epa.d.ts +21 -0
- package/dist/modules/epa.d.ts.map +1 -0
- package/dist/modules/epa.js +91 -0
- package/dist/modules/epa.js.map +1 -0
- package/dist/modules/fbi.d.ts +28 -0
- package/dist/modules/fbi.d.ts.map +1 -0
- package/dist/modules/fbi.js +143 -0
- package/dist/modules/fbi.js.map +1 -0
- package/dist/modules/fda.d.ts +35 -0
- package/dist/modules/fda.d.ts.map +1 -0
- package/dist/modules/fda.js +262 -0
- package/dist/modules/fda.js.map +1 -0
- package/dist/modules/fdic.d.ts +21 -0
- package/dist/modules/fdic.d.ts.map +1 -0
- package/dist/modules/fdic.js +186 -0
- package/dist/modules/fdic.js.map +1 -0
- package/dist/modules/fec.d.ts +29 -0
- package/dist/modules/fec.d.ts.map +1 -0
- package/dist/modules/fec.js +282 -0
- package/dist/modules/fec.js.map +1 -0
- package/dist/modules/federal-register.d.ts +24 -0
- package/dist/modules/federal-register.d.ts.map +1 -0
- package/dist/modules/federal-register.js +184 -0
- package/dist/modules/federal-register.js.map +1 -0
- package/dist/modules/fema.d.ts +20 -0
- package/dist/modules/fema.d.ts.map +1 -0
- package/dist/modules/fema.js +156 -0
- package/dist/modules/fema.js.map +1 -0
- package/dist/modules/fred.d.ts +40 -0
- package/dist/modules/fred.d.ts.map +1 -0
- package/dist/modules/fred.js +143 -0
- package/dist/modules/fred.js.map +1 -0
- package/dist/modules/govinfo.d.ts +24 -0
- package/dist/modules/govinfo.d.ts.map +1 -0
- package/dist/modules/govinfo.js +147 -0
- package/dist/modules/govinfo.js.map +1 -0
- package/dist/modules/hud.d.ts +17 -0
- package/dist/modules/hud.d.ts.map +1 -0
- package/dist/modules/hud.js +170 -0
- package/dist/modules/hud.js.map +1 -0
- package/dist/modules/naep.d.ts +27 -0
- package/dist/modules/naep.d.ts.map +1 -0
- package/dist/modules/naep.js +210 -0
- package/dist/modules/naep.js.map +1 -0
- package/dist/modules/nhtsa.d.ts +13 -0
- package/dist/modules/nhtsa.d.ts.map +1 -0
- package/dist/modules/nhtsa.js +196 -0
- package/dist/modules/nhtsa.js.map +1 -0
- package/dist/modules/noaa.d.ts +41 -0
- package/dist/modules/noaa.d.ts.map +1 -0
- package/dist/modules/noaa.js +135 -0
- package/dist/modules/noaa.js.map +1 -0
- package/dist/modules/nrel.d.ts +25 -0
- package/dist/modules/nrel.d.ts.map +1 -0
- package/dist/modules/nrel.js +87 -0
- package/dist/modules/nrel.js.map +1 -0
- package/dist/modules/regulations.d.ts +24 -0
- package/dist/modules/regulations.d.ts.map +1 -0
- package/dist/modules/regulations.js +173 -0
- package/dist/modules/regulations.js.map +1 -0
- package/dist/modules/sec.d.ts +25 -0
- package/dist/modules/sec.d.ts.map +1 -0
- package/dist/modules/sec.js +192 -0
- package/dist/modules/sec.js.map +1 -0
- package/dist/modules/senate-lobbying.d.ts +21 -0
- package/dist/modules/senate-lobbying.d.ts.map +1 -0
- package/dist/modules/senate-lobbying.js +189 -0
- package/dist/modules/senate-lobbying.js.map +1 -0
- package/dist/modules/treasury.d.ts +23 -0
- package/dist/modules/treasury.d.ts.map +1 -0
- package/dist/modules/treasury.js +234 -0
- package/dist/modules/treasury.js.map +1 -0
- package/dist/modules/usaspending.d.ts +19 -0
- package/dist/modules/usaspending.d.ts.map +1 -0
- package/dist/modules/usaspending.js +204 -0
- package/dist/modules/usaspending.js.map +1 -0
- package/dist/modules/usda-fooddata.d.ts +24 -0
- package/dist/modules/usda-fooddata.d.ts.map +1 -0
- package/dist/modules/usda-fooddata.js +118 -0
- package/dist/modules/usda-fooddata.js.map +1 -0
- package/dist/modules/usda-nass.d.ts +46 -0
- package/dist/modules/usda-nass.d.ts.map +1 -0
- package/dist/modules/usda-nass.js +151 -0
- package/dist/modules/usda-nass.js.map +1 -0
- package/dist/modules/usgs.d.ts +21 -0
- package/dist/modules/usgs.d.ts.map +1 -0
- package/dist/modules/usgs.js +203 -0
- package/dist/modules/usgs.js.map +1 -0
- package/dist/modules/uspto.d.ts +13 -0
- package/dist/modules/uspto.d.ts.map +1 -0
- package/dist/modules/uspto.js +157 -0
- package/dist/modules/uspto.js.map +1 -0
- package/dist/modules/world-bank.d.ts +21 -0
- package/dist/modules/world-bank.d.ts.map +1 -0
- package/dist/modules/world-bank.js +130 -0
- package/dist/modules/world-bank.js.map +1 -0
- package/dist/prompts.d.ts +12 -0
- package/dist/prompts.d.ts.map +1 -0
- package/dist/prompts.js +858 -0
- package/dist/prompts.js.map +1 -0
- package/dist/sdk/bea.d.ts +111 -0
- package/dist/sdk/bea.d.ts.map +1 -0
- package/dist/sdk/bea.js +242 -0
- package/dist/sdk/bea.js.map +1 -0
- package/dist/sdk/bls.d.ts +65 -0
- package/dist/sdk/bls.d.ts.map +1 -0
- package/dist/sdk/bls.js +203 -0
- package/dist/sdk/bls.js.map +1 -0
- package/dist/sdk/bts.d.ts +108 -0
- package/dist/sdk/bts.d.ts.map +1 -0
- package/dist/sdk/bts.js +121 -0
- package/dist/sdk/bts.js.map +1 -0
- package/dist/sdk/cdc.d.ts +105 -0
- package/dist/sdk/cdc.d.ts.map +1 -0
- package/dist/sdk/cdc.js +222 -0
- package/dist/sdk/cdc.js.map +1 -0
- package/dist/sdk/census.d.ts +47 -0
- package/dist/sdk/census.d.ts.map +1 -0
- package/dist/sdk/census.js +99 -0
- package/dist/sdk/census.js.map +1 -0
- package/dist/sdk/cfpb.d.ts +148 -0
- package/dist/sdk/cfpb.d.ts.map +1 -0
- package/dist/sdk/cfpb.js +153 -0
- package/dist/sdk/cfpb.js.map +1 -0
- package/dist/sdk/clinical-trials.d.ts +214 -0
- package/dist/sdk/clinical-trials.d.ts.map +1 -0
- package/dist/sdk/clinical-trials.js +134 -0
- package/dist/sdk/clinical-trials.js.map +1 -0
- package/dist/sdk/cms.d.ts +81 -0
- package/dist/sdk/cms.d.ts.map +1 -0
- package/dist/sdk/cms.js +227 -0
- package/dist/sdk/cms.js.map +1 -0
- package/dist/sdk/college-scorecard.d.ts +63 -0
- package/dist/sdk/college-scorecard.d.ts.map +1 -0
- package/dist/sdk/college-scorecard.js +131 -0
- package/dist/sdk/college-scorecard.js.map +1 -0
- package/dist/sdk/congress.d.ts +575 -0
- package/dist/sdk/congress.d.ts.map +1 -0
- package/dist/sdk/congress.js +659 -0
- package/dist/sdk/congress.js.map +1 -0
- package/dist/sdk/dol.d.ts +299 -0
- package/dist/sdk/dol.d.ts.map +1 -0
- package/dist/sdk/dol.js +252 -0
- package/dist/sdk/dol.js.map +1 -0
- package/dist/sdk/eia.d.ts +91 -0
- package/dist/sdk/eia.d.ts.map +1 -0
- package/dist/sdk/eia.js +156 -0
- package/dist/sdk/eia.js.map +1 -0
- package/dist/sdk/epa.d.ts +128 -0
- package/dist/sdk/epa.d.ts.map +1 -0
- package/dist/sdk/epa.js +120 -0
- package/dist/sdk/epa.js.map +1 -0
- package/dist/sdk/fbi.d.ts +48 -0
- package/dist/sdk/fbi.d.ts.map +1 -0
- package/dist/sdk/fbi.js +69 -0
- package/dist/sdk/fbi.js.map +1 -0
- package/dist/sdk/fda.d.ts +356 -0
- package/dist/sdk/fda.d.ts.map +1 -0
- package/dist/sdk/fda.js +162 -0
- package/dist/sdk/fda.js.map +1 -0
- package/dist/sdk/fdic.d.ts +227 -0
- package/dist/sdk/fdic.d.ts.map +1 -0
- package/dist/sdk/fdic.js +172 -0
- package/dist/sdk/fdic.js.map +1 -0
- package/dist/sdk/fec.d.ts +142 -0
- package/dist/sdk/fec.d.ts.map +1 -0
- package/dist/sdk/fec.js +92 -0
- package/dist/sdk/fec.js.map +1 -0
- package/dist/sdk/federal-register.d.ts +88 -0
- package/dist/sdk/federal-register.d.ts.map +1 -0
- package/dist/sdk/federal-register.js +100 -0
- package/dist/sdk/federal-register.js.map +1 -0
- package/dist/sdk/fema.d.ts +137 -0
- package/dist/sdk/fema.d.ts.map +1 -0
- package/dist/sdk/fema.js +197 -0
- package/dist/sdk/fema.js.map +1 -0
- package/dist/sdk/fred.d.ts +72 -0
- package/dist/sdk/fred.d.ts.map +1 -0
- package/dist/sdk/fred.js +59 -0
- package/dist/sdk/fred.js.map +1 -0
- package/dist/sdk/govinfo.d.ts +64 -0
- package/dist/sdk/govinfo.d.ts.map +1 -0
- package/dist/sdk/govinfo.js +187 -0
- package/dist/sdk/govinfo.js.map +1 -0
- package/dist/sdk/hud.d.ts +87 -0
- package/dist/sdk/hud.d.ts.map +1 -0
- package/dist/sdk/hud.js +91 -0
- package/dist/sdk/hud.js.map +1 -0
- package/dist/sdk/index.d.ts +51 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +51 -0
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/naep.d.ts +93 -0
- package/dist/sdk/naep.d.ts.map +1 -0
- package/dist/sdk/naep.js +163 -0
- package/dist/sdk/naep.js.map +1 -0
- package/dist/sdk/nhtsa.d.ts +169 -0
- package/dist/sdk/nhtsa.d.ts.map +1 -0
- package/dist/sdk/nhtsa.js +102 -0
- package/dist/sdk/nhtsa.js.map +1 -0
- package/dist/sdk/noaa.d.ts +72 -0
- package/dist/sdk/noaa.d.ts.map +1 -0
- package/dist/sdk/noaa.js +64 -0
- package/dist/sdk/noaa.js.map +1 -0
- package/dist/sdk/nrel.d.ts +145 -0
- package/dist/sdk/nrel.d.ts.map +1 -0
- package/dist/sdk/nrel.js +93 -0
- package/dist/sdk/nrel.js.map +1 -0
- package/dist/sdk/regulations.d.ts +146 -0
- package/dist/sdk/regulations.d.ts.map +1 -0
- package/dist/sdk/regulations.js +103 -0
- package/dist/sdk/regulations.js.map +1 -0
- package/dist/sdk/sec.d.ts +114 -0
- package/dist/sdk/sec.d.ts.map +1 -0
- package/dist/sdk/sec.js +151 -0
- package/dist/sdk/sec.js.map +1 -0
- package/dist/sdk/senate-lobbying.d.ts +147 -0
- package/dist/sdk/senate-lobbying.d.ts.map +1 -0
- package/dist/sdk/senate-lobbying.js +125 -0
- package/dist/sdk/senate-lobbying.js.map +1 -0
- package/dist/sdk/treasury.d.ts +59 -0
- package/dist/sdk/treasury.d.ts.map +1 -0
- package/dist/sdk/treasury.js +1397 -0
- package/dist/sdk/treasury.js.map +1 -0
- package/dist/sdk/usaspending.d.ts +126 -0
- package/dist/sdk/usaspending.d.ts.map +1 -0
- package/dist/sdk/usaspending.js +270 -0
- package/dist/sdk/usaspending.js.map +1 -0
- package/dist/sdk/usda-fooddata.d.ts +112 -0
- package/dist/sdk/usda-fooddata.d.ts.map +1 -0
- package/dist/sdk/usda-fooddata.js +80 -0
- package/dist/sdk/usda-fooddata.js.map +1 -0
- package/dist/sdk/usda-nass.d.ts +75 -0
- package/dist/sdk/usda-nass.d.ts.map +1 -0
- package/dist/sdk/usda-nass.js +83 -0
- package/dist/sdk/usda-nass.js.map +1 -0
- package/dist/sdk/usgs.d.ts +221 -0
- package/dist/sdk/usgs.d.ts.map +1 -0
- package/dist/sdk/usgs.js +182 -0
- package/dist/sdk/usgs.js.map +1 -0
- package/dist/sdk/uspto.d.ts +109 -0
- package/dist/sdk/uspto.d.ts.map +1 -0
- package/dist/sdk/uspto.js +286 -0
- package/dist/sdk/uspto.js.map +1 -0
- package/dist/sdk/world-bank.d.ts +78 -0
- package/dist/sdk/world-bank.d.ts.map +1 -0
- package/dist/sdk/world-bank.js +72 -0
- package/dist/sdk/world-bank.js.map +1 -0
- package/dist/server.d.ts +22 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +196 -0
- package/dist/server.js.map +1 -0
- package/package.json +113 -0
package/dist/sdk/cms.js
ADDED
|
@@ -0,0 +1,227 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS SDK — typed API client for Centers for Medicare & Medicaid Services provider data.
|
|
3
|
+
*
|
|
4
|
+
* Standalone — no MCP server required. Usage:
|
|
5
|
+
*
|
|
6
|
+
* import { searchDatasets, queryDataset } from "us-gov-open-data/sdk/cms";
|
|
7
|
+
*
|
|
8
|
+
* No API key required.
|
|
9
|
+
* Docs: https://data.cms.gov/provider-data/
|
|
10
|
+
*/
|
|
11
|
+
import { createClient } from "../client.js";
|
|
12
|
+
// ─── Client ──────────────────────────────────────────────────────────
|
|
13
|
+
const api = createClient({
|
|
14
|
+
baseUrl: "https://data.cms.gov/provider-data/api/1",
|
|
15
|
+
name: "cms",
|
|
16
|
+
rateLimit: { perSecond: 5, burst: 10 },
|
|
17
|
+
cacheTtlMs: 24 * 60 * 60 * 1000, // 24 hours — provider data updates monthly/quarterly
|
|
18
|
+
});
|
|
19
|
+
// ─── Dataset Catalog ─────────────────────────────────────────────────
|
|
20
|
+
// Key CMS Provider Data datasets with their identifiers (short IDs).
|
|
21
|
+
// Use searchDatasets to discover more.
|
|
22
|
+
export const DATASETS = {
|
|
23
|
+
hospital_info: {
|
|
24
|
+
id: "xubh-q36u",
|
|
25
|
+
name: "Hospital General Information",
|
|
26
|
+
description: "All Medicare-certified hospitals: name, address, phone, type, ownership, star ratings, emergency services",
|
|
27
|
+
theme: "Hospitals",
|
|
28
|
+
},
|
|
29
|
+
nursing_home_info: {
|
|
30
|
+
id: "4pq5-n9py",
|
|
31
|
+
name: "Nursing Home Provider Information",
|
|
32
|
+
description: "All nursing homes: beds, quality ratings, staffing, penalties, five-star ratings",
|
|
33
|
+
theme: "Nursing homes",
|
|
34
|
+
},
|
|
35
|
+
home_health_info: {
|
|
36
|
+
id: "6jpm-sxkc",
|
|
37
|
+
name: "Home Health Agency Information",
|
|
38
|
+
description: "Medicare-registered home health agencies: addresses, quality ratings",
|
|
39
|
+
theme: "Home health services",
|
|
40
|
+
},
|
|
41
|
+
hospice_info: {
|
|
42
|
+
id: "yc9t-dgbk",
|
|
43
|
+
name: "Hospice General Information",
|
|
44
|
+
description: "Medicare-certified hospice providers: addresses, phone numbers",
|
|
45
|
+
theme: "Hospice care",
|
|
46
|
+
},
|
|
47
|
+
dialysis_info: {
|
|
48
|
+
id: "23ew-n7w9",
|
|
49
|
+
name: "Dialysis Facility Information",
|
|
50
|
+
description: "Dialysis facilities: addresses, services, quality of care measures",
|
|
51
|
+
theme: "Dialysis facilities",
|
|
52
|
+
},
|
|
53
|
+
hospital_mortality: {
|
|
54
|
+
id: "ynj2-r877",
|
|
55
|
+
name: "Complications and Deaths - Hospital",
|
|
56
|
+
description: "Hospital-level mortality rates, hip/knee complications, patient safety indicators",
|
|
57
|
+
theme: "Hospitals",
|
|
58
|
+
},
|
|
59
|
+
hospital_readmissions: {
|
|
60
|
+
id: "9n3s-kdb3",
|
|
61
|
+
name: "Hospital Readmissions Reduction Program",
|
|
62
|
+
description: "Excess readmission ratios and payment reductions for hospitals",
|
|
63
|
+
theme: "Hospitals",
|
|
64
|
+
},
|
|
65
|
+
hospital_infections: {
|
|
66
|
+
id: "77hc-ibv8",
|
|
67
|
+
name: "Healthcare Associated Infections - Hospital",
|
|
68
|
+
description: "HAI measures: CLABSI, CAUTI, SSI, MRSA, C.difficile rates by hospital",
|
|
69
|
+
theme: "Hospitals",
|
|
70
|
+
},
|
|
71
|
+
hospital_timely_care: {
|
|
72
|
+
id: "yv7e-xc69",
|
|
73
|
+
name: "Timely and Effective Care - Hospital",
|
|
74
|
+
description: "ED wait times, heart attack/stroke care, preventive care, immunization measures",
|
|
75
|
+
theme: "Hospitals",
|
|
76
|
+
},
|
|
77
|
+
hospital_spending: {
|
|
78
|
+
id: "rrqw-56er",
|
|
79
|
+
name: "Medicare Spending Per Beneficiary - Hospital",
|
|
80
|
+
description: "Medicare spending per episode of care compared to national average",
|
|
81
|
+
theme: "Hospitals",
|
|
82
|
+
},
|
|
83
|
+
hospital_patient_survey: {
|
|
84
|
+
id: "dgck-syfz",
|
|
85
|
+
name: "Patient Survey (HCAHPS) - Hospital",
|
|
86
|
+
description: "HCAHPS patient experience scores: communication, responsiveness, cleanliness, recommendations",
|
|
87
|
+
theme: "Hospitals",
|
|
88
|
+
},
|
|
89
|
+
nursing_home_health_citations: {
|
|
90
|
+
id: "r5ix-sfxw",
|
|
91
|
+
name: "Nursing Home Health Deficiencies",
|
|
92
|
+
description: "Health inspection citations in the last 3 years: tag codes, scope/severity, correction dates",
|
|
93
|
+
theme: "Nursing homes",
|
|
94
|
+
},
|
|
95
|
+
nursing_home_quality: {
|
|
96
|
+
id: "djen-97ju",
|
|
97
|
+
name: "Nursing Home Quality Measures (MDS)",
|
|
98
|
+
description: "Quality measures from the Minimum Data Set: falls, pressure ulcers, pain, UTIs, restraints",
|
|
99
|
+
theme: "Nursing homes",
|
|
100
|
+
},
|
|
101
|
+
};
|
|
102
|
+
// ─── Helpers ─────────────────────────────────────────────────────────
|
|
103
|
+
function extractDistributionId(detail) {
|
|
104
|
+
// Find the first CSV distribution
|
|
105
|
+
if (detail.distribution?.length) {
|
|
106
|
+
return detail.distribution[0].identifier ?? null;
|
|
107
|
+
}
|
|
108
|
+
return null;
|
|
109
|
+
}
|
|
110
|
+
function simplifyDataset(raw) {
|
|
111
|
+
const keywords = Array.isArray(raw.keyword)
|
|
112
|
+
? raw.keyword.map((k) => (typeof k === "string" ? k : k?.data ?? "")).filter(Boolean)
|
|
113
|
+
: [];
|
|
114
|
+
const themes = Array.isArray(raw.theme)
|
|
115
|
+
? raw.theme.map((t) => (typeof t === "string" ? t : t?.data ?? "")).filter(Boolean)
|
|
116
|
+
: [];
|
|
117
|
+
return {
|
|
118
|
+
identifier: raw.identifier ?? "",
|
|
119
|
+
title: raw.title ?? "",
|
|
120
|
+
description: raw.description ?? "",
|
|
121
|
+
modified: raw.modified ?? undefined,
|
|
122
|
+
theme: themes.length ? themes : undefined,
|
|
123
|
+
keyword: keywords.length ? keywords : undefined,
|
|
124
|
+
};
|
|
125
|
+
}
|
|
126
|
+
// ─── Public API ──────────────────────────────────────────────────────
|
|
127
|
+
/**
|
|
128
|
+
* Search CMS Provider Data catalog by keyword.
|
|
129
|
+
*/
|
|
130
|
+
export async function searchDatasets(keyword) {
|
|
131
|
+
const res = (await api.get("/metastore/schemas/dataset/items", {
|
|
132
|
+
"show-reference-ids": "",
|
|
133
|
+
}));
|
|
134
|
+
if (!Array.isArray(res))
|
|
135
|
+
return [];
|
|
136
|
+
// Client-side keyword filter (DKAN API returns all items)
|
|
137
|
+
const kw = keyword.toLowerCase();
|
|
138
|
+
const matches = res.filter((item) => {
|
|
139
|
+
const title = (item.title ?? "").toLowerCase();
|
|
140
|
+
const desc = (item.description ?? "").toLowerCase();
|
|
141
|
+
const keywords = Array.isArray(item.keyword)
|
|
142
|
+
? item.keyword.map((k) => (typeof k === "string" ? k : k?.data ?? "").toLowerCase())
|
|
143
|
+
: [];
|
|
144
|
+
return title.includes(kw) || desc.includes(kw) || keywords.some((k) => k.includes(kw));
|
|
145
|
+
});
|
|
146
|
+
return matches.slice(0, 25).map(simplifyDataset);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Get details for a specific CMS dataset by identifier.
|
|
150
|
+
*/
|
|
151
|
+
export async function getDatasetDetails(datasetId) {
|
|
152
|
+
try {
|
|
153
|
+
const res = (await api.get(`/metastore/schemas/dataset/items/${datasetId}`, {
|
|
154
|
+
"show-reference-ids": "",
|
|
155
|
+
}));
|
|
156
|
+
if (!res || !res.identifier)
|
|
157
|
+
return null;
|
|
158
|
+
const distributions = Array.isArray(res.distribution)
|
|
159
|
+
? res.distribution.map((d) => ({
|
|
160
|
+
identifier: d?.identifier ?? d?.data?.identifier ?? "",
|
|
161
|
+
downloadURL: d?.data?.downloadURL ?? d?.downloadURL ?? "",
|
|
162
|
+
mediaType: d?.data?.mediaType ?? d?.mediaType ?? "",
|
|
163
|
+
}))
|
|
164
|
+
: [];
|
|
165
|
+
return {
|
|
166
|
+
identifier: res.identifier,
|
|
167
|
+
title: res.title ?? "",
|
|
168
|
+
description: res.description ?? "",
|
|
169
|
+
modified: res.modified ?? undefined,
|
|
170
|
+
distribution: distributions,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
return null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
/**
|
|
178
|
+
* Query data from a CMS dataset. The SDK resolves the distribution UUID
|
|
179
|
+
* automatically from the dataset identifier.
|
|
180
|
+
*/
|
|
181
|
+
export async function queryDataset(opts) {
|
|
182
|
+
// Look up the dataset key in our catalog
|
|
183
|
+
const catalogEntry = Object.values(DATASETS).find((d) => d.id === opts.datasetId);
|
|
184
|
+
const datasetId = catalogEntry?.id ?? opts.datasetId;
|
|
185
|
+
// Get dataset details to find the distribution UUID
|
|
186
|
+
const detail = await getDatasetDetails(datasetId);
|
|
187
|
+
if (!detail) {
|
|
188
|
+
return { results: [], count: 0 };
|
|
189
|
+
}
|
|
190
|
+
const distId = extractDistributionId(detail);
|
|
191
|
+
if (!distId) {
|
|
192
|
+
return { results: [], count: 0 };
|
|
193
|
+
}
|
|
194
|
+
// Query the DKAN datastore
|
|
195
|
+
const params = {
|
|
196
|
+
limit: String(opts.limit ?? 50),
|
|
197
|
+
offset: String(opts.offset ?? 0),
|
|
198
|
+
};
|
|
199
|
+
// Add conditions
|
|
200
|
+
if (opts.conditions) {
|
|
201
|
+
opts.conditions.forEach((cond, i) => {
|
|
202
|
+
params[`conditions[${i}][property]`] = cond.property;
|
|
203
|
+
params[`conditions[${i}][value]`] = cond.value;
|
|
204
|
+
if (cond.operator)
|
|
205
|
+
params[`conditions[${i}][operator]`] = cond.operator;
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
const res = (await api.get(`/datastore/query/${distId}/0`, params));
|
|
209
|
+
const results = Array.isArray(res?.results) ? res.results : [];
|
|
210
|
+
const count = typeof res?.count === "number" ? res.count : results.length;
|
|
211
|
+
return { results, count, limit: opts.limit ?? 50, offset: opts.offset ?? 0 };
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Query a dataset using its short key from the DATASETS catalog.
|
|
215
|
+
*/
|
|
216
|
+
export async function queryByKey(key, conditions, limit, offset) {
|
|
217
|
+
const entry = DATASETS[key];
|
|
218
|
+
if (!entry) {
|
|
219
|
+
return { results: [], count: 0 };
|
|
220
|
+
}
|
|
221
|
+
return queryDataset({ datasetId: entry.id, conditions, limit, offset });
|
|
222
|
+
}
|
|
223
|
+
/** Clear the CMS SDK cache. */
|
|
224
|
+
export function clearCache() {
|
|
225
|
+
api.clearCache();
|
|
226
|
+
}
|
|
227
|
+
//# sourceMappingURL=cms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cms.js","sourceRoot":"","sources":["../../src/sdk/cms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* College Scorecard SDK — typed API client for the U.S. Department of Education College Scorecard API.
|
|
3
|
+
*
|
|
4
|
+
* API docs: https://collegescorecard.ed.gov/data/documentation/
|
|
5
|
+
* GitHub: https://github.com/RTICWDT/open-data-maker/blob/master/API.md
|
|
6
|
+
* Requires DATA_GOV_API_KEY (same key used for FBI/GovInfo — get one at https://api.data.gov/signup).
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* import { searchSchools, getSchoolById } from "us-gov-open-data-mcp/sdk/college-scorecard";
|
|
10
|
+
* const results = await searchSchools({ name: "MIT", fields: POPULAR_FIELDS });
|
|
11
|
+
*/
|
|
12
|
+
export interface ScorecardResponse {
|
|
13
|
+
metadata: {
|
|
14
|
+
page: number;
|
|
15
|
+
total: number;
|
|
16
|
+
per_page: number;
|
|
17
|
+
};
|
|
18
|
+
results: ScorecardSchool[];
|
|
19
|
+
}
|
|
20
|
+
export interface ScorecardSchool {
|
|
21
|
+
id?: number;
|
|
22
|
+
[key: string]: unknown;
|
|
23
|
+
}
|
|
24
|
+
/** Commonly requested fields for College Scorecard queries. */
|
|
25
|
+
export declare const POPULAR_FIELDS: string;
|
|
26
|
+
/** School ownership types */
|
|
27
|
+
export declare const OWNERSHIP: Record<number, string>;
|
|
28
|
+
/** Predominant degree types */
|
|
29
|
+
export declare const DEGREE_TYPES: Record<number, string>;
|
|
30
|
+
/** State FIPS to abbreviation for filtering */
|
|
31
|
+
export declare const STATE_FIPS: Record<string, number>;
|
|
32
|
+
/** Search for schools by name, state, or other criteria. */
|
|
33
|
+
export declare function searchSchools(opts: {
|
|
34
|
+
name?: string;
|
|
35
|
+
state?: string;
|
|
36
|
+
ownership?: number;
|
|
37
|
+
degreePredominant?: number;
|
|
38
|
+
fields?: string;
|
|
39
|
+
perPage?: number;
|
|
40
|
+
page?: number;
|
|
41
|
+
sort?: string;
|
|
42
|
+
}): Promise<ScorecardResponse>;
|
|
43
|
+
/** Get a specific school by its College Scorecard ID. */
|
|
44
|
+
export declare function getSchoolById(id: number, fields?: string): Promise<ScorecardResponse>;
|
|
45
|
+
/** Search for schools with custom field filters and ranges. */
|
|
46
|
+
export declare function querySchools(params: Record<string, string | number | undefined>): Promise<ScorecardResponse>;
|
|
47
|
+
/** Get the most expensive schools. */
|
|
48
|
+
export declare function getMostExpensive(opts?: {
|
|
49
|
+
ownership?: number;
|
|
50
|
+
perPage?: number;
|
|
51
|
+
}): Promise<ScorecardResponse>;
|
|
52
|
+
/** Get schools with the highest earnings after graduation. */
|
|
53
|
+
export declare function getHighestEarners(opts?: {
|
|
54
|
+
ownership?: number;
|
|
55
|
+
perPage?: number;
|
|
56
|
+
}): Promise<ScorecardResponse>;
|
|
57
|
+
/** Get schools with the highest completion (graduation) rates. */
|
|
58
|
+
export declare function getHighestGraduationRates(opts?: {
|
|
59
|
+
state?: string;
|
|
60
|
+
perPage?: number;
|
|
61
|
+
}): Promise<ScorecardResponse>;
|
|
62
|
+
export declare function clearCache(): void;
|
|
63
|
+
//# sourceMappingURL=college-scorecard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"college-scorecard.d.ts","sourceRoot":"","sources":["../../src/sdk/college-scorecard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAeH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5D,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAID,+DAA+D;AAC/D,eAAO,MAAM,cAAc,QAqBhB,CAAC;AAEZ,6BAA6B;AAC7B,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAI5C,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM/C,CAAC;AAEF,+CAA+C;AAC/C,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAO7C,CAAC;AAIF,4DAA4D;AAC5D,wBAAsB,aAAa,CAAC,IAAI,EAAE;IACxC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAa7B;AAED,yDAAyD;AACzD,wBAAsB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAK3F;AAED,+DAA+D;AAC/D,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAIlH;AAED,sCAAsC;AACtC,wBAAsB,gBAAgB,CAAC,IAAI,CAAC,EAAE;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CACtC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAO7B;AAED,8DAA8D;AAC9D,wBAAsB,iBAAiB,CAAC,IAAI,CAAC,EAAE;IAC7C,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CACtC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAO7B;AAED,kEAAkE;AAClE,wBAAsB,yBAAyB,CAAC,IAAI,CAAC,EAAE;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClC,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAO7B;AAED,wBAAgB,UAAU,IAAI,IAAI,CAAsB"}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* College Scorecard SDK — typed API client for the U.S. Department of Education College Scorecard API.
|
|
3
|
+
*
|
|
4
|
+
* API docs: https://collegescorecard.ed.gov/data/documentation/
|
|
5
|
+
* GitHub: https://github.com/RTICWDT/open-data-maker/blob/master/API.md
|
|
6
|
+
* Requires DATA_GOV_API_KEY (same key used for FBI/GovInfo — get one at https://api.data.gov/signup).
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* import { searchSchools, getSchoolById } from "us-gov-open-data-mcp/sdk/college-scorecard";
|
|
10
|
+
* const results = await searchSchools({ name: "MIT", fields: POPULAR_FIELDS });
|
|
11
|
+
*/
|
|
12
|
+
import { createClient } from "../client.js";
|
|
13
|
+
const api = createClient({
|
|
14
|
+
baseUrl: "https://api.data.gov/ed/collegescorecard/v1",
|
|
15
|
+
name: "college-scorecard",
|
|
16
|
+
auth: { type: "query", key: "api_key", envVar: "DATA_GOV_API_KEY" },
|
|
17
|
+
rateLimit: { perSecond: 5, burst: 15 },
|
|
18
|
+
cacheTtlMs: 24 * 60 * 60 * 1000, // 24 hours — data updates annually
|
|
19
|
+
timeoutMs: 30_000,
|
|
20
|
+
});
|
|
21
|
+
// ─── Reference Data ──────────────────────────────────────────────────
|
|
22
|
+
/** Commonly requested fields for College Scorecard queries. */
|
|
23
|
+
export const POPULAR_FIELDS = [
|
|
24
|
+
"id",
|
|
25
|
+
"school.name",
|
|
26
|
+
"school.state",
|
|
27
|
+
"school.city",
|
|
28
|
+
"school.school_url",
|
|
29
|
+
"school.ownership", // 1=public, 2=private nonprofit, 3=private for-profit
|
|
30
|
+
"school.degrees_awarded.predominant", // 1=certificate, 2=associate, 3=bachelor's, 4=graduate
|
|
31
|
+
"latest.admissions.admission_rate.overall",
|
|
32
|
+
"latest.student.size",
|
|
33
|
+
"latest.cost.tuition.in_state",
|
|
34
|
+
"latest.cost.tuition.out_of_state",
|
|
35
|
+
"latest.cost.avg_net_price.overall",
|
|
36
|
+
"latest.aid.median_debt.completers.overall",
|
|
37
|
+
"latest.aid.pell_grant_rate",
|
|
38
|
+
"latest.completion.rate_suppressed.overall",
|
|
39
|
+
"latest.earnings.10_yrs_after_entry.median",
|
|
40
|
+
"latest.earnings.6_yrs_after_entry.median",
|
|
41
|
+
"latest.student.demographics.race_ethnicity.white",
|
|
42
|
+
"latest.student.demographics.race_ethnicity.black",
|
|
43
|
+
"latest.student.demographics.race_ethnicity.hispanic",
|
|
44
|
+
].join(",");
|
|
45
|
+
/** School ownership types */
|
|
46
|
+
export const OWNERSHIP = {
|
|
47
|
+
1: "Public",
|
|
48
|
+
2: "Private nonprofit",
|
|
49
|
+
3: "Private for-profit",
|
|
50
|
+
};
|
|
51
|
+
/** Predominant degree types */
|
|
52
|
+
export const DEGREE_TYPES = {
|
|
53
|
+
0: "Not classified",
|
|
54
|
+
1: "Certificate",
|
|
55
|
+
2: "Associate",
|
|
56
|
+
3: "Bachelor's",
|
|
57
|
+
4: "Graduate",
|
|
58
|
+
};
|
|
59
|
+
/** State FIPS to abbreviation for filtering */
|
|
60
|
+
export const STATE_FIPS = {
|
|
61
|
+
AL: 1, AK: 2, AZ: 4, AR: 5, CA: 6, CO: 8, CT: 9, DE: 10, DC: 11, FL: 12,
|
|
62
|
+
GA: 13, HI: 15, ID: 16, IL: 17, IN: 18, IA: 19, KS: 20, KY: 21, LA: 22,
|
|
63
|
+
ME: 23, MD: 24, MA: 25, MI: 26, MN: 27, MS: 28, MO: 29, MT: 30, NE: 31,
|
|
64
|
+
NV: 32, NH: 33, NJ: 34, NM: 35, NY: 36, NC: 37, ND: 38, OH: 39, OK: 40,
|
|
65
|
+
OR: 41, PA: 42, RI: 44, SC: 45, SD: 46, TN: 47, TX: 48, UT: 49, VT: 50,
|
|
66
|
+
VA: 51, WA: 53, WV: 54, WI: 55, WY: 56,
|
|
67
|
+
};
|
|
68
|
+
// ─── Public API ──────────────────────────────────────────────────────
|
|
69
|
+
/** Search for schools by name, state, or other criteria. */
|
|
70
|
+
export async function searchSchools(opts) {
|
|
71
|
+
const params = {
|
|
72
|
+
_fields: opts.fields || POPULAR_FIELDS,
|
|
73
|
+
per_page: opts.perPage || 20,
|
|
74
|
+
page: opts.page || 0,
|
|
75
|
+
};
|
|
76
|
+
if (opts.name)
|
|
77
|
+
params["school.name"] = opts.name;
|
|
78
|
+
if (opts.state)
|
|
79
|
+
params["school.state"] = opts.state;
|
|
80
|
+
if (opts.ownership !== undefined)
|
|
81
|
+
params["school.ownership"] = opts.ownership;
|
|
82
|
+
if (opts.degreePredominant !== undefined)
|
|
83
|
+
params["school.degrees_awarded.predominant"] = opts.degreePredominant;
|
|
84
|
+
if (opts.sort)
|
|
85
|
+
params.sort = opts.sort;
|
|
86
|
+
return api.get("/schools.json", params);
|
|
87
|
+
}
|
|
88
|
+
/** Get a specific school by its College Scorecard ID. */
|
|
89
|
+
export async function getSchoolById(id, fields) {
|
|
90
|
+
return api.get("/schools.json", {
|
|
91
|
+
id,
|
|
92
|
+
_fields: fields || POPULAR_FIELDS,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
/** Search for schools with custom field filters and ranges. */
|
|
96
|
+
export async function querySchools(params) {
|
|
97
|
+
if (!params._fields)
|
|
98
|
+
params._fields = POPULAR_FIELDS;
|
|
99
|
+
if (!params.per_page)
|
|
100
|
+
params.per_page = 20;
|
|
101
|
+
return api.get("/schools.json", params);
|
|
102
|
+
}
|
|
103
|
+
/** Get the most expensive schools. */
|
|
104
|
+
export async function getMostExpensive(opts) {
|
|
105
|
+
return searchSchools({
|
|
106
|
+
degreePredominant: 3, // bachelor's
|
|
107
|
+
ownership: opts?.ownership,
|
|
108
|
+
perPage: opts?.perPage || 20,
|
|
109
|
+
sort: "latest.cost.tuition.out_of_state:desc",
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/** Get schools with the highest earnings after graduation. */
|
|
113
|
+
export async function getHighestEarners(opts) {
|
|
114
|
+
return searchSchools({
|
|
115
|
+
degreePredominant: 3,
|
|
116
|
+
ownership: opts?.ownership,
|
|
117
|
+
perPage: opts?.perPage || 20,
|
|
118
|
+
sort: "latest.earnings.10_yrs_after_entry.median:desc",
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/** Get schools with the highest completion (graduation) rates. */
|
|
122
|
+
export async function getHighestGraduationRates(opts) {
|
|
123
|
+
return searchSchools({
|
|
124
|
+
degreePredominant: 3,
|
|
125
|
+
state: opts?.state,
|
|
126
|
+
perPage: opts?.perPage || 20,
|
|
127
|
+
sort: "latest.completion.rate_suppressed.overall:desc",
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
export function clearCache() { api.clearCache(); }
|
|
131
|
+
//# sourceMappingURL=college-scorecard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"college-scorecard.js","sourceRoot":"","sources":["../../src/sdk/college-scorecard.ts"],"names":[],"mappings":"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"}
|