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
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CFPB MCP module — Consumer Financial Protection Bureau complaint database.
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { searchComplaints, getComplaintAggregations, getComplaintTrends, suggestCompany, PRODUCTS, AGG_FIELDS, } from "../sdk/cfpb.js";
|
|
6
|
+
export const name = "cfpb";
|
|
7
|
+
export const displayName = "CFPB (Consumer Financial Protection Bureau)";
|
|
8
|
+
export const description = "Consumer complaint database with 13M+ complaints against financial companies. " +
|
|
9
|
+
"Search by company, product, state, issue, date. Track complaint trends and company response patterns.";
|
|
10
|
+
export const workflow = "cfpb_search_complaints to find complaints → cfpb_complaint_aggregations for counts by field → cfpb_complaint_trends for time series";
|
|
11
|
+
export const tips = "Products: 'Mortgage', 'Credit reporting...', 'Debt collection', 'Credit card or prepaid card', 'Checking or savings account', " +
|
|
12
|
+
"'Student loan', 'Vehicle loan or lease'. States: two-letter codes (CA, TX, NY). " +
|
|
13
|
+
"Sort options: 'created_date_desc' (newest), 'created_date_asc' (oldest), 'relevance_desc'. " +
|
|
14
|
+
"Date format: YYYY-MM-DD. Use has_narrative=true to find complaints with consumer stories.";
|
|
15
|
+
export const reference = {
|
|
16
|
+
products: PRODUCTS,
|
|
17
|
+
aggregationFields: AGG_FIELDS,
|
|
18
|
+
docs: {
|
|
19
|
+
"API Documentation": "https://cfpb.github.io/api/ccdb/",
|
|
20
|
+
"Complaint Database": "https://www.consumerfinance.gov/data-research/consumer-complaints/",
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
export const tools = [
|
|
24
|
+
{
|
|
25
|
+
name: "cfpb_search_complaints",
|
|
26
|
+
description: "Search the CFPB consumer complaint database (13M+ records).\n" +
|
|
27
|
+
"Find complaints by company, product, state, issue, date, or keyword.\n" +
|
|
28
|
+
"Returns individual complaints with company responses.\n" +
|
|
29
|
+
"Products: 'Mortgage', 'Debt collection', 'Credit card or prepaid card', 'Checking or savings account', " +
|
|
30
|
+
"'Student loan', 'Vehicle loan or lease', 'Credit reporting, credit repair services, or other personal consumer reports'.",
|
|
31
|
+
annotations: { title: "CFPB: Search Complaints", readOnlyHint: true },
|
|
32
|
+
parameters: z.object({
|
|
33
|
+
search_term: z.string().optional().describe("Free-text search across complaint narratives"),
|
|
34
|
+
product: z.string().optional().describe("Financial product: 'Mortgage', 'Debt collection', 'Credit card or prepaid card', etc."),
|
|
35
|
+
company: z.string().optional().describe("Company name: 'Wells Fargo', 'Bank of America', 'Equifax', etc."),
|
|
36
|
+
state: z.string().optional().describe("Two-letter state code: 'CA', 'TX', 'NY'"),
|
|
37
|
+
issue: z.string().optional().describe("Issue type: 'Incorrect information on your report', 'Loan modification', etc."),
|
|
38
|
+
date_received_min: z.string().optional().describe("Start date (YYYY-MM-DD): '2020-01-01'"),
|
|
39
|
+
date_received_max: z.string().optional().describe("End date (YYYY-MM-DD): '2024-12-31'"),
|
|
40
|
+
has_narrative: z.boolean().optional().describe("Only complaints with consumer narrative text (true/false)"),
|
|
41
|
+
tags: z.string().optional().describe("Filter by tags: 'Older American', 'Servicemember'"),
|
|
42
|
+
size: z.number().int().max(100).optional().describe("Results per page (default 10, max 100)"),
|
|
43
|
+
sort: z.string().optional().describe("Sort: 'created_date_desc' (newest), 'created_date_asc', 'relevance_desc'"),
|
|
44
|
+
}),
|
|
45
|
+
execute: async (args) => {
|
|
46
|
+
const data = await searchComplaints({ ...args, no_aggs: true });
|
|
47
|
+
const total = typeof data.hits?.total === "object" ? data.hits.total.value : data.hits?.total ?? 0;
|
|
48
|
+
const complaints = data.hits?.hits?.map(h => h._source) ?? [];
|
|
49
|
+
if (!complaints.length)
|
|
50
|
+
return "No complaints found matching the search criteria.";
|
|
51
|
+
return JSON.stringify({
|
|
52
|
+
summary: `CFPB complaints: ${total.toLocaleString()} total matches, showing ${complaints.length}`,
|
|
53
|
+
meta: data._meta,
|
|
54
|
+
total,
|
|
55
|
+
complaints: complaints.slice(0, 50),
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
{
|
|
60
|
+
name: "cfpb_complaint_aggregations",
|
|
61
|
+
description: "Get complaint counts grouped by a field (product, company, state, issue, etc.).\n" +
|
|
62
|
+
"Useful for ranking companies by complaint volume, identifying top issues, or comparing states.\n" +
|
|
63
|
+
"Aggregation fields: 'product', 'company', 'state', 'issue', 'company_response', 'timely', 'submitted_via', 'tags'.",
|
|
64
|
+
annotations: { title: "CFPB: Complaint Aggregations", readOnlyHint: true },
|
|
65
|
+
parameters: z.object({
|
|
66
|
+
field: z.string().describe("Field to group by: 'product', 'company', 'state', 'issue', 'company_response', 'timely', 'tags'"),
|
|
67
|
+
product: z.string().optional().describe("Filter by product: 'Mortgage', 'Debt collection', etc."),
|
|
68
|
+
company: z.string().optional().describe("Filter by company: 'Wells Fargo', 'Bank of America', etc."),
|
|
69
|
+
state: z.string().optional().describe("Filter by state: 'CA', 'TX', 'NY'"),
|
|
70
|
+
issue: z.string().optional().describe("Filter by issue type"),
|
|
71
|
+
date_received_min: z.string().optional().describe("Start date (YYYY-MM-DD)"),
|
|
72
|
+
date_received_max: z.string().optional().describe("End date (YYYY-MM-DD)"),
|
|
73
|
+
}),
|
|
74
|
+
execute: async (args) => {
|
|
75
|
+
const data = await getComplaintAggregations(args);
|
|
76
|
+
const total = typeof data.hits?.total === "object" ? data.hits.total.value : data.hits?.total ?? 0;
|
|
77
|
+
// Extract aggregation buckets — the key varies by field
|
|
78
|
+
const aggs = data.aggregations ?? data.aggs ?? {};
|
|
79
|
+
return JSON.stringify({
|
|
80
|
+
summary: `CFPB aggregation by '${args.field}': ${total.toLocaleString()} total complaints`,
|
|
81
|
+
total,
|
|
82
|
+
aggregations: aggs,
|
|
83
|
+
meta: data._meta,
|
|
84
|
+
});
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
{
|
|
88
|
+
name: "cfpb_complaint_trends",
|
|
89
|
+
description: "Get complaint trends over time by month, week, or year.\n" +
|
|
90
|
+
"Track how complaint volume changes for specific companies, products, or states.",
|
|
91
|
+
annotations: { title: "CFPB: Complaint Trends", readOnlyHint: true },
|
|
92
|
+
parameters: z.object({
|
|
93
|
+
product: z.string().optional().describe("Financial product: 'Mortgage', 'Debt collection', etc."),
|
|
94
|
+
company: z.string().optional().describe("Company name: 'Wells Fargo', 'Equifax', etc."),
|
|
95
|
+
state: z.string().optional().describe("Two-letter state code: 'CA', 'TX', 'NY'"),
|
|
96
|
+
issue: z.string().optional().describe("Issue type filter"),
|
|
97
|
+
date_received_min: z.string().optional().describe("Start date (YYYY-MM-DD)"),
|
|
98
|
+
date_received_max: z.string().optional().describe("End date (YYYY-MM-DD)"),
|
|
99
|
+
trend_interval: z.string().optional().describe("Interval: 'month' (default), 'week', 'year'"),
|
|
100
|
+
}),
|
|
101
|
+
execute: async (args) => {
|
|
102
|
+
const data = await getComplaintTrends(args);
|
|
103
|
+
const total = typeof data.hits?.total === "object" ? data.hits.total.value : data.hits?.total ?? 0;
|
|
104
|
+
const aggs = data.aggregations ?? data.aggs ?? {};
|
|
105
|
+
return JSON.stringify({
|
|
106
|
+
summary: `CFPB complaint trends: ${total.toLocaleString()} total, interval=${args.trend_interval ?? "month"}`,
|
|
107
|
+
total,
|
|
108
|
+
aggregations: aggs,
|
|
109
|
+
meta: data._meta,
|
|
110
|
+
});
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
name: "cfpb_suggest_company",
|
|
115
|
+
description: "Autocomplete/suggest company names from the CFPB complaint database.\n" +
|
|
116
|
+
"Useful for finding the exact company name before searching complaints.",
|
|
117
|
+
annotations: { title: "CFPB: Suggest Company", readOnlyHint: true },
|
|
118
|
+
parameters: z.object({
|
|
119
|
+
text: z.string().describe("Partial company name to search: 'wells', 'bank of', 'equi'"),
|
|
120
|
+
size: z.number().int().max(20).optional().describe("Max suggestions (default 10)"),
|
|
121
|
+
}),
|
|
122
|
+
execute: async ({ text, size }) => {
|
|
123
|
+
const data = await suggestCompany(text, size);
|
|
124
|
+
const suggestions = data.suggest?.[0]?.options?.map(o => o.text) ?? [];
|
|
125
|
+
if (!suggestions.length)
|
|
126
|
+
return `No company name suggestions for "${text}".`;
|
|
127
|
+
return JSON.stringify({
|
|
128
|
+
summary: `Company suggestions for "${text}": ${suggestions.length} matches`,
|
|
129
|
+
suggestions,
|
|
130
|
+
});
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
];
|
|
134
|
+
export { clearCache } from "../sdk/cfpb.js";
|
|
135
|
+
//# sourceMappingURL=cfpb.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cfpb.js","sourceRoot":"","sources":["../../src/modules/cfpb.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClinicalTrials.gov module — clinical trial search and detail.
|
|
3
|
+
*/
|
|
4
|
+
import type { Tool } from "fastmcp";
|
|
5
|
+
import { clearCache as sdkClearCache } from "../sdk/clinical-trials.js";
|
|
6
|
+
export declare const name = "clinical-trials";
|
|
7
|
+
export declare const displayName = "ClinicalTrials.gov";
|
|
8
|
+
export declare const description = "Search 400K+ clinical trials: conditions, drugs, sponsors, phases, recruitment status, locations. Cross-reference with FDA (drug approvals), CDC (health outcomes), and lobbying data. No API key required.";
|
|
9
|
+
export declare const workflow = "Use clinical_trials_search to find trials by condition/drug/sponsor \u2192 clinical_trials_detail for full protocol \u2192 clinical_trials_stats for enrollment by status.";
|
|
10
|
+
export declare const tips = "Statuses: RECRUITING, COMPLETED, ACTIVE_NOT_RECRUITING, TERMINATED. Phases: PHASE1, PHASE2, PHASE3, PHASE4. Search by sponsor name (e.g. 'Pfizer', 'NIH') to track industry vs. government research.";
|
|
11
|
+
export declare const reference: {
|
|
12
|
+
statuses: Record<string, string>;
|
|
13
|
+
phases: Record<string, string>;
|
|
14
|
+
studyTypes: Record<string, string>;
|
|
15
|
+
docs: {
|
|
16
|
+
"API v2 Documentation": string;
|
|
17
|
+
"ClinicalTrials.gov": string;
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
export declare const tools: Tool<any, any>[];
|
|
21
|
+
export { sdkClearCache as clearCache };
|
|
22
|
+
//# sourceMappingURL=clinical-trials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clinical-trials.d.ts","sourceRoot":"","sources":["../../src/modules/clinical-trials.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAOL,UAAU,IAAI,aAAa,EAE5B,MAAM,2BAA2B,CAAC;AAInC,eAAO,MAAM,IAAI,oBAAoB,CAAC;AACtC,eAAO,MAAM,WAAW,uBAAuB,CAAC;AAChD,eAAO,MAAM,WAAW,gNACuL,CAAC;AAChN,eAAO,MAAM,QAAQ,+KAC+I,CAAC;AACrK,eAAO,MAAM,IAAI,yMACuL,CAAC;AAEzM,eAAO,MAAM,SAAS;;;;;;;;CAQrB,CAAC;AA8CF,eAAO,MAAM,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAuHjC,CAAC;AAEF,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClinicalTrials.gov module — clinical trial search and detail.
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { searchTrials, getTrialDetail, getTrialEnrollmentStats, TRIAL_STATUSES, TRIAL_PHASES, STUDY_TYPES, clearCache as sdkClearCache, } from "../sdk/clinical-trials.js";
|
|
6
|
+
// ─── Metadata ────────────────────────────────────────────────────────
|
|
7
|
+
export const name = "clinical-trials";
|
|
8
|
+
export const displayName = "ClinicalTrials.gov";
|
|
9
|
+
export const description = "Search 400K+ clinical trials: conditions, drugs, sponsors, phases, recruitment status, locations. Cross-reference with FDA (drug approvals), CDC (health outcomes), and lobbying data. No API key required.";
|
|
10
|
+
export const workflow = "Use clinical_trials_search to find trials by condition/drug/sponsor → clinical_trials_detail for full protocol → clinical_trials_stats for enrollment by status.";
|
|
11
|
+
export const tips = "Statuses: RECRUITING, COMPLETED, ACTIVE_NOT_RECRUITING, TERMINATED. Phases: PHASE1, PHASE2, PHASE3, PHASE4. Search by sponsor name (e.g. 'Pfizer', 'NIH') to track industry vs. government research.";
|
|
12
|
+
export const reference = {
|
|
13
|
+
statuses: TRIAL_STATUSES,
|
|
14
|
+
phases: TRIAL_PHASES,
|
|
15
|
+
studyTypes: STUDY_TYPES,
|
|
16
|
+
docs: {
|
|
17
|
+
"API v2 Documentation": "https://clinicaltrials.gov/data-api/api",
|
|
18
|
+
"ClinicalTrials.gov": "https://clinicaltrials.gov/",
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
// ─── Helpers ─────────────────────────────────────────────────────────
|
|
22
|
+
function summarizeTrial(study) {
|
|
23
|
+
const p = study.protocolSection;
|
|
24
|
+
if (!p)
|
|
25
|
+
return "No protocol data available.";
|
|
26
|
+
const id = p.identificationModule;
|
|
27
|
+
const status = p.statusModule;
|
|
28
|
+
const design = p.designModule;
|
|
29
|
+
const sponsor = p.sponsorCollaboratorsModule;
|
|
30
|
+
const conds = p.conditionsModule?.conditions?.join(", ") ?? "N/A";
|
|
31
|
+
const interventions = p.armsInterventionsModule?.interventions
|
|
32
|
+
?.map((i) => `${i.type ?? "?"}: ${i.name ?? "?"}`)
|
|
33
|
+
.join("; ") ?? "N/A";
|
|
34
|
+
const parts = [
|
|
35
|
+
`${id?.nctId ?? "?"} — ${id?.briefTitle ?? "Untitled"}`,
|
|
36
|
+
`Status: ${status?.overallStatus ?? "?"}`,
|
|
37
|
+
`Phase: ${design?.phases?.join(", ") ?? "N/A"}`,
|
|
38
|
+
`Type: ${design?.studyType ?? "?"}`,
|
|
39
|
+
`Sponsor: ${sponsor?.leadSponsor?.name ?? "?"} (${sponsor?.leadSponsor?.class ?? "?"})`,
|
|
40
|
+
`Conditions: ${conds}`,
|
|
41
|
+
`Interventions: ${interventions}`,
|
|
42
|
+
`Enrollment: ${design?.enrollmentInfo?.count ?? "?"} (${design?.enrollmentInfo?.type ?? "?"})`,
|
|
43
|
+
];
|
|
44
|
+
if (status?.startDateStruct?.date)
|
|
45
|
+
parts.push(`Start: ${status.startDateStruct.date}`);
|
|
46
|
+
if (status?.primaryCompletionDateStruct?.date)
|
|
47
|
+
parts.push(`Primary Completion: ${status.primaryCompletionDateStruct.date}`);
|
|
48
|
+
const collabs = sponsor?.collaborators?.map((c) => c.name).join(", ");
|
|
49
|
+
if (collabs)
|
|
50
|
+
parts.push(`Collaborators: ${collabs}`);
|
|
51
|
+
const locations = p.contactsLocationsModule?.locations?.slice(0, 5);
|
|
52
|
+
if (locations?.length) {
|
|
53
|
+
parts.push(`Locations (${p.contactsLocationsModule?.locations?.length ?? 0} total):`);
|
|
54
|
+
locations.forEach((l) => {
|
|
55
|
+
parts.push(` ${l.facility ?? "?"}, ${l.city ?? ""} ${l.state ?? ""} ${l.country ?? ""}`);
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
return parts.join("\n");
|
|
59
|
+
}
|
|
60
|
+
// ─── Tools ───────────────────────────────────────────────────────────
|
|
61
|
+
export const tools = [
|
|
62
|
+
{
|
|
63
|
+
name: "clinical_trials_search",
|
|
64
|
+
description: "Search ClinicalTrials.gov for clinical trials by condition, drug/intervention, sponsor, status, and phase.\n" +
|
|
65
|
+
"Returns trial ID, title, status, phase, sponsor, conditions, and enrollment.\n" +
|
|
66
|
+
"Use sponsor filter to track pharma company research (e.g. 'Pfizer', 'Moderna', 'NIH').",
|
|
67
|
+
annotations: { title: "ClinicalTrials.gov: Search", readOnlyHint: true },
|
|
68
|
+
parameters: z.object({
|
|
69
|
+
query: z.string().optional().describe("Free-text search across all fields"),
|
|
70
|
+
condition: z.string().optional().describe("Disease or condition: 'lung cancer', 'diabetes', 'Alzheimer'"),
|
|
71
|
+
intervention: z.string().optional().describe("Drug, device, or procedure name: 'pembrolizumab', 'insulin'"),
|
|
72
|
+
sponsor: z.string().optional().describe("Sponsor/funder: 'Pfizer', 'NIH', 'Moderna'"),
|
|
73
|
+
status: z.string().optional().describe("RECRUITING, COMPLETED, ACTIVE_NOT_RECRUITING, NOT_YET_RECRUITING, TERMINATED"),
|
|
74
|
+
phase: z.string().optional().describe("PHASE1, PHASE2, PHASE3, PHASE4, EARLY_PHASE1"),
|
|
75
|
+
study_type: z.string().optional().describe("INTERVENTIONAL, OBSERVATIONAL, EXPANDED_ACCESS"),
|
|
76
|
+
location: z.string().optional().describe("State or country: 'California', 'United States', 'Germany'"),
|
|
77
|
+
page_size: z.number().int().max(50).optional().describe("Results per page (default 10, max 50)"),
|
|
78
|
+
}),
|
|
79
|
+
execute: async (args) => {
|
|
80
|
+
const data = await searchTrials({
|
|
81
|
+
query: args.query,
|
|
82
|
+
condition: args.condition,
|
|
83
|
+
intervention: args.intervention,
|
|
84
|
+
sponsor: args.sponsor,
|
|
85
|
+
status: args.status,
|
|
86
|
+
phase: args.phase,
|
|
87
|
+
studyType: args.study_type,
|
|
88
|
+
state: args.location,
|
|
89
|
+
pageSize: args.page_size,
|
|
90
|
+
});
|
|
91
|
+
if (!data.studies?.length)
|
|
92
|
+
return { content: [{ type: "text", text: "No clinical trials found matching the criteria." }] };
|
|
93
|
+
const header = `${data.totalCount} total trials found (showing ${data.studies.length})`;
|
|
94
|
+
const summaries = data.studies.map(summarizeTrial);
|
|
95
|
+
return { content: [{ type: "text", text: `${header}\n\n${summaries.join("\n\n---\n\n")}` }] };
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: "clinical_trials_detail",
|
|
100
|
+
description: "Get full details for a specific clinical trial by NCT ID.\n" +
|
|
101
|
+
"Returns protocol, eligibility criteria, arms/interventions, locations, and contacts.",
|
|
102
|
+
annotations: { title: "ClinicalTrials.gov: Detail", readOnlyHint: true },
|
|
103
|
+
parameters: z.object({
|
|
104
|
+
nct_id: z.string().describe("ClinicalTrials.gov ID: 'NCT06000000'"),
|
|
105
|
+
}),
|
|
106
|
+
execute: async (args) => {
|
|
107
|
+
const study = await getTrialDetail(args.nct_id);
|
|
108
|
+
const summary = summarizeTrial(study);
|
|
109
|
+
// Add eligibility if available
|
|
110
|
+
const elig = study.protocolSection?.eligibilityModule;
|
|
111
|
+
let extra = "";
|
|
112
|
+
if (elig) {
|
|
113
|
+
const pieces = [
|
|
114
|
+
`\n\n--- ELIGIBILITY ---`,
|
|
115
|
+
`Sex: ${elig.sex ?? "All"}`,
|
|
116
|
+
`Ages: ${elig.minimumAge ?? "N/A"} to ${elig.maximumAge ?? "N/A"}`,
|
|
117
|
+
`Healthy Volunteers: ${elig.healthyVolunteers ? "Yes" : "No"}`,
|
|
118
|
+
];
|
|
119
|
+
if (elig.eligibilityCriteria) {
|
|
120
|
+
pieces.push(`\nCriteria:\n${elig.eligibilityCriteria.slice(0, 2000)}`);
|
|
121
|
+
}
|
|
122
|
+
extra = pieces.join("\n");
|
|
123
|
+
}
|
|
124
|
+
// Add brief summary
|
|
125
|
+
const desc = study.protocolSection?.descriptionModule?.briefSummary;
|
|
126
|
+
if (desc)
|
|
127
|
+
extra += `\n\n--- SUMMARY ---\n${desc}`;
|
|
128
|
+
return { content: [{ type: "text", text: summary + extra }] };
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
{
|
|
132
|
+
name: "clinical_trials_stats",
|
|
133
|
+
description: "Get trial count breakdown by status for a condition or drug/intervention.\n" +
|
|
134
|
+
"Shows how many trials are recruiting, active, completed, or terminated.\n" +
|
|
135
|
+
"Works for diseases ('breast cancer') AND drug names ('semaglutide', 'pembrolizumab').",
|
|
136
|
+
annotations: { title: "ClinicalTrials.gov: Stats", readOnlyHint: true },
|
|
137
|
+
parameters: z.object({
|
|
138
|
+
condition: z.string().describe("Disease, condition, or drug name: 'breast cancer', 'semaglutide', 'Alzheimer Disease'"),
|
|
139
|
+
search_as_drug: z.boolean().optional().describe("Set true to search as drug/intervention instead of condition (use for drug names like 'semaglutide', 'pembrolizumab')"),
|
|
140
|
+
}),
|
|
141
|
+
execute: async (args) => {
|
|
142
|
+
const data = args.search_as_drug
|
|
143
|
+
? await getTrialEnrollmentStats(args.condition, { intervention: args.condition })
|
|
144
|
+
: await getTrialEnrollmentStats(args.condition);
|
|
145
|
+
const lines = Object.entries(data.statuses).map(([status, count]) => ` ${status}: ${count.toLocaleString()}`);
|
|
146
|
+
const total = Object.values(data.statuses).reduce((a, b) => a + b, 0);
|
|
147
|
+
// If zero results for condition search, auto-retry as intervention
|
|
148
|
+
if (total === 0 && !args.search_as_drug) {
|
|
149
|
+
const retryData = await getTrialEnrollmentStats(args.condition, { intervention: args.condition });
|
|
150
|
+
const retryTotal = Object.values(retryData.statuses).reduce((a, b) => a + b, 0);
|
|
151
|
+
if (retryTotal > 0) {
|
|
152
|
+
const retryLines = Object.entries(retryData.statuses).map(([status, count]) => ` ${status}: ${count.toLocaleString()}`);
|
|
153
|
+
return {
|
|
154
|
+
content: [{
|
|
155
|
+
type: "text",
|
|
156
|
+
text: `Clinical trials for "${args.condition}" as intervention (${retryTotal.toLocaleString()} total):\n${retryLines.join("\n")}`,
|
|
157
|
+
}],
|
|
158
|
+
};
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
content: [{
|
|
163
|
+
type: "text",
|
|
164
|
+
text: `Clinical trials for "${data.condition}" (${total.toLocaleString()} total):\n${lines.join("\n")}`,
|
|
165
|
+
}],
|
|
166
|
+
};
|
|
167
|
+
},
|
|
168
|
+
},
|
|
169
|
+
];
|
|
170
|
+
export { sdkClearCache as clearCache };
|
|
171
|
+
//# sourceMappingURL=clinical-trials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clinical-trials.js","sourceRoot":"","sources":["../../src/modules/clinical-trials.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,YAAY,EACZ,cAAc,EACd,uBAAuB,EACvB,cAAc,EACd,YAAY,EACZ,WAAW,EACX,UAAU,IAAI,aAAa,GAE5B,MAAM,2BAA2B,CAAC;AAEnC,wEAAwE;AAExE,MAAM,CAAC,MAAM,IAAI,GAAG,iBAAiB,CAAC;AACtC,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC;AAChD,MAAM,CAAC,MAAM,WAAW,GACtB,6MAA6M,CAAC;AAChN,MAAM,CAAC,MAAM,QAAQ,GACnB,kKAAkK,CAAC;AACrK,MAAM,CAAC,MAAM,IAAI,GACf,sMAAsM,CAAC;AAEzM,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,YAAY;IACpB,UAAU,EAAE,WAAW;IACvB,IAAI,EAAE;QACJ,sBAAsB,EAAE,yCAAyC;QACjE,oBAAoB,EAAE,6BAA6B;KACpD;CACF,CAAC;AAEF,wEAAwE;AAExE,SAAS,cAAc,CAAC,KAAiB;IACvC,MAAM,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC;IAChC,IAAI,CAAC,CAAC;QAAE,OAAO,6BAA6B,CAAC;IAC7C,MAAM,EAAE,GAAG,CAAC,CAAC,oBAAoB,CAAC;IAClC,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC;IAC9B,MAAM,MAAM,GAAG,CAAC,CAAC,YAAY,CAAC;IAC9B,MAAM,OAAO,GAAG,CAAC,CAAC,0BAA0B,CAAC;IAC7C,MAAM,KAAK,GAAG,CAAC,CAAC,gBAAgB,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IAClE,MAAM,aAAa,GAAG,CAAC,CAAC,uBAAuB,EAAE,aAAa;QAC5D,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;SACjD,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;IAEvB,MAAM,KAAK,GAAG;QACZ,GAAG,EAAE,EAAE,KAAK,IAAI,GAAG,MAAM,EAAE,EAAE,UAAU,IAAI,UAAU,EAAE;QACvD,WAAW,MAAM,EAAE,aAAa,IAAI,GAAG,EAAE;QACzC,UAAU,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,EAAE;QAC/C,SAAS,MAAM,EAAE,SAAS,IAAI,GAAG,EAAE;QACnC,YAAY,OAAO,EAAE,WAAW,EAAE,IAAI,IAAI,GAAG,KAAK,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,GAAG,GAAG;QACvF,eAAe,KAAK,EAAE;QACtB,kBAAkB,aAAa,EAAE;QACjC,eAAe,MAAM,EAAE,cAAc,EAAE,KAAK,IAAI,GAAG,KAAK,MAAM,EAAE,cAAc,EAAE,IAAI,IAAI,GAAG,GAAG;KAC/F,CAAC;IAEF,IAAI,MAAM,EAAE,eAAe,EAAE,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,UAAU,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,CAAC,CAAC;IACvF,IAAI,MAAM,EAAE,2BAA2B,EAAE,IAAI;QAAE,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC;IAE5H,MAAM,OAAO,GAAG,OAAO,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,kBAAkB,OAAO,EAAE,CAAC,CAAC;IAErD,MAAM,SAAS,GAAG,CAAC,CAAC,uBAAuB,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpE,IAAI,SAAS,EAAE,MAAM,EAAE,CAAC;QACtB,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,uBAAuB,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,UAAU,CAAC,CAAC;QACtF,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE;YACtB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,IAAI,EAAE,IAAI,CAAC,CAAC,KAAK,IAAI,EAAE,IAAI,CAAC,CAAC,OAAO,IAAI,EAAE,EAAE,CAAC,CAAC;QAC5F,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,wEAAwE;AAExE,MAAM,CAAC,MAAM,KAAK,GAAqB;IACrC;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,8GAA8G;YAC9G,gFAAgF;YAChF,wFAAwF;QAC1F,WAAW,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,YAAY,EAAE,IAAI,EAAE;QACxE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;YAC3E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;YACzG,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6DAA6D,CAAC;YAC3G,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;YACrF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8EAA8E,CAAC;YACtH,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8CAA8C,CAAC;YACrF,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gDAAgD,CAAC;YAC5F,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4DAA4D,CAAC;YACtG,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;SACjG,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC;gBAC9B,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,YAAY,EAAE,IAAI,CAAC,YAAY;gBAC/B,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,MAAM,EAAE,IAAI,CAAC,MAAM;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,SAAS,EAAE,IAAI,CAAC,UAAU;gBAC1B,KAAK,EAAE,IAAI,CAAC,QAAQ;gBACpB,QAAQ,EAAE,IAAI,CAAC,SAAS;aACzB,CAAC,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM;gBAAE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,iDAAiD,EAAE,CAAC,EAAE,CAAC;YAEpI,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,gCAAgC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACxF,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACnD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QACzG,CAAC;KACF;IAED;QACE,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EACT,6DAA6D;YAC7D,sFAAsF;QACxF,WAAW,EAAE,EAAE,KAAK,EAAE,4BAA4B,EAAE,YAAY,EAAE,IAAI,EAAE;QACxE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sCAAsC,CAAC;SACpE,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAChD,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YAEtC,+BAA+B;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,EAAE,iBAAiB,CAAC;YACtD,IAAI,KAAK,GAAG,EAAE,CAAC;YACf,IAAI,IAAI,EAAE,CAAC;gBACT,MAAM,MAAM,GAAG;oBACb,yBAAyB;oBACzB,QAAQ,IAAI,CAAC,GAAG,IAAI,KAAK,EAAE;oBAC3B,SAAS,IAAI,CAAC,UAAU,IAAI,KAAK,OAAO,IAAI,CAAC,UAAU,IAAI,KAAK,EAAE;oBAClE,uBAAuB,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;iBAC/D,CAAC;gBACF,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;oBAC7B,MAAM,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBACzE,CAAC;gBACD,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5B,CAAC;YAED,oBAAoB;YACpB,MAAM,IAAI,GAAG,KAAK,CAAC,eAAe,EAAE,iBAAiB,EAAE,YAAY,CAAC;YACpE,IAAI,IAAI;gBAAE,KAAK,IAAI,wBAAwB,IAAI,EAAE,CAAC;YAElD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,OAAO,GAAG,KAAK,EAAE,CAAC,EAAE,CAAC;QACzE,CAAC;KACF;IAED;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,6EAA6E;YAC7E,2EAA2E;YAC3E,uFAAuF;QACzF,WAAW,EAAE,EAAE,KAAK,EAAE,2BAA2B,EAAE,YAAY,EAAE,IAAI,EAAE;QACvE,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC;YACnB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uFAAuF,CAAC;YACvH,cAAc,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uHAAuH,CAAC;SACzK,CAAC;QACF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACtB,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc;gBAC9B,CAAC,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjF,CAAC,CAAC,MAAM,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAC7C,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,CAAC,cAAc,EAAE,EAAE,CAC9D,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YACtE,mEAAmE;YACnE,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxC,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;gBAClG,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;gBAChF,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;oBACnB,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,GAAG,CACvD,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,MAAM,KAAK,KAAK,CAAC,cAAc,EAAE,EAAE,CAC9D,CAAC;oBACF,OAAO;wBACL,OAAO,EAAE,CAAC;gCACR,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,wBAAwB,IAAI,CAAC,SAAS,sBAAsB,UAAU,CAAC,cAAc,EAAE,aAAa,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;6BAClI,CAAC;qBACH,CAAC;gBACJ,CAAC;YACH,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,wBAAwB,IAAI,CAAC,SAAS,MAAM,KAAK,CAAC,cAAc,EAAE,aAAa,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;qBACxG,CAAC;aACH,CAAC;QACJ,CAAC;KACF;CACF,CAAC;AAEF,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS module — hospital compare, nursing home ratings, Medicare spending, provider data
|
|
3
|
+
*/
|
|
4
|
+
import type { Tool } from "fastmcp";
|
|
5
|
+
import { clearCache as sdkClearCache } from "../sdk/cms.js";
|
|
6
|
+
export declare const name = "cms";
|
|
7
|
+
export declare const displayName = "CMS";
|
|
8
|
+
export declare const description = "Centers for Medicare & Medicaid Services \u2014 hospital compare, nursing home ratings, home health agencies, hospice, dialysis, Medicare spending, HCAHPS patient surveys, quality measures. No API key required.";
|
|
9
|
+
export declare const workflow = "Use cms_search to find datasets by keyword \u2192 cms_hospitals for hospital quality data \u2192 cms_nursing_homes for nursing home ratings \u2192 cms_query for any CMS provider dataset.";
|
|
10
|
+
export declare const tips = "CMS has 100+ provider datasets. Use cms_search to discover them. Common dataset keys: hospital_info, nursing_home_info, hospital_mortality, hospital_readmissions, hospital_infections, hospital_timely_care, hospital_spending, hospital_patient_survey, nursing_home_health_citations. Filter by state using conditions like property='state' value='CA'.";
|
|
11
|
+
export declare const reference: {
|
|
12
|
+
datasets: Record<string, {
|
|
13
|
+
id: string;
|
|
14
|
+
name: string;
|
|
15
|
+
description: string;
|
|
16
|
+
theme: string;
|
|
17
|
+
}>;
|
|
18
|
+
};
|
|
19
|
+
export declare const tools: Tool<any, any>[];
|
|
20
|
+
export { sdkClearCache as clearCache };
|
|
21
|
+
//# sourceMappingURL=cms.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cms.d.ts","sourceRoot":"","sources":["../../src/modules/cms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAIL,UAAU,IAAI,aAAa,EAE5B,MAAM,eAAe,CAAC;AAIvB,eAAO,MAAM,IAAI,QAAQ,CAAC;AAC1B,eAAO,MAAM,WAAW,QAAQ,CAAC;AACjC,eAAO,MAAM,WAAW,uNACyL,CAAC;AAClN,eAAO,MAAM,QAAQ,+LAC0J,CAAC;AAChL,eAAO,MAAM,IAAI,gWAC8U,CAAC;AAChW,eAAO,MAAM,SAAS;;;;;;;CAAyB,CAAC;AA8BhD,eAAO,MAAM,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EA0GjC,CAAC;AAEF,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CMS module — hospital compare, nursing home ratings, Medicare spending, provider data
|
|
3
|
+
*/
|
|
4
|
+
import { z } from "zod";
|
|
5
|
+
import { searchDatasets, queryDataset, queryByKey, clearCache as sdkClearCache, DATASETS, } from "../sdk/cms.js";
|
|
6
|
+
// ─── Metadata ────────────────────────────────────────────────────────
|
|
7
|
+
export const name = "cms";
|
|
8
|
+
export const displayName = "CMS";
|
|
9
|
+
export const description = "Centers for Medicare & Medicaid Services — hospital compare, nursing home ratings, home health agencies, hospice, dialysis, Medicare spending, HCAHPS patient surveys, quality measures. No API key required.";
|
|
10
|
+
export const workflow = "Use cms_search to find datasets by keyword → cms_hospitals for hospital quality data → cms_nursing_homes for nursing home ratings → cms_query for any CMS provider dataset.";
|
|
11
|
+
export const tips = "CMS has 100+ provider datasets. Use cms_search to discover them. Common dataset keys: hospital_info, nursing_home_info, hospital_mortality, hospital_readmissions, hospital_infections, hospital_timely_care, hospital_spending, hospital_patient_survey, nursing_home_health_citations. Filter by state using conditions like property='state' value='CA'.";
|
|
12
|
+
export const reference = { datasets: DATASETS };
|
|
13
|
+
// ─── Helpers ─────────────────────────────────────────────────────────
|
|
14
|
+
function summarizeResults(data, count) {
|
|
15
|
+
if (!data.length)
|
|
16
|
+
return "No records found.";
|
|
17
|
+
const preview = data.slice(0, 10);
|
|
18
|
+
const lines = preview.map((r, i) => {
|
|
19
|
+
// Try to extract key fields for readability
|
|
20
|
+
const name = r.facility_name ?? r.provider_name ?? r.hospital_name ?? r["Facility Name"] ?? r["Provider Name"] ?? "";
|
|
21
|
+
const state = r.state ?? r.provider_state ?? r["State"] ?? "";
|
|
22
|
+
const city = r.city ?? r.provider_city ?? r["City"] ?? "";
|
|
23
|
+
const rating = r.overall_rating ?? r.hospital_overall_rating ?? r["Overall Rating"] ?? "";
|
|
24
|
+
const location = [city, state].filter(Boolean).join(", ");
|
|
25
|
+
const header = name ? `${name}${location ? ` (${location})` : ""}` : `Record ${i + 1}`;
|
|
26
|
+
const ratingStr = rating ? ` — Rating: ${rating}` : "";
|
|
27
|
+
return `[${i + 1}] ${header}${ratingStr}\n ${JSON.stringify(r)}`;
|
|
28
|
+
});
|
|
29
|
+
const total = count ?? data.length;
|
|
30
|
+
const header = `${total} record(s)${total > 10 ? " (showing first 10)" : ""}:`;
|
|
31
|
+
return `${header}\n\n${lines.join("\n\n")}`;
|
|
32
|
+
}
|
|
33
|
+
// ─── Tools ───────────────────────────────────────────────────────────
|
|
34
|
+
export const tools = [
|
|
35
|
+
{
|
|
36
|
+
name: "cms_search",
|
|
37
|
+
description: "Search for CMS provider data datasets by keyword. Returns dataset IDs, titles, and descriptions. Use the ID with cms_query to fetch data.",
|
|
38
|
+
annotations: { title: "CMS Dataset Search", readOnlyHint: true },
|
|
39
|
+
parameters: z.object({
|
|
40
|
+
keyword: z.string().describe("Search keyword (e.g. 'hospital', 'nursing home', 'dialysis', 'hospice', 'readmission', 'infection')"),
|
|
41
|
+
}),
|
|
42
|
+
execute: async (args) => {
|
|
43
|
+
const results = await searchDatasets(args.keyword);
|
|
44
|
+
if (!results.length)
|
|
45
|
+
return { content: [{ type: "text", text: "No datasets found." }] };
|
|
46
|
+
const lines = results.map((d) => `[${d.identifier}] ${d.title}\n ${d.description?.slice(0, 200) ?? ""}${d.theme ? `\n Theme: ${d.theme.join(", ")}` : ""}`);
|
|
47
|
+
return {
|
|
48
|
+
content: [{ type: "text", text: `${results.length} dataset(s) found:\n\n${lines.join("\n\n")}` }],
|
|
49
|
+
};
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
name: "cms_hospitals",
|
|
54
|
+
description: "Query CMS hospital data: general info, quality ratings, mortality, readmissions, infections, patient surveys, Medicare spending. Filter by state or city.",
|
|
55
|
+
annotations: { title: "CMS Hospital Data", readOnlyHint: true },
|
|
56
|
+
parameters: z.object({
|
|
57
|
+
dataset: z
|
|
58
|
+
.enum([
|
|
59
|
+
"hospital_info",
|
|
60
|
+
"hospital_mortality",
|
|
61
|
+
"hospital_readmissions",
|
|
62
|
+
"hospital_infections",
|
|
63
|
+
"hospital_timely_care",
|
|
64
|
+
"hospital_spending",
|
|
65
|
+
"hospital_patient_survey",
|
|
66
|
+
])
|
|
67
|
+
.default("hospital_info")
|
|
68
|
+
.describe("Hospital dataset to query"),
|
|
69
|
+
state: z.string().max(2).optional().describe("Two-letter state code (e.g. CA, TX, NY)"),
|
|
70
|
+
city: z.string().optional().describe("City name"),
|
|
71
|
+
limit: z.number().optional().describe("Max results (default 50)"),
|
|
72
|
+
}),
|
|
73
|
+
execute: async (args) => {
|
|
74
|
+
const conditions = [];
|
|
75
|
+
if (args.state)
|
|
76
|
+
conditions.push({ property: "state", value: args.state.toUpperCase() });
|
|
77
|
+
if (args.city)
|
|
78
|
+
conditions.push({ property: "city", value: args.city.toUpperCase() });
|
|
79
|
+
const result = await queryByKey(args.dataset, conditions, args.limit);
|
|
80
|
+
return { content: [{ type: "text", text: summarizeResults(result.results, result.count) }] };
|
|
81
|
+
},
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
name: "cms_nursing_homes",
|
|
85
|
+
description: "Query CMS nursing home data: provider info with five-star ratings, quality measures, health deficiencies/citations. Filter by state.",
|
|
86
|
+
annotations: { title: "CMS Nursing Home Data", readOnlyHint: true },
|
|
87
|
+
parameters: z.object({
|
|
88
|
+
dataset: z
|
|
89
|
+
.enum(["nursing_home_info", "nursing_home_health_citations", "nursing_home_quality"])
|
|
90
|
+
.default("nursing_home_info")
|
|
91
|
+
.describe("Nursing home dataset to query"),
|
|
92
|
+
state: z.string().max(2).optional().describe("Two-letter state code"),
|
|
93
|
+
limit: z.number().optional().describe("Max results (default 50)"),
|
|
94
|
+
}),
|
|
95
|
+
execute: async (args) => {
|
|
96
|
+
const conditions = [];
|
|
97
|
+
if (args.state)
|
|
98
|
+
conditions.push({ property: "state", value: args.state.toUpperCase() });
|
|
99
|
+
const result = await queryByKey(args.dataset, conditions, args.limit);
|
|
100
|
+
return { content: [{ type: "text", text: summarizeResults(result.results, result.count) }] };
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
name: "cms_query",
|
|
105
|
+
description: "General-purpose query against any CMS provider dataset by dataset identifier. Use cms_search to find available datasets and their IDs. Supports filtering by any field.",
|
|
106
|
+
annotations: { title: "CMS Query", readOnlyHint: true },
|
|
107
|
+
parameters: z.object({
|
|
108
|
+
dataset_id: z
|
|
109
|
+
.string()
|
|
110
|
+
.describe("CMS dataset identifier (e.g. 'xubh-q36u' for hospitals, '4pq5-n9py' for nursing homes) or catalog key"),
|
|
111
|
+
filter_field: z.string().optional().describe("Field name to filter on (e.g. 'state', 'city', 'provider_name')"),
|
|
112
|
+
filter_value: z.string().optional().describe("Value to filter for"),
|
|
113
|
+
limit: z.number().optional().describe("Max results (default 50)"),
|
|
114
|
+
offset: z.number().optional().describe("Offset for pagination"),
|
|
115
|
+
}),
|
|
116
|
+
execute: async (args) => {
|
|
117
|
+
// Check if dataset_id is a catalog key
|
|
118
|
+
const catalogEntry = DATASETS[args.dataset_id];
|
|
119
|
+
const datasetId = catalogEntry?.id ?? args.dataset_id;
|
|
120
|
+
const conditions = [];
|
|
121
|
+
if (args.filter_field && args.filter_value) {
|
|
122
|
+
conditions.push({ property: args.filter_field, value: args.filter_value });
|
|
123
|
+
}
|
|
124
|
+
const result = await queryDataset({
|
|
125
|
+
datasetId,
|
|
126
|
+
conditions: conditions.length ? conditions : undefined,
|
|
127
|
+
limit: args.limit,
|
|
128
|
+
offset: args.offset,
|
|
129
|
+
});
|
|
130
|
+
return { content: [{ type: "text", text: summarizeResults(result.results, result.count) }] };
|
|
131
|
+
},
|
|
132
|
+
},
|
|
133
|
+
];
|
|
134
|
+
export { sdkClearCache as clearCache };
|
|
135
|
+
//# sourceMappingURL=cms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cms.js","sourceRoot":"","sources":["../../src/modules/cms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* College Scorecard MCP module — college costs, graduation rates, earnings, debt.
|
|
3
|
+
*/
|
|
4
|
+
import type { Tool, InputPrompt } from "fastmcp";
|
|
5
|
+
export declare const name = "college-scorecard";
|
|
6
|
+
export declare const displayName = "College Scorecard";
|
|
7
|
+
export declare const description = "College costs, graduation rates, post-graduation earnings, student debt, admission rates for every U.S. college and university";
|
|
8
|
+
export declare const auth: {
|
|
9
|
+
envVar: string;
|
|
10
|
+
signup: string;
|
|
11
|
+
};
|
|
12
|
+
export declare const workflow = "scorecard_search to find schools \u2192 scorecard_compare for side-by-side \u2192 scorecard_top for rankings";
|
|
13
|
+
export declare const tips: string;
|
|
14
|
+
export declare const reference: {
|
|
15
|
+
ownership: Record<number, string>;
|
|
16
|
+
degreeTypes: Record<number, string>;
|
|
17
|
+
popularFields: {
|
|
18
|
+
"latest.cost.tuition.in_state": string;
|
|
19
|
+
"latest.cost.tuition.out_of_state": string;
|
|
20
|
+
"latest.cost.avg_net_price.overall": string;
|
|
21
|
+
"latest.admissions.admission_rate.overall": string;
|
|
22
|
+
"latest.completion.rate_suppressed.overall": string;
|
|
23
|
+
"latest.earnings.10_yrs_after_entry.median": string;
|
|
24
|
+
"latest.earnings.6_yrs_after_entry.median": string;
|
|
25
|
+
"latest.aid.median_debt.completers.overall": string;
|
|
26
|
+
"latest.aid.pell_grant_rate": string;
|
|
27
|
+
"latest.student.size": string;
|
|
28
|
+
};
|
|
29
|
+
docs: {
|
|
30
|
+
"College Scorecard": string;
|
|
31
|
+
"API Documentation": string;
|
|
32
|
+
"Data Dictionary": string;
|
|
33
|
+
"Get API Key": string;
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
export declare const tools: Tool<any, any>[];
|
|
37
|
+
export declare const prompts: InputPrompt<any, any>[];
|
|
38
|
+
export { clearCache } from "../sdk/college-scorecard.js";
|
|
39
|
+
//# sourceMappingURL=college-scorecard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"college-scorecard.d.ts","sourceRoot":"","sources":["../../src/modules/college-scorecard.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAejD,eAAO,MAAM,IAAI,sBAAsB,CAAC;AACxC,eAAO,MAAM,WAAW,sBAAsB,CAAC;AAC/C,eAAO,MAAM,WAAW,mIAAmI,CAAC;AAC5J,eAAO,MAAM,IAAI;;;CAAyE,CAAC;AAC3F,eAAO,MAAM,QAAQ,iHAAuG,CAAC;AAC7H,eAAO,MAAM,IAAI,QAIyD,CAAC;AAE3E,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;CAqBrB,CAAC;AA6BF,eAAO,MAAM,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAkHjC,CAAC;AAIF,eAAO,MAAM,OAAO,EAAE,WAAW,CAAC,GAAG,EAAE,GAAG,CAAC,EAa1C,CAAC;AAEF,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC"}
|