@cliwant/mcp-sam-gov 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/README.ja.md +184 -0
  3. package/README.ko.md +184 -0
  4. package/README.md +397 -0
  5. package/dist/ecfr.d.ts +44 -0
  6. package/dist/ecfr.d.ts.map +1 -0
  7. package/dist/ecfr.js +86 -0
  8. package/dist/ecfr.js.map +1 -0
  9. package/dist/federal-register.d.ts +82 -0
  10. package/dist/federal-register.d.ts.map +1 -0
  11. package/dist/federal-register.js +117 -0
  12. package/dist/federal-register.js.map +1 -0
  13. package/dist/grants.d.ts +63 -0
  14. package/dist/grants.d.ts.map +1 -0
  15. package/dist/grants.js +93 -0
  16. package/dist/grants.js.map +1 -0
  17. package/dist/sam-gov/client.d.ts +69 -0
  18. package/dist/sam-gov/client.d.ts.map +1 -0
  19. package/dist/sam-gov/client.js +401 -0
  20. package/dist/sam-gov/client.js.map +1 -0
  21. package/dist/sam-gov/index.d.ts +19 -0
  22. package/dist/sam-gov/index.d.ts.map +1 -0
  23. package/dist/sam-gov/index.js +18 -0
  24. package/dist/sam-gov/index.js.map +1 -0
  25. package/dist/sam-gov/types.d.ts +109 -0
  26. package/dist/sam-gov/types.d.ts.map +1 -0
  27. package/dist/sam-gov/types.js +7 -0
  28. package/dist/sam-gov/types.js.map +1 -0
  29. package/dist/server.d.ts +20 -0
  30. package/dist/server.d.ts.map +1 -0
  31. package/dist/server.js +685 -0
  32. package/dist/server.js.map +1 -0
  33. package/dist/usaspending.d.ts +369 -0
  34. package/dist/usaspending.d.ts.map +1 -0
  35. package/dist/usaspending.js +555 -0
  36. package/dist/usaspending.js.map +1 -0
  37. package/package.json +88 -0
  38. package/src/ecfr.ts +127 -0
  39. package/src/federal-register.ts +191 -0
  40. package/src/grants.ts +155 -0
  41. package/src/sam-gov/client.ts +492 -0
  42. package/src/sam-gov/index.ts +28 -0
  43. package/src/sam-gov/types.ts +130 -0
  44. package/src/server.ts +856 -0
  45. package/src/usaspending.ts +925 -0
@@ -0,0 +1,555 @@
1
+ /**
2
+ * USAspending v2 wrappers (keyless).
3
+ *
4
+ * Coverage map (every endpoint here is verified KEYLESS):
5
+ * Awards / Recipients
6
+ * - search/spending_by_category/recipient → searchAwards
7
+ * - search/spending_by_award (subawards: false) → searchIndividualAwards
8
+ * - search/spending_by_award (subawards: true) → searchSubawards
9
+ * - search/spending_by_award (recipient filter) → searchAwardsByRecipient
10
+ * - awards/{generated_internal_id} → getAwardDetail
11
+ * - search/spending_by_award + awards/{id} pair → searchExpiringContracts
12
+ * Aggregate analysis
13
+ * - search/spending_over_time → spendingOverTime
14
+ * - search/spending_by_category/psc → searchPscSpending
15
+ * - search/spending_by_category/state_territory → searchStateSpending
16
+ * - search/spending_by_category/cfda → searchCfdaSpending
17
+ * - search/spending_by_category/federal_account → searchFederalAccountSpending
18
+ * - search/spending_by_category/awarding_agency → searchAgencySpending
19
+ * - search/spending_by_category/awarding_subagency → searchSubAgencySpending
20
+ * Agency profile
21
+ * - agency/{toptier_code} → getAgencyProfile
22
+ * - agency/{toptier_code}/awards → getAgencyAwardsSummary
23
+ * - agency/{toptier_code}/budget_function → getAgencyBudgetFunction
24
+ * Recipient profile
25
+ * - recipient/ POST → searchRecipients
26
+ * - recipient/{id} → getRecipientProfile
27
+ * Reference / autocomplete (anti-hallucination)
28
+ * - autocomplete/funding_agency → lookupAgency
29
+ * - autocomplete/naics → autocompleteNaics
30
+ * - autocomplete/recipient → autocompleteRecipient
31
+ * - references/naics → naicsHierarchy
32
+ * - references/glossary → glossary
33
+ * - references/toptier_agencies → listToptierAgencies
34
+ *
35
+ * Total: 22 endpoints across the USAspending surface, all keyless.
36
+ */
37
+ const USAS = "https://api.usaspending.gov/api/v2";
38
+ function buildFilters(args) {
39
+ const filters = { award_type_codes: ["A", "B", "C", "D"] };
40
+ if (args.agency) {
41
+ filters.agencies = [
42
+ { type: "awarding", tier: "toptier", name: args.agency },
43
+ ];
44
+ }
45
+ if (args.naics)
46
+ filters.naics_codes = [args.naics];
47
+ if (args.fiscalYear) {
48
+ filters.time_period = [
49
+ {
50
+ start_date: `${args.fiscalYear - 1}-10-01`,
51
+ end_date: `${args.fiscalYear}-09-30`,
52
+ },
53
+ ];
54
+ }
55
+ if (args.setAside)
56
+ filters.set_aside_type_codes = [args.setAside];
57
+ if (args.pscCodes?.length)
58
+ filters.psc_codes = args.pscCodes;
59
+ return filters;
60
+ }
61
+ async function postUsas(endpoint, body) {
62
+ const r = await fetch(`${USAS}/${endpoint}`, {
63
+ method: "POST",
64
+ headers: { "Content-Type": "application/json" },
65
+ body: JSON.stringify(body),
66
+ signal: AbortSignal.timeout(15_000),
67
+ });
68
+ if (!r.ok) {
69
+ throw new Error(`USAspending POST ${endpoint} returned ${r.status}`);
70
+ }
71
+ return (await r.json());
72
+ }
73
+ async function getUsas(endpoint) {
74
+ const r = await fetch(`${USAS}/${endpoint}`, {
75
+ signal: AbortSignal.timeout(15_000),
76
+ });
77
+ if (!r.ok) {
78
+ throw new Error(`USAspending GET ${endpoint} returned ${r.status}`);
79
+ }
80
+ return (await r.json());
81
+ }
82
+ // ─── Aggregate share-of-wallet ───────────────────────────────────
83
+ export async function searchAwards(args) {
84
+ const filters = buildFilters(args);
85
+ const json = await postUsas("search/spending_by_category/recipient", { filters, limit: 10, page: 1 });
86
+ const results = json.results ?? [];
87
+ return {
88
+ totalAwards: results.reduce((s, r) => s + (r.count ?? 0), 0),
89
+ totalValue: results.reduce((s, r) => s + (r.amount ?? 0), 0),
90
+ topRecipients: results.map((r) => ({
91
+ name: r.name ?? "—",
92
+ value: r.amount ?? 0,
93
+ awards: r.count ?? 0,
94
+ })),
95
+ };
96
+ }
97
+ // ─── Line-item awards ─────────────────────────────────────────────
98
+ export async function searchIndividualAwards(args) {
99
+ const filters = buildFilters(args);
100
+ const json = await postUsas("search/spending_by_award", {
101
+ filters,
102
+ fields: [
103
+ "Award ID",
104
+ "Recipient Name",
105
+ "Award Amount",
106
+ "Awarding Agency",
107
+ "Awarding Sub Agency",
108
+ "Place of Performance State Code",
109
+ "Description",
110
+ ],
111
+ limit: args.limit ?? 10,
112
+ page: 1,
113
+ subawards: false,
114
+ });
115
+ return {
116
+ awards: (json.results ?? []).map((r) => ({
117
+ awardId: r["Award ID"] ?? "",
118
+ recipient: r["Recipient Name"] ?? "",
119
+ amount: r["Award Amount"] ?? 0,
120
+ awardingAgency: r["Awarding Agency"] ?? "",
121
+ awardingSubAgency: r["Awarding Sub Agency"],
122
+ placeOfPerformanceState: r["Place of Performance State Code"],
123
+ description: r.Description,
124
+ generatedInternalId: r.generated_internal_id ?? "",
125
+ })),
126
+ };
127
+ }
128
+ // ─── Recipient win history ────────────────────────────────────────
129
+ export async function searchAwardsByRecipient(args) {
130
+ const filters = buildFilters(args);
131
+ filters.recipient_search_text = [args.recipientName];
132
+ const json = await postUsas("search/spending_by_award", {
133
+ filters,
134
+ fields: [
135
+ "Award ID",
136
+ "Recipient Name",
137
+ "Award Amount",
138
+ "Awarding Agency",
139
+ "Awarding Sub Agency",
140
+ "NAICS",
141
+ "Description",
142
+ ],
143
+ limit: args.limit ?? 15,
144
+ page: 1,
145
+ subawards: false,
146
+ });
147
+ const results = json.results ?? [];
148
+ return {
149
+ awards: results.map((r) => ({
150
+ awardId: r["Award ID"] ?? "",
151
+ recipient: r["Recipient Name"] ?? "",
152
+ amount: r["Award Amount"] ?? 0,
153
+ awardingAgency: r["Awarding Agency"] ?? "",
154
+ awardingSubAgency: r["Awarding Sub Agency"],
155
+ naicsCode: r.NAICS?.code,
156
+ naicsDescription: r.NAICS?.description,
157
+ description: r.Description,
158
+ generatedInternalId: r.generated_internal_id ?? "",
159
+ })),
160
+ totalRecords: results.length,
161
+ };
162
+ }
163
+ // ─── Subaward enumeration ─────────────────────────────────────────
164
+ export async function searchSubawards(args) {
165
+ const filters = buildFilters(args);
166
+ if (args.primeRecipientName) {
167
+ filters.recipient_search_text = [args.primeRecipientName];
168
+ }
169
+ const json = await postUsas("search/spending_by_award", {
170
+ filters,
171
+ fields: [
172
+ "Sub-Award ID",
173
+ "Sub-Award Recipient",
174
+ "Sub-Award Amount",
175
+ "Sub-Award Date",
176
+ "Sub-Award NAICS",
177
+ ],
178
+ limit: args.limit ?? 15,
179
+ page: 1,
180
+ subawards: true,
181
+ });
182
+ return {
183
+ subawards: (json.results ?? []).map((r) => ({
184
+ subAwardId: r["Sub-Award ID"] ?? "",
185
+ subRecipient: r["Sub-Award Recipient"] ?? "(name redacted)",
186
+ amount: r["Sub-Award Amount"] ?? 0,
187
+ actionDate: r["Sub-Award Date"] ?? "",
188
+ primeAwardId: r.prime_award_generated_internal_id ?? "",
189
+ })),
190
+ };
191
+ }
192
+ // ─── Per-award detail ─────────────────────────────────────────────
193
+ export async function getAwardDetail(generatedInternalId) {
194
+ try {
195
+ const r = await fetch(`${USAS}/awards/${encodeURIComponent(generatedInternalId)}/`, { signal: AbortSignal.timeout(10_000) });
196
+ if (!r.ok)
197
+ return null;
198
+ const json = (await r.json());
199
+ const ltc = json.latest_transaction_contract_data ?? {};
200
+ return {
201
+ awardId: json.piid ?? "",
202
+ recipient: json.recipient?.recipient_name ?? "",
203
+ totalObligation: json.total_obligation ?? 0,
204
+ baseAndAllOptions: json.base_and_all_options ?? 0,
205
+ periodOfPerformance: {
206
+ startDate: json.period_of_performance?.start_date ?? null,
207
+ endDate: json.period_of_performance?.end_date ?? null,
208
+ potentialEndDate: json.period_of_performance?.potential_end_date ?? null,
209
+ },
210
+ description: json.description ?? "",
211
+ setAsideType: ltc.type_set_aside,
212
+ setAsideDescription: ltc.type_set_aside_description,
213
+ competitionExtent: ltc.extent_competed,
214
+ numberOfOffers: ltc.number_of_offers_received,
215
+ awardingAgency: json.awarding_agency?.toptier_agency?.name,
216
+ awardingSubAgency: json.awarding_agency?.subtier_agency?.name,
217
+ naicsCode: ltc.naics,
218
+ naicsDescription: ltc.naics_description,
219
+ };
220
+ }
221
+ catch {
222
+ return null;
223
+ }
224
+ }
225
+ // ─── Recompete radar ──────────────────────────────────────────────
226
+ export async function searchExpiringContracts(args) {
227
+ const filters = buildFilters(args);
228
+ const search = await postUsas("search/spending_by_award", {
229
+ filters,
230
+ fields: ["Award ID", "Recipient Name", "Award Amount"],
231
+ limit: 50,
232
+ page: 1,
233
+ subawards: false,
234
+ sort: "Award Amount",
235
+ order: "desc",
236
+ });
237
+ const candidates = (search.results ?? []).filter((r) => (r["Award Amount"] ?? 0) >= (args.minAwardValue ?? 100_000) &&
238
+ r.generated_internal_id);
239
+ // Enrich up to 8 in parallel — be polite to USAspending.
240
+ const enrich = candidates.slice(0, 8);
241
+ const details = await Promise.all(enrich.map((r) => getAwardDetail(r.generated_internal_id)));
242
+ const now = Date.now();
243
+ const cutoffDays = (args.monthsUntilExpiry ?? 12) * 30;
244
+ const contracts = details
245
+ .map((d, idx) => {
246
+ if (!d || !d.periodOfPerformance.endDate)
247
+ return null;
248
+ const end = new Date(d.periodOfPerformance.endDate).getTime();
249
+ if (Number.isNaN(end))
250
+ return null;
251
+ const days = Math.ceil((end - now) / (24 * 60 * 60 * 1000));
252
+ if (days < -30 || days > cutoffDays)
253
+ return null;
254
+ const orig = enrich[idx] ?? {};
255
+ return {
256
+ awardId: d.awardId || orig["Award ID"] || "",
257
+ recipient: d.recipient || orig["Recipient Name"] || "",
258
+ amount: d.totalObligation || orig["Award Amount"] || 0,
259
+ endDate: d.periodOfPerformance.endDate,
260
+ potentialEndDate: d.periodOfPerformance.potentialEndDate,
261
+ awardingAgency: d.awardingAgency ?? "",
262
+ awardingSubAgency: d.awardingSubAgency,
263
+ naicsCode: d.naicsCode,
264
+ setAsideDescription: d.setAsideDescription,
265
+ description: d.description,
266
+ daysUntilExpiry: days,
267
+ };
268
+ })
269
+ .filter((x) => x !== null)
270
+ .slice(0, args.limit ?? 10)
271
+ .sort((a, b) => a.daysUntilExpiry - b.daysUntilExpiry);
272
+ return { contracts, searchedCount: candidates.length };
273
+ }
274
+ // ─── Aggregate analysis: time series ──────────────────────────────
275
+ export async function spendingOverTime(args) {
276
+ const filters = buildFilters(args);
277
+ const json = await postUsas("search/spending_over_time/", {
278
+ group: args.group ?? "fiscal_year",
279
+ filters,
280
+ });
281
+ return {
282
+ group: json.group,
283
+ timeline: (json.results ?? []).map((r) => ({
284
+ timePeriod: r.time_period ?? {},
285
+ total: r.aggregated_amount ?? 0,
286
+ contractObligations: r.Contract_Obligations ?? 0,
287
+ grantObligations: r.Grant_Obligations ?? 0,
288
+ idvObligations: r.Idv_Obligations ?? 0,
289
+ })),
290
+ };
291
+ }
292
+ // ─── Aggregate analysis: PSC spending ─────────────────────────────
293
+ export async function searchPscSpending(args) {
294
+ const filters = buildFilters(args);
295
+ const json = await postUsas("search/spending_by_category/psc", { filters, limit: args.limit ?? 10, page: 1 });
296
+ return {
297
+ psc: (json.results ?? []).map((r) => ({
298
+ pscCode: r.code ?? "",
299
+ pscName: r.name ?? "",
300
+ amount: r.amount ?? 0,
301
+ })),
302
+ };
303
+ }
304
+ // ─── Aggregate analysis: state / territory ─────────────────────────
305
+ export async function searchStateSpending(args) {
306
+ const filters = buildFilters(args);
307
+ const json = await postUsas("search/spending_by_category/state_territory", { filters, limit: args.limit ?? 10, page: 1 });
308
+ return {
309
+ states: (json.results ?? []).map((r) => ({
310
+ stateCode: r.code ?? "",
311
+ stateName: r.name ?? "",
312
+ amount: r.amount ?? 0,
313
+ })),
314
+ };
315
+ }
316
+ // ─── Aggregate analysis: CFDA (grants) ─────────────────────────────
317
+ export async function searchCfdaSpending(args) {
318
+ // CFDA is grants — different award_type_codes
319
+ const filters = {
320
+ award_type_codes: ["02", "03", "04", "05"], // grants
321
+ };
322
+ if (args.agency) {
323
+ filters.agencies = [
324
+ { type: "awarding", tier: "toptier", name: args.agency },
325
+ ];
326
+ }
327
+ if (args.fiscalYear) {
328
+ filters.time_period = [
329
+ {
330
+ start_date: `${args.fiscalYear - 1}-10-01`,
331
+ end_date: `${args.fiscalYear}-09-30`,
332
+ },
333
+ ];
334
+ }
335
+ const json = await postUsas("search/spending_by_category/cfda", { filters, limit: args.limit ?? 10, page: 1 });
336
+ return {
337
+ programs: (json.results ?? []).map((r) => ({
338
+ cfdaCode: r.code ?? "",
339
+ programName: r.name ?? "",
340
+ amount: r.amount ?? 0,
341
+ })),
342
+ };
343
+ }
344
+ // ─── Aggregate analysis: federal account (TAS) ─────────────────────
345
+ export async function searchFederalAccountSpending(args) {
346
+ const filters = buildFilters(args);
347
+ const json = await postUsas("search/spending_by_category/federal_account", { filters, limit: args.limit ?? 10, page: 1 });
348
+ return {
349
+ accounts: (json.results ?? []).map((r) => ({
350
+ tasCode: r.code ?? "",
351
+ accountName: r.name ?? "",
352
+ amount: r.amount ?? 0,
353
+ })),
354
+ };
355
+ }
356
+ // ─── Aggregate analysis: awarding agency ──────────────────────────
357
+ export async function searchAgencySpending(args) {
358
+ const filters = buildFilters(args);
359
+ const json = await postUsas("search/spending_by_category/awarding_agency", { filters, limit: args.limit ?? 10, page: 1 });
360
+ return {
361
+ agencies: (json.results ?? []).map((r) => ({
362
+ name: r.name ?? "",
363
+ code: r.code ?? "",
364
+ slug: r.agency_slug ?? "",
365
+ amount: r.amount ?? 0,
366
+ })),
367
+ };
368
+ }
369
+ // ─── Sub-agency breakdown ─────────────────────────────────────────
370
+ export async function searchSubAgencySpending(args) {
371
+ const filters = buildFilters(args);
372
+ const json = await postUsas("search/spending_by_category/awarding_subagency", { filters, limit: 10, page: 1 });
373
+ return {
374
+ subAgencies: (json.results ?? []).map((r) => ({
375
+ name: r.name ?? "",
376
+ amount: r.amount ?? 0,
377
+ awards: r.count ?? 0,
378
+ })),
379
+ };
380
+ }
381
+ // ─── Agency profile ───────────────────────────────────────────────
382
+ export async function getAgencyProfile(toptierCode) {
383
+ const json = await getUsas(`agency/${toptierCode}/`);
384
+ return {
385
+ fiscalYear: json.fiscal_year,
386
+ toptierCode: json.toptier_code,
387
+ name: json.name,
388
+ abbreviation: json.abbreviation,
389
+ mission: json.mission,
390
+ website: json.website,
391
+ subtierAgencyCount: json.subtier_agency_count,
392
+ congressionalJustificationUrl: json.congressional_justification_url,
393
+ };
394
+ }
395
+ export async function getAgencyAwardsSummary(args) {
396
+ const fy = args.fiscalYear ?? new Date().getUTCFullYear();
397
+ const json = await getUsas(`agency/${args.toptierCode}/awards/?fiscal_year=${fy}`);
398
+ return {
399
+ fiscalYear: json.fiscal_year,
400
+ toptierCode: json.toptier_code,
401
+ transactionCount: json.transaction_count ?? 0,
402
+ obligations: json.obligations ?? 0,
403
+ latestActionDate: json.latest_action_date,
404
+ };
405
+ }
406
+ export async function getAgencyBudgetFunction(args) {
407
+ const fy = args.fiscalYear ?? new Date().getUTCFullYear();
408
+ const json = await getUsas(`agency/${args.toptierCode}/budget_function/?fiscal_year=${fy}&limit=${args.limit ?? 10}`);
409
+ return {
410
+ toptierCode: json.toptier_code,
411
+ fiscalYear: json.fiscal_year,
412
+ functions: (json.results ?? []).map((r) => ({
413
+ name: r.name ?? "",
414
+ programs: (r.children ?? []).map((c) => ({
415
+ name: c.name ?? "",
416
+ obligated: c.obligated_amount ?? 0,
417
+ outlays: c.gross_outlay_amount ?? 0,
418
+ })),
419
+ })),
420
+ };
421
+ }
422
+ // ─── Recipient list + profile ─────────────────────────────────────
423
+ export async function searchRecipients(args) {
424
+ const body = {
425
+ keyword: args.keyword,
426
+ limit: args.limit ?? 10,
427
+ page: 1,
428
+ };
429
+ if (args.recipientLevel) {
430
+ body.recipient_level = args.recipientLevel;
431
+ }
432
+ const json = await postUsas("recipient/", body);
433
+ return {
434
+ totalRecords: json.page_metadata?.total ?? 0,
435
+ recipients: (json.results ?? []).map((r) => ({
436
+ id: r.id ?? "",
437
+ duns: r.duns,
438
+ uei: r.uei,
439
+ name: r.name ?? "",
440
+ level: r.recipient_level,
441
+ totalAmount: r.amount ?? 0,
442
+ })),
443
+ };
444
+ }
445
+ export async function getRecipientProfile(recipientId) {
446
+ const json = await getUsas(`recipient/${encodeURIComponent(recipientId)}/`);
447
+ return {
448
+ name: json.name ?? "",
449
+ alternateNames: json.alternate_names ?? [],
450
+ duns: json.duns,
451
+ uei: json.uei,
452
+ recipientId: json.recipient_id,
453
+ level: json.recipient_level,
454
+ parentId: json.parent_id,
455
+ parentName: json.parent_name,
456
+ businessTypes: json.business_types ?? [],
457
+ location: json.location ?? {},
458
+ totalAmount: json.total_transaction_amount ?? 0,
459
+ totalTransactions: json.total_transactions ?? 0,
460
+ };
461
+ }
462
+ // ─── Reference / autocomplete ─────────────────────────────────────
463
+ export async function lookupAgency(searchText) {
464
+ try {
465
+ const r = await fetch(`${USAS}/autocomplete/funding_agency/`, {
466
+ method: "POST",
467
+ headers: { "Content-Type": "application/json" },
468
+ body: JSON.stringify({ search_text: searchText, limit: 5 }),
469
+ signal: AbortSignal.timeout(10_000),
470
+ });
471
+ if (!r.ok)
472
+ return { matches: [] };
473
+ const json = (await r.json());
474
+ return {
475
+ matches: (json.results ?? []).map((r) => ({
476
+ name: r.toptier_agency?.name ?? "",
477
+ abbreviation: r.toptier_agency?.abbreviation,
478
+ toptierCode: r.toptier_agency?.toptier_code,
479
+ isToptier: !!r.toptier_flag,
480
+ })),
481
+ };
482
+ }
483
+ catch {
484
+ return { matches: [] };
485
+ }
486
+ }
487
+ export async function autocompleteNaics(args) {
488
+ const json = await postUsas("autocomplete/naics/", {
489
+ search_text: args.searchText,
490
+ limit: args.limit ?? 10,
491
+ });
492
+ return {
493
+ naics: (json.results ?? []).map((r) => ({
494
+ code: r.naics ?? "",
495
+ description: r.naics_description ?? "",
496
+ retired: !!r.year_retired,
497
+ })),
498
+ };
499
+ }
500
+ export async function autocompleteRecipient(args) {
501
+ const json = await postUsas("autocomplete/recipient/", {
502
+ search_text: args.searchText,
503
+ limit: args.limit ?? 10,
504
+ });
505
+ return {
506
+ recipients: (json.results ?? []).map((r) => ({
507
+ name: r.recipient_name ?? "",
508
+ uei: r.uei,
509
+ duns: r.duns,
510
+ })),
511
+ };
512
+ }
513
+ export async function naicsHierarchy(args) {
514
+ const path = args.naicsFilter
515
+ ? `references/naics/?filter=${encodeURIComponent(args.naicsFilter)}`
516
+ : "references/naics/";
517
+ const json = await getUsas(path);
518
+ return {
519
+ hierarchy: (json.results ?? []).map((r) => ({
520
+ code: r.naics ?? "",
521
+ description: r.naics_description ?? "",
522
+ count: r.count ?? 0,
523
+ hasChildren: !!(r.children && r.children.length > 0),
524
+ })),
525
+ };
526
+ }
527
+ export async function glossary(args) {
528
+ const params = new URLSearchParams();
529
+ params.set("limit", String(args.limit ?? 25));
530
+ if (args.search)
531
+ params.set("search", args.search);
532
+ const json = await getUsas(`references/glossary/?${params.toString()}`);
533
+ return {
534
+ totalRecords: json.page_metadata?.count ?? 0,
535
+ terms: (json.results ?? []).map((r) => ({
536
+ term: r.term ?? "",
537
+ slug: r.slug ?? "",
538
+ definition: r.plain ?? "",
539
+ })),
540
+ };
541
+ }
542
+ export async function listToptierAgencies(args) {
543
+ const json = await getUsas(`references/toptier_agencies/?limit=${args.limit ?? 50}`);
544
+ return {
545
+ agencies: (json.results ?? []).map((r) => ({
546
+ name: r.agency_name ?? "",
547
+ abbreviation: r.abbreviation,
548
+ toptierCode: r.toptier_code,
549
+ slug: r.agency_slug,
550
+ activeFiscalYear: r.active_fy,
551
+ obligatedAmount: r.obligated_amount ?? 0,
552
+ })),
553
+ };
554
+ }
555
+ //# sourceMappingURL=usaspending.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usaspending.js","sourceRoot":"","sources":["../src/usaspending.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,88 @@
1
+ {
2
+ "name": "@cliwant/mcp-sam-gov",
3
+ "version": "0.2.1",
4
+ "mcpName": "io.github.cliwant/mcp-sam-gov",
5
+ "description": "Most comprehensive keyless MCP server for US federal contracting + spending + regulation: SAM.gov, USAspending, Federal Register, eCFR, Grants.gov. 36 tools, no API key, plug into Claude Desktop / Claude Code / Codex CLI / Cursor / Continue / Gemini CLI.",
6
+ "keywords": [
7
+ "mcp",
8
+ "model-context-protocol",
9
+ "sam.gov",
10
+ "usaspending",
11
+ "federal-contracting",
12
+ "govcon",
13
+ "claude-desktop",
14
+ "claude-code",
15
+ "codex",
16
+ "cursor",
17
+ "continue",
18
+ "gemini-cli",
19
+ "ai-tools"
20
+ ],
21
+ "license": "MIT",
22
+ "author": "Cliwant contributors",
23
+ "homepage": "https://github.com/cliwant/mcp-sam-gov",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/cliwant/mcp-sam-gov.git"
27
+ },
28
+ "type": "module",
29
+ "main": "./dist/server.js",
30
+ "types": "./dist/server.d.ts",
31
+ "bin": {
32
+ "mcp-sam-gov": "./dist/server.js"
33
+ },
34
+ "exports": {
35
+ ".": {
36
+ "import": "./dist/server.js",
37
+ "types": "./dist/server.d.ts"
38
+ },
39
+ "./sam-gov": {
40
+ "import": "./dist/sam-gov/index.js",
41
+ "types": "./dist/sam-gov/index.d.ts"
42
+ },
43
+ "./usaspending": {
44
+ "import": "./dist/usaspending.js",
45
+ "types": "./dist/usaspending.d.ts"
46
+ },
47
+ "./federal-register": {
48
+ "import": "./dist/federal-register.js",
49
+ "types": "./dist/federal-register.d.ts"
50
+ },
51
+ "./ecfr": {
52
+ "import": "./dist/ecfr.js",
53
+ "types": "./dist/ecfr.d.ts"
54
+ },
55
+ "./grants": {
56
+ "import": "./dist/grants.js",
57
+ "types": "./dist/grants.d.ts"
58
+ }
59
+ },
60
+ "files": [
61
+ "dist",
62
+ "src",
63
+ "README.md",
64
+ "README.ko.md",
65
+ "README.ja.md",
66
+ "LICENSE"
67
+ ],
68
+ "scripts": {
69
+ "build": "tsc",
70
+ "start": "node dist/server.js",
71
+ "dev": "tsx src/server.ts",
72
+ "smoke": "node smoke-test.mjs",
73
+ "prepublishOnly": "npm run build"
74
+ },
75
+ "engines": {
76
+ "node": ">=20"
77
+ },
78
+ "dependencies": {
79
+ "@modelcontextprotocol/sdk": "^1.20.0",
80
+ "zod": "^3.24.0"
81
+ },
82
+ "devDependencies": {
83
+ "@anthropic-ai/mcpb": "^2.1.2",
84
+ "@types/node": "^20.0.0",
85
+ "tsx": "^4.20.0",
86
+ "typescript": "^5.5.0"
87
+ }
88
+ }