@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/dist/errors.d.ts CHANGED
@@ -41,6 +41,16 @@ export type ToolError = {
41
41
  upstreamStatus?: number;
42
42
  /** Endpoint that failed — for ops. */
43
43
  upstreamEndpoint?: string;
44
+ /**
45
+ * PULL-only feedback loop (feedback.ts). A PREFILLED GitHub new-issue URL, set
46
+ * by the dispatcher ONLY for the two "something may be broken" kinds —
47
+ * `schema_drift` and `upstream_unavailable`. The agent MAY relay it to the
48
+ * human, who opens and submits it; the server NEVER posts. Carries only the
49
+ * tool name, error kind, and server version — no arguments, no PII. Absent on
50
+ * user/expected errors (invalid_input, not_found, rate_limited) so the 429 and
51
+ * bad-input envelopes stay byte-identical.
52
+ */
53
+ report?: string;
44
54
  /**
45
55
  * Set true when the upstream EXPLICITLY asked us to wait — i.e. a 429, or a
46
56
  * 5xx that CARRIED a `Retry-After` header (ADR-0045 M2). The resilience layer
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,MAAM,MAAM,SAAS;AACnB,iDAAiD;AAC/C,cAAc;AAChB,mDAAmD;GACjD,sBAAsB;AACxB,6CAA6C;GAC3C,WAAW;AACb,sEAAsE;GACpE,eAAe;AACjB,oEAAoE;GAClE,cAAc;AAChB,kCAAkC;GAChC,SAAS,CAAC;AAEd,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,SAAS,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,IACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GACrB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAIpC,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;gBAClB,SAAS,EAAE,SAAS;CAKjC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,QAAQ,EACX,QAAQ,EAAE,MAAM,GACf,SAAS,CA6DX;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAKvD;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,QAAQ,CAAC,CA0EnB;AAcD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CA0CzE"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAIH,MAAM,MAAM,SAAS;AACnB,iDAAiD;AAC/C,cAAc;AAChB,mDAAmD;GACjD,sBAAsB;AACxB,6CAA6C;GAC3C,WAAW;AACb,sEAAsE;GACpE,eAAe;AACjB,oEAAoE;GAClE,cAAc;AAChB,kCAAkC;GAChC,SAAS,CAAC;AAEd,MAAM,MAAM,SAAS,GAAG;IACtB,IAAI,EAAE,SAAS,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,oEAAoE;IACpE,SAAS,EAAE,OAAO,CAAC;IACnB,wEAAwE;IACxE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,8DAA8D;IAC9D,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sCAAsC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;;;;;;OAQG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;;;;;;;;;OAWG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,IACpB;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,CAAC,CAAA;CAAE,GACrB;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,SAAS,CAAA;CAAE,CAAC;AAIpC,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;gBAClB,SAAS,EAAE,SAAS;CAKjC;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,CAAC,EAAE,QAAQ,EACX,QAAQ,EAAE,MAAM,GACf,SAAS,CA6DX;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAKvD;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,WAAW,EACjB,aAAa,EAAE,MAAM,GACpB,OAAO,CAAC,QAAQ,CAAC,CA0EnB;AAcD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,EAAE,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CA0CzE"}
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * feedback.ts — the in-product feedback → GitHub-issue loop (KEYLESS, PULL-only).
3
+ *
4
+ * Why this exists
5
+ * ----------------
6
+ * This server's "user" is an AI agent, not a human at a keyboard. So the way we
7
+ * collect "this looked wrong / this is broken / I wish it could do X" from real
8
+ * usage is THROUGH the agent: a tool (or an error envelope) hands the agent a
9
+ * PREFILLED GitHub "new issue" URL, and the agent offers it to the human, who
10
+ * opens and submits it.
11
+ *
12
+ * Hard guarantees (consistent with the server's keyless / honest / no-telemetry
13
+ * posture — and with the rule never to submit a form on the user's behalf):
14
+ * • PULL only. The server NEVER posts to GitHub. It builds a link; the human
15
+ * clicks and submits. No token, no account, no auto-submit, no network call.
16
+ * • No PII. A prefill carries only the tool name, server version, and (for the
17
+ * `feedback` tool) a caller-supplied one-line summary. It NEVER embeds the
18
+ * user's tool arguments or the upstream response, and every prefill body
19
+ * tells the human to redact anything sensitive before submitting.
20
+ * • Non-nagging. Error links are attached only to the two "something may be
21
+ * broken" kinds (schema_drift, upstream_unavailable) — never to expected
22
+ * outcomes (not_found, invalid_input, rate_limited).
23
+ */
24
+ export declare const REPO_URL = "https://github.com/cliwant/mcp-sam-gov";
25
+ export type FeedbackKind = "bug" | "feature" | "wrong_output";
26
+ /**
27
+ * The prefilled report link attached to a schema_drift / upstream_unavailable
28
+ * error envelope. Carries ONLY tool + kind + server version — no args, no PII.
29
+ */
30
+ export declare function reportUrlForError(tool: string, kind: string, version: string): string;
31
+ /**
32
+ * The ONLY two error kinds that get a prefilled report link — the "something may
33
+ * be broken on our side" kinds. Expected/user errors (invalid_input, not_found,
34
+ * rate_limited) are deliberately excluded so their envelopes stay byte-identical.
35
+ */
36
+ export declare const REPORTABLE_ERROR_KINDS: ReadonlySet<string>;
37
+ /**
38
+ * Attach a prefilled `report` URL to an error envelope IN PLACE, but only for a
39
+ * reportable kind. A no-op (envelope unchanged) for every other kind. Centralizes
40
+ * the policy so the dispatcher and the tests agree on exactly which kinds report.
41
+ */
42
+ export declare function maybeAttachReport(error: {
43
+ kind: string;
44
+ report?: string;
45
+ }, tool: string, version: string): void;
46
+ export type FeedbackResult = {
47
+ reportUrl: string;
48
+ repo: string;
49
+ willPost: false;
50
+ instructions: string;
51
+ privacy: string;
52
+ };
53
+ /**
54
+ * The `feedback` tool handler. Turns a caller's (agent's) bug/feature/wrong-output
55
+ * report into a PREFILLED GitHub new-issue URL for the HUMAN to open and submit.
56
+ * Pure + keyless: no network, no posting. `summary` is caller-supplied free text
57
+ * and is trusted to be non-sensitive (the description + privacy note say so).
58
+ */
59
+ export declare function feedbackTool(input: {
60
+ kind?: FeedbackKind;
61
+ tool?: string;
62
+ summary?: string;
63
+ }): FeedbackResult;
64
+ //# sourceMappingURL=feedback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.d.ts","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,eAAO,MAAM,QAAQ,2CAA2C,CAAC;AAGjE,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,SAAS,GAAG,cAAc,CAAC;AAkB9D;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAsBrF;AAED;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,EAAE,WAAW,CAAC,MAAM,CAGrD,CAAC;AAEH;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,EACxC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,GACd,IAAI,CAIN;AAaD,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,KAAK,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE;IAClC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,GAAG,cAAc,CAgCjB"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * feedback.ts — the in-product feedback → GitHub-issue loop (KEYLESS, PULL-only).
3
+ *
4
+ * Why this exists
5
+ * ----------------
6
+ * This server's "user" is an AI agent, not a human at a keyboard. So the way we
7
+ * collect "this looked wrong / this is broken / I wish it could do X" from real
8
+ * usage is THROUGH the agent: a tool (or an error envelope) hands the agent a
9
+ * PREFILLED GitHub "new issue" URL, and the agent offers it to the human, who
10
+ * opens and submits it.
11
+ *
12
+ * Hard guarantees (consistent with the server's keyless / honest / no-telemetry
13
+ * posture — and with the rule never to submit a form on the user's behalf):
14
+ * • PULL only. The server NEVER posts to GitHub. It builds a link; the human
15
+ * clicks and submits. No token, no account, no auto-submit, no network call.
16
+ * • No PII. A prefill carries only the tool name, server version, and (for the
17
+ * `feedback` tool) a caller-supplied one-line summary. It NEVER embeds the
18
+ * user's tool arguments or the upstream response, and every prefill body
19
+ * tells the human to redact anything sensitive before submitting.
20
+ * • Non-nagging. Error links are attached only to the two "something may be
21
+ * broken" kinds (schema_drift, upstream_unavailable) — never to expected
22
+ * outcomes (not_found, invalid_input, rate_limited).
23
+ */
24
+ export const REPO_URL = "https://github.com/cliwant/mcp-sam-gov";
25
+ const NEW_ISSUE_URL = `${REPO_URL}/issues/new`;
26
+ const REDACT_NOTE = "⚠️ This is a PUBLIC issue. Do NOT paste API keys, credentials, personal data, or sensitive query values — redact anything private before you submit.";
27
+ /**
28
+ * Build a GitHub "new issue" URL with a prefilled title/body/labels. Everything
29
+ * is URL-encoded via URLSearchParams. A prefilled label that does not exist in
30
+ * the repo is simply ignored by GitHub (the issue still opens) — never an error.
31
+ */
32
+ function buildIssueUrl(params) {
33
+ const q = new URLSearchParams();
34
+ q.set("title", params.title);
35
+ q.set("body", params.body);
36
+ if (params.labels.length > 0)
37
+ q.set("labels", params.labels.join(","));
38
+ return `${NEW_ISSUE_URL}?${q.toString()}`;
39
+ }
40
+ /**
41
+ * The prefilled report link attached to a schema_drift / upstream_unavailable
42
+ * error envelope. Carries ONLY tool + kind + server version — no args, no PII.
43
+ */
44
+ export function reportUrlForError(tool, kind, version) {
45
+ const title = `[${tool}] ${kind}`;
46
+ const kindHint = kind === "schema_drift"
47
+ ? "schema_drift means the government API very likely changed its response shape, so the wrapper needs updating — this is the single most useful thing to report."
48
+ : "upstream_unavailable is often a transient government-side outage; please report only if it PERSISTS or the endpoint appears to have permanently moved.";
49
+ const body = [
50
+ "**Reporting a tool problem** (this link was suggested by the server).",
51
+ "",
52
+ `- **Tool:** \`${tool}\``,
53
+ `- **Error kind:** \`${kind}\``,
54
+ `- **Server version:** \`${version}\``,
55
+ "",
56
+ "**What I was trying to do:** _(describe — no sensitive values)_",
57
+ "",
58
+ "**Why it looks wrong / how often it happens:** _(describe)_",
59
+ "",
60
+ `_${kindHint}_`,
61
+ "",
62
+ REDACT_NOTE,
63
+ ].join("\n");
64
+ return buildIssueUrl({ title, body, labels: ["from-tool"] });
65
+ }
66
+ /**
67
+ * The ONLY two error kinds that get a prefilled report link — the "something may
68
+ * be broken on our side" kinds. Expected/user errors (invalid_input, not_found,
69
+ * rate_limited) are deliberately excluded so their envelopes stay byte-identical.
70
+ */
71
+ export const REPORTABLE_ERROR_KINDS = new Set([
72
+ "schema_drift",
73
+ "upstream_unavailable",
74
+ ]);
75
+ /**
76
+ * Attach a prefilled `report` URL to an error envelope IN PLACE, but only for a
77
+ * reportable kind. A no-op (envelope unchanged) for every other kind. Centralizes
78
+ * the policy so the dispatcher and the tests agree on exactly which kinds report.
79
+ */
80
+ export function maybeAttachReport(error, tool, version) {
81
+ if (REPORTABLE_ERROR_KINDS.has(error.kind)) {
82
+ error.report = reportUrlForError(tool, error.kind, version);
83
+ }
84
+ }
85
+ const KIND_TITLE = {
86
+ bug: "Bug",
87
+ feature: "Feature request",
88
+ wrong_output: "Tool returned a wrong-looking result",
89
+ };
90
+ const KIND_LABELS = {
91
+ bug: ["bug"],
92
+ feature: ["enhancement"],
93
+ wrong_output: ["bug", "wrong-output"],
94
+ };
95
+ /**
96
+ * The `feedback` tool handler. Turns a caller's (agent's) bug/feature/wrong-output
97
+ * report into a PREFILLED GitHub new-issue URL for the HUMAN to open and submit.
98
+ * Pure + keyless: no network, no posting. `summary` is caller-supplied free text
99
+ * and is trusted to be non-sensitive (the description + privacy note say so).
100
+ */
101
+ export function feedbackTool(input) {
102
+ const kind = input.kind ?? "bug";
103
+ const toolPart = input.tool ? `[${input.tool}] ` : "";
104
+ const summary = (input.summary ?? "").trim();
105
+ const title = `${toolPart}${KIND_TITLE[kind]}${summary ? `: ${summary}` : ""}`;
106
+ const lead = kind === "feature"
107
+ ? "**What I want to be able to do:**"
108
+ : "**What I did, expected, and got:**";
109
+ const body = [
110
+ `**Type:** ${KIND_TITLE[kind]}`,
111
+ input.tool ? `**Tool:** \`${input.tool}\`` : "",
112
+ "",
113
+ `${lead} ${summary || "_(describe)_"}`,
114
+ "",
115
+ kind === "feature"
116
+ ? "**Why it matters / use case:** _(describe)_"
117
+ : "**Steps to reproduce:** _(describe — no sensitive values)_",
118
+ "",
119
+ REDACT_NOTE,
120
+ ]
121
+ .filter((line, i) => !(line === "" && i === 2 && !input.tool))
122
+ .join("\n");
123
+ return {
124
+ reportUrl: buildIssueUrl({ title, body, labels: KIND_LABELS[kind] }),
125
+ repo: REPO_URL,
126
+ willPost: false,
127
+ instructions: "Open reportUrl in a browser and submit the issue yourself — the server does NOT post anything automatically. Edit the prefilled title/body first if you like.",
128
+ privacy: "The link prefills only your summary + tool name — no API keys, query values, or personal data. Keep it that way; the issue is public.",
129
+ };
130
+ }
131
+ //# sourceMappingURL=feedback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"feedback.js","sourceRoot":"","sources":["../src/feedback.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;AAm5I5B,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,EAivD1B,CAAC;AAmKF,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"}
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;AA66I5B,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,EA6vD1B,CAAC;AAkLF,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"}
package/dist/server.js CHANGED
@@ -78,13 +78,15 @@ import * as cbpBorder from "./cbp-border.js";
78
78
  import { fetchAttachmentText } from "./attachments.js";
79
79
  import * as keys from "./keys.js";
80
80
  import { toToolError, ToolErrorCarrier, errorFromResponse } from "./errors.js";
81
+ import * as feedback from "./feedback.js";
82
+ import { checkForUpdate } from "./update-check.js";
81
83
  import { buildMeta, isMetaBundle, withMeta, } from "./meta.js";
82
84
  import { pathToFileURL, fileURLToPath } from "node:url";
83
85
  import { realpathSync } from "node:fs";
84
86
  const SERVER_NAME = "mcp-sam-gov";
85
87
  // Kept in lockstep with package.json / manifest.json / server.json.
86
88
  // Keep in sync with package.json "version" (asserted at release; see CHANGELOG).
87
- const SERVER_VERSION = "1.5.0";
89
+ const SERVER_VERSION = "1.7.0";
88
90
  // ─── Tool input schemas (Zod) ────────────────────────────────────
89
91
  const SamSearchInput = z.object({
90
92
  query: z.string().optional().describe("Free-text title query"),
@@ -3785,6 +3787,25 @@ const NonprofitFinancialsInput = z.object({
3785
3787
  });
3786
3788
  // api_key_status takes no input — it is a pure status query over process.env.
3787
3789
  const ApiKeyStatusInput = z.object({});
3790
+ // `feedback` builds a PREFILLED GitHub issue URL for the human to submit (PULL —
3791
+ // the server never posts). All inputs optional; `summary` is a short, NON-sensitive
3792
+ // title line (the issue is public — the description + return value say so).
3793
+ const FeedbackInput = z.object({
3794
+ kind: z
3795
+ .enum(["bug", "feature", "wrong_output"])
3796
+ .optional()
3797
+ .describe("What kind of report: bug (default), feature (a capability this server lacks), or wrong_output (a tool returned a wrong/suspicious result)."),
3798
+ tool: z
3799
+ .string()
3800
+ .max(80)
3801
+ .optional()
3802
+ .describe("The tool name this is about, if any (e.g. 'sam_search_opportunities')."),
3803
+ summary: z
3804
+ .string()
3805
+ .max(500)
3806
+ .optional()
3807
+ .describe("A short one-line summary for the issue title/body. PUBLIC — never include API keys, personal data, or sensitive query values."),
3808
+ });
3788
3809
  // Build a ToolDef whose `handler` is type-checked against the schema's inferred
3789
3810
  // input `I` at the call site (e.g. `input.searchText` is known-present). The
3790
3811
  // `I` binding is erased to `any` in the ToolDef[] array, so entries without a
@@ -5362,6 +5383,17 @@ export const TOOLS = [
5362
5383
  inputSchema: ApiKeyStatusInput,
5363
5384
  handler: async () => keys.apiKeyStatus(),
5364
5385
  }),
5386
+ // ━━━ Meta: in-product feedback → GitHub issue (PULL-only, keyless) ━━━
5387
+ // The server's "user" is an AI agent, so we collect real-usage friction THROUGH
5388
+ // it: this returns a PREFILLED GitHub new-issue URL for the HUMAN to open and
5389
+ // submit. The server NEVER posts (no token/account/auto-submit) and embeds no
5390
+ // PII — only the caller's summary + tool name. See feedback.ts.
5391
+ defineTool({
5392
+ name: "feedback",
5393
+ description: "Report a problem, request a feature, or flag a wrong-looking result for THIS server — returns a PREFILLED GitHub issue link (public repo cliwant/mcp-sam-gov) for the USER to open and submit. KEYLESS. The server does NOT post anything: it only builds the link; the human submits it (nothing is sent automatically, no network call). Use when the user reports a bug, says a tool's output looks wrong, or wants a capability this server doesn't have. Input (all optional): `kind` (bug|feature|wrong_output, default bug), `tool` (the tool it's about), `summary` (a short, NON-SENSITIVE title line). Returns { reportUrl, repo, willPost:false, instructions, privacy }. PRIVACY: never put secrets, personal data, or sensitive query values in `summary` — the issue is PUBLIC and the link prefills only your summary + tool + server version.",
5394
+ inputSchema: FeedbackInput,
5395
+ handler: async (input) => feedback.feedbackTool(input),
5396
+ }),
5365
5397
  ];
5366
5398
  // ─── Server bootstrap ────────────────────────────────────────────
5367
5399
  async function main() {
@@ -5382,7 +5414,12 @@ async function main() {
5382
5414
  },
5383
5415
  },
5384
5416
  });
5385
- const server = new Server({ name: SERVER_NAME, version: SERVER_VERSION }, { capabilities: { tools: {} } });
5417
+ const server = new Server({ name: SERVER_NAME, version: SERVER_VERSION }, {
5418
+ capabilities: { tools: {} },
5419
+ // Surfaced to the agent at initialize. Tells it how to route real-usage
5420
+ // friction back to the project WITHOUT the server ever posting anything.
5421
+ instructions: "This server wraps US government open data (keyless-first). If a tool result looks wrong, a tool stays broken, or the user wants a capability this server lacks, help improve it: call the `feedback` tool — or use the `report` URL present on schema_drift / upstream_unavailable errors — to get a PREFILLED GitHub issue link, and offer it to the user to open and submit. Nothing is posted automatically; the user submits. Never include secrets or personal data in a report (the repo is public).",
5422
+ });
5386
5423
  server.setRequestHandler(ListToolsRequestSchema, async () => {
5387
5424
  return {
5388
5425
  tools: TOOLS.map((t) => ({
@@ -5421,6 +5458,12 @@ async function main() {
5421
5458
  // NON-retryable `invalid_input` with readable field-level issues — never a
5422
5459
  // generic `unknown` carrying Zod's raw JSON dump.
5423
5460
  const error = toToolError(err, name);
5461
+ // PULL-only feedback loop (feedback.ts): attach a PREFILLED GitHub issue URL
5462
+ // ONLY for the two "something may be broken" kinds — schema_drift (the
5463
+ // upstream changed shape) and upstream_unavailable (a possible moved/broken
5464
+ // endpoint). Carries only tool + kind + version (no args/PII). The 429 and
5465
+ // invalid_input/not_found envelopes stay byte-identical (no `report`).
5466
+ feedback.maybeAttachReport(error, name, SERVER_VERSION);
5424
5467
  const envelope = { ok: false, error };
5425
5468
  return {
5426
5469
  content: [
@@ -5433,6 +5476,9 @@ async function main() {
5433
5476
  const transport = new StdioServerTransport();
5434
5477
  await server.connect(transport);
5435
5478
  console.error(`[mcp-sam-gov] v${SERVER_VERSION} listening on stdio (${TOOLS.length} tools).`);
5479
+ // Fire-and-forget, opt-out, fail-silent update notice (STDERR only, never stdout).
5480
+ // Deliberately NOT awaited: it must never delay or affect the server (update-check.ts).
5481
+ void checkForUpdate(SERVER_VERSION);
5436
5482
  }
5437
5483
  /**
5438
5484
  * Minimal truthful `_meta` for handlers that don't attach their own.