@codespar/mcp-afip 0.1.0 → 0.2.0-alpha.2
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/README.md +27 -12
- package/dist/index.d.ts +19 -7
- package/dist/index.js +257 -9
- package/package.json +13 -4
package/README.md
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# MCP AFIP
|
|
2
2
|
|
|
3
|
+
|
|
4
|
+
> **Alpha release** — published under the `alpha` npm dist-tag. Endpoint paths follow public docs and BACEN/provider conventions but have not been fully live-validated. Pin exact versions during `0.x.x-alpha`. Install with `npm install <pkg>@alpha`.
|
|
5
|
+
|
|
3
6
|
MCP server for **AFIP** — Argentine tax authority (Administracion Federal de Ingresos Publicos) for electronic invoicing (Factura Electronica) with CAE authorization.
|
|
4
7
|
|
|
5
8
|
## Quick Start
|
|
@@ -28,18 +31,30 @@ npx tsx packages/argentina/afip/src/index.ts --http
|
|
|
28
31
|
| `MCP_HTTP` | No | Set to `"true"` to enable HTTP transport |
|
|
29
32
|
| `MCP_PORT` | No | HTTP port (default: 3000) |
|
|
30
33
|
|
|
31
|
-
## Tools
|
|
32
|
-
|
|
33
|
-
| Tool |
|
|
34
|
-
|
|
35
|
-
| `create_invoice` | Create an electronic invoice (Factura
|
|
36
|
-
| `get_invoice` | Get invoice details by type,
|
|
37
|
-
| `get_last_invoice_number` | Get last authorized invoice number for a
|
|
38
|
-
| `get_cae_status` | Check CAE authorization status |
|
|
39
|
-
| `list_invoice_types` | List available invoice types (A, B, C, etc.) |
|
|
40
|
-
| `list_tax_types` | List available tax types (IVA, percepciones, etc.) |
|
|
41
|
-
| `get_server_status` | Check AFIP web-service availability |
|
|
42
|
-
| `get_authorized_points_of_sale` | List authorized puntos de venta |
|
|
34
|
+
## Tools (20)
|
|
35
|
+
|
|
36
|
+
| Tool | Purpose |
|
|
37
|
+
|---|---|
|
|
38
|
+
| `create_invoice` | Create an electronic invoice (Factura Electrónica) via AFIP |
|
|
39
|
+
| `get_invoice` | Get invoice details by type, point of sale, and number |
|
|
40
|
+
| `get_last_invoice_number` | Get last authorized invoice number for a point of sale and type |
|
|
41
|
+
| `get_cae_status` | Check CAE authorization status for an invoice |
|
|
42
|
+
| `list_invoice_types` | List available invoice types (Factura A, B, C, etc.) |
|
|
43
|
+
| `list_tax_types` | List available tax types (IVA, percepciones, retenciones, etc.) |
|
|
44
|
+
| `get_server_status` | Check AFIP web-service availability (WSFE status) |
|
|
45
|
+
| `get_authorized_points_of_sale` | List authorized puntos de venta for the CUIT |
|
|
46
|
+
| `create_invoice_batch` | Create a batch of invoices in a single CAE request (FECAESolicitar, up to 250) |
|
|
47
|
+
| `create_credit_note` | Issue a credit note (Nota de Crédito A/B/C: types 3, 8, 13) referencing an original invoice |
|
|
48
|
+
| `create_debit_note` | Issue a debit note (Nota de Débito A/B/C: types 2, 7, 12) referencing an original invoice |
|
|
49
|
+
| `cancel_invoice` | Cancel/void an authorized invoice (FECancel — limited to certain types/conditions) |
|
|
50
|
+
| `get_invoice_total_x_request` | Max number of records allowed per FECAESolicitar request (FECompTotXRequest) |
|
|
51
|
+
| `list_concept_types` | List available concept types (FEParamGetTiposConcepto: 1=Products, 2=Services, 3=Both) |
|
|
52
|
+
| `list_doc_types` | List document/identifier types (FEParamGetTiposDoc: 80=CUIT, 86=CUIL, 96=DNI, 99=Consumer Final) |
|
|
53
|
+
| `list_iva_types` | List IVA tax aliquots (FEParamGetTiposIva: 21%, 10.5%, 27%, 0%, etc.) |
|
|
54
|
+
| `list_currency_types` | List supported currencies (FEParamGetTiposMonedas) |
|
|
55
|
+
| `get_currency_rate` | Get FX rate (cotización) for a currency vs ARS (FEParamGetCotizacion) |
|
|
56
|
+
| `lookup_taxpayer` | Padrón lookup by CUIT (WS_SR_PADRON A4/A5/A13 — fiscal status, name, address) |
|
|
57
|
+
| `get_registration_certificate` | Get constancia de inscripción (registration certificate) for a CUIT |
|
|
43
58
|
|
|
44
59
|
## Auth
|
|
45
60
|
|
package/dist/index.d.ts
CHANGED
|
@@ -2,15 +2,27 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* MCP Server for AFIP — Argentine tax authority, electronic invoicing (Factura Electrónica).
|
|
4
4
|
*
|
|
5
|
-
* Tools:
|
|
6
|
-
* - create_invoice: Create an electronic invoice (
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
5
|
+
* Tools (WSFE / WS_SR_PADRON):
|
|
6
|
+
* - create_invoice: Create an electronic invoice (FECAESolicitar — single)
|
|
7
|
+
* - create_invoice_batch: Create up to 250 invoices in a single CAE request (FECAESolicitar — batch)
|
|
8
|
+
* - create_credit_note: Issue a credit note (Nota de Crédito A/B/C)
|
|
9
|
+
* - create_debit_note: Issue a debit note (Nota de Débito A/B/C)
|
|
10
|
+
* - cancel_invoice: Cancel/void an authorized invoice where applicable (FECancel)
|
|
11
|
+
* - get_invoice: Get invoice details (FECompConsultar)
|
|
12
|
+
* - get_invoice_total_x_request: Max records per request (FECompTotXRequest)
|
|
13
|
+
* - get_last_invoice_number: Last authorized invoice number (FECompUltimoAutorizado)
|
|
9
14
|
* - get_cae_status: Check CAE authorization status
|
|
10
|
-
* - list_invoice_types:
|
|
11
|
-
* -
|
|
12
|
-
* -
|
|
15
|
+
* - list_invoice_types: Invoice types (FEParamGetTiposCbte)
|
|
16
|
+
* - list_concept_types: Concept types (FEParamGetTiposConcepto)
|
|
17
|
+
* - list_doc_types: Document types (FEParamGetTiposDoc)
|
|
18
|
+
* - list_iva_types: IVA aliquots (FEParamGetTiposIva)
|
|
19
|
+
* - list_currency_types: Currencies (FEParamGetTiposMonedas)
|
|
20
|
+
* - list_tax_types: Tax types (FEParamGetTiposTributos)
|
|
21
|
+
* - get_currency_rate: FX rate for a currency (FEParamGetCotizacion)
|
|
22
|
+
* - get_server_status: AFIP web-service availability
|
|
13
23
|
* - get_authorized_points_of_sale: List authorized puntos de venta
|
|
24
|
+
* - lookup_taxpayer: Padrón lookup by CUIT (A4/A5/A13)
|
|
25
|
+
* - get_registration_certificate: Constancia de inscripción for a CUIT
|
|
14
26
|
*
|
|
15
27
|
* Environment:
|
|
16
28
|
* AFIP_CERT_PATH — Path to AFIP certificate (.crt)
|
package/dist/index.js
CHANGED
|
@@ -2,15 +2,27 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* MCP Server for AFIP — Argentine tax authority, electronic invoicing (Factura Electrónica).
|
|
4
4
|
*
|
|
5
|
-
* Tools:
|
|
6
|
-
* - create_invoice: Create an electronic invoice (
|
|
7
|
-
* -
|
|
8
|
-
* -
|
|
5
|
+
* Tools (WSFE / WS_SR_PADRON):
|
|
6
|
+
* - create_invoice: Create an electronic invoice (FECAESolicitar — single)
|
|
7
|
+
* - create_invoice_batch: Create up to 250 invoices in a single CAE request (FECAESolicitar — batch)
|
|
8
|
+
* - create_credit_note: Issue a credit note (Nota de Crédito A/B/C)
|
|
9
|
+
* - create_debit_note: Issue a debit note (Nota de Débito A/B/C)
|
|
10
|
+
* - cancel_invoice: Cancel/void an authorized invoice where applicable (FECancel)
|
|
11
|
+
* - get_invoice: Get invoice details (FECompConsultar)
|
|
12
|
+
* - get_invoice_total_x_request: Max records per request (FECompTotXRequest)
|
|
13
|
+
* - get_last_invoice_number: Last authorized invoice number (FECompUltimoAutorizado)
|
|
9
14
|
* - get_cae_status: Check CAE authorization status
|
|
10
|
-
* - list_invoice_types:
|
|
11
|
-
* -
|
|
12
|
-
* -
|
|
15
|
+
* - list_invoice_types: Invoice types (FEParamGetTiposCbte)
|
|
16
|
+
* - list_concept_types: Concept types (FEParamGetTiposConcepto)
|
|
17
|
+
* - list_doc_types: Document types (FEParamGetTiposDoc)
|
|
18
|
+
* - list_iva_types: IVA aliquots (FEParamGetTiposIva)
|
|
19
|
+
* - list_currency_types: Currencies (FEParamGetTiposMonedas)
|
|
20
|
+
* - list_tax_types: Tax types (FEParamGetTiposTributos)
|
|
21
|
+
* - get_currency_rate: FX rate for a currency (FEParamGetCotizacion)
|
|
22
|
+
* - get_server_status: AFIP web-service availability
|
|
13
23
|
* - get_authorized_points_of_sale: List authorized puntos de venta
|
|
24
|
+
* - lookup_taxpayer: Padrón lookup by CUIT (A4/A5/A13)
|
|
25
|
+
* - get_registration_certificate: Constancia de inscripción for a CUIT
|
|
14
26
|
*
|
|
15
27
|
* Environment:
|
|
16
28
|
* AFIP_CERT_PATH — Path to AFIP certificate (.crt)
|
|
@@ -48,7 +60,7 @@ async function afipRequest(method, path, body) {
|
|
|
48
60
|
}
|
|
49
61
|
return res.json();
|
|
50
62
|
}
|
|
51
|
-
const server = new Server({ name: "mcp-afip", version: "0.
|
|
63
|
+
const server = new Server({ name: "mcp-afip", version: "0.2.0-alpha.2" }, { capabilities: { tools: {} } });
|
|
52
64
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
53
65
|
tools: [
|
|
54
66
|
{
|
|
@@ -142,6 +154,168 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
|
142
154
|
description: "List authorized puntos de venta for the CUIT",
|
|
143
155
|
inputSchema: { type: "object", properties: {} },
|
|
144
156
|
},
|
|
157
|
+
{
|
|
158
|
+
name: "create_invoice_batch",
|
|
159
|
+
description: "Create a batch of invoices in a single CAE request (FECAESolicitar, up to 250)",
|
|
160
|
+
inputSchema: {
|
|
161
|
+
type: "object",
|
|
162
|
+
properties: {
|
|
163
|
+
point_of_sale: { type: "number", description: "Punto de venta number" },
|
|
164
|
+
invoice_type: { type: "number", description: "Invoice type code (1=A, 6=B, 11=C, etc.)" },
|
|
165
|
+
invoices: {
|
|
166
|
+
type: "array",
|
|
167
|
+
description: "Invoice records (max 250 per request)",
|
|
168
|
+
items: {
|
|
169
|
+
type: "object",
|
|
170
|
+
properties: {
|
|
171
|
+
concept: { type: "number", description: "Concept (1=Products, 2=Services, 3=Both)" },
|
|
172
|
+
doc_type: { type: "number", description: "Document type" },
|
|
173
|
+
doc_number: { type: "number", description: "Document number" },
|
|
174
|
+
invoice_number: { type: "number", description: "CbteDesde/CbteHasta number" },
|
|
175
|
+
amount_total: { type: "number", description: "Total amount" },
|
|
176
|
+
amount_net: { type: "number", description: "Net taxable amount" },
|
|
177
|
+
amount_iva: { type: "number", description: "IVA amount" },
|
|
178
|
+
currency: { type: "string", description: "Currency code (PES=ARS, DOL=USD)" },
|
|
179
|
+
},
|
|
180
|
+
required: ["concept", "doc_type", "doc_number", "invoice_number", "amount_total"],
|
|
181
|
+
},
|
|
182
|
+
},
|
|
183
|
+
},
|
|
184
|
+
required: ["point_of_sale", "invoice_type", "invoices"],
|
|
185
|
+
},
|
|
186
|
+
},
|
|
187
|
+
{
|
|
188
|
+
name: "create_credit_note",
|
|
189
|
+
description: "Issue a credit note (Nota de Crédito A/B/C: types 3, 8, 13) referencing an original invoice",
|
|
190
|
+
inputSchema: {
|
|
191
|
+
type: "object",
|
|
192
|
+
properties: {
|
|
193
|
+
point_of_sale: { type: "number", description: "Punto de venta number" },
|
|
194
|
+
note_type: { type: "number", description: "Credit note type (3=A, 8=B, 13=C)" },
|
|
195
|
+
concept: { type: "number", description: "Concept (1=Products, 2=Services, 3=Both)" },
|
|
196
|
+
doc_type: { type: "number", description: "Customer document type" },
|
|
197
|
+
doc_number: { type: "number", description: "Customer document number" },
|
|
198
|
+
amount_total: { type: "number", description: "Total amount" },
|
|
199
|
+
amount_net: { type: "number", description: "Net taxable amount" },
|
|
200
|
+
amount_iva: { type: "number", description: "IVA amount" },
|
|
201
|
+
currency: { type: "string", description: "Currency code" },
|
|
202
|
+
related_invoice: {
|
|
203
|
+
type: "object",
|
|
204
|
+
description: "Original invoice reference (CbtesAsoc)",
|
|
205
|
+
properties: {
|
|
206
|
+
invoice_type: { type: "number", description: "Original invoice type" },
|
|
207
|
+
point_of_sale: { type: "number", description: "Original punto de venta" },
|
|
208
|
+
invoice_number: { type: "number", description: "Original invoice number" },
|
|
209
|
+
},
|
|
210
|
+
required: ["invoice_type", "point_of_sale", "invoice_number"],
|
|
211
|
+
},
|
|
212
|
+
},
|
|
213
|
+
required: ["point_of_sale", "note_type", "concept", "doc_type", "doc_number", "amount_total", "related_invoice"],
|
|
214
|
+
},
|
|
215
|
+
},
|
|
216
|
+
{
|
|
217
|
+
name: "create_debit_note",
|
|
218
|
+
description: "Issue a debit note (Nota de Débito A/B/C: types 2, 7, 12) referencing an original invoice",
|
|
219
|
+
inputSchema: {
|
|
220
|
+
type: "object",
|
|
221
|
+
properties: {
|
|
222
|
+
point_of_sale: { type: "number", description: "Punto de venta number" },
|
|
223
|
+
note_type: { type: "number", description: "Debit note type (2=A, 7=B, 12=C)" },
|
|
224
|
+
concept: { type: "number", description: "Concept (1=Products, 2=Services, 3=Both)" },
|
|
225
|
+
doc_type: { type: "number", description: "Customer document type" },
|
|
226
|
+
doc_number: { type: "number", description: "Customer document number" },
|
|
227
|
+
amount_total: { type: "number", description: "Total amount" },
|
|
228
|
+
amount_net: { type: "number", description: "Net taxable amount" },
|
|
229
|
+
amount_iva: { type: "number", description: "IVA amount" },
|
|
230
|
+
currency: { type: "string", description: "Currency code" },
|
|
231
|
+
related_invoice: {
|
|
232
|
+
type: "object",
|
|
233
|
+
description: "Original invoice reference (CbtesAsoc)",
|
|
234
|
+
properties: {
|
|
235
|
+
invoice_type: { type: "number", description: "Original invoice type" },
|
|
236
|
+
point_of_sale: { type: "number", description: "Original punto de venta" },
|
|
237
|
+
invoice_number: { type: "number", description: "Original invoice number" },
|
|
238
|
+
},
|
|
239
|
+
required: ["invoice_type", "point_of_sale", "invoice_number"],
|
|
240
|
+
},
|
|
241
|
+
},
|
|
242
|
+
required: ["point_of_sale", "note_type", "concept", "doc_type", "doc_number", "amount_total", "related_invoice"],
|
|
243
|
+
},
|
|
244
|
+
},
|
|
245
|
+
{
|
|
246
|
+
name: "cancel_invoice",
|
|
247
|
+
description: "Cancel/void an authorized invoice (FECancel — limited to certain types/conditions)",
|
|
248
|
+
inputSchema: {
|
|
249
|
+
type: "object",
|
|
250
|
+
properties: {
|
|
251
|
+
point_of_sale: { type: "number", description: "Punto de venta number" },
|
|
252
|
+
invoice_type: { type: "number", description: "Invoice type code" },
|
|
253
|
+
invoice_number: { type: "number", description: "Invoice number" },
|
|
254
|
+
reason: { type: "string", description: "Optional cancellation reason" },
|
|
255
|
+
},
|
|
256
|
+
required: ["point_of_sale", "invoice_type", "invoice_number"],
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
{
|
|
260
|
+
name: "get_invoice_total_x_request",
|
|
261
|
+
description: "Max number of records allowed per FECAESolicitar request (FECompTotXRequest)",
|
|
262
|
+
inputSchema: { type: "object", properties: {} },
|
|
263
|
+
},
|
|
264
|
+
{
|
|
265
|
+
name: "list_concept_types",
|
|
266
|
+
description: "List available concept types (FEParamGetTiposConcepto: 1=Products, 2=Services, 3=Both)",
|
|
267
|
+
inputSchema: { type: "object", properties: {} },
|
|
268
|
+
},
|
|
269
|
+
{
|
|
270
|
+
name: "list_doc_types",
|
|
271
|
+
description: "List document/identifier types (FEParamGetTiposDoc: 80=CUIT, 86=CUIL, 96=DNI, 99=Consumer Final)",
|
|
272
|
+
inputSchema: { type: "object", properties: {} },
|
|
273
|
+
},
|
|
274
|
+
{
|
|
275
|
+
name: "list_iva_types",
|
|
276
|
+
description: "List IVA tax aliquots (FEParamGetTiposIva: 21%, 10.5%, 27%, 0%, etc.)",
|
|
277
|
+
inputSchema: { type: "object", properties: {} },
|
|
278
|
+
},
|
|
279
|
+
{
|
|
280
|
+
name: "list_currency_types",
|
|
281
|
+
description: "List supported currencies (FEParamGetTiposMonedas)",
|
|
282
|
+
inputSchema: { type: "object", properties: {} },
|
|
283
|
+
},
|
|
284
|
+
{
|
|
285
|
+
name: "get_currency_rate",
|
|
286
|
+
description: "Get FX rate (cotización) for a currency vs ARS (FEParamGetCotizacion)",
|
|
287
|
+
inputSchema: {
|
|
288
|
+
type: "object",
|
|
289
|
+
properties: {
|
|
290
|
+
currency: { type: "string", description: "Currency code (e.g. DOL for USD)" },
|
|
291
|
+
date: { type: "string", description: "Optional date YYYYMMDD; defaults to last business day" },
|
|
292
|
+
},
|
|
293
|
+
required: ["currency"],
|
|
294
|
+
},
|
|
295
|
+
},
|
|
296
|
+
{
|
|
297
|
+
name: "lookup_taxpayer",
|
|
298
|
+
description: "Padrón lookup by CUIT (WS_SR_PADRON A4/A5/A13 — fiscal status, name, address)",
|
|
299
|
+
inputSchema: {
|
|
300
|
+
type: "object",
|
|
301
|
+
properties: {
|
|
302
|
+
cuit: { type: "string", description: "CUIT/CUIL to query (11 digits)" },
|
|
303
|
+
scope: { type: "string", description: "Padrón scope: A4, A5, or A13 (default A5)" },
|
|
304
|
+
},
|
|
305
|
+
required: ["cuit"],
|
|
306
|
+
},
|
|
307
|
+
},
|
|
308
|
+
{
|
|
309
|
+
name: "get_registration_certificate",
|
|
310
|
+
description: "Get constancia de inscripción (registration certificate) for a CUIT",
|
|
311
|
+
inputSchema: {
|
|
312
|
+
type: "object",
|
|
313
|
+
properties: {
|
|
314
|
+
cuit: { type: "string", description: "CUIT/CUIL (11 digits)" },
|
|
315
|
+
},
|
|
316
|
+
required: ["cuit"],
|
|
317
|
+
},
|
|
318
|
+
},
|
|
145
319
|
],
|
|
146
320
|
}));
|
|
147
321
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
@@ -181,6 +355,80 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
181
355
|
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("GET", "/wsfe/status"), null, 2) }] };
|
|
182
356
|
case "get_authorized_points_of_sale":
|
|
183
357
|
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("GET", "/wsfe/points-of-sale"), null, 2) }] };
|
|
358
|
+
case "create_invoice_batch": {
|
|
359
|
+
const payload = {
|
|
360
|
+
point_of_sale: args?.point_of_sale,
|
|
361
|
+
invoice_type: args?.invoice_type,
|
|
362
|
+
invoices: args?.invoices,
|
|
363
|
+
};
|
|
364
|
+
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("POST", "/wsfe/invoices/batch", payload), null, 2) }] };
|
|
365
|
+
}
|
|
366
|
+
case "create_credit_note": {
|
|
367
|
+
const payload = {
|
|
368
|
+
point_of_sale: args?.point_of_sale,
|
|
369
|
+
note_type: args?.note_type,
|
|
370
|
+
concept: args?.concept,
|
|
371
|
+
doc_type: args?.doc_type,
|
|
372
|
+
doc_number: args?.doc_number,
|
|
373
|
+
amount_total: args?.amount_total,
|
|
374
|
+
related_invoice: args?.related_invoice,
|
|
375
|
+
};
|
|
376
|
+
if (args?.amount_net)
|
|
377
|
+
payload.amount_net = args.amount_net;
|
|
378
|
+
if (args?.amount_iva)
|
|
379
|
+
payload.amount_iva = args.amount_iva;
|
|
380
|
+
if (args?.currency)
|
|
381
|
+
payload.currency = args.currency;
|
|
382
|
+
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("POST", "/wsfe/credit-notes", payload), null, 2) }] };
|
|
383
|
+
}
|
|
384
|
+
case "create_debit_note": {
|
|
385
|
+
const payload = {
|
|
386
|
+
point_of_sale: args?.point_of_sale,
|
|
387
|
+
note_type: args?.note_type,
|
|
388
|
+
concept: args?.concept,
|
|
389
|
+
doc_type: args?.doc_type,
|
|
390
|
+
doc_number: args?.doc_number,
|
|
391
|
+
amount_total: args?.amount_total,
|
|
392
|
+
related_invoice: args?.related_invoice,
|
|
393
|
+
};
|
|
394
|
+
if (args?.amount_net)
|
|
395
|
+
payload.amount_net = args.amount_net;
|
|
396
|
+
if (args?.amount_iva)
|
|
397
|
+
payload.amount_iva = args.amount_iva;
|
|
398
|
+
if (args?.currency)
|
|
399
|
+
payload.currency = args.currency;
|
|
400
|
+
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("POST", "/wsfe/debit-notes", payload), null, 2) }] };
|
|
401
|
+
}
|
|
402
|
+
case "cancel_invoice": {
|
|
403
|
+
const payload = {
|
|
404
|
+
point_of_sale: args?.point_of_sale,
|
|
405
|
+
invoice_type: args?.invoice_type,
|
|
406
|
+
invoice_number: args?.invoice_number,
|
|
407
|
+
};
|
|
408
|
+
if (args?.reason)
|
|
409
|
+
payload.reason = args.reason;
|
|
410
|
+
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("POST", "/wsfe/cancel", payload), null, 2) }] };
|
|
411
|
+
}
|
|
412
|
+
case "get_invoice_total_x_request":
|
|
413
|
+
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("GET", "/wsfe/total-x-request"), null, 2) }] };
|
|
414
|
+
case "list_concept_types":
|
|
415
|
+
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("GET", "/wsfe/concept-types"), null, 2) }] };
|
|
416
|
+
case "list_doc_types":
|
|
417
|
+
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("GET", "/wsfe/doc-types"), null, 2) }] };
|
|
418
|
+
case "list_iva_types":
|
|
419
|
+
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("GET", "/wsfe/iva-types"), null, 2) }] };
|
|
420
|
+
case "list_currency_types":
|
|
421
|
+
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("GET", "/wsfe/currency-types"), null, 2) }] };
|
|
422
|
+
case "get_currency_rate": {
|
|
423
|
+
const qs = args?.date ? `?date=${encodeURIComponent(String(args.date))}` : "";
|
|
424
|
+
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("GET", `/wsfe/currency-rate/${encodeURIComponent(String(args?.currency))}${qs}`), null, 2) }] };
|
|
425
|
+
}
|
|
426
|
+
case "lookup_taxpayer": {
|
|
427
|
+
const scope = args?.scope || "A5";
|
|
428
|
+
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("GET", `/padron/${encodeURIComponent(scope)}/${encodeURIComponent(String(args?.cuit))}`), null, 2) }] };
|
|
429
|
+
}
|
|
430
|
+
case "get_registration_certificate":
|
|
431
|
+
return { content: [{ type: "text", text: JSON.stringify(await afipRequest("GET", `/padron/constancia/${encodeURIComponent(String(args?.cuit))}`), null, 2) }] };
|
|
184
432
|
default:
|
|
185
433
|
return { content: [{ type: "text", text: `Unknown tool: ${name}` }], isError: true };
|
|
186
434
|
}
|
|
@@ -207,7 +455,7 @@ async function main() {
|
|
|
207
455
|
const t = new StreamableHTTPServerTransport({ sessionIdGenerator: () => randomUUID(), onsessioninitialized: (id) => { transports.set(id, t); } });
|
|
208
456
|
t.onclose = () => { if (t.sessionId)
|
|
209
457
|
transports.delete(t.sessionId); };
|
|
210
|
-
const s = new Server({ name: "mcp-afip", version: "0.
|
|
458
|
+
const s = new Server({ name: "mcp-afip", version: "0.2.0-alpha.2" }, { capabilities: { tools: {} } });
|
|
211
459
|
server._requestHandlers.forEach((v, k) => s._requestHandlers.set(k, v));
|
|
212
460
|
server._notificationHandlers?.forEach((v, k) => s._notificationHandlers.set(k, v));
|
|
213
461
|
await s.connect(t);
|
package/package.json
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codespar/mcp-afip",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP server for AFIP
|
|
3
|
+
"version": "0.2.0-alpha.2",
|
|
4
|
+
"description": "MCP server for AFIP \u2014 Argentine tax authority, electronic invoicing (Factura Electr\u00f3nica)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"bin": {
|
|
8
8
|
"mcp-afip": "dist/index.js"
|
|
9
9
|
},
|
|
10
|
-
"files": [
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
11
13
|
"scripts": {
|
|
12
14
|
"build": "tsc",
|
|
13
15
|
"start": "node dist/index.js"
|
|
@@ -20,6 +22,13 @@
|
|
|
20
22
|
"typescript": "^5.8.0"
|
|
21
23
|
},
|
|
22
24
|
"license": "MIT",
|
|
23
|
-
"keywords": [
|
|
25
|
+
"keywords": [
|
|
26
|
+
"afip",
|
|
27
|
+
"tax",
|
|
28
|
+
"argentina",
|
|
29
|
+
"factura-electronica",
|
|
30
|
+
"cae",
|
|
31
|
+
"mcp"
|
|
32
|
+
],
|
|
24
33
|
"mcpName": "io.github.codespar/mcp-afip"
|
|
25
34
|
}
|