@codemill-solutions/yuki-mcp 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +59 -15
- package/dist/index.js +8 -4
- package/dist/index.js.map +1 -1
- package/dist/tools/accounting-info.d.ts +19 -0
- package/dist/tools/accounting-info.d.ts.map +1 -0
- package/dist/tools/accounting-info.js +366 -0
- package/dist/tools/accounting-info.js.map +1 -0
- package/dist/tools/accounting.d.ts +6 -0
- package/dist/tools/accounting.d.ts.map +1 -1
- package/dist/tools/accounting.js +121 -0
- package/dist/tools/accounting.js.map +1 -1
- package/dist/tools/administrations.d.ts +10 -0
- package/dist/tools/administrations.d.ts.map +1 -1
- package/dist/tools/administrations.js +46 -0
- package/dist/tools/administrations.js.map +1 -1
- package/dist/tools/documents.d.ts.map +1 -1
- package/dist/tools/documents.js +369 -0
- package/dist/tools/documents.js.map +1 -1
- package/dist/yuki-client.d.ts.map +1 -1
- package/dist/yuki-client.js +23 -3
- package/dist/yuki-client.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -89,13 +89,14 @@ Add to your MCP host configuration (e.g. `claude_desktop_config.json`):
|
|
|
89
89
|
|
|
90
90
|
---
|
|
91
91
|
|
|
92
|
-
## Available tools
|
|
92
|
+
## Available tools (29)
|
|
93
93
|
|
|
94
94
|
### Administrations
|
|
95
95
|
|
|
96
96
|
| Tool | Description |
|
|
97
97
|
|------|-------------|
|
|
98
98
|
| `get_administrations` | List all administrations (companies) for this API key. **Run this first** to find the correct `administrationId`. |
|
|
99
|
+
| `get_administration_id` | Look up an administration's GUID by its exact name. Useful when you know the name but not the GUID. |
|
|
99
100
|
|
|
100
101
|
### Relations
|
|
101
102
|
|
|
@@ -130,7 +131,21 @@ Add to your MCP host configuration (e.g. `claude_desktop_config.json`):
|
|
|
130
131
|
|
|
131
132
|
| Tool | Key parameters | Description |
|
|
132
133
|
|------|----------------|-------------|
|
|
133
|
-
| `get_gl_accounts` | `date?` | Retrieve all GL accounts with their balance at a given date. Use this to find
|
|
134
|
+
| `get_gl_accounts` | `date?` | Retrieve all GL accounts with their balance at a given date (commercial view). Use this to find account codes before calling `get_transactions`. |
|
|
135
|
+
| `get_gl_accounts_fiscal` | `date?` | Same as `get_gl_accounts` but including fiscal corrections. Use for balance sheets and P&L views that must match Yuki's fiscal reports. |
|
|
136
|
+
| `get_net_revenue` | `startDate`, `endDate`, `fiscal?` | Retrieve net revenue (netto-omzet) for a date range. Set `fiscal=true` to include fiscal corrections. |
|
|
137
|
+
|
|
138
|
+
### Accounting info
|
|
139
|
+
|
|
140
|
+
Richer read-only views from the `AccountingInfo.asmx` service — not available through the standard `Accounting.asmx`.
|
|
141
|
+
|
|
142
|
+
| Tool | Key parameters | Description |
|
|
143
|
+
|------|----------------|-------------|
|
|
144
|
+
| `get_gl_account_scheme` | — | Retrieve the complete GL account scheme (rekeningschema): all codes with type, subtype, description, and active/inactive status. Use to validate GL codes or build account pickers. |
|
|
145
|
+
| `get_period_table` | `yearId` | Retrieve the fiscal period table for a year: period numbers, names, and date ranges. Use to translate transaction dates into human-readable period names for reports. |
|
|
146
|
+
| `get_gl_transactions_detailed` | `startDate`, `endDate`, `glAccountCode?`, `financialMode?` | Detailed transaction listing with document type, archive folder, fiscal period ID, project code, and mutation user. More complete than `get_transactions`. Leave `glAccountCode` empty for all accounts. |
|
|
147
|
+
| `get_transaction_document` | `transactionId` | Download the source PDF for a booked transaction as base64. Use the `id` or `hID` from `get_gl_transactions_detailed`. |
|
|
148
|
+
| `get_start_balances` | `yearId`, `financialMode?` | Retrieve opening balances (beginbalansen) per GL account for a fiscal year. |
|
|
134
149
|
|
|
135
150
|
### Documents
|
|
136
151
|
|
|
@@ -139,6 +154,11 @@ Add to your MCP host configuration (e.g. `claude_desktop_config.json`):
|
|
|
139
154
|
| `upload_document` | `fileName`, `dataBase64`, `folder?`, `amount?` | Upload a PDF to the Yuki archive by passing its content as a base64 string. Use `get_document_folders` first to find the right folder ID. |
|
|
140
155
|
| `upload_document_from_path` | `filePath`, `fileName?`, `folder?`, `amount?` | Upload a PDF from a local file path. Reads and encodes the file internally — preferred over `upload_document` when the file is available on disk. Validates that the file exists and is a valid PDF before uploading. |
|
|
141
156
|
| `get_document_folders` | — | List all archive folders available in the administration. |
|
|
157
|
+
| `list_documents` | `folderId` | List documents in a specific archive folder. Returns document IDs, file names, dates, and amounts. |
|
|
158
|
+
| `search_documents` | `searchText` | Full-text search across all archived documents (file names, amounts, OCR content). |
|
|
159
|
+
| `get_document` | `documentId` | Retrieve metadata for a single archived document by its ID (name, folder, date, amount, status). |
|
|
160
|
+
| `download_document` | `documentId` | Download an archived document as a base64-encoded string. |
|
|
161
|
+
| `get_cost_categories` | — | List available GL cost categories for use as the `costCategory` parameter in upload tools. |
|
|
142
162
|
|
|
143
163
|
### Backoffice
|
|
144
164
|
|
|
@@ -188,20 +208,25 @@ Available scenarios: `get-administrations`, `search-relations`, `outstanding-inv
|
|
|
188
208
|
|
|
189
209
|
```
|
|
190
210
|
src/
|
|
191
|
-
├── index.ts
|
|
192
|
-
├── yuki-client.ts
|
|
211
|
+
├── index.ts # Entry point — loads env, registers tools, starts stdio transport
|
|
212
|
+
├── yuki-client.ts # SOAP client: envelope builder, axios HTTP, fast-xml-parser, XmlValue
|
|
193
213
|
└── tools/
|
|
194
|
-
├── administrations.ts
|
|
195
|
-
├── relations.ts
|
|
196
|
-
├── invoices.ts
|
|
197
|
-
│
|
|
198
|
-
├── transactions.ts
|
|
199
|
-
├── accounting.ts
|
|
200
|
-
├──
|
|
201
|
-
|
|
214
|
+
├── administrations.ts # get_administrations, get_administration_id
|
|
215
|
+
├── relations.ts # search_relations, upsert_contact
|
|
216
|
+
├── invoices.ts # get_sales_invoices, get_purchase_invoices,
|
|
217
|
+
│ # process_sales_invoice, process_purchase_invoice
|
|
218
|
+
├── transactions.ts # get_transactions, get_transaction_details, process_journal
|
|
219
|
+
├── accounting.ts # get_gl_accounts, get_gl_accounts_fiscal, get_net_revenue
|
|
220
|
+
├── accounting-info.ts # get_gl_account_scheme, get_period_table,
|
|
221
|
+
│ # get_gl_transactions_detailed, get_transaction_document,
|
|
222
|
+
│ # get_start_balances
|
|
223
|
+
├── documents.ts # upload_document, upload_document_from_path,
|
|
224
|
+
│ # get_document_folders, list_documents, search_documents,
|
|
225
|
+
│ # get_document, download_document, get_cost_categories
|
|
226
|
+
└── backoffice.ts # get_workflow, get_outstanding_questions
|
|
202
227
|
|
|
203
228
|
scripts/
|
|
204
|
-
└── test-agent.ts
|
|
229
|
+
└── test-agent.ts # Agent test harness (Claude + MCP client loop)
|
|
205
230
|
```
|
|
206
231
|
|
|
207
232
|
### Auth flow
|
|
@@ -213,7 +238,7 @@ Yuki uses a two-step authentication pattern:
|
|
|
213
238
|
|
|
214
239
|
`YukiClient.getSessionID()` handles this transparently and caches the session for the lifetime of the process.
|
|
215
240
|
|
|
216
|
-
> **Note:** Parameter casing differs across Yuki's services — `sessionId` (lowercase d) on `Sales.asmx` and `Purchase.asmx`; `sessionID` (uppercase D) on `Accounting.asmx`, `Contact.asmx`, and `Archive.asmx`. This is handled per-tool.
|
|
241
|
+
> **Note:** Parameter casing differs across Yuki's services — `sessionId` (lowercase d) on `Sales.asmx` and `Purchase.asmx`; `sessionID` (uppercase D) on `Accounting.asmx`, `AccountingInfo.asmx`, `Contact.asmx`, and `Archive.asmx`. This is handled per-tool.
|
|
217
242
|
|
|
218
243
|
### XML documents
|
|
219
244
|
|
|
@@ -223,7 +248,7 @@ Write tools (`process_sales_invoice`, `process_purchase_invoice`, `process_journ
|
|
|
223
248
|
|
|
224
249
|
## Rate limits
|
|
225
250
|
|
|
226
|
-
Yuki enforces **1,000 API requests per day
|
|
251
|
+
Yuki enforces **1,000 API requests per day** (upgradeable to 5,000–10,000). Each tool call is 1 request. The session ID is cached so `Authenticate` is only called once per server process, not once per tool call.
|
|
227
252
|
|
|
228
253
|
Design agent workflows to fetch broad lists once and reference them from the agent's context window rather than re-fetching on every step.
|
|
229
254
|
|
|
@@ -243,6 +268,25 @@ Design agent workflows to fetch broad lists once and reference them from the age
|
|
|
243
268
|
|
|
244
269
|
---
|
|
245
270
|
|
|
271
|
+
## About CodeMill Solutions
|
|
272
|
+
|
|
273
|
+
[CodeMill Solutions](https://codemill.dev/en/) is a Dutch software company based in the Netherlands. We build smart, scalable, and customized solutions that help organizations grow, optimize processes, and realize their digital ambitions.
|
|
274
|
+
|
|
275
|
+
Our services include:
|
|
276
|
+
|
|
277
|
+
- **Custom applications** — portals, dashboards, business software, and fully tailored platforms that truly add value.
|
|
278
|
+
- **API integrations** — connecting your application with other systems and external platforms via smart API connections.
|
|
279
|
+
- **Mobile apps** — iOS and Android apps as a logical extension of your web application(s).
|
|
280
|
+
|
|
281
|
+
`yuki-mcp` is one of our open-source integrations, making Yuki's accounting platform accessible to AI agents through the Model Context Protocol.
|
|
282
|
+
|
|
283
|
+
📧 [info@codemill.dev](mailto:info@codemill.dev)
|
|
284
|
+
🌐 [codemill.dev](https://codemill.dev/en/)
|
|
285
|
+
💼 [LinkedIn](https://www.linkedin.com/company/codemill-solutions/)
|
|
286
|
+
🐙 [GitHub](https://github.com/CodeMill-Solutions)
|
|
287
|
+
|
|
288
|
+
---
|
|
289
|
+
|
|
246
290
|
## License
|
|
247
291
|
|
|
248
292
|
MIT — see [LICENSE](./LICENSE).
|
package/dist/index.js
CHANGED
|
@@ -3,11 +3,12 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
4
|
import { YukiClient } from './yuki-client.js';
|
|
5
5
|
// Read tools
|
|
6
|
-
import { registerAdministrationTools } from './tools/administrations.js';
|
|
6
|
+
import { registerAdministrationTools, registerAdministrationLookupTools } from './tools/administrations.js';
|
|
7
7
|
import { registerRelationTools } from './tools/relations.js';
|
|
8
8
|
import { registerInvoiceTools } from './tools/invoices.js';
|
|
9
9
|
import { registerTransactionTools } from './tools/transactions.js';
|
|
10
|
-
import { registerAccountingTools } from './tools/accounting.js';
|
|
10
|
+
import { registerAccountingTools, registerAccountingExtendedTools } from './tools/accounting.js';
|
|
11
|
+
import { registerAccountingInfoTools } from './tools/accounting-info.js';
|
|
11
12
|
// Write tools
|
|
12
13
|
import { registerInvoiceWriteTools } from './tools/invoices.js';
|
|
13
14
|
import { registerJournalWriteTools } from './tools/transactions.js';
|
|
@@ -29,14 +30,17 @@ const yukiClient = new YukiClient(apiKey, domainId);
|
|
|
29
30
|
// ── MCP server ────────────────────────────────────────────────────────────────
|
|
30
31
|
const server = new McpServer({
|
|
31
32
|
name: 'yuki-mcp',
|
|
32
|
-
version: '1.
|
|
33
|
+
version: '1.2.0',
|
|
33
34
|
});
|
|
34
35
|
// ── Read tools ────────────────────────────────────────────────────────────────
|
|
35
36
|
registerAdministrationTools(server, yukiClient);
|
|
37
|
+
registerAdministrationLookupTools(server, yukiClient);
|
|
36
38
|
registerRelationTools(server, yukiClient);
|
|
37
39
|
registerInvoiceTools(server, yukiClient);
|
|
38
40
|
registerTransactionTools(server, yukiClient);
|
|
39
41
|
registerAccountingTools(server, yukiClient);
|
|
42
|
+
registerAccountingExtendedTools(server, yukiClient);
|
|
43
|
+
registerAccountingInfoTools(server, yukiClient);
|
|
40
44
|
// ── Write tools ───────────────────────────────────────────────────────────────
|
|
41
45
|
registerInvoiceWriteTools(server, yukiClient);
|
|
42
46
|
registerJournalWriteTools(server, yukiClient);
|
|
@@ -48,6 +52,6 @@ registerBackofficeTools(server, yukiClient);
|
|
|
48
52
|
const transport = new StdioServerTransport();
|
|
49
53
|
await server.connect(transport);
|
|
50
54
|
// Log startup info to stderr only (stdout is reserved for JSON-RPC)
|
|
51
|
-
process.stderr.write(`[yuki-mcp] Server started —
|
|
55
|
+
process.stderr.write(`[yuki-mcp] Server started — 29 tools registered. ` +
|
|
52
56
|
`Domain ID: ${domainId || '(none — run get_administrations to discover)'}\n`);
|
|
53
57
|
//# 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":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,aAAa;AACb,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AACvB,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,aAAa;AACb,OAAO,EAAE,2BAA2B,EAAE,iCAAiC,EAAE,MAAM,4BAA4B,CAAC;AAC5G,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,yBAAyB,CAAC;AACnE,OAAO,EAAE,uBAAuB,EAAE,+BAA+B,EAAE,MAAM,uBAAuB,CAAC;AACjG,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AAEzE,cAAc;AACd,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACpE,OAAO,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,mBAAmB;AACnB,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,iFAAiF;AAEjF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;AAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,EAAE,CAAC;AAErD,IAAI,CAAC,MAAM,EAAE,CAAC;IACZ,6EAA6E;IAC7E,sDAAsD;IACtD,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;IAC1F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,iFAAiF;AAEjF,MAAM,UAAU,GAAG,IAAI,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AAEpD,iFAAiF;AAEjF,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAC3B,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC;AAEH,iFAAiF;AACjF,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAChD,iCAAiC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACtD,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC1C,oBAAoB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACzC,wBAAwB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC7C,uBAAuB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC5C,+BAA+B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACpD,2BAA2B,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEhD,iFAAiF;AACjF,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC9C,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC9C,yBAAyB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAC9C,qBAAqB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAE1C,iFAAiF;AACjF,uBAAuB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAE5C,iFAAiF;AAEjF,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;AAE7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AAEhC,oEAAoE;AACpE,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,mDAAmD;IACjD,cAAc,QAAQ,IAAI,8CAA8C,IAAI,CAC/E,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
2
|
+
import { YukiClient } from '../yuki-client.js';
|
|
3
|
+
/**
|
|
4
|
+
* Register tools for the Yuki AccountingInfo service.
|
|
5
|
+
*
|
|
6
|
+
* AccountingInfo.asmx provides richer read-only views of accounting data
|
|
7
|
+
* that are not available through the main Accounting.asmx service:
|
|
8
|
+
*
|
|
9
|
+
* - Full GL account scheme (codes, types, subtypes, active/inactive)
|
|
10
|
+
* - Fiscal period table (period names and date ranges per year)
|
|
11
|
+
* - Detailed transaction listing (includes document type, folder, period, project)
|
|
12
|
+
* - Transaction document download (retrieve the source PDF as base64)
|
|
13
|
+
* - Opening balances per GL account per fiscal year
|
|
14
|
+
*
|
|
15
|
+
* Yuki service: AccountingInfo.asmx
|
|
16
|
+
* Note: uses sessionID / administrationID (uppercase D), same as Accounting.asmx.
|
|
17
|
+
*/
|
|
18
|
+
export declare function registerAccountingInfoTools(server: McpServer, client: YukiClient): void;
|
|
19
|
+
//# sourceMappingURL=accounting-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounting-info.d.ts","sourceRoot":"","sources":["../../src/tools/accounting-info.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAsXvF"}
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
/**
|
|
3
|
+
* Register tools for the Yuki AccountingInfo service.
|
|
4
|
+
*
|
|
5
|
+
* AccountingInfo.asmx provides richer read-only views of accounting data
|
|
6
|
+
* that are not available through the main Accounting.asmx service:
|
|
7
|
+
*
|
|
8
|
+
* - Full GL account scheme (codes, types, subtypes, active/inactive)
|
|
9
|
+
* - Fiscal period table (period names and date ranges per year)
|
|
10
|
+
* - Detailed transaction listing (includes document type, folder, period, project)
|
|
11
|
+
* - Transaction document download (retrieve the source PDF as base64)
|
|
12
|
+
* - Opening balances per GL account per fiscal year
|
|
13
|
+
*
|
|
14
|
+
* Yuki service: AccountingInfo.asmx
|
|
15
|
+
* Note: uses sessionID / administrationID (uppercase D), same as Accounting.asmx.
|
|
16
|
+
*/
|
|
17
|
+
export function registerAccountingInfoTools(server, client) {
|
|
18
|
+
// ── get_gl_account_scheme ────────────────────────────────────────────────────
|
|
19
|
+
/**
|
|
20
|
+
* get_gl_account_scheme
|
|
21
|
+
*
|
|
22
|
+
* Retrieve the complete GL account scheme (rekeningschema) for an
|
|
23
|
+
* administration: all account codes with their type, subtype, and
|
|
24
|
+
* active/inactive status.
|
|
25
|
+
*
|
|
26
|
+
* Use this instead of get_gl_accounts when you need the full account
|
|
27
|
+
* definition (type, subtype, enabled flag) rather than current balances.
|
|
28
|
+
* Useful for building GL account pickers, validating codes before booking,
|
|
29
|
+
* or understanding the chart-of-accounts structure.
|
|
30
|
+
*
|
|
31
|
+
* Rate cost: 1 request.
|
|
32
|
+
*/
|
|
33
|
+
server.registerTool('get_gl_account_scheme', {
|
|
34
|
+
description: 'Retrieve the complete GL account scheme (rekeningschema) for an administration. ' +
|
|
35
|
+
'Returns every account code with its type, subtype, description, and active/inactive status. ' +
|
|
36
|
+
'Use this to validate GL codes before booking or to build account pickers. ' +
|
|
37
|
+
'For current balances use get_gl_accounts instead.',
|
|
38
|
+
inputSchema: {
|
|
39
|
+
administrationId: z
|
|
40
|
+
.string()
|
|
41
|
+
.optional()
|
|
42
|
+
.describe('Administration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.'),
|
|
43
|
+
},
|
|
44
|
+
}, async ({ administrationId }) => {
|
|
45
|
+
try {
|
|
46
|
+
const adminId = administrationId ?? client.defaultDomainId;
|
|
47
|
+
if (!adminId)
|
|
48
|
+
throw new Error('administrationId is required (or set YUKI_DOMAIN_ID env var)');
|
|
49
|
+
const sessionID = await client.getSessionID();
|
|
50
|
+
const result = await client.callSoap({
|
|
51
|
+
service: 'AccountingInfo.asmx',
|
|
52
|
+
method: 'GetGLAccountScheme',
|
|
53
|
+
params: { sessionID, administrationID: adminId },
|
|
54
|
+
});
|
|
55
|
+
const accounts = normalizeList(result, ['GLAccounts', 'Accounts'], ['GLAccount', 'Account', 'Row']);
|
|
56
|
+
return {
|
|
57
|
+
content: [
|
|
58
|
+
{
|
|
59
|
+
type: 'text',
|
|
60
|
+
text: JSON.stringify({ success: true, count: accounts.length, accounts }, null, 2),
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
return errorResponse(err);
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
// ── get_period_table ─────────────────────────────────────────────────────────
|
|
70
|
+
/**
|
|
71
|
+
* get_period_table
|
|
72
|
+
*
|
|
73
|
+
* Retrieve the fiscal period table for a given year: period names, numbers,
|
|
74
|
+
* and the date range each period covers.
|
|
75
|
+
*
|
|
76
|
+
* This is essential for Theun's depreciation and salary reports, which need
|
|
77
|
+
* to display "the last period in which a booking was made" in human-readable
|
|
78
|
+
* form (e.g. "Periode 3 · maart 2025") rather than a raw date.
|
|
79
|
+
*
|
|
80
|
+
* Use the returned period names to annotate gl_balances and
|
|
81
|
+
* workflow_snapshots in the monorepo dashboard.
|
|
82
|
+
*
|
|
83
|
+
* Rate cost: 1 request.
|
|
84
|
+
*/
|
|
85
|
+
server.registerTool('get_period_table', {
|
|
86
|
+
description: 'Retrieve the fiscal period table (periodeoverzicht) for a given fiscal year. ' +
|
|
87
|
+
'Returns period numbers, names, and start/end dates. ' +
|
|
88
|
+
'Use this to translate a transaction date into a period name for reports ' +
|
|
89
|
+
'(e.g. "tot welke periode zijn afschrijvingen verwerkt").',
|
|
90
|
+
inputSchema: {
|
|
91
|
+
yearId: z
|
|
92
|
+
.number()
|
|
93
|
+
.int()
|
|
94
|
+
.describe('Fiscal year as a 4-digit integer (e.g. 2025).'),
|
|
95
|
+
administrationId: z
|
|
96
|
+
.string()
|
|
97
|
+
.optional()
|
|
98
|
+
.describe('Administration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.'),
|
|
99
|
+
},
|
|
100
|
+
}, async ({ yearId, administrationId }) => {
|
|
101
|
+
try {
|
|
102
|
+
const adminId = administrationId ?? client.defaultDomainId;
|
|
103
|
+
if (!adminId)
|
|
104
|
+
throw new Error('administrationId is required (or set YUKI_DOMAIN_ID env var)');
|
|
105
|
+
const sessionID = await client.getSessionID();
|
|
106
|
+
const result = await client.callSoap({
|
|
107
|
+
service: 'AccountingInfo.asmx',
|
|
108
|
+
method: 'GetPeriodDateTable',
|
|
109
|
+
params: { sessionID, administrationID: adminId, yearID: yearId },
|
|
110
|
+
});
|
|
111
|
+
const periods = normalizeList(result, ['Periods', 'AdministrationPeriods'], ['Period', 'AdministrationPeriod', 'Row']);
|
|
112
|
+
return {
|
|
113
|
+
content: [
|
|
114
|
+
{
|
|
115
|
+
type: 'text',
|
|
116
|
+
text: JSON.stringify({ success: true, yearId, count: periods.length, periods }, null, 2),
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
return errorResponse(err);
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
// ── get_gl_transactions_detailed ────────────────────────────────────────────
|
|
126
|
+
/**
|
|
127
|
+
* get_gl_transactions_detailed
|
|
128
|
+
*
|
|
129
|
+
* Retrieve a detailed transaction listing for a GL account (or all accounts)
|
|
130
|
+
* within a date range. Returns richer data than get_transactions:
|
|
131
|
+
* document type, archive folder, fiscal period ID, project code,
|
|
132
|
+
* mutation user, and company name.
|
|
133
|
+
*
|
|
134
|
+
* Use this when you need to determine *when* a specific type of booking
|
|
135
|
+
* (e.g. depreciation, salary journal) was last made on an account, or
|
|
136
|
+
* when you need to link a transaction back to its source document.
|
|
137
|
+
*
|
|
138
|
+
* financialMode: '1' = fiscal (default, matches Yuki's fiscal year),
|
|
139
|
+
* '0' = commercial (calendar year).
|
|
140
|
+
*
|
|
141
|
+
* Rate cost: 1 request.
|
|
142
|
+
*/
|
|
143
|
+
server.registerTool('get_gl_transactions_detailed', {
|
|
144
|
+
description: 'Retrieve detailed transaction data for a GL account within a date range. ' +
|
|
145
|
+
'Returns richer fields than get_transactions: document type, archive folder, ' +
|
|
146
|
+
'fiscal period ID, project code, and mutation user. ' +
|
|
147
|
+
'Leave glAccountCode empty to fetch all accounts. ' +
|
|
148
|
+
'Use this to find the last period in which a depreciation or salary booking was made.',
|
|
149
|
+
inputSchema: {
|
|
150
|
+
startDate: z.string().describe('Start date in YYYY-MM-DD format (inclusive)'),
|
|
151
|
+
endDate: z.string().describe('End date in YYYY-MM-DD format (inclusive)'),
|
|
152
|
+
glAccountCode: z
|
|
153
|
+
.string()
|
|
154
|
+
.optional()
|
|
155
|
+
.describe('GL account code to filter (e.g. "0300" for depreciation). Leave empty for all accounts.'),
|
|
156
|
+
financialMode: z
|
|
157
|
+
.enum(['0', '1'])
|
|
158
|
+
.optional()
|
|
159
|
+
.default('1')
|
|
160
|
+
.describe("Financial mode: '1' = fiscal (default), '0' = commercial."),
|
|
161
|
+
administrationId: z
|
|
162
|
+
.string()
|
|
163
|
+
.optional()
|
|
164
|
+
.describe('Administration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.'),
|
|
165
|
+
},
|
|
166
|
+
}, async ({ startDate, endDate, glAccountCode, financialMode, administrationId }) => {
|
|
167
|
+
try {
|
|
168
|
+
const adminId = administrationId ?? client.defaultDomainId;
|
|
169
|
+
if (!adminId)
|
|
170
|
+
throw new Error('administrationId is required (or set YUKI_DOMAIN_ID env var)');
|
|
171
|
+
const sessionID = await client.getSessionID();
|
|
172
|
+
const result = await client.callSoap({
|
|
173
|
+
service: 'AccountingInfo.asmx',
|
|
174
|
+
method: 'GetTransactionDetails',
|
|
175
|
+
params: {
|
|
176
|
+
sessionID,
|
|
177
|
+
administrationID: adminId,
|
|
178
|
+
GLAccountCode: glAccountCode ?? '',
|
|
179
|
+
StartDate: startDate,
|
|
180
|
+
EndDate: endDate,
|
|
181
|
+
financialMode: financialMode ?? '1',
|
|
182
|
+
},
|
|
183
|
+
});
|
|
184
|
+
const transactions = normalizeList(result, ['TransactionInfos', 'Transactions'], ['TransactionInfo', 'Transaction', 'Row']);
|
|
185
|
+
return {
|
|
186
|
+
content: [
|
|
187
|
+
{
|
|
188
|
+
type: 'text',
|
|
189
|
+
text: JSON.stringify({
|
|
190
|
+
success: true,
|
|
191
|
+
count: transactions.length,
|
|
192
|
+
period: { startDate, endDate },
|
|
193
|
+
glAccountCode: glAccountCode ?? '(all)',
|
|
194
|
+
financialMode,
|
|
195
|
+
transactions,
|
|
196
|
+
}, null, 2),
|
|
197
|
+
},
|
|
198
|
+
],
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
catch (err) {
|
|
202
|
+
return errorResponse(err);
|
|
203
|
+
}
|
|
204
|
+
});
|
|
205
|
+
// ── get_transaction_document ─────────────────────────────────────────────────
|
|
206
|
+
/**
|
|
207
|
+
* get_transaction_document
|
|
208
|
+
*
|
|
209
|
+
* Download the source document (PDF) associated with a transaction in Yuki,
|
|
210
|
+
* returned as a base64-encoded string.
|
|
211
|
+
*
|
|
212
|
+
* Use the transactionId from a get_gl_transactions_detailed response (the `id`
|
|
213
|
+
* or `hID` field). Useful for retrieving the original invoice PDF from a
|
|
214
|
+
* booked transaction for verification or re-archival.
|
|
215
|
+
*
|
|
216
|
+
* Rate cost: 1 request.
|
|
217
|
+
*/
|
|
218
|
+
server.registerTool('get_transaction_document', {
|
|
219
|
+
description: 'Download the source document (PDF) for a booked transaction, returned as base64. ' +
|
|
220
|
+
'Use the transaction ID from get_gl_transactions_detailed. ' +
|
|
221
|
+
'Returns fileName and base64-encoded fileData.',
|
|
222
|
+
inputSchema: {
|
|
223
|
+
transactionId: z
|
|
224
|
+
.string()
|
|
225
|
+
.describe('Transaction ID (from the id or hID field in get_gl_transactions_detailed).'),
|
|
226
|
+
administrationId: z
|
|
227
|
+
.string()
|
|
228
|
+
.optional()
|
|
229
|
+
.describe('Administration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.'),
|
|
230
|
+
},
|
|
231
|
+
}, async ({ transactionId, administrationId }) => {
|
|
232
|
+
try {
|
|
233
|
+
const adminId = administrationId ?? client.defaultDomainId;
|
|
234
|
+
if (!adminId)
|
|
235
|
+
throw new Error('administrationId is required (or set YUKI_DOMAIN_ID env var)');
|
|
236
|
+
const sessionID = await client.getSessionID();
|
|
237
|
+
const result = await client.callSoap({
|
|
238
|
+
service: 'AccountingInfo.asmx',
|
|
239
|
+
method: 'GetTransactionDocument',
|
|
240
|
+
params: { sessionID, administrationID: adminId, transactionID: transactionId },
|
|
241
|
+
});
|
|
242
|
+
// Result shape: { fileName: string, filedata: string (base64) }
|
|
243
|
+
const doc = result;
|
|
244
|
+
const fileName = doc['fileName'] ?? doc['FileName'] ?? null;
|
|
245
|
+
const fileData = doc['filedata'] ?? doc['fileData'] ?? doc['FileData'] ?? null;
|
|
246
|
+
return {
|
|
247
|
+
content: [
|
|
248
|
+
{
|
|
249
|
+
type: 'text',
|
|
250
|
+
text: JSON.stringify({
|
|
251
|
+
success: true,
|
|
252
|
+
transactionId,
|
|
253
|
+
fileName,
|
|
254
|
+
fileDataBase64: fileData,
|
|
255
|
+
}, null, 2),
|
|
256
|
+
},
|
|
257
|
+
],
|
|
258
|
+
};
|
|
259
|
+
}
|
|
260
|
+
catch (err) {
|
|
261
|
+
return errorResponse(err);
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
// ── get_start_balances ───────────────────────────────────────────────────────
|
|
265
|
+
/**
|
|
266
|
+
* get_start_balances
|
|
267
|
+
*
|
|
268
|
+
* Retrieve the opening balances (beginbalansen) per GL account for a
|
|
269
|
+
* specific fiscal year.
|
|
270
|
+
*
|
|
271
|
+
* Use this when building year-over-year comparisons or verifying that
|
|
272
|
+
* opening entries match the closing balances of the prior year.
|
|
273
|
+
*
|
|
274
|
+
* financialMode: '1' = fiscal (default), '0' = commercial.
|
|
275
|
+
*
|
|
276
|
+
* Rate cost: 1 request.
|
|
277
|
+
*/
|
|
278
|
+
server.registerTool('get_start_balances', {
|
|
279
|
+
description: 'Retrieve opening balances (beginbalansen) per GL account for a fiscal year. ' +
|
|
280
|
+
'Returns accountID, accountDescription, and startBalance for each GL account. ' +
|
|
281
|
+
'Use this for year-over-year balance verification.',
|
|
282
|
+
inputSchema: {
|
|
283
|
+
yearId: z
|
|
284
|
+
.number()
|
|
285
|
+
.int()
|
|
286
|
+
.describe('Fiscal year as a 4-digit integer (e.g. 2025).'),
|
|
287
|
+
financialMode: z
|
|
288
|
+
.enum(['0', '1'])
|
|
289
|
+
.optional()
|
|
290
|
+
.default('1')
|
|
291
|
+
.describe("Financial mode: '1' = fiscal (default), '0' = commercial."),
|
|
292
|
+
administrationId: z
|
|
293
|
+
.string()
|
|
294
|
+
.optional()
|
|
295
|
+
.describe('Administration ID (GUID). Defaults to YUKI_DOMAIN_ID env var.'),
|
|
296
|
+
},
|
|
297
|
+
}, async ({ yearId, financialMode, administrationId }) => {
|
|
298
|
+
try {
|
|
299
|
+
const adminId = administrationId ?? client.defaultDomainId;
|
|
300
|
+
if (!adminId)
|
|
301
|
+
throw new Error('administrationId is required (or set YUKI_DOMAIN_ID env var)');
|
|
302
|
+
const sessionID = await client.getSessionID();
|
|
303
|
+
const result = await client.callSoap({
|
|
304
|
+
service: 'AccountingInfo.asmx',
|
|
305
|
+
method: 'GetStartBalanceByGLAccount',
|
|
306
|
+
params: {
|
|
307
|
+
sessionID,
|
|
308
|
+
administrationID: adminId,
|
|
309
|
+
yearID: yearId,
|
|
310
|
+
financialMode: financialMode ?? '1',
|
|
311
|
+
},
|
|
312
|
+
});
|
|
313
|
+
const balances = normalizeList(result, ['StartBalances', 'AccountStartBalances'], ['StartBalance', 'AccountStartBalance', 'Row']);
|
|
314
|
+
return {
|
|
315
|
+
content: [
|
|
316
|
+
{
|
|
317
|
+
type: 'text',
|
|
318
|
+
text: JSON.stringify({ success: true, yearId, financialMode, count: balances.length, balances }, null, 2),
|
|
319
|
+
},
|
|
320
|
+
],
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
catch (err) {
|
|
324
|
+
return errorResponse(err);
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
}
|
|
328
|
+
// ── Shared helpers ─────────────────────────────────────────────────────────────
|
|
329
|
+
/** Generic list normaliser: tries wrapper tags then item tags, falls back to raw. */
|
|
330
|
+
function normalizeList(result, wrappers, itemTags) {
|
|
331
|
+
if (!result)
|
|
332
|
+
return [];
|
|
333
|
+
if (Array.isArray(result))
|
|
334
|
+
return result;
|
|
335
|
+
const rec = result;
|
|
336
|
+
for (const wrapper of wrappers) {
|
|
337
|
+
const c = rec[wrapper];
|
|
338
|
+
if (!c)
|
|
339
|
+
continue;
|
|
340
|
+
if (Array.isArray(c))
|
|
341
|
+
return c;
|
|
342
|
+
const inner = c;
|
|
343
|
+
for (const tag of itemTags) {
|
|
344
|
+
if (Array.isArray(inner[tag]))
|
|
345
|
+
return inner[tag];
|
|
346
|
+
if (inner[tag])
|
|
347
|
+
return [inner[tag]];
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
for (const tag of itemTags) {
|
|
351
|
+
if (Array.isArray(rec[tag]))
|
|
352
|
+
return rec[tag];
|
|
353
|
+
if (rec[tag])
|
|
354
|
+
return [rec[tag]];
|
|
355
|
+
}
|
|
356
|
+
return [result];
|
|
357
|
+
}
|
|
358
|
+
/** Uniform error response shape. */
|
|
359
|
+
function errorResponse(err) {
|
|
360
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
361
|
+
return {
|
|
362
|
+
content: [{ type: 'text', text: JSON.stringify({ success: false, error: message }, null, 2) }],
|
|
363
|
+
isError: true,
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
//# sourceMappingURL=accounting-info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accounting-info.js","sourceRoot":"","sources":["../../src/tools/accounting-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,4 +10,10 @@ import { YukiClient } from '../yuki-client.js';
|
|
|
10
10
|
* Method: GLAccountBalance(sessionID, administrationID, transactionDate)
|
|
11
11
|
*/
|
|
12
12
|
export declare function registerAccountingTools(server: McpServer, client: YukiClient): void;
|
|
13
|
+
/**
|
|
14
|
+
* Register additional accounting tools (fiscal variants and revenue).
|
|
15
|
+
* Called separately from registerAccountingTools so each can be exported
|
|
16
|
+
* and imported individually if needed.
|
|
17
|
+
*/
|
|
18
|
+
export declare function registerAccountingExtendedTools(server: McpServer, client: YukiClient): void;
|
|
13
19
|
//# sourceMappingURL=accounting.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounting.d.ts","sourceRoot":"","sources":["../../src/tools/accounting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"accounting.d.ts","sourceRoot":"","sources":["../../src/tools/accounting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEpE,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAG/C;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAoFnF;AAED;;;;GAIG;AACH,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CA2I3F"}
|