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 ADDED
@@ -0,0 +1,111 @@
1
+ # QontoCtl: The Complete CLI & MCP for Qonto
2
+
3
+ [![CI](https://github.com/alexey-pelykh/qontoctl/actions/workflows/ci.yml/badge.svg)](https://github.com/alexey-pelykh/qontoctl/actions/workflows/ci.yml)
4
+ [![npm version](https://img.shields.io/npm/v/qontoctl?logo=npm)](https://www.npmjs.com/package/qontoctl)
5
+ [![npm downloads](https://img.shields.io/npm/dm/qontoctl?logo=npm)](https://www.npmjs.com/package/qontoctl)
6
+ [![GitHub Repo stars](https://img.shields.io/github/stars/alexey-pelykh/qontoctl?style=flat&logo=github)](https://github.com/alexey-pelykh/qontoctl)
7
+ [![License](https://img.shields.io/github/license/alexey-pelykh/qontoctl)](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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -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
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cli.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.test.d.ts","sourceRoot":"","sources":["../src/cli.test.ts"],"names":[],"mappings":""}
@@ -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
+ }