@frihet/mcp-server 1.16.3 → 1.16.4

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 (203) hide show
  1. package/README.md +1 -1
  2. package/dist/openai-profile.js +1 -1
  3. package/package.json +7 -4
  4. package/scripts/postinstall.js +30 -8
  5. package/dist/__tests__/audit-server-version.test.d.ts +0 -13
  6. package/dist/__tests__/audit-server-version.test.d.ts.map +0 -1
  7. package/dist/__tests__/audit-server-version.test.js +0 -96
  8. package/dist/__tests__/audit-server-version.test.js.map +0 -1
  9. package/dist/__tests__/banking-client-contract.test.d.ts +0 -20
  10. package/dist/__tests__/banking-client-contract.test.d.ts.map +0 -1
  11. package/dist/__tests__/banking-client-contract.test.js +0 -133
  12. package/dist/__tests__/banking-client-contract.test.js.map +0 -1
  13. package/dist/__tests__/banking-tools.test.d.ts +0 -18
  14. package/dist/__tests__/banking-tools.test.d.ts.map +0 -1
  15. package/dist/__tests__/banking-tools.test.js +0 -252
  16. package/dist/__tests__/banking-tools.test.js.map +0 -1
  17. package/dist/__tests__/contract.test.d.ts +0 -33
  18. package/dist/__tests__/contract.test.d.ts.map +0 -1
  19. package/dist/__tests__/contract.test.js +0 -208
  20. package/dist/__tests__/contract.test.js.map +0 -1
  21. package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.d.ts +0 -13
  22. package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.d.ts.map +0 -1
  23. package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js +0 -420
  24. package/dist/__tests__/d4b-hr-payroll-onboarding-tools.test.js.map +0 -1
  25. package/dist/__tests__/demo-mode.test.d.ts +0 -11
  26. package/dist/__tests__/demo-mode.test.d.ts.map +0 -1
  27. package/dist/__tests__/demo-mode.test.js +0 -119
  28. package/dist/__tests__/demo-mode.test.js.map +0 -1
  29. package/dist/__tests__/einvoice-day4-tools.test.d.ts +0 -16
  30. package/dist/__tests__/einvoice-day4-tools.test.d.ts.map +0 -1
  31. package/dist/__tests__/einvoice-day4-tools.test.js +0 -421
  32. package/dist/__tests__/einvoice-day4-tools.test.js.map +0 -1
  33. package/dist/__tests__/einvoice-integration.test.d.ts +0 -24
  34. package/dist/__tests__/einvoice-integration.test.d.ts.map +0 -1
  35. package/dist/__tests__/einvoice-integration.test.js +0 -142
  36. package/dist/__tests__/einvoice-integration.test.js.map +0 -1
  37. package/dist/__tests__/einvoice-tools.test.d.ts +0 -16
  38. package/dist/__tests__/einvoice-tools.test.d.ts.map +0 -1
  39. package/dist/__tests__/einvoice-tools.test.js +0 -411
  40. package/dist/__tests__/einvoice-tools.test.js.map +0 -1
  41. package/dist/__tests__/fiscal-tools.test.d.ts +0 -21
  42. package/dist/__tests__/fiscal-tools.test.d.ts.map +0 -1
  43. package/dist/__tests__/fiscal-tools.test.js +0 -271
  44. package/dist/__tests__/fiscal-tools.test.js.map +0 -1
  45. package/dist/__tests__/get-envelope-unwrap-regression.test.d.ts +0 -27
  46. package/dist/__tests__/get-envelope-unwrap-regression.test.d.ts.map +0 -1
  47. package/dist/__tests__/get-envelope-unwrap-regression.test.js +0 -223
  48. package/dist/__tests__/get-envelope-unwrap-regression.test.js.map +0 -1
  49. package/dist/__tests__/intelligence-duplicate-invoice.test.d.ts +0 -14
  50. package/dist/__tests__/intelligence-duplicate-invoice.test.d.ts.map +0 -1
  51. package/dist/__tests__/intelligence-duplicate-invoice.test.js +0 -108
  52. package/dist/__tests__/intelligence-duplicate-invoice.test.js.map +0 -1
  53. package/dist/__tests__/kitchen-tools.test.d.ts +0 -18
  54. package/dist/__tests__/kitchen-tools.test.d.ts.map +0 -1
  55. package/dist/__tests__/kitchen-tools.test.js +0 -399
  56. package/dist/__tests__/kitchen-tools.test.js.map +0 -1
  57. package/dist/__tests__/mutation-unwrap-and-schema-regression.test.d.ts +0 -30
  58. package/dist/__tests__/mutation-unwrap-and-schema-regression.test.d.ts.map +0 -1
  59. package/dist/__tests__/mutation-unwrap-and-schema-regression.test.js +0 -164
  60. package/dist/__tests__/mutation-unwrap-and-schema-regression.test.js.map +0 -1
  61. package/dist/__tests__/observability-redaction.test.d.ts +0 -13
  62. package/dist/__tests__/observability-redaction.test.d.ts.map +0 -1
  63. package/dist/__tests__/observability-redaction.test.js +0 -94
  64. package/dist/__tests__/observability-redaction.test.js.map +0 -1
  65. package/dist/__tests__/openai-grouped-compose.test.d.ts +0 -26
  66. package/dist/__tests__/openai-grouped-compose.test.d.ts.map +0 -1
  67. package/dist/__tests__/openai-grouped-compose.test.js +0 -245
  68. package/dist/__tests__/openai-grouped-compose.test.js.map +0 -1
  69. package/dist/__tests__/openai-profile.test.d.ts +0 -10
  70. package/dist/__tests__/openai-profile.test.d.ts.map +0 -1
  71. package/dist/__tests__/openai-profile.test.js +0 -168
  72. package/dist/__tests__/openai-profile.test.js.map +0 -1
  73. package/dist/__tests__/pagination-cursor-param.test.d.ts +0 -27
  74. package/dist/__tests__/pagination-cursor-param.test.d.ts.map +0 -1
  75. package/dist/__tests__/pagination-cursor-param.test.js +0 -96
  76. package/dist/__tests__/pagination-cursor-param.test.js.map +0 -1
  77. package/dist/__tests__/pos-tools.test.d.ts +0 -16
  78. package/dist/__tests__/pos-tools.test.d.ts.map +0 -1
  79. package/dist/__tests__/pos-tools.test.js +0 -244
  80. package/dist/__tests__/pos-tools.test.js.map +0 -1
  81. package/dist/__tests__/recurring-tools.test.d.ts +0 -23
  82. package/dist/__tests__/recurring-tools.test.d.ts.map +0 -1
  83. package/dist/__tests__/recurring-tools.test.js +0 -352
  84. package/dist/__tests__/recurring-tools.test.js.map +0 -1
  85. package/dist/__tests__/schema-envelope-guard.test.d.ts +0 -18
  86. package/dist/__tests__/schema-envelope-guard.test.d.ts.map +0 -1
  87. package/dist/__tests__/schema-envelope-guard.test.js +0 -56
  88. package/dist/__tests__/schema-envelope-guard.test.js.map +0 -1
  89. package/dist/__tests__/stay-tools.test.d.ts +0 -17
  90. package/dist/__tests__/stay-tools.test.d.ts.map +0 -1
  91. package/dist/__tests__/stay-tools.test.js +0 -259
  92. package/dist/__tests__/stay-tools.test.js.map +0 -1
  93. package/dist/__tests__/team-tools.test.d.ts +0 -18
  94. package/dist/__tests__/team-tools.test.d.ts.map +0 -1
  95. package/dist/__tests__/team-tools.test.js +0 -228
  96. package/dist/__tests__/team-tools.test.js.map +0 -1
  97. package/dist/__tests__/time-tools.test.d.ts +0 -19
  98. package/dist/__tests__/time-tools.test.d.ts.map +0 -1
  99. package/dist/__tests__/time-tools.test.js +0 -286
  100. package/dist/__tests__/time-tools.test.js.map +0 -1
  101. package/dist/__tests__/tool-exposure.test.d.ts +0 -11
  102. package/dist/__tests__/tool-exposure.test.d.ts.map +0 -1
  103. package/dist/__tests__/tool-exposure.test.js +0 -264
  104. package/dist/__tests__/tool-exposure.test.js.map +0 -1
  105. package/dist/client-interface.d.ts.map +0 -1
  106. package/dist/client-interface.js.map +0 -1
  107. package/dist/client.d.ts.map +0 -1
  108. package/dist/client.js.map +0 -1
  109. package/dist/demo-client.d.ts.map +0 -1
  110. package/dist/demo-client.js.map +0 -1
  111. package/dist/demo-fixtures.d.ts.map +0 -1
  112. package/dist/demo-fixtures.js.map +0 -1
  113. package/dist/index.d.ts.map +0 -1
  114. package/dist/index.js.map +0 -1
  115. package/dist/logger.d.ts.map +0 -1
  116. package/dist/logger.js.map +0 -1
  117. package/dist/metrics.d.ts.map +0 -1
  118. package/dist/metrics.js.map +0 -1
  119. package/dist/observability.d.ts.map +0 -1
  120. package/dist/observability.js.map +0 -1
  121. package/dist/openai-profile.d.ts.map +0 -1
  122. package/dist/openai-profile.js.map +0 -1
  123. package/dist/prompts/register-all.d.ts.map +0 -1
  124. package/dist/prompts/register-all.js.map +0 -1
  125. package/dist/redaction.d.ts.map +0 -1
  126. package/dist/redaction.js.map +0 -1
  127. package/dist/resources/register-all.d.ts.map +0 -1
  128. package/dist/resources/register-all.js.map +0 -1
  129. package/dist/tool-exposure.d.ts.map +0 -1
  130. package/dist/tool-exposure.js.map +0 -1
  131. package/dist/tools/accountingClose.d.ts.map +0 -1
  132. package/dist/tools/accountingClose.js.map +0 -1
  133. package/dist/tools/audit_gl.d.ts.map +0 -1
  134. package/dist/tools/audit_gl.js.map +0 -1
  135. package/dist/tools/backend-availability.d.ts.map +0 -1
  136. package/dist/tools/backend-availability.js.map +0 -1
  137. package/dist/tools/bank_rules.d.ts.map +0 -1
  138. package/dist/tools/bank_rules.js.map +0 -1
  139. package/dist/tools/banking.d.ts.map +0 -1
  140. package/dist/tools/banking.js.map +0 -1
  141. package/dist/tools/clients.d.ts.map +0 -1
  142. package/dist/tools/clients.js.map +0 -1
  143. package/dist/tools/crm.d.ts.map +0 -1
  144. package/dist/tools/crm.js.map +0 -1
  145. package/dist/tools/deposits.d.ts.map +0 -1
  146. package/dist/tools/deposits.js.map +0 -1
  147. package/dist/tools/einvoice.d.ts.map +0 -1
  148. package/dist/tools/einvoice.js.map +0 -1
  149. package/dist/tools/expenses.d.ts.map +0 -1
  150. package/dist/tools/expenses.js.map +0 -1
  151. package/dist/tools/fiscal.d.ts.map +0 -1
  152. package/dist/tools/fiscal.js.map +0 -1
  153. package/dist/tools/gestoria.d.ts.map +0 -1
  154. package/dist/tools/gestoria.js.map +0 -1
  155. package/dist/tools/hr.d.ts.map +0 -1
  156. package/dist/tools/hr.js.map +0 -1
  157. package/dist/tools/igic.d.ts.map +0 -1
  158. package/dist/tools/igic.js.map +0 -1
  159. package/dist/tools/impuesto_sociedades.d.ts.map +0 -1
  160. package/dist/tools/impuesto_sociedades.js.map +0 -1
  161. package/dist/tools/intelligence.d.ts.map +0 -1
  162. package/dist/tools/intelligence.js.map +0 -1
  163. package/dist/tools/invoices.d.ts.map +0 -1
  164. package/dist/tools/invoices.js.map +0 -1
  165. package/dist/tools/kitchen.d.ts.map +0 -1
  166. package/dist/tools/kitchen.js.map +0 -1
  167. package/dist/tools/onboard_vies.d.ts.map +0 -1
  168. package/dist/tools/onboard_vies.js.map +0 -1
  169. package/dist/tools/onboarding.d.ts.map +0 -1
  170. package/dist/tools/onboarding.js.map +0 -1
  171. package/dist/tools/payroll.d.ts.map +0 -1
  172. package/dist/tools/payroll.js.map +0 -1
  173. package/dist/tools/permissions.d.ts.map +0 -1
  174. package/dist/tools/permissions.js.map +0 -1
  175. package/dist/tools/portal_domain.d.ts.map +0 -1
  176. package/dist/tools/portal_domain.js.map +0 -1
  177. package/dist/tools/pos.d.ts.map +0 -1
  178. package/dist/tools/pos.js.map +0 -1
  179. package/dist/tools/products.d.ts.map +0 -1
  180. package/dist/tools/products.js.map +0 -1
  181. package/dist/tools/quotes.d.ts.map +0 -1
  182. package/dist/tools/quotes.js.map +0 -1
  183. package/dist/tools/recurring.d.ts.map +0 -1
  184. package/dist/tools/recurring.js.map +0 -1
  185. package/dist/tools/register-all.d.ts.map +0 -1
  186. package/dist/tools/register-all.js.map +0 -1
  187. package/dist/tools/shared.d.ts.map +0 -1
  188. package/dist/tools/shared.js.map +0 -1
  189. package/dist/tools/stay.d.ts.map +0 -1
  190. package/dist/tools/stay.js.map +0 -1
  191. package/dist/tools/team.d.ts.map +0 -1
  192. package/dist/tools/team.js.map +0 -1
  193. package/dist/tools/time.d.ts.map +0 -1
  194. package/dist/tools/time.js.map +0 -1
  195. package/dist/tools/vendors.d.ts.map +0 -1
  196. package/dist/tools/vendors.js.map +0 -1
  197. package/dist/tools/webhooks.d.ts.map +0 -1
  198. package/dist/tools/webhooks.js.map +0 -1
  199. package/dist/types.d.ts.map +0 -1
  200. package/dist/types.js.map +0 -1
  201. package/scripts/audit-mcp-refs.mjs +0 -402
  202. package/scripts/no-public-leak.sh +0 -60
  203. package/scripts/test-openai-grouped-compose.mjs +0 -173
@@ -1,16 +0,0 @@
1
- /**
2
- * Tests for e-invoice MCP tools — wired to api.frihet.io with 404-fallback stubs.
3
- *
4
- * Uses Node.js built-in test runner (node:test + node:assert) — no extra deps.
5
- * Run: node --experimental-strip-types --test src/__tests__/einvoice-tools.test.ts
6
- * Or via: npm test (after build: node --test dist/__tests__/einvoice-tools.test.js)
7
- *
8
- * Coverage:
9
- * 1. Tool registration — all original 4 tools registered on McpServer (plus 6 Day 4 = 10 total)
10
- * 2. 404-fallback path — when CF endpoint returns 404, stub fallback fires
11
- * 3. Success path — when CF endpoint returns real data, it is passed through
12
- * 4. Stub response shape — matches declared outputSchema (via fallback)
13
- * 5. Langfuse wrapper confirmed invoked via traceMCPTool patch
14
- */
15
- export {};
16
- //# sourceMappingURL=einvoice-tools.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"einvoice-tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/einvoice-tools.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
@@ -1,411 +0,0 @@
1
- /**
2
- * Tests for e-invoice MCP tools — wired to api.frihet.io with 404-fallback stubs.
3
- *
4
- * Uses Node.js built-in test runner (node:test + node:assert) — no extra deps.
5
- * Run: node --experimental-strip-types --test src/__tests__/einvoice-tools.test.ts
6
- * Or via: npm test (after build: node --test dist/__tests__/einvoice-tools.test.js)
7
- *
8
- * Coverage:
9
- * 1. Tool registration — all original 4 tools registered on McpServer (plus 6 Day 4 = 10 total)
10
- * 2. 404-fallback path — when CF endpoint returns 404, stub fallback fires
11
- * 3. Success path — when CF endpoint returns real data, it is passed through
12
- * 4. Stub response shape — matches declared outputSchema (via fallback)
13
- * 5. Langfuse wrapper confirmed invoked via traceMCPTool patch
14
- */
15
- import { test, describe, beforeEach } from "node:test";
16
- import assert from "node:assert/strict";
17
- class StubMcpServer {
18
- tools = new Map();
19
- registerTool(name, config, handler) {
20
- this.tools.set(name, { name, config, handler });
21
- }
22
- }
23
- // ── Client stubs ─────────────────────────────────────────────────────────────
24
- /** Simulates CF endpoint not yet deployed (returns 404). */
25
- function make404Client() {
26
- const notFound = () => {
27
- const err = Object.assign(new Error("Not Found"), { statusCode: 404, errorCode: "not_found" });
28
- return Promise.reject(err);
29
- };
30
- return {
31
- sendEInvoice: notFound,
32
- getEInvoiceStatus: notFound,
33
- validateEInvoiceXml: notFound,
34
- exportDatev: notFound,
35
- };
36
- }
37
- /** Simulates CF endpoint live and returning real data. */
38
- function makeLiveClient() {
39
- return {
40
- sendEInvoice: async () => ({
41
- workflowRunId: "wfr_live_abc123",
42
- status: "queued",
43
- estimatedCompletionSec: 12,
44
- }),
45
- getEInvoiceStatus: async () => ({
46
- status: "succeeded",
47
- step: "dispatch_complete",
48
- ackId: "ack_live_xyz",
49
- xmlUrl: "https://storage.frihet.io/live/wfr_live_abc123.xml",
50
- }),
51
- validateEInvoiceXml: async () => ({
52
- valid: true,
53
- errors: [],
54
- validator: "kosit",
55
- durationMs: 87,
56
- }),
57
- exportDatev: async () => ({
58
- fileUrl: "https://storage.frihet.io/live/datev/EXTF_Buchungsstapel_2026-01.csv",
59
- filename: "EXTF_Buchungsstapel_2026-01.csv",
60
- rowCount: 42,
61
- fiscalPeriod: "2026-01",
62
- encoding: "cp1252",
63
- }),
64
- };
65
- }
66
- // ── Langfuse trace tracker ───────────────────────────────────────────────────
67
- let langfuseCallCount = 0;
68
- // Mock traceMCPTool — we can't easily module-mock in node:test without extra tooling,
69
- // so instead we verify indirectly via withToolLogging which is the real instrumentation
70
- // wrapper. The global patchServerWithTracing wraps registerTool with traceMCPTool,
71
- // confirmed by checking the patched server in the integration test below.
72
- // ── Imports ──────────────────────────────────────────────────────────────────
73
- // Import after stubs so we can pass the stub server
74
- // We test the registration function directly with a stub server.
75
- describe("E-Invoice Tools — Registration", () => {
76
- let server;
77
- beforeEach(async () => {
78
- server = new StubMcpServer();
79
- const clientStub = make404Client();
80
- const { registerEInvoiceTools } = await import("../tools/einvoice.js");
81
- registerEInvoiceTools(server, clientStub);
82
- });
83
- test("registers exactly 10 e-invoice tools (4 original + 6 Day 4)", () => {
84
- assert.equal(server.tools.size, 10);
85
- });
86
- test("registers send_einvoice", () => {
87
- assert.ok(server.tools.has("send_einvoice"), "send_einvoice not registered");
88
- });
89
- test("registers get_einvoice_status", () => {
90
- assert.ok(server.tools.has("get_einvoice_status"), "get_einvoice_status not registered");
91
- });
92
- test("registers validate_einvoice_xml", () => {
93
- assert.ok(server.tools.has("validate_einvoice_xml"), "validate_einvoice_xml not registered");
94
- });
95
- test("registers export_datev", () => {
96
- assert.ok(server.tools.has("export_datev"), "export_datev not registered");
97
- });
98
- });
99
- describe("E-Invoice Tools — registerAllTools includes new tools (127→133)", () => {
100
- test("registerAllTools wires 10 e-invoice tools via patchServerWithTracing", async () => {
101
- const server = new StubMcpServer();
102
- const clientStub = make404Client();
103
- // Apply the same patch registerAllTools does
104
- const originalRegisterTool = server.registerTool.bind(server);
105
- let wrappedCount = 0;
106
- server.registerTool = function patchedRegisterTool(name, config, cb) {
107
- wrappedCount++;
108
- // Verify Langfuse tracing wrapper would be applied (traceMCPTool wraps cb)
109
- // We confirm the patch captures all tool registrations including all 10 einvoice tools
110
- const wrappedCb = async (args) => {
111
- langfuseCallCount++;
112
- return cb(args);
113
- };
114
- originalRegisterTool(name, config, wrappedCb);
115
- };
116
- const { registerEInvoiceTools } = await import("../tools/einvoice.js");
117
- registerEInvoiceTools(server, clientStub);
118
- assert.equal(wrappedCount, 10, `Expected 10 tools wrapped, got ${wrappedCount}`);
119
- assert.equal(server.tools.size, 10);
120
- });
121
- });
122
- describe("send_einvoice — honest unavailable response (absent endpoint)", () => {
123
- let sendTool;
124
- beforeEach(async () => {
125
- const server = new StubMcpServer();
126
- const clientStub = make404Client();
127
- const { registerEInvoiceTools } = await import("../tools/einvoice.js");
128
- registerEInvoiceTools(server, clientStub);
129
- sendTool = server.tools.get("send_einvoice");
130
- });
131
- test("tool registered with correct title", () => {
132
- assert.ok(sendTool, "send_einvoice not registered");
133
- assert.equal(sendTool.config.title, "Send E-Invoice");
134
- });
135
- test("absent endpoint → isError + _unavailable, NEVER a fabricated queued status", async () => {
136
- assert.ok(sendTool, "send_einvoice not registered");
137
- const result = await sendTool.handler({
138
- invoiceId: "inv_test_123",
139
- format: "xrechnung-cii",
140
- dispatchMode: "email",
141
- });
142
- assert.ok(result.structuredContent, "structuredContent missing");
143
- const sc = result.structuredContent;
144
- // HONEST: no fabricated workflow/status, agent sees a failure.
145
- assert.equal(result.isError, true, "must be isError:true");
146
- assert.equal(sc["_unavailable"], true, "_unavailable flag should be true");
147
- assert.equal(sc["_stub"], undefined, "must NOT carry a fake-success _stub flag");
148
- assert.equal(sc["workflowRunId"], undefined, "must NOT fabricate a workflowRunId");
149
- assert.equal(sc["status"], undefined, "must NOT fabricate a queued status");
150
- assert.ok(typeof sc["_plannedEndpoint"] === "string", "_plannedEndpoint should be set");
151
- });
152
- test("peppol-bis-3 also returns honest unavailable", async () => {
153
- assert.ok(sendTool, "send_einvoice not registered");
154
- const result = await sendTool.handler({
155
- invoiceId: "inv_peppol_456",
156
- format: "peppol-bis-3",
157
- dispatchMode: "peppol",
158
- });
159
- assert.equal(result.isError, true);
160
- assert.equal(result.structuredContent["_unavailable"], true);
161
- });
162
- test("content block has type text", async () => {
163
- assert.ok(sendTool, "send_einvoice not registered");
164
- const result = await sendTool.handler({
165
- invoiceId: "inv_test_123",
166
- format: "facturae",
167
- dispatchMode: "download",
168
- });
169
- assert.ok(Array.isArray(result.content), "content should be array");
170
- assert.ok(result.content.length > 0, "content should have at least 1 block");
171
- assert.equal(result.content[0].type, "text");
172
- assert.ok(/unavailable/i.test(result.content[0].text), "text should say unavailable");
173
- });
174
- });
175
- describe("get_einvoice_status — honest unavailable response (absent endpoint)", () => {
176
- let statusTool;
177
- beforeEach(async () => {
178
- const server = new StubMcpServer();
179
- const clientStub = make404Client();
180
- const { registerEInvoiceTools } = await import("../tools/einvoice.js");
181
- registerEInvoiceTools(server, clientStub);
182
- statusTool = server.tools.get("get_einvoice_status");
183
- });
184
- test("absent endpoint → isError + _unavailable, NEVER a fabricated 'succeeded'", async () => {
185
- assert.ok(statusTool, "get_einvoice_status not registered");
186
- const result = await statusTool.handler({ workflowRunId: "wfr_stub_abc123" });
187
- const sc = result.structuredContent;
188
- assert.equal(result.isError, true, "must be isError:true");
189
- assert.equal(sc["_unavailable"], true, "_unavailable flag should be true");
190
- assert.equal(sc["status"], undefined, "must NOT fabricate a 'succeeded' status");
191
- assert.equal(sc["ackId"], undefined, "must NOT fabricate an ackId");
192
- assert.equal(sc["xmlUrl"], undefined, "must NOT fabricate an XML URL");
193
- assert.equal(sc["_stub"], undefined, "must NOT carry a fake-success _stub flag");
194
- });
195
- });
196
- describe("validate_einvoice_xml — honest unavailable response (absent endpoint)", () => {
197
- let validateTool;
198
- beforeEach(async () => {
199
- const server = new StubMcpServer();
200
- const clientStub = make404Client();
201
- const { registerEInvoiceTools } = await import("../tools/einvoice.js");
202
- registerEInvoiceTools(server, clientStub);
203
- validateTool = server.tools.get("validate_einvoice_xml");
204
- });
205
- test("absent endpoint → isError + _unavailable, NEVER a fabricated valid=true", async () => {
206
- assert.ok(validateTool, "validate_einvoice_xml not registered");
207
- const result = await validateTool.handler({
208
- xml: "<Invoice><ID>TEST-001</ID></Invoice>",
209
- format: "xrechnung-cii",
210
- });
211
- const sc = result.structuredContent;
212
- assert.equal(result.isError, true, "must be isError:true");
213
- assert.equal(sc["_unavailable"], true, "_unavailable flag should be true");
214
- // A fabricated valid=true is the most dangerous stub — must never appear.
215
- assert.equal(sc["valid"], undefined, "must NOT fabricate valid=true");
216
- assert.equal(sc["validator"], undefined, "must NOT fabricate a validator verdict");
217
- assert.equal(sc["_stub"], undefined, "must NOT carry a fake-success _stub flag");
218
- assert.ok(typeof sc["_plannedEndpoint"] === "string", "_plannedEndpoint should be set");
219
- });
220
- });
221
- describe("export_datev — honest unavailable response (absent endpoint)", () => {
222
- let datevTool;
223
- beforeEach(async () => {
224
- const server = new StubMcpServer();
225
- const clientStub = make404Client();
226
- const { registerEInvoiceTools } = await import("../tools/einvoice.js");
227
- registerEInvoiceTools(server, clientStub);
228
- datevTool = server.tools.get("export_datev");
229
- });
230
- test("absent endpoint → isError + _unavailable, NEVER a fabricated fileUrl", async () => {
231
- assert.ok(datevTool, "export_datev not registered");
232
- const result = await datevTool.handler({
233
- periodStart: "2026-01-01",
234
- periodEnd: "2026-01-31",
235
- format: "extf-buchungsstapel",
236
- });
237
- const sc = result.structuredContent;
238
- assert.equal(result.isError, true, "must be isError:true");
239
- assert.equal(sc["_unavailable"], true, "_unavailable flag should be true");
240
- assert.equal(sc["fileUrl"], undefined, "must NOT fabricate a download fileUrl");
241
- assert.equal(sc["filename"], undefined, "must NOT fabricate a filename");
242
- assert.equal(sc["_stub"], undefined, "must NOT carry a fake-success _stub flag");
243
- assert.ok(typeof sc["_plannedEndpoint"] === "string", "_plannedEndpoint should be set");
244
- });
245
- });
246
- describe("Langfuse wrapper — patchServerWithTracing wraps all tool callbacks", () => {
247
- test("patched registerTool intercepts all 10 einvoice tools (simulates traceMCPTool path)", async () => {
248
- const server = new StubMcpServer();
249
- const clientStub = make404Client();
250
- // Simulate patchServerWithTracing (same mechanism as register-all.ts)
251
- let interceptCount = 0;
252
- const orig = server.registerTool.bind(server);
253
- server.registerTool = function (name, config, cb) {
254
- interceptCount++;
255
- // Wrap with a simulated traceMCPTool (fail-open pattern)
256
- const traced = async (args) => {
257
- langfuseCallCount++; // would normally call traceMCPTool
258
- return cb(args);
259
- };
260
- orig(name, config, traced);
261
- };
262
- const { registerEInvoiceTools } = await import("../tools/einvoice.js");
263
- registerEInvoiceTools(server, clientStub);
264
- // All 10 tools were intercepted by the patch (4 original + 6 Day 4)
265
- assert.equal(interceptCount, 10, `Expected 10 tools intercepted by tracing patch, got ${interceptCount}`);
266
- // Exercise each tool to confirm the traced wrapper runs
267
- for (const [name, tool] of server.tools) {
268
- const args = getValidArgs(name);
269
- await tool.handler(args);
270
- }
271
- assert.equal(langfuseCallCount, 10, `Expected 10 Langfuse trace calls (one per tool), got ${langfuseCallCount}`);
272
- });
273
- });
274
- function getValidArgs(toolName) {
275
- switch (toolName) {
276
- case "send_einvoice":
277
- return { invoiceId: "inv_123", format: "ubl", dispatchMode: "email" };
278
- case "get_einvoice_status":
279
- return { workflowRunId: "wfr_123" };
280
- case "validate_einvoice_xml":
281
- return { xml: "<Invoice/>", format: "cii" };
282
- case "export_datev":
283
- return { periodStart: "2026-01-01", periodEnd: "2026-01-31", format: "extf-buchungsstapel" };
284
- // Day 4 tools
285
- case "einvoice_export":
286
- return { invoiceId: "inv_123", format: "facturae" };
287
- case "face_submit":
288
- return { invoiceId: "inv_123", mode: "production" };
289
- case "face_status":
290
- return { invoiceId: "inv_123" };
291
- case "ticketbai_submit":
292
- return { invoiceId: "inv_123" };
293
- case "ticketbai_status":
294
- return { invoiceId: "inv_123" };
295
- case "ksef_submit":
296
- return { invoiceId: "inv_123", mode: "production" };
297
- default:
298
- return {};
299
- }
300
- }
301
- // ── 404-fallback tests ────────────────────────────────────────────────────────
302
- describe("absent-endpoint path — honest unavailable, NO fabricated success", () => {
303
- async function makeServer(client) {
304
- const server = new StubMcpServer();
305
- const { registerEInvoiceTools } = await import("../tools/einvoice.js");
306
- registerEInvoiceTools(server, client);
307
- return server;
308
- }
309
- test("send_einvoice: 404 → isError + _unavailable + _plannedEndpoint, no fabricated data", async () => {
310
- const server = await makeServer(make404Client());
311
- const tool = server.tools.get("send_einvoice");
312
- const result = await tool.handler({ invoiceId: "inv_test", format: "xrechnung-cii", dispatchMode: "email" });
313
- const sc = result.structuredContent;
314
- assert.equal(result.isError, true, "must be isError:true");
315
- assert.equal(sc["_unavailable"], true, "_unavailable should be true");
316
- assert.equal(sc["_stub"], undefined, "must NOT be a fake-success stub");
317
- assert.ok(typeof sc["_plannedEndpoint"] === "string", "_plannedEndpoint should be set");
318
- assert.equal(sc["status"], undefined, "no fabricated queued status");
319
- assert.equal(sc["workflowRunId"], undefined, "no fabricated workflowRunId");
320
- });
321
- test("get_einvoice_status: 404 → isError + _unavailable + _plannedEndpoint", async () => {
322
- const server = await makeServer(make404Client());
323
- const tool = server.tools.get("get_einvoice_status");
324
- const result = await tool.handler({ workflowRunId: "wfr_pending_123" });
325
- const sc = result.structuredContent;
326
- assert.equal(result.isError, true, "must be isError:true");
327
- assert.equal(sc["_unavailable"], true, "_unavailable should be true");
328
- assert.ok(typeof sc["_plannedEndpoint"] === "string", "_plannedEndpoint should be set");
329
- assert.equal(sc["status"], undefined, "no fabricated status");
330
- });
331
- test("validate_einvoice_xml: 404 → isError + _unavailable, NEVER a fabricated valid verdict", async () => {
332
- const server = await makeServer(make404Client());
333
- const tool = server.tools.get("validate_einvoice_xml");
334
- const result = await tool.handler({ xml: "<Invoice/>", format: "xrechnung-cii" });
335
- const sc = result.structuredContent;
336
- assert.equal(result.isError, true, "must be isError:true");
337
- assert.equal(sc["_unavailable"], true, "_unavailable should be true");
338
- assert.equal(sc["valid"], undefined, "must NOT fabricate a valid verdict");
339
- assert.equal(sc["validator"], undefined, "must NOT fabricate a validator");
340
- });
341
- test("export_datev: 404 → isError + _unavailable, no fabricated file", async () => {
342
- const server = await makeServer(make404Client());
343
- const tool = server.tools.get("export_datev");
344
- const result = await tool.handler({ periodStart: "2026-03-01", periodEnd: "2026-03-31", format: "extf-buchungsstapel" });
345
- const sc = result.structuredContent;
346
- assert.equal(result.isError, true, "must be isError:true");
347
- assert.equal(sc["_unavailable"], true, "_unavailable should be true");
348
- assert.equal(sc["fileUrl"], undefined, "must NOT fabricate a fileUrl");
349
- assert.equal(sc["filename"], undefined, "must NOT fabricate a filename");
350
- });
351
- test("ksef_submit: forward-compat stub → isError + _unavailable + _notImplemented preserved", async () => {
352
- const server = await makeServer(make404Client());
353
- const tool = server.tools.get("ksef_submit");
354
- const result = await tool.handler({ invoiceId: "inv_test", mode: "production" });
355
- const sc = result.structuredContent;
356
- assert.equal(result.isError, true, "must be isError:true");
357
- assert.equal(sc["_unavailable"], true, "_unavailable should be true");
358
- assert.equal(sc["_notImplemented"], true, "_notImplemented marker preserved for forward-compat");
359
- assert.ok(typeof sc["_plannedEndpoint"] === "string", "_plannedEndpoint should be set");
360
- assert.equal(sc["mode"], "production", "echoes the requested mode");
361
- });
362
- });
363
- // ── Success-path tests (live client mock) ─────────────────────────────────────
364
- describe("Success path — CF endpoint live, real data returned", () => {
365
- async function makeServer(client) {
366
- const server = new StubMcpServer();
367
- const { registerEInvoiceTools } = await import("../tools/einvoice.js");
368
- registerEInvoiceTools(server, client);
369
- return server;
370
- }
371
- test("send_einvoice: live client → workflowRunId from CF response, no _stub flag", async () => {
372
- const server = await makeServer(makeLiveClient());
373
- const tool = server.tools.get("send_einvoice");
374
- const result = await tool.handler({ invoiceId: "inv_live", format: "peppol-bis-3", dispatchMode: "peppol" });
375
- const sc = result.structuredContent;
376
- assert.equal(sc["workflowRunId"], "wfr_live_abc123");
377
- assert.equal(sc["status"], "queued");
378
- assert.equal(sc["estimatedCompletionSec"], 12);
379
- assert.equal(sc["_stub"], undefined, "no _stub flag on live response");
380
- });
381
- test("get_einvoice_status: live client → real status and ackId", async () => {
382
- const server = await makeServer(makeLiveClient());
383
- const tool = server.tools.get("get_einvoice_status");
384
- const result = await tool.handler({ workflowRunId: "wfr_live_abc123" });
385
- const sc = result.structuredContent;
386
- assert.equal(sc["status"], "succeeded");
387
- assert.equal(sc["ackId"], "ack_live_xyz");
388
- assert.equal(sc["_stub"], undefined, "no _stub flag on live response");
389
- });
390
- test("validate_einvoice_xml: live client → real durationMs and empty errors", async () => {
391
- const server = await makeServer(makeLiveClient());
392
- const tool = server.tools.get("validate_einvoice_xml");
393
- const result = await tool.handler({ xml: "<Invoice/>", format: "xrechnung-cii" });
394
- const sc = result.structuredContent;
395
- assert.equal(sc["valid"], true);
396
- assert.equal(sc["durationMs"], 87);
397
- assert.equal(sc["errors"].length, 0);
398
- assert.equal(sc["_stub"], undefined, "no _stub flag on live response");
399
- });
400
- test("export_datev: live client → real rowCount and fileUrl from CF", async () => {
401
- const server = await makeServer(makeLiveClient());
402
- const tool = server.tools.get("export_datev");
403
- const result = await tool.handler({ periodStart: "2026-01-01", periodEnd: "2026-01-31", format: "extf-buchungsstapel" });
404
- const sc = result.structuredContent;
405
- assert.equal(sc["rowCount"], 42);
406
- assert.equal(sc["fiscalPeriod"], "2026-01");
407
- assert.ok(sc["fileUrl"].includes("live"), "fileUrl should be from live CF");
408
- assert.equal(sc["_stub"], undefined, "no _stub flag on live response");
409
- });
410
- });
411
- //# sourceMappingURL=einvoice-tools.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"einvoice-tools.test.js","sourceRoot":"","sources":["../../src/__tests__/einvoice-tools.test.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Tests for Fiscal MCP tools — Wave 6 (7 tools).
3
- *
4
- * Uses Node.js built-in test runner (node:test + node:assert).
5
- * Run: npm test (after build)
6
- *
7
- * Coverage:
8
- * 1. Tool registration — all 7 fiscal tools registered
9
- * 2. get_modelo_303_summary — success path + period param
10
- * 3. get_modelo_130_summary — success path
11
- * 4. get_modelo_390_summary — success path
12
- * 5. get_modelo_180_summary — success path
13
- * 6. get_modelo_347_summary — success path
14
- * 7. verifactu_status — success path
15
- * 8. verifactu_resubmit — confirm=false gate + confirm=true success
16
- * 9. API error — 404 propagated as isError=true
17
- *
18
- * NOTE: ticketbai_status is tested in einvoice-day4-tools.test.ts (canonical).
19
- */
20
- export {};
21
- //# sourceMappingURL=fiscal-tools.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"fiscal-tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/fiscal-tools.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG"}