@ar-agents/mcp 0.3.1 → 0.4.1
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/CHANGELOG.md +68 -0
- package/dist/index.cjs +43 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +31 -1
- package/dist/index.d.ts +31 -1
- package/dist/index.js +42 -4
- package/dist/index.js.map +1 -1
- package/package.json +8 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,73 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.4.1
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- Picks up `@ar-agents/mercadopago@0.7.0` — completeness máxima sobre MP. The MCP server now exposes **+25 new MP tools** (81 MP tools total) without any config changes. Highlights:
|
|
8
|
+
- Customer + Card CRUD completion (4 tools)
|
|
9
|
+
- Subscription/Plan/Refund/Preference extensions (5 tools)
|
|
10
|
+
- Merchant Orders category (3 tools)
|
|
11
|
+
- Stores + POS CRUD completion (6 tools)
|
|
12
|
+
- Bank Accounts (2 tools)
|
|
13
|
+
- Point Devices físicos — terminal hardware (5 tools)
|
|
14
|
+
- Pure helpers: `compute_marketplace_fee`, `explain_payment_status` (2 tools)
|
|
15
|
+
|
|
16
|
+
Total tool count across the MCP server jumped from ~95 to **~120 tools** in one install.
|
|
17
|
+
|
|
18
|
+
## 0.4.0
|
|
19
|
+
|
|
20
|
+
### Minor Changes
|
|
21
|
+
|
|
22
|
+
- MCP v0.4: ships `@ar-agents/shipping` as 7th tool registry.
|
|
23
|
+
|
|
24
|
+
The MCP server now exposes 7 packages:
|
|
25
|
+
|
|
26
|
+
- `@ar-agents/identity` (validate_cuit, lookup_cuit_afip)
|
|
27
|
+
- `@ar-agents/identity-attest` (4 attestation tools)
|
|
28
|
+
- `@ar-agents/mercadopago` (56 MP API tools, includes v0.6 account/balance/settlements/3DS/test-cards)
|
|
29
|
+
- `@ar-agents/whatsapp` (6 messaging tools)
|
|
30
|
+
- `@ar-agents/banking` (5 CBU/BCRA tools)
|
|
31
|
+
- `@ar-agents/facturacion` (10 WSFE tools)
|
|
32
|
+
- **NEW: `@ar-agents/shipping` (6 tools — Andreani/OCA/Correo)**
|
|
33
|
+
|
|
34
|
+
Carriers auto-detect from env vars:
|
|
35
|
+
|
|
36
|
+
- Andreani: `ANDREANI_USERNAME` + `ANDREANI_PASSWORD` + `ANDREANI_CLIENT_NUMBER` (+ `ANDREANI_ENV`)
|
|
37
|
+
- OCA: `OCA_CUIT` + `OCA_OPERATIVA`
|
|
38
|
+
- Correo Argentino: auto-wired (no creds needed). Set `AR_AGENTS_CORREO_DISABLED=1` to opt out.
|
|
39
|
+
- `SHIPPING_DEFAULT_CARRIER` for the default when agent doesn't specify.
|
|
40
|
+
|
|
41
|
+
Server version bumped to 0.4.0 in the MCP handshake.
|
|
42
|
+
|
|
43
|
+
## 0.3.2
|
|
44
|
+
|
|
45
|
+
### Patch Changes
|
|
46
|
+
|
|
47
|
+
- MP v0.6: account/balance + settlements + 3DS analyzer + test cards. **+6 tools (56 total)**.
|
|
48
|
+
|
|
49
|
+
**Account / Balance / Settlements (4 tools)**:
|
|
50
|
+
|
|
51
|
+
- `get_account_balance` — current MP wallet `{ available, unavailable, total, currency_id }`. Per-seller in marketplace setups.
|
|
52
|
+
- `list_account_movements({ from?, to?, limit?, offset? })` — wallet movement log (incoming payments, refunds, holdings, transfers).
|
|
53
|
+
- `list_settlements({ from?, to?, status? })` — `release_money` transfers from MP wallet → registered CBU.
|
|
54
|
+
- `get_settlement(id)` — single settlement detail with bank_account info.
|
|
55
|
+
|
|
56
|
+
**3DS analyzer (1 tool + 1 helper)**:
|
|
57
|
+
|
|
58
|
+
- `analyze_payment_3ds(payment_id)` — fetches the Payment, derives `{ status: 'not_required'|'frictionless'|'challenge_required'|'rejected'|'unknown', mode, challengeUrl, description }`. When `challengeUrl !== null`, MUST redirect the buyer to complete authentication.
|
|
59
|
+
- `analyze3DS(payment)` exported as a pure helper for callers who already have a Payment object.
|
|
60
|
+
|
|
61
|
+
**Test cards (1 tool + helpers)**:
|
|
62
|
+
|
|
63
|
+
- `get_test_cards` — returns the official AR (MLA) sandbox cards: VISA/Mastercard/Amex credit + debit. Each has the "magic" holder names that route to specific status_detail (APRO, OTHE, CONT, FUND, CALL, SECU, EXPI, FORM).
|
|
64
|
+
- `TEST_CARDS_AR`, `TEST_PAYERS_AR`, `buildTestCardScenario(card, scenario, amount)` exported for direct use in test files.
|
|
65
|
+
|
|
66
|
+
**132 tests pass** (was 117; +15 v0.6 tests). publint clean. attw 🟢. 24.3 KB brotli'd (within 32 KB budget).
|
|
67
|
+
|
|
68
|
+
- Updated dependencies []:
|
|
69
|
+
- @ar-agents/mercadopago@0.6.0
|
|
70
|
+
|
|
3
71
|
## 0.3.1
|
|
4
72
|
|
|
5
73
|
### Patch Changes
|
package/dist/index.cjs
CHANGED
|
@@ -11,6 +11,7 @@ var wsaa = require('@ar-agents/identity/wsaa');
|
|
|
11
11
|
var identityAttest = require('@ar-agents/identity-attest');
|
|
12
12
|
var whatsapp = require('@ar-agents/whatsapp');
|
|
13
13
|
var mercadopago = require('@ar-agents/mercadopago');
|
|
14
|
+
var shipping = require('@ar-agents/shipping');
|
|
14
15
|
|
|
15
16
|
// src/server.ts
|
|
16
17
|
function adaptToolSetToMcp(toolSet) {
|
|
@@ -248,10 +249,45 @@ function describeMercadoPagoConfig() {
|
|
|
248
249
|
const backUrl = process.env.MP_BACK_URL?.trim();
|
|
249
250
|
return `${isTest ? "TEST" : "PROD"} mode${backUrl ? ` \xB7 back_url=${backUrl}` : " \xB7 using default back_url"}`;
|
|
250
251
|
}
|
|
252
|
+
function buildShippingTools() {
|
|
253
|
+
const adapters = {};
|
|
254
|
+
const andreaniUser = process.env.ANDREANI_USERNAME?.trim();
|
|
255
|
+
const andreaniPass = process.env.ANDREANI_PASSWORD?.trim();
|
|
256
|
+
const andreaniClient = process.env.ANDREANI_CLIENT_NUMBER?.trim();
|
|
257
|
+
if (andreaniUser && andreaniPass && andreaniClient) {
|
|
258
|
+
adapters.andreani = new shipping.AndreaniAdapter({
|
|
259
|
+
username: andreaniUser,
|
|
260
|
+
password: andreaniPass,
|
|
261
|
+
clientNumber: andreaniClient,
|
|
262
|
+
env: process.env.ANDREANI_ENV?.trim() ?? "prod"
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
const ocaCuit = process.env.OCA_CUIT?.trim();
|
|
266
|
+
const ocaOperativa = process.env.OCA_OPERATIVA?.trim();
|
|
267
|
+
if (ocaCuit && ocaOperativa) {
|
|
268
|
+
adapters.oca = new shipping.OcaAdapter({ cuit: ocaCuit, operativa: ocaOperativa });
|
|
269
|
+
}
|
|
270
|
+
if (process.env.AR_AGENTS_CORREO_DISABLED?.trim() !== "1") {
|
|
271
|
+
adapters.correo_argentino = new shipping.CorreoAdapter();
|
|
272
|
+
}
|
|
273
|
+
const defaultCarrier = process.env.SHIPPING_DEFAULT_CARRIER?.trim();
|
|
274
|
+
return shipping.shippingTools({
|
|
275
|
+
adapters,
|
|
276
|
+
...defaultCarrier ? { defaultCarrier } : {}
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
function describeShippingConfig() {
|
|
280
|
+
const enabled = [];
|
|
281
|
+
if (process.env.ANDREANI_USERNAME?.trim()) enabled.push("andreani");
|
|
282
|
+
if (process.env.OCA_CUIT?.trim()) enabled.push("oca");
|
|
283
|
+
if (process.env.AR_AGENTS_CORREO_DISABLED?.trim() !== "1") enabled.push("correo_argentino");
|
|
284
|
+
if (enabled.length === 0) return "no carriers configurados";
|
|
285
|
+
return `carriers activos: ${enabled.join(", ")}`;
|
|
286
|
+
}
|
|
251
287
|
|
|
252
288
|
// src/server.ts
|
|
253
289
|
var SERVER_NAME = "ar-agents";
|
|
254
|
-
var SERVER_VERSION = "0.
|
|
290
|
+
var SERVER_VERSION = "0.4.0";
|
|
255
291
|
async function createServer() {
|
|
256
292
|
const adapter = combineToolSets([
|
|
257
293
|
buildIdentityTools(),
|
|
@@ -259,7 +295,8 @@ async function createServer() {
|
|
|
259
295
|
buildWhatsAppTools(),
|
|
260
296
|
buildIdentityAttestTools(),
|
|
261
297
|
buildBankingTools(),
|
|
262
|
-
buildFacturacionTools()
|
|
298
|
+
buildFacturacionTools(),
|
|
299
|
+
buildShippingTools()
|
|
263
300
|
]);
|
|
264
301
|
const summary = [
|
|
265
302
|
`${SERVER_NAME}@${SERVER_VERSION} starting with ${adapter.tools.length} tools registered:`,
|
|
@@ -268,7 +305,8 @@ async function createServer() {
|
|
|
268
305
|
` whatsapp \u2192 ${describeWhatsAppConfig()}`,
|
|
269
306
|
` identity-attest \u2192 ${describeIdentityAttestConfig()}`,
|
|
270
307
|
` banking \u2192 ${describeBankingConfig()}`,
|
|
271
|
-
` facturacion \u2192 ${describeFacturacionConfig()}
|
|
308
|
+
` facturacion \u2192 ${describeFacturacionConfig()}`,
|
|
309
|
+
` shipping \u2192 ${describeShippingConfig()}`
|
|
272
310
|
];
|
|
273
311
|
const server = new index_js.Server(
|
|
274
312
|
{ name: SERVER_NAME, version: SERVER_VERSION },
|
|
@@ -308,6 +346,7 @@ exports.buildFacturacionTools = buildFacturacionTools;
|
|
|
308
346
|
exports.buildIdentityAttestTools = buildIdentityAttestTools;
|
|
309
347
|
exports.buildIdentityTools = buildIdentityTools;
|
|
310
348
|
exports.buildMercadoPagoTools = buildMercadoPagoTools;
|
|
349
|
+
exports.buildShippingTools = buildShippingTools;
|
|
311
350
|
exports.buildWhatsAppTools = buildWhatsAppTools;
|
|
312
351
|
exports.combineToolSets = combineToolSets;
|
|
313
352
|
exports.createServer = createServer;
|
|
@@ -316,6 +355,7 @@ exports.describeFacturacionConfig = describeFacturacionConfig;
|
|
|
316
355
|
exports.describeIdentityAttestConfig = describeIdentityAttestConfig;
|
|
317
356
|
exports.describeIdentityConfig = describeIdentityConfig;
|
|
318
357
|
exports.describeMercadoPagoConfig = describeMercadoPagoConfig;
|
|
358
|
+
exports.describeShippingConfig = describeShippingConfig;
|
|
319
359
|
exports.describeWhatsAppConfig = describeWhatsAppConfig;
|
|
320
360
|
exports.getWhatsAppClient = getWhatsAppClient;
|
|
321
361
|
exports.startStdio = startStdio;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapter.ts","../src/registries/banking.ts","../src/registries/facturacion.ts","../src/registries/identity.ts","../src/registries/whatsapp.ts","../src/registries/identity-attest.ts","../src/registries/mercadopago.ts","../src/server.ts"],"names":["z","bankingTools","BcraPublicApiAdapter","facturacionTools","WsfeClient","identityTools","WsaaWscdcAfipPadronAdapter","whatsappTools","WhatsAppClient","WhatsAppOtpAdapter","EmailMagicLinkAdapter","AttestationClient","identityAttestTools","MercadoPagoClient","mercadoPagoTools","InMemoryStateAdapter","Server","ListToolsRequestSchema","CallToolRequestSchema","StdioServerTransport"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ToolSet } from \"ai\";\nimport { z } from \"zod\";\n\n/**\n * Convert a Vercel AI SDK ToolSet to MCP-compatible tool definitions.\n *\n * Vercel AI SDK's `tool()` shape:\n * { description, inputSchema: ZodSchema, execute: (args) => result }\n *\n * MCP's tool shape:\n * { name, description, inputSchema: JSONSchema }\n * + a separate handler that takes (name, args) and returns the result\n */\n\nexport interface McpTool {\n name: string;\n description: string;\n inputSchema: object; // JSON Schema\n}\n\nexport interface McpAdapter {\n /** All MCP tool definitions (for ListTools response). */\n tools: McpTool[];\n /** Handler for CallTool — looks up the original Vercel AI SDK tool and runs execute. */\n call: (name: string, args: unknown) => Promise<unknown>;\n}\n\n/**\n * Bridge a Vercel AI SDK ToolSet → MCP tools + dispatcher.\n *\n * Throws on unknown tool name or if execute is missing (safety: every Vercel\n * AI SDK tool ships with `execute` for server-side flows, which is what\n * MCP needs).\n */\nexport function adaptToolSetToMcp(toolSet: ToolSet): McpAdapter {\n const tools: McpTool[] = [];\n const lookup = new Map<string, (args: unknown) => Promise<unknown>>();\n\n for (const [name, tool] of Object.entries(toolSet)) {\n if (!tool || typeof tool !== \"object\") continue;\n const description =\n \"description\" in tool && typeof tool.description === \"string\" ? tool.description : \"\";\n const inputSchema =\n \"inputSchema\" in tool && tool.inputSchema\n ? (z.toJSONSchema(tool.inputSchema as z.ZodType) as object)\n : { type: \"object\", properties: {}, additionalProperties: false };\n\n tools.push({ name, description, inputSchema });\n\n const exec = \"execute\" in tool ? (tool.execute as (args: unknown) => Promise<unknown>) : null;\n if (!exec) {\n // Server-side execution required for MCP; skip tools without execute.\n continue;\n }\n lookup.set(name, exec);\n }\n\n return {\n tools,\n call: async (name, args) => {\n const fn = lookup.get(name);\n if (!fn) {\n throw new Error(`Tool \"${name}\" not found or has no execute fn (MCP requires server-side tools).`);\n }\n return fn(args);\n },\n };\n}\n\n/**\n * Combine multiple Vercel AI SDK ToolSets into a single McpAdapter. Tool\n * name collisions throw at adapter-build time.\n */\nexport function combineToolSets(toolSets: Array<ToolSet | null>): McpAdapter {\n const tools: McpTool[] = [];\n const lookup = new Map<string, (args: unknown) => Promise<unknown>>();\n const seen = new Set<string>();\n\n for (const ts of toolSets) {\n if (!ts) continue;\n const adapter = adaptToolSetToMcp(ts);\n for (const tool of adapter.tools) {\n if (seen.has(tool.name)) {\n throw new Error(\n `Tool name collision: \"${tool.name}\" appears in multiple registered tool sets. Rename one or skip a registry.`,\n );\n }\n seen.add(tool.name);\n tools.push(tool);\n // Bind this specific tool's call through the source adapter\n const sourceAdapter = adapter;\n const toolName = tool.name;\n lookup.set(toolName, (args: unknown) => sourceAdapter.call(toolName, args));\n }\n }\n\n return {\n tools,\n call: async (name, args) => {\n const fn = lookup.get(name);\n if (!fn) throw new Error(`Tool \"${name}\" not found in combined set.`);\n return fn(args);\n },\n };\n}\n","import {\n bankingTools,\n BcraPublicApiAdapter,\n type BcraDeudaAdapter,\n} from \"@ar-agents/banking\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/banking tool set.\n *\n * Pure-algorithm tools (validate_cbu, lookup_bank_by_code, list_banks,\n * list_psps) are ALWAYS available — no env vars required.\n *\n * The BCRA Central de Deudores tool is wired to `BcraPublicApiAdapter`\n * by default (BCRA's public REST API needs no auth). To opt out, set\n * `AR_AGENTS_BCRA_DISABLED=1` in env — the tool then returns\n * `{ available: false, error: \"<setup instructions>\" }`.\n */\nexport function buildBankingTools(): ToolSet {\n const bcra = buildBcraAdapter();\n return bankingTools(bcra ? { bcra } : {}) as ToolSet;\n}\n\nfunction buildBcraAdapter(): BcraDeudaAdapter | undefined {\n if (process.env.AR_AGENTS_BCRA_DISABLED?.trim() === \"1\") return undefined;\n const timeout = Number(process.env.BCRA_TIMEOUT_MS?.trim() ?? \"30000\");\n const retries = Number(process.env.BCRA_MAX_RETRIES?.trim() ?? \"1\");\n return new BcraPublicApiAdapter({\n requestTimeoutMs: Number.isFinite(timeout) ? timeout : 30_000,\n maxRetries: Number.isFinite(retries) ? retries : 1,\n });\n}\n\nexport function describeBankingConfig(): string {\n const bcraDisabled = process.env.AR_AGENTS_BCRA_DISABLED?.trim() === \"1\";\n return bcraDisabled\n ? \"validate_cbu, lookup_bank_by_code, list_banks, list_psps (BCRA disabled)\"\n : \"validate_cbu, lookup_bank_by_code, list_banks, list_psps, lookup_credit_situation (BCRA public API)\";\n}\n","import { facturacionTools, WsfeClient } from \"@ar-agents/facturacion\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/facturacion tool set from environment variables.\n *\n * AFIP cert + key + CUIT required (same as @ar-agents/identity, but the\n * service must be authorized for `wsfe` in addition to whatever padron\n * service identity uses). When the env vars are missing, the tools return\n * `{ available: false, error: <setup instructions> }` instead of crashing —\n * MCP host can show the user what to set.\n *\n * # Env vars\n *\n * - `AFIP_CUIT_REPRESENTADO` (required)\n * - `AFIP_CERT_PEM` + `AFIP_KEY_PEM` (preferred for serverless / MCP) OR\n * - `AFIP_CERT_PATH` + `AFIP_KEY_PATH` (for local dev)\n * - `AFIP_ENV` — \"homo\" | \"prod\" (default \"prod\")\n * - `WSFE_DEFAULT_PTOVTA` — default punto de venta (optional, recommended for\n * single-PtoVta SaaS so agents don't have to remember it)\n * - `WSFE_TIMEOUT_MS` — default 30000\n * - `WSFE_MAX_RETRIES` — default 1\n */\nexport function buildFacturacionTools(): ToolSet {\n const wsfe = buildWsfeClient();\n const defaultPtoVta = Number(\n process.env.WSFE_DEFAULT_PTOVTA?.trim() ?? \"0\",\n );\n const opts: Parameters<typeof facturacionTools>[0] = {};\n if (wsfe) opts.wsfe = wsfe;\n if (Number.isFinite(defaultPtoVta) && defaultPtoVta > 0)\n opts.defaultPtoVta = defaultPtoVta;\n return facturacionTools(opts) as ToolSet;\n}\n\nfunction buildWsfeClient(): WsfeClient | undefined {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return undefined;\n const env = (process.env.AFIP_ENV?.trim() ?? \"prod\") as \"homo\" | \"prod\";\n const timeout = Number(process.env.WSFE_TIMEOUT_MS?.trim() ?? \"30000\");\n const retries = Number(process.env.WSFE_MAX_RETRIES?.trim() ?? \"1\");\n const certPem = process.env.AFIP_CERT_PEM;\n const keyPem = process.env.AFIP_KEY_PEM;\n if (certPem && keyPem) {\n return new WsfeClient({\n certPem,\n keyPem,\n cuit,\n env,\n requestTimeoutMs: Number.isFinite(timeout) ? timeout : 30_000,\n maxRetries: Number.isFinite(retries) ? retries : 1,\n });\n }\n const certPath = process.env.AFIP_CERT_PATH?.trim();\n const keyPath = process.env.AFIP_KEY_PATH?.trim();\n if (certPath && keyPath) {\n return new WsfeClient({\n certPath,\n keyPath,\n cuit,\n env,\n requestTimeoutMs: Number.isFinite(timeout) ? timeout : 30_000,\n maxRetries: Number.isFinite(retries) ? retries : 1,\n });\n }\n return undefined;\n}\n\nexport function describeFacturacionConfig(): string {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return \"no configurado (faltan AFIP_CUIT_REPRESENTADO + cert)\";\n const certConfigured =\n !!process.env.AFIP_CERT_PEM || !!process.env.AFIP_CERT_PATH;\n if (!certConfigured) return \"no configurado (falta AFIP_CERT_PEM o AFIP_CERT_PATH)\";\n const ptovta = process.env.WSFE_DEFAULT_PTOVTA?.trim();\n return `WSFE habilitado (CUIT ${cuit}${ptovta ? `, PtoVta ${ptovta}` : \"\"})`;\n}\n","import { identityTools, type AfipPadronAdapter } from \"@ar-agents/identity\";\nimport { WsaaWscdcAfipPadronAdapter } from \"@ar-agents/identity/wsaa\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/identity tool set from environment variables.\n * Returns null when AFIP env vars are missing (the algorithm-only `validate_cuit`\n * is always available; lookup_cuit_afip falls back to UnconfiguredAfipPadronAdapter).\n */\nexport function buildIdentityTools(): ToolSet {\n const afip = buildAfipAdapter();\n return identityTools(afip ? { afip } : {}) as ToolSet;\n}\n\nfunction buildAfipAdapter(): AfipPadronAdapter | undefined {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return undefined;\n const env = (process.env.AFIP_ENV?.trim() ?? \"prod\") as \"homo\" | \"prod\";\n const certPem = process.env.AFIP_CERT_PEM;\n const keyPem = process.env.AFIP_KEY_PEM;\n if (certPem && keyPem) {\n return new WsaaWscdcAfipPadronAdapter({ certPem, keyPem, cuitRepresentado: cuit, env });\n }\n const certPath = process.env.AFIP_CERT_PATH?.trim();\n const keyPath = process.env.AFIP_KEY_PATH?.trim();\n if (certPath && keyPath) {\n return new WsaaWscdcAfipPadronAdapter({ certPath, keyPath, cuitRepresentado: cuit, env });\n }\n return undefined;\n}\n\nexport function describeIdentityConfig(): string {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return \"validate_cuit only (no AFIP cert configured)\";\n const certConfigured =\n !!process.env.AFIP_CERT_PEM || !!process.env.AFIP_CERT_PATH;\n return certConfigured\n ? `validate_cuit + lookup_cuit_afip (AFIP cert configured for CUIT ${cuit})`\n : `validate_cuit only (cert not configured)`;\n}\n","import { WhatsAppClient, whatsappTools } from \"@ar-agents/whatsapp\";\nimport type { ToolSet } from \"ai\";\n\nexport function buildWhatsAppTools(): ToolSet | null {\n const accessToken = process.env.WA_ACCESS_TOKEN?.trim();\n const phoneNumberId = process.env.WA_PHONE_NUMBER_ID?.trim();\n if (!accessToken || !phoneNumberId) return null;\n return whatsappTools(new WhatsAppClient({ accessToken, phoneNumberId })) as ToolSet;\n}\n\nexport function describeWhatsAppConfig(): string {\n const accessToken = process.env.WA_ACCESS_TOKEN?.trim();\n const phoneNumberId = process.env.WA_PHONE_NUMBER_ID?.trim();\n if (!accessToken || !phoneNumberId)\n return \"not configured (set WA_ACCESS_TOKEN + WA_PHONE_NUMBER_ID)\";\n return `phone_number_id=${phoneNumberId.slice(0, 6)}…`;\n}\n\n/** Returns the configured client, used by identity-attest's WhatsAppOtpAdapter. */\nexport function getWhatsAppClient(): WhatsAppClient | null {\n const accessToken = process.env.WA_ACCESS_TOKEN?.trim();\n const phoneNumberId = process.env.WA_PHONE_NUMBER_ID?.trim();\n if (!accessToken || !phoneNumberId) return null;\n return new WhatsAppClient({ accessToken, phoneNumberId });\n}\n","import {\n AttestationClient,\n identityAttestTools,\n WhatsAppOtpAdapter,\n EmailMagicLinkAdapter,\n type EmailSender,\n} from \"@ar-agents/identity-attest\";\nimport type { ToolSet } from \"ai\";\nimport { getWhatsAppClient } from \"./whatsapp\";\n\n/**\n * Build @ar-agents/identity-attest tools if ATTEST_SIGNING_SECRET is set\n * and at least one adapter can be configured (WhatsApp client present\n * OR email sender configured via SMTP_URL / RESEND_API_KEY).\n */\nexport function buildIdentityAttestTools(): ToolSet | null {\n const signingSecret = process.env.ATTEST_SIGNING_SECRET?.trim();\n if (!signingSecret) return null;\n\n const adapters: Record<string, ConstructorParameters<typeof AttestationClient>[0][\"adapters\"][string]> = {};\n\n // WhatsApp OTP — requires WhatsApp client\n const wa = getWhatsAppClient();\n if (wa) {\n adapters[\"whatsapp_otp\"] = new WhatsAppOtpAdapter({\n whatsappClient: wa,\n businessName: process.env.BUSINESS_NAME?.trim() ?? \"this app\",\n });\n }\n\n // Email magic-link — requires Resend API key + callback URL\n const resendKey = process.env.RESEND_API_KEY?.trim();\n const callbackUrl = process.env.ATTEST_CALLBACK_URL?.trim();\n if (resendKey && callbackUrl) {\n const fromEmail = process.env.ATTEST_FROM_EMAIL?.trim() ?? \"noreply@example.com\";\n const sender: EmailSender = async ({ to, subject, html, text }) => {\n const res = await fetch(\"https://api.resend.com/emails\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${resendKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ from: fromEmail, to, subject, html, text }),\n });\n if (!res.ok) {\n throw new Error(`Resend send failed: ${res.status} ${await res.text()}`);\n }\n };\n adapters[\"email_magic_link\"] = new EmailMagicLinkAdapter({\n sender,\n callbackBaseUrl: callbackUrl,\n businessName: process.env.BUSINESS_NAME?.trim() ?? \"this app\",\n });\n }\n\n if (Object.keys(adapters).length === 0) return null;\n\n const client = new AttestationClient({ signingSecret, adapters });\n return identityAttestTools(client) as ToolSet;\n}\n\nexport function describeIdentityAttestConfig(): string {\n const signingSecret = process.env.ATTEST_SIGNING_SECRET?.trim();\n if (!signingSecret) return \"not configured (set ATTEST_SIGNING_SECRET)\";\n const adapters: string[] = [];\n if (getWhatsAppClient()) adapters.push(\"whatsapp_otp\");\n if (process.env.RESEND_API_KEY?.trim() && process.env.ATTEST_CALLBACK_URL?.trim())\n adapters.push(\"email_magic_link\");\n if (adapters.length === 0)\n return \"configured but no adapters (set WhatsApp creds and/or RESEND_API_KEY + ATTEST_CALLBACK_URL)\";\n return adapters.join(\", \");\n}\n","import {\n InMemoryStateAdapter,\n MercadoPagoClient,\n mercadoPagoTools,\n} from \"@ar-agents/mercadopago\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build @ar-agents/mercadopago tools if MP_ACCESS_TOKEN is set.\n * Returns null when not configured.\n */\nexport function buildMercadoPagoTools(): ToolSet | null {\n const accessToken = process.env.MP_ACCESS_TOKEN?.trim();\n if (!accessToken) return null;\n const client = new MercadoPagoClient({ accessToken });\n const backUrl = process.env.MP_BACK_URL?.trim() ?? \"https://example.com/done\";\n return mercadoPagoTools(client, {\n state: new InMemoryStateAdapter(),\n backUrl,\n }) as ToolSet;\n}\n\nexport function describeMercadoPagoConfig(): string {\n const token = process.env.MP_ACCESS_TOKEN?.trim();\n if (!token) return \"not configured (set MP_ACCESS_TOKEN)\";\n const isTest = token.startsWith(\"TEST-\");\n const backUrl = process.env.MP_BACK_URL?.trim();\n return `${isTest ? \"TEST\" : \"PROD\"} mode${backUrl ? ` · back_url=${backUrl}` : \" · using default back_url\"}`;\n}\n","import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { combineToolSets } from \"./adapter\";\nimport { buildBankingTools, describeBankingConfig } from \"./registries/banking\";\nimport {\n buildFacturacionTools,\n describeFacturacionConfig,\n} from \"./registries/facturacion\";\nimport { buildIdentityTools, describeIdentityConfig } from \"./registries/identity\";\nimport {\n buildIdentityAttestTools,\n describeIdentityAttestConfig,\n} from \"./registries/identity-attest\";\nimport {\n buildMercadoPagoTools,\n describeMercadoPagoConfig,\n} from \"./registries/mercadopago\";\nimport { buildWhatsAppTools, describeWhatsAppConfig } from \"./registries/whatsapp\";\n\nconst SERVER_NAME = \"ar-agents\";\nconst SERVER_VERSION = \"0.3.0\";\n\n/**\n * Build the @ar-agents/mcp server. Inspects environment variables to decide\n * which package's tools to register. Always registers @ar-agents/identity\n * (algorithm-only `validate_cuit` works without any env vars).\n */\nexport async function createServer(): Promise<{ server: Server; summary: string[] }> {\n const adapter = combineToolSets([\n buildIdentityTools(),\n buildMercadoPagoTools(),\n buildWhatsAppTools(),\n buildIdentityAttestTools(),\n buildBankingTools(),\n buildFacturacionTools(),\n ]);\n\n const summary = [\n `${SERVER_NAME}@${SERVER_VERSION} starting with ${adapter.tools.length} tools registered:`,\n ` identity → ${describeIdentityConfig()}`,\n ` mercadopago → ${describeMercadoPagoConfig()}`,\n ` whatsapp → ${describeWhatsAppConfig()}`,\n ` identity-attest → ${describeIdentityAttestConfig()}`,\n ` banking → ${describeBankingConfig()}`,\n ` facturacion → ${describeFacturacionConfig()}`,\n ];\n\n const server = new Server(\n { name: SERVER_NAME, version: SERVER_VERSION },\n { capabilities: { tools: {} } },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapter.tools,\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n try {\n const result = await adapter.call(name, args ?? {});\n return {\n content: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return {\n content: [{ type: \"text\", text: `Error calling ${name}: ${msg}` }],\n isError: true,\n };\n }\n });\n\n return { server, summary };\n}\n\n/**\n * Start the MCP server over stdio. Called by the CLI binary.\n * Logs the registered-tools summary to stderr (stdout is reserved for MCP\n * protocol messages).\n */\nexport async function startStdio(): Promise<void> {\n const { server, summary } = await createServer();\n for (const line of summary) console.error(line);\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error(\"ar-agents MCP server connected via stdio\");\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/adapter.ts","../src/registries/banking.ts","../src/registries/facturacion.ts","../src/registries/identity.ts","../src/registries/whatsapp.ts","../src/registries/identity-attest.ts","../src/registries/mercadopago.ts","../src/registries/shipping.ts","../src/server.ts"],"names":["z","bankingTools","BcraPublicApiAdapter","facturacionTools","WsfeClient","identityTools","WsaaWscdcAfipPadronAdapter","whatsappTools","WhatsAppClient","WhatsAppOtpAdapter","EmailMagicLinkAdapter","AttestationClient","identityAttestTools","MercadoPagoClient","mercadoPagoTools","InMemoryStateAdapter","AndreaniAdapter","OcaAdapter","CorreoAdapter","shippingTools","Server","ListToolsRequestSchema","CallToolRequestSchema","StdioServerTransport"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ToolSet } from \"ai\";\nimport { z } from \"zod\";\n\n/**\n * Convert a Vercel AI SDK ToolSet to MCP-compatible tool definitions.\n *\n * Vercel AI SDK's `tool()` shape:\n * { description, inputSchema: ZodSchema, execute: (args) => result }\n *\n * MCP's tool shape:\n * { name, description, inputSchema: JSONSchema }\n * + a separate handler that takes (name, args) and returns the result\n */\n\nexport interface McpTool {\n name: string;\n description: string;\n inputSchema: object; // JSON Schema\n}\n\nexport interface McpAdapter {\n /** All MCP tool definitions (for ListTools response). */\n tools: McpTool[];\n /** Handler for CallTool — looks up the original Vercel AI SDK tool and runs execute. */\n call: (name: string, args: unknown) => Promise<unknown>;\n}\n\n/**\n * Bridge a Vercel AI SDK ToolSet → MCP tools + dispatcher.\n *\n * Throws on unknown tool name or if execute is missing (safety: every Vercel\n * AI SDK tool ships with `execute` for server-side flows, which is what\n * MCP needs).\n */\nexport function adaptToolSetToMcp(toolSet: ToolSet): McpAdapter {\n const tools: McpTool[] = [];\n const lookup = new Map<string, (args: unknown) => Promise<unknown>>();\n\n for (const [name, tool] of Object.entries(toolSet)) {\n if (!tool || typeof tool !== \"object\") continue;\n const description =\n \"description\" in tool && typeof tool.description === \"string\" ? tool.description : \"\";\n const inputSchema =\n \"inputSchema\" in tool && tool.inputSchema\n ? (z.toJSONSchema(tool.inputSchema as z.ZodType) as object)\n : { type: \"object\", properties: {}, additionalProperties: false };\n\n tools.push({ name, description, inputSchema });\n\n const exec = \"execute\" in tool ? (tool.execute as (args: unknown) => Promise<unknown>) : null;\n if (!exec) {\n // Server-side execution required for MCP; skip tools without execute.\n continue;\n }\n lookup.set(name, exec);\n }\n\n return {\n tools,\n call: async (name, args) => {\n const fn = lookup.get(name);\n if (!fn) {\n throw new Error(`Tool \"${name}\" not found or has no execute fn (MCP requires server-side tools).`);\n }\n return fn(args);\n },\n };\n}\n\n/**\n * Combine multiple Vercel AI SDK ToolSets into a single McpAdapter. Tool\n * name collisions throw at adapter-build time.\n */\nexport function combineToolSets(toolSets: Array<ToolSet | null>): McpAdapter {\n const tools: McpTool[] = [];\n const lookup = new Map<string, (args: unknown) => Promise<unknown>>();\n const seen = new Set<string>();\n\n for (const ts of toolSets) {\n if (!ts) continue;\n const adapter = adaptToolSetToMcp(ts);\n for (const tool of adapter.tools) {\n if (seen.has(tool.name)) {\n throw new Error(\n `Tool name collision: \"${tool.name}\" appears in multiple registered tool sets. Rename one or skip a registry.`,\n );\n }\n seen.add(tool.name);\n tools.push(tool);\n // Bind this specific tool's call through the source adapter\n const sourceAdapter = adapter;\n const toolName = tool.name;\n lookup.set(toolName, (args: unknown) => sourceAdapter.call(toolName, args));\n }\n }\n\n return {\n tools,\n call: async (name, args) => {\n const fn = lookup.get(name);\n if (!fn) throw new Error(`Tool \"${name}\" not found in combined set.`);\n return fn(args);\n },\n };\n}\n","import {\n bankingTools,\n BcraPublicApiAdapter,\n type BcraDeudaAdapter,\n} from \"@ar-agents/banking\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/banking tool set.\n *\n * Pure-algorithm tools (validate_cbu, lookup_bank_by_code, list_banks,\n * list_psps) are ALWAYS available — no env vars required.\n *\n * The BCRA Central de Deudores tool is wired to `BcraPublicApiAdapter`\n * by default (BCRA's public REST API needs no auth). To opt out, set\n * `AR_AGENTS_BCRA_DISABLED=1` in env — the tool then returns\n * `{ available: false, error: \"<setup instructions>\" }`.\n */\nexport function buildBankingTools(): ToolSet {\n const bcra = buildBcraAdapter();\n return bankingTools(bcra ? { bcra } : {}) as ToolSet;\n}\n\nfunction buildBcraAdapter(): BcraDeudaAdapter | undefined {\n if (process.env.AR_AGENTS_BCRA_DISABLED?.trim() === \"1\") return undefined;\n const timeout = Number(process.env.BCRA_TIMEOUT_MS?.trim() ?? \"30000\");\n const retries = Number(process.env.BCRA_MAX_RETRIES?.trim() ?? \"1\");\n return new BcraPublicApiAdapter({\n requestTimeoutMs: Number.isFinite(timeout) ? timeout : 30_000,\n maxRetries: Number.isFinite(retries) ? retries : 1,\n });\n}\n\nexport function describeBankingConfig(): string {\n const bcraDisabled = process.env.AR_AGENTS_BCRA_DISABLED?.trim() === \"1\";\n return bcraDisabled\n ? \"validate_cbu, lookup_bank_by_code, list_banks, list_psps (BCRA disabled)\"\n : \"validate_cbu, lookup_bank_by_code, list_banks, list_psps, lookup_credit_situation (BCRA public API)\";\n}\n","import { facturacionTools, WsfeClient } from \"@ar-agents/facturacion\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/facturacion tool set from environment variables.\n *\n * AFIP cert + key + CUIT required (same as @ar-agents/identity, but the\n * service must be authorized for `wsfe` in addition to whatever padron\n * service identity uses). When the env vars are missing, the tools return\n * `{ available: false, error: <setup instructions> }` instead of crashing —\n * MCP host can show the user what to set.\n *\n * # Env vars\n *\n * - `AFIP_CUIT_REPRESENTADO` (required)\n * - `AFIP_CERT_PEM` + `AFIP_KEY_PEM` (preferred for serverless / MCP) OR\n * - `AFIP_CERT_PATH` + `AFIP_KEY_PATH` (for local dev)\n * - `AFIP_ENV` — \"homo\" | \"prod\" (default \"prod\")\n * - `WSFE_DEFAULT_PTOVTA` — default punto de venta (optional, recommended for\n * single-PtoVta SaaS so agents don't have to remember it)\n * - `WSFE_TIMEOUT_MS` — default 30000\n * - `WSFE_MAX_RETRIES` — default 1\n */\nexport function buildFacturacionTools(): ToolSet {\n const wsfe = buildWsfeClient();\n const defaultPtoVta = Number(\n process.env.WSFE_DEFAULT_PTOVTA?.trim() ?? \"0\",\n );\n const opts: Parameters<typeof facturacionTools>[0] = {};\n if (wsfe) opts.wsfe = wsfe;\n if (Number.isFinite(defaultPtoVta) && defaultPtoVta > 0)\n opts.defaultPtoVta = defaultPtoVta;\n return facturacionTools(opts) as ToolSet;\n}\n\nfunction buildWsfeClient(): WsfeClient | undefined {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return undefined;\n const env = (process.env.AFIP_ENV?.trim() ?? \"prod\") as \"homo\" | \"prod\";\n const timeout = Number(process.env.WSFE_TIMEOUT_MS?.trim() ?? \"30000\");\n const retries = Number(process.env.WSFE_MAX_RETRIES?.trim() ?? \"1\");\n const certPem = process.env.AFIP_CERT_PEM;\n const keyPem = process.env.AFIP_KEY_PEM;\n if (certPem && keyPem) {\n return new WsfeClient({\n certPem,\n keyPem,\n cuit,\n env,\n requestTimeoutMs: Number.isFinite(timeout) ? timeout : 30_000,\n maxRetries: Number.isFinite(retries) ? retries : 1,\n });\n }\n const certPath = process.env.AFIP_CERT_PATH?.trim();\n const keyPath = process.env.AFIP_KEY_PATH?.trim();\n if (certPath && keyPath) {\n return new WsfeClient({\n certPath,\n keyPath,\n cuit,\n env,\n requestTimeoutMs: Number.isFinite(timeout) ? timeout : 30_000,\n maxRetries: Number.isFinite(retries) ? retries : 1,\n });\n }\n return undefined;\n}\n\nexport function describeFacturacionConfig(): string {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return \"no configurado (faltan AFIP_CUIT_REPRESENTADO + cert)\";\n const certConfigured =\n !!process.env.AFIP_CERT_PEM || !!process.env.AFIP_CERT_PATH;\n if (!certConfigured) return \"no configurado (falta AFIP_CERT_PEM o AFIP_CERT_PATH)\";\n const ptovta = process.env.WSFE_DEFAULT_PTOVTA?.trim();\n return `WSFE habilitado (CUIT ${cuit}${ptovta ? `, PtoVta ${ptovta}` : \"\"})`;\n}\n","import { identityTools, type AfipPadronAdapter } from \"@ar-agents/identity\";\nimport { WsaaWscdcAfipPadronAdapter } from \"@ar-agents/identity/wsaa\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/identity tool set from environment variables.\n * Returns null when AFIP env vars are missing (the algorithm-only `validate_cuit`\n * is always available; lookup_cuit_afip falls back to UnconfiguredAfipPadronAdapter).\n */\nexport function buildIdentityTools(): ToolSet {\n const afip = buildAfipAdapter();\n return identityTools(afip ? { afip } : {}) as ToolSet;\n}\n\nfunction buildAfipAdapter(): AfipPadronAdapter | undefined {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return undefined;\n const env = (process.env.AFIP_ENV?.trim() ?? \"prod\") as \"homo\" | \"prod\";\n const certPem = process.env.AFIP_CERT_PEM;\n const keyPem = process.env.AFIP_KEY_PEM;\n if (certPem && keyPem) {\n return new WsaaWscdcAfipPadronAdapter({ certPem, keyPem, cuitRepresentado: cuit, env });\n }\n const certPath = process.env.AFIP_CERT_PATH?.trim();\n const keyPath = process.env.AFIP_KEY_PATH?.trim();\n if (certPath && keyPath) {\n return new WsaaWscdcAfipPadronAdapter({ certPath, keyPath, cuitRepresentado: cuit, env });\n }\n return undefined;\n}\n\nexport function describeIdentityConfig(): string {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return \"validate_cuit only (no AFIP cert configured)\";\n const certConfigured =\n !!process.env.AFIP_CERT_PEM || !!process.env.AFIP_CERT_PATH;\n return certConfigured\n ? `validate_cuit + lookup_cuit_afip (AFIP cert configured for CUIT ${cuit})`\n : `validate_cuit only (cert not configured)`;\n}\n","import { WhatsAppClient, whatsappTools } from \"@ar-agents/whatsapp\";\nimport type { ToolSet } from \"ai\";\n\nexport function buildWhatsAppTools(): ToolSet | null {\n const accessToken = process.env.WA_ACCESS_TOKEN?.trim();\n const phoneNumberId = process.env.WA_PHONE_NUMBER_ID?.trim();\n if (!accessToken || !phoneNumberId) return null;\n return whatsappTools(new WhatsAppClient({ accessToken, phoneNumberId })) as ToolSet;\n}\n\nexport function describeWhatsAppConfig(): string {\n const accessToken = process.env.WA_ACCESS_TOKEN?.trim();\n const phoneNumberId = process.env.WA_PHONE_NUMBER_ID?.trim();\n if (!accessToken || !phoneNumberId)\n return \"not configured (set WA_ACCESS_TOKEN + WA_PHONE_NUMBER_ID)\";\n return `phone_number_id=${phoneNumberId.slice(0, 6)}…`;\n}\n\n/** Returns the configured client, used by identity-attest's WhatsAppOtpAdapter. */\nexport function getWhatsAppClient(): WhatsAppClient | null {\n const accessToken = process.env.WA_ACCESS_TOKEN?.trim();\n const phoneNumberId = process.env.WA_PHONE_NUMBER_ID?.trim();\n if (!accessToken || !phoneNumberId) return null;\n return new WhatsAppClient({ accessToken, phoneNumberId });\n}\n","import {\n AttestationClient,\n identityAttestTools,\n WhatsAppOtpAdapter,\n EmailMagicLinkAdapter,\n type EmailSender,\n} from \"@ar-agents/identity-attest\";\nimport type { ToolSet } from \"ai\";\nimport { getWhatsAppClient } from \"./whatsapp\";\n\n/**\n * Build @ar-agents/identity-attest tools if ATTEST_SIGNING_SECRET is set\n * and at least one adapter can be configured (WhatsApp client present\n * OR email sender configured via SMTP_URL / RESEND_API_KEY).\n */\nexport function buildIdentityAttestTools(): ToolSet | null {\n const signingSecret = process.env.ATTEST_SIGNING_SECRET?.trim();\n if (!signingSecret) return null;\n\n const adapters: Record<string, ConstructorParameters<typeof AttestationClient>[0][\"adapters\"][string]> = {};\n\n // WhatsApp OTP — requires WhatsApp client\n const wa = getWhatsAppClient();\n if (wa) {\n adapters[\"whatsapp_otp\"] = new WhatsAppOtpAdapter({\n whatsappClient: wa,\n businessName: process.env.BUSINESS_NAME?.trim() ?? \"this app\",\n });\n }\n\n // Email magic-link — requires Resend API key + callback URL\n const resendKey = process.env.RESEND_API_KEY?.trim();\n const callbackUrl = process.env.ATTEST_CALLBACK_URL?.trim();\n if (resendKey && callbackUrl) {\n const fromEmail = process.env.ATTEST_FROM_EMAIL?.trim() ?? \"noreply@example.com\";\n const sender: EmailSender = async ({ to, subject, html, text }) => {\n const res = await fetch(\"https://api.resend.com/emails\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${resendKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ from: fromEmail, to, subject, html, text }),\n });\n if (!res.ok) {\n throw new Error(`Resend send failed: ${res.status} ${await res.text()}`);\n }\n };\n adapters[\"email_magic_link\"] = new EmailMagicLinkAdapter({\n sender,\n callbackBaseUrl: callbackUrl,\n businessName: process.env.BUSINESS_NAME?.trim() ?? \"this app\",\n });\n }\n\n if (Object.keys(adapters).length === 0) return null;\n\n const client = new AttestationClient({ signingSecret, adapters });\n return identityAttestTools(client) as ToolSet;\n}\n\nexport function describeIdentityAttestConfig(): string {\n const signingSecret = process.env.ATTEST_SIGNING_SECRET?.trim();\n if (!signingSecret) return \"not configured (set ATTEST_SIGNING_SECRET)\";\n const adapters: string[] = [];\n if (getWhatsAppClient()) adapters.push(\"whatsapp_otp\");\n if (process.env.RESEND_API_KEY?.trim() && process.env.ATTEST_CALLBACK_URL?.trim())\n adapters.push(\"email_magic_link\");\n if (adapters.length === 0)\n return \"configured but no adapters (set WhatsApp creds and/or RESEND_API_KEY + ATTEST_CALLBACK_URL)\";\n return adapters.join(\", \");\n}\n","import {\n InMemoryStateAdapter,\n MercadoPagoClient,\n mercadoPagoTools,\n} from \"@ar-agents/mercadopago\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build @ar-agents/mercadopago tools if MP_ACCESS_TOKEN is set.\n * Returns null when not configured.\n */\nexport function buildMercadoPagoTools(): ToolSet | null {\n const accessToken = process.env.MP_ACCESS_TOKEN?.trim();\n if (!accessToken) return null;\n const client = new MercadoPagoClient({ accessToken });\n const backUrl = process.env.MP_BACK_URL?.trim() ?? \"https://example.com/done\";\n return mercadoPagoTools(client, {\n state: new InMemoryStateAdapter(),\n backUrl,\n }) as ToolSet;\n}\n\nexport function describeMercadoPagoConfig(): string {\n const token = process.env.MP_ACCESS_TOKEN?.trim();\n if (!token) return \"not configured (set MP_ACCESS_TOKEN)\";\n const isTest = token.startsWith(\"TEST-\");\n const backUrl = process.env.MP_BACK_URL?.trim();\n return `${isTest ? \"TEST\" : \"PROD\"} mode${backUrl ? ` · back_url=${backUrl}` : \" · using default back_url\"}`;\n}\n","import {\n AndreaniAdapter,\n CorreoAdapter,\n OcaAdapter,\n shippingTools,\n type ShippingAdapter,\n} from \"@ar-agents/shipping\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/shipping tool set from environment variables.\n *\n * Each carrier is wired independently — set the env vars for whichever\n * carriers you have credentials for. Without any credentials, the tools\n * return `{ available: false, error }` instead of crashing.\n *\n * # Env vars\n *\n * **Andreani** (full REST API):\n * - `ANDREANI_USERNAME` (required)\n * - `ANDREANI_PASSWORD` (required)\n * - `ANDREANI_CLIENT_NUMBER` (required)\n * - `ANDREANI_ENV` (\"homo\" | \"prod\", default \"prod\")\n *\n * **OCA** (Tarifador only in v0.1):\n * - `OCA_CUIT` (required)\n * - `OCA_OPERATIVA` (required)\n *\n * **Correo Argentino** (public REST, no creds needed):\n * - Auto-wired (no env vars).\n * - Set `AR_AGENTS_CORREO_DISABLED=1` to opt out.\n *\n * **Common**:\n * - `SHIPPING_DEFAULT_CARRIER` (\"andreani\" | \"oca\" | \"correo_argentino\")\n * — when an agent doesn't specify a carrier, this is used.\n */\nexport function buildShippingTools(): ToolSet {\n const adapters: Partial<Record<\"andreani\" | \"oca\" | \"correo_argentino\", ShippingAdapter>> = {};\n\n const andreaniUser = process.env.ANDREANI_USERNAME?.trim();\n const andreaniPass = process.env.ANDREANI_PASSWORD?.trim();\n const andreaniClient = process.env.ANDREANI_CLIENT_NUMBER?.trim();\n if (andreaniUser && andreaniPass && andreaniClient) {\n adapters.andreani = new AndreaniAdapter({\n username: andreaniUser,\n password: andreaniPass,\n clientNumber: andreaniClient,\n env: (process.env.ANDREANI_ENV?.trim() ?? \"prod\") as \"homo\" | \"prod\",\n });\n }\n\n const ocaCuit = process.env.OCA_CUIT?.trim();\n const ocaOperativa = process.env.OCA_OPERATIVA?.trim();\n if (ocaCuit && ocaOperativa) {\n adapters.oca = new OcaAdapter({ cuit: ocaCuit, operativa: ocaOperativa });\n }\n\n if (process.env.AR_AGENTS_CORREO_DISABLED?.trim() !== \"1\") {\n adapters.correo_argentino = new CorreoAdapter();\n }\n\n const defaultCarrier = process.env.SHIPPING_DEFAULT_CARRIER?.trim() as\n | \"andreani\"\n | \"oca\"\n | \"correo_argentino\"\n | undefined;\n\n return shippingTools({\n adapters,\n ...(defaultCarrier ? { defaultCarrier } : {}),\n }) as ToolSet;\n}\n\nexport function describeShippingConfig(): string {\n const enabled: string[] = [];\n if (process.env.ANDREANI_USERNAME?.trim()) enabled.push(\"andreani\");\n if (process.env.OCA_CUIT?.trim()) enabled.push(\"oca\");\n if (process.env.AR_AGENTS_CORREO_DISABLED?.trim() !== \"1\") enabled.push(\"correo_argentino\");\n if (enabled.length === 0) return \"no carriers configurados\";\n return `carriers activos: ${enabled.join(\", \")}`;\n}\n","import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { combineToolSets } from \"./adapter\";\nimport { buildBankingTools, describeBankingConfig } from \"./registries/banking\";\nimport {\n buildFacturacionTools,\n describeFacturacionConfig,\n} from \"./registries/facturacion\";\nimport { buildIdentityTools, describeIdentityConfig } from \"./registries/identity\";\nimport {\n buildIdentityAttestTools,\n describeIdentityAttestConfig,\n} from \"./registries/identity-attest\";\nimport {\n buildMercadoPagoTools,\n describeMercadoPagoConfig,\n} from \"./registries/mercadopago\";\nimport { buildShippingTools, describeShippingConfig } from \"./registries/shipping\";\nimport { buildWhatsAppTools, describeWhatsAppConfig } from \"./registries/whatsapp\";\n\nconst SERVER_NAME = \"ar-agents\";\nconst SERVER_VERSION = \"0.4.0\";\n\n/**\n * Build the @ar-agents/mcp server. Inspects environment variables to decide\n * which package's tools to register. Always registers @ar-agents/identity\n * (algorithm-only `validate_cuit` works without any env vars).\n */\nexport async function createServer(): Promise<{ server: Server; summary: string[] }> {\n const adapter = combineToolSets([\n buildIdentityTools(),\n buildMercadoPagoTools(),\n buildWhatsAppTools(),\n buildIdentityAttestTools(),\n buildBankingTools(),\n buildFacturacionTools(),\n buildShippingTools(),\n ]);\n\n const summary = [\n `${SERVER_NAME}@${SERVER_VERSION} starting with ${adapter.tools.length} tools registered:`,\n ` identity → ${describeIdentityConfig()}`,\n ` mercadopago → ${describeMercadoPagoConfig()}`,\n ` whatsapp → ${describeWhatsAppConfig()}`,\n ` identity-attest → ${describeIdentityAttestConfig()}`,\n ` banking → ${describeBankingConfig()}`,\n ` facturacion → ${describeFacturacionConfig()}`,\n ` shipping → ${describeShippingConfig()}`,\n ];\n\n const server = new Server(\n { name: SERVER_NAME, version: SERVER_VERSION },\n { capabilities: { tools: {} } },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapter.tools,\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n try {\n const result = await adapter.call(name, args ?? {});\n return {\n content: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return {\n content: [{ type: \"text\", text: `Error calling ${name}: ${msg}` }],\n isError: true,\n };\n }\n });\n\n return { server, summary };\n}\n\n/**\n * Start the MCP server over stdio. Called by the CLI binary.\n * Logs the registered-tools summary to stderr (stdout is reserved for MCP\n * protocol messages).\n */\nexport async function startStdio(): Promise<void> {\n const { server, summary } = await createServer();\n for (const line of summary) console.error(line);\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error(\"ar-agents MCP server connected via stdio\");\n}\n"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -118,4 +118,34 @@ declare function describeBankingConfig(): string;
|
|
|
118
118
|
declare function buildFacturacionTools(): ToolSet;
|
|
119
119
|
declare function describeFacturacionConfig(): string;
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
/**
|
|
122
|
+
* Build the @ar-agents/shipping tool set from environment variables.
|
|
123
|
+
*
|
|
124
|
+
* Each carrier is wired independently — set the env vars for whichever
|
|
125
|
+
* carriers you have credentials for. Without any credentials, the tools
|
|
126
|
+
* return `{ available: false, error }` instead of crashing.
|
|
127
|
+
*
|
|
128
|
+
* # Env vars
|
|
129
|
+
*
|
|
130
|
+
* **Andreani** (full REST API):
|
|
131
|
+
* - `ANDREANI_USERNAME` (required)
|
|
132
|
+
* - `ANDREANI_PASSWORD` (required)
|
|
133
|
+
* - `ANDREANI_CLIENT_NUMBER` (required)
|
|
134
|
+
* - `ANDREANI_ENV` ("homo" | "prod", default "prod")
|
|
135
|
+
*
|
|
136
|
+
* **OCA** (Tarifador only in v0.1):
|
|
137
|
+
* - `OCA_CUIT` (required)
|
|
138
|
+
* - `OCA_OPERATIVA` (required)
|
|
139
|
+
*
|
|
140
|
+
* **Correo Argentino** (public REST, no creds needed):
|
|
141
|
+
* - Auto-wired (no env vars).
|
|
142
|
+
* - Set `AR_AGENTS_CORREO_DISABLED=1` to opt out.
|
|
143
|
+
*
|
|
144
|
+
* **Common**:
|
|
145
|
+
* - `SHIPPING_DEFAULT_CARRIER` ("andreani" | "oca" | "correo_argentino")
|
|
146
|
+
* — when an agent doesn't specify a carrier, this is used.
|
|
147
|
+
*/
|
|
148
|
+
declare function buildShippingTools(): ToolSet;
|
|
149
|
+
declare function describeShippingConfig(): string;
|
|
150
|
+
|
|
151
|
+
export { type McpAdapter, type McpTool, adaptToolSetToMcp, buildBankingTools, buildFacturacionTools, buildIdentityAttestTools, buildIdentityTools, buildMercadoPagoTools, buildShippingTools, buildWhatsAppTools, combineToolSets, createServer, describeBankingConfig, describeFacturacionConfig, describeIdentityAttestConfig, describeIdentityConfig, describeMercadoPagoConfig, describeShippingConfig, describeWhatsAppConfig, getWhatsAppClient, startStdio };
|
package/dist/index.d.ts
CHANGED
|
@@ -118,4 +118,34 @@ declare function describeBankingConfig(): string;
|
|
|
118
118
|
declare function buildFacturacionTools(): ToolSet;
|
|
119
119
|
declare function describeFacturacionConfig(): string;
|
|
120
120
|
|
|
121
|
-
|
|
121
|
+
/**
|
|
122
|
+
* Build the @ar-agents/shipping tool set from environment variables.
|
|
123
|
+
*
|
|
124
|
+
* Each carrier is wired independently — set the env vars for whichever
|
|
125
|
+
* carriers you have credentials for. Without any credentials, the tools
|
|
126
|
+
* return `{ available: false, error }` instead of crashing.
|
|
127
|
+
*
|
|
128
|
+
* # Env vars
|
|
129
|
+
*
|
|
130
|
+
* **Andreani** (full REST API):
|
|
131
|
+
* - `ANDREANI_USERNAME` (required)
|
|
132
|
+
* - `ANDREANI_PASSWORD` (required)
|
|
133
|
+
* - `ANDREANI_CLIENT_NUMBER` (required)
|
|
134
|
+
* - `ANDREANI_ENV` ("homo" | "prod", default "prod")
|
|
135
|
+
*
|
|
136
|
+
* **OCA** (Tarifador only in v0.1):
|
|
137
|
+
* - `OCA_CUIT` (required)
|
|
138
|
+
* - `OCA_OPERATIVA` (required)
|
|
139
|
+
*
|
|
140
|
+
* **Correo Argentino** (public REST, no creds needed):
|
|
141
|
+
* - Auto-wired (no env vars).
|
|
142
|
+
* - Set `AR_AGENTS_CORREO_DISABLED=1` to opt out.
|
|
143
|
+
*
|
|
144
|
+
* **Common**:
|
|
145
|
+
* - `SHIPPING_DEFAULT_CARRIER` ("andreani" | "oca" | "correo_argentino")
|
|
146
|
+
* — when an agent doesn't specify a carrier, this is used.
|
|
147
|
+
*/
|
|
148
|
+
declare function buildShippingTools(): ToolSet;
|
|
149
|
+
declare function describeShippingConfig(): string;
|
|
150
|
+
|
|
151
|
+
export { type McpAdapter, type McpTool, adaptToolSetToMcp, buildBankingTools, buildFacturacionTools, buildIdentityAttestTools, buildIdentityTools, buildMercadoPagoTools, buildShippingTools, buildWhatsAppTools, combineToolSets, createServer, describeBankingConfig, describeFacturacionConfig, describeIdentityAttestConfig, describeIdentityConfig, describeMercadoPagoConfig, describeShippingConfig, describeWhatsAppConfig, getWhatsAppClient, startStdio };
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,7 @@ import { WsaaWscdcAfipPadronAdapter } from '@ar-agents/identity/wsaa';
|
|
|
9
9
|
import { WhatsAppOtpAdapter, EmailMagicLinkAdapter, AttestationClient, identityAttestTools } from '@ar-agents/identity-attest';
|
|
10
10
|
import { whatsappTools, WhatsAppClient } from '@ar-agents/whatsapp';
|
|
11
11
|
import { MercadoPagoClient, mercadoPagoTools, InMemoryStateAdapter } from '@ar-agents/mercadopago';
|
|
12
|
+
import { AndreaniAdapter, OcaAdapter, CorreoAdapter, shippingTools } from '@ar-agents/shipping';
|
|
12
13
|
|
|
13
14
|
// src/server.ts
|
|
14
15
|
function adaptToolSetToMcp(toolSet) {
|
|
@@ -246,10 +247,45 @@ function describeMercadoPagoConfig() {
|
|
|
246
247
|
const backUrl = process.env.MP_BACK_URL?.trim();
|
|
247
248
|
return `${isTest ? "TEST" : "PROD"} mode${backUrl ? ` \xB7 back_url=${backUrl}` : " \xB7 using default back_url"}`;
|
|
248
249
|
}
|
|
250
|
+
function buildShippingTools() {
|
|
251
|
+
const adapters = {};
|
|
252
|
+
const andreaniUser = process.env.ANDREANI_USERNAME?.trim();
|
|
253
|
+
const andreaniPass = process.env.ANDREANI_PASSWORD?.trim();
|
|
254
|
+
const andreaniClient = process.env.ANDREANI_CLIENT_NUMBER?.trim();
|
|
255
|
+
if (andreaniUser && andreaniPass && andreaniClient) {
|
|
256
|
+
adapters.andreani = new AndreaniAdapter({
|
|
257
|
+
username: andreaniUser,
|
|
258
|
+
password: andreaniPass,
|
|
259
|
+
clientNumber: andreaniClient,
|
|
260
|
+
env: process.env.ANDREANI_ENV?.trim() ?? "prod"
|
|
261
|
+
});
|
|
262
|
+
}
|
|
263
|
+
const ocaCuit = process.env.OCA_CUIT?.trim();
|
|
264
|
+
const ocaOperativa = process.env.OCA_OPERATIVA?.trim();
|
|
265
|
+
if (ocaCuit && ocaOperativa) {
|
|
266
|
+
adapters.oca = new OcaAdapter({ cuit: ocaCuit, operativa: ocaOperativa });
|
|
267
|
+
}
|
|
268
|
+
if (process.env.AR_AGENTS_CORREO_DISABLED?.trim() !== "1") {
|
|
269
|
+
adapters.correo_argentino = new CorreoAdapter();
|
|
270
|
+
}
|
|
271
|
+
const defaultCarrier = process.env.SHIPPING_DEFAULT_CARRIER?.trim();
|
|
272
|
+
return shippingTools({
|
|
273
|
+
adapters,
|
|
274
|
+
...defaultCarrier ? { defaultCarrier } : {}
|
|
275
|
+
});
|
|
276
|
+
}
|
|
277
|
+
function describeShippingConfig() {
|
|
278
|
+
const enabled = [];
|
|
279
|
+
if (process.env.ANDREANI_USERNAME?.trim()) enabled.push("andreani");
|
|
280
|
+
if (process.env.OCA_CUIT?.trim()) enabled.push("oca");
|
|
281
|
+
if (process.env.AR_AGENTS_CORREO_DISABLED?.trim() !== "1") enabled.push("correo_argentino");
|
|
282
|
+
if (enabled.length === 0) return "no carriers configurados";
|
|
283
|
+
return `carriers activos: ${enabled.join(", ")}`;
|
|
284
|
+
}
|
|
249
285
|
|
|
250
286
|
// src/server.ts
|
|
251
287
|
var SERVER_NAME = "ar-agents";
|
|
252
|
-
var SERVER_VERSION = "0.
|
|
288
|
+
var SERVER_VERSION = "0.4.0";
|
|
253
289
|
async function createServer() {
|
|
254
290
|
const adapter = combineToolSets([
|
|
255
291
|
buildIdentityTools(),
|
|
@@ -257,7 +293,8 @@ async function createServer() {
|
|
|
257
293
|
buildWhatsAppTools(),
|
|
258
294
|
buildIdentityAttestTools(),
|
|
259
295
|
buildBankingTools(),
|
|
260
|
-
buildFacturacionTools()
|
|
296
|
+
buildFacturacionTools(),
|
|
297
|
+
buildShippingTools()
|
|
261
298
|
]);
|
|
262
299
|
const summary = [
|
|
263
300
|
`${SERVER_NAME}@${SERVER_VERSION} starting with ${adapter.tools.length} tools registered:`,
|
|
@@ -266,7 +303,8 @@ async function createServer() {
|
|
|
266
303
|
` whatsapp \u2192 ${describeWhatsAppConfig()}`,
|
|
267
304
|
` identity-attest \u2192 ${describeIdentityAttestConfig()}`,
|
|
268
305
|
` banking \u2192 ${describeBankingConfig()}`,
|
|
269
|
-
` facturacion \u2192 ${describeFacturacionConfig()}
|
|
306
|
+
` facturacion \u2192 ${describeFacturacionConfig()}`,
|
|
307
|
+
` shipping \u2192 ${describeShippingConfig()}`
|
|
270
308
|
];
|
|
271
309
|
const server = new Server(
|
|
272
310
|
{ name: SERVER_NAME, version: SERVER_VERSION },
|
|
@@ -300,6 +338,6 @@ async function startStdio() {
|
|
|
300
338
|
console.error("ar-agents MCP server connected via stdio");
|
|
301
339
|
}
|
|
302
340
|
|
|
303
|
-
export { adaptToolSetToMcp, buildBankingTools, buildFacturacionTools, buildIdentityAttestTools, buildIdentityTools, buildMercadoPagoTools, buildWhatsAppTools, combineToolSets, createServer, describeBankingConfig, describeFacturacionConfig, describeIdentityAttestConfig, describeIdentityConfig, describeMercadoPagoConfig, describeWhatsAppConfig, getWhatsAppClient, startStdio };
|
|
341
|
+
export { adaptToolSetToMcp, buildBankingTools, buildFacturacionTools, buildIdentityAttestTools, buildIdentityTools, buildMercadoPagoTools, buildShippingTools, buildWhatsAppTools, combineToolSets, createServer, describeBankingConfig, describeFacturacionConfig, describeIdentityAttestConfig, describeIdentityConfig, describeMercadoPagoConfig, describeShippingConfig, describeWhatsAppConfig, getWhatsAppClient, startStdio };
|
|
304
342
|
//# sourceMappingURL=index.js.map
|
|
305
343
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapter.ts","../src/registries/banking.ts","../src/registries/facturacion.ts","../src/registries/identity.ts","../src/registries/whatsapp.ts","../src/registries/identity-attest.ts","../src/registries/mercadopago.ts","../src/server.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { ToolSet } from \"ai\";\nimport { z } from \"zod\";\n\n/**\n * Convert a Vercel AI SDK ToolSet to MCP-compatible tool definitions.\n *\n * Vercel AI SDK's `tool()` shape:\n * { description, inputSchema: ZodSchema, execute: (args) => result }\n *\n * MCP's tool shape:\n * { name, description, inputSchema: JSONSchema }\n * + a separate handler that takes (name, args) and returns the result\n */\n\nexport interface McpTool {\n name: string;\n description: string;\n inputSchema: object; // JSON Schema\n}\n\nexport interface McpAdapter {\n /** All MCP tool definitions (for ListTools response). */\n tools: McpTool[];\n /** Handler for CallTool — looks up the original Vercel AI SDK tool and runs execute. */\n call: (name: string, args: unknown) => Promise<unknown>;\n}\n\n/**\n * Bridge a Vercel AI SDK ToolSet → MCP tools + dispatcher.\n *\n * Throws on unknown tool name or if execute is missing (safety: every Vercel\n * AI SDK tool ships with `execute` for server-side flows, which is what\n * MCP needs).\n */\nexport function adaptToolSetToMcp(toolSet: ToolSet): McpAdapter {\n const tools: McpTool[] = [];\n const lookup = new Map<string, (args: unknown) => Promise<unknown>>();\n\n for (const [name, tool] of Object.entries(toolSet)) {\n if (!tool || typeof tool !== \"object\") continue;\n const description =\n \"description\" in tool && typeof tool.description === \"string\" ? tool.description : \"\";\n const inputSchema =\n \"inputSchema\" in tool && tool.inputSchema\n ? (z.toJSONSchema(tool.inputSchema as z.ZodType) as object)\n : { type: \"object\", properties: {}, additionalProperties: false };\n\n tools.push({ name, description, inputSchema });\n\n const exec = \"execute\" in tool ? (tool.execute as (args: unknown) => Promise<unknown>) : null;\n if (!exec) {\n // Server-side execution required for MCP; skip tools without execute.\n continue;\n }\n lookup.set(name, exec);\n }\n\n return {\n tools,\n call: async (name, args) => {\n const fn = lookup.get(name);\n if (!fn) {\n throw new Error(`Tool \"${name}\" not found or has no execute fn (MCP requires server-side tools).`);\n }\n return fn(args);\n },\n };\n}\n\n/**\n * Combine multiple Vercel AI SDK ToolSets into a single McpAdapter. Tool\n * name collisions throw at adapter-build time.\n */\nexport function combineToolSets(toolSets: Array<ToolSet | null>): McpAdapter {\n const tools: McpTool[] = [];\n const lookup = new Map<string, (args: unknown) => Promise<unknown>>();\n const seen = new Set<string>();\n\n for (const ts of toolSets) {\n if (!ts) continue;\n const adapter = adaptToolSetToMcp(ts);\n for (const tool of adapter.tools) {\n if (seen.has(tool.name)) {\n throw new Error(\n `Tool name collision: \"${tool.name}\" appears in multiple registered tool sets. Rename one or skip a registry.`,\n );\n }\n seen.add(tool.name);\n tools.push(tool);\n // Bind this specific tool's call through the source adapter\n const sourceAdapter = adapter;\n const toolName = tool.name;\n lookup.set(toolName, (args: unknown) => sourceAdapter.call(toolName, args));\n }\n }\n\n return {\n tools,\n call: async (name, args) => {\n const fn = lookup.get(name);\n if (!fn) throw new Error(`Tool \"${name}\" not found in combined set.`);\n return fn(args);\n },\n };\n}\n","import {\n bankingTools,\n BcraPublicApiAdapter,\n type BcraDeudaAdapter,\n} from \"@ar-agents/banking\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/banking tool set.\n *\n * Pure-algorithm tools (validate_cbu, lookup_bank_by_code, list_banks,\n * list_psps) are ALWAYS available — no env vars required.\n *\n * The BCRA Central de Deudores tool is wired to `BcraPublicApiAdapter`\n * by default (BCRA's public REST API needs no auth). To opt out, set\n * `AR_AGENTS_BCRA_DISABLED=1` in env — the tool then returns\n * `{ available: false, error: \"<setup instructions>\" }`.\n */\nexport function buildBankingTools(): ToolSet {\n const bcra = buildBcraAdapter();\n return bankingTools(bcra ? { bcra } : {}) as ToolSet;\n}\n\nfunction buildBcraAdapter(): BcraDeudaAdapter | undefined {\n if (process.env.AR_AGENTS_BCRA_DISABLED?.trim() === \"1\") return undefined;\n const timeout = Number(process.env.BCRA_TIMEOUT_MS?.trim() ?? \"30000\");\n const retries = Number(process.env.BCRA_MAX_RETRIES?.trim() ?? \"1\");\n return new BcraPublicApiAdapter({\n requestTimeoutMs: Number.isFinite(timeout) ? timeout : 30_000,\n maxRetries: Number.isFinite(retries) ? retries : 1,\n });\n}\n\nexport function describeBankingConfig(): string {\n const bcraDisabled = process.env.AR_AGENTS_BCRA_DISABLED?.trim() === \"1\";\n return bcraDisabled\n ? \"validate_cbu, lookup_bank_by_code, list_banks, list_psps (BCRA disabled)\"\n : \"validate_cbu, lookup_bank_by_code, list_banks, list_psps, lookup_credit_situation (BCRA public API)\";\n}\n","import { facturacionTools, WsfeClient } from \"@ar-agents/facturacion\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/facturacion tool set from environment variables.\n *\n * AFIP cert + key + CUIT required (same as @ar-agents/identity, but the\n * service must be authorized for `wsfe` in addition to whatever padron\n * service identity uses). When the env vars are missing, the tools return\n * `{ available: false, error: <setup instructions> }` instead of crashing —\n * MCP host can show the user what to set.\n *\n * # Env vars\n *\n * - `AFIP_CUIT_REPRESENTADO` (required)\n * - `AFIP_CERT_PEM` + `AFIP_KEY_PEM` (preferred for serverless / MCP) OR\n * - `AFIP_CERT_PATH` + `AFIP_KEY_PATH` (for local dev)\n * - `AFIP_ENV` — \"homo\" | \"prod\" (default \"prod\")\n * - `WSFE_DEFAULT_PTOVTA` — default punto de venta (optional, recommended for\n * single-PtoVta SaaS so agents don't have to remember it)\n * - `WSFE_TIMEOUT_MS` — default 30000\n * - `WSFE_MAX_RETRIES` — default 1\n */\nexport function buildFacturacionTools(): ToolSet {\n const wsfe = buildWsfeClient();\n const defaultPtoVta = Number(\n process.env.WSFE_DEFAULT_PTOVTA?.trim() ?? \"0\",\n );\n const opts: Parameters<typeof facturacionTools>[0] = {};\n if (wsfe) opts.wsfe = wsfe;\n if (Number.isFinite(defaultPtoVta) && defaultPtoVta > 0)\n opts.defaultPtoVta = defaultPtoVta;\n return facturacionTools(opts) as ToolSet;\n}\n\nfunction buildWsfeClient(): WsfeClient | undefined {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return undefined;\n const env = (process.env.AFIP_ENV?.trim() ?? \"prod\") as \"homo\" | \"prod\";\n const timeout = Number(process.env.WSFE_TIMEOUT_MS?.trim() ?? \"30000\");\n const retries = Number(process.env.WSFE_MAX_RETRIES?.trim() ?? \"1\");\n const certPem = process.env.AFIP_CERT_PEM;\n const keyPem = process.env.AFIP_KEY_PEM;\n if (certPem && keyPem) {\n return new WsfeClient({\n certPem,\n keyPem,\n cuit,\n env,\n requestTimeoutMs: Number.isFinite(timeout) ? timeout : 30_000,\n maxRetries: Number.isFinite(retries) ? retries : 1,\n });\n }\n const certPath = process.env.AFIP_CERT_PATH?.trim();\n const keyPath = process.env.AFIP_KEY_PATH?.trim();\n if (certPath && keyPath) {\n return new WsfeClient({\n certPath,\n keyPath,\n cuit,\n env,\n requestTimeoutMs: Number.isFinite(timeout) ? timeout : 30_000,\n maxRetries: Number.isFinite(retries) ? retries : 1,\n });\n }\n return undefined;\n}\n\nexport function describeFacturacionConfig(): string {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return \"no configurado (faltan AFIP_CUIT_REPRESENTADO + cert)\";\n const certConfigured =\n !!process.env.AFIP_CERT_PEM || !!process.env.AFIP_CERT_PATH;\n if (!certConfigured) return \"no configurado (falta AFIP_CERT_PEM o AFIP_CERT_PATH)\";\n const ptovta = process.env.WSFE_DEFAULT_PTOVTA?.trim();\n return `WSFE habilitado (CUIT ${cuit}${ptovta ? `, PtoVta ${ptovta}` : \"\"})`;\n}\n","import { identityTools, type AfipPadronAdapter } from \"@ar-agents/identity\";\nimport { WsaaWscdcAfipPadronAdapter } from \"@ar-agents/identity/wsaa\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/identity tool set from environment variables.\n * Returns null when AFIP env vars are missing (the algorithm-only `validate_cuit`\n * is always available; lookup_cuit_afip falls back to UnconfiguredAfipPadronAdapter).\n */\nexport function buildIdentityTools(): ToolSet {\n const afip = buildAfipAdapter();\n return identityTools(afip ? { afip } : {}) as ToolSet;\n}\n\nfunction buildAfipAdapter(): AfipPadronAdapter | undefined {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return undefined;\n const env = (process.env.AFIP_ENV?.trim() ?? \"prod\") as \"homo\" | \"prod\";\n const certPem = process.env.AFIP_CERT_PEM;\n const keyPem = process.env.AFIP_KEY_PEM;\n if (certPem && keyPem) {\n return new WsaaWscdcAfipPadronAdapter({ certPem, keyPem, cuitRepresentado: cuit, env });\n }\n const certPath = process.env.AFIP_CERT_PATH?.trim();\n const keyPath = process.env.AFIP_KEY_PATH?.trim();\n if (certPath && keyPath) {\n return new WsaaWscdcAfipPadronAdapter({ certPath, keyPath, cuitRepresentado: cuit, env });\n }\n return undefined;\n}\n\nexport function describeIdentityConfig(): string {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return \"validate_cuit only (no AFIP cert configured)\";\n const certConfigured =\n !!process.env.AFIP_CERT_PEM || !!process.env.AFIP_CERT_PATH;\n return certConfigured\n ? `validate_cuit + lookup_cuit_afip (AFIP cert configured for CUIT ${cuit})`\n : `validate_cuit only (cert not configured)`;\n}\n","import { WhatsAppClient, whatsappTools } from \"@ar-agents/whatsapp\";\nimport type { ToolSet } from \"ai\";\n\nexport function buildWhatsAppTools(): ToolSet | null {\n const accessToken = process.env.WA_ACCESS_TOKEN?.trim();\n const phoneNumberId = process.env.WA_PHONE_NUMBER_ID?.trim();\n if (!accessToken || !phoneNumberId) return null;\n return whatsappTools(new WhatsAppClient({ accessToken, phoneNumberId })) as ToolSet;\n}\n\nexport function describeWhatsAppConfig(): string {\n const accessToken = process.env.WA_ACCESS_TOKEN?.trim();\n const phoneNumberId = process.env.WA_PHONE_NUMBER_ID?.trim();\n if (!accessToken || !phoneNumberId)\n return \"not configured (set WA_ACCESS_TOKEN + WA_PHONE_NUMBER_ID)\";\n return `phone_number_id=${phoneNumberId.slice(0, 6)}…`;\n}\n\n/** Returns the configured client, used by identity-attest's WhatsAppOtpAdapter. */\nexport function getWhatsAppClient(): WhatsAppClient | null {\n const accessToken = process.env.WA_ACCESS_TOKEN?.trim();\n const phoneNumberId = process.env.WA_PHONE_NUMBER_ID?.trim();\n if (!accessToken || !phoneNumberId) return null;\n return new WhatsAppClient({ accessToken, phoneNumberId });\n}\n","import {\n AttestationClient,\n identityAttestTools,\n WhatsAppOtpAdapter,\n EmailMagicLinkAdapter,\n type EmailSender,\n} from \"@ar-agents/identity-attest\";\nimport type { ToolSet } from \"ai\";\nimport { getWhatsAppClient } from \"./whatsapp\";\n\n/**\n * Build @ar-agents/identity-attest tools if ATTEST_SIGNING_SECRET is set\n * and at least one adapter can be configured (WhatsApp client present\n * OR email sender configured via SMTP_URL / RESEND_API_KEY).\n */\nexport function buildIdentityAttestTools(): ToolSet | null {\n const signingSecret = process.env.ATTEST_SIGNING_SECRET?.trim();\n if (!signingSecret) return null;\n\n const adapters: Record<string, ConstructorParameters<typeof AttestationClient>[0][\"adapters\"][string]> = {};\n\n // WhatsApp OTP — requires WhatsApp client\n const wa = getWhatsAppClient();\n if (wa) {\n adapters[\"whatsapp_otp\"] = new WhatsAppOtpAdapter({\n whatsappClient: wa,\n businessName: process.env.BUSINESS_NAME?.trim() ?? \"this app\",\n });\n }\n\n // Email magic-link — requires Resend API key + callback URL\n const resendKey = process.env.RESEND_API_KEY?.trim();\n const callbackUrl = process.env.ATTEST_CALLBACK_URL?.trim();\n if (resendKey && callbackUrl) {\n const fromEmail = process.env.ATTEST_FROM_EMAIL?.trim() ?? \"noreply@example.com\";\n const sender: EmailSender = async ({ to, subject, html, text }) => {\n const res = await fetch(\"https://api.resend.com/emails\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${resendKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ from: fromEmail, to, subject, html, text }),\n });\n if (!res.ok) {\n throw new Error(`Resend send failed: ${res.status} ${await res.text()}`);\n }\n };\n adapters[\"email_magic_link\"] = new EmailMagicLinkAdapter({\n sender,\n callbackBaseUrl: callbackUrl,\n businessName: process.env.BUSINESS_NAME?.trim() ?? \"this app\",\n });\n }\n\n if (Object.keys(adapters).length === 0) return null;\n\n const client = new AttestationClient({ signingSecret, adapters });\n return identityAttestTools(client) as ToolSet;\n}\n\nexport function describeIdentityAttestConfig(): string {\n const signingSecret = process.env.ATTEST_SIGNING_SECRET?.trim();\n if (!signingSecret) return \"not configured (set ATTEST_SIGNING_SECRET)\";\n const adapters: string[] = [];\n if (getWhatsAppClient()) adapters.push(\"whatsapp_otp\");\n if (process.env.RESEND_API_KEY?.trim() && process.env.ATTEST_CALLBACK_URL?.trim())\n adapters.push(\"email_magic_link\");\n if (adapters.length === 0)\n return \"configured but no adapters (set WhatsApp creds and/or RESEND_API_KEY + ATTEST_CALLBACK_URL)\";\n return adapters.join(\", \");\n}\n","import {\n InMemoryStateAdapter,\n MercadoPagoClient,\n mercadoPagoTools,\n} from \"@ar-agents/mercadopago\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build @ar-agents/mercadopago tools if MP_ACCESS_TOKEN is set.\n * Returns null when not configured.\n */\nexport function buildMercadoPagoTools(): ToolSet | null {\n const accessToken = process.env.MP_ACCESS_TOKEN?.trim();\n if (!accessToken) return null;\n const client = new MercadoPagoClient({ accessToken });\n const backUrl = process.env.MP_BACK_URL?.trim() ?? \"https://example.com/done\";\n return mercadoPagoTools(client, {\n state: new InMemoryStateAdapter(),\n backUrl,\n }) as ToolSet;\n}\n\nexport function describeMercadoPagoConfig(): string {\n const token = process.env.MP_ACCESS_TOKEN?.trim();\n if (!token) return \"not configured (set MP_ACCESS_TOKEN)\";\n const isTest = token.startsWith(\"TEST-\");\n const backUrl = process.env.MP_BACK_URL?.trim();\n return `${isTest ? \"TEST\" : \"PROD\"} mode${backUrl ? ` · back_url=${backUrl}` : \" · using default back_url\"}`;\n}\n","import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { combineToolSets } from \"./adapter\";\nimport { buildBankingTools, describeBankingConfig } from \"./registries/banking\";\nimport {\n buildFacturacionTools,\n describeFacturacionConfig,\n} from \"./registries/facturacion\";\nimport { buildIdentityTools, describeIdentityConfig } from \"./registries/identity\";\nimport {\n buildIdentityAttestTools,\n describeIdentityAttestConfig,\n} from \"./registries/identity-attest\";\nimport {\n buildMercadoPagoTools,\n describeMercadoPagoConfig,\n} from \"./registries/mercadopago\";\nimport { buildWhatsAppTools, describeWhatsAppConfig } from \"./registries/whatsapp\";\n\nconst SERVER_NAME = \"ar-agents\";\nconst SERVER_VERSION = \"0.3.0\";\n\n/**\n * Build the @ar-agents/mcp server. Inspects environment variables to decide\n * which package's tools to register. Always registers @ar-agents/identity\n * (algorithm-only `validate_cuit` works without any env vars).\n */\nexport async function createServer(): Promise<{ server: Server; summary: string[] }> {\n const adapter = combineToolSets([\n buildIdentityTools(),\n buildMercadoPagoTools(),\n buildWhatsAppTools(),\n buildIdentityAttestTools(),\n buildBankingTools(),\n buildFacturacionTools(),\n ]);\n\n const summary = [\n `${SERVER_NAME}@${SERVER_VERSION} starting with ${adapter.tools.length} tools registered:`,\n ` identity → ${describeIdentityConfig()}`,\n ` mercadopago → ${describeMercadoPagoConfig()}`,\n ` whatsapp → ${describeWhatsAppConfig()}`,\n ` identity-attest → ${describeIdentityAttestConfig()}`,\n ` banking → ${describeBankingConfig()}`,\n ` facturacion → ${describeFacturacionConfig()}`,\n ];\n\n const server = new Server(\n { name: SERVER_NAME, version: SERVER_VERSION },\n { capabilities: { tools: {} } },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapter.tools,\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n try {\n const result = await adapter.call(name, args ?? {});\n return {\n content: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return {\n content: [{ type: \"text\", text: `Error calling ${name}: ${msg}` }],\n isError: true,\n };\n }\n });\n\n return { server, summary };\n}\n\n/**\n * Start the MCP server over stdio. Called by the CLI binary.\n * Logs the registered-tools summary to stderr (stdout is reserved for MCP\n * protocol messages).\n */\nexport async function startStdio(): Promise<void> {\n const { server, summary } = await createServer();\n for (const line of summary) console.error(line);\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error(\"ar-agents MCP server connected via stdio\");\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/adapter.ts","../src/registries/banking.ts","../src/registries/facturacion.ts","../src/registries/identity.ts","../src/registries/whatsapp.ts","../src/registries/identity-attest.ts","../src/registries/mercadopago.ts","../src/registries/shipping.ts","../src/server.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { ToolSet } from \"ai\";\nimport { z } from \"zod\";\n\n/**\n * Convert a Vercel AI SDK ToolSet to MCP-compatible tool definitions.\n *\n * Vercel AI SDK's `tool()` shape:\n * { description, inputSchema: ZodSchema, execute: (args) => result }\n *\n * MCP's tool shape:\n * { name, description, inputSchema: JSONSchema }\n * + a separate handler that takes (name, args) and returns the result\n */\n\nexport interface McpTool {\n name: string;\n description: string;\n inputSchema: object; // JSON Schema\n}\n\nexport interface McpAdapter {\n /** All MCP tool definitions (for ListTools response). */\n tools: McpTool[];\n /** Handler for CallTool — looks up the original Vercel AI SDK tool and runs execute. */\n call: (name: string, args: unknown) => Promise<unknown>;\n}\n\n/**\n * Bridge a Vercel AI SDK ToolSet → MCP tools + dispatcher.\n *\n * Throws on unknown tool name or if execute is missing (safety: every Vercel\n * AI SDK tool ships with `execute` for server-side flows, which is what\n * MCP needs).\n */\nexport function adaptToolSetToMcp(toolSet: ToolSet): McpAdapter {\n const tools: McpTool[] = [];\n const lookup = new Map<string, (args: unknown) => Promise<unknown>>();\n\n for (const [name, tool] of Object.entries(toolSet)) {\n if (!tool || typeof tool !== \"object\") continue;\n const description =\n \"description\" in tool && typeof tool.description === \"string\" ? tool.description : \"\";\n const inputSchema =\n \"inputSchema\" in tool && tool.inputSchema\n ? (z.toJSONSchema(tool.inputSchema as z.ZodType) as object)\n : { type: \"object\", properties: {}, additionalProperties: false };\n\n tools.push({ name, description, inputSchema });\n\n const exec = \"execute\" in tool ? (tool.execute as (args: unknown) => Promise<unknown>) : null;\n if (!exec) {\n // Server-side execution required for MCP; skip tools without execute.\n continue;\n }\n lookup.set(name, exec);\n }\n\n return {\n tools,\n call: async (name, args) => {\n const fn = lookup.get(name);\n if (!fn) {\n throw new Error(`Tool \"${name}\" not found or has no execute fn (MCP requires server-side tools).`);\n }\n return fn(args);\n },\n };\n}\n\n/**\n * Combine multiple Vercel AI SDK ToolSets into a single McpAdapter. Tool\n * name collisions throw at adapter-build time.\n */\nexport function combineToolSets(toolSets: Array<ToolSet | null>): McpAdapter {\n const tools: McpTool[] = [];\n const lookup = new Map<string, (args: unknown) => Promise<unknown>>();\n const seen = new Set<string>();\n\n for (const ts of toolSets) {\n if (!ts) continue;\n const adapter = adaptToolSetToMcp(ts);\n for (const tool of adapter.tools) {\n if (seen.has(tool.name)) {\n throw new Error(\n `Tool name collision: \"${tool.name}\" appears in multiple registered tool sets. Rename one or skip a registry.`,\n );\n }\n seen.add(tool.name);\n tools.push(tool);\n // Bind this specific tool's call through the source adapter\n const sourceAdapter = adapter;\n const toolName = tool.name;\n lookup.set(toolName, (args: unknown) => sourceAdapter.call(toolName, args));\n }\n }\n\n return {\n tools,\n call: async (name, args) => {\n const fn = lookup.get(name);\n if (!fn) throw new Error(`Tool \"${name}\" not found in combined set.`);\n return fn(args);\n },\n };\n}\n","import {\n bankingTools,\n BcraPublicApiAdapter,\n type BcraDeudaAdapter,\n} from \"@ar-agents/banking\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/banking tool set.\n *\n * Pure-algorithm tools (validate_cbu, lookup_bank_by_code, list_banks,\n * list_psps) are ALWAYS available — no env vars required.\n *\n * The BCRA Central de Deudores tool is wired to `BcraPublicApiAdapter`\n * by default (BCRA's public REST API needs no auth). To opt out, set\n * `AR_AGENTS_BCRA_DISABLED=1` in env — the tool then returns\n * `{ available: false, error: \"<setup instructions>\" }`.\n */\nexport function buildBankingTools(): ToolSet {\n const bcra = buildBcraAdapter();\n return bankingTools(bcra ? { bcra } : {}) as ToolSet;\n}\n\nfunction buildBcraAdapter(): BcraDeudaAdapter | undefined {\n if (process.env.AR_AGENTS_BCRA_DISABLED?.trim() === \"1\") return undefined;\n const timeout = Number(process.env.BCRA_TIMEOUT_MS?.trim() ?? \"30000\");\n const retries = Number(process.env.BCRA_MAX_RETRIES?.trim() ?? \"1\");\n return new BcraPublicApiAdapter({\n requestTimeoutMs: Number.isFinite(timeout) ? timeout : 30_000,\n maxRetries: Number.isFinite(retries) ? retries : 1,\n });\n}\n\nexport function describeBankingConfig(): string {\n const bcraDisabled = process.env.AR_AGENTS_BCRA_DISABLED?.trim() === \"1\";\n return bcraDisabled\n ? \"validate_cbu, lookup_bank_by_code, list_banks, list_psps (BCRA disabled)\"\n : \"validate_cbu, lookup_bank_by_code, list_banks, list_psps, lookup_credit_situation (BCRA public API)\";\n}\n","import { facturacionTools, WsfeClient } from \"@ar-agents/facturacion\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/facturacion tool set from environment variables.\n *\n * AFIP cert + key + CUIT required (same as @ar-agents/identity, but the\n * service must be authorized for `wsfe` in addition to whatever padron\n * service identity uses). When the env vars are missing, the tools return\n * `{ available: false, error: <setup instructions> }` instead of crashing —\n * MCP host can show the user what to set.\n *\n * # Env vars\n *\n * - `AFIP_CUIT_REPRESENTADO` (required)\n * - `AFIP_CERT_PEM` + `AFIP_KEY_PEM` (preferred for serverless / MCP) OR\n * - `AFIP_CERT_PATH` + `AFIP_KEY_PATH` (for local dev)\n * - `AFIP_ENV` — \"homo\" | \"prod\" (default \"prod\")\n * - `WSFE_DEFAULT_PTOVTA` — default punto de venta (optional, recommended for\n * single-PtoVta SaaS so agents don't have to remember it)\n * - `WSFE_TIMEOUT_MS` — default 30000\n * - `WSFE_MAX_RETRIES` — default 1\n */\nexport function buildFacturacionTools(): ToolSet {\n const wsfe = buildWsfeClient();\n const defaultPtoVta = Number(\n process.env.WSFE_DEFAULT_PTOVTA?.trim() ?? \"0\",\n );\n const opts: Parameters<typeof facturacionTools>[0] = {};\n if (wsfe) opts.wsfe = wsfe;\n if (Number.isFinite(defaultPtoVta) && defaultPtoVta > 0)\n opts.defaultPtoVta = defaultPtoVta;\n return facturacionTools(opts) as ToolSet;\n}\n\nfunction buildWsfeClient(): WsfeClient | undefined {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return undefined;\n const env = (process.env.AFIP_ENV?.trim() ?? \"prod\") as \"homo\" | \"prod\";\n const timeout = Number(process.env.WSFE_TIMEOUT_MS?.trim() ?? \"30000\");\n const retries = Number(process.env.WSFE_MAX_RETRIES?.trim() ?? \"1\");\n const certPem = process.env.AFIP_CERT_PEM;\n const keyPem = process.env.AFIP_KEY_PEM;\n if (certPem && keyPem) {\n return new WsfeClient({\n certPem,\n keyPem,\n cuit,\n env,\n requestTimeoutMs: Number.isFinite(timeout) ? timeout : 30_000,\n maxRetries: Number.isFinite(retries) ? retries : 1,\n });\n }\n const certPath = process.env.AFIP_CERT_PATH?.trim();\n const keyPath = process.env.AFIP_KEY_PATH?.trim();\n if (certPath && keyPath) {\n return new WsfeClient({\n certPath,\n keyPath,\n cuit,\n env,\n requestTimeoutMs: Number.isFinite(timeout) ? timeout : 30_000,\n maxRetries: Number.isFinite(retries) ? retries : 1,\n });\n }\n return undefined;\n}\n\nexport function describeFacturacionConfig(): string {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return \"no configurado (faltan AFIP_CUIT_REPRESENTADO + cert)\";\n const certConfigured =\n !!process.env.AFIP_CERT_PEM || !!process.env.AFIP_CERT_PATH;\n if (!certConfigured) return \"no configurado (falta AFIP_CERT_PEM o AFIP_CERT_PATH)\";\n const ptovta = process.env.WSFE_DEFAULT_PTOVTA?.trim();\n return `WSFE habilitado (CUIT ${cuit}${ptovta ? `, PtoVta ${ptovta}` : \"\"})`;\n}\n","import { identityTools, type AfipPadronAdapter } from \"@ar-agents/identity\";\nimport { WsaaWscdcAfipPadronAdapter } from \"@ar-agents/identity/wsaa\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/identity tool set from environment variables.\n * Returns null when AFIP env vars are missing (the algorithm-only `validate_cuit`\n * is always available; lookup_cuit_afip falls back to UnconfiguredAfipPadronAdapter).\n */\nexport function buildIdentityTools(): ToolSet {\n const afip = buildAfipAdapter();\n return identityTools(afip ? { afip } : {}) as ToolSet;\n}\n\nfunction buildAfipAdapter(): AfipPadronAdapter | undefined {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return undefined;\n const env = (process.env.AFIP_ENV?.trim() ?? \"prod\") as \"homo\" | \"prod\";\n const certPem = process.env.AFIP_CERT_PEM;\n const keyPem = process.env.AFIP_KEY_PEM;\n if (certPem && keyPem) {\n return new WsaaWscdcAfipPadronAdapter({ certPem, keyPem, cuitRepresentado: cuit, env });\n }\n const certPath = process.env.AFIP_CERT_PATH?.trim();\n const keyPath = process.env.AFIP_KEY_PATH?.trim();\n if (certPath && keyPath) {\n return new WsaaWscdcAfipPadronAdapter({ certPath, keyPath, cuitRepresentado: cuit, env });\n }\n return undefined;\n}\n\nexport function describeIdentityConfig(): string {\n const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();\n if (!cuit) return \"validate_cuit only (no AFIP cert configured)\";\n const certConfigured =\n !!process.env.AFIP_CERT_PEM || !!process.env.AFIP_CERT_PATH;\n return certConfigured\n ? `validate_cuit + lookup_cuit_afip (AFIP cert configured for CUIT ${cuit})`\n : `validate_cuit only (cert not configured)`;\n}\n","import { WhatsAppClient, whatsappTools } from \"@ar-agents/whatsapp\";\nimport type { ToolSet } from \"ai\";\n\nexport function buildWhatsAppTools(): ToolSet | null {\n const accessToken = process.env.WA_ACCESS_TOKEN?.trim();\n const phoneNumberId = process.env.WA_PHONE_NUMBER_ID?.trim();\n if (!accessToken || !phoneNumberId) return null;\n return whatsappTools(new WhatsAppClient({ accessToken, phoneNumberId })) as ToolSet;\n}\n\nexport function describeWhatsAppConfig(): string {\n const accessToken = process.env.WA_ACCESS_TOKEN?.trim();\n const phoneNumberId = process.env.WA_PHONE_NUMBER_ID?.trim();\n if (!accessToken || !phoneNumberId)\n return \"not configured (set WA_ACCESS_TOKEN + WA_PHONE_NUMBER_ID)\";\n return `phone_number_id=${phoneNumberId.slice(0, 6)}…`;\n}\n\n/** Returns the configured client, used by identity-attest's WhatsAppOtpAdapter. */\nexport function getWhatsAppClient(): WhatsAppClient | null {\n const accessToken = process.env.WA_ACCESS_TOKEN?.trim();\n const phoneNumberId = process.env.WA_PHONE_NUMBER_ID?.trim();\n if (!accessToken || !phoneNumberId) return null;\n return new WhatsAppClient({ accessToken, phoneNumberId });\n}\n","import {\n AttestationClient,\n identityAttestTools,\n WhatsAppOtpAdapter,\n EmailMagicLinkAdapter,\n type EmailSender,\n} from \"@ar-agents/identity-attest\";\nimport type { ToolSet } from \"ai\";\nimport { getWhatsAppClient } from \"./whatsapp\";\n\n/**\n * Build @ar-agents/identity-attest tools if ATTEST_SIGNING_SECRET is set\n * and at least one adapter can be configured (WhatsApp client present\n * OR email sender configured via SMTP_URL / RESEND_API_KEY).\n */\nexport function buildIdentityAttestTools(): ToolSet | null {\n const signingSecret = process.env.ATTEST_SIGNING_SECRET?.trim();\n if (!signingSecret) return null;\n\n const adapters: Record<string, ConstructorParameters<typeof AttestationClient>[0][\"adapters\"][string]> = {};\n\n // WhatsApp OTP — requires WhatsApp client\n const wa = getWhatsAppClient();\n if (wa) {\n adapters[\"whatsapp_otp\"] = new WhatsAppOtpAdapter({\n whatsappClient: wa,\n businessName: process.env.BUSINESS_NAME?.trim() ?? \"this app\",\n });\n }\n\n // Email magic-link — requires Resend API key + callback URL\n const resendKey = process.env.RESEND_API_KEY?.trim();\n const callbackUrl = process.env.ATTEST_CALLBACK_URL?.trim();\n if (resendKey && callbackUrl) {\n const fromEmail = process.env.ATTEST_FROM_EMAIL?.trim() ?? \"noreply@example.com\";\n const sender: EmailSender = async ({ to, subject, html, text }) => {\n const res = await fetch(\"https://api.resend.com/emails\", {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${resendKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ from: fromEmail, to, subject, html, text }),\n });\n if (!res.ok) {\n throw new Error(`Resend send failed: ${res.status} ${await res.text()}`);\n }\n };\n adapters[\"email_magic_link\"] = new EmailMagicLinkAdapter({\n sender,\n callbackBaseUrl: callbackUrl,\n businessName: process.env.BUSINESS_NAME?.trim() ?? \"this app\",\n });\n }\n\n if (Object.keys(adapters).length === 0) return null;\n\n const client = new AttestationClient({ signingSecret, adapters });\n return identityAttestTools(client) as ToolSet;\n}\n\nexport function describeIdentityAttestConfig(): string {\n const signingSecret = process.env.ATTEST_SIGNING_SECRET?.trim();\n if (!signingSecret) return \"not configured (set ATTEST_SIGNING_SECRET)\";\n const adapters: string[] = [];\n if (getWhatsAppClient()) adapters.push(\"whatsapp_otp\");\n if (process.env.RESEND_API_KEY?.trim() && process.env.ATTEST_CALLBACK_URL?.trim())\n adapters.push(\"email_magic_link\");\n if (adapters.length === 0)\n return \"configured but no adapters (set WhatsApp creds and/or RESEND_API_KEY + ATTEST_CALLBACK_URL)\";\n return adapters.join(\", \");\n}\n","import {\n InMemoryStateAdapter,\n MercadoPagoClient,\n mercadoPagoTools,\n} from \"@ar-agents/mercadopago\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build @ar-agents/mercadopago tools if MP_ACCESS_TOKEN is set.\n * Returns null when not configured.\n */\nexport function buildMercadoPagoTools(): ToolSet | null {\n const accessToken = process.env.MP_ACCESS_TOKEN?.trim();\n if (!accessToken) return null;\n const client = new MercadoPagoClient({ accessToken });\n const backUrl = process.env.MP_BACK_URL?.trim() ?? \"https://example.com/done\";\n return mercadoPagoTools(client, {\n state: new InMemoryStateAdapter(),\n backUrl,\n }) as ToolSet;\n}\n\nexport function describeMercadoPagoConfig(): string {\n const token = process.env.MP_ACCESS_TOKEN?.trim();\n if (!token) return \"not configured (set MP_ACCESS_TOKEN)\";\n const isTest = token.startsWith(\"TEST-\");\n const backUrl = process.env.MP_BACK_URL?.trim();\n return `${isTest ? \"TEST\" : \"PROD\"} mode${backUrl ? ` · back_url=${backUrl}` : \" · using default back_url\"}`;\n}\n","import {\n AndreaniAdapter,\n CorreoAdapter,\n OcaAdapter,\n shippingTools,\n type ShippingAdapter,\n} from \"@ar-agents/shipping\";\nimport type { ToolSet } from \"ai\";\n\n/**\n * Build the @ar-agents/shipping tool set from environment variables.\n *\n * Each carrier is wired independently — set the env vars for whichever\n * carriers you have credentials for. Without any credentials, the tools\n * return `{ available: false, error }` instead of crashing.\n *\n * # Env vars\n *\n * **Andreani** (full REST API):\n * - `ANDREANI_USERNAME` (required)\n * - `ANDREANI_PASSWORD` (required)\n * - `ANDREANI_CLIENT_NUMBER` (required)\n * - `ANDREANI_ENV` (\"homo\" | \"prod\", default \"prod\")\n *\n * **OCA** (Tarifador only in v0.1):\n * - `OCA_CUIT` (required)\n * - `OCA_OPERATIVA` (required)\n *\n * **Correo Argentino** (public REST, no creds needed):\n * - Auto-wired (no env vars).\n * - Set `AR_AGENTS_CORREO_DISABLED=1` to opt out.\n *\n * **Common**:\n * - `SHIPPING_DEFAULT_CARRIER` (\"andreani\" | \"oca\" | \"correo_argentino\")\n * — when an agent doesn't specify a carrier, this is used.\n */\nexport function buildShippingTools(): ToolSet {\n const adapters: Partial<Record<\"andreani\" | \"oca\" | \"correo_argentino\", ShippingAdapter>> = {};\n\n const andreaniUser = process.env.ANDREANI_USERNAME?.trim();\n const andreaniPass = process.env.ANDREANI_PASSWORD?.trim();\n const andreaniClient = process.env.ANDREANI_CLIENT_NUMBER?.trim();\n if (andreaniUser && andreaniPass && andreaniClient) {\n adapters.andreani = new AndreaniAdapter({\n username: andreaniUser,\n password: andreaniPass,\n clientNumber: andreaniClient,\n env: (process.env.ANDREANI_ENV?.trim() ?? \"prod\") as \"homo\" | \"prod\",\n });\n }\n\n const ocaCuit = process.env.OCA_CUIT?.trim();\n const ocaOperativa = process.env.OCA_OPERATIVA?.trim();\n if (ocaCuit && ocaOperativa) {\n adapters.oca = new OcaAdapter({ cuit: ocaCuit, operativa: ocaOperativa });\n }\n\n if (process.env.AR_AGENTS_CORREO_DISABLED?.trim() !== \"1\") {\n adapters.correo_argentino = new CorreoAdapter();\n }\n\n const defaultCarrier = process.env.SHIPPING_DEFAULT_CARRIER?.trim() as\n | \"andreani\"\n | \"oca\"\n | \"correo_argentino\"\n | undefined;\n\n return shippingTools({\n adapters,\n ...(defaultCarrier ? { defaultCarrier } : {}),\n }) as ToolSet;\n}\n\nexport function describeShippingConfig(): string {\n const enabled: string[] = [];\n if (process.env.ANDREANI_USERNAME?.trim()) enabled.push(\"andreani\");\n if (process.env.OCA_CUIT?.trim()) enabled.push(\"oca\");\n if (process.env.AR_AGENTS_CORREO_DISABLED?.trim() !== \"1\") enabled.push(\"correo_argentino\");\n if (enabled.length === 0) return \"no carriers configurados\";\n return `carriers activos: ${enabled.join(\", \")}`;\n}\n","import { Server } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport {\n CallToolRequestSchema,\n ListToolsRequestSchema,\n} from \"@modelcontextprotocol/sdk/types.js\";\nimport { combineToolSets } from \"./adapter\";\nimport { buildBankingTools, describeBankingConfig } from \"./registries/banking\";\nimport {\n buildFacturacionTools,\n describeFacturacionConfig,\n} from \"./registries/facturacion\";\nimport { buildIdentityTools, describeIdentityConfig } from \"./registries/identity\";\nimport {\n buildIdentityAttestTools,\n describeIdentityAttestConfig,\n} from \"./registries/identity-attest\";\nimport {\n buildMercadoPagoTools,\n describeMercadoPagoConfig,\n} from \"./registries/mercadopago\";\nimport { buildShippingTools, describeShippingConfig } from \"./registries/shipping\";\nimport { buildWhatsAppTools, describeWhatsAppConfig } from \"./registries/whatsapp\";\n\nconst SERVER_NAME = \"ar-agents\";\nconst SERVER_VERSION = \"0.4.0\";\n\n/**\n * Build the @ar-agents/mcp server. Inspects environment variables to decide\n * which package's tools to register. Always registers @ar-agents/identity\n * (algorithm-only `validate_cuit` works without any env vars).\n */\nexport async function createServer(): Promise<{ server: Server; summary: string[] }> {\n const adapter = combineToolSets([\n buildIdentityTools(),\n buildMercadoPagoTools(),\n buildWhatsAppTools(),\n buildIdentityAttestTools(),\n buildBankingTools(),\n buildFacturacionTools(),\n buildShippingTools(),\n ]);\n\n const summary = [\n `${SERVER_NAME}@${SERVER_VERSION} starting with ${adapter.tools.length} tools registered:`,\n ` identity → ${describeIdentityConfig()}`,\n ` mercadopago → ${describeMercadoPagoConfig()}`,\n ` whatsapp → ${describeWhatsAppConfig()}`,\n ` identity-attest → ${describeIdentityAttestConfig()}`,\n ` banking → ${describeBankingConfig()}`,\n ` facturacion → ${describeFacturacionConfig()}`,\n ` shipping → ${describeShippingConfig()}`,\n ];\n\n const server = new Server(\n { name: SERVER_NAME, version: SERVER_VERSION },\n { capabilities: { tools: {} } },\n );\n\n server.setRequestHandler(ListToolsRequestSchema, async () => ({\n tools: adapter.tools,\n }));\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n const { name, arguments: args } = request.params;\n try {\n const result = await adapter.call(name, args ?? {});\n return {\n content: [{ type: \"text\", text: JSON.stringify(result, null, 2) }],\n };\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n return {\n content: [{ type: \"text\", text: `Error calling ${name}: ${msg}` }],\n isError: true,\n };\n }\n });\n\n return { server, summary };\n}\n\n/**\n * Start the MCP server over stdio. Called by the CLI binary.\n * Logs the registered-tools summary to stderr (stdout is reserved for MCP\n * protocol messages).\n */\nexport async function startStdio(): Promise<void> {\n const { server, summary } = await createServer();\n for (const line of summary) console.error(line);\n const transport = new StdioServerTransport();\n await server.connect(transport);\n console.error(\"ar-agents MCP server connected via stdio\");\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ar-agents/mcp",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP (Model Context Protocol) server that exposes the entire @ar-agents/* toolkit (identity, identity-attest, mercadopago, whatsapp, banking, facturacion) to any MCP host (Claude Desktop, Cursor, Codeium, etc.). One install, one config, all AR integrations.",
|
|
3
|
+
"version": "0.4.1",
|
|
4
|
+
"description": "MCP (Model Context Protocol) server that exposes the entire @ar-agents/* toolkit (identity, identity-attest, mercadopago, whatsapp, banking, facturacion, shipping) to any MCP host (Claude Desktop, Cursor, Codeium, etc.). One install, one config, all AR integrations.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
7
7
|
"model-context-protocol",
|
|
@@ -18,7 +18,11 @@
|
|
|
18
18
|
"bcra",
|
|
19
19
|
"facturacion",
|
|
20
20
|
"wsfe",
|
|
21
|
-
"factura-electronica"
|
|
21
|
+
"factura-electronica",
|
|
22
|
+
"shipping",
|
|
23
|
+
"andreani",
|
|
24
|
+
"oca",
|
|
25
|
+
"correo-argentino"
|
|
22
26
|
],
|
|
23
27
|
"license": "MIT",
|
|
24
28
|
"author": "Nazareno Clemente <naza@helloastro.co>",
|
|
@@ -97,6 +101,7 @@
|
|
|
97
101
|
"@ar-agents/identity": "workspace:*",
|
|
98
102
|
"@ar-agents/identity-attest": "workspace:*",
|
|
99
103
|
"@ar-agents/mercadopago": "workspace:*",
|
|
104
|
+
"@ar-agents/shipping": "workspace:*",
|
|
100
105
|
"@ar-agents/whatsapp": "workspace:*",
|
|
101
106
|
"@modelcontextprotocol/sdk": "^1.0.0"
|
|
102
107
|
},
|