@cliwant/mcp-sam-gov 1.5.0 → 1.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/LICENSE +21 -21
  2. package/README.ja.md +248 -231
  3. package/README.ko.md +248 -231
  4. package/README.md +733 -714
  5. package/dist/errors.d.ts +10 -0
  6. package/dist/errors.d.ts.map +1 -1
  7. package/dist/errors.js.map +1 -1
  8. package/dist/feedback.d.ts +64 -0
  9. package/dist/feedback.d.ts.map +1 -0
  10. package/dist/feedback.js +131 -0
  11. package/dist/feedback.js.map +1 -0
  12. package/dist/server.d.ts.map +1 -1
  13. package/dist/server.js +48 -2
  14. package/dist/server.js.map +1 -1
  15. package/dist/update-check.d.ts +38 -0
  16. package/dist/update-check.d.ts.map +1 -0
  17. package/dist/update-check.js +85 -0
  18. package/dist/update-check.js.map +1 -0
  19. package/package.json +111 -111
  20. package/src/attachments.ts +652 -652
  21. package/src/bea.ts +372 -372
  22. package/src/bls.ts +1943 -1943
  23. package/src/cache.ts +73 -73
  24. package/src/cbp-border.ts +177 -177
  25. package/src/census-economic.ts +431 -431
  26. package/src/census.ts +735 -735
  27. package/src/ckan.ts +495 -495
  28. package/src/clinicaltrials.ts +923 -923
  29. package/src/cms-facility.ts +379 -379
  30. package/src/cms-hospital.ts +344 -344
  31. package/src/cms-supplier.ts +527 -527
  32. package/src/cms-utilization.ts +389 -389
  33. package/src/cms.ts +634 -634
  34. package/src/coerce.ts +47 -47
  35. package/src/courtlistener.ts +465 -465
  36. package/src/cpsc.ts +333 -333
  37. package/src/datagov-catalog.ts +312 -312
  38. package/src/datagov.ts +907 -907
  39. package/src/datagovKey.ts +68 -68
  40. package/src/datasource.ts +721 -721
  41. package/src/disclosure.ts +61 -61
  42. package/src/dol.ts +515 -515
  43. package/src/ecfr.ts +248 -248
  44. package/src/echo.ts +496 -496
  45. package/src/edgar.ts +3046 -3046
  46. package/src/epa-envirofacts.ts +358 -358
  47. package/src/errors.ts +324 -314
  48. package/src/fac.ts +529 -529
  49. package/src/far.ts +1009 -1009
  50. package/src/fdic.ts +2052 -2052
  51. package/src/federal-register.ts +725 -725
  52. package/src/feedback.ts +160 -0
  53. package/src/fema.ts +680 -680
  54. package/src/fpds.ts +620 -620
  55. package/src/fred.ts +464 -464
  56. package/src/gao.ts +744 -744
  57. package/src/gov-domains.ts +237 -237
  58. package/src/govinfo.ts +497 -497
  59. package/src/grants.ts +290 -290
  60. package/src/gsa-csv.ts +992 -992
  61. package/src/gsa-perdiem.ts +361 -361
  62. package/src/integrity.ts +928 -928
  63. package/src/keys.ts +268 -268
  64. package/src/lda.ts +385 -385
  65. package/src/meta.ts +292 -292
  66. package/src/nhtsa.ts +352 -352
  67. package/src/nih.ts +375 -375
  68. package/src/nist-controls.ts +219 -219
  69. package/src/nonprofit.ts +460 -460
  70. package/src/nppes.ts +834 -834
  71. package/src/nsf.ts +706 -706
  72. package/src/nvd.ts +1124 -1124
  73. package/src/nws-weather.ts +167 -167
  74. package/src/ofac.ts +1166 -1166
  75. package/src/openfda-device.ts +356 -356
  76. package/src/openfda-drugsfda.ts +313 -313
  77. package/src/openfda.ts +518 -518
  78. package/src/pricing.ts +1075 -1075
  79. package/src/sam-gov/client.ts +774 -774
  80. package/src/sam-gov/index.ts +32 -32
  81. package/src/sam-gov/types.ts +152 -152
  82. package/src/sba.ts +357 -357
  83. package/src/server.ts +6692 -6639
  84. package/src/snapshot.ts +223 -223
  85. package/src/socrata.ts +532 -532
  86. package/src/treasury.ts +582 -582
  87. package/src/update-check.ts +88 -0
  88. package/src/usaspending.ts +2852 -2852
  89. package/src/usitc.ts +420 -420
package/README.md CHANGED
@@ -1,714 +1,733 @@
1
- <div align="center">
2
-
3
- # @cliwant/mcp-sam-gov
4
-
5
- ### **$4 trillion of public federal data, one `npm install` away.**
6
-
7
- The most comprehensive **keyless-first** MCP server for US federal contracting + spending + regulation + partner vetting. **142 tools across 48 federal data sources** — keyless-first: only 4 sources (Census business-patterns, FRED, BEA, and DOL's data endpoint) need a free key; the other 44 need none. Works today, in any AI agent.
8
-
9
- [![npm](https://img.shields.io/npm/v/@cliwant/mcp-sam-gov?color=cb3837&label=%40cliwant%2Fmcp-sam-gov&logo=npm)](https://www.npmjs.com/package/@cliwant/mcp-sam-gov)
10
- [![mcp-registry](https://img.shields.io/badge/MCP%20Registry-active-2ea44f?logo=anthropic)](https://registry.modelcontextprotocol.io/v0/servers?search=cliwant)
11
- [![Glama score](https://glama.ai/mcp/servers/cliwant/mcp-sam-gov/badges/score.svg)](https://glama.ai/mcp/servers/cliwant/mcp-sam-gov)
12
- [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
13
- [![Daily smoke](https://github.com/cliwant/mcp-sam-gov/actions/workflows/daily-smoke.yml/badge.svg)](https://github.com/cliwant/mcp-sam-gov/actions/workflows/daily-smoke.yml)
14
-
15
- [English](./README.md) · [한국어](./README.ko.md) · [日本語](./README.ja.md)
16
-
17
- </div>
18
-
19
- ---
20
-
21
- ## See it in action
22
-
23
- ```text
24
- 👤 user Find active SAM.gov solicitations under NAICS 541512 closing this month
25
-
26
- 🤖 Claude → sam_search_opportunities { ncode: "541512", limit: 5 }
27
- ✓ 47,478 active opportunities indexed
28
-
29
- • 5ef3db5d… VA Bulk Oxygen Tank Rental closes 2026-05-15 ($1.05M)
30
- • a000339c… Articulating Boom Lifts closes 2026-05-30 ($310K)
31
- • be9c24ef… CMOP Hazardous Waste Removal closes 2026-06-12 ($2.7M)
32
-
33
- 👤 user Pull the SOW + contracting officer for the first one
34
-
35
- 🤖 Claude → sam_get_opportunity { noticeId: "5ef3db5d…" }
36
- ✓ Department of Veterans Affairs · Combined Synopsis/Solicitation
37
- POC: Rebecca Gobble <rebecca.gobble@va.gov> +1-410-642-2411
38
- Set-aside: Total Small Business
39
- Attachments: 1 ↓ 36C24526Q0460_1.docx (172 KB)
40
- SOW preview: "RFQ# 36C24526Q0460 — Bulk Oxygen Tank Rental, Fill, Telemetry…"
41
- ```
42
-
43
- **Zero API key. Zero registration. Zero signup.** Just plug it in and ask.
44
-
45
- ---
46
-
47
- ## Why this exists
48
-
49
- | Status quo | With this MCP |
50
- |---|---|
51
- | GovWin: $30K-$100K/yr per seat | Free, MIT license |
52
- | API key registration → wait 24h → quota tier shopping | `npm install` → working in 60s |
53
- | 5+ separate vendor APIs / scrapers | 1 unified surface, 142 tools across 48 sources |
54
- | LLMs hallucinate NAICS codes / agency names | Anti-hallucination autocomplete guards built-in |
55
- | Brittle scraping breaks weekly | Daily live smoke test ([badge above](#)) |
56
- | Procurement officer → IT ticket → 3-week wait | Claude Desktop double-click install |
57
-
58
- The federal data this wraps is **public domain**. There is no good reason it should cost a five-figure subscription to query.
59
-
60
- ---
61
-
62
- ## What this gives Claude (and other AI agents)
63
-
64
- | Domain | What you can ask | Sources |
65
- |---|---|---|
66
- | 🔍 **Opportunities & solicitations** | "Find SAM.gov solicitations under NAICS 541512 closing this month" — read the SOW, POCs, attachments | SAM.gov, Grants.gov |
67
- | 💰 **Spending, awards & competition** | "Show me Booz Allen wins at VA last fiscal year; top 10 PSC categories at DoD" | USAspending, FPDS, GAO |
68
- | 🕵️ **Entity & partner vetting** | "Screen this firm: OFAC sanctions, SAM exclusions, single-audit findings, bank health, EPA compliance + toxics-release" | OFAC, SAM, FAC, FDIC, EPA ECHO, EPA Envirofacts |
69
- | 🛒 **Product safety & recalls** | "Any FDA/NHTSA/CPSC recalls or enforcement against this supplier's products?" | openFDA, NHTSA, CPSC |
70
- | ⚖️ **Litigation & courts** | "Any Court of Federal Claims bid protests or Federal Circuit opinions involving this contractor?" | CourtListener (Free Law Project) |
71
- | 🏢 **Nonprofit vendors** | "Pull this nonprofit's IRS-990 financials before we subcontract to it" | IRS 990 (via ProPublica) |
72
- | 🏥 **Healthcare providers & facilities** | "Medicare utilization & payments for this provider; hospital quality ratings; is this provider on the revocation list?" | CMS (data.cms.gov) |
73
- | 📈 **Financial disclosure (SEC)** | "Pull this public company's revenue trend and latest 10-K filings" | SEC EDGAR |
74
- | ⚖️ **Regulatory & legislative** | "What VA cybersecurity rules were published this quarter? Any open Regulations.gov dockets?" | Federal Register, Regulations.gov, eCFR, FAR/DFARS, Congress.gov, GovInfo |
75
- | 💲 **Pricing, labor & fiscal** | "GSA CALC labor-rate band for a systems analyst; SCA wage determination for this county; CPI escalation; per-diem cap for a trip; regional GDP by industry; DOL wage-hour enforcement history" | GSA CALC, SAM WDs, BLS, US Census CBP, FRED, BEA, US Treasury, GSA per-diem, US DOL |
76
- | 🏛 **Lobbying & influence** | "Who lobbies the VA on cybersecurity, and how much do they spend?" | US Senate LDA |
77
- | 🏥 **Health & research funding** | "NIH/NSF grants on this topic; recruiting clinical trials; industry payments to this physician" | NIH RePORTER, NSF, ClinicalTrials.gov, CMS Open Payments, NPPES |
78
- | 🛡 **Cyber compliance** | "Is this CVE on the CISA KEV must-patch list?" | NVD, CISA KEV |
79
- | 🌐 **Trade, geo & disaster** | "HTS tariff for this product; Census tract for this address; FEMA declarations in this state" | USITC HTS, US Census, FEMA, Socrata, CKAN |
80
- | 🎓 **Grants & datasets** | "Cybersecurity grants posted in the last 30 days; discover federal open datasets" | Grants.gov, data.gov |
81
-
82
- **142 tools across 48 federal data sources — keyless-first: only 4 sources (Census business-patterns, FRED, BEA, and DOL's data endpoint) need a free key; the other 44 need none.** (An earlier 52-tool build measured roughly p50 ~0.25s / p95 ~0.8s against production federal APIs; latency varies by source and upstream load — treat it as fast, not a benchmarked guarantee.)
83
-
84
- ---
85
-
86
- ## How do I install it? Pick the path that matches you.
87
-
88
- ### 🟢 Path 1 — Claude Desktop, one-click (no terminal needed)
89
-
90
- Best for non-developers. Just download a file and double-click.
91
-
92
- 1. Download **`mcp-sam-gov.mcpb`** from the [latest release](https://github.com/cliwant/mcp-sam-gov/releases/latest).
93
- 2. Double-click the file. Claude Desktop opens with an "Install Extension" dialog.
94
- 3. Click **Install**.
95
- 4. Done. Start a new conversation and ask "Find active SAM.gov opportunities under NAICS 541512".
96
-
97
- That's it. No PowerShell, no `npm`, nothing.
98
-
99
- > Requires Claude Desktop ≥ 1.0 (which ships its own Node.js runtime).
100
-
101
- ### 🟡 Path 2 — Claude Code, one command
102
-
103
- If you already use Claude Code (the CLI):
104
-
105
- ```bash
106
- /plugin install cliwant/mcp-sam-gov
107
- ```
108
-
109
- This installs the MCP server **plus** a [SKILL.md](./skills/sam-gov/SKILL.md) workflow guide that teaches Claude when + how to use each of the 142 tools.
110
-
111
- ### 🔵 Path 3 — Manual install for any MCP host (Codex, Cursor, Continue, Gemini)
112
-
113
- For Codex CLI / Cursor / Continue / Gemini CLI / anything that speaks MCP:
114
-
115
- ```bash
116
- gh repo clone cliwant/mcp-sam-gov
117
- cd mcp-sam-gov
118
- npm install --omit=dev
119
- npm install -g .
120
- ```
121
-
122
- After install, the binary `mcp-sam-gov` is on your PATH. Add this to your host config:
123
-
124
- ```json
125
- {
126
- "mcpServers": {
127
- "sam-gov": {
128
- "command": "mcp-sam-gov"
129
- }
130
- }
131
- }
132
- ```
133
-
134
- Specific config locations per host: see [Host configurations](#host-configurations) below.
135
-
136
- ### ⚪ Path 4 — Direct path (zero install, just point at the file)
137
-
138
- Skip installation entirely:
139
-
140
- ```bash
141
- gh repo clone cliwant/mcp-sam-gov
142
- cd mcp-sam-gov
143
- npm install --omit=dev # only runtime deps; dist/ is pre-built
144
- ```
145
-
146
- Then point your host config at the absolute path:
147
-
148
- ```jsonc
149
- {
150
- "mcpServers": {
151
- "sam-gov": {
152
- "command": "node",
153
- "args": ["C:\\Users\\you\\mcp-sam-gov\\dist\\server.js"]
154
- }
155
- }
156
- }
157
- ```
158
-
159
- ---
160
-
161
- ## Host configurations
162
-
163
- ### Claude Desktop
164
-
165
- `%APPDATA%\Claude\claude_desktop_config.json` (Windows) or `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):
166
-
167
- ```json
168
- {
169
- "mcpServers": {
170
- "sam-gov": { "command": "mcp-sam-gov" }
171
- }
172
- }
173
- ```
174
-
175
- (Or skip this entirely — use Path 1's `.mcpb` and it auto-configures.)
176
-
177
- Restart Claude Desktop fully (system tray quit on Windows / Quit menu on macOS), then look for the 🔨 icon. You should see "sam-gov (142 tools)".
178
-
179
- ### Claude Code
180
-
181
- Per-project `.mcp.json`:
182
-
183
- ```json
184
- { "mcpServers": { "sam-gov": { "command": "mcp-sam-gov" } } }
185
- ```
186
-
187
- Or globally:
188
-
189
- ```bash
190
- claude mcp add sam-gov mcp-sam-gov
191
- ```
192
-
193
- ### Codex CLI
194
-
195
- `~/.codex/config.toml`:
196
-
197
- ```toml
198
- [mcp_servers.sam-gov]
199
- command = "mcp-sam-gov"
200
- args = []
201
- ```
202
-
203
- ### Cursor
204
-
205
- Settings → MCP → Add new MCP server:
206
-
207
- ```json
208
- { "mcpServers": { "sam-gov": { "command": "mcp-sam-gov" } } }
209
- ```
210
-
211
- ### Continue
212
-
213
- `~/.continue/config.json`:
214
-
215
- ```json
216
- {
217
- "experimental": {
218
- "modelContextProtocolServer": {
219
- "transport": { "type": "stdio", "command": "mcp-sam-gov" }
220
- }
221
- }
222
- }
223
- ```
224
-
225
- ### Gemini CLI
226
-
227
- `~/.gemini/settings.json`:
228
-
229
- ```json
230
- { "mcpServers": { "sam-gov": { "command": "mcp-sam-gov" } } }
231
- ```
232
-
233
- ### Anything else
234
-
235
- If your host speaks MCP over stdio, point it at `mcp-sam-gov`. No host-specific code.
236
-
237
- ---
238
-
239
- ## What questions can I ask?
240
-
241
- Once installed, you can ask in natural language. The agent picks the right tool sequence automatically.
242
-
243
- ### Discovery
244
- - "NAICS 541512 의 메릴랜드 입찰 중 30일 안에 마감되는 것 찾아줘"
245
- - "Find active SAM.gov solicitations under NAICS 541512, MD only, closing in 30 days"
246
- - "What's the canonical NAICS code for 'computer systems design'?"
247
-
248
- ### RFP analysis
249
- - "Pull noticeId 5ef3db5daeb54099a96d487783a38bd0 — give me the SOW, contracting officer, and attachments"
250
- - "Show me the full RFP body for that notice"
251
-
252
- ### Competitive landscape
253
- - "Top 5 recipients of VA contracts in NAICS 541519 last fiscal year"
254
- - "Show me Booz Allen's individual awards at DISA"
255
- - "Who are the sub-contractors on Leidos' VA contracts?"
256
- - "What's CMS in USAspending? (resolve the abbreviation)"
257
-
258
- ### Trends & aggregation
259
- - "How has VA 541512 spending trended over the last 5 fiscal years?"
260
- - "Top 10 states by federal contracting spend in 541512"
261
- - "Top PSC categories at DoD by spending"
262
- - "Federal grant programs in cybersecurity by total $"
263
-
264
- ### Agency intelligence (capture brief)
265
- - "Give me a capture brief on VA: mission, FY26 budget breakdown, top sub-agencies"
266
- - "What's VA's transaction volume for FY25?"
267
-
268
- ### Recompete radar
269
- - "VA 541512 contracts expiring in next 12 months over $1M"
270
- - "Pull period of performance for award CONT_AWD_..."
271
-
272
- ### Regulatory & legislative
273
- - "Find FAR sections about SDVOSB set-aside requirements"
274
- - "Turn this RFP's cited FAR/DFARS clause list into a Section L/M compliance matrix"
275
- - "What new VA cybersecurity rules were published this quarter?"
276
- - "Any Federal Register documents on the public-inspection desk from DoD today?"
277
- - "Search Regulations.gov dockets on 'contractor cybersecurity' and pull the public comments"
278
- - "Discover federal open datasets about 'wildfire' on data.gov"
279
- - "Is there a Federal Register doc number 2026-08333? Pull the citation."
280
-
281
- ### Partner & entity vetting
282
- - "Screen 'Acme Defense LLC' against the OFAC sanctions list and SAM exclusions"
283
- - "Look up NPI 1234567890 in NPPES — is this provider active?"
284
- - "Does this subcontractor have adverse Single Audit findings in the Federal Audit Clearinghouse?"
285
- - "How healthy is the bank on cert #3510 — risk ratios and quarterly financials?"
286
- - "Pull this public company's revenue trend and latest 10-K from SEC EDGAR"
287
- - "Any EPA compliance/enforcement flags for this facility?"
288
-
289
- ### Compliance & eligibility
290
- - "What's the SBA small-business size standard for NAICS 541512?"
291
- - "Search the eCFR for the exact text of a rule"
292
- - "What's the US import duty rate (HTS) for lithium-ion batteries?"
293
-
294
- ### Pricing, labor & fiscal
295
- - "GSA CALC ceiling-rate band for a senior systems analyst"
296
- - "Find the SCA wage determination for Baltimore County, MD and give me the fringe rates"
297
- - "How much has CPI-U risen over the last 3 years for an escalation clause?"
298
- - "What's the current total US public debt (Debt to the Penny)?"
299
-
300
- ### Cyber
301
- - "Is CVE-2021-44228 (Log4Shell) on the CISA KEV must-patch list, and what's the due date?"
302
-
303
- ### Health & research funding
304
- - "NIH RePORTER projects on mRNA vaccines funded last year"
305
- - "Recruiting clinical trials for diabetes sponsored by industry"
306
- - "Industry payments to physicians in CA from the CMS Open Payments Research dataset"
307
-
308
- ### Grants
309
- - "Cybersecurity grants posted in the last 30 days"
310
- - "Pull grant id 361238"
311
-
312
- ---
313
-
314
- ## Optional — higher rate limits + archives
315
-
316
- The MCP server runs **keyless** by default. For higher SAM.gov rate limits + the full archive (notices older than ~12 months), set `SAM_GOV_API_KEY` in your host's env block:
317
-
318
- ```json
319
- {
320
- "mcpServers": {
321
- "sam-gov": {
322
- "command": "mcp-sam-gov",
323
- "env": { "SAM_GOV_API_KEY": "your-key-here" }
324
- }
325
- }
326
- }
327
- ```
328
-
329
- Get a free key at [sam.gov/SAM/pages/public/searchKeyData.jsf](https://sam.gov/SAM/pages/public/searchKeyData.jsf). The agent doesn't need to know — the key path is transparent.
330
-
331
- ### `DATA_GOV_API_KEY` — the api.data.gov / api.gsa.gov family
332
-
333
- A handful of sources ride the shared **api.data.gov** gateway — Congress.gov, GovInfo, Regulations.gov, FAC, NPPES, and the data.gov v4 dataset catalog. They work **keyless** out of the box via the public `DEMO_KEY` (a low shared hourly quota). Set `DATA_GOV_API_KEY` to raise those limits substantially:
334
-
335
- ```json
336
- {
337
- "mcpServers": {
338
- "sam-gov": {
339
- "command": "mcp-sam-gov",
340
- "env": { "DATA_GOV_API_KEY": "your-key-here" }
341
- }
342
- }
343
- }
344
- ```
345
-
346
- Get one free (instant, no wait) at [api.data.gov/signup](https://api.data.gov/signup). The same key is accepted across all api.data.gov / api.gsa.gov sources. Like the SAM key, it is sent only on the wire (never logged); unset simply means `DEMO_KEY`. BLS sources similarly accept an optional free `BLS_API_KEY` to lift their daily quota.
347
-
348
- ### Keys & higher limits — the full inventory
349
-
350
- **Most tools are keyless.** Four sources *require* a free key — **Census** (`census_business_patterns`), **FRED** (`fred_search_series`, `fred_series_observations`), **BEA** (`bea_regional_data`), and **DOL's data endpoint** (`dol_get_dataset`) — those sources have no keyless tier, so the tool throws without one. (DOL's catalog `dol_list_datasets` is keyless.) The other keys are *optional*: they only raise a rate limit or unlock a single filter. **Every key below is free.**
351
-
352
- | Env var | Required? | What it unlocks | Free signup |
353
- |---|---|---|---|
354
- | `CENSUS_API_KEY` | **Required** | `census_business_patterns` (no keyless tier — throws without it) | [api.census.gov/data/key_signup.html](https://api.census.gov/data/key_signup.html) |
355
- | `FRED_API_KEY` | **Required** | the 2 FRED tools (no keyless tier — throw without it) | [fred.stlouisfed.org/docs/api/api_key.html](https://fred.stlouisfed.org/docs/api/api_key.html) |
356
- | `BEA_API_KEY` | **Required** | `bea_regional_data` (BEA Regional; no keyless tier — throws without it) | [apps.bea.gov/API/signup](https://apps.bea.gov/API/signup/) |
357
- | `DOL_API_KEY` | **Required for data** | `dol_get_dataset` (DOL enforcement records via `X-API-KEY`; the `dol_list_datasets` catalog is keyless) | [dol.gov/developer](https://dol.gov/developer) |
358
- | `DATA_GOV_API_KEY` | Optional | higher limits on all api.data.gov sources (Regulations.gov, FAC, NPPES, CMS, data.gov catalog, GSA per-diem) — lifts the shared `DEMO_KEY` cap | [api.data.gov/signup](https://api.data.gov/signup/) |
359
- | `SAM_GOV_API_KEY` | Optional | authenticated SAM.gov v2 search + the organization-name filter | [open.gsa.gov/api/get-opportunities-public-api](https://open.gsa.gov/api/get-opportunities-public-api/) |
360
- | `LDA_API_KEY` | Optional | higher rate limit on `lda_search_filings` (Senate LDA lobbying; keyless by default) | [lda.senate.gov/api/register](https://lda.senate.gov/api/register/) |
361
- | `BLS_API_KEY` | Optional | the BLS v2 tier (~500 queries/day vs keyless ~25/day) | [data.bls.gov/registrationEngine](https://data.bls.gov/registrationEngine/) |
362
- | `NVD_API_KEY` | Optional | a higher NVD rate limit (`cve_lookup`) | [nvd.nist.gov/developers/request-an-api-key](https://nvd.nist.gov/developers/request-an-api-key) |
363
- | `OPENFDA_API_KEY` | Optional | higher openFDA rate limit (`openfda_enforcement`, `openfda_device_clearances`; both work keyless) | [open.fda.gov/apis/authentication](https://open.fda.gov/apis/authentication/) |
364
- | `COURTLISTENER_API_TOKEN` | Optional | higher CourtListener rate limit (`courtlistener_search_opinions`; works keyless) | [courtlistener.com/help/api/rest](https://www.courtlistener.com/help/api/rest/) |
365
- | `SOCRATA_APP_TOKEN` | Optional | higher Socrata throttling limits | [evergreen.data.socrata.com/signup](https://evergreen.data.socrata.com/signup) |
366
-
367
- **Two ways to set any key** — pick one:
368
-
369
- 1. **Host env block** — the `"env": { … }` object shown in the examples above.
370
- 2. **A `.env` file** in the server's working directory — configure your keys **once**:
371
- ```
372
- CENSUS_API_KEY=your-key-here
373
- FRED_API_KEY=your-key-here
374
- # optional — raise limits / unlock filters
375
- SAM_GOV_API_KEY=your-key-here
376
- ```
377
- The server auto-loads `.env` at startup. A real environment variable always wins over `.env` (standard precedence), and `.env` is git-ignored so your keys never get committed.
378
-
379
- **Ask the server which keys it needs.** The keyless **`api_key_status`** tool lists every key, whether it's required or optional, the free signup URL + what it unlocks, and whether each is **currently configured** (a boolean — the key value is never shown). Creating the account at the signup URL is your one manual step; the server automates *discovery* (`api_key_status`) and *configuration* (`.env`). To confirm a key actually works, call that source's own tool.
380
-
381
- ---
382
-
383
- ## Tool catalog (142 tools)
384
-
385
- Grouped by workflow. Keyless-first — most tools need no key; Census business-patterns, FRED, BEA, and DOL's data endpoint require a free key, and a handful of others gain higher limits from an optional free key (noted above). Descriptions are condensed — each tool's own `inputSchema` carries the full contract and honesty caveats.
386
-
387
- <details>
388
- <summary><b>Opportunities & solicitations — SAM.gov + Grants.gov (10 tools)</b></summary>
389
-
390
- - `sam_search_opportunities` — keyless HAL search of active SAM.gov contracting opportunities
391
- - `sam_search_shaping` — pre-solicitation radar (Sources Sought / Presol / Special Notices before the RFP exists)
392
- - `sam_get_opportunity` — full detail by 32-char hex noticeId (POCs + attachments + body)
393
- - `sam_fetch_description` — full RFP body as plain text
394
- - `sam_fetch_attachment_text` — extract attachment text (RFP / SOW / Q&A / wage tables) from PDF + DOCX + text/HTML
395
- - `sam_attachment_url` — build the public download URL for an attachment resourceId
396
- - `sam_lookup_organization` — federal-organization id → canonical fullParentPathName
397
- - `sam_lookup_notice_fields` — batch-fill nulled naics/set-aside/PoP/deadline for 1–100 noticeIds from the opt-in GSA daily CSV
398
- - `grants_search` — Grants.gov federal grant opportunities (financial assistance, distinct from SAM contracts)
399
- - `grants_get_opportunity` — full detail for a single grant opportunity by id
400
- </details>
401
-
402
- <details>
403
- <summary><b>Spending, awards & competition — USAspending + FPDS + GAO (31 tools)</b></summary>
404
-
405
- - `usas_search_awards` — aggregate share-of-wallet at agency × NAICS
406
- - `usas_search_individual_awards` — line-item federal contracts (returns generatedInternalId)
407
- - `usas_get_award_detail` — full award detail: period of performance, options, set-aside, competition
408
- - `usas_search_awards_by_recipient` — every contract a recipient won in an agency × NAICS slice
409
- - `usas_search_subawards` — enumerate subcontracts on prime awards (supply chain / teaming)
410
- - `usas_search_recompetes` — recompete radar (PoP ending in a window, soonest-first, no silent drops)
411
- - `usas_search_expiring_contracts` — **deprecated** alias of `usas_search_recompetes` (legacy shape)
412
- - `usas_analyze_incumbent` — per-award incumbent + public recompete-pressure hints (labels, not a score)
413
- - `usas_search_teaming_partners` — small-business teaming discovery by cert × NAICS × agency, exclusion-screened
414
- - `usas_spending_over_time` — contract-spending time series (fiscal_year / quarter / month)
415
- - `usas_search_agency_spending` — spending broken down by awarding agency
416
- - `usas_search_subagency_spending` — break a parent agency down by sub-agency / office
417
- - `usas_search_psc_spending` — spending by Product Service Code (PSC)
418
- - `usas_search_cfda_spending` — spending by CFDA grant-program code
419
- - `usas_search_state_spending` — spending by state / territory
420
- - `usas_search_federal_account_spending` — spending by federal account / Treasury Account Symbol (TAS)
421
- - `usas_search_recipients` — recipient list with parent/child hierarchy
422
- - `usas_get_recipient_profile` — full recipient detail (UEI, alternate names, totals)
423
- - `usas_get_agency_profile` — agency profile by toptier code (mission, abbreviation, website)
424
- - `usas_get_agency_awards_summary` — award activity for a fiscal year (transaction count + obligations)
425
- - `usas_get_agency_budget_function` — budget-function breakdown for an agency × fiscal year
426
- - `usas_list_toptier_agencies` — all toptier agencies + current-FY obligations
427
- - `usas_lookup_agency` — resolve 'VA' / 'DHS' → canonical toptier name + 4-digit code
428
- - `usas_autocomplete_naics` — anti-hallucination NAICS guard
429
- - `usas_autocomplete_recipient` — anti-hallucination recipient guard
430
- - `usas_naics_hierarchy` — navigate the NAICS tree (2→4→6) + active-contract count per code
431
- - `usas_glossary` — 151 federal-spending terms
432
- - `usas_list_disaster_codes` — list Disaster Emergency Fund Codes (DEFC): COVID-19, IIJA/infrastructure, and other emergency-appropriation tags
433
- - `usas_disaster_spending` — disaster/emergency-fund spending BY GEOGRAPHY for given DEFCs (which state/county/district captured COVID/IIJA relief money)
434
- - `fpds_search_awards` — FPDS-NG federal contract award actions (the authoritative award-action feed)
435
- - `gao_protest_lookup` — recent GAO bid-protest decisions from the public Legal-Products RSS feed (recent window only)
436
- </details>
437
-
438
- <details>
439
- <summary><b>Entity & partner vetting — OFAC · SAM · FAC · FDIC · EPA (15 tools)</b></summary>
440
-
441
- - `ofac_screen_entity` — keyless OFAC denied-party / sanctions screening
442
- - `sam_check_exclusions` — keyless SAM debarment/exclusion screening by name and/or UEI/CAGE
443
- - `sam_integrity_lookup` — one-call integrity screen (exclusion verdict + honest FAPIIS pointer)
444
- - `fac_search_audits` — Single Audit summaries from the Federal Audit Clearinghouse
445
- - `fac_get_findings` — drill into the audit-RISK findings for an entity
446
- - `fdic_search_institutions` — search the FDIC-insured-institution directory
447
- - `fdic_institution_financials` — quarterly financial time-series for one institution (by cert #)
448
- - `fdic_risk_ratios` — counterparty risk ratios for one institution
449
- - `fdic_institution_history` — structural-change event log (mergers, charter changes)
450
- - `fdic_branch_deposits` — branch-deposit footprint
451
- - `fdic_bank_failures` — historical bank failures & assistance transactions
452
- - `fdic_industry_summary` — industry & state banking-sector annual aggregates
453
- - `echo_search_facilities` — search EPA-regulated facilities by state with compliance/enforcement screening
454
- - `echo_facility_report` — EPA ECHO Detailed Facility Report for one facility (by FRS RegistryID)
455
- - `epa_tri_facilities` — EPA Envirofacts TRI (Toxics Release Inventory) facilities by state/industry (environmental / ESG vetting)
456
- </details>
457
-
458
- <details>
459
- <summary><b>Product safety & recalls — openFDA · NHTSA · CPSC (6 tools)</b></summary>
460
-
461
- - `openfda_enforcement` — FDA drug / device / food recalls & enforcement actions (product-safety supplier vetting)
462
- - `openfda_device_clearances` — FDA 510(k) medical-device clearances (device-maker capability check)
463
- - `openfda_drug_approvals` — openFDA Drugs@FDA drug-approval applications (sponsor, approved products, submission/approval history)
464
- - `nhtsa_recalls` — NHTSA vehicle recalls by make / model / year
465
- - `nhtsa_complaints` — NHTSA vehicle safety complaints by make / model / year
466
- - `cpsc_recalls` — CPSC consumer-product recalls (product supplier vetting)
467
- </details>
468
-
469
- <details>
470
- <summary><b>Litigation & courts — CourtListener (1 tool)</b></summary>
471
-
472
- - `courtlistener_search_opinions` — US federal court opinions (COFC contract claims / bid protests, Federal Circuit) — data via CourtListener / Free Law Project (disclosed)
473
- </details>
474
-
475
- <details>
476
- <summary><b>Nonprofit vendors — IRS 990 via ProPublica (2 tools)</b></summary>
477
-
478
- - `nonprofit_search` — IRS-990 nonprofit search by name / state / NTEE — via ProPublica Nonprofit Explorer (disclosed)
479
- - `nonprofit_financials` — IRS-990 nonprofit financials by EIN — via ProPublica Nonprofit Explorer (disclosed)
480
- </details>
481
-
482
- <details>
483
- <summary><b>Financial disclosure — SEC EDGAR (8 tools)</b></summary>
484
-
485
- - `edgar_lookup_cik` — resolve a company ticker or name to its 10-digit SEC CIK
486
- - `edgar_company_filings` — a company's SEC filings
487
- - `edgar_company_facts` — curated XBRL financial facts for a filer
488
- - `edgar_company_concept` — one filer × one XBRL concept × the complete reported time-series
489
- - `edgar_xbrl_frames` — cross-filer XBRL cross-section (one concept across all filers for a period)
490
- - `edgar_full_text_search` — full-text search across EDGAR filings, 2001–present
491
- - `edgar_filing_index` — bulk cross-filer filing index for a quarter
492
- - `edgar_daily_filing_index` — per-day cross-filer filing index
493
- </details>
494
-
495
- <details>
496
- <summary><b>Regulatory & legislative — Federal Register · Regulations.gov · eCFR · FAR · Congress · GovInfo (18 tools)</b></summary>
497
-
498
- - `fed_register_search_documents` — search Federal Register documents by query / agency / type / date
499
- - `fed_register_get_document` — full detail for a document by number (citation, body URL, CFR refs)
500
- - `fed_register_public_inspection` — the Federal Register public-inspection desk (pre-publication)
501
- - `fed_register_list_agencies` — Federal Register agency slugs reference
502
- - `regulations_search_dockets` — search Regulations.gov rulemaking dockets
503
- - `regulations_search_documents` — search Regulations.gov rulemaking documents (rules, proposed rules, notices)
504
- - `regulations_search_comments` — search public comments on rulemakings
505
- - `regulations_get_docket` — fetch one Regulations.gov docket by id
506
- - `ecfr_search` — full-text search across the entire CFR (titleNumber=48 for FAR)
507
- - `ecfr_list_titles` — all 50 CFR titles + last-amended dates
508
- - `far_clause_lookup` — authoritative FAR/DFARS clause text + its prescription (exact clause number)
509
- - `far_search` — FAR/DFARS-scoped search (excludes GSAM, collapses to current in-force version)
510
- - `far_compliance_matrix` — cited-clause list → proposal-ready Section L/M compliance matrix (eligibility gates flagged)
511
- - `congress_search_bills` — search Congress.gov bills / legislation
512
- - `congress_get_bill` — one bill by congress / type / number
513
- - `govinfo_search_packages` — search GovInfo (GPO-authoritative) packages in a collection
514
- - `govinfo_get_package` — one GovInfo package summary + download links (txt/xml/pdf/mods)
515
- - `govinfo_list_collections` — the GovInfo collection catalog
516
- </details>
517
-
518
- <details>
519
- <summary><b>Pricing, labor & fiscal — GSA CALC · SAM WDs · BLS · Census CBP · FRED · BEA · US Treasury · GSA per-diem (15 tools)</b></summary>
520
-
521
- - `gsa_benchmark_labor_rates` — GSA CALC awarded ceiling-rate market band for a labor category (a distribution, not one price)
522
- - `sam_search_wage_determinations` — find SCA / Davis-Bacon wage determinations for a locality
523
- - `sam_get_wage_rates` — prevailing-wage + fringe / H&W rate table parsed from a WD, plus the EO minimum-wage floor
524
- - `bls_timeseries` — BLS time series (CPI-U / ECI escalation, PPI, employment) — the pricing/escalation layer
525
- - `bls_oews_wages` — benchmark occupational wages & employment (BLS OEWS) by area × occupation
526
- - `bls_qcew` — county × NAICS market size / wages / location quotient (competition density)
527
- - `treasury_debt_to_penny` — daily total US public debt outstanding (Treasury Fiscal Data)
528
- - `treasury_avg_interest_rates` — average interest rate the Treasury pays by security type
529
- - `treasury_monthly_statement` — Monthly Treasury Statement: receipts, outlays, deficit/surplus by month
530
- - `treasury_query_dataset` — escape-hatch query over 7 confirmed Treasury Fiscal Data datasets
531
- - `bea_regional_data` — GDP / personal income by industry × geography (BEA Regional; requires free BEA_API_KEY)
532
- - `census_business_patterns` — establishments / employment / annual payroll by NAICS × geography (Census CBP; requires free CENSUS_API_KEY)
533
- - `fred_search_series` — search the FRED macroeconomic series catalog (GDP/CPI/rates/unemployment; requires free FRED_API_KEY)
534
- - `fred_series_observations` — time-series observations for a FRED series (missing values → null; requires free FRED_API_KEY)
535
- - `gsa_perdiem_rates` — federal travel per-diem: monthly lodging + M&IE meals caps by city+state or zip (keyless via DEMO_KEY)
536
- </details>
537
-
538
- <details>
539
- <summary><b>Health & research funding — NIH · NSF · ClinicalTrials · CMS · NPPES (9 tools)</b></summary>
540
-
541
- - `nih_reporter_search_projects` — awarded NIH RePORTER research-grant projects
542
- - `nsf_search_awards` — awarded NSF research-grant awards
543
- - `nsf_get_award` — one NSF award by its numeric award id
544
- - `clinicaltrials_search_studies` — federally-registered clinical studies with sponsor/funder enrichment
545
- - `clinicaltrials_get_study` — one clinical study by NCT id (incl. brief summary)
546
- - `clinicaltrials_facet_counts` — exact per-value study-count distribution over the whole registry
547
- - `cms_search_datasets` — discover CMS Open Payments (Sunshine Act) datasets
548
- - `cms_query_dataset` — query a CMS Open Payments datastore distribution (industry→physician payments)
549
- - `nppes_lookup_provider` — CMS/HHS NPPES NPI Registry provider lookup
550
- </details>
551
-
552
- <details>
553
- <summary><b>Healthcare providers & facilities — CMS (5 tools)</b></summary>
554
-
555
- - `cms_medicare_provider_services` — Medicare provider utilization & payments (healthcare market sizing)
556
- - `cms_hospital_compare` — CMS Hospital Compare quality ratings
557
- - `cms_facility_directory` — CMS nursing-home / home-health / hospice / dialysis facility directories
558
- - `cms_dmepos_suppliers` — CMS DMEPOS (durable medical equipment) supplier directory + Medicare spend
559
- - `cms_revoked_providers` — CMS Medicare revocation / exclusion list (provider compliance vetting)
560
- </details>
561
-
562
- <details>
563
- <summary><b>Cyber compliance — NVD + CISA KEV + NIST 800-53 (3 tools)</b></summary>
564
-
565
- - `cve_lookup` — look up NIST NVD CVE records
566
- - `cisa_kev_lookup` — filter the CISA Known Exploited Vulnerabilities catalog (binding BOD 22-01 remediation due-dates)
567
- - `nist_800_53_controls` — NIST SP 800-53 Rev 5 security & privacy controls lookup (FedRAMP/CMMC/RMF requirement text by controlId/family/keyword)
568
- </details>
569
-
570
- <details>
571
- <summary><b>Trade, tariffs & logistics — USITC · CBP (2 tools)</b></summary>
572
-
573
- - `hts_lookup` — US import-tariff classification + duty rates from the USITC Harmonized Tariff Schedule
574
- - `cbp_border_wait_times` — live CBP land-border commercial-vehicle wait times (Canadian + Mexican ports; freight/logistics)
575
- </details>
576
-
577
- <details>
578
- <summary><b>Geo, disaster & state/local open data — Census · FEMA · NWS · Socrata · CKAN (10 tools)</b></summary>
579
-
580
- - `census_geocode_address` — resolve a one-line US address → matched address + Census geographies (tract, CD, place)
581
- - `census_geographies_by_coordinates` — resolve a longitude/latitude point → Census geographies
582
- - `fema_disaster_declarations` — FEMA disaster / emergency declarations by state, type, incident, year
583
- - `fema_search_public_assistance` — FEMA Public Assistance funded projects
584
- - `fema_search_hazard_mitigation` — FEMA Hazard Mitigation Assistance projects (HMGP/FMA/PDM/BRIC mitigation grants to state/local/tribal subrecipients; disaster-resilience, distinct from Public Assistance recovery)
585
- - `nws_active_alerts` — currently-active NWS weather alerts (watches/warnings/advisories; disaster/climate readiness, pairs with the FEMA tools)
586
- - `socrata_discover_datasets` — find Socrata dataset 4x4 ids by keyword
587
- - `socrata_query` — query rows from an allowlisted Socrata/SODA open-data portal
588
- - `ckan_discover_datasets` — find CKAN datastore resource ids by keyword
589
- - `ckan_query` — query rows from an allowlisted CKAN datastore resource (state/city spend/checkbook)
590
- </details>
591
-
592
- <details>
593
- <summary><b>Dataset & registry discovery — data.gov · get.gov (2 tools)</b></summary>
594
-
595
- - `datagov_search_datasets` — search the data.gov v4 catalog for federal open datasets across all publishing agencies
596
- - `search_gov_domains` — CISA get.gov authoritative .gov domain registry (resolve which org owns a .gov domain; enumerate federal agencies + map SLED entities)
597
- </details>
598
-
599
- <details>
600
- <summary><b>Small business — SBA (1 tool)</b></summary>
601
-
602
- - `sba_size_standard` — SBA small-business size standard for a 6-digit NAICS (set-aside eligibility gate)
603
- </details>
604
-
605
- <details>
606
- <summary><b>Labor compliance — US DOL (2 tools)</b></summary>
607
-
608
- - `dol_list_datasets` — browse DOL enforcement/compliance datasets (WHD, OFCCP, …) — keyless catalog
609
- - `dol_get_dataset` — fetch DOL enforcement records (WHD wage-hour / OFCCP; requires free DOL_API_KEY)
610
- </details>
611
-
612
- <details>
613
- <summary><b>Lobbying & influence — US Senate LDA (1 tool)</b></summary>
614
-
615
- - `lda_search_filings` — Senate lobbying filings: who lobbies which agency, on what issue, for how much (keyless)
616
- </details>
617
-
618
- <details>
619
- <summary><b>Server utilities — key discovery (1 tool)</b></summary>
620
-
621
- - `api_key_status` — list which API keys the server can use, required vs optional, signup URLs, and whether each is currently set (value never shown)
622
- </details>
623
-
624
- ---
625
-
626
- ## Reliability & offline snapshots
627
-
628
- This server is built around one rule: **honest failure over confident fabrication.** Everything below is about *availability* of public data — none of it bypasses access controls.
629
-
630
- **Keyless-first, and a down source *throws*.** Every source works with no API key. When a source is rate-limited, blocked, or down, the tool returns a **typed error** (`rate_limited` / `upstream_unavailable` / `schema_drift` / …) — it never invents rows and never reports a DOWN service as "0 results" or "not found". A genuine empty result and an outage are always distinguishable.
631
-
632
- **Offline snapshots (on by default).** Some reference data changes slowly — the toptier-agency list, the top-level NAICS tree, the USAspending glossary, SBA size standards, the latest Treasury "Debt to the Penny." By default, when a live federal source is briefly unreachable from your egress, the server falls back to a **public, weekly-refreshed snapshot** of that slow-changing reference data, hosted at `raw.githubusercontent.com/cliwant/mcp-sam-gov/snapshots`. It only fetches on a **live hard-failure** (an outage / IP-reputation block), never during normal operation — public data, no telemetry. A served snapshot is **never presented as live** — the response carries `_meta.dataPath: "snapshot"` plus an `asOf` timestamp, and `complete` is forced off, so an AI agent (and you) always see the staleness. A rate limit (429) is always **honored**, never routed around onto the mirror.
633
-
634
- - **Disable it (pure live-only):** set `SAMGOV_SNAPSHOT_BASE_URL=off`. Then no snapshot path is ever added and behavior is byte-for-byte identical to a live-only client.
635
- - **Point at your own mirror:** set `SAMGOV_SNAPSHOT_BASE_URL` to your base URL to host the snapshots yourself instead of using the public default.
636
-
637
- ```json
638
- { "mcpServers": { "sam-gov": { "command": "mcp-sam-gov",
639
- "env": { "SAMGOV_SNAPSHOT_BASE_URL": "off" } } } }
640
- ```
641
-
642
- - **Build the snapshots:** run `node scripts/build-snapshots.mjs` from any clean, non-blocked egress (a laptop / home / clean CI runner). It **self-diagnoses per-source reachability**, prints a reachability table, and writes a `manifest.json`. On partial coverage it refreshes only the sources it can reach and **leaves the last-good file in place** for the rest (stale-but-honest, never blanked). It exits non-zero only when *zero* sources were reachable (a fully blocked egress — the signal to re-run from a cleaner one).
643
-
644
- - **The honest boundary.** This covers **public-data availability only.** The snapshot builder ingests only public, redistributable (public-domain / CC0) data, and the reader refuses to serve any envelope not marked `accessLevel: "public"`. It **honors rate limits** (a 429 is never routed around), uses **no proxies, no IP rotation, no auth/paywall/CAPTCHA bypass**, and refuses off-host redirects. If a source is blocked, the honest remedy is to build from a cleaner egress — not to evade the block.
645
-
646
- ---
647
-
648
- ## Troubleshooting
649
-
650
- | Symptom | Fix |
651
- |---|---|
652
- | Claude Desktop 🔨 menu doesn't show `sam-gov` | Fully quit Claude Desktop (system tray on Windows / Quit menu on macOS) and reopen. Check `%APPDATA%\Claude\logs\mcp*.log` |
653
- | `command not found: mcp-sam-gov` | Confirm `npm install -g .` succeeded; check that npm's global bin is on PATH (`npm config get prefix`) |
654
- | `MODULE_NOT_FOUND ...dist/server.js` after `npm install -g github:...` | npm bug with git-dep symlinks on Windows. Use the clone + `npm install -g .` recipe (Path 3) instead. |
655
- | `EPERM: operation not permitted, rmdir` during install | Previous failed install left dangling files. Run `rmdir /s /q "%APPDATA%\npm\node_modules\@cliwant"` (or `@govicon` if you installed an early version) then retry. |
656
- | `npm install` fails with "private repo" / 404 | The repo is now public — should not happen. If it does, try `git clone https://github.com/cliwant/mcp-sam-gov.git` directly. |
657
- | Tools return empty results | SAM.gov rate-limits aggressive callers. Wait 1 minute. Or set `SAM_GOV_API_KEY` for the higher-rate authenticated path. |
658
- | "Tool error: USAspending POST returned 400" | Usually means a field has a wrong type (e.g. fiscal year as string). Check the tool input schema in your host's tool browser. |
659
-
660
- ---
661
-
662
- ## Use as a TypeScript / JavaScript library (no MCP)
663
-
664
- Beyond the MCP server, this package also exports the underlying federal-data
665
- clients as importable modules. Useful if you're building your own SaaS, AI
666
- agent, or CLI and want programmatic access without spawning an MCP server.
667
-
668
- ```bash
669
- npm install @cliwant/mcp-sam-gov
670
- ```
671
-
672
- ```ts
673
- // SAM.gov client
674
- import { SamGovClient } from "@cliwant/mcp-sam-gov/sam-gov";
675
-
676
- const sam = new SamGovClient(); // keyless
677
- const result = await sam.searchOpportunities({ ncode: "541512", limit: 5 });
678
- const opp = await sam.getOpportunity("5ef3db5daeb54099a96d487783a38bd0");
679
- ```
680
-
681
- ```ts
682
- // USAspending wrappers
683
- import * as usas from "@cliwant/mcp-sam-gov/usaspending";
684
-
685
- const recompete = await usas.searchExpiringContracts({
686
- agency: "Department of Veterans Affairs",
687
- naics: "541512",
688
- monthsUntilExpiry: 12,
689
- });
690
- const recipient = await usas.getRecipientProfile("ed02855e-60d7-2540-...-P");
691
- ```
692
-
693
- ```ts
694
- // Federal Register / eCFR / Grants.gov
695
- import * as fedreg from "@cliwant/mcp-sam-gov/federal-register";
696
- import * as ecfr from "@cliwant/mcp-sam-gov/ecfr";
697
- import * as grants from "@cliwant/mcp-sam-gov/grants";
698
-
699
- const farResults = await ecfr.search({ query: "SDVOSB", titleNumber: 48 });
700
- ```
701
-
702
- This is the canonical home for the Cliwant federal-data libraries — there
703
- is no separate library package. Two earlier repos (`govicon-sam-gov` and
704
- `govicon-mcp-sam-gov`) have been archived and consolidated here. All
705
- client code lives in `src/sam-gov/`, `src/usaspending.ts`,
706
- `src/federal-register.ts`, `src/ecfr.ts`, `src/grants.ts`.
707
-
708
- ## License
709
-
710
- MIT — see [LICENSE](./LICENSE).
711
-
712
- ## Disclaimer
713
-
714
- This server uses **publicly available** federal API endpoints. It is not affiliated with the General Services Administration, SAM.gov, USAspending.gov, the Office of the Federal Register, the National Archives, Grants.gov, or any federal agency. Federal procurement, spending, and regulation data is in the public domain.
1
+ <div align="center">
2
+
3
+ # @cliwant/mcp-sam-gov
4
+
5
+ ### **$4 trillion of public federal data, one `npm install` away.**
6
+
7
+ The most comprehensive **keyless-first** MCP server for US federal contracting + spending + regulation + partner vetting. **143 tools across 48 federal data sources** — keyless-first: only 4 sources (Census business-patterns, FRED, BEA, and DOL's data endpoint) need a free key; the other 44 need none. Works today, in any AI agent.
8
+
9
+ [![npm](https://img.shields.io/npm/v/@cliwant/mcp-sam-gov?color=cb3837&label=%40cliwant%2Fmcp-sam-gov&logo=npm)](https://www.npmjs.com/package/@cliwant/mcp-sam-gov)
10
+ [![mcp-registry](https://img.shields.io/badge/MCP%20Registry-active-2ea44f?logo=anthropic)](https://registry.modelcontextprotocol.io/v0/servers?search=cliwant)
11
+ [![Glama score](https://glama.ai/mcp/servers/cliwant/mcp-sam-gov/badges/score.svg)](https://glama.ai/mcp/servers/cliwant/mcp-sam-gov)
12
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](./LICENSE)
13
+ [![Daily smoke](https://github.com/cliwant/mcp-sam-gov/actions/workflows/daily-smoke.yml/badge.svg)](https://github.com/cliwant/mcp-sam-gov/actions/workflows/daily-smoke.yml)
14
+
15
+ [English](./README.md) · [한국어](./README.ko.md) · [日本語](./README.ja.md)
16
+
17
+ </div>
18
+
19
+ ---
20
+
21
+ ## See it in action
22
+
23
+ ```text
24
+ 👤 user Find active SAM.gov solicitations under NAICS 541512 closing this month
25
+
26
+ 🤖 Claude → sam_search_opportunities { ncode: "541512", limit: 5 }
27
+ ✓ 47,478 active opportunities indexed
28
+
29
+ • 5ef3db5d… VA Bulk Oxygen Tank Rental closes 2026-05-15 ($1.05M)
30
+ • a000339c… Articulating Boom Lifts closes 2026-05-30 ($310K)
31
+ • be9c24ef… CMOP Hazardous Waste Removal closes 2026-06-12 ($2.7M)
32
+
33
+ 👤 user Pull the SOW + contracting officer for the first one
34
+
35
+ 🤖 Claude → sam_get_opportunity { noticeId: "5ef3db5d…" }
36
+ ✓ Department of Veterans Affairs · Combined Synopsis/Solicitation
37
+ POC: Rebecca Gobble <rebecca.gobble@va.gov> +1-410-642-2411
38
+ Set-aside: Total Small Business
39
+ Attachments: 1 ↓ 36C24526Q0460_1.docx (172 KB)
40
+ SOW preview: "RFQ# 36C24526Q0460 — Bulk Oxygen Tank Rental, Fill, Telemetry…"
41
+ ```
42
+
43
+ **Zero API key. Zero registration. Zero signup.** Just plug it in and ask.
44
+
45
+ ---
46
+
47
+ ## Why this exists
48
+
49
+ | Status quo | With this MCP |
50
+ |---|---|
51
+ | GovWin: $30K-$100K/yr per seat | Free, MIT license |
52
+ | API key registration → wait 24h → quota tier shopping | `npm install` → working in 60s |
53
+ | 5+ separate vendor APIs / scrapers | 1 unified surface, 143 tools across 48 sources |
54
+ | LLMs hallucinate NAICS codes / agency names | Anti-hallucination autocomplete guards built-in |
55
+ | Brittle scraping breaks weekly | Daily live smoke test ([badge above](#)) |
56
+ | Procurement officer → IT ticket → 3-week wait | Claude Desktop double-click install |
57
+
58
+ The federal data this wraps is **public domain**. There is no good reason it should cost a five-figure subscription to query.
59
+
60
+ ---
61
+
62
+ ## What this gives Claude (and other AI agents)
63
+
64
+ | Domain | What you can ask | Sources |
65
+ |---|---|---|
66
+ | 🔍 **Opportunities & solicitations** | "Find SAM.gov solicitations under NAICS 541512 closing this month" — read the SOW, POCs, attachments | SAM.gov, Grants.gov |
67
+ | 💰 **Spending, awards & competition** | "Show me Booz Allen wins at VA last fiscal year; top 10 PSC categories at DoD" | USAspending, FPDS, GAO |
68
+ | 🕵️ **Entity & partner vetting** | "Screen this firm: OFAC sanctions, SAM exclusions, single-audit findings, bank health, EPA compliance + toxics-release" | OFAC, SAM, FAC, FDIC, EPA ECHO, EPA Envirofacts |
69
+ | 🛒 **Product safety & recalls** | "Any FDA/NHTSA/CPSC recalls or enforcement against this supplier's products?" | openFDA, NHTSA, CPSC |
70
+ | ⚖️ **Litigation & courts** | "Any Court of Federal Claims bid protests or Federal Circuit opinions involving this contractor?" | CourtListener (Free Law Project) |
71
+ | 🏢 **Nonprofit vendors** | "Pull this nonprofit's IRS-990 financials before we subcontract to it" | IRS 990 (via ProPublica) |
72
+ | 🏥 **Healthcare providers & facilities** | "Medicare utilization & payments for this provider; hospital quality ratings; is this provider on the revocation list?" | CMS (data.cms.gov) |
73
+ | 📈 **Financial disclosure (SEC)** | "Pull this public company's revenue trend and latest 10-K filings" | SEC EDGAR |
74
+ | ⚖️ **Regulatory & legislative** | "What VA cybersecurity rules were published this quarter? Any open Regulations.gov dockets?" | Federal Register, Regulations.gov, eCFR, FAR/DFARS, Congress.gov, GovInfo |
75
+ | 💲 **Pricing, labor & fiscal** | "GSA CALC labor-rate band for a systems analyst; SCA wage determination for this county; CPI escalation; per-diem cap for a trip; regional GDP by industry; DOL wage-hour enforcement history" | GSA CALC, SAM WDs, BLS, US Census CBP, FRED, BEA, US Treasury, GSA per-diem, US DOL |
76
+ | 🏛 **Lobbying & influence** | "Who lobbies the VA on cybersecurity, and how much do they spend?" | US Senate LDA |
77
+ | 🏥 **Health & research funding** | "NIH/NSF grants on this topic; recruiting clinical trials; industry payments to this physician" | NIH RePORTER, NSF, ClinicalTrials.gov, CMS Open Payments, NPPES |
78
+ | 🛡 **Cyber compliance** | "Is this CVE on the CISA KEV must-patch list?" | NVD, CISA KEV |
79
+ | 🌐 **Trade, geo & disaster** | "HTS tariff for this product; Census tract for this address; FEMA declarations in this state" | USITC HTS, US Census, FEMA, Socrata, CKAN |
80
+ | 🎓 **Grants & datasets** | "Cybersecurity grants posted in the last 30 days; discover federal open datasets" | Grants.gov, data.gov |
81
+
82
+ **143 tools across 48 federal data sources — keyless-first: only 4 sources (Census business-patterns, FRED, BEA, and DOL's data endpoint) need a free key; the other 44 need none.** (An earlier 52-tool build measured roughly p50 ~0.25s / p95 ~0.8s against production federal APIs; latency varies by source and upstream load — treat it as fast, not a benchmarked guarantee.)
83
+
84
+ ---
85
+
86
+ ## How do I install it? Pick the path that matches you.
87
+
88
+ ### 🟢 Path 1 — Claude Desktop, one-click (no terminal needed)
89
+
90
+ Best for non-developers. Just download a file and double-click.
91
+
92
+ 1. Download **`mcp-sam-gov.mcpb`** from the [latest release](https://github.com/cliwant/mcp-sam-gov/releases/latest).
93
+ 2. Double-click the file. Claude Desktop opens with an "Install Extension" dialog.
94
+ 3. Click **Install**.
95
+ 4. Done. Start a new conversation and ask "Find active SAM.gov opportunities under NAICS 541512".
96
+
97
+ That's it. No PowerShell, no `npm`, nothing.
98
+
99
+ > Requires Claude Desktop ≥ 1.0 (which ships its own Node.js runtime).
100
+
101
+ ### 🟡 Path 2 — Claude Code, one command
102
+
103
+ If you already use Claude Code (the CLI):
104
+
105
+ ```bash
106
+ /plugin install cliwant/mcp-sam-gov
107
+ ```
108
+
109
+ This installs the MCP server **plus** a [SKILL.md](./skills/sam-gov/SKILL.md) workflow guide that teaches Claude when + how to use each of the 143 tools.
110
+
111
+ ### 🔵 Path 3 — Manual install for any MCP host (Codex, Cursor, Continue, Gemini)
112
+
113
+ For Codex CLI / Cursor / Continue / Gemini CLI / anything that speaks MCP:
114
+
115
+ ```bash
116
+ gh repo clone cliwant/mcp-sam-gov
117
+ cd mcp-sam-gov
118
+ npm install --omit=dev
119
+ npm install -g .
120
+ ```
121
+
122
+ After install, the binary `mcp-sam-gov` is on your PATH. Add this to your host config:
123
+
124
+ ```json
125
+ {
126
+ "mcpServers": {
127
+ "sam-gov": {
128
+ "command": "mcp-sam-gov"
129
+ }
130
+ }
131
+ }
132
+ ```
133
+
134
+ Specific config locations per host: see [Host configurations](#host-configurations) below.
135
+
136
+ ### ⚪ Path 4 — Direct path (zero install, just point at the file)
137
+
138
+ Skip installation entirely:
139
+
140
+ ```bash
141
+ gh repo clone cliwant/mcp-sam-gov
142
+ cd mcp-sam-gov
143
+ npm install --omit=dev # only runtime deps; dist/ is pre-built
144
+ ```
145
+
146
+ Then point your host config at the absolute path:
147
+
148
+ ```jsonc
149
+ {
150
+ "mcpServers": {
151
+ "sam-gov": {
152
+ "command": "node",
153
+ "args": ["C:\\Users\\you\\mcp-sam-gov\\dist\\server.js"]
154
+ }
155
+ }
156
+ }
157
+ ```
158
+
159
+ ---
160
+
161
+ ## Host configurations
162
+
163
+ ### Claude Desktop
164
+
165
+ `%APPDATA%\Claude\claude_desktop_config.json` (Windows) or `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):
166
+
167
+ ```json
168
+ {
169
+ "mcpServers": {
170
+ "sam-gov": { "command": "mcp-sam-gov" }
171
+ }
172
+ }
173
+ ```
174
+
175
+ (Or skip this entirely — use Path 1's `.mcpb` and it auto-configures.)
176
+
177
+ Restart Claude Desktop fully (system tray quit on Windows / Quit menu on macOS), then look for the 🔨 icon. You should see "sam-gov (143 tools)".
178
+
179
+ ### Claude Code
180
+
181
+ Per-project `.mcp.json`:
182
+
183
+ ```json
184
+ { "mcpServers": { "sam-gov": { "command": "mcp-sam-gov" } } }
185
+ ```
186
+
187
+ Or globally:
188
+
189
+ ```bash
190
+ claude mcp add sam-gov mcp-sam-gov
191
+ ```
192
+
193
+ ### Codex CLI
194
+
195
+ `~/.codex/config.toml`:
196
+
197
+ ```toml
198
+ [mcp_servers.sam-gov]
199
+ command = "mcp-sam-gov"
200
+ args = []
201
+ ```
202
+
203
+ ### Cursor
204
+
205
+ Settings → MCP → Add new MCP server:
206
+
207
+ ```json
208
+ { "mcpServers": { "sam-gov": { "command": "mcp-sam-gov" } } }
209
+ ```
210
+
211
+ ### Continue
212
+
213
+ `~/.continue/config.json`:
214
+
215
+ ```json
216
+ {
217
+ "experimental": {
218
+ "modelContextProtocolServer": {
219
+ "transport": { "type": "stdio", "command": "mcp-sam-gov" }
220
+ }
221
+ }
222
+ }
223
+ ```
224
+
225
+ ### Gemini CLI
226
+
227
+ `~/.gemini/settings.json`:
228
+
229
+ ```json
230
+ { "mcpServers": { "sam-gov": { "command": "mcp-sam-gov" } } }
231
+ ```
232
+
233
+ ### Anything else
234
+
235
+ If your host speaks MCP over stdio, point it at `mcp-sam-gov`. No host-specific code.
236
+
237
+ ---
238
+
239
+ ## What questions can I ask?
240
+
241
+ Once installed, you can ask in natural language. The agent picks the right tool sequence automatically.
242
+
243
+ ### Discovery
244
+ - "NAICS 541512 의 메릴랜드 입찰 중 30일 안에 마감되는 것 찾아줘"
245
+ - "Find active SAM.gov solicitations under NAICS 541512, MD only, closing in 30 days"
246
+ - "What's the canonical NAICS code for 'computer systems design'?"
247
+
248
+ ### RFP analysis
249
+ - "Pull noticeId 5ef3db5daeb54099a96d487783a38bd0 — give me the SOW, contracting officer, and attachments"
250
+ - "Show me the full RFP body for that notice"
251
+
252
+ ### Competitive landscape
253
+ - "Top 5 recipients of VA contracts in NAICS 541519 last fiscal year"
254
+ - "Show me Booz Allen's individual awards at DISA"
255
+ - "Who are the sub-contractors on Leidos' VA contracts?"
256
+ - "What's CMS in USAspending? (resolve the abbreviation)"
257
+
258
+ ### Trends & aggregation
259
+ - "How has VA 541512 spending trended over the last 5 fiscal years?"
260
+ - "Top 10 states by federal contracting spend in 541512"
261
+ - "Top PSC categories at DoD by spending"
262
+ - "Federal grant programs in cybersecurity by total $"
263
+
264
+ ### Agency intelligence (capture brief)
265
+ - "Give me a capture brief on VA: mission, FY26 budget breakdown, top sub-agencies"
266
+ - "What's VA's transaction volume for FY25?"
267
+
268
+ ### Recompete radar
269
+ - "VA 541512 contracts expiring in next 12 months over $1M"
270
+ - "Pull period of performance for award CONT_AWD_..."
271
+
272
+ ### Regulatory & legislative
273
+ - "Find FAR sections about SDVOSB set-aside requirements"
274
+ - "Turn this RFP's cited FAR/DFARS clause list into a Section L/M compliance matrix"
275
+ - "What new VA cybersecurity rules were published this quarter?"
276
+ - "Any Federal Register documents on the public-inspection desk from DoD today?"
277
+ - "Search Regulations.gov dockets on 'contractor cybersecurity' and pull the public comments"
278
+ - "Discover federal open datasets about 'wildfire' on data.gov"
279
+ - "Is there a Federal Register doc number 2026-08333? Pull the citation."
280
+
281
+ ### Partner & entity vetting
282
+ - "Screen 'Acme Defense LLC' against the OFAC sanctions list and SAM exclusions"
283
+ - "Look up NPI 1234567890 in NPPES — is this provider active?"
284
+ - "Does this subcontractor have adverse Single Audit findings in the Federal Audit Clearinghouse?"
285
+ - "How healthy is the bank on cert #3510 — risk ratios and quarterly financials?"
286
+ - "Pull this public company's revenue trend and latest 10-K from SEC EDGAR"
287
+ - "Any EPA compliance/enforcement flags for this facility?"
288
+
289
+ ### Compliance & eligibility
290
+ - "What's the SBA small-business size standard for NAICS 541512?"
291
+ - "Search the eCFR for the exact text of a rule"
292
+ - "What's the US import duty rate (HTS) for lithium-ion batteries?"
293
+
294
+ ### Pricing, labor & fiscal
295
+ - "GSA CALC ceiling-rate band for a senior systems analyst"
296
+ - "Find the SCA wage determination for Baltimore County, MD and give me the fringe rates"
297
+ - "How much has CPI-U risen over the last 3 years for an escalation clause?"
298
+ - "What's the current total US public debt (Debt to the Penny)?"
299
+
300
+ ### Cyber
301
+ - "Is CVE-2021-44228 (Log4Shell) on the CISA KEV must-patch list, and what's the due date?"
302
+
303
+ ### Health & research funding
304
+ - "NIH RePORTER projects on mRNA vaccines funded last year"
305
+ - "Recruiting clinical trials for diabetes sponsored by industry"
306
+ - "Industry payments to physicians in CA from the CMS Open Payments Research dataset"
307
+
308
+ ### Grants
309
+ - "Cybersecurity grants posted in the last 30 days"
310
+ - "Pull grant id 361238"
311
+
312
+ ---
313
+
314
+ ## Optional — higher rate limits + archives
315
+
316
+ The MCP server runs **keyless** by default. For higher SAM.gov rate limits + the full archive (notices older than ~12 months), set `SAM_GOV_API_KEY` in your host's env block:
317
+
318
+ ```json
319
+ {
320
+ "mcpServers": {
321
+ "sam-gov": {
322
+ "command": "mcp-sam-gov",
323
+ "env": { "SAM_GOV_API_KEY": "your-key-here" }
324
+ }
325
+ }
326
+ }
327
+ ```
328
+
329
+ Get a free key at [sam.gov/SAM/pages/public/searchKeyData.jsf](https://sam.gov/SAM/pages/public/searchKeyData.jsf). The agent doesn't need to know — the key path is transparent.
330
+
331
+ ### `DATA_GOV_API_KEY` — the api.data.gov / api.gsa.gov family
332
+
333
+ A handful of sources ride the shared **api.data.gov** gateway — Congress.gov, GovInfo, Regulations.gov, FAC, NPPES, and the data.gov v4 dataset catalog. They work **keyless** out of the box via the public `DEMO_KEY` (a low shared hourly quota). Set `DATA_GOV_API_KEY` to raise those limits substantially:
334
+
335
+ ```json
336
+ {
337
+ "mcpServers": {
338
+ "sam-gov": {
339
+ "command": "mcp-sam-gov",
340
+ "env": { "DATA_GOV_API_KEY": "your-key-here" }
341
+ }
342
+ }
343
+ }
344
+ ```
345
+
346
+ Get one free (instant, no wait) at [api.data.gov/signup](https://api.data.gov/signup). The same key is accepted across all api.data.gov / api.gsa.gov sources. Like the SAM key, it is sent only on the wire (never logged); unset simply means `DEMO_KEY`. BLS sources similarly accept an optional free `BLS_API_KEY` to lift their daily quota.
347
+
348
+ ### Keys & higher limits — the full inventory
349
+
350
+ **Most tools are keyless.** Four sources *require* a free key — **Census** (`census_business_patterns`), **FRED** (`fred_search_series`, `fred_series_observations`), **BEA** (`bea_regional_data`), and **DOL's data endpoint** (`dol_get_dataset`) — those sources have no keyless tier, so the tool throws without one. (DOL's catalog `dol_list_datasets` is keyless.) The other keys are *optional*: they only raise a rate limit or unlock a single filter. **Every key below is free.**
351
+
352
+ | Env var | Required? | What it unlocks | Free signup |
353
+ |---|---|---|---|
354
+ | `CENSUS_API_KEY` | **Required** | `census_business_patterns` (no keyless tier — throws without it) | [api.census.gov/data/key_signup.html](https://api.census.gov/data/key_signup.html) |
355
+ | `FRED_API_KEY` | **Required** | the 2 FRED tools (no keyless tier — throw without it) | [fred.stlouisfed.org/docs/api/api_key.html](https://fred.stlouisfed.org/docs/api/api_key.html) |
356
+ | `BEA_API_KEY` | **Required** | `bea_regional_data` (BEA Regional; no keyless tier — throws without it) | [apps.bea.gov/API/signup](https://apps.bea.gov/API/signup/) |
357
+ | `DOL_API_KEY` | **Required for data** | `dol_get_dataset` (DOL enforcement records via `X-API-KEY`; the `dol_list_datasets` catalog is keyless) | [dol.gov/developer](https://dol.gov/developer) |
358
+ | `DATA_GOV_API_KEY` | Optional | higher limits on all api.data.gov sources (Regulations.gov, FAC, NPPES, CMS, data.gov catalog, GSA per-diem) — lifts the shared `DEMO_KEY` cap | [api.data.gov/signup](https://api.data.gov/signup/) |
359
+ | `SAM_GOV_API_KEY` | Optional | authenticated SAM.gov v2 search + the organization-name filter | [open.gsa.gov/api/get-opportunities-public-api](https://open.gsa.gov/api/get-opportunities-public-api/) |
360
+ | `LDA_API_KEY` | Optional | higher rate limit on `lda_search_filings` (Senate LDA lobbying; keyless by default) | [lda.senate.gov/api/register](https://lda.senate.gov/api/register/) |
361
+ | `BLS_API_KEY` | Optional | the BLS v2 tier (~500 queries/day vs keyless ~25/day) | [data.bls.gov/registrationEngine](https://data.bls.gov/registrationEngine/) |
362
+ | `NVD_API_KEY` | Optional | a higher NVD rate limit (`cve_lookup`) | [nvd.nist.gov/developers/request-an-api-key](https://nvd.nist.gov/developers/request-an-api-key) |
363
+ | `OPENFDA_API_KEY` | Optional | higher openFDA rate limit (`openfda_enforcement`, `openfda_device_clearances`; both work keyless) | [open.fda.gov/apis/authentication](https://open.fda.gov/apis/authentication/) |
364
+ | `COURTLISTENER_API_TOKEN` | Optional | higher CourtListener rate limit (`courtlistener_search_opinions`; works keyless) | [courtlistener.com/help/api/rest](https://www.courtlistener.com/help/api/rest/) |
365
+ | `SOCRATA_APP_TOKEN` | Optional | higher Socrata throttling limits | [evergreen.data.socrata.com/signup](https://evergreen.data.socrata.com/signup) |
366
+
367
+ **Two ways to set any key** — pick one:
368
+
369
+ 1. **Host env block** — the `"env": { … }` object shown in the examples above.
370
+ 2. **A `.env` file** in the server's working directory — configure your keys **once**:
371
+ ```
372
+ CENSUS_API_KEY=your-key-here
373
+ FRED_API_KEY=your-key-here
374
+ # optional — raise limits / unlock filters
375
+ SAM_GOV_API_KEY=your-key-here
376
+ ```
377
+ The server auto-loads `.env` at startup. A real environment variable always wins over `.env` (standard precedence), and `.env` is git-ignored so your keys never get committed.
378
+
379
+ **Ask the server which keys it needs.** The keyless **`api_key_status`** tool lists every key, whether it's required or optional, the free signup URL + what it unlocks, and whether each is **currently configured** (a boolean — the key value is never shown). Creating the account at the signup URL is your one manual step; the server automates *discovery* (`api_key_status`) and *configuration* (`.env`). To confirm a key actually works, call that source's own tool.
380
+
381
+ ---
382
+
383
+ ## Staying up to date
384
+
385
+ npm doesn't notify installed users of new versions, so the server does — minimally. On startup it makes **one anonymous request to the public npm registry** for its own latest version and, **only if a newer one exists**, prints a single line to stderr (e.g. `a newer version is available: 1.7.0 → 1.8.0`). It sends **no usage data** (a version check, not telemetry), never touches the protocol's stdout, is non-blocking, and stays silent when you're current.
386
+
387
+ - **Update:** `npm i -g @cliwant/mcp-sam-gov@latest` — or just restart if your config uses `npx @cliwant/mcp-sam-gov@latest`.
388
+ - **Opt out:** set `MCP_SAM_GOV_NO_UPDATE_CHECK=1` (or `NO_UPDATE_NOTIFIER=1`).
389
+ - **What changed:** the [releases page](https://github.com/cliwant/mcp-sam-gov/releases) + [CHANGELOG](./CHANGELOG.md).
390
+
391
+ ## Found a bug? Want a feature? Report it in one step
392
+
393
+ This server is built to **improve from real usage**. Because an AI agent (not a human) calls the tools, the feedback path runs **through the agent**:
394
+
395
+ - On the two "something may be broken" errors — `schema_drift` (a federal API changed shape) and `upstream_unavailable` (an outage) — the error envelope carries a **`report`** field: a prefilled GitHub issue link your agent can offer you.
396
+ - Or just tell your agent "report a bug" / "this result looks wrong" / "I wish it could do X" — it calls the **`feedback` tool**, which returns a prefilled issue link for you to open and submit.
397
+
398
+ **Nothing is ever posted automatically.** The server has no token and no account — it only *builds the link*; **you** open and submit it. Prefilled links carry only the tool name, error kind, and server version — never your query values. The repo is public, so redact anything sensitive first.
399
+
400
+ You can also open one directly: [**New issue**](https://github.com/cliwant/mcp-sam-gov/issues/new/choose) — bug / feature / wrong-output templates.
401
+
402
+ ## Tool catalog (143 tools)
403
+
404
+ Grouped by workflow. Keyless-first — most tools need no key; Census business-patterns, FRED, BEA, and DOL's data endpoint require a free key, and a handful of others gain higher limits from an optional free key (noted above). Descriptions are condensed — each tool's own `inputSchema` carries the full contract and honesty caveats.
405
+
406
+ <details>
407
+ <summary><b>Opportunities & solicitations — SAM.gov + Grants.gov (10 tools)</b></summary>
408
+
409
+ - `sam_search_opportunities` — keyless HAL search of active SAM.gov contracting opportunities
410
+ - `sam_search_shaping` — pre-solicitation radar (Sources Sought / Presol / Special Notices before the RFP exists)
411
+ - `sam_get_opportunity` — full detail by 32-char hex noticeId (POCs + attachments + body)
412
+ - `sam_fetch_description` — full RFP body as plain text
413
+ - `sam_fetch_attachment_text` — extract attachment text (RFP / SOW / Q&A / wage tables) from PDF + DOCX + text/HTML
414
+ - `sam_attachment_url` — build the public download URL for an attachment resourceId
415
+ - `sam_lookup_organization` — federal-organization id → canonical fullParentPathName
416
+ - `sam_lookup_notice_fields` — batch-fill nulled naics/set-aside/PoP/deadline for 1–100 noticeIds from the opt-in GSA daily CSV
417
+ - `grants_search` — Grants.gov federal grant opportunities (financial assistance, distinct from SAM contracts)
418
+ - `grants_get_opportunity` — full detail for a single grant opportunity by id
419
+ </details>
420
+
421
+ <details>
422
+ <summary><b>Spending, awards & competition — USAspending + FPDS + GAO (31 tools)</b></summary>
423
+
424
+ - `usas_search_awards` — aggregate share-of-wallet at agency × NAICS
425
+ - `usas_search_individual_awards` — line-item federal contracts (returns generatedInternalId)
426
+ - `usas_get_award_detail` — full award detail: period of performance, options, set-aside, competition
427
+ - `usas_search_awards_by_recipient` — every contract a recipient won in an agency × NAICS slice
428
+ - `usas_search_subawards` — enumerate subcontracts on prime awards (supply chain / teaming)
429
+ - `usas_search_recompetes` — recompete radar (PoP ending in a window, soonest-first, no silent drops)
430
+ - `usas_search_expiring_contracts` — **deprecated** alias of `usas_search_recompetes` (legacy shape)
431
+ - `usas_analyze_incumbent` — per-award incumbent + public recompete-pressure hints (labels, not a score)
432
+ - `usas_search_teaming_partners` — small-business teaming discovery by cert × NAICS × agency, exclusion-screened
433
+ - `usas_spending_over_time` — contract-spending time series (fiscal_year / quarter / month)
434
+ - `usas_search_agency_spending` — spending broken down by awarding agency
435
+ - `usas_search_subagency_spending` — break a parent agency down by sub-agency / office
436
+ - `usas_search_psc_spending` — spending by Product Service Code (PSC)
437
+ - `usas_search_cfda_spending` — spending by CFDA grant-program code
438
+ - `usas_search_state_spending` — spending by state / territory
439
+ - `usas_search_federal_account_spending` — spending by federal account / Treasury Account Symbol (TAS)
440
+ - `usas_search_recipients` — recipient list with parent/child hierarchy
441
+ - `usas_get_recipient_profile` — full recipient detail (UEI, alternate names, totals)
442
+ - `usas_get_agency_profile` — agency profile by toptier code (mission, abbreviation, website)
443
+ - `usas_get_agency_awards_summary` — award activity for a fiscal year (transaction count + obligations)
444
+ - `usas_get_agency_budget_function` — budget-function breakdown for an agency × fiscal year
445
+ - `usas_list_toptier_agencies` — all toptier agencies + current-FY obligations
446
+ - `usas_lookup_agency` — resolve 'VA' / 'DHS' → canonical toptier name + 4-digit code
447
+ - `usas_autocomplete_naics` — anti-hallucination NAICS guard
448
+ - `usas_autocomplete_recipient` — anti-hallucination recipient guard
449
+ - `usas_naics_hierarchy` — navigate the NAICS tree (2→4→6) + active-contract count per code
450
+ - `usas_glossary` — 151 federal-spending terms
451
+ - `usas_list_disaster_codes` — list Disaster Emergency Fund Codes (DEFC): COVID-19, IIJA/infrastructure, and other emergency-appropriation tags
452
+ - `usas_disaster_spending` — disaster/emergency-fund spending BY GEOGRAPHY for given DEFCs (which state/county/district captured COVID/IIJA relief money)
453
+ - `fpds_search_awards` — FPDS-NG federal contract award actions (the authoritative award-action feed)
454
+ - `gao_protest_lookup` — recent GAO bid-protest decisions from the public Legal-Products RSS feed (recent window only)
455
+ </details>
456
+
457
+ <details>
458
+ <summary><b>Entity & partner vetting — OFAC · SAM · FAC · FDIC · EPA (15 tools)</b></summary>
459
+
460
+ - `ofac_screen_entity` — keyless OFAC denied-party / sanctions screening
461
+ - `sam_check_exclusions` — keyless SAM debarment/exclusion screening by name and/or UEI/CAGE
462
+ - `sam_integrity_lookup` — one-call integrity screen (exclusion verdict + honest FAPIIS pointer)
463
+ - `fac_search_audits` — Single Audit summaries from the Federal Audit Clearinghouse
464
+ - `fac_get_findings` — drill into the audit-RISK findings for an entity
465
+ - `fdic_search_institutions` — search the FDIC-insured-institution directory
466
+ - `fdic_institution_financials` — quarterly financial time-series for one institution (by cert #)
467
+ - `fdic_risk_ratios` — counterparty risk ratios for one institution
468
+ - `fdic_institution_history` — structural-change event log (mergers, charter changes)
469
+ - `fdic_branch_deposits` — branch-deposit footprint
470
+ - `fdic_bank_failures` — historical bank failures & assistance transactions
471
+ - `fdic_industry_summary` — industry & state banking-sector annual aggregates
472
+ - `echo_search_facilities` — search EPA-regulated facilities by state with compliance/enforcement screening
473
+ - `echo_facility_report` — EPA ECHO Detailed Facility Report for one facility (by FRS RegistryID)
474
+ - `epa_tri_facilities` — EPA Envirofacts TRI (Toxics Release Inventory) facilities by state/industry (environmental / ESG vetting)
475
+ </details>
476
+
477
+ <details>
478
+ <summary><b>Product safety & recalls — openFDA · NHTSA · CPSC (6 tools)</b></summary>
479
+
480
+ - `openfda_enforcement` — FDA drug / device / food recalls & enforcement actions (product-safety supplier vetting)
481
+ - `openfda_device_clearances` — FDA 510(k) medical-device clearances (device-maker capability check)
482
+ - `openfda_drug_approvals` — openFDA Drugs@FDA drug-approval applications (sponsor, approved products, submission/approval history)
483
+ - `nhtsa_recalls` — NHTSA vehicle recalls by make / model / year
484
+ - `nhtsa_complaints` — NHTSA vehicle safety complaints by make / model / year
485
+ - `cpsc_recalls` — CPSC consumer-product recalls (product supplier vetting)
486
+ </details>
487
+
488
+ <details>
489
+ <summary><b>Litigation & courts — CourtListener (1 tool)</b></summary>
490
+
491
+ - `courtlistener_search_opinions` — US federal court opinions (COFC contract claims / bid protests, Federal Circuit) — data via CourtListener / Free Law Project (disclosed)
492
+ </details>
493
+
494
+ <details>
495
+ <summary><b>Nonprofit vendors — IRS 990 via ProPublica (2 tools)</b></summary>
496
+
497
+ - `nonprofit_search` — IRS-990 nonprofit search by name / state / NTEE — via ProPublica Nonprofit Explorer (disclosed)
498
+ - `nonprofit_financials` — IRS-990 nonprofit financials by EIN — via ProPublica Nonprofit Explorer (disclosed)
499
+ </details>
500
+
501
+ <details>
502
+ <summary><b>Financial disclosure — SEC EDGAR (8 tools)</b></summary>
503
+
504
+ - `edgar_lookup_cik` — resolve a company ticker or name to its 10-digit SEC CIK
505
+ - `edgar_company_filings` — a company's SEC filings
506
+ - `edgar_company_facts` — curated XBRL financial facts for a filer
507
+ - `edgar_company_concept` — one filer × one XBRL concept × the complete reported time-series
508
+ - `edgar_xbrl_frames` — cross-filer XBRL cross-section (one concept across all filers for a period)
509
+ - `edgar_full_text_search` — full-text search across EDGAR filings, 2001–present
510
+ - `edgar_filing_index` — bulk cross-filer filing index for a quarter
511
+ - `edgar_daily_filing_index` — per-day cross-filer filing index
512
+ </details>
513
+
514
+ <details>
515
+ <summary><b>Regulatory & legislative — Federal Register · Regulations.gov · eCFR · FAR · Congress · GovInfo (18 tools)</b></summary>
516
+
517
+ - `fed_register_search_documents` — search Federal Register documents by query / agency / type / date
518
+ - `fed_register_get_document` — full detail for a document by number (citation, body URL, CFR refs)
519
+ - `fed_register_public_inspection` — the Federal Register public-inspection desk (pre-publication)
520
+ - `fed_register_list_agencies` — Federal Register agency slugs reference
521
+ - `regulations_search_dockets` — search Regulations.gov rulemaking dockets
522
+ - `regulations_search_documents` — search Regulations.gov rulemaking documents (rules, proposed rules, notices)
523
+ - `regulations_search_comments` — search public comments on rulemakings
524
+ - `regulations_get_docket` — fetch one Regulations.gov docket by id
525
+ - `ecfr_search` — full-text search across the entire CFR (titleNumber=48 for FAR)
526
+ - `ecfr_list_titles` — all 50 CFR titles + last-amended dates
527
+ - `far_clause_lookup` — authoritative FAR/DFARS clause text + its prescription (exact clause number)
528
+ - `far_search` — FAR/DFARS-scoped search (excludes GSAM, collapses to current in-force version)
529
+ - `far_compliance_matrix` — cited-clause list → proposal-ready Section L/M compliance matrix (eligibility gates flagged)
530
+ - `congress_search_bills` — search Congress.gov bills / legislation
531
+ - `congress_get_bill` — one bill by congress / type / number
532
+ - `govinfo_search_packages` — search GovInfo (GPO-authoritative) packages in a collection
533
+ - `govinfo_get_package` — one GovInfo package summary + download links (txt/xml/pdf/mods)
534
+ - `govinfo_list_collections` — the GovInfo collection catalog
535
+ </details>
536
+
537
+ <details>
538
+ <summary><b>Pricing, labor & fiscal — GSA CALC · SAM WDs · BLS · Census CBP · FRED · BEA · US Treasury · GSA per-diem (15 tools)</b></summary>
539
+
540
+ - `gsa_benchmark_labor_rates` — GSA CALC awarded ceiling-rate market band for a labor category (a distribution, not one price)
541
+ - `sam_search_wage_determinations` — find SCA / Davis-Bacon wage determinations for a locality
542
+ - `sam_get_wage_rates` — prevailing-wage + fringe / H&W rate table parsed from a WD, plus the EO minimum-wage floor
543
+ - `bls_timeseries` — BLS time series (CPI-U / ECI escalation, PPI, employment) — the pricing/escalation layer
544
+ - `bls_oews_wages` — benchmark occupational wages & employment (BLS OEWS) by area × occupation
545
+ - `bls_qcew` — county × NAICS market size / wages / location quotient (competition density)
546
+ - `treasury_debt_to_penny` — daily total US public debt outstanding (Treasury Fiscal Data)
547
+ - `treasury_avg_interest_rates` — average interest rate the Treasury pays by security type
548
+ - `treasury_monthly_statement` — Monthly Treasury Statement: receipts, outlays, deficit/surplus by month
549
+ - `treasury_query_dataset` — escape-hatch query over 7 confirmed Treasury Fiscal Data datasets
550
+ - `bea_regional_data` — GDP / personal income by industry × geography (BEA Regional; requires free BEA_API_KEY)
551
+ - `census_business_patterns` — establishments / employment / annual payroll by NAICS × geography (Census CBP; requires free CENSUS_API_KEY)
552
+ - `fred_search_series` — search the FRED macroeconomic series catalog (GDP/CPI/rates/unemployment; requires free FRED_API_KEY)
553
+ - `fred_series_observations` — time-series observations for a FRED series (missing values → null; requires free FRED_API_KEY)
554
+ - `gsa_perdiem_rates` — federal travel per-diem: monthly lodging + M&IE meals caps by city+state or zip (keyless via DEMO_KEY)
555
+ </details>
556
+
557
+ <details>
558
+ <summary><b>Health & research funding — NIH · NSF · ClinicalTrials · CMS · NPPES (9 tools)</b></summary>
559
+
560
+ - `nih_reporter_search_projects` — awarded NIH RePORTER research-grant projects
561
+ - `nsf_search_awards` — awarded NSF research-grant awards
562
+ - `nsf_get_award` — one NSF award by its numeric award id
563
+ - `clinicaltrials_search_studies` — federally-registered clinical studies with sponsor/funder enrichment
564
+ - `clinicaltrials_get_study` — one clinical study by NCT id (incl. brief summary)
565
+ - `clinicaltrials_facet_counts` — exact per-value study-count distribution over the whole registry
566
+ - `cms_search_datasets` — discover CMS Open Payments (Sunshine Act) datasets
567
+ - `cms_query_dataset` — query a CMS Open Payments datastore distribution (industry→physician payments)
568
+ - `nppes_lookup_provider` — CMS/HHS NPPES NPI Registry provider lookup
569
+ </details>
570
+
571
+ <details>
572
+ <summary><b>Healthcare providers & facilities — CMS (5 tools)</b></summary>
573
+
574
+ - `cms_medicare_provider_services` — Medicare provider utilization & payments (healthcare market sizing)
575
+ - `cms_hospital_compare` — CMS Hospital Compare quality ratings
576
+ - `cms_facility_directory` — CMS nursing-home / home-health / hospice / dialysis facility directories
577
+ - `cms_dmepos_suppliers` — CMS DMEPOS (durable medical equipment) supplier directory + Medicare spend
578
+ - `cms_revoked_providers` — CMS Medicare revocation / exclusion list (provider compliance vetting)
579
+ </details>
580
+
581
+ <details>
582
+ <summary><b>Cyber compliance — NVD + CISA KEV + NIST 800-53 (3 tools)</b></summary>
583
+
584
+ - `cve_lookup` — look up NIST NVD CVE records
585
+ - `cisa_kev_lookup` — filter the CISA Known Exploited Vulnerabilities catalog (binding BOD 22-01 remediation due-dates)
586
+ - `nist_800_53_controls` — NIST SP 800-53 Rev 5 security & privacy controls lookup (FedRAMP/CMMC/RMF requirement text by controlId/family/keyword)
587
+ </details>
588
+
589
+ <details>
590
+ <summary><b>Trade, tariffs & logistics — USITC · CBP (2 tools)</b></summary>
591
+
592
+ - `hts_lookup` — US import-tariff classification + duty rates from the USITC Harmonized Tariff Schedule
593
+ - `cbp_border_wait_times` — live CBP land-border commercial-vehicle wait times (Canadian + Mexican ports; freight/logistics)
594
+ </details>
595
+
596
+ <details>
597
+ <summary><b>Geo, disaster & state/local open data — Census · FEMA · NWS · Socrata · CKAN (10 tools)</b></summary>
598
+
599
+ - `census_geocode_address` — resolve a one-line US address → matched address + Census geographies (tract, CD, place)
600
+ - `census_geographies_by_coordinates` — resolve a longitude/latitude point → Census geographies
601
+ - `fema_disaster_declarations` — FEMA disaster / emergency declarations by state, type, incident, year
602
+ - `fema_search_public_assistance` — FEMA Public Assistance funded projects
603
+ - `fema_search_hazard_mitigation` — FEMA Hazard Mitigation Assistance projects (HMGP/FMA/PDM/BRIC mitigation grants to state/local/tribal subrecipients; disaster-resilience, distinct from Public Assistance recovery)
604
+ - `nws_active_alerts` — currently-active NWS weather alerts (watches/warnings/advisories; disaster/climate readiness, pairs with the FEMA tools)
605
+ - `socrata_discover_datasets` — find Socrata dataset 4x4 ids by keyword
606
+ - `socrata_query` — query rows from an allowlisted Socrata/SODA open-data portal
607
+ - `ckan_discover_datasets` — find CKAN datastore resource ids by keyword
608
+ - `ckan_query` — query rows from an allowlisted CKAN datastore resource (state/city spend/checkbook)
609
+ </details>
610
+
611
+ <details>
612
+ <summary><b>Dataset & registry discovery — data.gov · get.gov (2 tools)</b></summary>
613
+
614
+ - `datagov_search_datasets` — search the data.gov v4 catalog for federal open datasets across all publishing agencies
615
+ - `search_gov_domains` — CISA get.gov authoritative .gov domain registry (resolve which org owns a .gov domain; enumerate federal agencies + map SLED entities)
616
+ </details>
617
+
618
+ <details>
619
+ <summary><b>Small business — SBA (1 tool)</b></summary>
620
+
621
+ - `sba_size_standard` — SBA small-business size standard for a 6-digit NAICS (set-aside eligibility gate)
622
+ </details>
623
+
624
+ <details>
625
+ <summary><b>Labor compliance — US DOL (2 tools)</b></summary>
626
+
627
+ - `dol_list_datasets` — browse DOL enforcement/compliance datasets (WHD, OFCCP, …) — keyless catalog
628
+ - `dol_get_dataset` — fetch DOL enforcement records (WHD wage-hour / OFCCP; requires free DOL_API_KEY)
629
+ </details>
630
+
631
+ <details>
632
+ <summary><b>Lobbying & influence — US Senate LDA (1 tool)</b></summary>
633
+
634
+ - `lda_search_filings` — Senate lobbying filings: who lobbies which agency, on what issue, for how much (keyless)
635
+ </details>
636
+
637
+ <details>
638
+ <summary><b>Server utilities — key discovery (1 tool)</b></summary>
639
+
640
+ - `api_key_status` — list which API keys the server can use, required vs optional, signup URLs, and whether each is currently set (value never shown)
641
+ </details>
642
+
643
+ ---
644
+
645
+ ## Reliability & offline snapshots
646
+
647
+ This server is built around one rule: **honest failure over confident fabrication.** Everything below is about *availability* of public data — none of it bypasses access controls.
648
+
649
+ **Keyless-first, and a down source *throws*.** Every source works with no API key. When a source is rate-limited, blocked, or down, the tool returns a **typed error** (`rate_limited` / `upstream_unavailable` / `schema_drift` / …) — it never invents rows and never reports a DOWN service as "0 results" or "not found". A genuine empty result and an outage are always distinguishable.
650
+
651
+ **Offline snapshots (on by default).** Some reference data changes slowly — the toptier-agency list, the top-level NAICS tree, the USAspending glossary, SBA size standards, the latest Treasury "Debt to the Penny." By default, when a live federal source is briefly unreachable from your egress, the server falls back to a **public, weekly-refreshed snapshot** of that slow-changing reference data, hosted at `raw.githubusercontent.com/cliwant/mcp-sam-gov/snapshots`. It only fetches on a **live hard-failure** (an outage / IP-reputation block), never during normal operation — public data, no telemetry. A served snapshot is **never presented as live** — the response carries `_meta.dataPath: "snapshot"` plus an `asOf` timestamp, and `complete` is forced off, so an AI agent (and you) always see the staleness. A rate limit (429) is always **honored**, never routed around onto the mirror.
652
+
653
+ - **Disable it (pure live-only):** set `SAMGOV_SNAPSHOT_BASE_URL=off`. Then no snapshot path is ever added and behavior is byte-for-byte identical to a live-only client.
654
+ - **Point at your own mirror:** set `SAMGOV_SNAPSHOT_BASE_URL` to your base URL to host the snapshots yourself instead of using the public default.
655
+
656
+ ```json
657
+ { "mcpServers": { "sam-gov": { "command": "mcp-sam-gov",
658
+ "env": { "SAMGOV_SNAPSHOT_BASE_URL": "off" } } } }
659
+ ```
660
+
661
+ - **Build the snapshots:** run `node scripts/build-snapshots.mjs` from any clean, non-blocked egress (a laptop / home / clean CI runner). It **self-diagnoses per-source reachability**, prints a reachability table, and writes a `manifest.json`. On partial coverage it refreshes only the sources it can reach and **leaves the last-good file in place** for the rest (stale-but-honest, never blanked). It exits non-zero only when *zero* sources were reachable (a fully blocked egress — the signal to re-run from a cleaner one).
662
+
663
+ - **The honest boundary.** This covers **public-data availability only.** The snapshot builder ingests only public, redistributable (public-domain / CC0) data, and the reader refuses to serve any envelope not marked `accessLevel: "public"`. It **honors rate limits** (a 429 is never routed around), uses **no proxies, no IP rotation, no auth/paywall/CAPTCHA bypass**, and refuses off-host redirects. If a source is blocked, the honest remedy is to build from a cleaner egress — not to evade the block.
664
+
665
+ ---
666
+
667
+ ## Troubleshooting
668
+
669
+ | Symptom | Fix |
670
+ |---|---|
671
+ | Claude Desktop 🔨 menu doesn't show `sam-gov` | Fully quit Claude Desktop (system tray on Windows / Quit menu on macOS) and reopen. Check `%APPDATA%\Claude\logs\mcp*.log` |
672
+ | `command not found: mcp-sam-gov` | Confirm `npm install -g .` succeeded; check that npm's global bin is on PATH (`npm config get prefix`) |
673
+ | `MODULE_NOT_FOUND ...dist/server.js` after `npm install -g github:...` | npm bug with git-dep symlinks on Windows. Use the clone + `npm install -g .` recipe (Path 3) instead. |
674
+ | `EPERM: operation not permitted, rmdir` during install | Previous failed install left dangling files. Run `rmdir /s /q "%APPDATA%\npm\node_modules\@cliwant"` (or `@govicon` if you installed an early version) then retry. |
675
+ | `npm install` fails with "private repo" / 404 | The repo is now public — should not happen. If it does, try `git clone https://github.com/cliwant/mcp-sam-gov.git` directly. |
676
+ | Tools return empty results | SAM.gov rate-limits aggressive callers. Wait 1 minute. Or set `SAM_GOV_API_KEY` for the higher-rate authenticated path. |
677
+ | "Tool error: USAspending POST returned 400" | Usually means a field has a wrong type (e.g. fiscal year as string). Check the tool input schema in your host's tool browser. |
678
+
679
+ ---
680
+
681
+ ## Use as a TypeScript / JavaScript library (no MCP)
682
+
683
+ Beyond the MCP server, this package also exports the underlying federal-data
684
+ clients as importable modules. Useful if you're building your own SaaS, AI
685
+ agent, or CLI and want programmatic access without spawning an MCP server.
686
+
687
+ ```bash
688
+ npm install @cliwant/mcp-sam-gov
689
+ ```
690
+
691
+ ```ts
692
+ // SAM.gov client
693
+ import { SamGovClient } from "@cliwant/mcp-sam-gov/sam-gov";
694
+
695
+ const sam = new SamGovClient(); // keyless
696
+ const result = await sam.searchOpportunities({ ncode: "541512", limit: 5 });
697
+ const opp = await sam.getOpportunity("5ef3db5daeb54099a96d487783a38bd0");
698
+ ```
699
+
700
+ ```ts
701
+ // USAspending wrappers
702
+ import * as usas from "@cliwant/mcp-sam-gov/usaspending";
703
+
704
+ const recompete = await usas.searchExpiringContracts({
705
+ agency: "Department of Veterans Affairs",
706
+ naics: "541512",
707
+ monthsUntilExpiry: 12,
708
+ });
709
+ const recipient = await usas.getRecipientProfile("ed02855e-60d7-2540-...-P");
710
+ ```
711
+
712
+ ```ts
713
+ // Federal Register / eCFR / Grants.gov
714
+ import * as fedreg from "@cliwant/mcp-sam-gov/federal-register";
715
+ import * as ecfr from "@cliwant/mcp-sam-gov/ecfr";
716
+ import * as grants from "@cliwant/mcp-sam-gov/grants";
717
+
718
+ const farResults = await ecfr.search({ query: "SDVOSB", titleNumber: 48 });
719
+ ```
720
+
721
+ This is the canonical home for the Cliwant federal-data libraries — there
722
+ is no separate library package. Two earlier repos (`govicon-sam-gov` and
723
+ `govicon-mcp-sam-gov`) have been archived and consolidated here. All
724
+ client code lives in `src/sam-gov/`, `src/usaspending.ts`,
725
+ `src/federal-register.ts`, `src/ecfr.ts`, `src/grants.ts`.
726
+
727
+ ## License
728
+
729
+ MIT — see [LICENSE](./LICENSE).
730
+
731
+ ## Disclaimer
732
+
733
+ This server uses **publicly available** federal API endpoints. It is not affiliated with the General Services Administration, SAM.gov, USAspending.gov, the Office of the Federal Register, the National Archives, Grants.gov, or any federal agency. Federal procurement, spending, and regulation data is in the public domain.