@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,389 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Product tools for Holded API
|
|
3
|
+
*/
|
|
4
|
+
import { makeApiRequest, makeMultipartApiRequest } from "../../services/api.js";
|
|
5
|
+
import { ResponseFormat } from "../../constants.js";
|
|
6
|
+
import { ListProductsInputSchema, GetProductInputSchema, CreateProductInputSchema, UpdateProductInputSchema, DeleteProductInputSchema, ListProductsStockInputSchema, UpdateProductStockInputSchema, GetProductImageInputSchema, ListProductImagesInputSchema, GetProductSecondaryImageInputSchema, UploadProductImageInputSchema, } from "../../schemas/invoicing/products.js";
|
|
7
|
+
import { registerCrudTools } from "../factory.js";
|
|
8
|
+
import { withErrorHandling } from "../utilities.js";
|
|
9
|
+
/**
|
|
10
|
+
* Format products as markdown
|
|
11
|
+
*/
|
|
12
|
+
export function formatProductsMarkdown(products) {
|
|
13
|
+
if (!products.length) {
|
|
14
|
+
return "No products found.";
|
|
15
|
+
}
|
|
16
|
+
const lines = ["# Products", "", `Found ${products.length} products:`, ""];
|
|
17
|
+
for (const product of products) {
|
|
18
|
+
lines.push(`## ${product.name}`);
|
|
19
|
+
lines.push(`- **ID**: ${product.id}`);
|
|
20
|
+
if (product.sku)
|
|
21
|
+
lines.push(`- **SKU**: ${product.sku}`);
|
|
22
|
+
if (product.kind)
|
|
23
|
+
lines.push(`- **Kind**: ${product.kind}`);
|
|
24
|
+
if (product.price !== undefined)
|
|
25
|
+
lines.push(`- **Price**: ${product.price}`);
|
|
26
|
+
if (product.stock !== undefined)
|
|
27
|
+
lines.push(`- **Stock**: ${product.stock}`);
|
|
28
|
+
lines.push("");
|
|
29
|
+
}
|
|
30
|
+
return lines.join("\n");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Format a single product as markdown
|
|
34
|
+
*/
|
|
35
|
+
export function formatProductMarkdown(product) {
|
|
36
|
+
const lines = [`# ${product.name}`, "", `**ID**: ${product.id}`, ""];
|
|
37
|
+
if (product.sku)
|
|
38
|
+
lines.push(`- **SKU**: ${product.sku}`);
|
|
39
|
+
if (product.kind)
|
|
40
|
+
lines.push(`- **Kind**: ${product.kind}`);
|
|
41
|
+
if (product.type)
|
|
42
|
+
lines.push(`- **Type**: ${product.type}`);
|
|
43
|
+
if (product.desc)
|
|
44
|
+
lines.push(`- **Description**: ${product.desc}`);
|
|
45
|
+
if (product.price !== undefined)
|
|
46
|
+
lines.push(`- **Price**: ${product.price}`);
|
|
47
|
+
if (product.costPrice !== undefined)
|
|
48
|
+
lines.push(`- **Cost Price**: ${product.costPrice}`);
|
|
49
|
+
if (product.tax)
|
|
50
|
+
lines.push(`- **Tax**: ${product.tax}`);
|
|
51
|
+
if (product.stock !== undefined)
|
|
52
|
+
lines.push(`- **Stock**: ${product.stock}`);
|
|
53
|
+
if (product.stockControl !== undefined)
|
|
54
|
+
lines.push(`- **Stock Control**: ${product.stockControl}`);
|
|
55
|
+
if (product.barcode)
|
|
56
|
+
lines.push(`- **Barcode**: ${product.barcode}`);
|
|
57
|
+
if (product.weight !== undefined)
|
|
58
|
+
lines.push(`- **Weight**: ${product.weight}`);
|
|
59
|
+
if (product.variants && product.variants.length > 0) {
|
|
60
|
+
lines.push("", "### Variants");
|
|
61
|
+
for (const variant of product.variants) {
|
|
62
|
+
lines.push(`- **${variant.name}** (ID: ${variant.id})`);
|
|
63
|
+
if (variant.sku)
|
|
64
|
+
lines.push(` - SKU: ${variant.sku}`);
|
|
65
|
+
if (variant.price !== undefined)
|
|
66
|
+
lines.push(` - Price: ${variant.price}`);
|
|
67
|
+
if (variant.stock !== undefined)
|
|
68
|
+
lines.push(` - Stock: ${variant.stock}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (product.tags && product.tags.length > 0) {
|
|
72
|
+
lines.push("", `**Tags**: ${product.tags.join(", ")}`);
|
|
73
|
+
}
|
|
74
|
+
return lines.join("\n");
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Register all product-related tools
|
|
78
|
+
*/
|
|
79
|
+
export function registerProductTools(server) {
|
|
80
|
+
// ── Standard CRUD via factory ─────────────────────────
|
|
81
|
+
registerCrudTools(server, {
|
|
82
|
+
module: "invoicing",
|
|
83
|
+
toolPrefix: "holded_invoicing",
|
|
84
|
+
resource: "product",
|
|
85
|
+
resourcePlural: "products",
|
|
86
|
+
endpoint: "products",
|
|
87
|
+
idParam: "product_id",
|
|
88
|
+
schemas: {
|
|
89
|
+
list: ListProductsInputSchema,
|
|
90
|
+
get: GetProductInputSchema,
|
|
91
|
+
create: CreateProductInputSchema,
|
|
92
|
+
update: UpdateProductInputSchema,
|
|
93
|
+
delete: DeleteProductInputSchema,
|
|
94
|
+
},
|
|
95
|
+
titles: {
|
|
96
|
+
list: "List Holded Products",
|
|
97
|
+
get: "Get Holded Product",
|
|
98
|
+
create: "Create Holded Product",
|
|
99
|
+
update: "Update Holded Product",
|
|
100
|
+
delete: "Delete Holded Product",
|
|
101
|
+
},
|
|
102
|
+
descriptions: {
|
|
103
|
+
list: `List all products from Holded.
|
|
104
|
+
|
|
105
|
+
Returns paginated list of products. Use page parameter to navigate through results.
|
|
106
|
+
|
|
107
|
+
Args:
|
|
108
|
+
- page (number): Page number for pagination (default: 1, max 500 items per page)
|
|
109
|
+
- response_format ('json' | 'markdown'): Output format (default: 'json')
|
|
110
|
+
|
|
111
|
+
Returns:
|
|
112
|
+
Array of products with id, name, sku, price, stock, and other details.`,
|
|
113
|
+
get: `Get a specific product by ID from Holded.
|
|
114
|
+
|
|
115
|
+
Args:
|
|
116
|
+
- product_id (string): The product ID to retrieve (required)
|
|
117
|
+
- response_format ('json' | 'markdown'): Output format (default: 'json')
|
|
118
|
+
|
|
119
|
+
Returns:
|
|
120
|
+
Product details including name, sku, price, stock, variants, and custom fields.`,
|
|
121
|
+
create: `Create a new product in Holded.
|
|
122
|
+
|
|
123
|
+
Args:
|
|
124
|
+
- name (string): Product name (required)
|
|
125
|
+
- sku (string): Stock Keeping Unit
|
|
126
|
+
- kind ('product' | 'service' | 'pack'): Product kind
|
|
127
|
+
- price (number): Selling price
|
|
128
|
+
- costPrice (number): Cost price
|
|
129
|
+
- stock (number): Initial stock quantity
|
|
130
|
+
- And other optional fields for variants, custom fields, etc.
|
|
131
|
+
|
|
132
|
+
Returns:
|
|
133
|
+
The created product with its assigned ID.`,
|
|
134
|
+
update: `Update an existing product in Holded. Only provided fields will be updated.
|
|
135
|
+
|
|
136
|
+
Args:
|
|
137
|
+
- product_id (string): The product ID to update (required)
|
|
138
|
+
- name (string): Product name
|
|
139
|
+
- sku (string): Stock Keeping Unit
|
|
140
|
+
- price (number): Selling price
|
|
141
|
+
- And other optional fields to update
|
|
142
|
+
|
|
143
|
+
Returns:
|
|
144
|
+
The updated product.`,
|
|
145
|
+
delete: `Delete a product from Holded.
|
|
146
|
+
|
|
147
|
+
Args:
|
|
148
|
+
- product_id (string): The product ID to delete (required)
|
|
149
|
+
|
|
150
|
+
Returns:
|
|
151
|
+
Confirmation of deletion.`,
|
|
152
|
+
},
|
|
153
|
+
formatters: {
|
|
154
|
+
list: formatProductsMarkdown,
|
|
155
|
+
single: formatProductMarkdown,
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
// ── Manual tools (non-standard endpoints) ─────────────
|
|
159
|
+
// List Products Stock
|
|
160
|
+
server.registerTool("holded_invoicing_list_products_stock", {
|
|
161
|
+
title: "List Holded Products Stock",
|
|
162
|
+
description: `List stock levels for products in a specific warehouse in Holded.
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
- warehouse_id (string): The warehouse ID to list stock for (required)
|
|
166
|
+
- page (number): Page number for pagination (default: 1, max 500 items per page)
|
|
167
|
+
- response_format ('json' | 'markdown'): Output format (default: 'json')
|
|
168
|
+
|
|
169
|
+
Returns:
|
|
170
|
+
Array of products with their stock levels for the specified warehouse.`,
|
|
171
|
+
inputSchema: ListProductsStockInputSchema,
|
|
172
|
+
annotations: {
|
|
173
|
+
readOnlyHint: true,
|
|
174
|
+
destructiveHint: false,
|
|
175
|
+
idempotentHint: true,
|
|
176
|
+
openWorldHint: true,
|
|
177
|
+
},
|
|
178
|
+
}, withErrorHandling(async (params) => {
|
|
179
|
+
const typedParams = params;
|
|
180
|
+
const queryParams = {};
|
|
181
|
+
if (typedParams.page > 1) {
|
|
182
|
+
queryParams.page = typedParams.page;
|
|
183
|
+
}
|
|
184
|
+
const stocks = await makeApiRequest("invoicing", `warehouses/${typedParams.warehouse_id}/stock`, "GET", undefined, queryParams);
|
|
185
|
+
let textContent;
|
|
186
|
+
if (typedParams.response_format === ResponseFormat.MARKDOWN) {
|
|
187
|
+
if (!stocks.length) {
|
|
188
|
+
textContent = `No product stock information found for warehouse ${typedParams.warehouse_id}.`;
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
const lines = ["# Product Stock Levels", "", `**Warehouse ID**: ${typedParams.warehouse_id}`, "", `Found ${stocks.length} products:`, ""];
|
|
192
|
+
for (const stock of stocks) {
|
|
193
|
+
lines.push(`## ${stock.name || stock.productId}`);
|
|
194
|
+
lines.push(`- **ID**: ${stock.productId}`);
|
|
195
|
+
if (stock.sku)
|
|
196
|
+
lines.push(`- **SKU**: ${stock.sku}`);
|
|
197
|
+
lines.push(`- **Stock**: ${stock.stock}`);
|
|
198
|
+
lines.push("");
|
|
199
|
+
}
|
|
200
|
+
textContent = lines.join("\n");
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
else {
|
|
204
|
+
textContent = JSON.stringify(stocks, null, 2);
|
|
205
|
+
}
|
|
206
|
+
return {
|
|
207
|
+
content: [{ type: "text", text: textContent }],
|
|
208
|
+
structuredContent: { stocks, count: stocks.length, page: typedParams.page, warehouseId: typedParams.warehouse_id },
|
|
209
|
+
};
|
|
210
|
+
}));
|
|
211
|
+
// Update Product Stock
|
|
212
|
+
server.registerTool("holded_invoicing_update_product_stock", {
|
|
213
|
+
title: "Update Holded Product Stock",
|
|
214
|
+
description: `Update stock level for a product in Holded.
|
|
215
|
+
|
|
216
|
+
Args:
|
|
217
|
+
- product_id (string): The product ID to update stock for (required, path parameter)
|
|
218
|
+
- stock (object): Nested object structure: stock[warehouseId][productId/variantId] = quantity
|
|
219
|
+
Example: { "warehouse1": { "product123": 10, "variant456": 5 } }
|
|
220
|
+
|
|
221
|
+
Returns:
|
|
222
|
+
Confirmation of stock update.`,
|
|
223
|
+
inputSchema: UpdateProductStockInputSchema,
|
|
224
|
+
annotations: {
|
|
225
|
+
readOnlyHint: false,
|
|
226
|
+
destructiveHint: false,
|
|
227
|
+
idempotentHint: false,
|
|
228
|
+
openWorldHint: true,
|
|
229
|
+
},
|
|
230
|
+
}, withErrorHandling(async (params) => {
|
|
231
|
+
const { product_id, stock } = params;
|
|
232
|
+
const result = await makeApiRequest("invoicing", `products/${product_id}/stock`, "PUT", { stock });
|
|
233
|
+
return {
|
|
234
|
+
content: [
|
|
235
|
+
{
|
|
236
|
+
type: "text",
|
|
237
|
+
text: `Product stock updated successfully.\n\n${JSON.stringify(result, null, 2)}`,
|
|
238
|
+
},
|
|
239
|
+
],
|
|
240
|
+
structuredContent: { updated: true, productId: product_id, stock },
|
|
241
|
+
};
|
|
242
|
+
}));
|
|
243
|
+
// Get Product Main Image
|
|
244
|
+
server.registerTool("holded_invoicing_get_product_image", {
|
|
245
|
+
title: "Get Holded Product Main Image",
|
|
246
|
+
description: `Get the main image of a specific product from Holded.
|
|
247
|
+
|
|
248
|
+
Args:
|
|
249
|
+
- product_id (string): The product ID to get the main image for (required)
|
|
250
|
+
- response_format ('json' | 'markdown'): Output format (default: 'json')
|
|
251
|
+
|
|
252
|
+
Returns:
|
|
253
|
+
Product main image data (URL or base64 encoded).`,
|
|
254
|
+
inputSchema: GetProductImageInputSchema,
|
|
255
|
+
annotations: {
|
|
256
|
+
readOnlyHint: true,
|
|
257
|
+
destructiveHint: false,
|
|
258
|
+
idempotentHint: true,
|
|
259
|
+
openWorldHint: true,
|
|
260
|
+
},
|
|
261
|
+
}, withErrorHandling(async (params) => {
|
|
262
|
+
const typedParams = params;
|
|
263
|
+
const result = await makeApiRequest("invoicing", `products/${typedParams.product_id}/image`, "GET");
|
|
264
|
+
const textContent = typedParams.response_format === ResponseFormat.MARKDOWN
|
|
265
|
+
? result.url
|
|
266
|
+
? `# Product Main Image\n\n**URL**: ${result.url}`
|
|
267
|
+
: `# Product Main Image\n\nImage data available.`
|
|
268
|
+
: JSON.stringify(result, null, 2);
|
|
269
|
+
return {
|
|
270
|
+
content: [{ type: "text", text: textContent }],
|
|
271
|
+
structuredContent: { productId: typedParams.product_id, ...result },
|
|
272
|
+
};
|
|
273
|
+
}));
|
|
274
|
+
// List Product Images
|
|
275
|
+
server.registerTool("holded_invoicing_list_product_images", {
|
|
276
|
+
title: "List Holded Product Images",
|
|
277
|
+
description: `List all secondary product images from Holded.
|
|
278
|
+
|
|
279
|
+
Args:
|
|
280
|
+
- product_id (string): The product ID to list images for (required)
|
|
281
|
+
- response_format ('json' | 'markdown'): Output format (default: 'json')
|
|
282
|
+
|
|
283
|
+
Returns:
|
|
284
|
+
Array of product image file names or image data.`,
|
|
285
|
+
inputSchema: ListProductImagesInputSchema,
|
|
286
|
+
annotations: {
|
|
287
|
+
readOnlyHint: true,
|
|
288
|
+
destructiveHint: false,
|
|
289
|
+
idempotentHint: true,
|
|
290
|
+
openWorldHint: true,
|
|
291
|
+
},
|
|
292
|
+
}, withErrorHandling(async (params) => {
|
|
293
|
+
const typedParams = params;
|
|
294
|
+
const images = await makeApiRequest("invoicing", `products/${typedParams.product_id}/imagesList`, "GET");
|
|
295
|
+
let textContent;
|
|
296
|
+
if (typedParams.response_format === ResponseFormat.MARKDOWN) {
|
|
297
|
+
if (!images.length) {
|
|
298
|
+
textContent = `No product images found for product ${typedParams.product_id}.`;
|
|
299
|
+
}
|
|
300
|
+
else {
|
|
301
|
+
const lines = ["# Product Images", "", `Found ${images.length} images:`, ""];
|
|
302
|
+
for (const image of images) {
|
|
303
|
+
if (typeof image === "string") {
|
|
304
|
+
lines.push(`- ${image}`);
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
lines.push(`- ${image.name || image.url || "Image"}`);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
textContent = lines.join("\n");
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
textContent = JSON.stringify(images, null, 2);
|
|
315
|
+
}
|
|
316
|
+
return {
|
|
317
|
+
content: [{ type: "text", text: textContent }],
|
|
318
|
+
structuredContent: { images, count: images.length, productId: typedParams.product_id },
|
|
319
|
+
};
|
|
320
|
+
}));
|
|
321
|
+
// Get Product Secondary Image
|
|
322
|
+
server.registerTool("holded_invoicing_get_product_secondary_image", {
|
|
323
|
+
title: "Get Holded Product Secondary Image",
|
|
324
|
+
description: `Get a specific secondary image of a product from Holded.
|
|
325
|
+
|
|
326
|
+
Args:
|
|
327
|
+
- product_id (string): The product ID (required)
|
|
328
|
+
- image_file_name (string): The image file name (required)
|
|
329
|
+
- response_format ('json' | 'markdown'): Output format (default: 'json')
|
|
330
|
+
|
|
331
|
+
Returns:
|
|
332
|
+
Product secondary image data (URL or base64 encoded).`,
|
|
333
|
+
inputSchema: GetProductSecondaryImageInputSchema,
|
|
334
|
+
annotations: {
|
|
335
|
+
readOnlyHint: true,
|
|
336
|
+
destructiveHint: false,
|
|
337
|
+
idempotentHint: true,
|
|
338
|
+
openWorldHint: true,
|
|
339
|
+
},
|
|
340
|
+
}, withErrorHandling(async (params) => {
|
|
341
|
+
const typedParams = params;
|
|
342
|
+
const result = await makeApiRequest("invoicing", `products/${typedParams.product_id}/image/${typedParams.image_file_name}`, "GET");
|
|
343
|
+
const textContent = typedParams.response_format === ResponseFormat.MARKDOWN
|
|
344
|
+
? result.url
|
|
345
|
+
? `# Product Secondary Image\n\n**File**: ${typedParams.image_file_name}\n**URL**: ${result.url}`
|
|
346
|
+
: `# Product Secondary Image\n\n**File**: ${typedParams.image_file_name}\nImage data available.`
|
|
347
|
+
: JSON.stringify(result, null, 2);
|
|
348
|
+
return {
|
|
349
|
+
content: [{ type: "text", text: textContent }],
|
|
350
|
+
structuredContent: { productId: typedParams.product_id, imageFileName: typedParams.image_file_name, ...result },
|
|
351
|
+
};
|
|
352
|
+
}));
|
|
353
|
+
// Upload Product Image
|
|
354
|
+
server.registerTool("holded_invoicing_upload_product_image", {
|
|
355
|
+
title: "Upload Holded Product Image",
|
|
356
|
+
description: `Upload an image to a product in Holded.
|
|
357
|
+
|
|
358
|
+
Args:
|
|
359
|
+
- product_id (string): The product ID to upload image to (required)
|
|
360
|
+
- file_content (string): Image file content as base64 encoded string (required)
|
|
361
|
+
- file_name (string): Image file name (required)
|
|
362
|
+
- set_main (boolean): Set this image as the main product image
|
|
363
|
+
|
|
364
|
+
Returns:
|
|
365
|
+
Confirmation of image upload with status and info.`,
|
|
366
|
+
inputSchema: UploadProductImageInputSchema,
|
|
367
|
+
annotations: {
|
|
368
|
+
readOnlyHint: false,
|
|
369
|
+
destructiveHint: false,
|
|
370
|
+
idempotentHint: false,
|
|
371
|
+
openWorldHint: true,
|
|
372
|
+
},
|
|
373
|
+
}, withErrorHandling(async (params) => {
|
|
374
|
+
const { product_id, file_content, file_name, set_main } = params;
|
|
375
|
+
// Convert base64 to buffer
|
|
376
|
+
const fileBuffer = Buffer.from(file_content, "base64");
|
|
377
|
+
const result = await makeMultipartApiRequest("invoicing", `products/${product_id}/image`, fileBuffer, file_name, set_main);
|
|
378
|
+
return {
|
|
379
|
+
content: [
|
|
380
|
+
{
|
|
381
|
+
type: "text",
|
|
382
|
+
text: `Product image uploaded successfully.\n\n${JSON.stringify(result, null, 2)}`,
|
|
383
|
+
},
|
|
384
|
+
],
|
|
385
|
+
structuredContent: { uploaded: true, productId: product_id, fileName: file_name, ...result },
|
|
386
|
+
};
|
|
387
|
+
}));
|
|
388
|
+
}
|
|
389
|
+
//# sourceMappingURL=products.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"products.js","sourceRoot":"","sources":["../../../src/tools/invoicing/products.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remittance tools for Holded API
|
|
3
|
+
*/
|
|
4
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
|
+
/**
|
|
6
|
+
* Format remittances as markdown
|
|
7
|
+
*/
|
|
8
|
+
export declare function formatRemittancesMarkdown(remittances: Record<string, unknown>[]): string;
|
|
9
|
+
/**
|
|
10
|
+
* Format a single remittance as markdown
|
|
11
|
+
*/
|
|
12
|
+
export declare function formatRemittanceMarkdown(remittance: Record<string, unknown>): string;
|
|
13
|
+
/**
|
|
14
|
+
* Register remittance tools
|
|
15
|
+
*/
|
|
16
|
+
export declare function registerRemittanceTools(server: McpServer): void;
|
|
17
|
+
//# sourceMappingURL=remittances.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remittances.d.ts","sourceRoot":"","sources":["../../../src/tools/invoicing/remittances.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAOpE;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,MAAM,CAcxF;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAUpF;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAuC/D"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remittance tools for Holded API
|
|
3
|
+
*/
|
|
4
|
+
import { ListRemittancesInputSchema, GetRemittanceInputSchema, } from "../../schemas/invoicing/remittances.js";
|
|
5
|
+
import { registerCrudTools } from "../factory.js";
|
|
6
|
+
/**
|
|
7
|
+
* Format remittances as markdown
|
|
8
|
+
*/
|
|
9
|
+
export function formatRemittancesMarkdown(remittances) {
|
|
10
|
+
if (!remittances.length) {
|
|
11
|
+
return "No remittances found.";
|
|
12
|
+
}
|
|
13
|
+
const lines = ["# Remittances", "", `Found ${remittances.length} remittances:`, ""];
|
|
14
|
+
for (const remittance of remittances) {
|
|
15
|
+
lines.push(`## Remittance ${remittance.id}`);
|
|
16
|
+
lines.push(`- **ID**: ${remittance.id}`);
|
|
17
|
+
lines.push("");
|
|
18
|
+
}
|
|
19
|
+
return lines.join("\n");
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Format a single remittance as markdown
|
|
23
|
+
*/
|
|
24
|
+
export function formatRemittanceMarkdown(remittance) {
|
|
25
|
+
const lines = [`# Remittance ${remittance.id || "Unknown"}`, ""];
|
|
26
|
+
for (const [key, value] of Object.entries(remittance)) {
|
|
27
|
+
if (value !== null && value !== undefined) {
|
|
28
|
+
lines.push(`- **${key}**: ${String(value)}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return lines.join("\n");
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Register remittance tools
|
|
35
|
+
*/
|
|
36
|
+
export function registerRemittanceTools(server) {
|
|
37
|
+
registerCrudTools(server, {
|
|
38
|
+
module: "invoicing",
|
|
39
|
+
toolPrefix: "holded_invoicing",
|
|
40
|
+
resource: "remittance",
|
|
41
|
+
resourcePlural: "remittances",
|
|
42
|
+
endpoint: "remittances",
|
|
43
|
+
idParam: "remittance_id",
|
|
44
|
+
schemas: {
|
|
45
|
+
list: ListRemittancesInputSchema,
|
|
46
|
+
get: GetRemittanceInputSchema,
|
|
47
|
+
},
|
|
48
|
+
titles: {
|
|
49
|
+
list: "List Holded Remittances",
|
|
50
|
+
get: "Get Holded Remittance",
|
|
51
|
+
},
|
|
52
|
+
descriptions: {
|
|
53
|
+
list: `List all remittances from Holded.
|
|
54
|
+
|
|
55
|
+
Args:
|
|
56
|
+
- page (number): Page number for pagination (default: 1, max 500 items per page)
|
|
57
|
+
- response_format ('json' | 'markdown'): Output format (default: 'json')
|
|
58
|
+
|
|
59
|
+
Returns:
|
|
60
|
+
Array of remittances.`,
|
|
61
|
+
get: `Get a specific remittance by ID from Holded.
|
|
62
|
+
|
|
63
|
+
Args:
|
|
64
|
+
- remittance_id (string): The remittance ID to retrieve (required)
|
|
65
|
+
- response_format ('json' | 'markdown'): Output format (default: 'json')
|
|
66
|
+
|
|
67
|
+
Returns:
|
|
68
|
+
Remittance details.`,
|
|
69
|
+
},
|
|
70
|
+
formatters: {
|
|
71
|
+
list: formatRemittancesMarkdown,
|
|
72
|
+
single: formatRemittanceMarkdown,
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=remittances.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remittances.js","sourceRoot":"","sources":["../../../src/tools/invoicing/remittances.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,GACzB,MAAM,wCAAwC,CAAC;AAChD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElD;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,WAAsC;IAC9E,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;QACxB,OAAO,uBAAuB,CAAC;IACjC,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,eAAe,EAAE,EAAE,EAAE,SAAS,WAAW,CAAC,MAAM,eAAe,EAAE,EAAE,CAAC,CAAC;IAEpF,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACrC,KAAK,CAAC,IAAI,CAAC,iBAAiB,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QAC7C,KAAK,CAAC,IAAI,CAAC,aAAa,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,UAAmC;IAC1E,MAAM,KAAK,GAAG,CAAC,gBAAgB,UAAU,CAAC,EAAE,IAAI,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;IAEjE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,CAAC;QACtD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YAC1C,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,OAAO,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAiB;IACvD,iBAAiB,CAA0B,MAAM,EAAE;QACjD,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,kBAAkB;QAC9B,QAAQ,EAAE,YAAY;QACtB,cAAc,EAAE,aAAa;QAC7B,QAAQ,EAAE,aAAa;QACvB,OAAO,EAAE,eAAe;QACxB,OAAO,EAAE;YACP,IAAI,EAAE,0BAA0B;YAChC,GAAG,EAAE,wBAAwB;SAC9B;QACD,MAAM,EAAE;YACN,IAAI,EAAE,yBAAyB;YAC/B,GAAG,EAAE,uBAAuB;SAC7B;QACD,YAAY,EAAE;YACZ,IAAI,EAAE;;;;;;;wBAOY;YAClB,GAAG,EAAE;;;;;;;sBAOW;SACjB;QACD,UAAU,EAAE;YACV,IAAI,EAAE,yBAAyB;YAC/B,MAAM,EAAE,wBAAwB;SACjC;KACF,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sales Channel tools for Holded API
|
|
3
|
+
*/
|
|
4
|
+
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
5
|
+
interface SalesChannel {
|
|
6
|
+
id: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
[key: string]: unknown;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Format sales channels as markdown
|
|
13
|
+
*/
|
|
14
|
+
export declare function formatSalesChannelsMarkdown(channels: SalesChannel[]): string;
|
|
15
|
+
/**
|
|
16
|
+
* Format a single sales channel as markdown
|
|
17
|
+
*/
|
|
18
|
+
export declare function formatSalesChannelMarkdown(channel: SalesChannel): string;
|
|
19
|
+
/**
|
|
20
|
+
* Register all sales channel-related tools
|
|
21
|
+
*/
|
|
22
|
+
export declare function registerSalesChannelTools(server: McpServer): void;
|
|
23
|
+
export {};
|
|
24
|
+
//# sourceMappingURL=sales-channels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sales-channels.d.ts","sourceRoot":"","sources":["../../../src/tools/invoicing/sales-channels.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUpE,UAAU,YAAY;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,QAAQ,EAAE,YAAY,EAAE,GAAG,MAAM,CAe5E;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAKxE;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAqEjE"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sales Channel tools for Holded API
|
|
3
|
+
*/
|
|
4
|
+
import { ListSalesChannelsInputSchema, GetSalesChannelInputSchema, CreateSalesChannelInputSchema, UpdateSalesChannelInputSchema, DeleteSalesChannelInputSchema, } from "../../schemas/invoicing/sales-channels.js";
|
|
5
|
+
import { registerCrudTools } from "../factory.js";
|
|
6
|
+
/**
|
|
7
|
+
* Format sales channels as markdown
|
|
8
|
+
*/
|
|
9
|
+
export function formatSalesChannelsMarkdown(channels) {
|
|
10
|
+
if (!channels.length) {
|
|
11
|
+
return "No sales channels found.";
|
|
12
|
+
}
|
|
13
|
+
const lines = ["# Sales Channels", "", `Found ${channels.length} sales channels:`, ""];
|
|
14
|
+
for (const channel of channels) {
|
|
15
|
+
lines.push(`## ${channel.name}`);
|
|
16
|
+
lines.push(`- **ID**: ${channel.id}`);
|
|
17
|
+
if (channel.description)
|
|
18
|
+
lines.push(`- **Description**: ${channel.description}`);
|
|
19
|
+
lines.push("");
|
|
20
|
+
}
|
|
21
|
+
return lines.join("\n");
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Format a single sales channel as markdown
|
|
25
|
+
*/
|
|
26
|
+
export function formatSalesChannelMarkdown(channel) {
|
|
27
|
+
const lines = [`# ${channel.name}`, "", `**ID**: ${channel.id}`, ""];
|
|
28
|
+
if (channel.description)
|
|
29
|
+
lines.push(`- **Description**: ${channel.description}`);
|
|
30
|
+
return lines.join("\n");
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Register all sales channel-related tools
|
|
34
|
+
*/
|
|
35
|
+
export function registerSalesChannelTools(server) {
|
|
36
|
+
registerCrudTools(server, {
|
|
37
|
+
module: "invoicing",
|
|
38
|
+
toolPrefix: "holded_invoicing",
|
|
39
|
+
resource: "sales_channel",
|
|
40
|
+
resourcePlural: "sales_channels",
|
|
41
|
+
endpoint: "saleschannels",
|
|
42
|
+
idParam: "sales_channel_id",
|
|
43
|
+
schemas: {
|
|
44
|
+
list: ListSalesChannelsInputSchema,
|
|
45
|
+
get: GetSalesChannelInputSchema,
|
|
46
|
+
create: CreateSalesChannelInputSchema,
|
|
47
|
+
update: UpdateSalesChannelInputSchema,
|
|
48
|
+
delete: DeleteSalesChannelInputSchema,
|
|
49
|
+
},
|
|
50
|
+
titles: {
|
|
51
|
+
list: "List Holded Sales Channels",
|
|
52
|
+
get: "Get Holded Sales Channel",
|
|
53
|
+
create: "Create Holded Sales Channel",
|
|
54
|
+
update: "Update Holded Sales Channel",
|
|
55
|
+
delete: "Delete Holded Sales Channel",
|
|
56
|
+
},
|
|
57
|
+
descriptions: {
|
|
58
|
+
list: `List all sales channels from Holded.
|
|
59
|
+
|
|
60
|
+
Args:
|
|
61
|
+
- page (number): Page number for pagination (default: 1, max 500 items per page)
|
|
62
|
+
- response_format ('json' | 'markdown'): Output format (default: 'json')
|
|
63
|
+
|
|
64
|
+
Returns:
|
|
65
|
+
Array of sales channels with id, name, and description.`,
|
|
66
|
+
get: `Get a specific sales channel by ID from Holded.
|
|
67
|
+
|
|
68
|
+
Args:
|
|
69
|
+
- sales_channel_id (string): The sales channel ID to retrieve (required)
|
|
70
|
+
- response_format ('json' | 'markdown'): Output format (default: 'json')
|
|
71
|
+
|
|
72
|
+
Returns:
|
|
73
|
+
Sales channel details including name and description.`,
|
|
74
|
+
create: `Create a new sales channel in Holded.
|
|
75
|
+
|
|
76
|
+
Args:
|
|
77
|
+
- name (string): Sales channel name (required)
|
|
78
|
+
- description (string): Sales channel description
|
|
79
|
+
|
|
80
|
+
Returns:
|
|
81
|
+
The created sales channel with its assigned ID.`,
|
|
82
|
+
update: `Update an existing sales channel in Holded.
|
|
83
|
+
|
|
84
|
+
Args:
|
|
85
|
+
- sales_channel_id (string): The sales channel ID to update (required)
|
|
86
|
+
- name (string): Sales channel name
|
|
87
|
+
- description (string): Sales channel description
|
|
88
|
+
|
|
89
|
+
Returns:
|
|
90
|
+
The updated sales channel.`,
|
|
91
|
+
delete: `Delete a sales channel from Holded.
|
|
92
|
+
|
|
93
|
+
Args:
|
|
94
|
+
- sales_channel_id (string): The sales channel ID to delete (required)
|
|
95
|
+
|
|
96
|
+
Returns:
|
|
97
|
+
Confirmation of deletion.`,
|
|
98
|
+
},
|
|
99
|
+
formatters: {
|
|
100
|
+
list: formatSalesChannelsMarkdown,
|
|
101
|
+
single: formatSalesChannelMarkdown,
|
|
102
|
+
},
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=sales-channels.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sales-channels.js","sourceRoot":"","sources":["../../../src/tools/invoicing/sales-channels.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,EACL,4BAA4B,EAC5B,0BAA0B,EAC1B,6BAA6B,EAC7B,6BAA6B,EAC7B,6BAA6B,GAC9B,MAAM,2CAA2C,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AASlD;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAAC,QAAwB;IAClE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;QACrB,OAAO,0BAA0B,CAAC;IACpC,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,kBAAkB,EAAE,EAAE,EAAE,SAAS,QAAQ,CAAC,MAAM,kBAAkB,EAAE,EAAE,CAAC,CAAC;IAEvF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QACjC,KAAK,CAAC,IAAI,CAAC,aAAa,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;QACtC,IAAI,OAAO,CAAC,WAAW;YAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAqB;IAC9D,MAAM,KAAK,GAAG,CAAC,KAAK,OAAO,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,WAAW,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,WAAW;QAAE,KAAK,CAAC,IAAI,CAAC,sBAAsB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAEjF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,iBAAiB,CAAe,MAAM,EAAE;QACtC,MAAM,EAAE,WAAW;QACnB,UAAU,EAAE,kBAAkB;QAC9B,QAAQ,EAAE,eAAe;QACzB,cAAc,EAAE,gBAAgB;QAChC,QAAQ,EAAE,eAAe;QACzB,OAAO,EAAE,kBAAkB;QAC3B,OAAO,EAAE;YACP,IAAI,EAAE,4BAA4B;YAClC,GAAG,EAAE,0BAA0B;YAC/B,MAAM,EAAE,6BAA6B;YACrC,MAAM,EAAE,6BAA6B;YACrC,MAAM,EAAE,6BAA6B;SACtC;QACD,MAAM,EAAE;YACN,IAAI,EAAE,4BAA4B;YAClC,GAAG,EAAE,0BAA0B;YAC/B,MAAM,EAAE,6BAA6B;YACrC,MAAM,EAAE,6BAA6B;YACrC,MAAM,EAAE,6BAA6B;SACtC;QACD,YAAY,EAAE;YACZ,IAAI,EAAE;;;;;;;0DAO8C;YACpD,GAAG,EAAE;;;;;;;wDAO6C;YAClD,MAAM,EAAE;;;;;;;kDAOoC;YAC5C,MAAM,EAAE;;;;;;;;6BAQe;YACvB,MAAM,EAAE;;;;;;4BAMc;SACvB;QACD,UAAU,EAAE;YACV,IAAI,EAAE,2BAA2B;YACjC,MAAM,EAAE,0BAA0B;SACnC;KACF,CAAC,CAAC;AACL,CAAC"}
|