@tailormade/billit-mcp 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,21 +1,24 @@
1
1
  # Billit MCP Server
2
2
 
3
- MCP server for the [Billit](https://billit.be) invoicing API.
3
+ MCP server for the [Billit](https://billit.be) invoicing API. Provides 39 tools covering orders, parties, products, Peppol e-invoicing, documents, and financial operations.
4
4
 
5
- ## Tools
5
+ ## What it does
6
+ MCP server that exposes the Billit invoicing API as tools for AI assistants (Claude Desktop, Claude Code).
7
+
8
+ ## Stack
9
+ TypeScript, Node.js, `@modelcontextprotocol/sdk`, Zod
10
+
11
+ ## How to build/run
6
12
 
7
- | Category | Tools |
8
- |----------|-------|
9
- | Orders | billit_list_orders, billit_get_order, billit_create_order, billit_update_order, billit_confirm_order, billit_delete_order, billit_register_payment, billit_send_order |
10
- | Parties | billit_list_parties, billit_get_party, billit_create_party, billit_update_party |
11
- | Products | billit_list_products, billit_get_product, billit_create_product |
12
- | Peppol | billit_peppol_list_inbox, billit_peppol_confirm_inbox, billit_peppol_refuse_inbox, billit_peppol_send_order, billit_peppol_lookup_participant, billit_peppol_register, billit_peppol_unregister |
13
- | Documents | billit_list_documents, billit_get_document, billit_upload_document, billit_download_file |
14
- | Financial | billit_list_financial_transactions, billit_import_financial_transactions, billit_list_reports, billit_get_report, billit_get_account_info, billit_search_company, billit_list_typecodes, billit_list_accountant_feeds, billit_confirm_accountant_feed, billit_download_accountant_file |
15
- | ToProcess | billit_submit_for_processing, billit_cancel_processing |
13
+ ```bash
14
+ npm ci
15
+ npm run build
16
+ ```
16
17
 
17
18
  ## Setup
18
19
 
20
+ Add to Claude Desktop config:
21
+
19
22
  ```json
20
23
  {
21
24
  "mcpServers": {
@@ -39,3 +42,25 @@ MCP server for the [Billit](https://billit.be) invoicing API.
39
42
  | BILLIT_API_KEY | Yes | API key from Billit account |
40
43
  | BILLIT_PARTY_ID | Yes | Your Billit party ID |
41
44
  | BILLIT_CONTEXT_PARTY_ID | No | Context party ID (for accountants acting on behalf) |
45
+
46
+ ## Tools
47
+
48
+ | Category | Tools | Count |
49
+ |----------|-------|-------|
50
+ | Orders | billit_list_orders, billit_get_order, billit_create_order, billit_update_order, billit_confirm_order, billit_delete_order, billit_register_payment, billit_send_order | 8 |
51
+ | Parties | billit_list_parties, billit_get_party, billit_create_party, billit_update_party | 4 |
52
+ | Products | billit_list_products, billit_get_product, billit_create_product | 3 |
53
+ | Peppol | billit_peppol_list_inbox, billit_peppol_confirm_inbox, billit_peppol_refuse_inbox, billit_peppol_send_order, billit_peppol_lookup_participant, billit_peppol_register, billit_peppol_unregister | 7 |
54
+ | Documents | billit_list_documents, billit_get_document, billit_upload_document, billit_download_file | 4 |
55
+ | Financial | billit_list_financial_transactions, billit_import_financial_transactions, billit_list_reports, billit_get_report, billit_get_account_info, billit_search_company, billit_list_typecodes, billit_list_accountant_feeds, billit_register_accountant_feed, billit_confirm_accountant_feed, billit_download_accountant_file | 11 |
56
+ | ToProcess | billit_submit_for_processing, billit_cancel_processing | 2 |
57
+
58
+ ## References
59
+ <!-- MANDATORY: list all external documentation sources -->
60
+ - [Billit API](https://app.billit.be/api/swagger) -- REST API
61
+
62
+ ## Architecture
63
+ [filled at roundup]
64
+
65
+ ## Known limitations
66
+ [filled at roundup]
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAErC,MAAM,EAAE,YAAY;IAc1B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAerG"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAY;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAyB;gBAErC,MAAM,EAAE,YAAY;IAc1B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;CAgBrG"}
@@ -10,16 +10,16 @@ class BillitClient {
10
10
  "Content-Type": "application/json",
11
11
  "ApiKey": config.apiKey,
12
12
  };
13
- if (config.partyId) {
13
+ if (config.partyId !== undefined && config.partyId !== 0) {
14
14
  this.headers["PartyID"] = String(config.partyId);
15
15
  }
16
- if (config.contextPartyId) {
16
+ if (config.contextPartyId !== undefined && config.contextPartyId !== 0) {
17
17
  this.headers["ContextPartyID"] = String(config.contextPartyId);
18
18
  }
19
19
  }
20
20
  async request(method, path, body, partyIdOverride) {
21
21
  const headers = { ...this.headers };
22
- if (partyIdOverride)
22
+ if (partyIdOverride !== undefined)
23
23
  headers["PartyID"] = String(partyIdOverride);
24
24
  const res = await fetch(`${this.baseUrl}${path}`, {
25
25
  method,
@@ -27,7 +27,8 @@ class BillitClient {
27
27
  body: body ? JSON.stringify(body) : undefined,
28
28
  });
29
29
  if (!res.ok) {
30
- const text = await res.text().catch(() => "");
30
+ const raw = await res.text().catch(() => "");
31
+ const text = raw.length > 2000 ? raw.slice(0, 2000) + `… [truncated, ${raw.length} chars total]` : raw;
31
32
  throw new Error(`Billit ${res.status} ${method} ${path}: ${text}`);
32
33
  }
33
34
  if (res.status === 204)
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":";;;AAOA,MAAa,YAAY;IACd,OAAO,CAAS;IACR,OAAO,CAAyB;IAEjD,YAAY,MAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,uBAAuB,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG;YACb,cAAc,EAAE,kBAAkB;YAClC,QAAQ,EAAE,MAAM,CAAC,MAAM;SACxB,CAAC;QACF,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,EAAE,CAAC;YAC1B,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,IAAc,EAAE,eAAwB;QACrF,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,eAAe;YAAE,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAClE,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YAChD,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,MAAM,IAAI,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,SAAc,CAAC;QAC9C,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;IAClC,CAAC;CACF;AAjCD,oCAiCC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":";;;AAOA,MAAa,YAAY;IACd,OAAO,CAAS;IACR,OAAO,CAAyB;IAEjD,YAAY,MAAoB;QAC9B,IAAI,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,uBAAuB,CAAC;QACzD,IAAI,CAAC,OAAO,GAAG;YACb,cAAc,EAAE,kBAAkB;YAClC,QAAQ,EAAE,MAAM,CAAC,MAAM;SACxB,CAAC;QACF,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,KAAK,CAAC,EAAE,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,MAAM,CAAC,cAAc,KAAK,SAAS,IAAI,MAAM,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YACvE,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAI,MAAc,EAAE,IAAY,EAAE,IAAc,EAAE,eAAwB;QACrF,MAAM,OAAO,GAAG,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC;QACpC,IAAI,eAAe,KAAK,SAAS;YAAE,OAAO,CAAC,SAAS,CAAC,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;QAChF,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,EAAE;YAChD,MAAM;YACN,OAAO;YACP,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS;SAC9C,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,IAAI,GAAG,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,iBAAiB,GAAG,CAAC,MAAM,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC;YACvG,MAAM,IAAI,KAAK,CAAC,UAAU,GAAG,CAAC,MAAM,IAAI,MAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,SAAc,CAAC;QAC9C,OAAO,GAAG,CAAC,IAAI,EAAgB,CAAC;IAClC,CAAC;CACF;AAlCD,oCAkCC"}
package/dist/index.js CHANGED
@@ -1,8 +1,11 @@
1
1
  #!/usr/bin/env node
2
2
  "use strict";
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
4
6
  const mcp_js_1 = require("@modelcontextprotocol/sdk/server/mcp.js");
5
7
  const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
8
+ const pkg = JSON.parse((0, fs_1.readFileSync)((0, path_1.join)(__dirname, "..", "package.json"), "utf-8"));
6
9
  const client_js_1 = require("./api/client.js");
7
10
  const orders_js_1 = require("./tools/orders.js");
8
11
  const parties_js_1 = require("./tools/parties.js");
@@ -20,12 +23,18 @@ function getRequiredEnv(name) {
20
23
  }
21
24
  async function main() {
22
25
  const apiKey = getRequiredEnv("BILLIT_API_KEY");
23
- const partyId = process.env["BILLIT_PARTY_ID"] ? parseInt(process.env["BILLIT_PARTY_ID"], 10) : 0;
24
- const contextPartyId = process.env["BILLIT_CONTEXT_PARTY_ID"]
25
- ? parseInt(process.env["BILLIT_CONTEXT_PARTY_ID"], 10)
26
- : undefined;
26
+ const rawPartyId = parseInt(process.env["BILLIT_PARTY_ID"] ?? "", 10);
27
+ if (process.env["BILLIT_PARTY_ID"] && Number.isNaN(rawPartyId)) {
28
+ console.error(`Warning: BILLIT_PARTY_ID="${process.env["BILLIT_PARTY_ID"]}" is not a valid number, falling back to 0`);
29
+ }
30
+ const partyId = Number.isNaN(rawPartyId) ? 0 : rawPartyId;
31
+ const rawContextPartyId = parseInt(process.env["BILLIT_CONTEXT_PARTY_ID"] ?? "", 10);
32
+ if (process.env["BILLIT_CONTEXT_PARTY_ID"] && Number.isNaN(rawContextPartyId)) {
33
+ console.error(`Warning: BILLIT_CONTEXT_PARTY_ID="${process.env["BILLIT_CONTEXT_PARTY_ID"]}" is not a valid number, ignoring`);
34
+ }
35
+ const contextPartyId = Number.isNaN(rawContextPartyId) ? undefined : rawContextPartyId;
27
36
  const client = new client_js_1.BillitClient({ apiKey, partyId, contextPartyId });
28
- const server = new mcp_js_1.McpServer({ name: "billit-mcp", version: "1.0.0" });
37
+ const server = new mcp_js_1.McpServer({ name: "billit-mcp", version: pkg.version });
29
38
  (0, orders_js_1.registerOrderTools)(server, client);
30
39
  (0, parties_js_1.registerPartyTools)(server, client);
31
40
  (0, products_js_1.registerProductTools)(server, client);
@@ -37,5 +46,9 @@ async function main() {
37
46
  const transport = new stdio_js_1.StdioServerTransport();
38
47
  await server.connect(transport);
39
48
  }
49
+ process.on("unhandledRejection", (reason) => {
50
+ console.error("Unhandled rejection:", reason);
51
+ process.exit(1);
52
+ });
40
53
  main().catch((err) => { console.error(err); process.exit(1); });
41
54
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AACA,oEAAoE;AACpE,wEAAiF;AACjF,+CAA+C;AAC/C,iDAAuD;AACvD,mDAAwD;AACxD,qDAA2D;AAC3D,iDAAwD;AACxD,uDAA6D;AAC7D,uDAA8D;AAC9D,uDAA8D;AAC9D,uDAA6D;AAE7D,SAAS,cAAc,CAAC,IAAY;IAClC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAChC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;IAC9E,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAClG,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC;QAC3D,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,EAAE,EAAE,CAAC;QACtD,CAAC,CAAC,SAAS,CAAC;IAEd,MAAM,MAAM,GAAG,IAAI,wBAAY,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IAErE,MAAM,MAAM,GAAG,IAAI,kBAAS,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAEvE,IAAA,8BAAkB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,IAAA,+BAAkB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,IAAA,kCAAoB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACrC,IAAA,+BAAmB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,IAAA,oCAAqB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,IAAA,qCAAsB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,IAAA,qCAAsB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACvC,IAAA,oCAAqB,EAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEtC,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAShD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QAoE5E"}
1
+ {"version":3,"file":"documents.d.ts","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QAwE5E"}
@@ -2,11 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerDocumentTools = registerDocumentTools;
4
4
  const zod_1 = require("zod");
5
- function respond(text) {
6
- return { content: [{ type: "text", text }] };
7
- }
8
- const companyId = zod_1.z.coerce.number().optional()
9
- .describe("Billit PartyID of the company to act as. If not set, uses BILLIT_PARTY_ID env. If env is 0, call billit_get_account_info first to discover available companies.");
5
+ const utils_js_1 = require("./utils.js");
10
6
  function registerDocumentTools(server, client) {
11
7
  server.tool("billit_list_documents", "List documents stored in Billit. Returns document metadata including DocumentID, FileName, and associated order. Supports OData $filter, $orderby, full-text search.\n\nEXAMPLES:\n- orderby='CreationDate desc'\n- filter=\"OrderID eq 12345\"", {
12
8
  filter: zod_1.z.string().optional().describe("OData $filter expression. Examples: \"OrderID eq 12345\", \"FileName eq 'invoice.pdf'\""),
@@ -14,48 +10,41 @@ function registerDocumentTools(server, client) {
14
10
  search: zod_1.z.string().optional().describe("Full-text search on document name or content. Sent as 'fullTextSearch' query param."),
15
11
  top: zod_1.z.coerce.number().optional().describe("Max results per page (max: 120)"),
16
12
  skip: zod_1.z.coerce.number().optional().describe("Items to skip for pagination (default: 0)"),
17
- company_id: companyId,
13
+ company_id: utils_js_1.companyId,
18
14
  }, async ({ filter, orderby, search, top, skip, company_id }) => {
19
- const params = new URLSearchParams();
20
- if (filter)
21
- params.set("$filter", filter);
22
- if (orderby)
23
- params.set("$orderby", orderby);
24
- if (search)
25
- params.set("fullTextSearch", search);
26
- if (top)
27
- params.set("$top", String(top));
28
- if (skip)
29
- params.set("$skip", String(skip));
30
- const qs = params.toString();
15
+ const qs = (0, utils_js_1.buildODataParams)({ filter, search, orderby, top, skip });
31
16
  const data = await client.request("GET", `/v1/documents${qs ? `?${qs}` : ""}`, undefined, company_id);
32
- return respond(JSON.stringify(data, null, 2));
17
+ return (0, utils_js_1.respond)(JSON.stringify(data, null, 2));
33
18
  });
34
19
  server.tool("billit_get_document", "Get metadata and content of a specific document. Returns document details including a fileID (UUID) that can be used with billit_download_file to get the actual file content.", {
35
20
  document_id: zod_1.z.coerce.number().describe("Numeric document ID from billit_list_documents result"),
36
- company_id: companyId,
21
+ company_id: utils_js_1.companyId,
37
22
  }, async ({ document_id, company_id }) => {
38
23
  const data = await client.request("GET", `/v1/documents/${document_id}`, undefined, company_id);
39
- return respond(JSON.stringify(data, null, 2));
24
+ return (0, utils_js_1.respond)(JSON.stringify(data, null, 2));
40
25
  });
41
- server.tool("billit_upload_document", "Upload a document to Billit (e.g. an incoming invoice PDF for processing). Returns the created DocumentID. Next step: billit_submit_for_processing to have Billit parse the document.\n\nNOTE: file_base64 must be a base64-encoded string of the file content. EXAMPLE: for a PDF, encode the raw bytes as base64. Max file size depends on Billit account settings.", {
26
+ server.tool("billit_upload_document", (0, utils_js_1.withLlmTip)("Upload a document to Billit (e.g. an incoming invoice PDF for processing). Returns the created DocumentID. Next step: billit_submit_for_processing to have Billit parse the document.", "file_base64 must be a base64-encoded string of the file content (raw bytes base64). Max file size depends on Billit account settings."), {
42
27
  file_base64: zod_1.z.string().describe("Base64-encoded file content"),
43
28
  file_name: zod_1.z.string().describe("File name including extension (e.g. 'invoice-2026-001.pdf')"),
44
29
  content_type: zod_1.z.string().optional().describe("MIME type (default: 'application/pdf'). Other common values: 'image/jpeg', 'image/png'"),
45
- company_id: companyId,
46
- }, async ({ file_base64, file_name, content_type, company_id }) => {
30
+ dry_run: utils_js_1.coerceBool.describe("When true, preview the action without executing it (default: false)"),
31
+ company_id: utils_js_1.companyId,
32
+ }, async ({ file_base64, file_name, content_type, dry_run, company_id }) => {
33
+ if (dry_run) {
34
+ return (0, utils_js_1.respond)(JSON.stringify({ dry_run: true, would: `Upload document '${file_name}' (${content_type ?? "application/pdf"})` }, null, 2));
35
+ }
47
36
  const body = {
48
37
  FileBase64: file_base64, FileName: file_name, ContentType: content_type ?? "application/pdf",
49
38
  };
50
39
  const data = await client.request("POST", "/v1/documents", body, company_id);
51
- return respond(JSON.stringify(data, null, 2));
40
+ return (0, utils_js_1.respond)(JSON.stringify(data, null, 2));
52
41
  });
53
- server.tool("billit_download_file", "Download a file by its UUID. File UUIDs are found in order responses (PDF of the invoice), document responses, or accountant feed items. Returns base64-encoded file content.\n\nCRITICAL: This endpoint uses a UUID (string like 'a1b2c3d4-...'), NOT a numeric ID. The fileID comes from order/document response fields, not from the DocumentID. Do not confuse DocumentID (numeric) with fileID (UUID).", {
42
+ server.tool("billit_download_file", (0, utils_js_1.withLlmTip)("Download a file by its UUID. File UUIDs are found in order responses (PDF of the invoice), document responses, or accountant feed items. Returns base64-encoded file content.", "ERROR: 404 on download CAUSE: passing numeric DocumentID instead of UUID fileID → FIX: use the UUID string (e.g. 'a1b2c3d4-...') from order/document response fields, NOT the numeric DocumentID."), {
54
43
  file_id: zod_1.z.string().describe("File UUID (e.g. 'a1b2c3d4-e5f6-7890-abcd-ef1234567890'). Found in order or document response fields. This is NOT the numeric DocumentID."),
55
- company_id: companyId,
44
+ company_id: utils_js_1.companyId,
56
45
  }, async ({ file_id, company_id }) => {
57
46
  const data = await client.request("GET", `/v1/files/${file_id}`, undefined, company_id);
58
- return respond(JSON.stringify(data, null, 2));
47
+ return (0, utils_js_1.respond)(JSON.stringify(data, null, 2));
59
48
  });
60
49
  }
61
50
  //# sourceMappingURL=documents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"documents.js","sourceRoot":"","sources":["../../src/tools/documents.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"financial.d.ts","sourceRoot":"","sources":["../../src/tools/financial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAShD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QAoL7E"}
1
+ {"version":3,"file":"financial.d.ts","sourceRoot":"","sources":["../../src/tools/financial.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QAoM7E"}
@@ -2,16 +2,12 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.registerFinancialTools = registerFinancialTools;
4
4
  const zod_1 = require("zod");
5
- function respond(text) {
6
- return { content: [{ type: "text", text }] };
7
- }
8
- const companyId = zod_1.z.coerce.number().optional()
9
- .describe("Billit PartyID of the company to act as. If not set, uses BILLIT_PARTY_ID env. If env is 0, call billit_get_account_info first to discover available companies.");
5
+ const utils_js_1 = require("./utils.js");
10
6
  function registerFinancialTools(server, client) {
11
7
  // ── billit_get_account_info ───────────────────────────────────────
12
- server.tool("billit_get_account_info", "Get account and company information for the authenticated Billit API key. Returns a Companies array with PartyID, Name, VATNumber, and other details for each company associated with the API key.\n\nSTARTUP PROTOCOL: If BILLIT_PARTY_ID env is 0 or unknown, call this tool FIRST before any other Billit tool. Store the Companies array in memory (name → PartyID mapping). Then choose the correct company_id for all subsequent Billit tool calls based on conversation context.\n\nEXAMPLE: after calling this, you know 'JaRa Productions bv' = PartyID 208029 and 'TAILORMADE 2018,SL' = PartyID 663845. When user asks about invoices for JaRa, pass company_id=208029 to billit_list_orders.", {}, async () => {
8
+ server.tool("billit_get_account_info", "Get account and company information for the authenticated Billit API key. Returns a Companies array with PartyID, Name, VATNumber, and other details for each company associated with the API key.\n\nSTARTUP PROTOCOL: If BILLIT_PARTY_ID env is 0 or unknown, call this tool FIRST before any other Billit tool. Store the Companies array in memory (name → PartyID mapping). Then choose the correct company_id for all subsequent Billit tool calls based on conversation context.\n\nEXAMPLE: after calling this, you get a Companies array with PartyID + Name for each company. When user asks about invoices for a specific company, pass the matching company_id to billit_list_orders.", {}, async () => {
13
9
  const data = await client.request("GET", "/v1/account/accountInformation");
14
- return respond(JSON.stringify(data, null, 2));
10
+ return (0, utils_js_1.respond)(JSON.stringify(data, null, 2));
15
11
  });
16
12
  // ── billit_search_company ─────────────────────────────────────────
17
13
  server.tool("billit_search_company", "Search for a Belgian company by name or VAT/KBO number in the official company database. Returns official company name, address, and enterprise number. Use before billit_create_party to auto-fill correct company data.\n\nEXAMPLE: billit_search_company with keywords='BE0123456789' or keywords='Acme NV' returns official KBO data. Use this to avoid typos when creating parties.", {
@@ -19,7 +15,7 @@ function registerFinancialTools(server, client) {
19
15
  .describe("Company name, VAT number (BE0123456789), or KBO enterprise number to search"),
20
16
  }, async ({ keywords }) => {
21
17
  const data = await client.request("GET", `/v1/misc/companysearch/${encodeURIComponent(keywords)}`);
22
- return respond(JSON.stringify(data, null, 2));
18
+ return (0, utils_js_1.respond)(JSON.stringify(data, null, 2));
23
19
  });
24
20
  // ── billit_list_typecodes ─────────────────────────────────────────
25
21
  server.tool("billit_list_typecodes", "List valid type codes for a given category. Use to get valid values for VAT rates, units of measure, languages, etc.\n\nEXAMPLE type code types: 'VATRate' for VAT percentages, 'Unit' for units of measure, 'Language' for supported languages.", {
@@ -27,50 +23,43 @@ function registerFinancialTools(server, client) {
27
23
  .describe("Type code category to list (e.g. 'VATRate', 'Unit', 'Language', 'Currency')"),
28
24
  }, async ({ type_code_type }) => {
29
25
  const data = await client.request("GET", `/v1/misc/typecodes/${encodeURIComponent(type_code_type)}`);
30
- return respond(JSON.stringify(data, null, 2));
26
+ return (0, utils_js_1.respond)(JSON.stringify(data, null, 2));
31
27
  });
32
28
  // ── billit_list_financial_transactions ─────────────────────────────
33
- server.tool("billit_list_financial_transactions", "List financial transactions in Billit (bank transactions, payments). Use to reconcile payments with orders. Supports full-text search, OData $filter and $orderby.\n\nEXAMPLES:\n- Recent first: orderby='ValueDate desc'\n- Date range: filter=\"ValueDate ge datetime'2026-01-01T00:00:00' and ValueDate le datetime'2026-03-31T23:59:59'\"\n- By counterparty: filter=\"NameCounterParty eq 'Mehmet'\"\n- Combined: orderby='ValueDate desc', filter=\"ValueDate ge datetime'2026-01-01T00:00:00'\"\n\nNOTE: max page size is 120. Date filter requires datetime'' syntax.", {
29
+ server.tool("billit_list_financial_transactions", (0, utils_js_1.withLlmTip)("List financial transactions in Billit (bank transactions, payments). Use to reconcile payments with orders. Supports full-text search, OData $filter and $orderby.\n\nEXAMPLES:\n- Recent first: orderby='ValueDate desc'\n- Date range: filter=\"ValueDate ge datetime'2026-01-01T00:00:00' and ValueDate le datetime'2026-03-31T23:59:59'\"\n- By counterparty: filter=\"NameCounterParty eq 'Acme Corp'\"\n- Combined: orderby='ValueDate desc', filter=\"ValueDate ge datetime'2026-01-01T00:00:00'\"", "Max page size is 120. Date filter requires datetime'' syntax."), {
34
30
  search: zod_1.z.string().optional()
35
31
  .describe("Full-text search on transaction description, reference, or amount"),
36
32
  filter: zod_1.z.string().optional()
37
- .describe("OData $filter expression. Date syntax requires datetime'': \"ValueDate ge datetime'2026-01-01T00:00:00'\". Other examples: \"NameCounterParty eq 'Mehmet Eryilmaz'\", \"TotalAmount ge 500\""),
33
+ .describe("OData $filter expression. Date syntax requires datetime'': \"ValueDate ge datetime'2026-01-01T00:00:00'\". Other examples: \"NameCounterParty eq 'Acme Corp'\", \"TotalAmount ge 500\""),
38
34
  orderby: zod_1.z.string().optional()
39
35
  .describe("OData $orderby expression. Examples: 'ValueDate desc', 'TotalAmount desc', 'ValueDate asc'"),
40
36
  top: zod_1.z.coerce.number().optional()
41
37
  .describe("Max results per page (max: 120)"),
42
38
  skip: zod_1.z.coerce.number().optional()
43
39
  .describe("Items to skip for pagination (default: 0)"),
44
- company_id: companyId,
40
+ company_id: utils_js_1.companyId,
45
41
  }, async ({ search, filter, orderby, top, skip, company_id }) => {
46
- const params = new URLSearchParams();
47
- if (search)
48
- params.set("fullTextSearch", search);
49
- if (filter)
50
- params.set("$filter", filter);
51
- if (orderby)
52
- params.set("$orderby", orderby);
53
- if (top)
54
- params.set("$top", String(top));
55
- if (skip)
56
- params.set("$skip", String(skip));
57
- const qs = params.toString();
42
+ const qs = (0, utils_js_1.buildODataParams)({ filter, search, orderby, top, skip });
58
43
  const data = await client.request("GET", `/v1/financialTransactions${qs ? `?${qs}` : ""}`, undefined, company_id);
59
- return respond(JSON.stringify(data, null, 2));
44
+ return (0, utils_js_1.respond)(JSON.stringify(data, null, 2));
60
45
  });
61
46
  // ── billit_import_financial_transactions ───────────────────────────
62
- server.tool("billit_import_financial_transactions", "Import bank transactions from a CODA or MT940 bank statement file. Use to bulk-import bank transactions for payment reconciliation.\n\nNOTE: Supported formats are CODA (Belgian bank format) and MT940 (SWIFT bank format). file_base64 must be base64-encoded file content.", {
47
+ server.tool("billit_import_financial_transactions", (0, utils_js_1.withLlmTip)("Import bank transactions from a CODA or MT940 bank statement file. Use to bulk-import bank transactions for payment reconciliation.", "Supported formats: CODA (Belgian bank format) and MT940 (SWIFT bank format). file_base64 must be base64-encoded file content."), {
63
48
  file_base64: zod_1.z.string()
64
49
  .describe("Base64-encoded CODA or MT940 bank statement file content"),
65
50
  file_name: zod_1.z.string()
66
51
  .describe("File name (e.g. 'statement-2026-01.coda' or 'statement.mt940')"),
67
- content_type: zod_1.z.string()
68
- .describe("MIME type of the file"),
69
- company_id: companyId,
70
- }, async ({ file_base64, file_name, content_type, company_id }) => {
52
+ content_type: zod_1.z.string().optional()
53
+ .describe("MIME type of the file (e.g. 'application/octet-stream'). Auto-detected from file_name if omitted."),
54
+ dry_run: utils_js_1.coerceBool.describe("When true, preview the action without executing it (default: false)"),
55
+ company_id: utils_js_1.companyId,
56
+ }, async ({ file_base64, file_name, content_type, dry_run, company_id }) => {
57
+ if (dry_run) {
58
+ return (0, utils_js_1.respond)(JSON.stringify({ dry_run: true, would: `Import financial transactions from '${file_name}'` }, null, 2));
59
+ }
71
60
  const body = { FileBase64: file_base64, FileName: file_name, ContentType: content_type };
72
61
  const data = await client.request("POST", "/v1/financialTransactions/commands/import", body, company_id);
73
- return respond(JSON.stringify(data, null, 2));
62
+ return (0, utils_js_1.respond)(JSON.stringify(data, null, 2));
74
63
  });
75
64
  // ── billit_list_reports ───────────────────────────────────────────
76
65
  server.tool("billit_list_reports", "List available reports in Billit (VAT reports, sales reports, etc.). Returns report metadata. Supports OData $orderby. Use billit_get_report to retrieve the actual report data.", {
@@ -80,55 +69,58 @@ function registerFinancialTools(server, client) {
80
69
  .describe("Max results per page (max: 120)"),
81
70
  skip: zod_1.z.coerce.number().optional()
82
71
  .describe("Items to skip for pagination (default: 0)"),
83
- company_id: companyId,
72
+ company_id: utils_js_1.companyId,
84
73
  }, async ({ orderby, top, skip, company_id }) => {
85
- const params = new URLSearchParams();
86
- if (orderby)
87
- params.set("$orderby", orderby);
88
- if (top)
89
- params.set("$top", String(top));
90
- if (skip)
91
- params.set("$skip", String(skip));
92
- const qs = params.toString();
74
+ const qs = (0, utils_js_1.buildODataParams)({ orderby, top, skip });
93
75
  const data = await client.request("GET", `/v1/reports${qs ? `?${qs}` : ""}`, undefined, company_id);
94
- return respond(JSON.stringify(data, null, 2));
76
+ return (0, utils_js_1.respond)(JSON.stringify(data, null, 2));
95
77
  });
96
78
  // ── billit_get_report ─────────────────────────────────────────────
97
79
  server.tool("billit_get_report", "Get the data of a specific Billit report. Use billit_list_reports to find report IDs.", {
98
- report_id: zod_1.z.number()
80
+ report_id: zod_1.z.coerce.number()
99
81
  .describe("Numeric report ID from billit_list_reports result"),
100
- company_id: companyId,
82
+ company_id: utils_js_1.companyId,
101
83
  }, async ({ report_id, company_id }) => {
102
84
  const data = await client.request("GET", `/v1/reports/${report_id}`, undefined, company_id);
103
- return respond(JSON.stringify(data, null, 2));
85
+ return (0, utils_js_1.respond)(JSON.stringify(data, null, 2));
104
86
  });
105
87
  // ── billit_list_accountant_feeds ──────────────────────────────────
106
- server.tool("billit_list_accountant_feeds", "List all accountant feeds and their pending items. Feeds contain newly exported orders and documents for accountant processing. Poll at most once per minute. Next steps: billit_download_accountant_file to download items, billit_confirm_accountant_feed to confirm processed items.\n\nWARNING: Do not poll more than once per minute this is a rate-limited endpoint. After downloading feed items, always confirm them with billit_confirm_accountant_feed to remove them from the feed.", { company_id: companyId }, async ({ company_id }) => {
88
+ server.tool("billit_list_accountant_feeds", (0, utils_js_1.withLlmTip)("List all accountant feeds and their pending items. Feeds contain newly exported orders and documents for accountant processing. Poll at most once per minute. Next steps: billit_download_accountant_file to download items, billit_confirm_accountant_feed to confirm processed items.", "ERROR: rate limit hit → CAUSE: polling more than once per minute FIX: wait at least 60s between calls.\nAfter downloading feed items, always confirm them with billit_confirm_accountant_feed to remove them from the feed."), { company_id: utils_js_1.companyId }, async ({ company_id }) => {
107
89
  const data = await client.request("GET", "/v1/accountant/feeds", undefined, company_id);
108
- return respond(JSON.stringify(data, null, 2));
90
+ return (0, utils_js_1.respond)(JSON.stringify(data, null, 2));
109
91
  });
110
92
  // ── billit_register_accountant_feed ───────────────────────────────
111
- server.tool("billit_register_accountant_feed", "Register a new accountant feed. All newly exported orders and documents will appear in this feed for the accountant to download. One-time setup per accountant integration.", { company_id: companyId }, async ({ company_id }) => {
93
+ server.tool("billit_register_accountant_feed", "Register a new accountant feed. All newly exported orders and documents will appear in this feed for the accountant to download. One-time setup per accountant integration.", {
94
+ dry_run: utils_js_1.coerceBool.describe("When true, preview the action without executing it (default: false)"),
95
+ company_id: utils_js_1.companyId,
96
+ }, async ({ dry_run, company_id }) => {
97
+ if (dry_run) {
98
+ return (0, utils_js_1.respond)(JSON.stringify({ dry_run: true, would: "Register new accountant feed" }, null, 2));
99
+ }
112
100
  const data = await client.request("POST", "/v1/accountant/feeds", undefined, company_id);
113
- return respond(JSON.stringify(data ?? { success: true }, null, 2));
101
+ return (0, utils_js_1.respond)(JSON.stringify(data ?? { success: true }, null, 2));
114
102
  });
115
103
  // ── billit_confirm_accountant_feed ────────────────────────────────
116
- server.tool("billit_confirm_accountant_feed", "Confirm that feed items have been successfully downloaded. This removes them from the feed list. Always call this after processing items from billit_list_accountant_feeds.\n\nCRITICAL: Always confirm downloaded items without confirmation, the same items will reappear on the next poll. Pass the feed item IDs from the billit_list_accountant_feeds response.", {
104
+ server.tool("billit_confirm_accountant_feed", (0, utils_js_1.withLlmTip)("Confirm that feed items have been successfully downloaded. This removes them from the feed list. Always call this after processing items from billit_list_accountant_feeds.", "ERROR: duplicate items on next poll → CAUSE: items not confirmed after download FIX: always call this after downloading feed items, passing the feed item IDs from billit_list_accountant_feeds response."), {
117
105
  feed_item_ids: zod_1.z.array(zod_1.z.string())
118
106
  .describe("Array of feed item ID strings to confirm as downloaded. Get these from billit_list_accountant_feeds response."),
119
- company_id: companyId,
120
- }, async ({ feed_item_ids, company_id }) => {
107
+ dry_run: utils_js_1.coerceBool.describe("When true, preview the action without executing it (default: false)"),
108
+ company_id: utils_js_1.companyId,
109
+ }, async ({ feed_item_ids, dry_run, company_id }) => {
110
+ if (dry_run) {
111
+ return (0, utils_js_1.respond)(JSON.stringify({ dry_run: true, would: `Confirm ${feed_item_ids.length} accountant feed item(s)` }, null, 2));
112
+ }
121
113
  const data = await client.request("POST", "/v1/accountant/feeds/confirm", { FeedItemIds: feed_item_ids }, company_id);
122
- return respond(JSON.stringify(data ?? { success: true }, null, 2));
114
+ return (0, utils_js_1.respond)(JSON.stringify(data ?? { success: true }, null, 2));
123
115
  });
124
116
  // ── billit_download_accountant_file ───────────────────────────────
125
117
  server.tool("billit_download_accountant_file", "Download a file from an accountant feed (e.g. a CODA file or exported invoice). Returns base64-encoded file content.", {
126
118
  file_id: zod_1.z.string()
127
119
  .describe("File ID from an accountant feed item"),
128
- company_id: companyId,
120
+ company_id: utils_js_1.companyId,
129
121
  }, async ({ file_id, company_id }) => {
130
122
  const data = await client.request("GET", `/v1/accountant/files/${file_id}`, undefined, company_id);
131
- return respond(JSON.stringify(data, null, 2));
123
+ return (0, utils_js_1.respond)(JSON.stringify(data, null, 2));
132
124
  });
133
125
  }
134
126
  //# sourceMappingURL=financial.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"financial.js","sourceRoot":"","sources":["../../src/tools/financial.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"financial.js","sourceRoot":"","sources":["../../src/tools/financial.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../src/tools/orders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAWhD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QA0MzE"}
1
+ {"version":3,"file":"orders.d.ts","sourceRoot":"","sources":["../../src/tools/orders.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAGhD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,QAqPzE"}