@cliwant/mcp-sam-gov 1.13.1 → 1.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.ja.md +27 -2
- package/README.ko.md +27 -2
- package/README.md +155 -7
- package/dist/bls.d.ts.map +1 -1
- package/dist/bls.js +4 -3
- package/dist/bls.js.map +1 -1
- package/dist/errors.d.ts +6 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/feedback.d.ts +18 -1
- package/dist/feedback.d.ts.map +1 -1
- package/dist/feedback.js +43 -15
- package/dist/feedback.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +117 -51
- package/dist/server.js.map +1 -1
- package/dist/toolsets.d.ts +111 -0
- package/dist/toolsets.d.ts.map +1 -0
- package/dist/toolsets.js +390 -0
- package/dist/toolsets.js.map +1 -0
- package/package.json +1 -1
- package/src/bls.ts +4 -3
- package/src/errors.ts +6 -1
- package/src/feedback.ts +53 -19
- package/src/server.ts +133 -93
- package/src/toolsets.ts +435 -0
package/README.ja.md
CHANGED
|
@@ -71,7 +71,7 @@ npm install --omit=dev
|
|
|
71
71
|
npm install -g .
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
インストール後 `mcp-sam-gov` が PATH に登録される。ホスト config
|
|
74
|
+
インストール後 `mcp-sam-gov` が PATH に登録される。ホスト config に追加 (グローバルインストール):
|
|
75
75
|
|
|
76
76
|
```json
|
|
77
77
|
{
|
|
@@ -81,7 +81,25 @@ npm install -g .
|
|
|
81
81
|
}
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
**グローバルインストールなし (npx)** — clone と `npm install -g` を省略でき、Node.js さえあれば動きます。初回起動時に npx が npm からパッケージを取得してキャッシュします。
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{ "mcpServers": { "sam-gov": { "command": "npx", "args": ["-y", "@cliwant/mcp-sam-gov"] } } }
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Claude Code の CLI で登録する場合:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
claude mcp add sam-gov -- npx -y @cliwant/mcp-sam-gov
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Windows でホストが `spawn npx ENOENT` でサーバーを起動できない場合は、npx を `cmd /c` で包んでください:`"command": "cmd", "args": ["/c", "npx", "-y", "@cliwant/mcp-sam-gov"]`。
|
|
97
|
+
|
|
98
|
+
> **パッケージ名に注意:** npm パッケージ名はスコープ付きの **`@cliwant/mcp-sam-gov`** です。`mcp-sam-gov` はグローバルインストール時に PATH に置かれる実行ファイル名にすぎず、スコープなしの `mcp-sam-gov` パッケージは npm に存在しません。そのため `npx -y mcp-sam-gov` は 404 で失敗します。`npx -y @cliwant/mcp-sam-gov` を使ってください。
|
|
99
|
+
|
|
100
|
+
VS Code は `.vscode/mcp.json` に `"servers"` キーを使います。英語 README 上部の **Install in VS Code** / **Add to Kiro** バッジからワンクリックでインストールすることもできます。
|
|
101
|
+
|
|
102
|
+
各ホスト別 config の場所とホスト別の npx 設定例は [Host configurations](./README.md#host-configurations) (英語 README) を参照。
|
|
85
103
|
|
|
86
104
|
### ⚪ パス 4 — 直接パス (グローバルインストールなし)
|
|
87
105
|
|
|
@@ -174,6 +192,12 @@ npm install --omit=dev
|
|
|
174
192
|
|
|
175
193
|
---
|
|
176
194
|
|
|
195
|
+
## ツールセットの選択 (コンテキスト削減)
|
|
196
|
+
|
|
197
|
+
デフォルトでは全 152 ツールがロードされ、セッションあたり約 80k トークンを消費します。`MCP_SAM_GOV_TOOLSETS` 環境変数に必要なツールセット名をカンマ区切りで指定することでコンテキストを削減できます。空値または `all` で全ツールがロードされます。利用可能なツールセット: `core`(58 ツール, SAM/Grants/USAspending/FAR/eCFR/Federal Register/SBA 等), `sled`(13 ツール, 州・地方調達), `vetting`(17 ツール, OFAC/FDIC/FAC/EPA ECHO 等), `disclosure`(8 ツール, SEC EDGAR), `regulatory`(9 ツール, Regulations.gov/Congress/GovInfo), `pricing`(15 ツール, GSA/BLS/Treasury/FRED/DOL 等), `health`(17 ツール, CMS/NIH/NSF/openFDA 等), `safety`(3 ツール, NHTSA/CPSC), `geo`(9 ツール, Census geocode/FEMA/NWS 等), `cyber`(3 ツール, NVD/CISA KEV/NIST 800-53)。ロードされていないツールを呼び出すと、どのツールセットで有効化できるかを示す `tool_not_loaded` エラーが返されます。
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
177
201
|
## 最新バージョンの維持
|
|
178
202
|
|
|
179
203
|
npm はインストール済みユーザーに新バージョンを通知しないため、サーバーが**最小限に**通知します。起動時に**公開 npm レジストリへ匿名リクエストを 1 回**送って自身の最新版を確認し、**より新しい版がある場合のみ** stderr に 1 行出力します(例: `a newer version is available: 1.7.0 → 1.8.0`)。**利用データは一切送信せず**(テレメトリではなくバージョン確認)、プロトコルの stdout には触れず、ノンブロッキングで、最新なら沈黙します。
|
|
@@ -237,6 +261,7 @@ npm はインストール済みユーザーに新バージョンを通知しな
|
|
|
237
261
|
|---|---|
|
|
238
262
|
| Claude Desktop 🔨 メニューに `sam-gov` が表示されない | Claude Desktop を完全終了 (Windows: システムトレイ / macOS: Quit) して再起動。ログ: `%APPDATA%\Claude\logs\mcp*.log` |
|
|
239
263
|
| `command not found: mcp-sam-gov` | `npm install -g .` が成功したか確認。`npm config get prefix` の結果が PATH にあるか確認 |
|
|
264
|
+
| `spawn npx ENOENT` (Windows, npx 設定) | ホストがシェルを介さずに `npx` を起動したため、Windows が `npx.cmd` を見つけられない。`"command": "cmd", "args": ["/c", "npx", "-y", "@cliwant/mcp-sam-gov"]` を使用 |
|
|
240
265
|
| `MODULE_NOT_FOUND ...dist/server.js` (Windows) | npm の git-dep + symlink バグ。パス 3 (clone + `npm install -g .`) を使用 |
|
|
241
266
|
| `EPERM: operation not permitted` | `rmdir /s /q "%APPDATA%\npm\node_modules\@cliwant"` (初期バージョンをインストールしたことがある場合は `@govicon"`) 後に再試行 |
|
|
242
267
|
| ツールが空の結果を返す | SAM.gov のレート制限。1 分待機後に再試行 または `SAM_GOV_API_KEY` 設定 |
|
package/README.ko.md
CHANGED
|
@@ -71,7 +71,7 @@ npm install --omit=dev
|
|
|
71
71
|
npm install -g .
|
|
72
72
|
```
|
|
73
73
|
|
|
74
|
-
설치 후 `mcp-sam-gov` 가 PATH 등록됨. 호스트 config 에
|
|
74
|
+
설치 후 `mcp-sam-gov` 가 PATH 등록됨. 호스트 config 에 추가 (글로벌 설치):
|
|
75
75
|
|
|
76
76
|
```json
|
|
77
77
|
{
|
|
@@ -81,7 +81,25 @@ npm install -g .
|
|
|
81
81
|
}
|
|
82
82
|
```
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
**글로벌 설치 없이 (npx)** — clone 과 `npm install -g` 를 건너뛰고 Node.js 만 있으면 됩니다. 첫 실행 때 npx 가 npm 에서 패키지를 받아 캐시합니다.
|
|
85
|
+
|
|
86
|
+
```json
|
|
87
|
+
{ "mcpServers": { "sam-gov": { "command": "npx", "args": ["-y", "@cliwant/mcp-sam-gov"] } } }
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Claude Code CLI 로 등록할 때:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
claude mcp add sam-gov -- npx -y @cliwant/mcp-sam-gov
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Windows 에서 호스트가 `spawn npx ENOENT` 로 서버를 못 띄우면 npx 를 `cmd /c` 로 감싸세요: `"command": "cmd", "args": ["/c", "npx", "-y", "@cliwant/mcp-sam-gov"]`.
|
|
97
|
+
|
|
98
|
+
> **패키지 이름 주의:** npm 패키지 이름은 scope 가 붙은 **`@cliwant/mcp-sam-gov`** 입니다. `mcp-sam-gov` 는 글로벌 설치 시 PATH 에 생기는 실행 파일 이름일 뿐이고, npm 에 scope 없는 `mcp-sam-gov` 패키지는 없습니다. 그래서 `npx -y mcp-sam-gov` 는 404 로 실패합니다. `npx -y @cliwant/mcp-sam-gov` 를 쓰세요.
|
|
99
|
+
|
|
100
|
+
VS Code 는 `.vscode/mcp.json` 에 `"servers"` 키를 사용합니다. 또는 영문 README 상단의 **Install in VS Code** / **Add to Kiro** 배지로 원클릭 설치할 수 있습니다.
|
|
101
|
+
|
|
102
|
+
각 호스트별 config 위치와 호스트별 npx 설정 예시는 [호스트별 설정](./README.md#host-configurations) 참조 (영문 README).
|
|
85
103
|
|
|
86
104
|
### ⚪ 경로 4 — 직접 경로 (글로벌 설치 없음)
|
|
87
105
|
|
|
@@ -174,6 +192,12 @@ npm install --omit=dev
|
|
|
174
192
|
|
|
175
193
|
---
|
|
176
194
|
|
|
195
|
+
## 도구셋 선택 (컨텍스트 절약)
|
|
196
|
+
|
|
197
|
+
기본값은 전체 152개 도구를 로드하며 세션당 약 80k 토큰이 소요됩니다. `MCP_SAM_GOV_TOOLSETS` 환경 변수에 필요한 도구셋 이름을 쉼표로 구분해 지정하면 컨텍스트를 줄일 수 있습니다. 빈 값이나 `all`로 설정하면 전체 도구가 로드됩니다. 사용 가능한 도구셋: `core`(58개, SAM/Grants/USAspending/FAR/eCFR/Federal Register/SBA 등), `sled`(13개, 주·지자체 조달), `vetting`(17개, OFAC/FDIC/FAC/EPA ECHO 등), `disclosure`(8개, SEC EDGAR), `regulatory`(9개, Regulations.gov/Congress/GovInfo), `pricing`(15개, GSA/BLS/Treasury/FRED/DOL 등), `health`(17개, CMS/NIH/NSF/openFDA 등), `safety`(3개, NHTSA/CPSC), `geo`(9개, Census geocode/FEMA/NWS 등), `cyber`(3개, NVD/CISA KEV/NIST 800-53). 로드되지 않은 도구를 호출하면 어느 도구셋에서 활성화할 수 있는지를 알려주는 `tool_not_loaded` 오류가 반환됩니다.
|
|
198
|
+
|
|
199
|
+
---
|
|
200
|
+
|
|
177
201
|
## 최신 버전 유지
|
|
178
202
|
|
|
179
203
|
npm은 설치한 사용자에게 새 버전을 알려주지 않으므로, 서버가 **최소한으로** 알려줍니다. 시작 시 **공개 npm 레지스트리에 익명 요청 1회**로 자기 최신 버전을 확인하고, **더 새 버전이 있을 때만** stderr에 한 줄 출력합니다(예: `a newer version is available: 1.7.0 → 1.8.0`). **사용 데이터는 전혀 보내지 않고**(텔레메트리 아닌 버전 확인), 프로토콜 stdout은 건드리지 않으며, 논블로킹이고, 최신이면 조용합니다.
|
|
@@ -237,6 +261,7 @@ npm은 설치한 사용자에게 새 버전을 알려주지 않으므로, 서버
|
|
|
237
261
|
|---|---|
|
|
238
262
|
| Claude Desktop 🔨 메뉴에 `sam-gov` 안 보임 | Claude Desktop 완전 종료 (Windows: 시스템 트레이 / macOS: Quit) 후 재실행. 로그: `%APPDATA%\Claude\logs\mcp*.log` |
|
|
239
263
|
| `command not found: mcp-sam-gov` | `npm install -g .` 성공했나 확인. `npm config get prefix` 결과가 PATH 에 있나 확인 |
|
|
264
|
+
| `spawn npx ENOENT` (Windows, npx 설정) | 호스트가 셸 없이 `npx` 를 실행해 Windows 가 `npx.cmd` 를 못 찾은 경우. `"command": "cmd", "args": ["/c", "npx", "-y", "@cliwant/mcp-sam-gov"]` 사용 |
|
|
240
265
|
| `MODULE_NOT_FOUND ...dist/server.js` (Windows) | npm 의 git-dep + symlink 버그. 경로 3 (clone + `npm install -g .`) 사용 |
|
|
241
266
|
| `EPERM: operation not permitted` | `rmdir /s /q "%APPDATA%\npm\node_modules\@cliwant"` (또는 초기 버전 설치 경험이 있다면 `@govicon"`) 후 재시도 |
|
|
242
267
|
| 도구 결과 비어있음 | SAM.gov rate limit. 1분 대기 후 재시도 또는 `SAM_GOV_API_KEY` 설정 |
|
package/README.md
CHANGED
|
@@ -13,6 +13,8 @@ The most comprehensive **keyless-first** MCP server for US federal **and state/l
|
|
|
13
13
|
[](https://glama.ai/mcp/servers/cliwant/mcp-sam-gov)
|
|
14
14
|
[](./LICENSE)
|
|
15
15
|
[](https://github.com/cliwant/mcp-sam-gov/actions/workflows/daily-smoke.yml)
|
|
16
|
+
[](https://insiders.vscode.dev/redirect/mcp/install?name=sam-gov&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cliwant%2Fmcp-sam-gov%22%5D%7D)
|
|
17
|
+
[](https://kiro.dev/launch/mcp/add?name=sam-gov&config=%7B%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cliwant%2Fmcp-sam-gov%22%5D%7D)
|
|
16
18
|
|
|
17
19
|
[English](./README.md) · [한국어](./README.ko.md) · [日本語](./README.ja.md)
|
|
18
20
|
|
|
@@ -36,7 +38,7 @@ The most comprehensive **keyless-first** MCP server for US federal **and state/l
|
|
|
36
38
|
|
|
37
39
|
🤖 Claude → sam_get_opportunity { noticeId: "5ef3db5d…" }
|
|
38
40
|
✓ Department of Veterans Affairs · Combined Synopsis/Solicitation
|
|
39
|
-
POC:
|
|
41
|
+
POC: Contracting Officer <co.name@example.gov> +1-XXX-XXX-XXXX
|
|
40
42
|
Set-aside: Total Small Business
|
|
41
43
|
Attachments: 1 ↓ 36C24526Q0460_1.docx (172 KB)
|
|
42
44
|
SOW preview: "RFQ# 36C24526Q0460 — Bulk Oxygen Tank Rental, Fill, Telemetry…"
|
|
@@ -136,6 +138,8 @@ After install, the binary `mcp-sam-gov` is on your PATH. Add this to your host c
|
|
|
136
138
|
|
|
137
139
|
Specific config locations per host: see [Host configurations](#host-configurations) below.
|
|
138
140
|
|
|
141
|
+
**No global install?** Every host config below also has an `npx` variant (`npx -y @cliwant/mcp-sam-gov`) that skips the clone and `npm install -g`. It only needs Node.js.
|
|
142
|
+
|
|
139
143
|
### ⚪ Path 4 — Direct path (zero install, just point at the file)
|
|
140
144
|
|
|
141
145
|
Skip installation entirely:
|
|
@@ -163,10 +167,19 @@ Then point your host config at the absolute path:
|
|
|
163
167
|
|
|
164
168
|
## Host configurations
|
|
165
169
|
|
|
170
|
+
Each host below shows two variants. Use one of them:
|
|
171
|
+
|
|
172
|
+
- **Global install**: `"command": "mcp-sam-gov"`. This works only after `npm install -g` (Path 3) has put the `mcp-sam-gov` binary on your PATH.
|
|
173
|
+
- **No global install (npx)**: `"command": "npx", "args": ["-y", "@cliwant/mcp-sam-gov"]`. This needs only Node.js. npx downloads the package from npm on first run and caches it.
|
|
174
|
+
|
|
175
|
+
> **Package name:** the npm package is scoped: **`@cliwant/mcp-sam-gov`**. `mcp-sam-gov` is only the name of the binary that a global install puts on your PATH. No unscoped `mcp-sam-gov` package exists on npm, so `npx -y mcp-sam-gov` fails with a 404. Use `npx -y @cliwant/mcp-sam-gov`.
|
|
176
|
+
|
|
166
177
|
### Claude Desktop
|
|
167
178
|
|
|
168
179
|
`%APPDATA%\Claude\claude_desktop_config.json` (Windows) or `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS):
|
|
169
180
|
|
|
181
|
+
Global install:
|
|
182
|
+
|
|
170
183
|
```json
|
|
171
184
|
{
|
|
172
185
|
"mcpServers": {
|
|
@@ -175,45 +188,91 @@ Then point your host config at the absolute path:
|
|
|
175
188
|
}
|
|
176
189
|
```
|
|
177
190
|
|
|
191
|
+
No global install (npx):
|
|
192
|
+
|
|
193
|
+
```json
|
|
194
|
+
{
|
|
195
|
+
"mcpServers": {
|
|
196
|
+
"sam-gov": { "command": "npx", "args": ["-y", "@cliwant/mcp-sam-gov"] }
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
On Windows, if the server fails to start with `spawn npx ENOENT` in `%APPDATA%\Claude\logs\mcp*.log`, wrap npx in `cmd /c`:
|
|
202
|
+
|
|
203
|
+
```json
|
|
204
|
+
{
|
|
205
|
+
"mcpServers": {
|
|
206
|
+
"sam-gov": { "command": "cmd", "args": ["/c", "npx", "-y", "@cliwant/mcp-sam-gov"] }
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
```
|
|
210
|
+
|
|
178
211
|
(Or skip this entirely — use Path 1's `.mcpb` and it auto-configures.)
|
|
179
212
|
|
|
180
213
|
Restart Claude Desktop fully (system tray quit on Windows / Quit menu on macOS), then look for the 🔨 icon. You should see "sam-gov (152 tools)".
|
|
181
214
|
|
|
182
215
|
### Claude Code
|
|
183
216
|
|
|
184
|
-
Per-project `.mcp.json
|
|
217
|
+
Per-project `.mcp.json`, global install:
|
|
185
218
|
|
|
186
219
|
```json
|
|
187
220
|
{ "mcpServers": { "sam-gov": { "command": "mcp-sam-gov" } } }
|
|
188
221
|
```
|
|
189
222
|
|
|
190
|
-
|
|
223
|
+
No global install (npx):
|
|
224
|
+
|
|
225
|
+
```json
|
|
226
|
+
{ "mcpServers": { "sam-gov": { "command": "npx", "args": ["-y", "@cliwant/mcp-sam-gov"] } } }
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
Or with the CLI:
|
|
191
230
|
|
|
192
231
|
```bash
|
|
232
|
+
# global install
|
|
193
233
|
claude mcp add sam-gov mcp-sam-gov
|
|
234
|
+
|
|
235
|
+
# no global install (npx)
|
|
236
|
+
claude mcp add sam-gov -- npx -y @cliwant/mcp-sam-gov
|
|
194
237
|
```
|
|
195
238
|
|
|
196
239
|
### Codex CLI
|
|
197
240
|
|
|
198
241
|
`~/.codex/config.toml`:
|
|
199
242
|
|
|
243
|
+
Global install:
|
|
244
|
+
|
|
200
245
|
```toml
|
|
201
246
|
[mcp_servers.sam-gov]
|
|
202
247
|
command = "mcp-sam-gov"
|
|
203
248
|
args = []
|
|
204
249
|
```
|
|
205
250
|
|
|
251
|
+
No global install (npx):
|
|
252
|
+
|
|
253
|
+
```toml
|
|
254
|
+
[mcp_servers.sam-gov]
|
|
255
|
+
command = "npx"
|
|
256
|
+
args = ["-y", "@cliwant/mcp-sam-gov"]
|
|
257
|
+
```
|
|
258
|
+
|
|
206
259
|
### Cursor
|
|
207
260
|
|
|
208
|
-
Settings → MCP → Add new MCP server:
|
|
261
|
+
Settings → MCP → Add new MCP server. Global install:
|
|
209
262
|
|
|
210
263
|
```json
|
|
211
264
|
{ "mcpServers": { "sam-gov": { "command": "mcp-sam-gov" } } }
|
|
212
265
|
```
|
|
213
266
|
|
|
267
|
+
No global install (npx):
|
|
268
|
+
|
|
269
|
+
```json
|
|
270
|
+
{ "mcpServers": { "sam-gov": { "command": "npx", "args": ["-y", "@cliwant/mcp-sam-gov"] } } }
|
|
271
|
+
```
|
|
272
|
+
|
|
214
273
|
### Continue
|
|
215
274
|
|
|
216
|
-
`~/.continue/config.json
|
|
275
|
+
`~/.continue/config.json`, global install:
|
|
217
276
|
|
|
218
277
|
```json
|
|
219
278
|
{
|
|
@@ -225,17 +284,56 @@ Settings → MCP → Add new MCP server:
|
|
|
225
284
|
}
|
|
226
285
|
```
|
|
227
286
|
|
|
287
|
+
No global install (npx):
|
|
288
|
+
|
|
289
|
+
```json
|
|
290
|
+
{
|
|
291
|
+
"experimental": {
|
|
292
|
+
"modelContextProtocolServer": {
|
|
293
|
+
"transport": { "type": "stdio", "command": "npx", "args": ["-y", "@cliwant/mcp-sam-gov"] }
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
```
|
|
298
|
+
|
|
228
299
|
### Gemini CLI
|
|
229
300
|
|
|
230
|
-
`~/.gemini/settings.json
|
|
301
|
+
`~/.gemini/settings.json`, global install:
|
|
231
302
|
|
|
232
303
|
```json
|
|
233
304
|
{ "mcpServers": { "sam-gov": { "command": "mcp-sam-gov" } } }
|
|
234
305
|
```
|
|
235
306
|
|
|
307
|
+
No global install (npx):
|
|
308
|
+
|
|
309
|
+
```json
|
|
310
|
+
{ "mcpServers": { "sam-gov": { "command": "npx", "args": ["-y", "@cliwant/mcp-sam-gov"] } } }
|
|
311
|
+
```
|
|
312
|
+
|
|
313
|
+
### VS Code
|
|
314
|
+
|
|
315
|
+
Add a `.vscode/mcp.json` at your project root (VS Code uses `"servers"`, not `"mcpServers"`):
|
|
316
|
+
|
|
317
|
+
```json
|
|
318
|
+
{
|
|
319
|
+
"servers": {
|
|
320
|
+
"sam-gov": {
|
|
321
|
+
"command": "npx",
|
|
322
|
+
"args": ["-y", "@cliwant/mcp-sam-gov"]
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Or use the one-click badge at the top of this page to install directly from your browser.
|
|
329
|
+
|
|
330
|
+
### Kiro
|
|
331
|
+
|
|
332
|
+
Use the one-click badge at the top of this page to add the server. Kiro opens an install dialog pre-filled with the `npx` command.
|
|
333
|
+
|
|
236
334
|
### Anything else
|
|
237
335
|
|
|
238
|
-
If your host speaks MCP over stdio, point it at `mcp-sam-gov
|
|
336
|
+
If your host speaks MCP over stdio, point it at `mcp-sam-gov` (global install) or at `npx -y @cliwant/mcp-sam-gov` (no global install). No host-specific code.
|
|
239
337
|
|
|
240
338
|
---
|
|
241
339
|
|
|
@@ -383,6 +481,55 @@ Get one free (instant, no wait) at [api.data.gov/signup](https://api.data.gov/si
|
|
|
383
481
|
|
|
384
482
|
---
|
|
385
483
|
|
|
484
|
+
## Choosing toolsets (smaller context)
|
|
485
|
+
|
|
486
|
+
By default all 152 tools load — about 74k tokens per session. Clients that pay the full context cost (Claude Desktop, Cursor, raw API) can cut that significantly by loading only the toolsets relevant to the task.
|
|
487
|
+
|
|
488
|
+
Set the **`MCP_SAM_GOV_TOOLSETS`** environment variable to a comma-separated list of toolset names (case-insensitive). Leave it blank (or set it to `all`) to restore all tools.
|
|
489
|
+
|
|
490
|
+
Token counts are approximate, measured as the compact JSON character count of each `tools/list` entry divided by 4.
|
|
491
|
+
`feedback` and `api_key_status` are always loaded in every profile (they help agents report problems and check key health regardless of which toolset is active).
|
|
492
|
+
|
|
493
|
+
| Toolset | Tools | Approx tokens | What it covers |
|
|
494
|
+
|---|---|---|---|
|
|
495
|
+
| `core` | 60 | ~17k | SAM.gov discovery/attachments/wage-determinations/exclusions/integrity; Grants.gov; all USAspending; FPDS; GAO; FAR/eCFR/Federal Register; SBA; OFAC screening; GSA labor-rate benchmarks; `api_key_status`; `feedback` (always loaded) |
|
|
496
|
+
| `sled` | 13 | ~7k | State/local (SLED) procurement: OpenGov, Bonfire, ArcGIS, Socrata, data.gov/CKAN, Tableau, Open Checkbook, search.gov domains |
|
|
497
|
+
| `vetting` | 16 | ~10k | Partner due-diligence: FAC, FDIC, EPA ECHO/TRI, CourtListener, nonprofit (IRS 990), Senate LDA lobbying |
|
|
498
|
+
| `disclosure` | 8 | ~5k | SEC EDGAR financial filings and XBRL frames |
|
|
499
|
+
| `regulatory` | 9 | ~4k | Regulations.gov, Congress.gov, GovInfo |
|
|
500
|
+
| `pricing` | 15 | ~9k | GSA per-diem, BLS, Treasury, BEA, Census business-patterns, FRED, DOL, USITC HTS |
|
|
501
|
+
| `health` | 17 | ~12k | CMS, NPPES, NIH, NSF, ClinicalTrials.gov, openFDA |
|
|
502
|
+
| `safety` | 3 | ~2k | NHTSA vehicle recalls, CPSC consumer-product recalls |
|
|
503
|
+
| `geo` | 8 | ~5k | Census geocode, FEMA disasters, NWS alerts, CBP border wait times, data.gov catalog |
|
|
504
|
+
| `cyber` | 3 | ~2k | NVD CVE, CISA KEV, NIST SP 800-53 |
|
|
505
|
+
| **all** | **152** | **~74k** | Everything (default) |
|
|
506
|
+
|
|
507
|
+
**Config examples:**
|
|
508
|
+
|
|
509
|
+
**Claude Desktop** (`claude_desktop_config.json`):
|
|
510
|
+
```json
|
|
511
|
+
{
|
|
512
|
+
"mcpServers": {
|
|
513
|
+
"sam-gov": {
|
|
514
|
+
"command": "npx",
|
|
515
|
+
"args": ["-y", "@cliwant/mcp-sam-gov"],
|
|
516
|
+
"env": { "MCP_SAM_GOV_TOOLSETS": "core,sled" }
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
```
|
|
521
|
+
|
|
522
|
+
**Claude Code** (command line):
|
|
523
|
+
```bash
|
|
524
|
+
claude mcp add sam-gov -e MCP_SAM_GOV_TOOLSETS=core,sled -- npx -y @cliwant/mcp-sam-gov
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
**Claude Desktop bundle** (`.mcpb` / manifest `user_config`): set the **Toolsets** field in the extension settings dialog (blank = all).
|
|
528
|
+
|
|
529
|
+
If you call a tool that belongs to an unloaded toolset, the server returns a structured `tool_not_loaded` error naming the toolset and the exact env var to set. The suggested value is the **union** of your current loaded sets plus the needed set (e.g. `MCP_SAM_GOV_TOOLSETS=core,vetting` when you have `core` loaded and call a vetting tool) so your existing profile is not silently dropped. It never silently returns an empty result.
|
|
530
|
+
|
|
531
|
+
---
|
|
532
|
+
|
|
386
533
|
## Staying up to date
|
|
387
534
|
|
|
388
535
|
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.
|
|
@@ -688,6 +835,7 @@ This server is built around one rule: **honest failure over confident fabricatio
|
|
|
688
835
|
|---|---|
|
|
689
836
|
| 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` |
|
|
690
837
|
| `command not found: mcp-sam-gov` | Confirm `npm install -g .` succeeded; check that npm's global bin is on PATH (`npm config get prefix`) |
|
|
838
|
+
| `spawn npx ENOENT` (Windows, npx config) | The host started `npx` without a shell, so Windows can't find `npx.cmd`. Use `"command": "cmd", "args": ["/c", "npx", "-y", "@cliwant/mcp-sam-gov"]`. |
|
|
691
839
|
| `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. |
|
|
692
840
|
| `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. |
|
|
693
841
|
| `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. |
|
package/dist/bls.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bls.d.ts","sourceRoot":"","sources":["../src/bls.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AAKH,OAAO,EAAE,GAAG,EAAO,MAAM,aAAa,CAAC;AACvC,OAAO,EAAY,KAAK,UAAU,EAAqB,MAAM,WAAW,CAAC;AAKzE,OAAO,EAAE,GAAG,EAAE,CAAC;AAiBf,eAAO,MAAM,eAAe,8LAUlB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,eAAe,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,YAAY,EAAE,eAAe,CA8C7D,CAAC;
|
|
1
|
+
{"version":3,"file":"bls.d.ts","sourceRoot":"","sources":["../src/bls.ts"],"names":[],"mappings":"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"}
|
package/dist/bls.js
CHANGED
|
@@ -132,10 +132,11 @@ export const BLS_CATALOG = {
|
|
|
132
132
|
// helpful behavior.
|
|
133
133
|
const BLS_ID_TO_KEY = new Map(BLS_SERIES_KEYS.map((k) => [BLS_CATALOG[k].seriesId, k]));
|
|
134
134
|
// ─── Raw-seriesId charclass (SSRF + "verify the ID" honesty) ──────
|
|
135
|
-
// `^[A-Z0-9]{1,
|
|
135
|
+
// `^[A-Z0-9]{1,25}$` — uppercase alnum, explicit length bound. In JS (no `m`
|
|
136
136
|
// flag) `$` matches only end-of-input, and `[A-Z0-9]` cannot include `\n`, so a
|
|
137
137
|
// trailing newline is rejected. Rejects `../`, encoded traversal, `@host`, `;`.
|
|
138
|
-
|
|
138
|
+
// 25 chars covers OEWS series IDs (e.g. OEUN000000000000015125201, 25 chars).
|
|
139
|
+
const SERIES_ID_RE = /^[A-Z0-9]{1,25}$/;
|
|
139
140
|
// ─── Year bounds ──────────────────────────────────────────────────
|
|
140
141
|
const YEAR_MIN = 1900;
|
|
141
142
|
const CURRENT_YEAR = new Date().getUTCFullYear();
|
|
@@ -323,7 +324,7 @@ export async function timeseries(args) {
|
|
|
323
324
|
if (typeof raw !== "string" || !SERIES_ID_RE.test(raw)) {
|
|
324
325
|
throw new ToolErrorCarrier({
|
|
325
326
|
kind: "invalid_input",
|
|
326
|
-
message: `Invalid seriesId ${JSON.stringify(raw)} — expected 1..
|
|
327
|
+
message: `Invalid seriesId ${JSON.stringify(raw)} — expected 1..25 uppercase alphanumeric characters (^[A-Z0-9]{1,25}$). A BLS series ID like 'CUUR0000SA0' or OEWS 'OEUN000000000000015125201' (25 chars); punctuation/whitespace/lowercase are rejected (SSRF + "verify the ID" honesty).`,
|
|
327
328
|
retryable: false,
|
|
328
329
|
upstreamEndpoint: label,
|
|
329
330
|
});
|