@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 +36 -11
- package/dist/api/client.d.ts.map +1 -1
- package/dist/api/client.js +5 -4
- package/dist/api/client.js.map +1 -1
- package/dist/index.js +18 -5
- package/dist/index.js.map +1 -1
- package/dist/tools/documents.d.ts.map +1 -1
- package/dist/tools/documents.js +17 -28
- package/dist/tools/documents.js.map +1 -1
- package/dist/tools/financial.d.ts.map +1 -1
- package/dist/tools/financial.js +46 -54
- package/dist/tools/financial.js.map +1 -1
- package/dist/tools/orders.d.ts.map +1 -1
- package/dist/tools/orders.js +70 -51
- package/dist/tools/orders.js.map +1 -1
- package/dist/tools/parties.d.ts.map +1 -1
- package/dist/tools/parties.js +24 -30
- package/dist/tools/parties.js.map +1 -1
- package/dist/tools/peppol.d.ts.map +1 -1
- package/dist/tools/peppol.js +49 -34
- package/dist/tools/peppol.js.map +1 -1
- package/dist/tools/products.d.ts.map +1 -1
- package/dist/tools/products.js +14 -25
- package/dist/tools/products.js.map +1 -1
- package/dist/tools/toprocess.d.ts.map +1 -1
- package/dist/tools/toprocess.js +16 -12
- package/dist/tools/toprocess.js.map +1 -1
- package/dist/tools/utils.d.ts +35 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +63 -0
- package/dist/tools/utils.js.map +1 -0
- package/dist/tools/workflows.d.ts.map +1 -1
- package/dist/tools/workflows.js +71 -69
- package/dist/tools/workflows.js.map +1 -1
- package/package.json +46 -30
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
|
-
##
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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]
|
package/dist/api/client.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/api/client.js
CHANGED
|
@@ -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
|
|
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)
|
package/dist/api/client.js.map
CHANGED
|
@@ -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;
|
|
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
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
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:
|
|
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;
|
|
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;
|
|
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"}
|
package/dist/tools/documents.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
46
|
-
|
|
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
|
|
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":";;
|
|
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;
|
|
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"}
|
package/dist/tools/financial.js
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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 '
|
|
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 '
|
|
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
|
|
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
|
|
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
|
-
|
|
70
|
-
|
|
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
|
|
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
|
|
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.", {
|
|
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
|
|
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
|
-
|
|
120
|
-
|
|
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":";;
|
|
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;
|
|
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"}
|