eqvitta-mcp 1.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/LICENSE +21 -0
- package/README.md +93 -0
- package/bin/cli.js +103 -0
- package/package.json +39 -0
- package/smithery.yaml +24 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Eqvitta Software Solutions
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Eqvitta Accounting MCP Server
|
|
2
|
+
|
|
3
|
+
[](https://modelcontextprotocol.io/)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nodejs.org/)
|
|
6
|
+
|
|
7
|
+
Official [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server for **Eqvitta Cloud Accounting & GST Billing**.
|
|
8
|
+
|
|
9
|
+
Connect Claude Desktop, Claude Code, and any MCP-compliant AI client directly to your Eqvitta accounting records. Seamlessly generate GST sales & purchase invoices, manage ledgers, post receipts & payments, query trial balances, and reconcile financial statements with strict role-based data isolation.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## ⚡ Quick Start with Claude Desktop
|
|
14
|
+
|
|
15
|
+
### Automatic 1-Click Install (Smithery)
|
|
16
|
+
If using [Smithery](https://smithery.ai):
|
|
17
|
+
```bash
|
|
18
|
+
npx -y @smithery/cli install eqvitta-mcp --client claude
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
### Manual Configuration
|
|
24
|
+
|
|
25
|
+
Add the server to your `claude_desktop_config.json`:
|
|
26
|
+
|
|
27
|
+
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
28
|
+
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"mcpServers": {
|
|
33
|
+
"eqvitta": {
|
|
34
|
+
"command": "npx",
|
|
35
|
+
"args": ["-y", "github:Eqvitta/eqvitta-mcp"],
|
|
36
|
+
"env": {
|
|
37
|
+
"EQVITTA_API_KEY": "YOUR_EQVITTA_API_KEY_HERE"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
> **How to get your API Key**: Log in to Eqvitta > **Settings** > **API Keys** > Generate a new Key.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 🚀 Key Features
|
|
49
|
+
|
|
50
|
+
- **GST Invoicing**:
|
|
51
|
+
- Automatically calculates CGST, SGST, IGST, and rounding off.
|
|
52
|
+
- Automatically assigns the next sequential invoice number (e.g. `NR/2627/005`).
|
|
53
|
+
- Creates balanced double-entry ledger postings instantly.
|
|
54
|
+
- **Ledgers & Account Groups**:
|
|
55
|
+
- Look up ledgers, outstanding balances, party contact details, and account group structures.
|
|
56
|
+
- **Vouchers & Transactions**:
|
|
57
|
+
- Record Bank / Cash receipts and payments against customers, suppliers, and expense ledgers.
|
|
58
|
+
- Record outward and inward service invoices.
|
|
59
|
+
- **Real-Time Financial Reports**:
|
|
60
|
+
- Instant Trial Balance, Profit & Loss summaries, and Ledger Account Statements.
|
|
61
|
+
- **Role-Based Security**:
|
|
62
|
+
- Multi-tenant tenant isolation. All actions are scoped to companies the API key user is assigned to.
|
|
63
|
+
- Destructive operations (edits and deletions) are strictly disabled over MCP.
|
|
64
|
+
- Internal ledger transfers and financial adjustments require elevated administrative privileges (`financialreporteditor` or `company_admin`).
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## 🛠️ Available MCP Tools
|
|
69
|
+
|
|
70
|
+
| Category | Tools | Description |
|
|
71
|
+
| :--- | :--- | :--- |
|
|
72
|
+
| **Companies & Ledgers** | `list_companies`, `search_ledgers`, `get_ledger_balance`, `get_ledger_statement`, `update_ledger_contact` | Explore companies, query balances, and view statement entries. |
|
|
73
|
+
| **Inventory & Catalogs** | `search_stocks`, `get_stock_detail`, `search_account_groups` | Search stock items, quantities, HSN/SAC codes, and accounting groups. |
|
|
74
|
+
| **Invoicing** | `create_sales_invoice`, `create_purchase_invoice`, `create_service_outward`, `create_service_inward`, `create_logistic_invoice` | Generate GST-compliant sales, purchase, service, and freight vouchers. |
|
|
75
|
+
| **Receipts & Payments** | `create_receipt_voucher`, `create_payment_voucher` | Record customer payments and supplier payouts against bank/cash accounts. |
|
|
76
|
+
| **Financial Reports** | `get_trial_balance`, `get_financial_statement` | Retrieve structured balance sheet and profit & loss figures. |
|
|
77
|
+
| **Challans** | `search_challans`, `get_challan_detail` | Track delivery and transport challans. |
|
|
78
|
+
| **Admin Transfers** *(Gated)* | `transfer_ledger_journal`, `transfer_group_balances_journal`, `bulk_transfer_transactions_ledger` | Shift ledger entries and transfer balances (only visible to authorized roles). |
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 🔒 Security & Architecture
|
|
83
|
+
|
|
84
|
+
The `eqvitta-mcp` CLI connects to Eqvitta's high-availability remote engine (`https://chatapi.eqvitta.com/webhook/mcp`).
|
|
85
|
+
- **Zero Local Maintenance**: All schema changes and accounting rule updates are managed on the cloud engine. Your client never requires manual version updates.
|
|
86
|
+
- **Encrypted Communication**: All traffic is encrypted over TLS 1.3.
|
|
87
|
+
- **Least Privilege**: Only tools authorized by the user's role are exposed to the AI model.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 📄 License
|
|
92
|
+
|
|
93
|
+
MIT License. Copyright (c) 2026 Eqvitta Software Solutions.
|
package/bin/cli.js
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Eqvitta Accounting MCP Server Bridge
|
|
5
|
+
* Connects Claude Desktop / MCP Clients to Eqvitta's Remote MCP Engine.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
const readline = require('readline');
|
|
9
|
+
|
|
10
|
+
const ENDPOINT = process.env.EQVITTA_MCP_ENDPOINT || 'https://chatapi.eqvitta.com/webhook/mcp';
|
|
11
|
+
|
|
12
|
+
// Parse API key from CLI arguments or environment variables
|
|
13
|
+
let apiKey = process.env.EQVITTA_API_KEY || '';
|
|
14
|
+
const args = process.argv.slice(2);
|
|
15
|
+
for (let i = 0; i < args.length; i++) {
|
|
16
|
+
if (args[i] === '--api-key' && args[i + 1]) {
|
|
17
|
+
apiKey = args[i + 1];
|
|
18
|
+
i++;
|
|
19
|
+
} else if (args[i].startsWith('--api-key=')) {
|
|
20
|
+
apiKey = args[i].split('=')[1];
|
|
21
|
+
} else if (args[i] === '--header' && args[i + 1]) {
|
|
22
|
+
const parts = args[i + 1].split(':');
|
|
23
|
+
if (parts[0].trim().toLowerCase() === 'x-api-key') {
|
|
24
|
+
apiKey = parts.slice(1).join(':').trim();
|
|
25
|
+
}
|
|
26
|
+
i++;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
if (!apiKey) {
|
|
31
|
+
console.error('[eqvitta-mcp] Warning: No EQVITTA_API_KEY provided. Tool access may be limited.');
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
const rl = readline.createInterface({
|
|
35
|
+
input: process.stdin,
|
|
36
|
+
output: process.stdout,
|
|
37
|
+
terminal: false
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
rl.on('line', async (line) => {
|
|
41
|
+
const trimmed = line.trim();
|
|
42
|
+
if (!trimmed) return;
|
|
43
|
+
|
|
44
|
+
let request;
|
|
45
|
+
try {
|
|
46
|
+
request = JSON.parse(trimmed);
|
|
47
|
+
} catch (err) {
|
|
48
|
+
console.error('[eqvitta-mcp] Invalid JSON received on stdin:', trimmed);
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
// Handle client notifications that don't expect a response
|
|
53
|
+
if (request.method === 'notifications/initialized') {
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
try {
|
|
58
|
+
const headers = {
|
|
59
|
+
'Content-Type': 'application/json'
|
|
60
|
+
};
|
|
61
|
+
if (apiKey) {
|
|
62
|
+
headers['x-api-key'] = apiKey;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const res = await fetch(ENDPOINT, {
|
|
66
|
+
method: 'POST',
|
|
67
|
+
headers: headers,
|
|
68
|
+
body: JSON.stringify(request)
|
|
69
|
+
});
|
|
70
|
+
|
|
71
|
+
if (!res.ok) {
|
|
72
|
+
const errText = await res.text();
|
|
73
|
+
console.error('[eqvitta-mcp] HTTP Error ' + res.status + ':', errText);
|
|
74
|
+
const errPayload = {
|
|
75
|
+
jsonrpc: '2.0',
|
|
76
|
+
id: request.id ?? null,
|
|
77
|
+
error: {
|
|
78
|
+
code: -32603,
|
|
79
|
+
message: 'HTTP ' + res.status + ': ' + errText
|
|
80
|
+
}
|
|
81
|
+
};
|
|
82
|
+
process.stdout.write(JSON.stringify(errPayload) + '\n');
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
const data = await res.json();
|
|
87
|
+
process.stdout.write(JSON.stringify(data) + '\n');
|
|
88
|
+
} catch (e) {
|
|
89
|
+
console.error('[eqvitta-mcp] Request error:', e.message || String(e));
|
|
90
|
+
const errPayload = {
|
|
91
|
+
jsonrpc: '2.0',
|
|
92
|
+
id: request.id ?? null,
|
|
93
|
+
error: {
|
|
94
|
+
code: -32603,
|
|
95
|
+
message: 'Network error communicating with Eqvitta MCP server: ' + (e.message || String(e))
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
process.stdout.write(JSON.stringify(errPayload) + '\n');
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
process.on('SIGINT', () => process.exit(0));
|
|
103
|
+
process.on('SIGTERM', () => process.exit(0));
|
package/package.json
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "eqvitta-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Official Model Context Protocol (MCP) server for Eqvitta Cloud Accounting & GST Billing. Seamlessly manage ledgers, generate GST-compliant invoices, track stock, and generate financial reports directly in Claude.",
|
|
5
|
+
"type": "commonjs",
|
|
6
|
+
"main": "bin/cli.js",
|
|
7
|
+
"bin": {
|
|
8
|
+
"eqvitta-mcp": "./bin/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"scripts": {
|
|
11
|
+
"start": "node bin/cli.js"
|
|
12
|
+
},
|
|
13
|
+
"keywords": [
|
|
14
|
+
"mcp",
|
|
15
|
+
"model-context-protocol",
|
|
16
|
+
"claude",
|
|
17
|
+
"claude-desktop",
|
|
18
|
+
"anthropic",
|
|
19
|
+
"accounting",
|
|
20
|
+
"gst",
|
|
21
|
+
"invoicing",
|
|
22
|
+
"ledger",
|
|
23
|
+
"india-gst",
|
|
24
|
+
"eqvitta"
|
|
25
|
+
],
|
|
26
|
+
"author": "Eqvitta <support@eqvitta.com>",
|
|
27
|
+
"license": "MIT",
|
|
28
|
+
"repository": {
|
|
29
|
+
"type": "git",
|
|
30
|
+
"url": "git+https://github.com/Eqvitta/eqvitta-mcp.git"
|
|
31
|
+
},
|
|
32
|
+
"bugs": {
|
|
33
|
+
"url": "https://github.com/Eqvitta/eqvitta-mcp/issues"
|
|
34
|
+
},
|
|
35
|
+
"homepage": "https://eqvitta.com",
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18.0.0"
|
|
38
|
+
}
|
|
39
|
+
}
|
package/smithery.yaml
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Smithery configuration for Eqvitta MCP Server
|
|
2
|
+
# https://smithery.ai/docs/config
|
|
3
|
+
|
|
4
|
+
name: eqvitta-mcp
|
|
5
|
+
description: Official Model Context Protocol (MCP) server for Eqvitta Cloud Accounting & GST Billing.
|
|
6
|
+
version: 1.0.0
|
|
7
|
+
|
|
8
|
+
startCommand:
|
|
9
|
+
type: stdio
|
|
10
|
+
configSchema:
|
|
11
|
+
type: object
|
|
12
|
+
properties:
|
|
13
|
+
apiKey:
|
|
14
|
+
type: string
|
|
15
|
+
description: Your Eqvitta API key (generated in Eqvitta Settings > API Keys)
|
|
16
|
+
required:
|
|
17
|
+
- apiKey
|
|
18
|
+
command: node
|
|
19
|
+
args:
|
|
20
|
+
- bin/cli.js
|
|
21
|
+
- --api-key
|
|
22
|
+
- ${config.apiKey}
|
|
23
|
+
env:
|
|
24
|
+
EQVITTA_API_KEY: ${config.apiKey}
|