mcp-server-acube 0.1.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 +422 -0
- package/dist/client.d.ts +101 -0
- package/dist/client.js +172 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +66 -0
- package/dist/index.js.map +1 -0
- package/dist/pick-fields.js.map +1 -0
- package/dist/response.d.ts +79 -0
- package/dist/response.js +137 -0
- package/dist/response.js.map +1 -0
- package/dist/tools/cassetto-fiscale.d.ts +22 -0
- package/dist/tools/cassetto-fiscale.js +109 -0
- package/dist/tools/cassetto-fiscale.js.map +1 -0
- package/dist/tools/configurations.d.ts +18 -0
- package/dist/tools/configurations.js +101 -0
- package/dist/tools/configurations.js.map +1 -0
- package/dist/tools/invoice-extract.d.ts +22 -0
- package/dist/tools/invoice-extract.js +49 -0
- package/dist/tools/invoice-extract.js.map +1 -0
- package/dist/tools/invoices.d.ts +22 -0
- package/dist/tools/invoices.js +223 -0
- package/dist/tools/invoices.js.map +1 -0
- package/dist/tools/notifications.d.ts +3 -0
- package/dist/tools/notifications.js +79 -0
- package/dist/tools/notifications.js.map +1 -0
- package/dist/tools/receipts.d.ts +19 -0
- package/dist/tools/receipts.js +56 -0
- package/dist/tools/receipts.js.map +1 -0
- package/dist/tools/verify.d.ts +3 -0
- package/dist/tools/verify.js +69 -0
- package/dist/tools/verify.js.map +1 -0
- package/dist/tools/webhooks.d.ts +22 -0
- package/dist/tools/webhooks.js +86 -0
- package/dist/tools/webhooks.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatResponse, errorResponse } from "../response.js";
|
|
3
|
+
export function registerConfigurationTools(server, client) {
|
|
4
|
+
// ── list_business_registries ──────────────────────────────────────────
|
|
5
|
+
server.tool("list_business_registries", "List all business registry configurations (anagrafiche aziendali).", {}, async () => {
|
|
6
|
+
try {
|
|
7
|
+
const result = await client.get("/business-registry-configurations");
|
|
8
|
+
return formatResponse(result.data);
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
return errorResponse(error);
|
|
12
|
+
}
|
|
13
|
+
});
|
|
14
|
+
// ── create_business_registry ──────────────────────────────────────────
|
|
15
|
+
server.tool("create_business_registry", "Create a business registry (anagrafica aziendale) for SDI invoicing.", {
|
|
16
|
+
config: z
|
|
17
|
+
.record(z.unknown())
|
|
18
|
+
.describe("Business registry data: fiscal_id, company_name, supplier_invoice_enabled, etc."),
|
|
19
|
+
}, async (params) => {
|
|
20
|
+
try {
|
|
21
|
+
const result = await client.post("/business-registry-configurations", params.config);
|
|
22
|
+
return formatResponse(result.data);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return errorResponse(error);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
// ── get_business_registry ─────────────────────────────────────────────
|
|
29
|
+
server.tool("get_business_registry", "Get a business registry configuration by ID.", {
|
|
30
|
+
id: z.string().describe("Business registry ID"),
|
|
31
|
+
}, async (params) => {
|
|
32
|
+
try {
|
|
33
|
+
const result = await client.get(`/business-registry-configurations/${encodeURIComponent(params.id)}`);
|
|
34
|
+
return formatResponse(result.data);
|
|
35
|
+
}
|
|
36
|
+
catch (error) {
|
|
37
|
+
return errorResponse(error);
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
// ── update_business_registry ──────────────────────────────────────────
|
|
41
|
+
server.tool("update_business_registry", "Update a business registry configuration.", {
|
|
42
|
+
id: z.string().describe("Business registry ID"),
|
|
43
|
+
config: z.record(z.unknown()).describe("Fields to update"),
|
|
44
|
+
}, async (params) => {
|
|
45
|
+
try {
|
|
46
|
+
const result = await client.put(`/business-registry-configurations/${encodeURIComponent(params.id)}`, params.config);
|
|
47
|
+
return formatResponse(result.data);
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
return errorResponse(error);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
// ── list_appointees ───────────────────────────────────────────────────
|
|
54
|
+
server.tool("list_appointees", "List all ADE tax appointees (intermediari fiscali).", {}, async () => {
|
|
55
|
+
try {
|
|
56
|
+
const result = await client.get("/ade-appointees");
|
|
57
|
+
return formatResponse(result.data);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
return errorResponse(error);
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
// ── create_appointee ──────────────────────────────────────────────────
|
|
64
|
+
server.tool("create_appointee", "Create an ADE appointee (intermediario fiscale).", {
|
|
65
|
+
appointee: z.record(z.unknown()).describe("Appointee data"),
|
|
66
|
+
}, async (params) => {
|
|
67
|
+
try {
|
|
68
|
+
const result = await client.post("/ade-appointees", params.appointee);
|
|
69
|
+
return formatResponse(result.data);
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
return errorResponse(error);
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
// ── get_appointee ─────────────────────────────────────────────────────
|
|
76
|
+
server.tool("get_appointee", "Get an ADE appointee by ID.", {
|
|
77
|
+
id: z.string().describe("Appointee ID"),
|
|
78
|
+
}, async (params) => {
|
|
79
|
+
try {
|
|
80
|
+
const result = await client.get(`/ade-appointees/${encodeURIComponent(params.id)}`);
|
|
81
|
+
return formatResponse(result.data);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
return errorResponse(error);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
// ── update_appointee ──────────────────────────────────────────────────
|
|
88
|
+
server.tool("update_appointee", "Update an ADE appointee.", {
|
|
89
|
+
id: z.string().describe("Appointee ID"),
|
|
90
|
+
appointee: z.record(z.unknown()).describe("Fields to update"),
|
|
91
|
+
}, async (params) => {
|
|
92
|
+
try {
|
|
93
|
+
const result = await client.put(`/ade-appointees/${encodeURIComponent(params.id)}`, params.appointee);
|
|
94
|
+
return formatResponse(result.data);
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
return errorResponse(error);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=configurations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"configurations.js","sourceRoot":"","sources":["../../src/tools/configurations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module tools/invoice-extract
|
|
3
|
+
*
|
|
4
|
+
* AI-powered PDF-to-FatturaPA extraction tools.
|
|
5
|
+
*
|
|
6
|
+
* Provides 3 tools:
|
|
7
|
+
* - `extract_invoice_from_pdf` -- Upload a base64-encoded PDF for extraction.
|
|
8
|
+
* Returns a job UUID to track progress.
|
|
9
|
+
* - `get_extraction_status` -- Poll the extraction job status (pending, completed, failed).
|
|
10
|
+
* - `get_extraction_result` -- Download the converted FatturaPA invoice (JSON or XML)
|
|
11
|
+
* from a completed extraction job.
|
|
12
|
+
*
|
|
13
|
+
* Typical workflow:
|
|
14
|
+
* 1. Upload PDF with `extract_invoice_from_pdf` -> get job UUID.
|
|
15
|
+
* 2. Poll `get_extraction_status` until status is `completed`.
|
|
16
|
+
* 3. Retrieve the FatturaPA with `get_extraction_result`.
|
|
17
|
+
*
|
|
18
|
+
* @see https://docs.acubeapi.com/ -- A-Cube extraction endpoints
|
|
19
|
+
*/
|
|
20
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
21
|
+
import type { AcubeClient } from "../client.js";
|
|
22
|
+
export declare function registerInvoiceExtractTools(server: McpServer, client: AcubeClient): void;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatResponse, errorResponse } from "../response.js";
|
|
3
|
+
export function registerInvoiceExtractTools(server, client) {
|
|
4
|
+
// ── extract_invoice_from_pdf ──────────────────────────────────────────
|
|
5
|
+
server.tool("extract_invoice_from_pdf", "Upload a PDF (base64) for AI extraction to FatturaPA. Returns job UUID.", {
|
|
6
|
+
pdf_base64: z.string().describe("Base64-encoded PDF content"),
|
|
7
|
+
}, async (params) => {
|
|
8
|
+
try {
|
|
9
|
+
const response = await client.post("/invoice-extract", { pdf_base64: params.pdf_base64 });
|
|
10
|
+
return formatResponse(response.data);
|
|
11
|
+
}
|
|
12
|
+
catch (error) {
|
|
13
|
+
return errorResponse(error);
|
|
14
|
+
}
|
|
15
|
+
});
|
|
16
|
+
// ── get_extraction_status ─────────────────────────────────────────────
|
|
17
|
+
server.tool("get_extraction_status", "Check PDF extraction job status by UUID.", {
|
|
18
|
+
uuid: z.string().describe("Extraction job UUID"),
|
|
19
|
+
}, async (params) => {
|
|
20
|
+
try {
|
|
21
|
+
const response = await client.get(`/invoice-extract/${encodeURIComponent(params.uuid)}`);
|
|
22
|
+
return formatResponse(response.data);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
return errorResponse(error);
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
// ── get_extraction_result ─────────────────────────────────────────────
|
|
29
|
+
server.tool("get_extraction_result", "Get completed extraction result as FatturaPA (JSON or XML).", {
|
|
30
|
+
uuid: z.string().describe("Completed extraction job UUID"),
|
|
31
|
+
format: z.enum(["json", "xml"]).optional().default("json").describe("Output format"),
|
|
32
|
+
}, async (params) => {
|
|
33
|
+
try {
|
|
34
|
+
const acceptMap = {
|
|
35
|
+
json: "application/json",
|
|
36
|
+
xml: "application/xml",
|
|
37
|
+
};
|
|
38
|
+
const response = await client.get(`/invoice-extract/${encodeURIComponent(params.uuid)}/result`, { accept: acceptMap[params.format] });
|
|
39
|
+
if (typeof response.data === "string") {
|
|
40
|
+
return { content: [{ type: "text", text: response.data }] };
|
|
41
|
+
}
|
|
42
|
+
return formatResponse(response.data);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
return errorResponse(error);
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=invoice-extract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoice-extract.js","sourceRoot":"","sources":["../../src/tools/invoice-extract.ts"],"names":[],"mappings":"AAoBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,UAAU,2BAA2B,CACzC,MAAiB,EACjB,MAAmB;IAEnB,yEAAyE;IACzE,MAAM,CAAC,IAAI,CACT,0BAA0B,EAC1B,yEAAyE,EACzE;QACE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KAC9D,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,kBAAkB,EAClB,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE,CAClC,CAAC;YACF,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,yEAAyE;IACzE,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,0CAA0C,EAC1C;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KACjD,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,oBAAoB,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACtD,CAAC;YACF,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,yEAAyE;IACzE,MAAM,CAAC,IAAI,CACT,uBAAuB,EACvB,6DAA6D,EAC7D;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;QAC1D,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,eAAe,CAAC;KACrF,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,SAAS,GAA2B;gBACxC,IAAI,EAAE,kBAAkB;gBACxB,GAAG,EAAE,iBAAiB;aACvB,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,oBAAoB,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAC5D,EAAE,MAAM,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CACrC,CAAC;YAEF,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YACvE,CAAC;YACD,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module tools/invoices
|
|
3
|
+
*
|
|
4
|
+
* SDI electronic invoicing tools.
|
|
5
|
+
*
|
|
6
|
+
* Provides 4 tools:
|
|
7
|
+
* - `send_invoice` -- Submit a FatturaPA invoice to SDI.
|
|
8
|
+
* - `send_simplified_invoice` -- Submit a simplified invoice (max 400 EUR).
|
|
9
|
+
* - `list_invoices` -- Search/filter invoices with 20+ parameters and a
|
|
10
|
+
* token-optimized compact default view.
|
|
11
|
+
* - `get_invoice` -- Retrieve a single invoice by UUID (JSON, XML, PDF, HTML).
|
|
12
|
+
*
|
|
13
|
+
* Token optimization: `list_invoices` parses the FatturaPA JSON payload on the
|
|
14
|
+
* server side to extract `invoice_number`, `invoice_date`, `total_amount`, and
|
|
15
|
+
* `currency` as top-level fields. This avoids transferring the full payload
|
|
16
|
+
* (~2000 tokens/invoice) while still exposing the most-requested data.
|
|
17
|
+
*
|
|
18
|
+
* @see https://docs.acubeapi.com/ -- A-Cube invoice endpoints
|
|
19
|
+
*/
|
|
20
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
21
|
+
import type { AcubeClient } from "../client.js";
|
|
22
|
+
export declare function registerInvoiceTools(server: McpServer, client: AcubeClient): void;
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { pickFields, formatResponse, errorResponse } from "../response.js";
|
|
3
|
+
/**
|
|
4
|
+
* Default field set for `list_invoices` compact view.
|
|
5
|
+
*
|
|
6
|
+
* Covers the most common use case: "who sent what to whom, for how much,
|
|
7
|
+
* and what is the current SDI status?" The `invoice_number`, `invoice_date`,
|
|
8
|
+
* `total_amount`, and `currency` fields are computed by {@link enrichInvoices}.
|
|
9
|
+
*/
|
|
10
|
+
const LIST_INVOICES_DEFAULT_FIELDS = [
|
|
11
|
+
"uuid",
|
|
12
|
+
"created_at",
|
|
13
|
+
"document_type",
|
|
14
|
+
"marking",
|
|
15
|
+
"notice",
|
|
16
|
+
"invoice_number",
|
|
17
|
+
"invoice_date",
|
|
18
|
+
"total_amount",
|
|
19
|
+
"currency",
|
|
20
|
+
"sender.business_name",
|
|
21
|
+
"sender.business_vat_number_code",
|
|
22
|
+
"recipient.business_name",
|
|
23
|
+
"recipient.business_vat_number_code",
|
|
24
|
+
"notifications",
|
|
25
|
+
];
|
|
26
|
+
/**
|
|
27
|
+
* Parse the `payload` JSON string in each invoice and extract commonly needed
|
|
28
|
+
* fields as top-level properties, so they can be selected via `fields` without
|
|
29
|
+
* requiring the full payload blob.
|
|
30
|
+
*/
|
|
31
|
+
function enrichInvoices(data) {
|
|
32
|
+
if (!Array.isArray(data))
|
|
33
|
+
return data;
|
|
34
|
+
return data.map((item) => {
|
|
35
|
+
if (typeof item.payload !== "string")
|
|
36
|
+
return item;
|
|
37
|
+
try {
|
|
38
|
+
const parsed = JSON.parse(item.payload);
|
|
39
|
+
const body = parsed?.fattura_elettronica_body?.[0];
|
|
40
|
+
const doc = body?.dati_generali?.dati_generali_documento;
|
|
41
|
+
return {
|
|
42
|
+
...item,
|
|
43
|
+
invoice_number: doc?.numero ?? null,
|
|
44
|
+
invoice_date: doc?.data ?? null,
|
|
45
|
+
total_amount: doc?.importo_totale_documento ?? null,
|
|
46
|
+
currency: doc?.divisa ?? null,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return item;
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
export function registerInvoiceTools(server, client) {
|
|
55
|
+
// ── send_invoice ──────────────────────────────────────────────────────
|
|
56
|
+
server.tool("send_invoice", "Send a FatturaPA invoice to SDI. Returns the assigned UUID (HTTP 202).", {
|
|
57
|
+
invoice: z
|
|
58
|
+
.record(z.unknown())
|
|
59
|
+
.describe("Complete FatturaPA JSON with fattura_elettronica_header and fattura_elettronica_body"),
|
|
60
|
+
sign: z
|
|
61
|
+
.boolean()
|
|
62
|
+
.optional()
|
|
63
|
+
.describe("Digitally sign before sending (X-SignInvoice header)"),
|
|
64
|
+
}, async (params) => {
|
|
65
|
+
try {
|
|
66
|
+
const headers = {};
|
|
67
|
+
if (params.sign !== undefined) {
|
|
68
|
+
headers["X-SignInvoice"] = params.sign ? "true" : "false";
|
|
69
|
+
}
|
|
70
|
+
const response = await client.post("/invoices", params.invoice, { headers });
|
|
71
|
+
return formatResponse(response.data);
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
return errorResponse(error);
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
// ── send_simplified_invoice ───────────────────────────────────────────
|
|
78
|
+
server.tool("send_simplified_invoice", "Send a simplified FatturaPA to SDI (max 400 EUR). Returns UUID.", {
|
|
79
|
+
invoice: z
|
|
80
|
+
.record(z.unknown())
|
|
81
|
+
.describe("Simplified FatturaPA JSON"),
|
|
82
|
+
}, async (params) => {
|
|
83
|
+
try {
|
|
84
|
+
const response = await client.post("/invoices/simplified", params.invoice);
|
|
85
|
+
return formatResponse(response.data);
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
return errorResponse(error);
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
// ── list_invoices ─────────────────────────────────────────────────────
|
|
92
|
+
server.tool("list_invoices", "List/search SDI invoices. Filters: sender/recipient name or VAT, invoice number, " +
|
|
93
|
+
"document type, direction, status, date ranges. Default response is compact (key fields only). " +
|
|
94
|
+
"Use fields:['*'] for full data.", {
|
|
95
|
+
page: z.number().optional().default(1).describe("Page number"),
|
|
96
|
+
items_per_page: z.number().optional().default(30).describe("Items per page"),
|
|
97
|
+
marking: z
|
|
98
|
+
.string()
|
|
99
|
+
.optional()
|
|
100
|
+
.describe("Status: waiting, quarantena, sent, invoice-error, received, rejected, delivered, not-delivered"),
|
|
101
|
+
sender_name: z.string().optional().describe("Sender business name (partial match)"),
|
|
102
|
+
sender_vat: z.string().optional().describe("Sender P.IVA"),
|
|
103
|
+
sender_fiscal_code: z.string().optional().describe("Sender codice fiscale"),
|
|
104
|
+
recipient_name: z.string().optional().describe("Recipient business name (partial match)"),
|
|
105
|
+
recipient_vat: z.string().optional().describe("Recipient P.IVA"),
|
|
106
|
+
recipient_fiscal_code: z.string().optional().describe("Recipient codice fiscale"),
|
|
107
|
+
invoice_number: z.string().optional().describe("Invoice number (partial match)"),
|
|
108
|
+
document_type: z.string().optional().describe("FatturaPA type: TD01, TD04, TD05, TD06, TD07..."),
|
|
109
|
+
direction: z.enum(["outgoing", "incoming"]).optional().describe("outgoing or incoming"),
|
|
110
|
+
invoice_date_from: z.string().optional().describe("Invoice date >= (ISO date)"),
|
|
111
|
+
invoice_date_to: z.string().optional().describe("Invoice date <= (ISO date)"),
|
|
112
|
+
created_at_from: z.string().optional().describe("Created at >= (ISO date)"),
|
|
113
|
+
created_at_to: z.string().optional().describe("Created at <= (ISO date)"),
|
|
114
|
+
order_by_date: z.enum(["asc", "desc"]).optional().describe("Sort by invoice date"),
|
|
115
|
+
order_by_number: z.enum(["asc", "desc"]).optional().describe("Sort by invoice number"),
|
|
116
|
+
downloaded: z.boolean().optional().describe("Filter by download status"),
|
|
117
|
+
signed: z.boolean().optional().describe("Filter by signature status"),
|
|
118
|
+
fields: z
|
|
119
|
+
.array(z.string())
|
|
120
|
+
.optional()
|
|
121
|
+
.describe("Fields to return per invoice (dot-notation supported). " +
|
|
122
|
+
"Default: uuid, created_at, document_type, marking, notice, invoice_number, invoice_date, " +
|
|
123
|
+
"total_amount, currency, sender.business_name, sender.business_vat_number_code, " +
|
|
124
|
+
"recipient.business_name, recipient.business_vat_number_code, notifications. " +
|
|
125
|
+
"Use ['*'] for full response. Extra: payload, sender, recipient, sdi_file_name, signed, downloaded."),
|
|
126
|
+
}, async (params) => {
|
|
127
|
+
try {
|
|
128
|
+
const query = new URLSearchParams();
|
|
129
|
+
query.set("page", String(params.page));
|
|
130
|
+
query.set("itemsPerPage", String(params.items_per_page));
|
|
131
|
+
if (params.marking)
|
|
132
|
+
query.set("marking", params.marking);
|
|
133
|
+
if (params.sender_name)
|
|
134
|
+
query.set("sender.business_name", params.sender_name);
|
|
135
|
+
if (params.sender_vat)
|
|
136
|
+
query.set("sender.business_vat_number_code", params.sender_vat);
|
|
137
|
+
if (params.sender_fiscal_code)
|
|
138
|
+
query.set("sender.business_fiscal_code", params.sender_fiscal_code);
|
|
139
|
+
if (params.recipient_name)
|
|
140
|
+
query.set("recipient.business_name", params.recipient_name);
|
|
141
|
+
if (params.recipient_vat)
|
|
142
|
+
query.set("recipient.business_vat_number_code", params.recipient_vat);
|
|
143
|
+
if (params.recipient_fiscal_code)
|
|
144
|
+
query.set("recipient.business_fiscal_code", params.recipient_fiscal_code);
|
|
145
|
+
if (params.invoice_number)
|
|
146
|
+
query.set("invoice_number", params.invoice_number);
|
|
147
|
+
if (params.document_type)
|
|
148
|
+
query.set("document_type", params.document_type);
|
|
149
|
+
if (params.direction)
|
|
150
|
+
query.set("type", params.direction === "outgoing" ? "0" : "1");
|
|
151
|
+
if (params.invoice_date_from)
|
|
152
|
+
query.set("invoice_date[after]", params.invoice_date_from);
|
|
153
|
+
if (params.invoice_date_to)
|
|
154
|
+
query.set("invoice_date[before]", params.invoice_date_to);
|
|
155
|
+
if (params.created_at_from)
|
|
156
|
+
query.set("created_at[after]", params.created_at_from);
|
|
157
|
+
if (params.created_at_to)
|
|
158
|
+
query.set("created_at[before]", params.created_at_to);
|
|
159
|
+
if (params.order_by_date)
|
|
160
|
+
query.set("order[invoice_date]", params.order_by_date);
|
|
161
|
+
if (params.order_by_number)
|
|
162
|
+
query.set("order[invoice_number]", params.order_by_number);
|
|
163
|
+
if (params.downloaded !== undefined)
|
|
164
|
+
query.set("downloaded", String(params.downloaded));
|
|
165
|
+
if (params.signed !== undefined)
|
|
166
|
+
query.set("signed", String(params.signed));
|
|
167
|
+
const response = await client.get(`/invoices?${query.toString()}`);
|
|
168
|
+
let data = response.data;
|
|
169
|
+
const wantAll = params.fields?.length === 1 && params.fields[0] === "*";
|
|
170
|
+
if (wantAll) {
|
|
171
|
+
return formatResponse(data);
|
|
172
|
+
}
|
|
173
|
+
data = enrichInvoices(data);
|
|
174
|
+
const selectedFields = params.fields ?? LIST_INVOICES_DEFAULT_FIELDS;
|
|
175
|
+
data = pickFields(data, selectedFields);
|
|
176
|
+
return formatResponse(data);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
return errorResponse(error);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
// ── get_invoice ───────────────────────────────────────────────────────
|
|
183
|
+
server.tool("get_invoice", "Get a specific invoice by UUID. Formats: json, xml, pdf (base64), html.", {
|
|
184
|
+
uuid: z.string().describe("Invoice UUID"),
|
|
185
|
+
format: z
|
|
186
|
+
.enum(["json", "xml", "pdf", "html"])
|
|
187
|
+
.optional()
|
|
188
|
+
.default("json")
|
|
189
|
+
.describe("Output format (default: json)"),
|
|
190
|
+
print_theme: z.string().optional().describe("Print theme for PDF/HTML"),
|
|
191
|
+
fields: z
|
|
192
|
+
.array(z.string())
|
|
193
|
+
.optional()
|
|
194
|
+
.describe("Fields to return (JSON only, dot-notation). Omit for all fields."),
|
|
195
|
+
}, async (params) => {
|
|
196
|
+
try {
|
|
197
|
+
const acceptMap = {
|
|
198
|
+
json: "application/json",
|
|
199
|
+
xml: "application/xml",
|
|
200
|
+
pdf: "application/pdf",
|
|
201
|
+
html: "text/html",
|
|
202
|
+
};
|
|
203
|
+
const headers = {};
|
|
204
|
+
if (params.print_theme) {
|
|
205
|
+
headers["X-PrintTheme"] = params.print_theme;
|
|
206
|
+
}
|
|
207
|
+
const response = await client.get(`/invoices/${encodeURIComponent(params.uuid)}`, {
|
|
208
|
+
accept: acceptMap[params.format],
|
|
209
|
+
headers,
|
|
210
|
+
});
|
|
211
|
+
if (typeof response.data === "string") {
|
|
212
|
+
return {
|
|
213
|
+
content: [{ type: "text", text: response.data }],
|
|
214
|
+
};
|
|
215
|
+
}
|
|
216
|
+
return formatResponse(response.data, params.fields);
|
|
217
|
+
}
|
|
218
|
+
catch (error) {
|
|
219
|
+
return errorResponse(error);
|
|
220
|
+
}
|
|
221
|
+
});
|
|
222
|
+
}
|
|
223
|
+
//# sourceMappingURL=invoices.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoices.js","sourceRoot":"","sources":["../../src/tools/invoices.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module tools/notifications
|
|
3
|
+
*
|
|
4
|
+
* SDI notification tools.
|
|
5
|
+
*
|
|
6
|
+
* Provides 3 tools:
|
|
7
|
+
* - `list_notifications` -- List SDI notifications with filtering by type and download status.
|
|
8
|
+
* - `get_notification` -- Retrieve a single notification by UUID (JSON or XML).
|
|
9
|
+
* - `mark_notifications_downloaded` -- Mark notifications as downloaded by UUID.
|
|
10
|
+
*
|
|
11
|
+
* SDI notification types:
|
|
12
|
+
* - `NS` (Notifica di Scarto) -- Invoice rejected by SDI.
|
|
13
|
+
* - `RC` (Ricevuta di Consegna) -- Invoice delivered to recipient.
|
|
14
|
+
* - `MC` (Mancata Consegna) -- Delivery failed.
|
|
15
|
+
* - `EC` (Esito Committente) -- Recipient accepted/refused.
|
|
16
|
+
* - `DT` (Decorrenza Termini) -- Deadline passed, invoice auto-accepted.
|
|
17
|
+
* - `MT`, `SE`, `NE`, `AT` -- Metadata, outcome rejection, outcome notification, attestation.
|
|
18
|
+
*
|
|
19
|
+
* @see https://docs.acubeapi.com/ -- A-Cube notification endpoints
|
|
20
|
+
*/
|
|
21
|
+
import { z } from "zod";
|
|
22
|
+
import { formatResponse, errorResponse } from "../response.js";
|
|
23
|
+
export function registerNotificationTools(server, client) {
|
|
24
|
+
// ---------- list_notifications ----------
|
|
25
|
+
server.tool("list_notifications", "List SDI notifications for sent invoices. Types: NS=Rejection, MT=Metadata, RC=Delivery, MC=Non-delivery, EC=Outcome, DT=Deadline.", {
|
|
26
|
+
page: z.number().optional().default(1).describe("Page number"),
|
|
27
|
+
items_per_page: z.number().optional().default(30).describe("Items per page"),
|
|
28
|
+
type: z
|
|
29
|
+
.enum(["NS", "MT", "RC", "MC", "EC", "SE", "NE", "DT", "AT"])
|
|
30
|
+
.optional()
|
|
31
|
+
.describe("Notification type filter"),
|
|
32
|
+
downloaded: z.boolean().optional().describe("Filter by downloaded flag"),
|
|
33
|
+
}, async (params) => {
|
|
34
|
+
try {
|
|
35
|
+
const query = new URLSearchParams();
|
|
36
|
+
query.set("page", String(params.page));
|
|
37
|
+
query.set("items_per_page", String(params.items_per_page));
|
|
38
|
+
if (params.type !== undefined)
|
|
39
|
+
query.set("type", params.type);
|
|
40
|
+
if (params.downloaded !== undefined)
|
|
41
|
+
query.set("downloaded", String(params.downloaded));
|
|
42
|
+
const result = await client.get(`/notifications?${query.toString()}`);
|
|
43
|
+
return formatResponse(result.data);
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
return errorResponse(error);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
// ---------- get_notification ----------
|
|
50
|
+
server.tool("get_notification", "Get a specific SDI notification by UUID (JSON or XML).", {
|
|
51
|
+
uuid: z.string().describe("Notification UUID"),
|
|
52
|
+
format: z.enum(["json", "xml"]).optional().default("json").describe("Response format"),
|
|
53
|
+
}, async (params) => {
|
|
54
|
+
try {
|
|
55
|
+
const accept = params.format === "xml" ? "application/xml" : "application/json";
|
|
56
|
+
const result = await client.get(`/notifications/${encodeURIComponent(params.uuid)}`, { accept });
|
|
57
|
+
if (typeof result.data === "string") {
|
|
58
|
+
return { content: [{ type: "text", text: result.data }] };
|
|
59
|
+
}
|
|
60
|
+
return formatResponse(result.data);
|
|
61
|
+
}
|
|
62
|
+
catch (error) {
|
|
63
|
+
return errorResponse(error);
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
// ---------- mark_notifications_downloaded ----------
|
|
67
|
+
server.tool("mark_notifications_downloaded", "Mark SDI notifications as downloaded by UUIDs.", {
|
|
68
|
+
uuids: z.array(z.string()).describe("Notification UUIDs to mark"),
|
|
69
|
+
}, async (params) => {
|
|
70
|
+
try {
|
|
71
|
+
const result = await client.put("/notifications", params.uuids);
|
|
72
|
+
return formatResponse(result.data);
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
return errorResponse(error);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=notifications.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notifications.js","sourceRoot":"","sources":["../../src/tools/notifications.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module tools/receipts
|
|
3
|
+
*
|
|
4
|
+
* Electronic receipt (scontrino elettronico) tools.
|
|
5
|
+
*
|
|
6
|
+
* Provides 4 tools:
|
|
7
|
+
* - `send_receipt` -- Issue an electronic receipt to the Agenzia delle Entrate.
|
|
8
|
+
* - `get_receipt_details` -- Get receipt transaction details.
|
|
9
|
+
* - `void_receipt` -- Void/cancel a receipt (annullamento).
|
|
10
|
+
* - `return_receipt_items` -- Process item returns against a receipt (reso).
|
|
11
|
+
*
|
|
12
|
+
* Note: The receipt service is unavailable daily from 23:55 to 00:00 Italian
|
|
13
|
+
* time due to Agenzia delle Entrate maintenance.
|
|
14
|
+
*
|
|
15
|
+
* @see https://docs.acubeapi.com/ -- A-Cube receipt endpoints
|
|
16
|
+
*/
|
|
17
|
+
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
18
|
+
import type { AcubeClient } from "../client.js";
|
|
19
|
+
export declare function registerReceiptTools(server: McpServer, client: AcubeClient): void;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { formatResponse, errorResponse } from "../response.js";
|
|
3
|
+
export function registerReceiptTools(server, client) {
|
|
4
|
+
// ── send_receipt ──────────────────────────────────────────────────────
|
|
5
|
+
server.tool("send_receipt", "Send an electronic receipt (scontrino). Not available 23:55-00:00 Italian time.", {
|
|
6
|
+
receipt: z
|
|
7
|
+
.record(z.unknown())
|
|
8
|
+
.describe("Receipt data: fiscal_id, items[], cash_payment_amount, electronic_payment_amount"),
|
|
9
|
+
}, async (params) => {
|
|
10
|
+
try {
|
|
11
|
+
const response = await client.post("/receipts", params.receipt);
|
|
12
|
+
return formatResponse(response.data);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
return errorResponse(error);
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
// ── get_receipt_details ─────────────────────────────────────────────
|
|
19
|
+
server.tool("get_receipt_details", "Get receipt details by ID.", {
|
|
20
|
+
id: z.string().describe("Receipt ID"),
|
|
21
|
+
}, async (params) => {
|
|
22
|
+
try {
|
|
23
|
+
const response = await client.get(`/receipts/${encodeURIComponent(params.id)}/details`);
|
|
24
|
+
return formatResponse(response.data);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
return errorResponse(error);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
// ── void_receipt ────────────────────────────────────────────────────
|
|
31
|
+
server.tool("void_receipt", "Void/cancel a receipt (annullamento scontrino).", {
|
|
32
|
+
id: z.string().describe("Receipt ID to void"),
|
|
33
|
+
}, async (params) => {
|
|
34
|
+
try {
|
|
35
|
+
const response = await client.delete(`/receipts/${encodeURIComponent(params.id)}`);
|
|
36
|
+
return formatResponse(response.data);
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
return errorResponse(error);
|
|
40
|
+
}
|
|
41
|
+
});
|
|
42
|
+
// ── return_receipt_items ────────────────────────────────────────────
|
|
43
|
+
server.tool("return_receipt_items", "Process item returns on a receipt (reso).", {
|
|
44
|
+
id: z.string().describe("Original receipt ID"),
|
|
45
|
+
items: z.array(z.record(z.unknown())).describe("Items to return"),
|
|
46
|
+
}, async (params) => {
|
|
47
|
+
try {
|
|
48
|
+
const response = await client.post(`/receipts/${encodeURIComponent(params.id)}/return`, params.items);
|
|
49
|
+
return formatResponse(response.data);
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
return errorResponse(error);
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=receipts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipts.js","sourceRoot":"","sources":["../../src/tools/receipts.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAE/D,MAAM,UAAU,oBAAoB,CAClC,MAAiB,EACjB,MAAmB;IAEnB,yEAAyE;IACzE,MAAM,CAAC,IAAI,CACT,cAAc,EACd,iFAAiF,EACjF;QACE,OAAO,EAAE,CAAC;aACP,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;aACnB,QAAQ,CAAC,kFAAkF,CAAC;KAChG,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAAU,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACzE,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,uEAAuE;IACvE,MAAM,CAAC,IAAI,CACT,qBAAqB,EACrB,4BAA4B,EAC5B;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;KACtC,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,GAAG,CAC/B,aAAa,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,UAAU,CACrD,CAAC;YACF,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,uEAAuE;IACvE,MAAM,CAAC,IAAI,CACT,cAAc,EACd,iDAAiD,EACjD;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KAC9C,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,MAAM,CAClC,aAAa,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAC7C,CAAC;YACF,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;IAEF,uEAAuE;IACvE,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,2CAA2C,EAC3C;QACE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC9C,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KAClE,EACD,KAAK,EAAE,MAAM,EAAE,EAAE;QACf,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,IAAI,CAChC,aAAa,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,SAAS,EACnD,MAAM,CAAC,KAAK,CACb,CAAC;YACF,OAAO,cAAc,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC;QAAC,OAAO,KAAc,EAAE,CAAC;YACxB,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|