storno-cli 1.0.5

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.
Files changed (188) hide show
  1. package/LICENSE +53 -0
  2. package/README.md +257 -0
  3. package/TOOLS.md +3309 -0
  4. package/dist/client.d.ts +42 -0
  5. package/dist/client.d.ts.map +1 -0
  6. package/dist/client.js +162 -0
  7. package/dist/client.js.map +1 -0
  8. package/dist/config.d.ts +22 -0
  9. package/dist/config.d.ts.map +1 -0
  10. package/dist/config.js +30 -0
  11. package/dist/config.js.map +1 -0
  12. package/dist/index.d.ts +37 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +172 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/tools/accounting-export.d.ts +14 -0
  17. package/dist/tools/accounting-export.d.ts.map +1 -0
  18. package/dist/tools/accounting-export.js +97 -0
  19. package/dist/tools/accounting-export.js.map +1 -0
  20. package/dist/tools/admin.d.ts +8 -0
  21. package/dist/tools/admin.d.ts.map +1 -0
  22. package/dist/tools/admin.js +98 -0
  23. package/dist/tools/admin.js.map +1 -0
  24. package/dist/tools/anaf.d.ts +8 -0
  25. package/dist/tools/anaf.d.ts.map +1 -0
  26. package/dist/tools/anaf.js +115 -0
  27. package/dist/tools/anaf.js.map +1 -0
  28. package/dist/tools/api-keys.d.ts +8 -0
  29. package/dist/tools/api-keys.d.ts.map +1 -0
  30. package/dist/tools/api-keys.js +29 -0
  31. package/dist/tools/api-keys.js.map +1 -0
  32. package/dist/tools/auth.d.ts +8 -0
  33. package/dist/tools/auth.d.ts.map +1 -0
  34. package/dist/tools/auth.js +187 -0
  35. package/dist/tools/auth.js.map +1 -0
  36. package/dist/tools/backup.d.ts +62 -0
  37. package/dist/tools/backup.d.ts.map +1 -0
  38. package/dist/tools/backup.js +167 -0
  39. package/dist/tools/backup.js.map +1 -0
  40. package/dist/tools/bank-accounts.d.ts +14 -0
  41. package/dist/tools/bank-accounts.d.ts.map +1 -0
  42. package/dist/tools/bank-accounts.js +140 -0
  43. package/dist/tools/bank-accounts.js.map +1 -0
  44. package/dist/tools/borderou.d.ts +14 -0
  45. package/dist/tools/borderou.d.ts.map +1 -0
  46. package/dist/tools/borderou.js +233 -0
  47. package/dist/tools/borderou.js.map +1 -0
  48. package/dist/tools/clients.d.ts +14 -0
  49. package/dist/tools/clients.d.ts.map +1 -0
  50. package/dist/tools/clients.js +353 -0
  51. package/dist/tools/clients.js.map +1 -0
  52. package/dist/tools/companies.d.ts +8 -0
  53. package/dist/tools/companies.d.ts.map +1 -0
  54. package/dist/tools/companies.js +211 -0
  55. package/dist/tools/companies.js.map +1 -0
  56. package/dist/tools/company-registry.d.ts +31 -0
  57. package/dist/tools/company-registry.d.ts.map +1 -0
  58. package/dist/tools/company-registry.js +51 -0
  59. package/dist/tools/company-registry.js.map +1 -0
  60. package/dist/tools/cpv-codes.d.ts +17 -0
  61. package/dist/tools/cpv-codes.d.ts.map +1 -0
  62. package/dist/tools/cpv-codes.js +28 -0
  63. package/dist/tools/cpv-codes.js.map +1 -0
  64. package/dist/tools/dashboard.d.ts +23 -0
  65. package/dist/tools/dashboard.d.ts.map +1 -0
  66. package/dist/tools/dashboard.js +37 -0
  67. package/dist/tools/dashboard.js.map +1 -0
  68. package/dist/tools/defaults.d.ts +14 -0
  69. package/dist/tools/defaults.d.ts.map +1 -0
  70. package/dist/tools/defaults.js +29 -0
  71. package/dist/tools/defaults.js.map +1 -0
  72. package/dist/tools/delivery-notes.d.ts +185 -0
  73. package/dist/tools/delivery-notes.d.ts.map +1 -0
  74. package/dist/tools/delivery-notes.js +525 -0
  75. package/dist/tools/delivery-notes.js.map +1 -0
  76. package/dist/tools/document-series.d.ts +54 -0
  77. package/dist/tools/document-series.d.ts.map +1 -0
  78. package/dist/tools/document-series.js +171 -0
  79. package/dist/tools/document-series.js.map +1 -0
  80. package/dist/tools/efactura-messages.d.ts +34 -0
  81. package/dist/tools/efactura-messages.d.ts.map +1 -0
  82. package/dist/tools/efactura-messages.js +51 -0
  83. package/dist/tools/efactura-messages.js.map +1 -0
  84. package/dist/tools/einvoice.d.ts +8 -0
  85. package/dist/tools/einvoice.d.ts.map +1 -0
  86. package/dist/tools/einvoice.js +170 -0
  87. package/dist/tools/einvoice.js.map +1 -0
  88. package/dist/tools/email-templates.d.ts +14 -0
  89. package/dist/tools/email-templates.d.ts.map +1 -0
  90. package/dist/tools/email-templates.js +104 -0
  91. package/dist/tools/email-templates.js.map +1 -0
  92. package/dist/tools/exchange-rates.d.ts +14 -0
  93. package/dist/tools/exchange-rates.d.ts.map +1 -0
  94. package/dist/tools/exchange-rates.js +55 -0
  95. package/dist/tools/exchange-rates.js.map +1 -0
  96. package/dist/tools/exports.d.ts +14 -0
  97. package/dist/tools/exports.d.ts.map +1 -0
  98. package/dist/tools/exports.js +25 -0
  99. package/dist/tools/exports.js.map +1 -0
  100. package/dist/tools/import.d.ts +14 -0
  101. package/dist/tools/import.d.ts.map +1 -0
  102. package/dist/tools/import.js +221 -0
  103. package/dist/tools/import.js.map +1 -0
  104. package/dist/tools/invitations.d.ts +8 -0
  105. package/dist/tools/invitations.d.ts.map +1 -0
  106. package/dist/tools/invitations.js +70 -0
  107. package/dist/tools/invitations.js.map +1 -0
  108. package/dist/tools/invoices.d.ts +14 -0
  109. package/dist/tools/invoices.d.ts.map +1 -0
  110. package/dist/tools/invoices.js +1191 -0
  111. package/dist/tools/invoices.js.map +1 -0
  112. package/dist/tools/licensing.d.ts +8 -0
  113. package/dist/tools/licensing.d.ts.map +1 -0
  114. package/dist/tools/licensing.js +90 -0
  115. package/dist/tools/licensing.js.map +1 -0
  116. package/dist/tools/members.d.ts +8 -0
  117. package/dist/tools/members.d.ts.map +1 -0
  118. package/dist/tools/members.js +79 -0
  119. package/dist/tools/members.js.map +1 -0
  120. package/dist/tools/nc-codes.d.ts +17 -0
  121. package/dist/tools/nc-codes.d.ts.map +1 -0
  122. package/dist/tools/nc-codes.js +28 -0
  123. package/dist/tools/nc-codes.js.map +1 -0
  124. package/dist/tools/notifications.d.ts +8 -0
  125. package/dist/tools/notifications.d.ts.map +1 -0
  126. package/dist/tools/notifications.js +111 -0
  127. package/dist/tools/notifications.js.map +1 -0
  128. package/dist/tools/oauth2-clients.d.ts +8 -0
  129. package/dist/tools/oauth2-clients.d.ts.map +1 -0
  130. package/dist/tools/oauth2-clients.js +147 -0
  131. package/dist/tools/oauth2-clients.js.map +1 -0
  132. package/dist/tools/payments.d.ts +17 -0
  133. package/dist/tools/payments.d.ts.map +1 -0
  134. package/dist/tools/payments.js +109 -0
  135. package/dist/tools/payments.js.map +1 -0
  136. package/dist/tools/pdf-template-config.d.ts +14 -0
  137. package/dist/tools/pdf-template-config.d.ts.map +1 -0
  138. package/dist/tools/pdf-template-config.js +131 -0
  139. package/dist/tools/pdf-template-config.js.map +1 -0
  140. package/dist/tools/products.d.ts +40 -0
  141. package/dist/tools/products.d.ts.map +1 -0
  142. package/dist/tools/products.js +73 -0
  143. package/dist/tools/products.js.map +1 -0
  144. package/dist/tools/proforma-invoices.d.ts +198 -0
  145. package/dist/tools/proforma-invoices.d.ts.map +1 -0
  146. package/dist/tools/proforma-invoices.js +378 -0
  147. package/dist/tools/proforma-invoices.js.map +1 -0
  148. package/dist/tools/receipts.d.ts +166 -0
  149. package/dist/tools/receipts.d.ts.map +1 -0
  150. package/dist/tools/receipts.js +397 -0
  151. package/dist/tools/receipts.js.map +1 -0
  152. package/dist/tools/recurring-invoices.d.ts +187 -0
  153. package/dist/tools/recurring-invoices.d.ts.map +1 -0
  154. package/dist/tools/recurring-invoices.js +305 -0
  155. package/dist/tools/recurring-invoices.js.map +1 -0
  156. package/dist/tools/reports.d.ts +48 -0
  157. package/dist/tools/reports.d.ts.map +1 -0
  158. package/dist/tools/reports.js +200 -0
  159. package/dist/tools/reports.js.map +1 -0
  160. package/dist/tools/storage-config.d.ts +8 -0
  161. package/dist/tools/storage-config.d.ts.map +1 -0
  162. package/dist/tools/storage-config.js +117 -0
  163. package/dist/tools/storage-config.js.map +1 -0
  164. package/dist/tools/suppliers.d.ts +14 -0
  165. package/dist/tools/suppliers.d.ts.map +1 -0
  166. package/dist/tools/suppliers.js +205 -0
  167. package/dist/tools/suppliers.js.map +1 -0
  168. package/dist/tools/system.d.ts +8 -0
  169. package/dist/tools/system.d.ts.map +1 -0
  170. package/dist/tools/system.js +24 -0
  171. package/dist/tools/system.js.map +1 -0
  172. package/dist/tools/vat-rates.d.ts +14 -0
  173. package/dist/tools/vat-rates.d.ts.map +1 -0
  174. package/dist/tools/vat-rates.js +145 -0
  175. package/dist/tools/vat-rates.js.map +1 -0
  176. package/dist/tools/webhooks.d.ts +8 -0
  177. package/dist/tools/webhooks.d.ts.map +1 -0
  178. package/dist/tools/webhooks.js +305 -0
  179. package/dist/tools/webhooks.js.map +1 -0
  180. package/dist/utils/errors.d.ts +18 -0
  181. package/dist/utils/errors.d.ts.map +1 -0
  182. package/dist/utils/errors.js +45 -0
  183. package/dist/utils/errors.js.map +1 -0
  184. package/dist/utils/pagination.d.ts +9 -0
  185. package/dist/utils/pagination.d.ts.map +1 -0
  186. package/dist/utils/pagination.js +10 -0
  187. package/dist/utils/pagination.js.map +1 -0
  188. package/package.json +52 -0
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Authenticated HTTP client for the Storno.ro API.
3
+ *
4
+ * Features:
5
+ * - Automatic JWT token injection (Authorization header)
6
+ * - Automatic X-Company header when companyId is set
7
+ * - Auto-refresh of expired tokens using the refresh token
8
+ * - Structured error responses for AI readability
9
+ */
10
+ export interface ApiResponse<T = unknown> {
11
+ ok: boolean;
12
+ status: number;
13
+ data: T;
14
+ }
15
+ export interface ApiError {
16
+ ok: false;
17
+ status: number;
18
+ error: string;
19
+ details?: unknown;
20
+ }
21
+ type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
22
+ interface RequestOptions {
23
+ method?: HttpMethod;
24
+ body?: Record<string, unknown>;
25
+ query?: Record<string, string | number | boolean | undefined>;
26
+ headers?: Record<string, string>;
27
+ /** Override the default company ID for this request */
28
+ companyId?: string;
29
+ /** Skip authentication for this request (e.g., login) */
30
+ noAuth?: boolean;
31
+ /** Expect binary response (e.g., PDF download) */
32
+ binary?: boolean;
33
+ /** Absolute path to a file to upload as multipart/form-data */
34
+ filePath?: string;
35
+ /** Form field name for the uploaded file (default: "file") */
36
+ fileFieldName?: string;
37
+ /** Additional form fields to send alongside the file */
38
+ formFields?: Record<string, string>;
39
+ }
40
+ export declare function apiRequest<T = unknown>(path: string, options?: RequestOptions): Promise<ApiResponse<T> | ApiError>;
41
+ export {};
42
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,MAAM,WAAW,WAAW,CAAC,CAAC,GAAG,OAAO;IACtC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,CAAC,CAAC;CACT;AAED,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,KAAK,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,KAAK,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE9D,UAAU,cAAc;IACtB,MAAM,CAAC,EAAE,UAAU,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjC,uDAAuD;IACvD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,yDAAyD;IACzD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8DAA8D;IAC9D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,wDAAwD;IACxD,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AA0BD,wBAAsB,UAAU,CAAC,CAAC,GAAG,OAAO,EAC1C,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAwIpC"}
package/dist/client.js ADDED
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Authenticated HTTP client for the Storno.ro API.
3
+ *
4
+ * Features:
5
+ * - Automatic JWT token injection (Authorization header)
6
+ * - Automatic X-Company header when companyId is set
7
+ * - Auto-refresh of expired tokens using the refresh token
8
+ * - Structured error responses for AI readability
9
+ */
10
+ import { readFileSync } from 'node:fs';
11
+ import { basename } from 'node:path';
12
+ import { getConfig, updateConfig } from './config.js';
13
+ async function refreshAccessToken() {
14
+ const config = getConfig();
15
+ if (!config.refreshToken)
16
+ return false;
17
+ try {
18
+ const res = await fetch(`${config.baseUrl}/api/auth/token/refresh`, {
19
+ method: 'POST',
20
+ headers: { 'Content-Type': 'application/json' },
21
+ body: JSON.stringify({ refresh_token: config.refreshToken }),
22
+ });
23
+ if (!res.ok)
24
+ return false;
25
+ const data = (await res.json());
26
+ updateConfig({
27
+ token: data.token,
28
+ refreshToken: data.refresh_token,
29
+ });
30
+ return true;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ export async function apiRequest(path, options = {}) {
37
+ const config = getConfig();
38
+ const { method = 'GET', body, query, headers = {}, companyId, noAuth, binary, filePath, fileFieldName = 'file', formFields } = options;
39
+ // Build URL with query parameters
40
+ const url = new URL(path, config.baseUrl);
41
+ if (query) {
42
+ for (const [key, value] of Object.entries(query)) {
43
+ if (value !== undefined && value !== null && value !== '') {
44
+ url.searchParams.set(key, String(value));
45
+ }
46
+ }
47
+ }
48
+ // Build headers
49
+ const reqHeaders = {
50
+ ...headers,
51
+ };
52
+ if (!noAuth && config.token) {
53
+ // API keys (e.g. "af_...") must be sent without "Bearer " prefix;
54
+ // the backend's ApiKeyAuthenticator skips Bearer-prefixed tokens.
55
+ const isApiKey = config.token.startsWith('af_');
56
+ reqHeaders['Authorization'] = isApiKey ? config.token : `Bearer ${config.token}`;
57
+ }
58
+ const effectiveCompanyId = companyId || config.companyId;
59
+ if (effectiveCompanyId) {
60
+ reqHeaders['X-Company'] = effectiveCompanyId;
61
+ }
62
+ // Build request body — multipart file upload or JSON
63
+ let requestBody;
64
+ if (filePath) {
65
+ const formData = new FormData();
66
+ const fileBuffer = readFileSync(filePath);
67
+ const fileName = basename(filePath);
68
+ formData.append(fileFieldName, new Blob([fileBuffer]), fileName);
69
+ if (formFields) {
70
+ for (const [key, value] of Object.entries(formFields)) {
71
+ formData.append(key, value);
72
+ }
73
+ }
74
+ requestBody = formData;
75
+ // Do NOT set Content-Type — fetch sets it automatically with the boundary
76
+ }
77
+ else if (body) {
78
+ reqHeaders['Content-Type'] = 'application/json';
79
+ requestBody = JSON.stringify(body);
80
+ }
81
+ // Make request
82
+ const fetchOptions = {
83
+ method,
84
+ headers: reqHeaders,
85
+ body: requestBody,
86
+ };
87
+ let res;
88
+ try {
89
+ res = await fetch(url.toString(), fetchOptions);
90
+ }
91
+ catch (err) {
92
+ return {
93
+ ok: false,
94
+ status: 0,
95
+ error: `Network error: ${err instanceof Error ? err.message : String(err)}`,
96
+ };
97
+ }
98
+ // Auto-refresh on 401
99
+ if (res.status === 401 && !noAuth && config.refreshToken) {
100
+ const refreshed = await refreshAccessToken();
101
+ if (refreshed) {
102
+ reqHeaders['Authorization'] = `Bearer ${getConfig().token}`;
103
+ try {
104
+ res = await fetch(url.toString(), {
105
+ ...fetchOptions,
106
+ headers: reqHeaders,
107
+ });
108
+ }
109
+ catch (err) {
110
+ return {
111
+ ok: false,
112
+ status: 0,
113
+ error: `Network error after token refresh: ${err instanceof Error ? err.message : String(err)}`,
114
+ };
115
+ }
116
+ }
117
+ }
118
+ // Parse response
119
+ if (binary) {
120
+ if (!res.ok) {
121
+ const text = await res.text().catch(() => 'Unknown error');
122
+ return { ok: false, status: res.status, error: text };
123
+ }
124
+ const buffer = await res.arrayBuffer();
125
+ const base64 = Buffer.from(buffer).toString('base64');
126
+ return {
127
+ ok: true,
128
+ status: res.status,
129
+ data: { base64, contentType: res.headers.get('content-type') },
130
+ };
131
+ }
132
+ // Handle empty responses (204 No Content)
133
+ if (res.status === 204) {
134
+ return { ok: true, status: 204, data: null };
135
+ }
136
+ const contentType = res.headers.get('content-type') || '';
137
+ if (!contentType.includes('application/json')) {
138
+ const text = await res.text().catch(() => '');
139
+ if (!res.ok) {
140
+ return { ok: false, status: res.status, error: text || `HTTP ${res.status}` };
141
+ }
142
+ return { ok: true, status: res.status, data: text };
143
+ }
144
+ let data;
145
+ try {
146
+ data = await res.json();
147
+ }
148
+ catch {
149
+ return { ok: false, status: res.status, error: 'Failed to parse JSON response' };
150
+ }
151
+ if (!res.ok) {
152
+ const errBody = data;
153
+ return {
154
+ ok: false,
155
+ status: res.status,
156
+ error: errBody.message || errBody.error || `HTTP ${res.status}`,
157
+ details: errBody,
158
+ };
159
+ }
160
+ return { ok: true, status: res.status, data: data };
161
+ }
162
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Configuration for the Storno MCP server.
3
+ *
4
+ * Environment variables:
5
+ * STORNO_BASE_URL — API base URL (default: https://api.storno.ro)
6
+ * STORNO_TOKEN — JWT access token (obtain via auth_login tool)
7
+ * STORNO_REFRESH_TOKEN — JWT refresh token (for auto-renewal)
8
+ * STORNO_COMPANY_ID — Default company UUID (used as X-Company header)
9
+ * STORNO_EMAIL — Email for auto-login (optional, used if no token)
10
+ * STORNO_PASSWORD — Password for auto-login (optional, used if no token)
11
+ */
12
+ export interface Config {
13
+ baseUrl: string;
14
+ token: string | null;
15
+ refreshToken: string | null;
16
+ companyId: string | null;
17
+ email: string | null;
18
+ password: string | null;
19
+ }
20
+ export declare function getConfig(): Config;
21
+ export declare function updateConfig(updates: Partial<Config>): void;
22
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,MAAM;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAID,wBAAgB,SAAS,IAAI,MAAM,CAYlC;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAG3D"}
package/dist/config.js ADDED
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Configuration for the Storno MCP server.
3
+ *
4
+ * Environment variables:
5
+ * STORNO_BASE_URL — API base URL (default: https://api.storno.ro)
6
+ * STORNO_TOKEN — JWT access token (obtain via auth_login tool)
7
+ * STORNO_REFRESH_TOKEN — JWT refresh token (for auto-renewal)
8
+ * STORNO_COMPANY_ID — Default company UUID (used as X-Company header)
9
+ * STORNO_EMAIL — Email for auto-login (optional, used if no token)
10
+ * STORNO_PASSWORD — Password for auto-login (optional, used if no token)
11
+ */
12
+ let _config = null;
13
+ export function getConfig() {
14
+ if (!_config) {
15
+ _config = {
16
+ baseUrl: (process.env.STORNO_BASE_URL || 'https://api.storno.ro').replace(/\/$/, ''),
17
+ token: process.env.STORNO_TOKEN || null,
18
+ refreshToken: process.env.STORNO_REFRESH_TOKEN || null,
19
+ companyId: process.env.STORNO_COMPANY_ID || null,
20
+ email: process.env.STORNO_EMAIL || null,
21
+ password: process.env.STORNO_PASSWORD || null,
22
+ };
23
+ }
24
+ return _config;
25
+ }
26
+ export function updateConfig(updates) {
27
+ const config = getConfig();
28
+ Object.assign(config, updates);
29
+ }
30
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,IAAI,OAAO,GAAkB,IAAI,CAAC;AAElC,MAAM,UAAU,SAAS;IACvB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG;YACR,OAAO,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,uBAAuB,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;YACpF,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI;YACvC,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,IAAI;YACtD,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI;YAChD,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,IAAI;YACvC,QAAQ,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI;SAC9C,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAwB;IACnD,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,37 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Storno MCP Server
4
+ *
5
+ * A Model Context Protocol server that exposes the Storno.ro e-invoicing API
6
+ * as AI-callable tools. Works with Claude Code, Cursor, Windsurf, and any
7
+ * MCP-compatible AI assistant.
8
+ *
9
+ * Configuration (environment variables):
10
+ * STORNO_BASE_URL — API base URL (default: https://api.storno.ro)
11
+ * STORNO_TOKEN — JWT access token
12
+ * STORNO_REFRESH_TOKEN — JWT refresh token (for auto-renewal)
13
+ * STORNO_COMPANY_ID — Default company UUID
14
+ * STORNO_EMAIL — Email for auto-login (optional)
15
+ * STORNO_PASSWORD — Password for auto-login (optional)
16
+ *
17
+ * Usage:
18
+ * node dist/index.js # Start MCP server (stdio transport)
19
+ *
20
+ * MCP Integration:
21
+ * Add to your claude_desktop_config.json or .claude/settings.json:
22
+ * {
23
+ * "mcpServers": {
24
+ * "storno": {
25
+ * "command": "node",
26
+ * "args": ["/path/to/storno-cli/dist/index.js"],
27
+ * "env": {
28
+ * "STORNO_BASE_URL": "https://api.storno.ro",
29
+ * "STORNO_TOKEN": "your-jwt-token",
30
+ * "STORNO_COMPANY_ID": "your-company-uuid"
31
+ * }
32
+ * }
33
+ * }
34
+ * }
35
+ */
36
+ export {};
37
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiCG"}
package/dist/index.js ADDED
@@ -0,0 +1,172 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * Storno MCP Server
4
+ *
5
+ * A Model Context Protocol server that exposes the Storno.ro e-invoicing API
6
+ * as AI-callable tools. Works with Claude Code, Cursor, Windsurf, and any
7
+ * MCP-compatible AI assistant.
8
+ *
9
+ * Configuration (environment variables):
10
+ * STORNO_BASE_URL — API base URL (default: https://api.storno.ro)
11
+ * STORNO_TOKEN — JWT access token
12
+ * STORNO_REFRESH_TOKEN — JWT refresh token (for auto-renewal)
13
+ * STORNO_COMPANY_ID — Default company UUID
14
+ * STORNO_EMAIL — Email for auto-login (optional)
15
+ * STORNO_PASSWORD — Password for auto-login (optional)
16
+ *
17
+ * Usage:
18
+ * node dist/index.js # Start MCP server (stdio transport)
19
+ *
20
+ * MCP Integration:
21
+ * Add to your claude_desktop_config.json or .claude/settings.json:
22
+ * {
23
+ * "mcpServers": {
24
+ * "storno": {
25
+ * "command": "node",
26
+ * "args": ["/path/to/storno-cli/dist/index.js"],
27
+ * "env": {
28
+ * "STORNO_BASE_URL": "https://api.storno.ro",
29
+ * "STORNO_TOKEN": "your-jwt-token",
30
+ * "STORNO_COMPANY_ID": "your-company-uuid"
31
+ * }
32
+ * }
33
+ * }
34
+ * }
35
+ */
36
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
37
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
38
+ import { getConfig, updateConfig } from './config.js';
39
+ import { apiRequest } from './client.js';
40
+ // Import all tool modules
41
+ import { tools as authTools } from './tools/auth.js';
42
+ import { tools as companiesTools } from './tools/companies.js';
43
+ import { tools as invoicesTools } from './tools/invoices.js';
44
+ import { tools as clientsTools } from './tools/clients.js';
45
+ import { tools as productsTools } from './tools/products.js';
46
+ import { tools as paymentsTools } from './tools/payments.js';
47
+ import { tools as defaultsTools } from './tools/defaults.js';
48
+ import { tools as vatRatesTools } from './tools/vat-rates.js';
49
+ import { tools as bankAccountsTools } from './tools/bank-accounts.js';
50
+ import { tools as documentSeriesTools } from './tools/document-series.js';
51
+ import { tools as proformaInvoicesTools } from './tools/proforma-invoices.js';
52
+ import { tools as recurringInvoicesTools } from './tools/recurring-invoices.js';
53
+ import { tools as deliveryNotesTools } from './tools/delivery-notes.js';
54
+ import { tools as suppliersTools } from './tools/suppliers.js';
55
+ import { tools as exchangeRatesTools } from './tools/exchange-rates.js';
56
+ import { tools as emailTemplatesTools } from './tools/email-templates.js';
57
+ import { tools as anafTools } from './tools/anaf.js';
58
+ import { tools as efacturaMessagesTools } from './tools/efactura-messages.js';
59
+ import { tools as einvoiceTools } from './tools/einvoice.js';
60
+ import { tools as dashboardTools } from './tools/dashboard.js';
61
+ import { tools as membersTools } from './tools/members.js';
62
+ import { tools as invitationsTools } from './tools/invitations.js';
63
+ import { tools as notificationsTools } from './tools/notifications.js';
64
+ import { tools as webhooksTools } from './tools/webhooks.js';
65
+ import { tools as apiKeysTools } from './tools/api-keys.js';
66
+ import { tools as oauth2ClientsTools } from './tools/oauth2-clients.js';
67
+ import { tools as reportsTools } from './tools/reports.js';
68
+ import { tools as exportsTools } from './tools/exports.js';
69
+ import { tools as adminTools } from './tools/admin.js';
70
+ import { tools as licensingTools } from './tools/licensing.js';
71
+ import { tools as pdfTemplateConfigTools } from './tools/pdf-template-config.js';
72
+ import { tools as receiptsTools } from './tools/receipts.js';
73
+ import { tools as companyRegistryTools } from './tools/company-registry.js';
74
+ import { tools as systemTools } from './tools/system.js';
75
+ import { tools as accountingExportTools } from './tools/accounting-export.js';
76
+ import { tools as backupTools } from './tools/backup.js';
77
+ import { tools as borderouTools } from './tools/borderou.js';
78
+ import { tools as storageConfigTools } from './tools/storage-config.js';
79
+ import { tools as importTools } from './tools/import.js';
80
+ import { tools as cpvCodesTools } from './tools/cpv-codes.js';
81
+ import { tools as ncCodesTools } from './tools/nc-codes.js';
82
+ // Collect all tools
83
+ const allTools = [
84
+ ...authTools,
85
+ ...companiesTools,
86
+ ...invoicesTools,
87
+ ...clientsTools,
88
+ ...productsTools,
89
+ ...paymentsTools,
90
+ ...defaultsTools,
91
+ ...vatRatesTools,
92
+ ...bankAccountsTools,
93
+ ...documentSeriesTools,
94
+ ...proformaInvoicesTools,
95
+ ...recurringInvoicesTools,
96
+ ...deliveryNotesTools,
97
+ ...suppliersTools,
98
+ ...exchangeRatesTools,
99
+ ...emailTemplatesTools,
100
+ ...anafTools,
101
+ ...efacturaMessagesTools,
102
+ ...einvoiceTools,
103
+ ...dashboardTools,
104
+ ...membersTools,
105
+ ...invitationsTools,
106
+ ...notificationsTools,
107
+ ...webhooksTools,
108
+ ...apiKeysTools,
109
+ ...oauth2ClientsTools,
110
+ ...reportsTools,
111
+ ...exportsTools,
112
+ ...adminTools,
113
+ ...licensingTools,
114
+ ...pdfTemplateConfigTools,
115
+ ...receiptsTools,
116
+ ...companyRegistryTools,
117
+ ...systemTools,
118
+ ...accountingExportTools,
119
+ ...backupTools,
120
+ ...borderouTools,
121
+ ...storageConfigTools,
122
+ ...importTools,
123
+ ...cpvCodesTools,
124
+ ...ncCodesTools,
125
+ ];
126
+ async function main() {
127
+ const server = new McpServer({
128
+ name: 'storno',
129
+ version: '1.0.0',
130
+ });
131
+ // Register all tools with the MCP server
132
+ for (const tool of allTools) {
133
+ server.tool(tool.name, tool.description, tool.inputSchema.shape, async (params) => {
134
+ try {
135
+ const result = await tool.handler(params);
136
+ return {
137
+ content: [{ type: 'text', text: result }],
138
+ };
139
+ }
140
+ catch (err) {
141
+ const message = err instanceof Error ? err.message : String(err);
142
+ return {
143
+ content: [{ type: 'text', text: `Unexpected error: ${message}` }],
144
+ isError: true,
145
+ };
146
+ }
147
+ });
148
+ }
149
+ // Auto-login if credentials are provided but no token
150
+ const config = getConfig();
151
+ if (!config.token && config.email && config.password) {
152
+ const res = await apiRequest('/api/auth', {
153
+ method: 'POST',
154
+ body: { email: config.email, password: config.password },
155
+ noAuth: true,
156
+ });
157
+ if (res.ok) {
158
+ updateConfig({
159
+ token: res.data.token,
160
+ refreshToken: res.data.refresh_token,
161
+ });
162
+ }
163
+ }
164
+ // Start stdio transport
165
+ const transport = new StdioServerTransport();
166
+ await server.connect(transport);
167
+ }
168
+ main().catch((err) => {
169
+ console.error('Fatal error:', err);
170
+ process.exit(1);
171
+ });
172
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export declare const tools: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: z.ZodObject<{
6
+ companyId: z.ZodOptional<z.ZodString>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ companyId?: string | undefined;
9
+ }, {
10
+ companyId?: string | undefined;
11
+ }>;
12
+ handler: (params: Record<string, unknown>) => Promise<string>;
13
+ }[];
14
+ //# sourceMappingURL=accounting-export.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounting-export.d.ts","sourceRoot":"","sources":["../../src/tools/accounting-export.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,KAAK;;;;;;;;;;sBAWU,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC;GAmFpE,CAAC"}
@@ -0,0 +1,97 @@
1
+ import { z } from 'zod';
2
+ import { apiRequest } from '../client.js';
3
+ import { formatResponse, notAuthenticated, noCompanySelected } from '../utils/errors.js';
4
+ import { getConfig } from '../config.js';
5
+ function getCompanyId(params) {
6
+ return params.companyId || getConfig().companyId;
7
+ }
8
+ export const tools = [
9
+ {
10
+ name: 'accounting_export_settings_get',
11
+ description: 'Get the accounting export configuration for the active company. Returns settings for Saga, Winmentor, and Ciel accounting software integrations including account codes, journal mappings, and export preferences.',
12
+ inputSchema: z.object({
13
+ companyId: z
14
+ .string()
15
+ .optional()
16
+ .describe('Company UUID override (uses active company if not set)'),
17
+ }),
18
+ handler: async (params) => {
19
+ if (!getConfig().token)
20
+ return notAuthenticated();
21
+ const companyId = getCompanyId(params);
22
+ if (!companyId)
23
+ return noCompanySelected();
24
+ const result = await apiRequest('/api/v1/accounting-export/settings', { companyId });
25
+ return formatResponse(result);
26
+ },
27
+ },
28
+ {
29
+ name: 'accounting_export_settings_update',
30
+ description: 'Update accounting export configuration for the active company. Settings are merged with existing config. Configure account codes, journal mappings, and export preferences for Saga, Winmentor, or Ciel.',
31
+ inputSchema: z.object({
32
+ companyId: z
33
+ .string()
34
+ .optional()
35
+ .describe('Company UUID override (uses active company if not set)'),
36
+ settings: z
37
+ .record(z.unknown())
38
+ .describe('Accounting export settings object to merge with existing config'),
39
+ }),
40
+ handler: async (params) => {
41
+ if (!getConfig().token)
42
+ return notAuthenticated();
43
+ const companyId = getCompanyId(params);
44
+ if (!companyId)
45
+ return noCompanySelected();
46
+ const { settings } = params;
47
+ const result = await apiRequest('/api/v1/accounting-export/settings', {
48
+ method: 'PUT',
49
+ companyId,
50
+ body: settings,
51
+ });
52
+ return formatResponse(result);
53
+ },
54
+ },
55
+ {
56
+ name: 'accounting_export_zip',
57
+ description: 'Export accounting data as a ZIP archive for import into accounting software (Saga, Winmentor, or Ciel). The ZIP contains XML files for clients, suppliers, products, invoices, receipts, and payments. Filter by date range.',
58
+ inputSchema: z.object({
59
+ target: z
60
+ .enum(['saga', 'winmentor', 'ciel'])
61
+ .describe('Target accounting software format'),
62
+ dateFrom: z
63
+ .string()
64
+ .optional()
65
+ .describe('Start date filter (YYYY-MM-DD)'),
66
+ dateTo: z
67
+ .string()
68
+ .optional()
69
+ .describe('End date filter (YYYY-MM-DD)'),
70
+ companyId: z
71
+ .string()
72
+ .optional()
73
+ .describe('Company UUID override (uses active company if not set)'),
74
+ }),
75
+ handler: async (params) => {
76
+ if (!getConfig().token)
77
+ return notAuthenticated();
78
+ const companyId = getCompanyId(params);
79
+ if (!companyId)
80
+ return noCompanySelected();
81
+ const { target, dateFrom, dateTo } = params;
82
+ const body = { target };
83
+ if (dateFrom)
84
+ body.dateFrom = dateFrom;
85
+ if (dateTo)
86
+ body.dateTo = dateTo;
87
+ const result = await apiRequest('/api/v1/accounting-export/zip', {
88
+ method: 'POST',
89
+ companyId,
90
+ body,
91
+ binary: true,
92
+ });
93
+ return formatResponse(result);
94
+ },
95
+ },
96
+ ];
97
+ //# sourceMappingURL=accounting-export.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accounting-export.js","sourceRoot":"","sources":["../../src/tools/accounting-export.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { z } from 'zod';
2
+ export declare const tools: {
3
+ name: string;
4
+ description: string;
5
+ inputSchema: z.ZodObject<{}, "strip", z.ZodTypeAny, {}, {}>;
6
+ handler: (_params: Record<string, unknown>) => Promise<string>;
7
+ }[];
8
+ //# sourceMappingURL=admin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.d.ts","sourceRoot":"","sources":["../../src/tools/admin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,eAAO,MAAM,KAAK;;;;uBAuDW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAG,OAAO,CAAC,MAAM,CAAC;GAwDrE,CAAC"}