@cliwant/mcp-sam-gov 1.12.0 → 1.13.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/dist/echo.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"echo.js","sourceRoot":"","sources":["../src/echo.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"echo.js","sourceRoot":"","sources":["../src/echo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * open-checkbook.ts — Socrata "Open Expenditures / Open Checkbook" row-level
3
+ * vendor-payment API, a keyless-first SLED source (loop cycle 76, 2026-07-24 —
4
+ * South Dakota dark-state closure, the LAST dark state).
5
+ *
6
+ * WHAT IT ADDS: some US governments run Socrata's "Open Expenditures" product,
7
+ * whose public dashboard fronts a KEYLESS app-proxy JSON API at
8
+ * `https://{host}/api/checkbook_data.json?year=…&{filters}&page=P&limit=L`
9
+ * → `{ data:[…row-level payments…], count, total_amount }`. First (and, as of
10
+ * this writing, only live-verified) portal: **South Dakota Open Checkbook**
11
+ * (740,980 vendor-payment rows, ~$8.41B, the ~3 most-recent fiscal years).
12
+ *
13
+ * ★ KEYLESS- vs-GATED HONESTY (load-bearing): the app-proxy above is anonymous
14
+ * and public. The UNDERLYING Socrata SODA dataset (7uwr-juaf on
15
+ * southdakota.data.socrata.com) is **403 login-gated** — this module NEVER
16
+ * touches it and NEVER presents it as reachable. We only call the public
17
+ * /api/checkbook_data.json surface the dashboard itself uses anonymously.
18
+ *
19
+ * ★ CURATED allowlist (SSRF core): each portal is a FIXED, live-verified host;
20
+ * the `portal` enum in server.ts is built FROM the keys. Host asserted before
21
+ * fetch (redirect:"error").
22
+ *
23
+ * ★ HONESTY PILLARS:
24
+ * P1: totalAvailable = the API's own `count` (the REAL filtered total — it
25
+ * matches the product's totals.json exactly; e.g. 740,980 unfiltered,
26
+ * 109,887 for org1=TRANSPORTATION), NEVER the page length.
27
+ * P2: getJson THROWS on 429/5xx/timeout — NEVER a fake empty. A bogus filter
28
+ * ⇒ honest count:0/empty; a deep offset past the end ⇒ returned:0 with the
29
+ * real count preserved (an honest tail, not an outage).
30
+ * P3: `amount` ⇒ number|null (a real $0 is 0, an absent value is null, never a
31
+ * fabricated 0); all other fields via str (null-never-empty). Dates verbatim.
32
+ * P4: a body that is not `{data:[…], count:<number>}` ⇒ schema_drift.
33
+ * ★ Coverage disclosure (P5): only the ~3 most-recent fiscal years are exposed
34
+ * by the product (NOT full history) — disclosed every response.
35
+ */
36
+ import { num } from "./coerce.js";
37
+ import { type MetaBundle } from "./meta.js";
38
+ export { num };
39
+ export type OpenCheckbookPortal = {
40
+ key: string;
41
+ host: string;
42
+ label: string;
43
+ note: string;
44
+ };
45
+ export declare const OPEN_CHECKBOOK_PORTALS: readonly OpenCheckbookPortal[];
46
+ export type OpenCheckbookSearchArgs = {
47
+ portal: string;
48
+ year?: string;
49
+ vendor?: string;
50
+ org?: string;
51
+ expenseCategory?: string;
52
+ sortBy?: string;
53
+ sortOrder?: string;
54
+ limit?: number;
55
+ offset?: number;
56
+ };
57
+ /**
58
+ * Row-level vendor-payment search over a curated Socrata Open-Expenditures
59
+ * checkbook portal (keyless). `portal` is an allowlist enum; `year`/`vendor`/
60
+ * `org`/`expenseCategory` are EXACT-match filters; `sortBy`/`sortOrder` sort;
61
+ * `limit`/`offset` page. Returns { portal, rows:[…] } + honest _meta
62
+ * (totalAvailable = the API's real count, NOT a page length).
63
+ */
64
+ export declare function openCheckbookSearch(args: OpenCheckbookSearchArgs): Promise<MetaBundle>;
65
+ //# sourceMappingURL=open-checkbook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-checkbook.d.ts","sourceRoot":"","sources":["../src/open-checkbook.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAIH,OAAO,EAAE,GAAG,EAAO,MAAM,aAAa,CAAC;AACvC,OAAO,EAAY,KAAK,UAAU,EAAqB,MAAM,WAAW,CAAC;AAEzE,OAAO,EAAE,GAAG,EAAE,CAAC;AAGf,MAAM,MAAM,mBAAmB,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAC7F,eAAO,MAAM,sBAAsB,EAAE,SAAS,mBAAmB,EAOvD,CAAC;AAuBX,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,uBAAuB,GAAG,OAAO,CAAC,UAAU,CAAC,CAwF5F"}
@@ -0,0 +1,166 @@
1
+ /**
2
+ * open-checkbook.ts — Socrata "Open Expenditures / Open Checkbook" row-level
3
+ * vendor-payment API, a keyless-first SLED source (loop cycle 76, 2026-07-24 —
4
+ * South Dakota dark-state closure, the LAST dark state).
5
+ *
6
+ * WHAT IT ADDS: some US governments run Socrata's "Open Expenditures" product,
7
+ * whose public dashboard fronts a KEYLESS app-proxy JSON API at
8
+ * `https://{host}/api/checkbook_data.json?year=…&{filters}&page=P&limit=L`
9
+ * → `{ data:[…row-level payments…], count, total_amount }`. First (and, as of
10
+ * this writing, only live-verified) portal: **South Dakota Open Checkbook**
11
+ * (740,980 vendor-payment rows, ~$8.41B, the ~3 most-recent fiscal years).
12
+ *
13
+ * ★ KEYLESS- vs-GATED HONESTY (load-bearing): the app-proxy above is anonymous
14
+ * and public. The UNDERLYING Socrata SODA dataset (7uwr-juaf on
15
+ * southdakota.data.socrata.com) is **403 login-gated** — this module NEVER
16
+ * touches it and NEVER presents it as reachable. We only call the public
17
+ * /api/checkbook_data.json surface the dashboard itself uses anonymously.
18
+ *
19
+ * ★ CURATED allowlist (SSRF core): each portal is a FIXED, live-verified host;
20
+ * the `portal` enum in server.ts is built FROM the keys. Host asserted before
21
+ * fetch (redirect:"error").
22
+ *
23
+ * ★ HONESTY PILLARS:
24
+ * P1: totalAvailable = the API's own `count` (the REAL filtered total — it
25
+ * matches the product's totals.json exactly; e.g. 740,980 unfiltered,
26
+ * 109,887 for org1=TRANSPORTATION), NEVER the page length.
27
+ * P2: getJson THROWS on 429/5xx/timeout — NEVER a fake empty. A bogus filter
28
+ * ⇒ honest count:0/empty; a deep offset past the end ⇒ returned:0 with the
29
+ * real count preserved (an honest tail, not an outage).
30
+ * P3: `amount` ⇒ number|null (a real $0 is 0, an absent value is null, never a
31
+ * fabricated 0); all other fields via str (null-never-empty). Dates verbatim.
32
+ * P4: a body that is not `{data:[…], count:<number>}` ⇒ schema_drift.
33
+ * ★ Coverage disclosure (P5): only the ~3 most-recent fiscal years are exposed
34
+ * by the product (NOT full history) — disclosed every response.
35
+ */
36
+ import { ToolErrorCarrier } from "./errors.js";
37
+ import { getJson, driftError } from "./datasource.js";
38
+ import { num, str } from "./coerce.js";
39
+ import { withMeta } from "./meta.js";
40
+ export { num };
41
+ export const OPEN_CHECKBOOK_PORTALS = [
42
+ {
43
+ key: "sd",
44
+ host: "southdakota.spending.socrata.com",
45
+ label: "South Dakota — Open Checkbook",
46
+ note: "State of South Dakota vendor-payment checkbook (row fields: expense_category, description, fund, payment_date, vendor, org1=department, amount, custom_checkbook_field7=invoice ref, payment_id). ~740,980 rows / ~$8.41B across the ~3 most-recent fiscal years (NOT full history). The underlying Socrata SODA dataset is login-gated; this public app-proxy is the keyless door.",
47
+ },
48
+ ];
49
+ const PORTAL_BY_KEY = new Map(OPEN_CHECKBOOK_PORTALS.map((p) => [p.key, p]));
50
+ // Sort fields the product supports (validated — an SSRF/injection + silent-noop guard).
51
+ const SORT_FIELDS = new Set(["amount", "payment_date", "vendor", "org1", "expense_category"]);
52
+ // ─── SSRF-guarded fetch (fixed allowlist host + assertion) ──
53
+ async function getCheckbook(portal, params) {
54
+ const url = `https://${portal.host}/api/checkbook_data.json?${params.toString()}`;
55
+ const built = new URL(url);
56
+ if (built.hostname !== portal.host || built.protocol !== "https:") {
57
+ throw new ToolErrorCarrier({
58
+ kind: "invalid_input",
59
+ message: `Constructed Open-Checkbook URL host ${JSON.stringify(built.hostname)} (${built.protocol}) does not match the allowlisted portal host ${JSON.stringify(portal.host)} over https — refusing to fetch (SSRF safety).`,
60
+ retryable: false,
61
+ upstreamEndpoint: `open-checkbook:${portal.key}`,
62
+ });
63
+ }
64
+ return getJson(url, { label: `open-checkbook:${portal.key}`, redirect: "error" });
65
+ }
66
+ /**
67
+ * Row-level vendor-payment search over a curated Socrata Open-Expenditures
68
+ * checkbook portal (keyless). `portal` is an allowlist enum; `year`/`vendor`/
69
+ * `org`/`expenseCategory` are EXACT-match filters; `sortBy`/`sortOrder` sort;
70
+ * `limit`/`offset` page. Returns { portal, rows:[…] } + honest _meta
71
+ * (totalAvailable = the API's real count, NOT a page length).
72
+ */
73
+ export async function openCheckbookSearch(args) {
74
+ const portal = PORTAL_BY_KEY.get(args.portal);
75
+ if (!portal) {
76
+ throw new ToolErrorCarrier({
77
+ kind: "invalid_input",
78
+ message: `Unknown Open-Checkbook portal ${JSON.stringify(args.portal)}. Allowed: ${OPEN_CHECKBOOK_PORTALS.map((p) => p.key).join(", ")}.`,
79
+ retryable: false,
80
+ });
81
+ }
82
+ const limit = args.limit ?? 25;
83
+ const offset = args.offset ?? 0;
84
+ // The product paginates by 1-based `page` + `limit`. Map offset→page and snap
85
+ // offset to the page boundary (disclosing the served offset when it differs).
86
+ const page = Math.floor(offset / limit) + 1;
87
+ const servedOffset = (page - 1) * limit;
88
+ const filtersApplied = ["portal"];
89
+ const params = new URLSearchParams();
90
+ params.set("year", args.year && args.year.trim() ? args.year.trim() : "All Years");
91
+ if (args.year && args.year.trim())
92
+ filtersApplied.push("year");
93
+ if (args.vendor && args.vendor.trim()) {
94
+ params.set("vendor", args.vendor.trim());
95
+ filtersApplied.push("vendor");
96
+ }
97
+ if (args.org && args.org.trim()) {
98
+ params.set("org1", args.org.trim());
99
+ filtersApplied.push("org");
100
+ }
101
+ if (args.expenseCategory && args.expenseCategory.trim()) {
102
+ params.set("expense_category", args.expenseCategory.trim());
103
+ filtersApplied.push("expenseCategory");
104
+ }
105
+ if (args.sortBy && args.sortBy.trim()) {
106
+ const sf = args.sortBy.trim();
107
+ if (!SORT_FIELDS.has(sf)) {
108
+ throw new ToolErrorCarrier({
109
+ kind: "invalid_input",
110
+ message: `Invalid sortBy ${JSON.stringify(sf)}. Allowed: ${[...SORT_FIELDS].join(", ")}.`,
111
+ retryable: false,
112
+ });
113
+ }
114
+ params.set("sort_field", sf);
115
+ params.set("sort_order", args.sortOrder === "asc" ? "asc" : "desc");
116
+ filtersApplied.push("sortBy");
117
+ }
118
+ params.set("page", String(page));
119
+ params.set("limit", String(limit));
120
+ const body = await getCheckbook(portal, params);
121
+ const b = (body ?? {});
122
+ // P4: the shape MUST be { data:[…], count:<number> }.
123
+ if (!Array.isArray(b.data))
124
+ throw driftError(`open-checkbook:${portal.key}`, "Open-Checkbook shape drift — response.data must be an array.");
125
+ const totalAvailable = num(b.count);
126
+ if (totalAvailable === null)
127
+ throw driftError(`open-checkbook:${portal.key}`, "Open-Checkbook shape drift — response.count must be a number.");
128
+ const rows = b.data.map((r) => {
129
+ const o = (r ?? {});
130
+ return {
131
+ vendor: str(o.vendor),
132
+ amount: num(o.amount), // P3: a real $0 is 0; absent ⇒ null (never a fabricated 0)
133
+ payment_date: str(o.payment_date),
134
+ org1: str(o.org1),
135
+ expense_category: str(o.expense_category),
136
+ description: str(o.description),
137
+ fund: str(o.fund),
138
+ invoice: str(o.custom_checkbook_field7),
139
+ payment_id: str(o.payment_id),
140
+ };
141
+ });
142
+ const returned = rows.length;
143
+ const hasMore = servedOffset + returned < totalAvailable;
144
+ const nextOffset = hasMore ? servedOffset + returned : null;
145
+ const notes = [
146
+ `Source: ${portal.label} (Socrata Open Expenditures app-proxy /api/checkbook_data.json, keyless). ${portal.note}`,
147
+ "totalAvailable = the API's exact match count (matches the product's totals.json), NOT the page length.",
148
+ "Filters (year/vendor/org/expenseCategory) are EXACT-match — a partial/misspelled value returns an honest count:0, not an error. amount is number|null (a real $0 is 0, an absent value is null, never a fabricated 0).",
149
+ "COVERAGE: only the ~3 most-recent fiscal years are exposed by this product — this is NOT the state's full payment history.",
150
+ "FRESHNESS is set by the publisher: the portal says it refreshes each payment cycle, but refreshes can lag by weeks. To check recency, sort by payment_date (sortBy='payment_date', sortOrder='desc') and read the newest date.",
151
+ ];
152
+ if (servedOffset !== offset)
153
+ notes.push(`offset ${offset} was snapped to ${servedOffset} (the product paginates by fixed page×limit); pass an offset that is a multiple of limit to avoid snapping.`);
154
+ return withMeta({ portal: portal.key, rows }, {
155
+ source: `${portal.host} via Socrata Open Expenditures (keyless app-proxy)`,
156
+ keylessMode: true,
157
+ returned,
158
+ totalAvailable,
159
+ filtersApplied,
160
+ filtersDropped: [],
161
+ fieldsUnavailable: [],
162
+ pagination: { offset: servedOffset, limit, hasMore, nextOffset },
163
+ notes,
164
+ });
165
+ }
166
+ //# sourceMappingURL=open-checkbook.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"open-checkbook.js","sourceRoot":"","sources":["../src/open-checkbook.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG;AAQH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,EAKb,MAAM,oBAAoB,CAAC;AA4iJ5B,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC;IAO1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE;QAAE,GAAG,EAAE,YAAY,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACxE,CAAC;AAoBF,eAAO,MAAM,KAAK,EAAE,OAAO,EAq1D1B,CAAC;AAmLF,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,OAAO,CAAC,CAkClB;AAyBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CActD;AACD,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,IAAI,CAAC;IACnB,aAAa,EAAE,IAAI,CAAC;CACrB,CAEA;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkE7E"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG;AAQH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,YAAY,EAKb,MAAM,oBAAoB,CAAC;AA0kJ5B,KAAK,OAAO,GAAG;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,CAAC,CAAC,UAAU,CAAC;IAO1B,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE;QAAE,GAAG,EAAE,YAAY,CAAA;KAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CACxE,CAAC;AAoBF,eAAO,MAAM,KAAK,EAAE,OAAO,EA22D1B,CAAC;AAmLF,wBAAsB,OAAO,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,GAAG,EAAE,YAAY,GAChB,OAAO,CAAC,OAAO,CAAC,CAkClB;AAyBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CActD;AACD,wFAAwF;AACxF,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG;IAC7C,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,IAAI,CAAC;IACnB,aAAa,EAAE,IAAI,CAAC;CACrB,CAEA;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkE7E"}
package/dist/server.js CHANGED
@@ -42,6 +42,8 @@ import * as arcgisHub from "./arcgis-hub.js";
42
42
  import * as opengov from "./opengov.js";
43
43
  import * as bonfire from "./bonfire.js";
44
44
  import * as arcgisFeature from "./arcgis-feature.js";
45
+ import * as tableau from "./tableau.js";
46
+ import * as openCheckbook from "./open-checkbook.js";
45
47
  import * as govinfo from "./govinfo.js";
46
48
  import * as fpds from "./fpds.js";
47
49
  import * as nih from "./nih.js";
@@ -90,7 +92,7 @@ import { realpathSync } from "node:fs";
90
92
  const SERVER_NAME = "mcp-sam-gov";
91
93
  // Kept in lockstep with package.json / manifest.json / server.json.
92
94
  // Keep in sync with package.json "version" (asserted at release; see CHANGELOG).
93
- const SERVER_VERSION = "1.12.0";
95
+ const SERVER_VERSION = "1.13.0";
94
96
  // ─── Tool input schemas (Zod) ────────────────────────────────────
95
97
  const SamSearchInput = z.object({
96
98
  query: z.string().optional().describe("Free-text title query"),
@@ -2301,8 +2303,8 @@ const EchoSearchFacilitiesInput = z.object({
2301
2303
  const EchoFacilityReportInput = z.object({
2302
2304
  registryId: z
2303
2305
  .string()
2304
- .regex(/^[0-9]{9,12}$/)
2305
- .describe("The facility's FRS RegistryID (from echo_search_facilities rows' RegistryID) — an all-digit id, 9–12 digits (e.g. '110059768461'). A bad/unknown id ⇒ not_found (never a fabricated report)."),
2306
+ .regex(/^[A-Za-z0-9]{1,20}$/)
2307
+ .describe("The facility's RegistryID exactly as returned in echo_search_facilities rows — usually a 12-digit FRS id (e.g. '110059768461'), but ECHO also returns state/program ids (e.g. 'DCR000509282') and short ids (e.g. '9434'), which the report accepts. 1–20 letters/digits. A bad/unknown id ⇒ not_found (never a fabricated report)."),
2306
2308
  });
2307
2309
  // ─── api.data.gov keyed trio (Regulations.gov + Congress.gov) — input schemas ──
2308
2310
  // ADR-0007. The project's FIRST KEYED source. The key is read from env
@@ -2572,7 +2574,7 @@ const OpengovSearchSolicitationsInput = z.object({
2572
2574
  // ─── Bonfire (Euna) — keyless per-org open-opportunity RSS (SLED bids) ─
2573
2575
  // SLED bid campaign. Thousands of US state/local govs on Bonfire expose a keyless
2574
2576
  // RSS of open opportunities at {org}.bonfirehub.com/opportunities/rss. Ships a
2575
- // curated 187-org seed directory. Fixed-suffix SSRF. org = charclass slug.
2577
+ // curated 186-org seed directory. Fixed-suffix SSRF. org = charclass slug.
2576
2578
  const BonfireListOrganizationsInput = z.object({
2577
2579
  state: z.string().length(2).optional().describe("2-letter US state filter (client-side), e.g. 'TX', 'CA'. Optional."),
2578
2580
  query: z.string().min(1).max(120).optional().describe("Case-insensitive name substring filter (client-side), e.g. 'county', 'ISD'. Optional."),
@@ -2589,6 +2591,32 @@ const BonfireSearchOpportunitiesInput = z.object({
2589
2591
  limit: z.number().int().min(1).max(200).default(50).describe("Opportunities per page, 1..200, default 50. The RSS is the complete open set; this pages over it."),
2590
2592
  offset: z.number().int().min(0).default(0).describe("0-based offset; page with _meta.pagination.nextOffset. totalAvailable = the exact open-opportunity count."),
2591
2593
  });
2594
+ // ─── Socrata Open Expenditures checkbook (curated portal allowlist — SLED) ─
2595
+ // Row-level vendor-payment search over the keyless /api/checkbook_data.json
2596
+ // app-proxy (the underlying SODA dataset is login-gated — never touched).
2597
+ const OpenCheckbookSearchInput = z.object({
2598
+ portal: z
2599
+ .enum(openCheckbook.OPEN_CHECKBOOK_PORTALS.map((p) => p.key))
2600
+ .describe("The curated Open-Checkbook portal (SSRF allowlist enum). 'sd' = State of South Dakota Open Checkbook (~740,980 vendor payments, ~$8.41B, ~3 most-recent fiscal years)."),
2601
+ year: z.string().min(1).max(40).optional().describe("Fiscal-year filter (EXACT match), e.g. '2025'. Default 'All Years' = the exposed ~3-year window (NOT full history)."),
2602
+ vendor: z.string().min(1).max(200).optional().describe("Vendor name filter (EXACT match, e.g. 'US BANK NA' → 917). A partial/misspelled value returns an honest count:0."),
2603
+ org: z.string().min(1).max(200).optional().describe("Department filter (org1, EXACT match, e.g. 'TRANSPORTATION' → 109,887)."),
2604
+ expenseCategory: z.string().min(1).max(200).optional().describe("Expense-category filter (EXACT match, e.g. 'CONTRACTUAL SERVICES')."),
2605
+ sortBy: z.enum(["amount", "payment_date", "vendor", "org1", "expense_category"]).optional().describe("Sort field. Pair with sortOrder."),
2606
+ sortOrder: z.enum(["asc", "desc"]).optional().describe("Sort direction (default desc when sortBy is set)."),
2607
+ limit: z.number().int().min(1).max(1000).default(25).describe("Rows per page, 1..1000, default 25."),
2608
+ offset: z.number().int().min(0).default(0).describe("0-based offset (snapped to a page×limit boundary; the served offset is disclosed). totalAvailable = the real match count, NOT a page length."),
2609
+ });
2610
+ // ─── Tableau Server Guest view CSV (curated view allowlist — SLED transparency) ─
2611
+ // Fetch a Guest-enabled Tableau Server WORKSHEET view's COMPLETE CSV export
2612
+ // (keyless) and page over it client-side. `view` is an enum (SSRF core).
2613
+ const TableauViewCsvInput = z.object({
2614
+ view: z
2615
+ .enum(tableau.TABLEAU_VIEWS.map((v) => v.key))
2616
+ .describe("The curated Tableau Server Guest view (SSRF allowlist enum). 'mt_contracts_awarded' = State of Montana (DOA) Contracts Awarded (~4,554 award records: $ Awarded, Award Date, Event Type IFB/RFP, Event# solicitation, Vendor Name, Agency)."),
2617
+ limit: z.number().int().min(1).max(1000).default(50).describe("Rows per page, 1..1000, default 50. The CSV is the complete view export; this pages over it client-side."),
2618
+ offset: z.number().int().min(0).default(0).describe("0-based offset; page with _meta.pagination.nextOffset. totalAvailable = the complete export row count (NOT a page length)."),
2619
+ });
2592
2620
  // ─── ArcGIS REST feature query (curated service allowlist — SLED bids/GIS) ─
2593
2621
  // Generic ArcGIS FeatureServer/MapServer layer query over a curated allowlist.
2594
2622
  // First payload: DC OCP PASS procurement layers (live solicitations/contracts/PO/
@@ -2596,7 +2624,7 @@ const BonfireSearchOpportunitiesInput = z.object({
2596
2624
  const ArcgisFeatureQueryInput = z.object({
2597
2625
  service: z
2598
2626
  .enum(arcgisFeature.ARCGIS_SERVICES.map((s) => s.key))
2599
- .describe("The curated ArcGIS layer (SSRF allowlist enum). DC OCP PASS: 'dc_pass_solicitations' (live solicitations ~25k), 'dc_pass_contracts', 'dc_pass_purchase_orders', 'dc_pass_payments'. Other US local govs: 'asheville_purchase_orders'/'asheville_po_summary' (Asheville NC), 'bellevue_vendor_payments'/'bellevue_awarded_contracts' (Bellevue WA), 'miamidade_purchase_orders_2025'/'miamidade_purchase_orders_2017' (Miami-Dade FL, current/2017), 'suffolk_county_ny_contracts_2018' (Suffolk County NY), 'matsu_borough_ak_checkbook' (Matanuska-Susitna Borough AK), 'lasvegas_checkbook' (Las Vegas NV ~373k), 'baltimore_checkbook' (Baltimore City MD ~367k), 'naperville_vendor_payments' (Naperville IL ~127k), 'worcester_ma_checkbook_fy25' (Worcester MA FY25), 'lasvegas_purchasing_contracts' (Las Vegas NV contract register), 'txdot_construction_projects' (Texas DOT, awarded construction company ~85k), 'akdot_construction_awards'/'akdot_aashtoware_proposals' (Alaska DOT&PF bid awards/proposals), 'iowadot_public_bid_awards' (Iowa DOT public bid), 'okdot_cirb_contract_status' (Oklahoma DOT CIRB contract status), 'topeka_checkbook_aggregate' (Topeka KS checkbook FY2015–2023 ~332k). 23 curated services (state DOT bid/award registers: TX/AK/IA/OK + municipal checkbooks/contracts)."),
2627
+ .describe("The curated ArcGIS layer (SSRF allowlist enum). DC OCP PASS: 'dc_pass_solicitations' (live solicitations ~25k), 'dc_pass_contracts', 'dc_pass_purchase_orders', 'dc_pass_payments'. Other US local govs: 'asheville_purchase_orders'/'asheville_po_summary' (Asheville NC), 'bellevue_vendor_payments'/'bellevue_awarded_contracts' (Bellevue WA), 'miamidade_purchase_orders_2025'/'miamidade_purchase_orders_2017' (Miami-Dade FL, current/2017), 'suffolk_county_ny_contracts_2018' (Suffolk County NY), 'matsu_borough_ak_checkbook' (Matanuska-Susitna Borough AK), 'lasvegas_checkbook' (Las Vegas NV ~373k), 'baltimore_checkbook' (Baltimore City MD ~367k), 'naperville_vendor_payments' (Naperville IL ~127k), 'worcester_ma_checkbook_fy25' (Worcester MA FY25), 'lasvegas_purchasing_contracts' (Las Vegas NV contract register), 'txdot_construction_projects' (Texas DOT, awarded construction company ~85k), 'akdot_construction_awards'/'akdot_aashtoware_proposals' (Alaska DOT&PF bid awards/proposals), 'iowadot_public_bid_awards' (Iowa DOT public bid), 'okdot_cirb_contract_status' (Oklahoma DOT CIRB contract status), 'topeka_checkbook_aggregate' (Topeka KS checkbook FY2015–2023 ~332k), 'nddot_flex_setaside_road'/'nddot_flex_partner_road'/'nddot_flex_setaside_bridge'/'nddot_flex_partner_bridge' (North Dakota DOT federal flex-funding awards to local public agencies — counties/townships/cities, NOT vendor contracts; a proxy because ND's checkbook/procurement portal is not keyless-reachable). 27 curated services (state DOT bid/award registers: TX/AK/IA/OK + ND DOT flex-funding awards + municipal checkbooks/contracts)."),
2600
2628
  where: z
2601
2629
  .string()
2602
2630
  .min(1)
@@ -5136,7 +5164,7 @@ export const TOOLS = [
5136
5164
  }),
5137
5165
  defineTool({
5138
5166
  name: "echo_facility_report",
5139
- description: "Fetch the EPA ECHO Detailed Facility Report (DFR) for ONE facility by its FRS RegistryID (keyless) — the per-facility compliance / enforcement / inspection / permit deep-dive for competitor or acquisition-target due diligence. Input `registryId` (all-digit FRS id, 9–12 digits, from echo_search_facilities rows). Returns { registryId, report:{…verbatim compliance/enforcement/permit detail…} } + single-record _meta (complete:true, no pagination). A bad/unknown RegistryID ⇒ not_found (never a fabricated report).",
5167
+ description: "Fetch the EPA ECHO Detailed Facility Report (DFR) for ONE facility by its FRS RegistryID (keyless) — the per-facility compliance / enforcement / inspection / permit deep-dive for competitor or acquisition-target due diligence. Input `registryId` (the RegistryID exactly as returned by echo_search_facilities rows — usually a 12-digit FRS id, but ECHO also returns state/program ids like 'DCR000509282' and short ids like '9434', all accepted; 1–20 letters/digits). Returns { registryId, report:{…verbatim compliance/enforcement/permit detail…} } + single-record _meta (complete:true, no pagination). A bad/unknown RegistryID ⇒ not_found (never a fabricated report).",
5140
5168
  inputSchema: EchoFacilityReportInput,
5141
5169
  handler: (input) => echo.facilityReport(input),
5142
5170
  }),
@@ -5231,12 +5259,12 @@ export const TOOLS = [
5231
5259
  }),
5232
5260
  // ━━━ Bonfire (Euna) — keyless per-org open-opportunity RSS (SLED bids) ━━━
5233
5261
  // SLED bid campaign. Thousands of US state/local govs on Bonfire expose a keyless
5234
- // RSS of open opportunities. Ships a curated 187-org live-verified seed directory
5262
+ // RSS of open opportunities. Ships a curated 186-org live-verified seed directory
5235
5263
  // (Bonfire's authoritative org API is auth-gated → out of bounds). Fixed-suffix
5236
5264
  // SSRF (.bonfirehub.com). RSS = the complete open set (totalAvailable honest).
5237
5265
  defineTool({
5238
5266
  name: "bonfire_list_organizations",
5239
- description: "List US governments on the Bonfire (Euna) eProcurement platform — the directory for bonfire_search_opportunities (keyless). Bonfire hosts thousands of US state/local governments' open-bid portals, each with a keyless RSS feed. Filter the curated seed by `state` (2-letter) / `query` (case-insensitive name substring); `limit`(1..200)/`offset`. Output: { organizations:[{ org, name, state }] }. Feed a result's `org` to bonfire_search_opportunities. ★HONESTY: this is a CURATED, live-verified SEED of 187 US orgs — Bonfire has NO keyless org-list API (its authoritative directory is auth-gated, out of bounds), and Euna markets up to ~900 US orgs, so the seed is PARTIAL (disclosed in _meta); probe `{slug}.bonfirehub.com/opportunities/rss` to extend. totalAvailable = the exact filtered seed count.",
5267
+ description: "List US governments on the Bonfire (Euna) eProcurement platform — the directory for bonfire_search_opportunities (keyless). Bonfire hosts thousands of US state/local governments' open-bid portals, each with a keyless RSS feed. Filter the curated seed by `state` (2-letter) / `query` (case-insensitive name substring); `limit`(1..200)/`offset`. Output: { organizations:[{ org, name, state }] }. Feed a result's `org` to bonfire_search_opportunities. ★HONESTY: this is a CURATED, live-verified SEED of 186 US orgs — Bonfire has NO keyless org-list API (its authoritative directory is auth-gated, out of bounds), and Euna markets up to ~900 US orgs, so the seed is PARTIAL (disclosed in _meta); probe `{slug}.bonfirehub.com/opportunities/rss` to extend. totalAvailable = the exact filtered seed count.",
5240
5268
  inputSchema: BonfireListOrganizationsInput,
5241
5269
  handler: (input) => bonfire.listOrganizations(input),
5242
5270
  }),
@@ -5256,6 +5284,26 @@ export const TOOLS = [
5256
5284
  inputSchema: ArcgisFeatureQueryInput,
5257
5285
  handler: (input) => arcgisFeature.featureQuery(input),
5258
5286
  }),
5287
+ // ─── Tableau Server Guest view CSV export (curated allowlist) — SLED transparency ─
5288
+ // Many US state/local govs publish contracts/vendor-payment/checkbook data on a
5289
+ // Guest-enabled Tableau Server; a worksheet view exports its full data as CSV at
5290
+ // {host}/t/{site}/views/{wb}/{view}.csv?:embed=y (keyless). First payload: Montana
5291
+ // Contracts Awarded — the ND-sibling in the dark-state closure campaign.
5292
+ defineTool({
5293
+ name: "tableau_view_csv",
5294
+ description: "Fetch a curated US-government **Tableau Server Guest** view's COMPLETE CSV export (keyless) and page over it — a SLED transparency source (many state/local govs publish contracts / vendor-payment / checkbook data on a Guest-enabled Tableau Server; a worksheet view exports as CSV at `{host}/t/{site}/views/{workbook}/{view}.csv?:embed=y`, no login/key/cookie). First payload: `mt_contracts_awarded` = **State of Montana (DOA) Contracts Awarded** (~4,554 award records: '$ Awarded', 'Award Date', 'Event Type' (Invitation For Bid / RFP), 'Event#' solicitation number, 'Vendor Name', 'Agency'). Inputs: `view` (the allowlist ENUM — SSRF core, never a free host), `limit`(1..1000)/`offset`. Returns { view, columns:[…], rows:[{col:value…}] } + honest _meta. HONESTY: the CSV is the COMPLETE view export (Tableau returns ALL summary rows — NO server pagination), so totalAvailable = the true row count (NEVER a page length); limit/offset page it client-side; a round-number total is flagged as a possible Tableau export cap. Values are TRIMMED strings (an empty field ⇒ null, never 0/\"\"); the content is preserved — amounts like \"$5,879,590.00\" are FORMATTED STRINGS, parse client-side. A 429/5xx/404/timeout THROWS; a gated/renamed view (200 sign-in HTML or an empty dashboard-container export) ⇒ schema_drift (a loud failure, NEVER a fake empty); a worksheet with a header but 0 data rows ⇒ honest empty. SSRF: fixed allowlist base + hostname assertion + redirect:error.",
5295
+ inputSchema: TableauViewCsvInput,
5296
+ handler: (input) => tableau.viewCsv(input),
5297
+ }),
5298
+ // ─── Socrata Open Expenditures checkbook (curated portal allowlist) — SLED ─
5299
+ // Row-level vendor payments via the keyless /api/checkbook_data.json app-proxy.
5300
+ // First portal: South Dakota — the LAST dark-state closure (presence → 100%).
5301
+ defineTool({
5302
+ name: "open_checkbook_search",
5303
+ description: "Row-level vendor-payment search over a curated US-government **Socrata Open Expenditures** checkbook portal (keyless) — a SLED spending source. Some govs run Socrata's 'Open Expenditures/Open Checkbook' product, whose public dashboard fronts a keyless app-proxy at `{host}/api/checkbook_data.json`. First portal: `sd` = **State of South Dakota Open Checkbook** (~740,980 vendor-payment rows, ~$8.41B, the ~3 most-recent fiscal years). Inputs: `portal` (allowlist ENUM — SSRF core), `year`/`vendor`/`org`/`expenseCategory` (EXACT-match filters), `sortBy`/`sortOrder`, `limit`(1..1000)/`offset`. Returns { portal, rows:[{vendor, amount, payment_date, org1, expense_category, description, fund, invoice, payment_id}] } + honest _meta. HONESTY: totalAvailable = the API's own `count` (the REAL filtered total — matches the product's totals.json, e.g. 740,980 unfiltered / 109,887 for org=TRANSPORTATION — NEVER a page length); `amount` = number|null (a real $0 is 0, an absent value is null, never a fabricated 0); an EXACT-match filter miss ⇒ honest count:0; a deep offset past the end ⇒ returned:0 with the real count preserved; a 429/5xx/timeout THROWS; a non-`{data:[],count}` body ⇒ schema_drift. ★Only the ~3 most-recent fiscal years are exposed (NOT full history — disclosed). ★The underlying Socrata SODA dataset is login-gated and is NEVER touched — only the public app-proxy the dashboard itself uses. SSRF: fixed allowlist host + assertion + redirect:error.",
5304
+ inputSchema: OpenCheckbookSearchInput,
5305
+ handler: (input) => openCheckbook.openCheckbookSearch(input),
5306
+ }),
5259
5307
  // ━━━ GovInfo (api.govinfo.gov) — the api.data.gov keyed trio's 3rd API (3) ━━━ ADR-0010
5260
5308
  // GPO-authoritative bulk publications (BILLS/PLAW/USCODE/CREC/CFR-FR editions/
5261
5309
  // BUDGET/GAOREPORTS) with PDF/XML/MODS downloads + provenance. 2nd consumer of the
@@ -5816,7 +5864,7 @@ const TOOL_SOURCE_LABELS = {
5816
5864
  clinicaltrials: "ClinicalTrials.gov", bls: "BLS", socrata: "Socrata", opengov: "OpenGov",
5817
5865
  nsf: "NSF", nonprofit: "Nonprofit", nhtsa: "NHTSA", gsa: "GSA", grants: "Grants.gov",
5818
5866
  fred: "FRED", fac: "FAC", echo: "EPA ECHO", dol: "DOL", congress: "Congress.gov",
5819
- ckan: "data.gov", bonfire: "Bonfire", arcgis: "ArcGIS", sba: "SBA", ofac: "OFAC",
5867
+ ckan: "data.gov", bonfire: "Bonfire", arcgis: "ArcGIS", tableau: "Tableau", open: "Open Checkbook", sba: "SBA", ofac: "OFAC",
5820
5868
  nws: "NWS", nppes: "NPPES", nist: "NIST", nih: "NIH", lda: "Senate LDA", hts: "USITC HTS",
5821
5869
  bea: "BEA", cbp: "CBP", cpsc: "CPSC", nvd: "NVD", courtlistener: "CourtListener",
5822
5870
  fpds: "FPDS", gao: "GAO", epa: "EPA", nsn: "NSN",