@energio/holded-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 +1040 -0
- package/dist/constants.d.ts +60 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +72 -0
- package/dist/constants.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +86 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/accounting/account-balances.d.ts +19 -0
- package/dist/schemas/accounting/account-balances.d.ts.map +1 -0
- package/dist/schemas/accounting/account-balances.js +28 -0
- package/dist/schemas/accounting/account-balances.js.map +1 -0
- package/dist/schemas/accounting/accounts.d.ts +49 -0
- package/dist/schemas/accounting/accounts.d.ts.map +1 -0
- package/dist/schemas/accounting/accounts.js +50 -0
- package/dist/schemas/accounting/accounts.js.map +1 -0
- package/dist/schemas/accounting/daily-ledger.d.ts +45 -0
- package/dist/schemas/accounting/daily-ledger.d.ts.map +1 -0
- package/dist/schemas/accounting/daily-ledger.js +57 -0
- package/dist/schemas/accounting/daily-ledger.js.map +1 -0
- package/dist/schemas/common.d.ts +118 -0
- package/dist/schemas/common.d.ts.map +1 -0
- package/dist/schemas/common.js +126 -0
- package/dist/schemas/common.js.map +1 -0
- package/dist/schemas/crm/bookings.d.ts +108 -0
- package/dist/schemas/crm/bookings.d.ts.map +1 -0
- package/dist/schemas/crm/bookings.js +96 -0
- package/dist/schemas/crm/bookings.js.map +1 -0
- package/dist/schemas/crm/events.d.ts +57 -0
- package/dist/schemas/crm/events.d.ts.map +1 -0
- package/dist/schemas/crm/events.js +53 -0
- package/dist/schemas/crm/events.js.map +1 -0
- package/dist/schemas/crm/funnels.d.ts +60 -0
- package/dist/schemas/crm/funnels.d.ts.map +1 -0
- package/dist/schemas/crm/funnels.js +48 -0
- package/dist/schemas/crm/funnels.js.map +1 -0
- package/dist/schemas/crm/leads.d.ts +146 -0
- package/dist/schemas/crm/leads.d.ts.map +1 -0
- package/dist/schemas/crm/leads.js +129 -0
- package/dist/schemas/crm/leads.js.map +1 -0
- package/dist/schemas/invoicing/contacts.d.ts +352 -0
- package/dist/schemas/invoicing/contacts.d.ts.map +1 -0
- package/dist/schemas/invoicing/contacts.js +187 -0
- package/dist/schemas/invoicing/contacts.js.map +1 -0
- package/dist/schemas/invoicing/documents.d.ts +424 -0
- package/dist/schemas/invoicing/documents.d.ts.map +1 -0
- package/dist/schemas/invoicing/documents.js +217 -0
- package/dist/schemas/invoicing/documents.js.map +1 -0
- package/dist/schemas/invoicing/expenses-accounts.d.ts +47 -0
- package/dist/schemas/invoicing/expenses-accounts.d.ts.map +1 -0
- package/dist/schemas/invoicing/expenses-accounts.js +43 -0
- package/dist/schemas/invoicing/expenses-accounts.js.map +1 -0
- package/dist/schemas/invoicing/numbering-series.d.ts +94 -0
- package/dist/schemas/invoicing/numbering-series.d.ts.map +1 -0
- package/dist/schemas/invoicing/numbering-series.js +43 -0
- package/dist/schemas/invoicing/numbering-series.js.map +1 -0
- package/dist/schemas/invoicing/payments.d.ts +50 -0
- package/dist/schemas/invoicing/payments.d.ts.map +1 -0
- package/dist/schemas/invoicing/payments.js +46 -0
- package/dist/schemas/invoicing/payments.js.map +1 -0
- package/dist/schemas/invoicing/products.d.ts +176 -0
- package/dist/schemas/invoicing/products.d.ts.map +1 -0
- package/dist/schemas/invoicing/products.js +149 -0
- package/dist/schemas/invoicing/products.js.map +1 -0
- package/dist/schemas/invoicing/remittances.d.ts +21 -0
- package/dist/schemas/invoicing/remittances.d.ts.map +1 -0
- package/dist/schemas/invoicing/remittances.js +20 -0
- package/dist/schemas/invoicing/remittances.js.map +1 -0
- package/dist/schemas/invoicing/sales-channels.d.ts +45 -0
- package/dist/schemas/invoicing/sales-channels.d.ts.map +1 -0
- package/dist/schemas/invoicing/sales-channels.js +41 -0
- package/dist/schemas/invoicing/sales-channels.js.map +1 -0
- package/dist/schemas/invoicing/services.d.ts +55 -0
- package/dist/schemas/invoicing/services.d.ts.map +1 -0
- package/dist/schemas/invoicing/services.js +51 -0
- package/dist/schemas/invoicing/services.js.map +1 -0
- package/dist/schemas/invoicing/taxes.d.ts +12 -0
- package/dist/schemas/invoicing/taxes.d.ts.map +1 -0
- package/dist/schemas/invoicing/taxes.js +12 -0
- package/dist/schemas/invoicing/taxes.js.map +1 -0
- package/dist/schemas/invoicing/treasury.d.ts +42 -0
- package/dist/schemas/invoicing/treasury.d.ts.map +1 -0
- package/dist/schemas/invoicing/treasury.js +39 -0
- package/dist/schemas/invoicing/treasury.js.map +1 -0
- package/dist/schemas/invoicing/warehouses.d.ts +61 -0
- package/dist/schemas/invoicing/warehouses.d.ts.map +1 -0
- package/dist/schemas/invoicing/warehouses.js +43 -0
- package/dist/schemas/invoicing/warehouses.js.map +1 -0
- package/dist/schemas/projects/projects.d.ts +60 -0
- package/dist/schemas/projects/projects.d.ts.map +1 -0
- package/dist/schemas/projects/projects.js +55 -0
- package/dist/schemas/projects/projects.js.map +1 -0
- package/dist/schemas/projects/tasks.d.ts +68 -0
- package/dist/schemas/projects/tasks.d.ts.map +1 -0
- package/dist/schemas/projects/tasks.js +64 -0
- package/dist/schemas/projects/tasks.js.map +1 -0
- package/dist/schemas/projects/time-tracking.d.ts +80 -0
- package/dist/schemas/projects/time-tracking.d.ts.map +1 -0
- package/dist/schemas/projects/time-tracking.js +75 -0
- package/dist/schemas/projects/time-tracking.js.map +1 -0
- package/dist/schemas/team/employees.d.ts +135 -0
- package/dist/schemas/team/employees.d.ts.map +1 -0
- package/dist/schemas/team/employees.js +144 -0
- package/dist/schemas/team/employees.js.map +1 -0
- package/dist/schemas/team/time-tracking.d.ts +98 -0
- package/dist/schemas/team/time-tracking.d.ts.map +1 -0
- package/dist/schemas/team/time-tracking.js +89 -0
- package/dist/schemas/team/time-tracking.js.map +1 -0
- package/dist/services/api.d.ts +118 -0
- package/dist/services/api.d.ts.map +1 -0
- package/dist/services/api.js +441 -0
- package/dist/services/api.js.map +1 -0
- package/dist/tools/accounting/account-balances.d.ts +44 -0
- package/dist/tools/accounting/account-balances.d.ts.map +1 -0
- package/dist/tools/accounting/account-balances.js +240 -0
- package/dist/tools/accounting/account-balances.js.map +1 -0
- package/dist/tools/accounting/accounts.d.ts +18 -0
- package/dist/tools/accounting/accounts.d.ts.map +1 -0
- package/dist/tools/accounting/accounts.js +131 -0
- package/dist/tools/accounting/accounts.js.map +1 -0
- package/dist/tools/accounting/daily-ledger.d.ts +9 -0
- package/dist/tools/accounting/daily-ledger.d.ts.map +1 -0
- package/dist/tools/accounting/daily-ledger.js +117 -0
- package/dist/tools/accounting/daily-ledger.js.map +1 -0
- package/dist/tools/accounting/index.d.ts +9 -0
- package/dist/tools/accounting/index.d.ts.map +1 -0
- package/dist/tools/accounting/index.js +15 -0
- package/dist/tools/accounting/index.js.map +1 -0
- package/dist/tools/crm/bookings.d.ts +18 -0
- package/dist/tools/crm/bookings.d.ts.map +1 -0
- package/dist/tools/crm/bookings.js +272 -0
- package/dist/tools/crm/bookings.js.map +1 -0
- package/dist/tools/crm/events.d.ts +18 -0
- package/dist/tools/crm/events.d.ts.map +1 -0
- package/dist/tools/crm/events.js +134 -0
- package/dist/tools/crm/events.js.map +1 -0
- package/dist/tools/crm/funnels.d.ts +18 -0
- package/dist/tools/crm/funnels.d.ts.map +1 -0
- package/dist/tools/crm/funnels.js +113 -0
- package/dist/tools/crm/funnels.js.map +1 -0
- package/dist/tools/crm/index.d.ts +9 -0
- package/dist/tools/crm/index.d.ts.map +1 -0
- package/dist/tools/crm/index.js +17 -0
- package/dist/tools/crm/index.js.map +1 -0
- package/dist/tools/crm/leads.d.ts +18 -0
- package/dist/tools/crm/leads.d.ts.map +1 -0
- package/dist/tools/crm/leads.js +519 -0
- package/dist/tools/crm/leads.js.map +1 -0
- package/dist/tools/factory.d.ts +55 -0
- package/dist/tools/factory.d.ts.map +1 -0
- package/dist/tools/factory.js +145 -0
- package/dist/tools/factory.js.map +1 -0
- package/dist/tools/invoicing/contacts.d.ts +26 -0
- package/dist/tools/invoicing/contacts.d.ts.map +1 -0
- package/dist/tools/invoicing/contacts.js +358 -0
- package/dist/tools/invoicing/contacts.js.map +1 -0
- package/dist/tools/invoicing/documents.d.ts +18 -0
- package/dist/tools/invoicing/documents.d.ts.map +1 -0
- package/dist/tools/invoicing/documents.js +578 -0
- package/dist/tools/invoicing/documents.js.map +1 -0
- package/dist/tools/invoicing/expenses-accounts.d.ts +25 -0
- package/dist/tools/invoicing/expenses-accounts.d.ts.map +1 -0
- package/dist/tools/invoicing/expenses-accounts.js +111 -0
- package/dist/tools/invoicing/expenses-accounts.js.map +1 -0
- package/dist/tools/invoicing/index.d.ts +9 -0
- package/dist/tools/invoicing/index.d.ts.map +1 -0
- package/dist/tools/invoicing/index.js +33 -0
- package/dist/tools/invoicing/index.js.map +1 -0
- package/dist/tools/invoicing/numbering-series.d.ts +9 -0
- package/dist/tools/invoicing/numbering-series.d.ts.map +1 -0
- package/dist/tools/invoicing/numbering-series.js +161 -0
- package/dist/tools/invoicing/numbering-series.js.map +1 -0
- package/dist/tools/invoicing/payments.d.ts +18 -0
- package/dist/tools/invoicing/payments.d.ts.map +1 -0
- package/dist/tools/invoicing/payments.js +175 -0
- package/dist/tools/invoicing/payments.js.map +1 -0
- package/dist/tools/invoicing/products.d.ts +18 -0
- package/dist/tools/invoicing/products.d.ts.map +1 -0
- package/dist/tools/invoicing/products.js +389 -0
- package/dist/tools/invoicing/products.js.map +1 -0
- package/dist/tools/invoicing/remittances.d.ts +17 -0
- package/dist/tools/invoicing/remittances.d.ts.map +1 -0
- package/dist/tools/invoicing/remittances.js +76 -0
- package/dist/tools/invoicing/remittances.js.map +1 -0
- package/dist/tools/invoicing/sales-channels.d.ts +24 -0
- package/dist/tools/invoicing/sales-channels.d.ts.map +1 -0
- package/dist/tools/invoicing/sales-channels.js +105 -0
- package/dist/tools/invoicing/sales-channels.js.map +1 -0
- package/dist/tools/invoicing/services.d.ts +29 -0
- package/dist/tools/invoicing/services.d.ts.map +1 -0
- package/dist/tools/invoicing/services.js +124 -0
- package/dist/tools/invoicing/services.js.map +1 -0
- package/dist/tools/invoicing/taxes.d.ts +18 -0
- package/dist/tools/invoicing/taxes.d.ts.map +1 -0
- package/dist/tools/invoicing/taxes.js +58 -0
- package/dist/tools/invoicing/taxes.js.map +1 -0
- package/dist/tools/invoicing/treasury.d.ts +9 -0
- package/dist/tools/invoicing/treasury.d.ts.map +1 -0
- package/dist/tools/invoicing/treasury.js +196 -0
- package/dist/tools/invoicing/treasury.js.map +1 -0
- package/dist/tools/invoicing/warehouses.d.ts +18 -0
- package/dist/tools/invoicing/warehouses.d.ts.map +1 -0
- package/dist/tools/invoicing/warehouses.js +133 -0
- package/dist/tools/invoicing/warehouses.js.map +1 -0
- package/dist/tools/projects/index.d.ts +9 -0
- package/dist/tools/projects/index.d.ts.map +1 -0
- package/dist/tools/projects/index.js +15 -0
- package/dist/tools/projects/index.js.map +1 -0
- package/dist/tools/projects/projects.d.ts +18 -0
- package/dist/tools/projects/projects.d.ts.map +1 -0
- package/dist/tools/projects/projects.js +203 -0
- package/dist/tools/projects/projects.js.map +1 -0
- package/dist/tools/projects/tasks.d.ts +18 -0
- package/dist/tools/projects/tasks.d.ts.map +1 -0
- package/dist/tools/projects/tasks.js +154 -0
- package/dist/tools/projects/tasks.js.map +1 -0
- package/dist/tools/projects/time-tracking.d.ts +14 -0
- package/dist/tools/projects/time-tracking.d.ts.map +1 -0
- package/dist/tools/projects/time-tracking.js +291 -0
- package/dist/tools/projects/time-tracking.js.map +1 -0
- package/dist/tools/team/employees.d.ts +18 -0
- package/dist/tools/team/employees.d.ts.map +1 -0
- package/dist/tools/team/employees.js +149 -0
- package/dist/tools/team/employees.js.map +1 -0
- package/dist/tools/team/index.d.ts +9 -0
- package/dist/tools/team/index.d.ts.map +1 -0
- package/dist/tools/team/index.js +13 -0
- package/dist/tools/team/index.js.map +1 -0
- package/dist/tools/team/time-tracking.d.ts +18 -0
- package/dist/tools/team/time-tracking.d.ts.map +1 -0
- package/dist/tools/team/time-tracking.js +398 -0
- package/dist/tools/team/time-tracking.js.map +1 -0
- package/dist/tools/utilities.d.ts +45 -0
- package/dist/tools/utilities.d.ts.map +1 -0
- package/dist/tools/utilities.js +55 -0
- package/dist/tools/utilities.js.map +1 -0
- package/dist/types.d.ts +640 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +29 -0
- package/dist/types.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,578 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Document tools for Holded API (invoices, estimates, purchases, etc.)
|
|
3
|
+
*/
|
|
4
|
+
import { makeApiRequest, makeMultipartApiRequest, toStructuredContent } from "../../services/api.js";
|
|
5
|
+
import { ResponseFormat } from "../../constants.js";
|
|
6
|
+
import { withErrorHandling } from "../utilities.js";
|
|
7
|
+
import { ListDocumentsInputSchema, GetDocumentInputSchema, CreateDocumentInputSchema, UpdateDocumentInputSchema, DeleteDocumentInputSchema, PayDocumentInputSchema, SendDocumentInputSchema, GetDocumentPdfInputSchema, UpdateDocumentTrackingInputSchema, UpdateDocumentPipelineInputSchema, ShipAllItemsInputSchema, ShipItemsByLineInputSchema, GetShippedItemsInputSchema, AttachDocumentFileInputSchema, } from "../../schemas/invoicing/documents.js";
|
|
8
|
+
/**
|
|
9
|
+
* Format documents as markdown
|
|
10
|
+
*/
|
|
11
|
+
export function formatDocumentsMarkdown(documents, docType) {
|
|
12
|
+
if (!documents.length) {
|
|
13
|
+
return `No ${docType} documents found.`;
|
|
14
|
+
}
|
|
15
|
+
const lines = [`# ${docType.charAt(0).toUpperCase() + docType.slice(1)} Documents`, "", `Found ${documents.length} documents:`, ""];
|
|
16
|
+
for (const doc of documents) {
|
|
17
|
+
lines.push(`## ${doc.docNumber || doc.id}`);
|
|
18
|
+
lines.push(`- **ID**: ${doc.id}`);
|
|
19
|
+
if (doc.contactName)
|
|
20
|
+
lines.push(`- **Contact**: ${doc.contactName}`);
|
|
21
|
+
if (doc.date)
|
|
22
|
+
lines.push(`- **Date**: ${new Date(doc.date * 1000).toLocaleDateString()}`);
|
|
23
|
+
if (doc.total !== undefined)
|
|
24
|
+
lines.push(`- **Total**: ${doc.total} ${doc.currency || ""}`);
|
|
25
|
+
if (doc.status)
|
|
26
|
+
lines.push(`- **Status**: ${doc.status}`);
|
|
27
|
+
if (doc.paid !== undefined)
|
|
28
|
+
lines.push(`- **Paid**: ${doc.paid ? "Yes" : "No"}`);
|
|
29
|
+
lines.push("");
|
|
30
|
+
}
|
|
31
|
+
return lines.join("\n");
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Format a single document as markdown
|
|
35
|
+
*/
|
|
36
|
+
export function formatDocumentMarkdown(doc) {
|
|
37
|
+
const lines = [`# ${doc.docType?.toUpperCase() || "Document"}: ${doc.docNumber || doc.id}`, ""];
|
|
38
|
+
lines.push(`**ID**: ${doc.id}`);
|
|
39
|
+
if (doc.contactName)
|
|
40
|
+
lines.push(`**Contact**: ${doc.contactName} (${doc.contactId || "N/A"})`);
|
|
41
|
+
if (doc.date)
|
|
42
|
+
lines.push(`**Date**: ${new Date(doc.date * 1000).toLocaleDateString()}`);
|
|
43
|
+
if (doc.dueDate)
|
|
44
|
+
lines.push(`**Due Date**: ${new Date(doc.dueDate * 1000).toLocaleDateString()}`);
|
|
45
|
+
if (doc.status)
|
|
46
|
+
lines.push(`**Status**: ${doc.status}`);
|
|
47
|
+
lines.push("");
|
|
48
|
+
if (doc.items && doc.items.length > 0) {
|
|
49
|
+
lines.push("## Line Items", "");
|
|
50
|
+
lines.push("| Item | Qty | Subtotal | Tax |");
|
|
51
|
+
lines.push("|------|-----|----------|-----|");
|
|
52
|
+
for (const item of doc.items) {
|
|
53
|
+
lines.push(`| ${item.name} | ${item.units || 1} | ${item.subtotal || 0} | ${item.tax || "-"} |`);
|
|
54
|
+
}
|
|
55
|
+
lines.push("");
|
|
56
|
+
}
|
|
57
|
+
lines.push("## Totals", "");
|
|
58
|
+
if (doc.subtotal !== undefined)
|
|
59
|
+
lines.push(`- **Subtotal**: ${doc.subtotal}`);
|
|
60
|
+
if (doc.tax !== undefined)
|
|
61
|
+
lines.push(`- **Tax**: ${doc.tax}`);
|
|
62
|
+
if (doc.total !== undefined)
|
|
63
|
+
lines.push(`- **Total**: ${doc.total} ${doc.currency || ""}`);
|
|
64
|
+
if (doc.paid !== undefined)
|
|
65
|
+
lines.push(`- **Paid**: ${doc.paid ? "Yes" : "No"}`);
|
|
66
|
+
if (doc.paidAmount !== undefined)
|
|
67
|
+
lines.push(`- **Paid Amount**: ${doc.paidAmount}`);
|
|
68
|
+
if (doc.notes) {
|
|
69
|
+
lines.push("", "## Notes", doc.notes);
|
|
70
|
+
}
|
|
71
|
+
return lines.join("\n");
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Register all document-related tools
|
|
75
|
+
*/
|
|
76
|
+
export function registerDocumentTools(server) {
|
|
77
|
+
// List Documents
|
|
78
|
+
server.registerTool("holded_invoicing_list_documents", {
|
|
79
|
+
title: "List Holded Documents",
|
|
80
|
+
description: `List documents from Holded by type.
|
|
81
|
+
|
|
82
|
+
Returns paginated list of documents (max 500 per page).
|
|
83
|
+
|
|
84
|
+
Available document types:
|
|
85
|
+
- invoice: Sales invoices
|
|
86
|
+
- salesreceipt: Sales receipts
|
|
87
|
+
- creditnote: Sales refunds
|
|
88
|
+
- receiptnote: Ticket sales refunds
|
|
89
|
+
- estimate: Sales estimates/quotes
|
|
90
|
+
- salesorder: Sales orders
|
|
91
|
+
- waybill: Packing lists
|
|
92
|
+
- proform: Proforma invoices
|
|
93
|
+
- purchase: Purchases
|
|
94
|
+
- purchaserefund: Purchase refunds
|
|
95
|
+
- purchaseorder: Purchase orders
|
|
96
|
+
|
|
97
|
+
Args:
|
|
98
|
+
- doc_type (string): Document type (required)
|
|
99
|
+
- page (number): Page number for pagination (default: 1, max 500 items per page)
|
|
100
|
+
- response_format ('json' | 'markdown'): Output format (default: 'json')
|
|
101
|
+
|
|
102
|
+
Returns:
|
|
103
|
+
Array of documents with id, number, contact, date, total, and status.`,
|
|
104
|
+
inputSchema: ListDocumentsInputSchema,
|
|
105
|
+
annotations: {
|
|
106
|
+
readOnlyHint: true,
|
|
107
|
+
destructiveHint: false,
|
|
108
|
+
idempotentHint: true,
|
|
109
|
+
openWorldHint: true,
|
|
110
|
+
},
|
|
111
|
+
}, withErrorHandling(async (params) => {
|
|
112
|
+
const { doc_type, page, response_format } = params;
|
|
113
|
+
const queryParams = {};
|
|
114
|
+
if (page > 1) {
|
|
115
|
+
queryParams.page = page;
|
|
116
|
+
}
|
|
117
|
+
const documents = await makeApiRequest("invoicing", `documents/${doc_type}`, "GET", undefined, queryParams);
|
|
118
|
+
const textContent = response_format === ResponseFormat.MARKDOWN
|
|
119
|
+
? formatDocumentsMarkdown(documents, doc_type)
|
|
120
|
+
: JSON.stringify(documents, null, 2);
|
|
121
|
+
return {
|
|
122
|
+
content: [{ type: "text", text: textContent }],
|
|
123
|
+
structuredContent: { documents, count: documents.length, page, docType: doc_type },
|
|
124
|
+
};
|
|
125
|
+
}));
|
|
126
|
+
// Get Document
|
|
127
|
+
server.registerTool("holded_invoicing_get_document", {
|
|
128
|
+
title: "Get Holded Document",
|
|
129
|
+
description: `Get a specific document by ID from Holded.
|
|
130
|
+
|
|
131
|
+
Args:
|
|
132
|
+
- doc_type (string): Document type (required)
|
|
133
|
+
- document_id (string): The document ID to retrieve (required)
|
|
134
|
+
- response_format ('json' | 'markdown'): Output format (default: 'json')
|
|
135
|
+
|
|
136
|
+
Returns:
|
|
137
|
+
Document details including line items, totals, and payment status.`,
|
|
138
|
+
inputSchema: GetDocumentInputSchema,
|
|
139
|
+
annotations: {
|
|
140
|
+
readOnlyHint: true,
|
|
141
|
+
destructiveHint: false,
|
|
142
|
+
idempotentHint: true,
|
|
143
|
+
openWorldHint: true,
|
|
144
|
+
},
|
|
145
|
+
}, withErrorHandling(async (params) => {
|
|
146
|
+
const { doc_type, document_id, response_format } = params;
|
|
147
|
+
const document = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}`, "GET");
|
|
148
|
+
const textContent = response_format === ResponseFormat.MARKDOWN
|
|
149
|
+
? formatDocumentMarkdown(document)
|
|
150
|
+
: JSON.stringify(document, null, 2);
|
|
151
|
+
return {
|
|
152
|
+
content: [{ type: "text", text: textContent }],
|
|
153
|
+
structuredContent: toStructuredContent(document),
|
|
154
|
+
};
|
|
155
|
+
}));
|
|
156
|
+
// Create Document
|
|
157
|
+
server.registerTool("holded_invoicing_create_document", {
|
|
158
|
+
title: "Create Holded Document",
|
|
159
|
+
description: `Create a new document in Holded (invoice, estimate, purchase, etc.).
|
|
160
|
+
|
|
161
|
+
Args:
|
|
162
|
+
- doc_type (string): Document type (required)
|
|
163
|
+
- items (array): Line items with name, units, subtotal, tax (required)
|
|
164
|
+
- contactId (string): Contact ID to associate
|
|
165
|
+
- date (number): Document date as Unix timestamp
|
|
166
|
+
- dueDate (number): Due date as Unix timestamp
|
|
167
|
+
- notes (string): Document notes
|
|
168
|
+
- And other optional fields
|
|
169
|
+
|
|
170
|
+
Returns:
|
|
171
|
+
The created document with its assigned ID and number.`,
|
|
172
|
+
inputSchema: CreateDocumentInputSchema,
|
|
173
|
+
annotations: {
|
|
174
|
+
readOnlyHint: false,
|
|
175
|
+
destructiveHint: false,
|
|
176
|
+
idempotentHint: false,
|
|
177
|
+
openWorldHint: true,
|
|
178
|
+
},
|
|
179
|
+
}, withErrorHandling(async (params) => {
|
|
180
|
+
const { doc_type, ...documentData } = params;
|
|
181
|
+
const document = await makeApiRequest("invoicing", `documents/${doc_type}`, "POST", documentData);
|
|
182
|
+
return {
|
|
183
|
+
content: [
|
|
184
|
+
{
|
|
185
|
+
type: "text",
|
|
186
|
+
text: `Document created successfully.\n\n${JSON.stringify(document, null, 2)}`,
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
structuredContent: toStructuredContent(document),
|
|
190
|
+
};
|
|
191
|
+
}));
|
|
192
|
+
// Update Document
|
|
193
|
+
server.registerTool("holded_invoicing_update_document", {
|
|
194
|
+
title: "Update Holded Document",
|
|
195
|
+
description: `Update an existing document in Holded. Only provided fields will be updated.
|
|
196
|
+
|
|
197
|
+
Args:
|
|
198
|
+
- doc_type (string): Document type (required)
|
|
199
|
+
- document_id (string): The document ID to update (required)
|
|
200
|
+
- And other optional fields to update (items, dates, notes, etc.)
|
|
201
|
+
|
|
202
|
+
Returns:
|
|
203
|
+
The updated document.`,
|
|
204
|
+
inputSchema: UpdateDocumentInputSchema,
|
|
205
|
+
annotations: {
|
|
206
|
+
readOnlyHint: false,
|
|
207
|
+
destructiveHint: false,
|
|
208
|
+
idempotentHint: true,
|
|
209
|
+
openWorldHint: true,
|
|
210
|
+
},
|
|
211
|
+
}, withErrorHandling(async (params) => {
|
|
212
|
+
const { doc_type, document_id, ...updateData } = params;
|
|
213
|
+
const document = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}`, "PUT", updateData);
|
|
214
|
+
return {
|
|
215
|
+
content: [
|
|
216
|
+
{
|
|
217
|
+
type: "text",
|
|
218
|
+
text: `Document updated successfully.\n\n${JSON.stringify(document, null, 2)}`,
|
|
219
|
+
},
|
|
220
|
+
],
|
|
221
|
+
structuredContent: toStructuredContent(document),
|
|
222
|
+
};
|
|
223
|
+
}));
|
|
224
|
+
// Delete Document
|
|
225
|
+
server.registerTool("holded_invoicing_delete_document", {
|
|
226
|
+
title: "Delete Holded Document",
|
|
227
|
+
description: `Delete a document from Holded.
|
|
228
|
+
|
|
229
|
+
Args:
|
|
230
|
+
- doc_type (string): Document type (required)
|
|
231
|
+
- document_id (string): The document ID to delete (required)
|
|
232
|
+
|
|
233
|
+
Returns:
|
|
234
|
+
Confirmation of deletion.`,
|
|
235
|
+
inputSchema: DeleteDocumentInputSchema,
|
|
236
|
+
annotations: {
|
|
237
|
+
readOnlyHint: false,
|
|
238
|
+
destructiveHint: true,
|
|
239
|
+
idempotentHint: true,
|
|
240
|
+
openWorldHint: true,
|
|
241
|
+
},
|
|
242
|
+
}, withErrorHandling(async (params) => {
|
|
243
|
+
const { doc_type, document_id } = params;
|
|
244
|
+
await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}`, "DELETE");
|
|
245
|
+
return {
|
|
246
|
+
content: [
|
|
247
|
+
{
|
|
248
|
+
type: "text",
|
|
249
|
+
text: `Document ${document_id} deleted successfully.`,
|
|
250
|
+
},
|
|
251
|
+
],
|
|
252
|
+
structuredContent: { deleted: true, id: document_id, docType: doc_type },
|
|
253
|
+
};
|
|
254
|
+
}));
|
|
255
|
+
// Pay Document
|
|
256
|
+
server.registerTool("holded_invoicing_pay_document", {
|
|
257
|
+
title: "Pay Holded Document",
|
|
258
|
+
description: `Record a payment for a document in Holded.
|
|
259
|
+
|
|
260
|
+
Args:
|
|
261
|
+
- doc_type (string): Document type (required)
|
|
262
|
+
- document_id (string): The document ID to pay (required)
|
|
263
|
+
- amount (number): Payment amount (if different from document total)
|
|
264
|
+
- account_id (string): Treasury/Bank account ID
|
|
265
|
+
- date (number): Payment date as Unix timestamp
|
|
266
|
+
|
|
267
|
+
Returns:
|
|
268
|
+
Confirmation of payment.`,
|
|
269
|
+
inputSchema: PayDocumentInputSchema,
|
|
270
|
+
annotations: {
|
|
271
|
+
readOnlyHint: false,
|
|
272
|
+
destructiveHint: false,
|
|
273
|
+
idempotentHint: false,
|
|
274
|
+
openWorldHint: true,
|
|
275
|
+
},
|
|
276
|
+
}, withErrorHandling(async (params) => {
|
|
277
|
+
const { doc_type, document_id, account_id, ...paymentData } = params;
|
|
278
|
+
const requestData = {
|
|
279
|
+
...paymentData,
|
|
280
|
+
...(account_id ? { accountId: account_id } : {}),
|
|
281
|
+
};
|
|
282
|
+
const result = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}/pay`, "POST", requestData);
|
|
283
|
+
return {
|
|
284
|
+
content: [
|
|
285
|
+
{
|
|
286
|
+
type: "text",
|
|
287
|
+
text: `Payment recorded successfully.\n\n${JSON.stringify(result, null, 2)}`,
|
|
288
|
+
},
|
|
289
|
+
],
|
|
290
|
+
structuredContent: { paid: true, documentId: document_id, docType: doc_type, ...result },
|
|
291
|
+
};
|
|
292
|
+
}));
|
|
293
|
+
// Send Document
|
|
294
|
+
server.registerTool("holded_invoicing_send_document", {
|
|
295
|
+
title: "Send Holded Document",
|
|
296
|
+
description: `Send a document via email in Holded.
|
|
297
|
+
|
|
298
|
+
Args:
|
|
299
|
+
- doc_type (string): Document type (required)
|
|
300
|
+
- document_id (string): The document ID to send (required)
|
|
301
|
+
- email (string): Recipient email (uses contact email if not provided)
|
|
302
|
+
- subject (string): Email subject
|
|
303
|
+
- message (string): Email message body
|
|
304
|
+
|
|
305
|
+
Returns:
|
|
306
|
+
Confirmation of sending.`,
|
|
307
|
+
inputSchema: SendDocumentInputSchema,
|
|
308
|
+
annotations: {
|
|
309
|
+
readOnlyHint: false,
|
|
310
|
+
destructiveHint: false,
|
|
311
|
+
idempotentHint: false,
|
|
312
|
+
openWorldHint: true,
|
|
313
|
+
},
|
|
314
|
+
}, withErrorHandling(async (params) => {
|
|
315
|
+
const { doc_type, document_id, ...sendData } = params;
|
|
316
|
+
const result = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}/send`, "POST", sendData);
|
|
317
|
+
return {
|
|
318
|
+
content: [
|
|
319
|
+
{
|
|
320
|
+
type: "text",
|
|
321
|
+
text: `Document sent successfully.\n\n${JSON.stringify(result, null, 2)}`,
|
|
322
|
+
},
|
|
323
|
+
],
|
|
324
|
+
structuredContent: { sent: true, documentId: document_id, docType: doc_type, ...result },
|
|
325
|
+
};
|
|
326
|
+
}));
|
|
327
|
+
// Get Document PDF
|
|
328
|
+
server.registerTool("holded_invoicing_get_document_pdf", {
|
|
329
|
+
title: "Get Holded Document PDF",
|
|
330
|
+
description: `Get the PDF version of a document from Holded.
|
|
331
|
+
|
|
332
|
+
Args:
|
|
333
|
+
- doc_type (string): Document type (required)
|
|
334
|
+
- document_id (string): The document ID to get PDF for (required)
|
|
335
|
+
|
|
336
|
+
Returns:
|
|
337
|
+
PDF file data (base64 encoded or URL).`,
|
|
338
|
+
inputSchema: GetDocumentPdfInputSchema,
|
|
339
|
+
annotations: {
|
|
340
|
+
readOnlyHint: true,
|
|
341
|
+
destructiveHint: false,
|
|
342
|
+
idempotentHint: true,
|
|
343
|
+
openWorldHint: true,
|
|
344
|
+
},
|
|
345
|
+
}, withErrorHandling(async (params) => {
|
|
346
|
+
const { doc_type, document_id } = params;
|
|
347
|
+
const result = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}/pdf`, "GET");
|
|
348
|
+
return {
|
|
349
|
+
content: [
|
|
350
|
+
{
|
|
351
|
+
type: "text",
|
|
352
|
+
text: result.url
|
|
353
|
+
? `PDF URL: ${result.url}\n\n${JSON.stringify(result, null, 2)}`
|
|
354
|
+
: JSON.stringify(result, null, 2),
|
|
355
|
+
},
|
|
356
|
+
],
|
|
357
|
+
structuredContent: { documentId: document_id, docType: doc_type, ...result },
|
|
358
|
+
};
|
|
359
|
+
}));
|
|
360
|
+
// Update Document Tracking
|
|
361
|
+
server.registerTool("holded_invoicing_update_document_tracking", {
|
|
362
|
+
title: "Update Holded Document Tracking",
|
|
363
|
+
description: `Update tracking information for a document in Holded.
|
|
364
|
+
|
|
365
|
+
Note: This endpoint only works with 'salesorder' and 'waybill' document types.
|
|
366
|
+
|
|
367
|
+
Args:
|
|
368
|
+
- doc_type ('salesorder' | 'waybill'): Document type (required)
|
|
369
|
+
- document_id (string): The document ID to update tracking for (required)
|
|
370
|
+
- key (string): Carrier key - one of: mrw, ups, fedex, tnt, seur, nacex, correos, asm, uspostalservice, dbschenker, royalmail, bluedart, palletways, correosexpress, tourline, other
|
|
371
|
+
- name (string): Carrier display name (use custom name when key is 'other')
|
|
372
|
+
- num (string): Tracking number(s) - can add multiple separated by comma or dash (e.g., "1,2-3")
|
|
373
|
+
- pickUpDate (string): Pick up date in DD/MM/YYYY format
|
|
374
|
+
- deliveryDate (string): Delivery date in DD/MM/YYYY format
|
|
375
|
+
- notes (string): Notes for the tracking
|
|
376
|
+
|
|
377
|
+
Returns:
|
|
378
|
+
Confirmation of tracking update.`,
|
|
379
|
+
inputSchema: UpdateDocumentTrackingInputSchema,
|
|
380
|
+
annotations: {
|
|
381
|
+
readOnlyHint: false,
|
|
382
|
+
destructiveHint: false,
|
|
383
|
+
idempotentHint: true,
|
|
384
|
+
openWorldHint: true,
|
|
385
|
+
},
|
|
386
|
+
}, withErrorHandling(async (params) => {
|
|
387
|
+
const { doc_type, document_id, ...trackingData } = params;
|
|
388
|
+
const result = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}/updatetracking`, "POST", trackingData);
|
|
389
|
+
return {
|
|
390
|
+
content: [
|
|
391
|
+
{
|
|
392
|
+
type: "text",
|
|
393
|
+
text: `Tracking information updated successfully.\n\n${JSON.stringify(result, null, 2)}`,
|
|
394
|
+
},
|
|
395
|
+
],
|
|
396
|
+
structuredContent: { updated: true, documentId: document_id, docType: doc_type, ...result },
|
|
397
|
+
};
|
|
398
|
+
}));
|
|
399
|
+
// Update Document Pipeline
|
|
400
|
+
server.registerTool("holded_invoicing_update_document_pipeline", {
|
|
401
|
+
title: "Update Holded Document Pipeline",
|
|
402
|
+
description: `Update the pipeline stage for a document in Holded.
|
|
403
|
+
|
|
404
|
+
Note: This endpoint only works with 'salesorder' and 'waybill' document types.
|
|
405
|
+
|
|
406
|
+
Args:
|
|
407
|
+
- doc_type ('salesorder' | 'waybill'): Document type (required)
|
|
408
|
+
- document_id (string): The document ID to update pipeline for (required)
|
|
409
|
+
- pipeline (string): Pipeline stage identifier (required)
|
|
410
|
+
|
|
411
|
+
Returns:
|
|
412
|
+
Confirmation of pipeline update.`,
|
|
413
|
+
inputSchema: UpdateDocumentPipelineInputSchema,
|
|
414
|
+
annotations: {
|
|
415
|
+
readOnlyHint: false,
|
|
416
|
+
destructiveHint: false,
|
|
417
|
+
idempotentHint: true,
|
|
418
|
+
openWorldHint: true,
|
|
419
|
+
},
|
|
420
|
+
}, withErrorHandling(async (params) => {
|
|
421
|
+
const { doc_type, document_id, pipeline } = params;
|
|
422
|
+
const result = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}/pipeline/set`, "POST", { pipeline });
|
|
423
|
+
return {
|
|
424
|
+
content: [
|
|
425
|
+
{
|
|
426
|
+
type: "text",
|
|
427
|
+
text: `Pipeline updated successfully.\n\n${JSON.stringify(result, null, 2)}`,
|
|
428
|
+
},
|
|
429
|
+
],
|
|
430
|
+
structuredContent: { updated: true, documentId: document_id, docType: doc_type, ...result },
|
|
431
|
+
};
|
|
432
|
+
}));
|
|
433
|
+
// Ship All Items
|
|
434
|
+
server.registerTool("holded_invoicing_ship_all_items", {
|
|
435
|
+
title: "Ship All Items from Holded Sales Order",
|
|
436
|
+
description: `Ship all the items of a specific sales order in Holded.
|
|
437
|
+
|
|
438
|
+
Args:
|
|
439
|
+
- document_id (string): The sales order document ID to ship all items for (required)
|
|
440
|
+
|
|
441
|
+
Returns:
|
|
442
|
+
Confirmation of shipping with status and info.`,
|
|
443
|
+
inputSchema: ShipAllItemsInputSchema,
|
|
444
|
+
annotations: {
|
|
445
|
+
readOnlyHint: false,
|
|
446
|
+
destructiveHint: false,
|
|
447
|
+
idempotentHint: false,
|
|
448
|
+
openWorldHint: true,
|
|
449
|
+
},
|
|
450
|
+
}, withErrorHandling(async (params) => {
|
|
451
|
+
const { document_id } = params;
|
|
452
|
+
const result = await makeApiRequest("invoicing", `documents/salesorder/${document_id}/shipall`, "POST");
|
|
453
|
+
return {
|
|
454
|
+
content: [
|
|
455
|
+
{
|
|
456
|
+
type: "text",
|
|
457
|
+
text: `Items shipped successfully.\n\n${JSON.stringify(result, null, 2)}`,
|
|
458
|
+
},
|
|
459
|
+
],
|
|
460
|
+
structuredContent: { shipped: true, documentId: document_id, ...result },
|
|
461
|
+
};
|
|
462
|
+
}));
|
|
463
|
+
// Ship Items By Line
|
|
464
|
+
server.registerTool("holded_invoicing_ship_items_by_line", {
|
|
465
|
+
title: "Ship Items by Line from Holded Sales Order",
|
|
466
|
+
description: `Ship specific items of a sales order by line position in Holded.
|
|
467
|
+
|
|
468
|
+
Args:
|
|
469
|
+
- document_id (string): The sales order document ID to ship items for (required)
|
|
470
|
+
- lines (array): Array of item lines to ship, each with:
|
|
471
|
+
- itemLinePosition (number): Item line position (starts at 0)
|
|
472
|
+
- units (number): Number of units to ship
|
|
473
|
+
|
|
474
|
+
Returns:
|
|
475
|
+
Confirmation of shipping with status and info.`,
|
|
476
|
+
inputSchema: ShipItemsByLineInputSchema,
|
|
477
|
+
annotations: {
|
|
478
|
+
readOnlyHint: false,
|
|
479
|
+
destructiveHint: false,
|
|
480
|
+
idempotentHint: false,
|
|
481
|
+
openWorldHint: true,
|
|
482
|
+
},
|
|
483
|
+
}, withErrorHandling(async (params) => {
|
|
484
|
+
const { document_id, lines } = params;
|
|
485
|
+
const result = await makeApiRequest("invoicing", `documents/salesorder/${document_id}/shipbylines`, "POST", { lines });
|
|
486
|
+
return {
|
|
487
|
+
content: [
|
|
488
|
+
{
|
|
489
|
+
type: "text",
|
|
490
|
+
text: `Items shipped successfully.\n\n${JSON.stringify(result, null, 2)}`,
|
|
491
|
+
},
|
|
492
|
+
],
|
|
493
|
+
structuredContent: { shipped: true, documentId: document_id, lines, ...result },
|
|
494
|
+
};
|
|
495
|
+
}));
|
|
496
|
+
// Get Shipped Items
|
|
497
|
+
server.registerTool("holded_invoicing_get_shipped_items", {
|
|
498
|
+
title: "Get Shipped Items from Holded Document",
|
|
499
|
+
description: `For each item included in a sales or purchase order, get the number of units shipped or received.
|
|
500
|
+
|
|
501
|
+
Args:
|
|
502
|
+
- doc_type ('salesorder' | 'order'): Document type (required)
|
|
503
|
+
- document_id (string): The document ID to get shipped items for (required)
|
|
504
|
+
- response_format ('json' | 'markdown'): Output format (default: 'json')
|
|
505
|
+
|
|
506
|
+
Returns:
|
|
507
|
+
Array of items with name, sku, total, sent, and pending quantities.`,
|
|
508
|
+
inputSchema: GetShippedItemsInputSchema,
|
|
509
|
+
annotations: {
|
|
510
|
+
readOnlyHint: true,
|
|
511
|
+
destructiveHint: false,
|
|
512
|
+
idempotentHint: true,
|
|
513
|
+
openWorldHint: true,
|
|
514
|
+
},
|
|
515
|
+
}, withErrorHandling(async (params) => {
|
|
516
|
+
const { doc_type, document_id, response_format } = params;
|
|
517
|
+
const shippedItems = await makeApiRequest("invoicing", `documents/${doc_type}/${document_id}/shippeditems`, "GET");
|
|
518
|
+
let textContent;
|
|
519
|
+
if (response_format === ResponseFormat.MARKDOWN) {
|
|
520
|
+
if (!shippedItems.length) {
|
|
521
|
+
textContent = `No shipped items found for document ${document_id}.`;
|
|
522
|
+
}
|
|
523
|
+
else {
|
|
524
|
+
const lines = ["# Shipped Items", "", `Found ${shippedItems.length} items:`, ""];
|
|
525
|
+
lines.push("| Item | SKU | Total | Sent | Pending |");
|
|
526
|
+
lines.push("|------|-----|-------|------|---------|");
|
|
527
|
+
for (const item of shippedItems) {
|
|
528
|
+
lines.push(`| ${item.name} | ${item.sku || "-"} | ${item.total} | ${item.sent} | ${item.pending} |`);
|
|
529
|
+
}
|
|
530
|
+
textContent = lines.join("\n");
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
else {
|
|
534
|
+
textContent = JSON.stringify(shippedItems, null, 2);
|
|
535
|
+
}
|
|
536
|
+
return {
|
|
537
|
+
content: [{ type: "text", text: textContent }],
|
|
538
|
+
structuredContent: { shippedItems, count: shippedItems.length, documentId: document_id, docType: doc_type },
|
|
539
|
+
};
|
|
540
|
+
}));
|
|
541
|
+
// Attach File to Document
|
|
542
|
+
server.registerTool("holded_invoicing_attach_document_file", {
|
|
543
|
+
title: "Attach File to Holded Document",
|
|
544
|
+
description: `Attach a file to a specific document in Holded.
|
|
545
|
+
|
|
546
|
+
Args:
|
|
547
|
+
- doc_type (string): Document type (required)
|
|
548
|
+
- document_id (string): The document ID to attach file to (required)
|
|
549
|
+
- file_content (string): File content as base64 encoded string (required)
|
|
550
|
+
- file_name (string): File name (required)
|
|
551
|
+
- set_main (boolean): Set this file as the main attachment
|
|
552
|
+
|
|
553
|
+
Returns:
|
|
554
|
+
Confirmation of file attachment with status and info.`,
|
|
555
|
+
inputSchema: AttachDocumentFileInputSchema,
|
|
556
|
+
annotations: {
|
|
557
|
+
readOnlyHint: false,
|
|
558
|
+
destructiveHint: false,
|
|
559
|
+
idempotentHint: false,
|
|
560
|
+
openWorldHint: true,
|
|
561
|
+
},
|
|
562
|
+
}, withErrorHandling(async (params) => {
|
|
563
|
+
const { doc_type, document_id, file_content, file_name, set_main } = params;
|
|
564
|
+
// Convert base64 to buffer
|
|
565
|
+
const fileBuffer = Buffer.from(file_content, "base64");
|
|
566
|
+
const result = await makeMultipartApiRequest("invoicing", `documents/${doc_type}/${document_id}/attach`, fileBuffer, file_name, set_main);
|
|
567
|
+
return {
|
|
568
|
+
content: [
|
|
569
|
+
{
|
|
570
|
+
type: "text",
|
|
571
|
+
text: `File attached successfully.\n\n${JSON.stringify(result, null, 2)}`,
|
|
572
|
+
},
|
|
573
|
+
],
|
|
574
|
+
structuredContent: { attached: true, documentId: document_id, docType: doc_type, fileName: file_name, ...result },
|
|
575
|
+
};
|
|
576
|
+
}));
|
|
577
|
+
}
|
|
578
|
+
//# sourceMappingURL=documents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"documents.js","sourceRoot":"","sources":["../../../src/tools/invoicing/documents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Expenses Account tools for Holded API
|
|
3
|
+
*/
|
|
4
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
|
+
interface ExpensesAccount {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
code?: string;
|
|
9
|
+
description?: string;
|
|
10
|
+
[key: string]: unknown;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Format expenses accounts as markdown
|
|
14
|
+
*/
|
|
15
|
+
export declare function formatExpensesAccountsMarkdown(accounts: ExpensesAccount[]): string;
|
|
16
|
+
/**
|
|
17
|
+
* Format a single expenses account as markdown
|
|
18
|
+
*/
|
|
19
|
+
export declare function formatExpensesAccountMarkdown(account: ExpensesAccount): string;
|
|
20
|
+
/**
|
|
21
|
+
* Register all expenses account-related tools
|
|
22
|
+
*/
|
|
23
|
+
export declare function registerExpensesAccountTools(server: McpServer): void;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=expenses-accounts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expenses-accounts.d.ts","sourceRoot":"","sources":["../../../src/tools/invoicing/expenses-accounts.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE,UAAU,eAAe;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,8BAA8B,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG,MAAM,CAgBlF;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,eAAe,GAAG,MAAM,CAM9E;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuEpE"}
|