qontoctl 0.0.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 +111 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +14 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.test.d.ts +2 -0
- package/dist/cli.test.d.ts.map +1 -0
- package/dist/cli.test.js +19 -0
- package/dist/cli.test.js.map +1 -0
- package/package.json +56 -0
package/README.md
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
# QontoCtl: The Complete CLI & MCP for Qonto
|
|
2
|
+
|
|
3
|
+
[](https://github.com/alexey-pelykh/qontoctl/actions/workflows/ci.yml)
|
|
4
|
+
[](https://www.npmjs.com/package/qontoctl)
|
|
5
|
+
[](https://www.npmjs.com/package/qontoctl)
|
|
6
|
+
[](https://github.com/alexey-pelykh/qontoctl)
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
|
|
9
|
+
CLI and MCP server for the [Qonto](https://qonto.com) banking API.
|
|
10
|
+
|
|
11
|
+
This project is brought to you by [Alexey Pelykh](https://github.com/alexey-pelykh).
|
|
12
|
+
|
|
13
|
+
## What It Does
|
|
14
|
+
|
|
15
|
+
QontoCtl lets AI assistants (Claude, etc.) interact with Qonto through the [Model Context Protocol](https://modelcontextprotocol.io). It can:
|
|
16
|
+
|
|
17
|
+
- **Organizations** — retrieve organization details and settings
|
|
18
|
+
- **Transactions** — list, search, and filter bank transactions
|
|
19
|
+
- **Labels** — manage transaction labels and categories
|
|
20
|
+
- **Memberships** — view team members and permissions
|
|
21
|
+
- **Invoices** — upload, list, and manage supplier invoices
|
|
22
|
+
- **Attachments** — manage transaction attachments and receipts
|
|
23
|
+
|
|
24
|
+
## Prerequisites
|
|
25
|
+
|
|
26
|
+
- **Node.js** >= 24
|
|
27
|
+
- A **Qonto** business account with API access
|
|
28
|
+
|
|
29
|
+
## Installation
|
|
30
|
+
|
|
31
|
+
```sh
|
|
32
|
+
npm install -g qontoctl
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Or run directly with npx:
|
|
36
|
+
|
|
37
|
+
```sh
|
|
38
|
+
npx qontoctl --help
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Or install via Homebrew:
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
brew install qontoctl/tap/qontoctl
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
## Usage with Claude Desktop
|
|
48
|
+
|
|
49
|
+
Add to your Claude Desktop configuration (`claude_desktop_config.json`):
|
|
50
|
+
|
|
51
|
+
```json
|
|
52
|
+
{
|
|
53
|
+
"mcpServers": {
|
|
54
|
+
"qontoctl": {
|
|
55
|
+
"command": "npx",
|
|
56
|
+
"args": ["qontoctl", "mcp"]
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## CLI Usage
|
|
63
|
+
|
|
64
|
+
```sh
|
|
65
|
+
qontoctl --help
|
|
66
|
+
qontoctl mcp # Start MCP server on stdio
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
## Configuration
|
|
70
|
+
|
|
71
|
+
QontoCtl supports two authentication methods: **API Key** and **OAuth 2.0**.
|
|
72
|
+
|
|
73
|
+
### Profile Format
|
|
74
|
+
|
|
75
|
+
All configuration files use the same YAML format:
|
|
76
|
+
|
|
77
|
+
```yaml
|
|
78
|
+
api-key:
|
|
79
|
+
organization_slug: acme-corp-4821
|
|
80
|
+
secret_key: your-secret-key
|
|
81
|
+
|
|
82
|
+
oauth:
|
|
83
|
+
client_id: app-id
|
|
84
|
+
client_secret: app-secret
|
|
85
|
+
access_token: eyJ... # auto-managed
|
|
86
|
+
refresh_token: dGhp... # auto-managed
|
|
87
|
+
expires_at: 2026-02-26T18:30:00Z # auto-managed
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Resolution Order
|
|
91
|
+
|
|
92
|
+
**Without `--profile`:**
|
|
93
|
+
1. `QONTOCTL_*` environment variables (highest priority)
|
|
94
|
+
2. `.qontoctl.yaml` in current directory
|
|
95
|
+
3. `~/.qontoctl.yaml` (home default)
|
|
96
|
+
|
|
97
|
+
**With `--profile acme`:**
|
|
98
|
+
1. `QONTOCTL_ACME_*` environment variables (highest priority)
|
|
99
|
+
2. `~/.qontoctl/acme.yaml`
|
|
100
|
+
|
|
101
|
+
OAuth takes precedence over API Key when tokens are valid. Expired tokens are refreshed automatically and written back to the source file.
|
|
102
|
+
|
|
103
|
+
## Disclaimer
|
|
104
|
+
|
|
105
|
+
`qontoctl` is an **independent project** not affiliated with, endorsed by, or officially connected to **Qonto** or Qonto SAS.
|
|
106
|
+
|
|
107
|
+
Qonto is a trademark of Qonto SAS.
|
|
108
|
+
|
|
109
|
+
## License
|
|
110
|
+
|
|
111
|
+
[AGPL-3.0-only](LICENSE) — For commercial licensing, contact the maintainer.
|
package/dist/cli.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
|
package/dist/cli.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
3
|
+
// Copyright (C) 2026 Oleksii PELYKH
|
|
4
|
+
import { createProgram } from "@qontoctl/cli";
|
|
5
|
+
import { runStdioServer } from "@qontoctl/mcp/stdio";
|
|
6
|
+
const program = createProgram();
|
|
7
|
+
program
|
|
8
|
+
.command("mcp")
|
|
9
|
+
.description("Start MCP server on stdio (for Claude Desktop, Cursor, etc.)")
|
|
10
|
+
.action(async () => {
|
|
11
|
+
await runStdioServer();
|
|
12
|
+
});
|
|
13
|
+
program.parse();
|
|
14
|
+
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAErD,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;AAEhC,OAAO;KACJ,OAAO,CAAC,KAAK,CAAC;KACd,WAAW,CAAC,8DAA8D,CAAC;KAC3E,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,cAAc,EAAE,CAAC;AACzB,CAAC,CAAC,CAAC;AAEL,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":""}
|
package/dist/cli.test.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
// SPDX-License-Identifier: AGPL-3.0-only
|
|
2
|
+
// Copyright (C) 2026 Oleksii PELYKH
|
|
3
|
+
import { describe, expect, it } from "vitest";
|
|
4
|
+
import { createProgram } from "@qontoctl/cli";
|
|
5
|
+
describe("qontoctl CLI", () => {
|
|
6
|
+
it("creates program with correct name", () => {
|
|
7
|
+
const program = createProgram();
|
|
8
|
+
expect(program.name()).toBe("qontoctl");
|
|
9
|
+
});
|
|
10
|
+
it("registers mcp subcommand", () => {
|
|
11
|
+
const program = createProgram();
|
|
12
|
+
program
|
|
13
|
+
.command("mcp")
|
|
14
|
+
.description("Start MCP server on stdio (for Claude Desktop, Cursor, etc.)");
|
|
15
|
+
const commandNames = program.commands.map((c) => c.name());
|
|
16
|
+
expect(commandNames).toContain("mcp");
|
|
17
|
+
});
|
|
18
|
+
});
|
|
19
|
+
//# sourceMappingURL=cli.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.test.js","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,oCAAoC;AAEpC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAChC,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0BAA0B,EAAE,GAAG,EAAE;QAClC,MAAM,OAAO,GAAG,aAAa,EAAE,CAAC;QAEhC,OAAO;aACJ,OAAO,CAAC,KAAK,CAAC;aACd,WAAW,CACV,8DAA8D,CAC/D,CAAC;QAEJ,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,YAAY,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "qontoctl",
|
|
3
|
+
"version": "0.0.0",
|
|
4
|
+
"description": "The complete CLI & MCP for Qonto",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=24"
|
|
8
|
+
},
|
|
9
|
+
"license": "AGPL-3.0-only",
|
|
10
|
+
"author": "Alexey Pelykh (https://github.com/alexey-pelykh)",
|
|
11
|
+
"homepage": "https://github.com/alexey-pelykh/qontoctl",
|
|
12
|
+
"bugs": "https://github.com/alexey-pelykh/qontoctl/issues",
|
|
13
|
+
"funding": "https://github.com/sponsors/alexey-pelykh",
|
|
14
|
+
"repository": {
|
|
15
|
+
"type": "git",
|
|
16
|
+
"url": "https://github.com/alexey-pelykh/qontoctl.git",
|
|
17
|
+
"directory": "packages/qontoctl"
|
|
18
|
+
},
|
|
19
|
+
"exports": {
|
|
20
|
+
".": {
|
|
21
|
+
"types": "./dist/cli.d.ts",
|
|
22
|
+
"import": "./dist/cli.js"
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"bin": {
|
|
26
|
+
"qontoctl": "./dist/cli.js"
|
|
27
|
+
},
|
|
28
|
+
"mcpName": "io.github.alexey-pelykh/qontoctl",
|
|
29
|
+
"keywords": [
|
|
30
|
+
"qonto",
|
|
31
|
+
"banking",
|
|
32
|
+
"fintech",
|
|
33
|
+
"mcp",
|
|
34
|
+
"cli"
|
|
35
|
+
],
|
|
36
|
+
"files": [
|
|
37
|
+
"dist"
|
|
38
|
+
],
|
|
39
|
+
"scripts": {
|
|
40
|
+
"prepack": "cp ../../README.md .",
|
|
41
|
+
"build": "tsc",
|
|
42
|
+
"test": "vitest run",
|
|
43
|
+
"lint": "eslint src/",
|
|
44
|
+
"dev": "tsc --watch"
|
|
45
|
+
},
|
|
46
|
+
"dependencies": {
|
|
47
|
+
"@qontoctl/cli": "workspace:^",
|
|
48
|
+
"@qontoctl/mcp": "workspace:^"
|
|
49
|
+
},
|
|
50
|
+
"devDependencies": {
|
|
51
|
+
"@types/node": "catalog:",
|
|
52
|
+
"eslint": "catalog:",
|
|
53
|
+
"typescript": "catalog:",
|
|
54
|
+
"vitest": "catalog:"
|
|
55
|
+
}
|
|
56
|
+
}
|