fda-mcp-server 0.0.13 → 0.0.14

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/dist/index.js CHANGED
@@ -15,10 +15,16 @@ import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/
15
15
  import { z } from "zod";
16
16
  import { searchEnforcement, searchDeviceEvents } from "./fda-client.js";
17
17
  import { isEnrichedAvailable, validateApiKey, testConnection, csaRiskAssessment, citationAnalysis, supplierQualification, companyEnrichedProfile, } from "./db.js";
18
- const server = new McpServer({
19
- name: "fda-mcp-server",
20
- version: "1.0.0",
21
- });
18
+ function createServer() {
19
+ const server = new McpServer({
20
+ name: "fda-mcp-server",
21
+ version: "1.0.0",
22
+ });
23
+ registerTools(server);
24
+ return server;
25
+ }
26
+ // Single server instance for stdio mode
27
+ let stdioServer = null;
22
28
  // ─── Helper: gate enriched tools ─────────────────────────────────────────────
23
29
  function enrichedGate(apiKey) {
24
30
  if (!isEnrichedAvailable()) {
@@ -56,431 +62,433 @@ async function enrichedConnectionGate(apiKey) {
56
62
  }
57
63
  return { ok: true };
58
64
  }
59
- // ─── Tool: search_recalls ────────────────────────────────────────────────────
60
- server.tool("search_recalls", "Search FDA recalls and enforcement actions via the openFDA API. Covers drugs, devices, and food. Filter by severity, firm, state, or date range.", {
61
- search: z.string().optional().describe("Free-text search across all recall fields"),
62
- product_type: z
63
- .enum(["drug", "device", "food"])
64
- .optional()
65
- .describe("Product type (default: drug)"),
66
- classification: z
67
- .enum(["Class I", "Class II", "Class III"])
68
- .optional()
69
- .describe("Recall classification (I = most serious)"),
70
- recalling_firm: z.string().optional().describe("Filter by recalling firm name"),
71
- state: z.string().optional().describe("Filter by US state (two-letter code)"),
72
- date_from: z.string().optional().describe("Start date (YYYY-MM-DD)"),
73
- date_to: z.string().optional().describe("End date (YYYY-MM-DD)"),
74
- limit: z.number().min(1).max(100).optional().describe("Max results (default 25, max 100)"),
75
- skip: z.number().min(0).optional().describe("Pagination offset (default 0)"),
76
- }, async (params) => {
77
- try {
78
- const result = await searchEnforcement(params);
79
- if (result.records.length === 0) {
80
- return { content: [{ type: "text", text: "No recalls found." }] };
81
- }
82
- const lines = [
83
- `## FDA Recalls`,
84
- `**${result.total} total** | Showing ${result.records.length}`,
85
- ``,
86
- ];
87
- for (const rec of result.records) {
88
- lines.push(`### ${rec.recalling_firm} — ${rec.recall_number}`);
89
- lines.push(`- **${rec.classification}** | ${rec.status} | ${rec.product_type} | ${rec.voluntary_mandated}`);
90
- lines.push(`- **Location:** ${[rec.city, rec.state, rec.country].filter(Boolean).join(", ")}`);
91
- lines.push(`- **Initiated:** ${rec.recall_initiation_date}`);
92
- lines.push(`- **Reason:** ${rec.reason_for_recall}`);
93
- if (rec.product_description) {
94
- const desc = rec.product_description.length > 200
95
- ? rec.product_description.substring(0, 200) + "..."
96
- : rec.product_description;
97
- lines.push(`- **Product:** ${desc}`);
65
+ function registerTools(server) {
66
+ // ─── Tool: search_recalls ────────────────────────────────────────────────────
67
+ server.tool("search_recalls", "Search FDA recalls and enforcement actions via the openFDA API. Covers drugs, devices, and food. Filter by severity, firm, state, or date range.", {
68
+ search: z.string().optional().describe("Free-text search across all recall fields"),
69
+ product_type: z
70
+ .enum(["drug", "device", "food"])
71
+ .optional()
72
+ .describe("Product type (default: drug)"),
73
+ classification: z
74
+ .enum(["Class I", "Class II", "Class III"])
75
+ .optional()
76
+ .describe("Recall classification (I = most serious)"),
77
+ recalling_firm: z.string().optional().describe("Filter by recalling firm name"),
78
+ state: z.string().optional().describe("Filter by US state (two-letter code)"),
79
+ date_from: z.string().optional().describe("Start date (YYYY-MM-DD)"),
80
+ date_to: z.string().optional().describe("End date (YYYY-MM-DD)"),
81
+ limit: z.number().min(1).max(100).optional().describe("Max results (default 25, max 100)"),
82
+ skip: z.number().min(0).optional().describe("Pagination offset (default 0)"),
83
+ }, async (params) => {
84
+ try {
85
+ const result = await searchEnforcement(params);
86
+ if (result.records.length === 0) {
87
+ return { content: [{ type: "text", text: "No recalls found." }] };
98
88
  }
99
- lines.push(``);
89
+ const lines = [
90
+ `## FDA Recalls`,
91
+ `**${result.total} total** | Showing ${result.records.length}`,
92
+ ``,
93
+ ];
94
+ for (const rec of result.records) {
95
+ lines.push(`### ${rec.recalling_firm} — ${rec.recall_number}`);
96
+ lines.push(`- **${rec.classification}** | ${rec.status} | ${rec.product_type} | ${rec.voluntary_mandated}`);
97
+ lines.push(`- **Location:** ${[rec.city, rec.state, rec.country].filter(Boolean).join(", ")}`);
98
+ lines.push(`- **Initiated:** ${rec.recall_initiation_date}`);
99
+ lines.push(`- **Reason:** ${rec.reason_for_recall}`);
100
+ if (rec.product_description) {
101
+ const desc = rec.product_description.length > 200
102
+ ? rec.product_description.substring(0, 200) + "..."
103
+ : rec.product_description;
104
+ lines.push(`- **Product:** ${desc}`);
105
+ }
106
+ lines.push(``);
107
+ }
108
+ return { content: [{ type: "text", text: lines.join("\n") }] };
100
109
  }
101
- return { content: [{ type: "text", text: lines.join("\n") }] };
102
- }
103
- catch (error) {
104
- return {
105
- content: [
106
- {
107
- type: "text",
108
- text: `Error: ${error instanceof Error ? error.message : String(error)}`,
109
- },
110
- ],
111
- isError: true,
112
- };
113
- }
114
- });
115
- // ─── Tool: search_device_events ──────────────────────────────────────────────
116
- server.tool("search_device_events", "Search FDA device adverse events from the MAUDE database. Returns manufacturer, device, event type, patient outcomes, and narrative descriptions. Use this to assess post-market safety signals.", {
117
- search: z.string().optional().describe("Free-text search across event fields"),
118
- manufacturer: z.string().optional().describe("Filter by device manufacturer name"),
119
- brand_name: z.string().optional().describe("Filter by device brand name"),
120
- event_type: z
121
- .enum(["Injury", "Malfunction", "Death", "Other"])
122
- .optional()
123
- .describe("Filter by event type"),
124
- date_from: z.string().optional().describe("Start date (YYYY-MM-DD)"),
125
- date_to: z.string().optional().describe("End date (YYYY-MM-DD)"),
126
- limit: z.number().min(1).max(100).optional().describe("Max results (default 25, max 100)"),
127
- skip: z.number().min(0).optional().describe("Pagination offset (default 0)"),
128
- }, async (params) => {
129
- try {
130
- const result = await searchDeviceEvents(params);
131
- if (result.events.length === 0) {
132
- return { content: [{ type: "text", text: "No device adverse events found." }] };
110
+ catch (error) {
111
+ return {
112
+ content: [
113
+ {
114
+ type: "text",
115
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
116
+ },
117
+ ],
118
+ isError: true,
119
+ };
133
120
  }
134
- const lines = [
135
- `## FDA Device Adverse Events (MAUDE)`,
136
- `**${result.total} total** | Showing ${result.events.length}`,
137
- ``,
138
- ];
139
- for (const evt of result.events) {
140
- lines.push(`### ${evt.manufacturer || "Unknown"} — ${evt.report_number}`);
141
- lines.push(`- **Event Type:** ${evt.event_type}`);
142
- lines.push(`- **Device:** ${evt.brand_name || evt.device_name} (${evt.device_name})`);
143
- lines.push(`- **Date Received:** ${evt.date_received}`);
144
- if (evt.date_of_event)
145
- lines.push(`- **Date of Event:** ${evt.date_of_event}`);
146
- if (evt.event_description) {
147
- const desc = evt.event_description.length > 300
148
- ? evt.event_description.substring(0, 300) + "..."
149
- : evt.event_description;
150
- lines.push(`- **Description:** ${desc}`);
121
+ });
122
+ // ─── Tool: search_device_events ──────────────────────────────────────────────
123
+ server.tool("search_device_events", "Search FDA device adverse events from the MAUDE database. Returns manufacturer, device, event type, patient outcomes, and narrative descriptions. Use this to assess post-market safety signals.", {
124
+ search: z.string().optional().describe("Free-text search across event fields"),
125
+ manufacturer: z.string().optional().describe("Filter by device manufacturer name"),
126
+ brand_name: z.string().optional().describe("Filter by device brand name"),
127
+ event_type: z
128
+ .enum(["Injury", "Malfunction", "Death", "Other"])
129
+ .optional()
130
+ .describe("Filter by event type"),
131
+ date_from: z.string().optional().describe("Start date (YYYY-MM-DD)"),
132
+ date_to: z.string().optional().describe("End date (YYYY-MM-DD)"),
133
+ limit: z.number().min(1).max(100).optional().describe("Max results (default 25, max 100)"),
134
+ skip: z.number().min(0).optional().describe("Pagination offset (default 0)"),
135
+ }, async (params) => {
136
+ try {
137
+ const result = await searchDeviceEvents(params);
138
+ if (result.events.length === 0) {
139
+ return { content: [{ type: "text", text: "No device adverse events found." }] };
151
140
  }
152
- lines.push(``);
153
- }
154
- return { content: [{ type: "text", text: lines.join("\n") }] };
155
- }
156
- catch (error) {
157
- return {
158
- content: [
159
- {
160
- type: "text",
161
- text: `Error: ${error instanceof Error ? error.message : String(error)}`,
162
- },
163
- ],
164
- isError: true,
165
- };
166
- }
167
- });
168
- // ─── Tool: company_enforcement_profile ───────────────────────────────────────
169
- server.tool("company_enforcement_profile", "Build a comprehensive FDA enforcement profile for a company. Combines live openFDA recall and adverse event data with enriched warning letter and 483 inspection data (when available). Use this for a quick compliance posture check.", {
170
- company_name: z.string().describe("Company or firm name to profile"),
171
- product_type: z
172
- .enum(["drug", "device", "food"])
173
- .optional()
174
- .describe("Product type for recall search (default: device)"),
175
- }, async (params, extra) => {
176
- try {
177
- // Always fetch live openFDA data
178
- const [recalls, events] = await Promise.all([
179
- searchEnforcement({
180
- recalling_firm: params.company_name,
181
- product_type: params.product_type ?? "device",
182
- limit: 5,
183
- }).catch(() => ({ total: 0, records: [] })),
184
- searchDeviceEvents({
185
- manufacturer: params.company_name,
186
- limit: 5,
187
- }).catch(() => ({ total: 0, events: [] })),
188
- ]);
189
- // Fetch enriched data if available and authorized
190
- let enriched = null;
191
- const authCheck = enrichedGate(extra.authInfo?.token);
192
- if (authCheck.ok) {
193
- const connected = await testConnection().catch(() => false);
194
- if (connected) {
195
- enriched = await companyEnrichedProfile(params.company_name).catch(() => null);
141
+ const lines = [
142
+ `## FDA Device Adverse Events (MAUDE)`,
143
+ `**${result.total} total** | Showing ${result.events.length}`,
144
+ ``,
145
+ ];
146
+ for (const evt of result.events) {
147
+ lines.push(`### ${evt.manufacturer || "Unknown"} — ${evt.report_number}`);
148
+ lines.push(`- **Event Type:** ${evt.event_type}`);
149
+ lines.push(`- **Device:** ${evt.brand_name || evt.device_name} (${evt.device_name})`);
150
+ lines.push(`- **Date Received:** ${evt.date_received}`);
151
+ if (evt.date_of_event)
152
+ lines.push(`- **Date of Event:** ${evt.date_of_event}`);
153
+ if (evt.event_description) {
154
+ const desc = evt.event_description.length > 300
155
+ ? evt.event_description.substring(0, 300) + "..."
156
+ : evt.event_description;
157
+ lines.push(`- **Description:** ${desc}`);
158
+ }
159
+ lines.push(``);
196
160
  }
161
+ return { content: [{ type: "text", text: lines.join("\n") }] };
197
162
  }
198
- const lines = [
199
- `## FDA Enforcement Profile: ${params.company_name}`,
200
- ``,
201
- `### Summary`,
202
- ];
203
- if (enriched) {
204
- lines.push(`- **Warning Letters:** ${enriched.total_warning_letters}`);
205
- lines.push(`- **483 Inspections:** ${enriched.total_inspections}`);
163
+ catch (error) {
164
+ return {
165
+ content: [
166
+ {
167
+ type: "text",
168
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
169
+ },
170
+ ],
171
+ isError: true,
172
+ };
206
173
  }
207
- lines.push(`- **Recalls:** ${recalls.total}`);
208
- lines.push(`- **Adverse Events:** ${events.total}`);
209
- lines.push(``);
210
- // Warning letters (enriched)
211
- if (enriched && enriched.warning_letters.length > 0) {
212
- lines.push(`### Warning Letters (${enriched.total_warning_letters} total)`);
213
- lines.push(`| Date | Center | Regime | CSA | Subject |`);
214
- lines.push(`|------|--------|--------|-----|---------|`);
215
- for (const wl of enriched.warning_letters) {
216
- const subject = wl.subject.length > 40 ? wl.subject.substring(0, 40) + "..." : wl.subject;
217
- lines.push(`| ${wl.issue_date} | ${wl.center} | ${wl.regime} | ${wl.csa_relevant ? "YES" : "no"} | ${subject} |`);
174
+ });
175
+ // ─── Tool: company_enforcement_profile ───────────────────────────────────────
176
+ server.tool("company_enforcement_profile", "Build a comprehensive FDA enforcement profile for a company. Combines live openFDA recall and adverse event data with enriched warning letter and 483 inspection data (when available). Use this for a quick compliance posture check.", {
177
+ company_name: z.string().describe("Company or firm name to profile"),
178
+ product_type: z
179
+ .enum(["drug", "device", "food"])
180
+ .optional()
181
+ .describe("Product type for recall search (default: device)"),
182
+ }, async (params, extra) => {
183
+ try {
184
+ // Always fetch live openFDA data
185
+ const [recalls, events] = await Promise.all([
186
+ searchEnforcement({
187
+ recalling_firm: params.company_name,
188
+ product_type: params.product_type ?? "device",
189
+ limit: 5,
190
+ }).catch(() => ({ total: 0, records: [] })),
191
+ searchDeviceEvents({
192
+ manufacturer: params.company_name,
193
+ limit: 5,
194
+ }).catch(() => ({ total: 0, events: [] })),
195
+ ]);
196
+ // Fetch enriched data if available and authorized
197
+ let enriched = null;
198
+ const authCheck = enrichedGate(extra.authInfo?.token);
199
+ if (authCheck.ok) {
200
+ const connected = await testConnection().catch(() => false);
201
+ if (connected) {
202
+ enriched = await companyEnrichedProfile(params.company_name).catch(() => null);
203
+ }
218
204
  }
219
- lines.push(``);
220
- }
221
- // 483 inspections (enriched)
222
- if (enriched && enriched.inspections.length > 0) {
223
- lines.push(`### 483 Inspections (${enriched.total_inspections} total)`);
224
- lines.push(`| Date | Center | Area | CSA |`);
225
- lines.push(`|------|--------|------|-----|`);
226
- for (const insp of enriched.inspections) {
227
- lines.push(`| ${insp.inspection_date} | ${insp.center} | ${insp.product_area} | ${insp.csa_relevant ? "YES" : "no"} |`);
205
+ const lines = [
206
+ `## FDA Enforcement Profile: ${params.company_name}`,
207
+ ``,
208
+ `### Summary`,
209
+ ];
210
+ if (enriched) {
211
+ lines.push(`- **Warning Letters:** ${enriched.total_warning_letters}`);
212
+ lines.push(`- **483 Inspections:** ${enriched.total_inspections}`);
228
213
  }
214
+ lines.push(`- **Recalls:** ${recalls.total}`);
215
+ lines.push(`- **Adverse Events:** ${events.total}`);
229
216
  lines.push(``);
230
- }
231
- // Recalls (live)
232
- if (recalls.records.length > 0) {
233
- lines.push(`### Recalls (${recalls.total} total)`);
234
- for (const r of recalls.records) {
235
- lines.push(`- **${r.recall_initiation_date}** | ${r.classification} | ${r.status} | ${r.reason_for_recall.substring(0, 100)}...`);
217
+ // Warning letters (enriched)
218
+ if (enriched && enriched.warning_letters.length > 0) {
219
+ lines.push(`### Warning Letters (${enriched.total_warning_letters} total)`);
220
+ lines.push(`| Date | Center | Regime | CSA | Subject |`);
221
+ lines.push(`|------|--------|--------|-----|---------|`);
222
+ for (const wl of enriched.warning_letters) {
223
+ const subject = wl.subject.length > 40 ? wl.subject.substring(0, 40) + "..." : wl.subject;
224
+ lines.push(`| ${wl.issue_date} | ${wl.center} | ${wl.regime} | ${wl.csa_relevant ? "YES" : "no"} | ${subject} |`);
225
+ }
226
+ lines.push(``);
236
227
  }
237
- lines.push(``);
238
- }
239
- // Adverse events (live)
240
- if (events.events.length > 0) {
241
- lines.push(`### Recent Adverse Events (${events.total} total)`);
242
- for (const e of events.events) {
243
- lines.push(`- **${e.date_received}** | ${e.event_type} | ${e.brand_name || e.device_name} | ${e.manufacturer}`);
228
+ // 483 inspections (enriched)
229
+ if (enriched && enriched.inspections.length > 0) {
230
+ lines.push(`### 483 Inspections (${enriched.total_inspections} total)`);
231
+ lines.push(`| Date | Center | Area | CSA |`);
232
+ lines.push(`|------|--------|------|-----|`);
233
+ for (const insp of enriched.inspections) {
234
+ lines.push(`| ${insp.inspection_date} | ${insp.center} | ${insp.product_area} | ${insp.csa_relevant ? "YES" : "no"} |`);
235
+ }
236
+ lines.push(``);
244
237
  }
245
- lines.push(``);
246
- }
247
- if (!enriched && isEnrichedAvailable()) {
248
- lines.push(`*Note: Enriched data unavailable. Set DATABASE_URL to include warning letters and 483 inspection data.*`);
249
- }
250
- else if (!enriched) {
251
- lines.push(`*Tip: Enable enriched tools (DATABASE_URL) to include warning letters, 483 inspections, and CSA analysis.*`);
238
+ // Recalls (live)
239
+ if (recalls.records.length > 0) {
240
+ lines.push(`### Recalls (${recalls.total} total)`);
241
+ for (const r of recalls.records) {
242
+ lines.push(`- **${r.recall_initiation_date}** | ${r.classification} | ${r.status} | ${r.reason_for_recall.substring(0, 100)}...`);
243
+ }
244
+ lines.push(``);
245
+ }
246
+ // Adverse events (live)
247
+ if (events.events.length > 0) {
248
+ lines.push(`### Recent Adverse Events (${events.total} total)`);
249
+ for (const e of events.events) {
250
+ lines.push(`- **${e.date_received}** | ${e.event_type} | ${e.brand_name || e.device_name} | ${e.manufacturer}`);
251
+ }
252
+ lines.push(``);
253
+ }
254
+ if (!enriched && isEnrichedAvailable()) {
255
+ lines.push(`*Note: Enriched data unavailable. Set DATABASE_URL to include warning letters and 483 inspection data.*`);
256
+ }
257
+ else if (!enriched) {
258
+ lines.push(`*Tip: Enable enriched tools (DATABASE_URL) to include warning letters, 483 inspections, and CSA analysis.*`);
259
+ }
260
+ return { content: [{ type: "text", text: lines.join("\n") }] };
252
261
  }
253
- return { content: [{ type: "text", text: lines.join("\n") }] };
254
- }
255
- catch (error) {
256
- return {
257
- content: [
258
- {
259
- type: "text",
260
- text: `Error: ${error instanceof Error ? error.message : String(error)}`,
261
- },
262
- ],
263
- isError: true,
264
- };
265
- }
266
- });
267
- // ─── Enriched Tools (require DATABASE_URL → fda-csa-data PostgreSQL) ─────────
268
- server.tool("csa_risk_assessment", "Assess a company's Computer Software Assurance (CSA) enforcement risk. Returns risk score, CSA-specific citation counts, failure modes, and escalation analysis from the enriched fda-csa-data dataset.", {
269
- company_name: z.string().describe("Company or firm name to assess"),
270
- }, async (params, extra) => {
271
- const gate = await enrichedConnectionGate(extra.authInfo?.token);
272
- if (!gate.ok)
273
- return { content: gate.content };
274
- try {
275
- const result = await csaRiskAssessment(params.company_name);
276
- if (!result) {
262
+ catch (error) {
277
263
  return {
278
264
  content: [
279
- { type: "text", text: `No data found for "${params.company_name}".` },
265
+ {
266
+ type: "text",
267
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
268
+ },
280
269
  ],
270
+ isError: true,
281
271
  };
282
272
  }
283
- const lines = [
284
- `## CSA Risk Assessment: ${result.company_name}`,
285
- ``,
286
- `### Risk Score: ${result.risk_score} ${result.risk_level}`,
287
- ``,
288
- `| Metric | Total | CSA-Specific |`,
289
- `|--------|------:|-------------:|`,
290
- `| Warning Letters | ${result.warning_letter_count} | ${result.csa_warning_letter_count} |`,
291
- `| Citations | ${result.total_citations} | ${result.csa_citations} |`,
292
- `| 483 Inspections | ${result.inspection_count} | ${result.csa_inspection_count} |`,
293
- ``,
294
- `**Escalation Multiplier:** ${result.escalation_multiplier}x`,
295
- ``,
296
- ];
297
- if (result.top_cfr_citations.length > 0) {
298
- lines.push(`### Top CFR Citations`);
299
- for (const c of result.top_cfr_citations) {
300
- lines.push(`- **${c.cfr_full}** (${c.category}) — ${c.count}`);
273
+ });
274
+ // ─── Enriched Tools (require DATABASE_URL → fda-csa-data PostgreSQL) ─────────
275
+ server.tool("csa_risk_assessment", "Assess a company's Computer Software Assurance (CSA) enforcement risk. Returns risk score, CSA-specific citation counts, failure modes, and escalation analysis from the enriched fda-csa-data dataset.", {
276
+ company_name: z.string().describe("Company or firm name to assess"),
277
+ }, async (params, extra) => {
278
+ const gate = await enrichedConnectionGate(extra.authInfo?.token);
279
+ if (!gate.ok)
280
+ return { content: gate.content };
281
+ try {
282
+ const result = await csaRiskAssessment(params.company_name);
283
+ if (!result) {
284
+ return {
285
+ content: [
286
+ { type: "text", text: `No data found for "${params.company_name}".` },
287
+ ],
288
+ };
301
289
  }
302
- lines.push(``);
303
- }
304
- if (result.failure_modes.length > 0) {
305
- lines.push(`### Failure Modes`);
306
- for (const fm of result.failure_modes) {
307
- lines.push(`- ${fm}`);
290
+ const lines = [
291
+ `## CSA Risk Assessment: ${result.company_name}`,
292
+ ``,
293
+ `### Risk Score: ${result.risk_score} — ${result.risk_level}`,
294
+ ``,
295
+ `| Metric | Total | CSA-Specific |`,
296
+ `|--------|------:|-------------:|`,
297
+ `| Warning Letters | ${result.warning_letter_count} | ${result.csa_warning_letter_count} |`,
298
+ `| Citations | ${result.total_citations} | ${result.csa_citations} |`,
299
+ `| 483 Inspections | ${result.inspection_count} | ${result.csa_inspection_count} |`,
300
+ ``,
301
+ `**Escalation Multiplier:** ${result.escalation_multiplier}x`,
302
+ ``,
303
+ ];
304
+ if (result.top_cfr_citations.length > 0) {
305
+ lines.push(`### Top CFR Citations`);
306
+ for (const c of result.top_cfr_citations) {
307
+ lines.push(`- **${c.cfr_full}** (${c.category}) — ${c.count}`);
308
+ }
309
+ lines.push(``);
308
310
  }
309
- lines.push(``);
311
+ if (result.failure_modes.length > 0) {
312
+ lines.push(`### Failure Modes`);
313
+ for (const fm of result.failure_modes) {
314
+ lines.push(`- ${fm}`);
315
+ }
316
+ lines.push(``);
317
+ }
318
+ return { content: [{ type: "text", text: lines.join("\n") }] };
310
319
  }
311
- return { content: [{ type: "text", text: lines.join("\n") }] };
312
- }
313
- catch (error) {
314
- return {
315
- content: [
316
- {
317
- type: "text",
318
- text: `Error: ${error instanceof Error ? error.message : String(error)}`,
319
- },
320
- ],
321
- isError: true,
322
- };
323
- }
324
- });
325
- server.tool("citation_analysis", "Analyze FDA citation patterns across warning letters. Break down by CFR part, section, category, and type. Identify CSA-relevant percentages. Powered by the enriched fda-csa-data dataset.", {
326
- cfr_part: z.string().optional().describe("Filter by CFR part (e.g., '820', '211', '11')"),
327
- category: z
328
- .string()
329
- .optional()
330
- .describe("Filter by category (e.g., 'software_validation', 'design_controls', 'capa')"),
331
- center: z.string().optional().describe("Filter by FDA center (e.g., 'CDRH', 'CDER')"),
332
- fiscal_year: z.number().optional().describe("Filter by fiscal year (e.g., 2024, 2025)"),
333
- }, async (params, extra) => {
334
- const gate = await enrichedConnectionGate(extra.authInfo?.token);
335
- if (!gate.ok)
336
- return { content: gate.content };
337
- try {
338
- const result = await citationAnalysis(params);
339
- if (!result) {
340
- return { content: [{ type: "text", text: "No citation data found." }] };
320
+ catch (error) {
321
+ return {
322
+ content: [
323
+ {
324
+ type: "text",
325
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
326
+ },
327
+ ],
328
+ isError: true,
329
+ };
341
330
  }
342
- const filters = [
343
- params.cfr_part && `CFR Part ${params.cfr_part}`,
344
- params.category && `Category: ${params.category}`,
345
- params.center && `Center: ${params.center}`,
346
- params.fiscal_year && `FY${params.fiscal_year}`,
347
- ]
348
- .filter(Boolean)
349
- .join(" | ");
350
- const lines = [
351
- `## FDA Citation Analysis`,
352
- filters ? `**Filters:** ${filters}` : `**Scope:** All citations`,
353
- `**Total:** ${result.total_citations} | **CSA-Relevant:** ${result.csa_percentage}%`,
354
- ``,
355
- ];
356
- if (result.by_cfr_part.length > 0) {
357
- lines.push(`### By CFR Part`);
358
- for (const p of result.by_cfr_part) {
359
- lines.push(`- **Part ${p.part}** — ${p.count}`);
331
+ });
332
+ server.tool("citation_analysis", "Analyze FDA citation patterns across warning letters. Break down by CFR part, section, category, and type. Identify CSA-relevant percentages. Powered by the enriched fda-csa-data dataset.", {
333
+ cfr_part: z.string().optional().describe("Filter by CFR part (e.g., '820', '211', '11')"),
334
+ category: z
335
+ .string()
336
+ .optional()
337
+ .describe("Filter by category (e.g., 'software_validation', 'design_controls', 'capa')"),
338
+ center: z.string().optional().describe("Filter by FDA center (e.g., 'CDRH', 'CDER')"),
339
+ fiscal_year: z.number().optional().describe("Filter by fiscal year (e.g., 2024, 2025)"),
340
+ }, async (params, extra) => {
341
+ const gate = await enrichedConnectionGate(extra.authInfo?.token);
342
+ if (!gate.ok)
343
+ return { content: gate.content };
344
+ try {
345
+ const result = await citationAnalysis(params);
346
+ if (!result) {
347
+ return { content: [{ type: "text", text: "No citation data found." }] };
360
348
  }
361
- lines.push(``);
362
- }
363
- if (result.by_category.length > 0) {
364
- lines.push(`### By Category`);
365
- for (const c of result.by_category) {
366
- const csa = c.csa_relevant ? " (CSA)" : "";
367
- lines.push(`- **${c.category}** — ${c.count}${csa}`);
349
+ const filters = [
350
+ params.cfr_part && `CFR Part ${params.cfr_part}`,
351
+ params.category && `Category: ${params.category}`,
352
+ params.center && `Center: ${params.center}`,
353
+ params.fiscal_year && `FY${params.fiscal_year}`,
354
+ ]
355
+ .filter(Boolean)
356
+ .join(" | ");
357
+ const lines = [
358
+ `## FDA Citation Analysis`,
359
+ filters ? `**Filters:** ${filters}` : `**Scope:** All citations`,
360
+ `**Total:** ${result.total_citations} | **CSA-Relevant:** ${result.csa_percentage}%`,
361
+ ``,
362
+ ];
363
+ if (result.by_cfr_part.length > 0) {
364
+ lines.push(`### By CFR Part`);
365
+ for (const p of result.by_cfr_part) {
366
+ lines.push(`- **Part ${p.part}** — ${p.count}`);
367
+ }
368
+ lines.push(``);
368
369
  }
369
- lines.push(``);
370
- }
371
- if (result.top_sections.length > 0) {
372
- lines.push(`### Top Sections`);
373
- for (const s of result.top_sections) {
374
- lines.push(`- **${s.cfr_full}** (${s.description}) — ${s.count}`);
370
+ if (result.by_category.length > 0) {
371
+ lines.push(`### By Category`);
372
+ for (const c of result.by_category) {
373
+ const csa = c.csa_relevant ? " (CSA)" : "";
374
+ lines.push(`- **${c.category}** ${c.count}${csa}`);
375
+ }
376
+ lines.push(``);
375
377
  }
376
- lines.push(``);
378
+ if (result.top_sections.length > 0) {
379
+ lines.push(`### Top Sections`);
380
+ for (const s of result.top_sections) {
381
+ lines.push(`- **${s.cfr_full}** (${s.description}) — ${s.count}`);
382
+ }
383
+ lines.push(``);
384
+ }
385
+ return { content: [{ type: "text", text: lines.join("\n") }] };
377
386
  }
378
- return { content: [{ type: "text", text: lines.join("\n") }] };
379
- }
380
- catch (error) {
381
- return {
382
- content: [
383
- {
384
- type: "text",
385
- text: `Error: ${error instanceof Error ? error.message : String(error)}`,
386
- },
387
- ],
388
- isError: true,
389
- };
390
- }
391
- });
392
- server.tool("supplier_qualification_report", "Generate an audit-ready supplier qualification report. Consolidates warning letters, 483 inspections, citations, failure modes, and CSA risk into a single brief with a qualification recommendation. Powered by the enriched fda-csa-data dataset.", {
393
- company_name: z.string().describe("Supplier/company name to qualify"),
394
- }, async (params, extra) => {
395
- const gate = await enrichedConnectionGate(extra.authInfo?.token);
396
- if (!gate.ok)
397
- return { content: gate.content };
398
- try {
399
- const result = await supplierQualification(params.company_name);
400
- if (!result) {
387
+ catch (error) {
401
388
  return {
402
389
  content: [
403
- { type: "text", text: `No data found for "${params.company_name}".` },
390
+ {
391
+ type: "text",
392
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
393
+ },
404
394
  ],
395
+ isError: true,
405
396
  };
406
397
  }
407
- const lines = [
408
- `## Supplier Qualification Report: ${result.company_name}`,
409
- `*Generated ${new Date().toISOString().split("T")[0]}*`,
410
- ``,
411
- ];
412
- if (result.csa_risk) {
413
- lines.push(`### CSA Risk Assessment`);
414
- lines.push(`- **Risk Score:** ${result.csa_risk.risk_score} — **${result.csa_risk.risk_level}**`);
415
- lines.push(`- **CSA Warning Letters:** ${result.csa_risk.csa_warning_letter_count} of ${result.csa_risk.warning_letter_count}`);
416
- lines.push(`- **CSA Inspections:** ${result.csa_risk.csa_inspection_count} of ${result.csa_risk.inspection_count}`);
417
- lines.push(`- **CSA Citations:** ${result.csa_risk.csa_citations} of ${result.csa_risk.total_citations}`);
418
- lines.push(``);
419
- }
420
- if (result.fei_numbers.length > 0) {
421
- lines.push(`### Facility Establishment Identifiers (FEI)`);
422
- for (const fei of result.fei_numbers) {
423
- lines.push(`- ${fei}`);
398
+ });
399
+ server.tool("supplier_qualification_report", "Generate an audit-ready supplier qualification report. Consolidates warning letters, 483 inspections, citations, failure modes, and CSA risk into a single brief with a qualification recommendation. Powered by the enriched fda-csa-data dataset.", {
400
+ company_name: z.string().describe("Supplier/company name to qualify"),
401
+ }, async (params, extra) => {
402
+ const gate = await enrichedConnectionGate(extra.authInfo?.token);
403
+ if (!gate.ok)
404
+ return { content: gate.content };
405
+ try {
406
+ const result = await supplierQualification(params.company_name);
407
+ if (!result) {
408
+ return {
409
+ content: [
410
+ { type: "text", text: `No data found for "${params.company_name}".` },
411
+ ],
412
+ };
424
413
  }
425
- lines.push(``);
426
- }
427
- if (result.warning_letters.length > 0) {
428
- lines.push(`### Warning Letters (${result.warning_letters.length})`);
429
- lines.push(`| Date | Center | Regime | CSA |`);
430
- lines.push(`|------|--------|--------|-----|`);
431
- for (const wl of result.warning_letters) {
432
- lines.push(`| ${wl.issue_date} | ${wl.center} | ${wl.regime} | ${wl.csa_relevant ? "YES" : "no"} |`);
414
+ const lines = [
415
+ `## Supplier Qualification Report: ${result.company_name}`,
416
+ `*Generated ${new Date().toISOString().split("T")[0]}*`,
417
+ ``,
418
+ ];
419
+ if (result.csa_risk) {
420
+ lines.push(`### CSA Risk Assessment`);
421
+ lines.push(`- **Risk Score:** ${result.csa_risk.risk_score} **${result.csa_risk.risk_level}**`);
422
+ lines.push(`- **CSA Warning Letters:** ${result.csa_risk.csa_warning_letter_count} of ${result.csa_risk.warning_letter_count}`);
423
+ lines.push(`- **CSA Inspections:** ${result.csa_risk.csa_inspection_count} of ${result.csa_risk.inspection_count}`);
424
+ lines.push(`- **CSA Citations:** ${result.csa_risk.csa_citations} of ${result.csa_risk.total_citations}`);
425
+ lines.push(``);
433
426
  }
434
- lines.push(``);
435
- }
436
- if (result.inspections.length > 0) {
437
- lines.push(`### Form 483 Inspections (${result.inspections.length})`);
438
- lines.push(`| Date | Center | Area | CSA |`);
439
- lines.push(`|------|--------|------|-----|`);
440
- for (const insp of result.inspections) {
441
- lines.push(`| ${insp.inspection_end_date} | ${insp.center} | ${insp.product_area} | ${insp.csa_relevant ? "YES" : "no"} |`);
427
+ if (result.fei_numbers.length > 0) {
428
+ lines.push(`### Facility Establishment Identifiers (FEI)`);
429
+ for (const fei of result.fei_numbers) {
430
+ lines.push(`- ${fei}`);
431
+ }
432
+ lines.push(``);
442
433
  }
443
- lines.push(``);
444
- }
445
- if (result.citation_summary.length > 0) {
446
- lines.push(`### Citation Summary`);
447
- for (const c of result.citation_summary) {
448
- lines.push(`- **${c.cfr_full}** (${c.category}) ${c.count}x`);
434
+ if (result.warning_letters.length > 0) {
435
+ lines.push(`### Warning Letters (${result.warning_letters.length})`);
436
+ lines.push(`| Date | Center | Regime | CSA |`);
437
+ lines.push(`|------|--------|--------|-----|`);
438
+ for (const wl of result.warning_letters) {
439
+ lines.push(`| ${wl.issue_date} | ${wl.center} | ${wl.regime} | ${wl.csa_relevant ? "YES" : "no"} |`);
440
+ }
441
+ lines.push(``);
449
442
  }
450
- lines.push(``);
451
- }
452
- if (result.failure_modes.length > 0) {
453
- lines.push(`### Failure Modes`);
454
- for (const fm of result.failure_modes) {
455
- lines.push(`- **${fm.mode}** (confidence: ${fm.confidence}) ${fm.count}x`);
443
+ if (result.inspections.length > 0) {
444
+ lines.push(`### Form 483 Inspections (${result.inspections.length})`);
445
+ lines.push(`| Date | Center | Area | CSA |`);
446
+ lines.push(`|------|--------|------|-----|`);
447
+ for (const insp of result.inspections) {
448
+ lines.push(`| ${insp.inspection_end_date} | ${insp.center} | ${insp.product_area} | ${insp.csa_relevant ? "YES" : "no"} |`);
449
+ }
450
+ lines.push(``);
456
451
  }
457
- lines.push(``);
452
+ if (result.citation_summary.length > 0) {
453
+ lines.push(`### Citation Summary`);
454
+ for (const c of result.citation_summary) {
455
+ lines.push(`- **${c.cfr_full}** (${c.category}) — ${c.count}x`);
456
+ }
457
+ lines.push(``);
458
+ }
459
+ if (result.failure_modes.length > 0) {
460
+ lines.push(`### Failure Modes`);
461
+ for (const fm of result.failure_modes) {
462
+ lines.push(`- **${fm.mode}** (confidence: ${fm.confidence}) — ${fm.count}x`);
463
+ }
464
+ lines.push(``);
465
+ }
466
+ if (result.csa_risk) {
467
+ lines.push(`### Qualification Recommendation`);
468
+ const rec = {
469
+ CRITICAL: "**DO NOT QUALIFY without on-site audit.** Critical CSA enforcement history requires remediation evidence, CAPA verification, and management commitment assessment.",
470
+ HIGH: "**Conditional qualification.** Significant CSA enforcement history. Require CAPA documentation for all cited findings. Schedule audit within 90 days.",
471
+ MODERATE: "**Qualify with enhanced monitoring.** Enforcement history present but manageable. Include CSA-specific questions in supplier questionnaire. Annual re-evaluation.",
472
+ LOW: "**Standard qualification pathway.** No significant CSA enforcement concerns.",
473
+ };
474
+ lines.push(rec[result.csa_risk.risk_level] ?? "Insufficient data for recommendation.");
475
+ lines.push(``);
476
+ }
477
+ return { content: [{ type: "text", text: lines.join("\n") }] };
458
478
  }
459
- if (result.csa_risk) {
460
- lines.push(`### Qualification Recommendation`);
461
- const rec = {
462
- CRITICAL: "**DO NOT QUALIFY without on-site audit.** Critical CSA enforcement history requires remediation evidence, CAPA verification, and management commitment assessment.",
463
- HIGH: "**Conditional qualification.** Significant CSA enforcement history. Require CAPA documentation for all cited findings. Schedule audit within 90 days.",
464
- MODERATE: "**Qualify with enhanced monitoring.** Enforcement history present but manageable. Include CSA-specific questions in supplier questionnaire. Annual re-evaluation.",
465
- LOW: "**Standard qualification pathway.** No significant CSA enforcement concerns.",
479
+ catch (error) {
480
+ return {
481
+ content: [
482
+ {
483
+ type: "text",
484
+ text: `Error: ${error instanceof Error ? error.message : String(error)}`,
485
+ },
486
+ ],
487
+ isError: true,
466
488
  };
467
- lines.push(rec[result.csa_risk.risk_level] ?? "Insufficient data for recommendation.");
468
- lines.push(``);
469
489
  }
470
- return { content: [{ type: "text", text: lines.join("\n") }] };
471
- }
472
- catch (error) {
473
- return {
474
- content: [
475
- {
476
- type: "text",
477
- text: `Error: ${error instanceof Error ? error.message : String(error)}`,
478
- },
479
- ],
480
- isError: true,
481
- };
482
- }
483
- });
490
+ });
491
+ } // end registerTools
484
492
  // ─── Start Server ────────────────────────────────────────────────────────────
485
493
  async function logStartup(mode) {
486
494
  const enriched = isEnrichedAvailable();
@@ -501,10 +509,8 @@ async function main() {
501
509
  const port = process.env.PORT;
502
510
  if (port) {
503
511
  // ─── HTTP mode (Railway deployment) ─────────────────────────
504
- const transport = new WebStandardStreamableHTTPServerTransport({
505
- sessionIdGenerator: () => crypto.randomUUID(),
506
- });
507
- await server.connect(transport);
512
+ // Per-session transport map: each client gets its own server + transport
513
+ const transports = new Map();
508
514
  Bun.serve({
509
515
  port: parseInt(port),
510
516
  async fetch(req) {
@@ -531,11 +537,33 @@ async function main() {
531
537
  const token = authHeader?.startsWith("Bearer ")
532
538
  ? authHeader.slice(7)
533
539
  : undefined;
534
- return transport.handleRequest(req, {
535
- authInfo: token
536
- ? { token, clientId: "", scopes: [] }
537
- : undefined,
538
- });
540
+ const authInfo = token
541
+ ? { token, clientId: "", scopes: [] }
542
+ : undefined;
543
+ const sessionId = req.headers.get("mcp-session-id");
544
+ // Existing session — route to its transport
545
+ if (sessionId && transports.has(sessionId)) {
546
+ return transports.get(sessionId).handleRequest(req, { authInfo });
547
+ }
548
+ // New session — create transport + server
549
+ if (!sessionId && req.method === "POST") {
550
+ const transport = new WebStandardStreamableHTTPServerTransport({
551
+ sessionIdGenerator: () => crypto.randomUUID(),
552
+ onsessioninitialized: (id) => {
553
+ transports.set(id, transport);
554
+ },
555
+ });
556
+ transport.onclose = () => {
557
+ const sid = transport.sessionId;
558
+ if (sid)
559
+ transports.delete(sid);
560
+ };
561
+ const mcpServer = createServer();
562
+ await mcpServer.connect(transport);
563
+ return transport.handleRequest(req, { authInfo });
564
+ }
565
+ // Invalid — no session ID on non-init request
566
+ return Response.json({ jsonrpc: "2.0", error: { code: -32000, message: "Bad Request: No valid session ID" }, id: null }, { status: 400 });
539
567
  }
540
568
  return new Response("Not found", { status: 404 });
541
569
  },
@@ -546,8 +574,9 @@ async function main() {
546
574
  }
547
575
  else {
548
576
  // ─── stdio mode (npx / local use) ───────────────────────────
577
+ stdioServer = createServer();
549
578
  const transport = new StdioServerTransport();
550
- await server.connect(transport);
579
+ await stdioServer.connect(transport);
551
580
  await logStartup("stdio");
552
581
  }
553
582
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fda-mcp-server",
3
- "version": "0.0.13",
3
+ "version": "0.0.14",
4
4
  "description": "MCP server for FDA Warning Letters, Form 483 Inspections, and Enforcement/Recall data. Query FDA public data from any MCP client.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",