@ekwo-ai/mcp 0.6.0 → 0.8.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 +11 -5
- package/dist/schema.d.ts +1 -1
- package/dist/schema.js +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +1 -1
- package/dist/tools/import-books.d.ts +11 -0
- package/dist/tools/import-books.d.ts.map +1 -1
- package/dist/tools/import-books.js +41 -2
- package/dist/tools/import-books.js.map +1 -1
- package/package.json +4 -4
package/README.md
CHANGED
|
@@ -7,10 +7,16 @@ a payment, pull the VAT return or the French FEC — **as you**, under the row
|
|
|
7
7
|
level security of your own installation.
|
|
8
8
|
|
|
9
9
|
```sh
|
|
10
|
-
npx @ekwo-ai/mcp
|
|
10
|
+
npx -y @ekwo-ai/mcp@latest
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
It speaks MCP over stdio and is started by a client, never by hand.
|
|
13
|
+
It speaks MCP over stdio and is started by a client, never by hand. Keep the
|
|
14
|
+
version in the command: run from inside a clone of the Ekwo repository, a bare
|
|
15
|
+
`npx @ekwo-ai/mcp` finds the workspace package of the same name, which has no
|
|
16
|
+
built command, and answers `ekwo-mcp: command not found`. With `@latest`, `npx`
|
|
17
|
+
fetches the published server wherever it is started. To run the server of the
|
|
18
|
+
clone itself, build it (`npm run build`) and start
|
|
19
|
+
`node packages/mcp/dist/bin.js`.
|
|
14
20
|
|
|
15
21
|
## What it is, and what it is not
|
|
16
22
|
|
|
@@ -44,7 +50,7 @@ Three things it will never do:
|
|
|
44
50
|
"mcpServers": {
|
|
45
51
|
"ekwo": {
|
|
46
52
|
"command": "npx",
|
|
47
|
-
"args": ["-y", "@ekwo-ai/mcp"],
|
|
53
|
+
"args": ["-y", "@ekwo-ai/mcp@latest"],
|
|
48
54
|
"env": {
|
|
49
55
|
"SUPABASE_URL": "https://YOURREF.supabase.co",
|
|
50
56
|
"SUPABASE_ANON_KEY": "your anon (publishable) key",
|
|
@@ -163,7 +169,7 @@ Every write names its company explicitly.
|
|
|
163
169
|
| `import_bank_statement` | A statement file (`camt.053`, `coda`, `cfonb120`) into statements and pending lines. Books nothing; the same file twice creates nothing; an unknown account or a statement that does not add up is refused by name, a missing statement is signalled |
|
|
164
170
|
| `lock_period` | Moves the accounting and VAT lock dates. Needs `company.write`. |
|
|
165
171
|
| `opening_balance` | The trial balance of whatever kept the books before, as the opening entry |
|
|
166
|
-
| `import_books` | Books kept elsewhere — a FEC, an export of journal items, a journal report, a trial balance — whole or not at all. `dry_run: true` first: the correspondence proposed for every account and journal, what has no answer, and the import rehearsed by the database and taken back. Then again with the completed `mapping
|
|
172
|
+
| `import_books` | Books kept elsewhere — a FEC, an export of journal items, a journal report, a trial balance — whole or not at all. `dry_run: true` first: the correspondence proposed for every account and journal — `exact` only for the same code the files do not contradict, otherwise `suggested` with its reason, or `none` — what has no answer, and the import rehearsed by the database and taken back. Then again with the completed `mapping`, or `accept_suggestions` once the user has read every suggestion; nothing is posted while one is unconfirmed. Every entry through `post_entry()`; no tax; the same files twice refused, saying when and what. The files travel as text, 256 KiB at most: beyond, the tool answers with the `ekwo import` command that reads them from the disk. `ekwo import` is the same function |
|
|
167
173
|
| `close_fiscal_year` / `reopen_fiscal_year` | Closes a year the way the country pack says, or reverses a close run too early |
|
|
168
174
|
| `create_company` | A company on a country pack, with its chart and its first financial year. An instance-level act |
|
|
169
175
|
| `update_company_profile` | What a company says about itself on its documents |
|
|
@@ -244,7 +250,7 @@ they cannot run: PostgREST and GoTrue. To exercise those, on a project you can
|
|
|
244
250
|
throw away:
|
|
245
251
|
|
|
246
252
|
```sh
|
|
247
|
-
npx ekwo-os init --country BE --org "Scratch" --company "Scratch BV" … # a real project
|
|
253
|
+
npx -y ekwo-os@latest init --country BE --org "Scratch" --company "Scratch BV" … # a real project
|
|
248
254
|
```
|
|
249
255
|
|
|
250
256
|
Then point a client at it — in Claude Desktop, the JSON block above — and:
|
package/dist/schema.d.ts
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
*/
|
|
15
15
|
import { type Backend } from './backend.js';
|
|
16
16
|
/** The oldest schema this server speaks to. */
|
|
17
|
-
export declare const SCHEMA_MIN = "0.
|
|
17
|
+
export declare const SCHEMA_MIN = "0.8.0";
|
|
18
18
|
/** The version the migrations of that database define. */
|
|
19
19
|
export declare function installedSchemaVersion(backend: Backend): Promise<string | undefined>;
|
|
20
20
|
/**
|
package/dist/schema.js
CHANGED
|
@@ -15,7 +15,7 @@
|
|
|
15
15
|
import { schemaIsAtLeast } from '@ekwo-ai/core';
|
|
16
16
|
import { EkwoMcpError } from './backend.js';
|
|
17
17
|
/** The oldest schema this server speaks to. */
|
|
18
|
-
export const SCHEMA_MIN = '0.
|
|
18
|
+
export const SCHEMA_MIN = '0.8.0';
|
|
19
19
|
/** The version the migrations of that database define. */
|
|
20
20
|
export async function installedSchemaVersion(backend) {
|
|
21
21
|
try {
|
package/dist/server.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export declare const SERVER_NAME = "@ekwo-ai/mcp";
|
|
|
18
18
|
* `tests/mcp/surface.test.ts` keeps the two equal, so a release that bumps one
|
|
19
19
|
* and forgets the other fails the build.
|
|
20
20
|
*/
|
|
21
|
-
export declare const SERVER_VERSION = "0.
|
|
21
|
+
export declare const SERVER_VERSION = "0.8.0";
|
|
22
22
|
export interface ServerOptions {
|
|
23
23
|
/**
|
|
24
24
|
* The modules this installation carries, from `public.modules`. Their tools
|
package/dist/server.js
CHANGED
|
@@ -23,7 +23,7 @@ export const SERVER_NAME = '@ekwo-ai/mcp';
|
|
|
23
23
|
* `tests/mcp/surface.test.ts` keeps the two equal, so a release that bumps one
|
|
24
24
|
* and forgets the other fails the build.
|
|
25
25
|
*/
|
|
26
|
-
export const SERVER_VERSION = '0.
|
|
26
|
+
export const SERVER_VERSION = '0.8.0';
|
|
27
27
|
/** Everything a tool returns: JSON, pretty-printed, as one text block. */
|
|
28
28
|
function ok(payload) {
|
|
29
29
|
return { content: [{ type: 'text', text: JSON.stringify(payload, null, 2) }] };
|
|
@@ -25,6 +25,14 @@ export declare const NAMED_SOURCES: {
|
|
|
25
25
|
export declare const NAMED_SOURCE_KEYS: (keyof typeof NAMED_SOURCES)[];
|
|
26
26
|
/** The reader a source names: itself, or the one the software's export is read by. */
|
|
27
27
|
export declare function sourceOf(source: BookSource | keyof typeof NAMED_SOURCES): BookSource;
|
|
28
|
+
/**
|
|
29
|
+
* The most text the tool takes, all files together, in KiB. The files travel
|
|
30
|
+
* inside the conversation, and a model that has to repeat three megabytes of
|
|
31
|
+
* CSV in a tool call truncates them or runs out of room long before the
|
|
32
|
+
* database sees a line. The command line reads the same export from the disk,
|
|
33
|
+
* through the same function, without a limit.
|
|
34
|
+
*/
|
|
35
|
+
export declare const MAX_TEXT_KIB = 256;
|
|
28
36
|
export declare const IMPORT_BOOKS_DESCRIPTION: string;
|
|
29
37
|
export declare const ImportBooksInput: z.ZodObject<{
|
|
30
38
|
company_id: z.ZodString;
|
|
@@ -54,10 +62,13 @@ export declare const ImportBooksInput: z.ZodObject<{
|
|
|
54
62
|
mdy: "mdy";
|
|
55
63
|
ymd: "ymd";
|
|
56
64
|
}>>;
|
|
65
|
+
accept_suggestions: z.ZodOptional<z.ZodBoolean>;
|
|
57
66
|
}, z.core.$strip>;
|
|
58
67
|
/**
|
|
59
68
|
* Books from another system, all of them or none, through `importBooks()` of
|
|
60
69
|
* the core — the function `ekwo import` calls.
|
|
61
70
|
*/
|
|
62
71
|
export declare function importBooksTool(backend: Backend, args: z.infer<typeof ImportBooksInput>): Promise<unknown>;
|
|
72
|
+
/** The `ekwo import` command that does what this call asked, from files on the disk. */
|
|
73
|
+
export declare function cliEquivalent(args: z.infer<typeof ImportBooksInput>): string;
|
|
63
74
|
//# sourceMappingURL=import-books.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-books.d.ts","sourceRoot":"","sources":["../../src/tools/import-books.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"import-books.d.ts","sourceRoot":"","sources":["../../src/tools/import-books.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAwF,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AACtI,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAG7C,0EAA0E;AAC1E,eAAO,MAAM,aAAa;;;;;;;;;CASiD,CAAC;AAE5E,eAAO,MAAM,iBAAiB,EAAiC,CAAC,MAAM,OAAO,aAAa,CAAC,EAAE,CAAC;AAE9F,sFAAsF;AACtF,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,OAAO,aAAa,GAAG,UAAU,CAEpF;AAED;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,MAAM,CAAC;AAEhC,eAAO,MAAM,wBAAwB,QAGm3C,CAAC;AAEz5C,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwC3B,CAAC;AAEH;;;GAGG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,GACrC,OAAO,CAAC,OAAO,CAAC,CA0BlB;AAED,wFAAwF;AACxF,wBAAgB,aAAa,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,GAAG,MAAM,CAgB5E"}
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
* is tested, and the text says what is read — nothing else about the software.
|
|
9
9
|
* `docs/compatibility.md` is the same list, for a person.
|
|
10
10
|
*/
|
|
11
|
-
import { BOOK_SOURCES, BOOK_SOURCE_DESCRIPTIONS, NO_JOURNAL, OPENING, importBooks } from '@ekwo-ai/core';
|
|
11
|
+
import { BOOK_SOURCES, BOOK_SOURCE_DESCRIPTIONS, BooksError, NO_JOURNAL, OPENING, importBooks } from '@ekwo-ai/core';
|
|
12
12
|
import { z } from 'zod';
|
|
13
13
|
import { companyId, isoDate } from './read.js';
|
|
14
14
|
/** The software whose export a reader reads, by the name a user types. */
|
|
@@ -27,9 +27,17 @@ export const NAMED_SOURCE_KEYS = Object.keys(NAMED_SOURCES);
|
|
|
27
27
|
export function sourceOf(source) {
|
|
28
28
|
return source in NAMED_SOURCES ? NAMED_SOURCES[source].reader : source;
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* The most text the tool takes, all files together, in KiB. The files travel
|
|
32
|
+
* inside the conversation, and a model that has to repeat three megabytes of
|
|
33
|
+
* CSV in a tool call truncates them or runs out of room long before the
|
|
34
|
+
* database sees a line. The command line reads the same export from the disk,
|
|
35
|
+
* through the same function, without a limit.
|
|
36
|
+
*/
|
|
37
|
+
export const MAX_TEXT_KIB = 256;
|
|
30
38
|
export const IMPORT_BOOKS_DESCRIPTION = "Takes over the books a user kept elsewhere — a FEC, an export of journal items, a journal report, a trial balance, or the export of " +
|
|
31
39
|
NAMED_SOURCE_KEYS.join(' or ') +
|
|
32
|
-
" by name — whole or not at all. Each file is read by the reader of its source; every account of the old chart is matched to one of this company's chart
|
|
40
|
+
" by name — whole or not at all. Each file is read by the reader of its source; every account of the old chart is matched to one of this company's chart and every old journal to a journal of the company. The codes give a candidate (the same code, the same digits without the padding zeros, or the longest beginning of three digits or more), and what the files say of the old account — its type, its name, the side of its balance — is held against what the chart says the candidate is, never a country: only the same code, not contradicted, is `exact`; anything else is `suggested` with its reason, or `none`. Call it with dry_run first: it returns the correspondence proposed, the suggestions under mapping.suggested, what is unanswered, and — when everything is answered — what the database would write, rehearsed and rolled back. Show the user every suggested line and its reason first; nothing is posted while one is unconfirmed. Settle each by writing its code under mapping.accounts, or, once the user has read and approved them all, pass accept_suggestions. Every entry is posted through post_entry(); a trial balance becomes the opening entry. Imported lines carry no tax and feed no VAT box. The same files twice are refused. The files travel as text, up to " + MAX_TEXT_KIB + " KiB in all: a larger export is imported from the terminal with `ekwo import`, which reads it from the disk. Ask the user before the real call.";
|
|
33
41
|
export const ImportBooksInput = z.object({
|
|
34
42
|
company_id: companyId,
|
|
35
43
|
source: z
|
|
@@ -62,12 +70,24 @@ export const ImportBooksInput = z.object({
|
|
|
62
70
|
allow_result_accounts: z.boolean().optional().describe('Let an opening balance carry income and expense accounts: books taken over in the middle of a year.'),
|
|
63
71
|
keep_numbers: z.boolean().optional().describe('Post each entry under the number it had. Where the country forbids a hole in the sequence it takes the entries.import capability; left out, the journal draws the numbers and the old one is kept as the reference.'),
|
|
64
72
|
date_order: z.enum(['dmy', 'mdy', 'ymd']).optional().describe('For `journal-report`: the order of a date written only in digits, which the file does not say.'),
|
|
73
|
+
accept_suggestions: z
|
|
74
|
+
.boolean()
|
|
75
|
+
.optional()
|
|
76
|
+
.describe('Take every account the proposal only suggested as the answer. Only after the user has read each suggested line and its reason, and said yes to all of them; left out, a suggestion stops the import.'),
|
|
65
77
|
});
|
|
66
78
|
/**
|
|
67
79
|
* Books from another system, all of them or none, through `importBooks()` of
|
|
68
80
|
* the core — the function `ekwo import` calls.
|
|
69
81
|
*/
|
|
70
82
|
export async function importBooksTool(backend, args) {
|
|
83
|
+
const bytes = args.files.reduce((sum, file) => sum + Buffer.byteLength(file.content, 'utf8'), 0);
|
|
84
|
+
if (bytes > MAX_TEXT_KIB * 1024) {
|
|
85
|
+
throw new BooksError(`files_too_large: ${Math.ceil(bytes / 1024)} KiB of text, and this tool takes ${MAX_TEXT_KIB} KiB at most. Import it from the terminal, which reads the files from the disk and runs the same import: ${cliEquivalent(args)}`, {
|
|
86
|
+
hint: 'Sign in once with `npx -y ekwo-os@latest login`, and run it where the files are. ' +
|
|
87
|
+
(args.mapping === undefined ? '' : 'Save the correspondence of this call as correspondence.json beside them first. ') +
|
|
88
|
+
'The rehearsal, the correspondence and the refusals are the ones this tool gives; drop --dry-run for the real import.',
|
|
89
|
+
});
|
|
90
|
+
}
|
|
71
91
|
return importBooks(backend, {
|
|
72
92
|
company_id: args.company_id,
|
|
73
93
|
source: sourceOf(args.source),
|
|
@@ -79,6 +99,25 @@ export async function importBooksTool(backend, args) {
|
|
|
79
99
|
allow_result_accounts: args.allow_result_accounts,
|
|
80
100
|
keep_numbers: args.keep_numbers,
|
|
81
101
|
date_order: args.date_order,
|
|
102
|
+
accept_suggestions: args.accept_suggestions,
|
|
82
103
|
});
|
|
83
104
|
}
|
|
105
|
+
/** The `ekwo import` command that does what this call asked, from files on the disk. */
|
|
106
|
+
export function cliEquivalent(args) {
|
|
107
|
+
const quote = (value) => (/^[\w@%+=:,./-]+$/.test(value) ? value : `'${value.replaceAll("'", "'\\''")}'`);
|
|
108
|
+
return [
|
|
109
|
+
'npx -y ekwo-os@latest import',
|
|
110
|
+
args.source,
|
|
111
|
+
...args.files.map((file) => quote(file.name)),
|
|
112
|
+
'--company',
|
|
113
|
+
args.company_id,
|
|
114
|
+
'--dry-run',
|
|
115
|
+
...(args.open_years === true ? ['--open-years'] : []),
|
|
116
|
+
...(args.opening_date === undefined ? [] : ['--opening-date', args.opening_date]),
|
|
117
|
+
...(args.allow_result_accounts === true ? ['--allow-result-accounts'] : []),
|
|
118
|
+
...(args.keep_numbers === true ? ['--keep-numbers'] : []),
|
|
119
|
+
...(args.date_order === undefined ? [] : ['--date-order', args.date_order]),
|
|
120
|
+
...(args.mapping === undefined ? ['--save-mapping', 'correspondence.json'] : ['--mapping', 'correspondence.json']),
|
|
121
|
+
].join(' ');
|
|
122
|
+
}
|
|
84
123
|
//# sourceMappingURL=import-books.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-books.js","sourceRoot":"","sources":["../../src/tools/import-books.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,YAAY,EAAE,wBAAwB,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAmB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"import-books.js","sourceRoot":"","sources":["../../src/tools/import-books.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ekwo-ai/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "MCP server for Ekwo OS: let an AI assistant work on the books, under the user's own row level security.",
|
|
5
5
|
"mcpName": "ai.ekwo/mcp",
|
|
6
6
|
"keywords": [
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"node": ">=20"
|
|
29
29
|
},
|
|
30
30
|
"ekwo": {
|
|
31
|
-
"schemaMin": "0.
|
|
31
|
+
"schemaMin": "0.8.0"
|
|
32
32
|
},
|
|
33
33
|
"files": [
|
|
34
34
|
"dist",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"typecheck": "tsc -p tsconfig.json --noEmit"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@ekwo-ai/core": "^0.
|
|
54
|
-
"@ekwo-ai/fec": "^0.
|
|
53
|
+
"@ekwo-ai/core": "^0.8.0",
|
|
54
|
+
"@ekwo-ai/fec": "^0.8.0",
|
|
55
55
|
"@modelcontextprotocol/sdk": "^1.30.0",
|
|
56
56
|
"@supabase/supabase-js": "^2.58.0",
|
|
57
57
|
"zod": "^4.6.2"
|