@ar-agents/mcp 0.1.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -0
- package/dist/index.cjs +84 -6
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +38 -1
- package/dist/index.d.ts +38 -1
- package/dist/index.js +81 -7
- package/dist/index.js.map +1 -1
- package/package.json +12 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,70 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.3.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- MCP v0.3: ships `@ar-agents/facturacion` as 6th tool registry.
|
|
8
|
+
|
|
9
|
+
The MCP server now exposes 6 packages:
|
|
10
|
+
|
|
11
|
+
- `@ar-agents/identity` (validate_cuit, lookup_cuit_afip)
|
|
12
|
+
- `@ar-agents/identity-attest` (4 attestation tools)
|
|
13
|
+
- `@ar-agents/mercadopago` (41 MP API tools)
|
|
14
|
+
- `@ar-agents/whatsapp` (6 messaging tools)
|
|
15
|
+
- `@ar-agents/banking` (5 CBU/BCRA tools)
|
|
16
|
+
- **NEW: `@ar-agents/facturacion`** (10 WSFE tools — emitir factura, consultar último, catálogos)
|
|
17
|
+
|
|
18
|
+
Auto-detects facturación from env: `AFIP_CUIT_REPRESENTADO` + `AFIP_CERT_PEM/PATH` + `AFIP_KEY_PEM/PATH` (same vars as identity, but the cert must be authorized for the `wsfe` service in addition).
|
|
19
|
+
|
|
20
|
+
Tunables: `WSFE_DEFAULT_PTOVTA`, `WSFE_TIMEOUT_MS`, `WSFE_MAX_RETRIES`.
|
|
21
|
+
|
|
22
|
+
Server version bumped to 0.3.0 in the MCP handshake.
|
|
23
|
+
|
|
24
|
+
## 0.2.0
|
|
25
|
+
|
|
26
|
+
### Minor Changes
|
|
27
|
+
|
|
28
|
+
- MCP v0.2: ships `@ar-agents/banking` as a 5th tool registry.
|
|
29
|
+
|
|
30
|
+
The MCP server now exposes:
|
|
31
|
+
|
|
32
|
+
- `@ar-agents/identity` (validate_cuit, lookup_cuit_afip)
|
|
33
|
+
- `@ar-agents/identity-attest` (issue_attestation, verify_attestation)
|
|
34
|
+
- `@ar-agents/mercadopago` (41 MP API tools)
|
|
35
|
+
- `@ar-agents/whatsapp` (6 messaging tools)
|
|
36
|
+
- **NEW: `@ar-agents/banking` (validate_cbu, lookup_bank_by_code, list_banks, list_psps, lookup_credit_situation)**
|
|
37
|
+
|
|
38
|
+
Banking tools auto-wire to BCRA's public API via `BcraPublicApiAdapter`
|
|
39
|
+
(no auth required). To opt out, set `AR_AGENTS_BCRA_DISABLED=1` in env.
|
|
40
|
+
Tunables: `BCRA_TIMEOUT_MS` (default 30000), `BCRA_MAX_RETRIES` (default 1).
|
|
41
|
+
|
|
42
|
+
Server version bumped from 0.1.0 → 0.2.0 in the MCP handshake.
|
|
43
|
+
|
|
44
|
+
## 0.1.3
|
|
45
|
+
|
|
46
|
+
### Patch Changes
|
|
47
|
+
|
|
48
|
+
- Identity v0.5: production robustez parity with the rest of the toolkit.
|
|
49
|
+
|
|
50
|
+
**WSAA + WSCDC now share a hardened HTTP layer** (`fetchWithRetry`):
|
|
51
|
+
|
|
52
|
+
- Per-request timeouts via `AbortSignal` (default 30s, override with `requestTimeoutMs`).
|
|
53
|
+
- Exponential backoff on 5xx + transient network errors (default 1 retry, override with `maxRetries`).
|
|
54
|
+
- SOAP-aware: HTTP 500 with a real `<Fault>` body is treated as a parseable response (not retried).
|
|
55
|
+
- Optional `onCall` observability hook fires after every WSAA + WSCDC request — `{ label, durationMs, httpStatus, retried, success }` — drop-in for OpenTelemetry / Datadog / console.
|
|
56
|
+
|
|
57
|
+
**`WsaaWscdcAdapter` accepts the new options** (`requestTimeoutMs`, `maxRetries`, `onCall`) and forwards them to both the TA refresh path and the per-CUIT lookup path.
|
|
58
|
+
|
|
59
|
+
**`fetchWithRetry` is exported from `@ar-agents/identity/wsaa`** so multi-step flows (custom AFIP services, A4, A5, etc.) can reuse the same retry/timeout/observability stack.
|
|
60
|
+
|
|
61
|
+
No breaking changes — existing 0.4 setups keep working with the previous (no-retry, no-timeout) defaults until you opt in.
|
|
62
|
+
|
|
63
|
+
The MCP wrapper bumps to pull in the new identity major.
|
|
64
|
+
|
|
65
|
+
- Updated dependencies []:
|
|
66
|
+
- @ar-agents/identity@0.5.0
|
|
67
|
+
|
|
3
68
|
## 0.1.2
|
|
4
69
|
|
|
5
70
|
### Patch Changes
|
package/dist/index.cjs
CHANGED
|
@@ -4,6 +4,8 @@ var index_js = require('@modelcontextprotocol/sdk/server/index.js');
|
|
|
4
4
|
var stdio_js = require('@modelcontextprotocol/sdk/server/stdio.js');
|
|
5
5
|
var types_js = require('@modelcontextprotocol/sdk/types.js');
|
|
6
6
|
var zod = require('zod');
|
|
7
|
+
var banking = require('@ar-agents/banking');
|
|
8
|
+
var facturacion = require('@ar-agents/facturacion');
|
|
7
9
|
var identity = require('@ar-agents/identity');
|
|
8
10
|
var wsaa = require('@ar-agents/identity/wsaa');
|
|
9
11
|
var identityAttest = require('@ar-agents/identity-attest');
|
|
@@ -65,6 +67,74 @@ function combineToolSets(toolSets) {
|
|
|
65
67
|
}
|
|
66
68
|
};
|
|
67
69
|
}
|
|
70
|
+
function buildBankingTools() {
|
|
71
|
+
const bcra = buildBcraAdapter();
|
|
72
|
+
return banking.bankingTools(bcra ? { bcra } : {});
|
|
73
|
+
}
|
|
74
|
+
function buildBcraAdapter() {
|
|
75
|
+
if (process.env.AR_AGENTS_BCRA_DISABLED?.trim() === "1") return void 0;
|
|
76
|
+
const timeout = Number(process.env.BCRA_TIMEOUT_MS?.trim() ?? "30000");
|
|
77
|
+
const retries = Number(process.env.BCRA_MAX_RETRIES?.trim() ?? "1");
|
|
78
|
+
return new banking.BcraPublicApiAdapter({
|
|
79
|
+
requestTimeoutMs: Number.isFinite(timeout) ? timeout : 3e4,
|
|
80
|
+
maxRetries: Number.isFinite(retries) ? retries : 1
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function describeBankingConfig() {
|
|
84
|
+
const bcraDisabled = process.env.AR_AGENTS_BCRA_DISABLED?.trim() === "1";
|
|
85
|
+
return bcraDisabled ? "validate_cbu, lookup_bank_by_code, list_banks, list_psps (BCRA disabled)" : "validate_cbu, lookup_bank_by_code, list_banks, list_psps, lookup_credit_situation (BCRA public API)";
|
|
86
|
+
}
|
|
87
|
+
function buildFacturacionTools() {
|
|
88
|
+
const wsfe = buildWsfeClient();
|
|
89
|
+
const defaultPtoVta = Number(
|
|
90
|
+
process.env.WSFE_DEFAULT_PTOVTA?.trim() ?? "0"
|
|
91
|
+
);
|
|
92
|
+
const opts = {};
|
|
93
|
+
if (wsfe) opts.wsfe = wsfe;
|
|
94
|
+
if (Number.isFinite(defaultPtoVta) && defaultPtoVta > 0)
|
|
95
|
+
opts.defaultPtoVta = defaultPtoVta;
|
|
96
|
+
return facturacion.facturacionTools(opts);
|
|
97
|
+
}
|
|
98
|
+
function buildWsfeClient() {
|
|
99
|
+
const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();
|
|
100
|
+
if (!cuit) return void 0;
|
|
101
|
+
const env = process.env.AFIP_ENV?.trim() ?? "prod";
|
|
102
|
+
const timeout = Number(process.env.WSFE_TIMEOUT_MS?.trim() ?? "30000");
|
|
103
|
+
const retries = Number(process.env.WSFE_MAX_RETRIES?.trim() ?? "1");
|
|
104
|
+
const certPem = process.env.AFIP_CERT_PEM;
|
|
105
|
+
const keyPem = process.env.AFIP_KEY_PEM;
|
|
106
|
+
if (certPem && keyPem) {
|
|
107
|
+
return new facturacion.WsfeClient({
|
|
108
|
+
certPem,
|
|
109
|
+
keyPem,
|
|
110
|
+
cuit,
|
|
111
|
+
env,
|
|
112
|
+
requestTimeoutMs: Number.isFinite(timeout) ? timeout : 3e4,
|
|
113
|
+
maxRetries: Number.isFinite(retries) ? retries : 1
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
const certPath = process.env.AFIP_CERT_PATH?.trim();
|
|
117
|
+
const keyPath = process.env.AFIP_KEY_PATH?.trim();
|
|
118
|
+
if (certPath && keyPath) {
|
|
119
|
+
return new facturacion.WsfeClient({
|
|
120
|
+
certPath,
|
|
121
|
+
keyPath,
|
|
122
|
+
cuit,
|
|
123
|
+
env,
|
|
124
|
+
requestTimeoutMs: Number.isFinite(timeout) ? timeout : 3e4,
|
|
125
|
+
maxRetries: Number.isFinite(retries) ? retries : 1
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
return void 0;
|
|
129
|
+
}
|
|
130
|
+
function describeFacturacionConfig() {
|
|
131
|
+
const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();
|
|
132
|
+
if (!cuit) return "no configurado (faltan AFIP_CUIT_REPRESENTADO + cert)";
|
|
133
|
+
const certConfigured = !!process.env.AFIP_CERT_PEM || !!process.env.AFIP_CERT_PATH;
|
|
134
|
+
if (!certConfigured) return "no configurado (falta AFIP_CERT_PEM o AFIP_CERT_PATH)";
|
|
135
|
+
const ptovta = process.env.WSFE_DEFAULT_PTOVTA?.trim();
|
|
136
|
+
return `WSFE habilitado (CUIT ${cuit}${ptovta ? `, PtoVta ${ptovta}` : ""})`;
|
|
137
|
+
}
|
|
68
138
|
function buildIdentityTools() {
|
|
69
139
|
const afip = buildAfipAdapter();
|
|
70
140
|
return identity.identityTools(afip ? { afip } : {});
|
|
@@ -181,20 +251,24 @@ function describeMercadoPagoConfig() {
|
|
|
181
251
|
|
|
182
252
|
// src/server.ts
|
|
183
253
|
var SERVER_NAME = "ar-agents";
|
|
184
|
-
var SERVER_VERSION = "0.
|
|
254
|
+
var SERVER_VERSION = "0.3.0";
|
|
185
255
|
async function createServer() {
|
|
186
256
|
const adapter = combineToolSets([
|
|
187
257
|
buildIdentityTools(),
|
|
188
258
|
buildMercadoPagoTools(),
|
|
189
259
|
buildWhatsAppTools(),
|
|
190
|
-
buildIdentityAttestTools()
|
|
260
|
+
buildIdentityAttestTools(),
|
|
261
|
+
buildBankingTools(),
|
|
262
|
+
buildFacturacionTools()
|
|
191
263
|
]);
|
|
192
264
|
const summary = [
|
|
193
265
|
`${SERVER_NAME}@${SERVER_VERSION} starting with ${adapter.tools.length} tools registered:`,
|
|
194
|
-
` identity
|
|
195
|
-
` mercadopago
|
|
196
|
-
` whatsapp
|
|
197
|
-
` identity-attest \u2192 ${describeIdentityAttestConfig()}
|
|
266
|
+
` identity \u2192 ${describeIdentityConfig()}`,
|
|
267
|
+
` mercadopago \u2192 ${describeMercadoPagoConfig()}`,
|
|
268
|
+
` whatsapp \u2192 ${describeWhatsAppConfig()}`,
|
|
269
|
+
` identity-attest \u2192 ${describeIdentityAttestConfig()}`,
|
|
270
|
+
` banking \u2192 ${describeBankingConfig()}`,
|
|
271
|
+
` facturacion \u2192 ${describeFacturacionConfig()}`
|
|
198
272
|
];
|
|
199
273
|
const server = new index_js.Server(
|
|
200
274
|
{ name: SERVER_NAME, version: SERVER_VERSION },
|
|
@@ -229,12 +303,16 @@ async function startStdio() {
|
|
|
229
303
|
}
|
|
230
304
|
|
|
231
305
|
exports.adaptToolSetToMcp = adaptToolSetToMcp;
|
|
306
|
+
exports.buildBankingTools = buildBankingTools;
|
|
307
|
+
exports.buildFacturacionTools = buildFacturacionTools;
|
|
232
308
|
exports.buildIdentityAttestTools = buildIdentityAttestTools;
|
|
233
309
|
exports.buildIdentityTools = buildIdentityTools;
|
|
234
310
|
exports.buildMercadoPagoTools = buildMercadoPagoTools;
|
|
235
311
|
exports.buildWhatsAppTools = buildWhatsAppTools;
|
|
236
312
|
exports.combineToolSets = combineToolSets;
|
|
237
313
|
exports.createServer = createServer;
|
|
314
|
+
exports.describeBankingConfig = describeBankingConfig;
|
|
315
|
+
exports.describeFacturacionConfig = describeFacturacionConfig;
|
|
238
316
|
exports.describeIdentityAttestConfig = describeIdentityAttestConfig;
|
|
239
317
|
exports.describeIdentityConfig = describeIdentityConfig;
|
|
240
318
|
exports.describeMercadoPagoConfig = describeMercadoPagoConfig;
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapter.ts","../src/registries/identity.ts","../src/registries/whatsapp.ts","../src/registries/identity-attest.ts","../src/registries/mercadopago.ts","../src/server.ts"],"names":["z","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 { 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 { 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.1.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 ]);\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 ];\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/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"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -81,4 +81,41 @@ declare function getWhatsAppClient(): WhatsAppClient | null;
|
|
|
81
81
|
declare function buildIdentityAttestTools(): ToolSet | null;
|
|
82
82
|
declare function describeIdentityAttestConfig(): string;
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
/**
|
|
85
|
+
* Build the @ar-agents/banking tool set.
|
|
86
|
+
*
|
|
87
|
+
* Pure-algorithm tools (validate_cbu, lookup_bank_by_code, list_banks,
|
|
88
|
+
* list_psps) are ALWAYS available — no env vars required.
|
|
89
|
+
*
|
|
90
|
+
* The BCRA Central de Deudores tool is wired to `BcraPublicApiAdapter`
|
|
91
|
+
* by default (BCRA's public REST API needs no auth). To opt out, set
|
|
92
|
+
* `AR_AGENTS_BCRA_DISABLED=1` in env — the tool then returns
|
|
93
|
+
* `{ available: false, error: "<setup instructions>" }`.
|
|
94
|
+
*/
|
|
95
|
+
declare function buildBankingTools(): ToolSet;
|
|
96
|
+
declare function describeBankingConfig(): string;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Build the @ar-agents/facturacion tool set from environment variables.
|
|
100
|
+
*
|
|
101
|
+
* AFIP cert + key + CUIT required (same as @ar-agents/identity, but the
|
|
102
|
+
* service must be authorized for `wsfe` in addition to whatever padron
|
|
103
|
+
* service identity uses). When the env vars are missing, the tools return
|
|
104
|
+
* `{ available: false, error: <setup instructions> }` instead of crashing —
|
|
105
|
+
* MCP host can show the user what to set.
|
|
106
|
+
*
|
|
107
|
+
* # Env vars
|
|
108
|
+
*
|
|
109
|
+
* - `AFIP_CUIT_REPRESENTADO` (required)
|
|
110
|
+
* - `AFIP_CERT_PEM` + `AFIP_KEY_PEM` (preferred for serverless / MCP) OR
|
|
111
|
+
* - `AFIP_CERT_PATH` + `AFIP_KEY_PATH` (for local dev)
|
|
112
|
+
* - `AFIP_ENV` — "homo" | "prod" (default "prod")
|
|
113
|
+
* - `WSFE_DEFAULT_PTOVTA` — default punto de venta (optional, recommended for
|
|
114
|
+
* single-PtoVta SaaS so agents don't have to remember it)
|
|
115
|
+
* - `WSFE_TIMEOUT_MS` — default 30000
|
|
116
|
+
* - `WSFE_MAX_RETRIES` — default 1
|
|
117
|
+
*/
|
|
118
|
+
declare function buildFacturacionTools(): ToolSet;
|
|
119
|
+
declare function describeFacturacionConfig(): string;
|
|
120
|
+
|
|
121
|
+
export { type McpAdapter, type McpTool, adaptToolSetToMcp, buildBankingTools, buildFacturacionTools, buildIdentityAttestTools, buildIdentityTools, buildMercadoPagoTools, buildWhatsAppTools, combineToolSets, createServer, describeBankingConfig, describeFacturacionConfig, describeIdentityAttestConfig, describeIdentityConfig, describeMercadoPagoConfig, describeWhatsAppConfig, getWhatsAppClient, startStdio };
|
package/dist/index.d.ts
CHANGED
|
@@ -81,4 +81,41 @@ declare function getWhatsAppClient(): WhatsAppClient | null;
|
|
|
81
81
|
declare function buildIdentityAttestTools(): ToolSet | null;
|
|
82
82
|
declare function describeIdentityAttestConfig(): string;
|
|
83
83
|
|
|
84
|
-
|
|
84
|
+
/**
|
|
85
|
+
* Build the @ar-agents/banking tool set.
|
|
86
|
+
*
|
|
87
|
+
* Pure-algorithm tools (validate_cbu, lookup_bank_by_code, list_banks,
|
|
88
|
+
* list_psps) are ALWAYS available — no env vars required.
|
|
89
|
+
*
|
|
90
|
+
* The BCRA Central de Deudores tool is wired to `BcraPublicApiAdapter`
|
|
91
|
+
* by default (BCRA's public REST API needs no auth). To opt out, set
|
|
92
|
+
* `AR_AGENTS_BCRA_DISABLED=1` in env — the tool then returns
|
|
93
|
+
* `{ available: false, error: "<setup instructions>" }`.
|
|
94
|
+
*/
|
|
95
|
+
declare function buildBankingTools(): ToolSet;
|
|
96
|
+
declare function describeBankingConfig(): string;
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* Build the @ar-agents/facturacion tool set from environment variables.
|
|
100
|
+
*
|
|
101
|
+
* AFIP cert + key + CUIT required (same as @ar-agents/identity, but the
|
|
102
|
+
* service must be authorized for `wsfe` in addition to whatever padron
|
|
103
|
+
* service identity uses). When the env vars are missing, the tools return
|
|
104
|
+
* `{ available: false, error: <setup instructions> }` instead of crashing —
|
|
105
|
+
* MCP host can show the user what to set.
|
|
106
|
+
*
|
|
107
|
+
* # Env vars
|
|
108
|
+
*
|
|
109
|
+
* - `AFIP_CUIT_REPRESENTADO` (required)
|
|
110
|
+
* - `AFIP_CERT_PEM` + `AFIP_KEY_PEM` (preferred for serverless / MCP) OR
|
|
111
|
+
* - `AFIP_CERT_PATH` + `AFIP_KEY_PATH` (for local dev)
|
|
112
|
+
* - `AFIP_ENV` — "homo" | "prod" (default "prod")
|
|
113
|
+
* - `WSFE_DEFAULT_PTOVTA` — default punto de venta (optional, recommended for
|
|
114
|
+
* single-PtoVta SaaS so agents don't have to remember it)
|
|
115
|
+
* - `WSFE_TIMEOUT_MS` — default 30000
|
|
116
|
+
* - `WSFE_MAX_RETRIES` — default 1
|
|
117
|
+
*/
|
|
118
|
+
declare function buildFacturacionTools(): ToolSet;
|
|
119
|
+
declare function describeFacturacionConfig(): string;
|
|
120
|
+
|
|
121
|
+
export { type McpAdapter, type McpTool, adaptToolSetToMcp, buildBankingTools, buildFacturacionTools, buildIdentityAttestTools, buildIdentityTools, buildMercadoPagoTools, buildWhatsAppTools, combineToolSets, createServer, describeBankingConfig, describeFacturacionConfig, describeIdentityAttestConfig, describeIdentityConfig, describeMercadoPagoConfig, describeWhatsAppConfig, getWhatsAppClient, startStdio };
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,8 @@ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
|
2
2
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
3
|
import { ListToolsRequestSchema, CallToolRequestSchema } from '@modelcontextprotocol/sdk/types.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
+
import { bankingTools, BcraPublicApiAdapter } from '@ar-agents/banking';
|
|
6
|
+
import { facturacionTools, WsfeClient } from '@ar-agents/facturacion';
|
|
5
7
|
import { identityTools } from '@ar-agents/identity';
|
|
6
8
|
import { WsaaWscdcAfipPadronAdapter } from '@ar-agents/identity/wsaa';
|
|
7
9
|
import { WhatsAppOtpAdapter, EmailMagicLinkAdapter, AttestationClient, identityAttestTools } from '@ar-agents/identity-attest';
|
|
@@ -63,6 +65,74 @@ function combineToolSets(toolSets) {
|
|
|
63
65
|
}
|
|
64
66
|
};
|
|
65
67
|
}
|
|
68
|
+
function buildBankingTools() {
|
|
69
|
+
const bcra = buildBcraAdapter();
|
|
70
|
+
return bankingTools(bcra ? { bcra } : {});
|
|
71
|
+
}
|
|
72
|
+
function buildBcraAdapter() {
|
|
73
|
+
if (process.env.AR_AGENTS_BCRA_DISABLED?.trim() === "1") return void 0;
|
|
74
|
+
const timeout = Number(process.env.BCRA_TIMEOUT_MS?.trim() ?? "30000");
|
|
75
|
+
const retries = Number(process.env.BCRA_MAX_RETRIES?.trim() ?? "1");
|
|
76
|
+
return new BcraPublicApiAdapter({
|
|
77
|
+
requestTimeoutMs: Number.isFinite(timeout) ? timeout : 3e4,
|
|
78
|
+
maxRetries: Number.isFinite(retries) ? retries : 1
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
function describeBankingConfig() {
|
|
82
|
+
const bcraDisabled = process.env.AR_AGENTS_BCRA_DISABLED?.trim() === "1";
|
|
83
|
+
return bcraDisabled ? "validate_cbu, lookup_bank_by_code, list_banks, list_psps (BCRA disabled)" : "validate_cbu, lookup_bank_by_code, list_banks, list_psps, lookup_credit_situation (BCRA public API)";
|
|
84
|
+
}
|
|
85
|
+
function buildFacturacionTools() {
|
|
86
|
+
const wsfe = buildWsfeClient();
|
|
87
|
+
const defaultPtoVta = Number(
|
|
88
|
+
process.env.WSFE_DEFAULT_PTOVTA?.trim() ?? "0"
|
|
89
|
+
);
|
|
90
|
+
const opts = {};
|
|
91
|
+
if (wsfe) opts.wsfe = wsfe;
|
|
92
|
+
if (Number.isFinite(defaultPtoVta) && defaultPtoVta > 0)
|
|
93
|
+
opts.defaultPtoVta = defaultPtoVta;
|
|
94
|
+
return facturacionTools(opts);
|
|
95
|
+
}
|
|
96
|
+
function buildWsfeClient() {
|
|
97
|
+
const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();
|
|
98
|
+
if (!cuit) return void 0;
|
|
99
|
+
const env = process.env.AFIP_ENV?.trim() ?? "prod";
|
|
100
|
+
const timeout = Number(process.env.WSFE_TIMEOUT_MS?.trim() ?? "30000");
|
|
101
|
+
const retries = Number(process.env.WSFE_MAX_RETRIES?.trim() ?? "1");
|
|
102
|
+
const certPem = process.env.AFIP_CERT_PEM;
|
|
103
|
+
const keyPem = process.env.AFIP_KEY_PEM;
|
|
104
|
+
if (certPem && keyPem) {
|
|
105
|
+
return new WsfeClient({
|
|
106
|
+
certPem,
|
|
107
|
+
keyPem,
|
|
108
|
+
cuit,
|
|
109
|
+
env,
|
|
110
|
+
requestTimeoutMs: Number.isFinite(timeout) ? timeout : 3e4,
|
|
111
|
+
maxRetries: Number.isFinite(retries) ? retries : 1
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
const certPath = process.env.AFIP_CERT_PATH?.trim();
|
|
115
|
+
const keyPath = process.env.AFIP_KEY_PATH?.trim();
|
|
116
|
+
if (certPath && keyPath) {
|
|
117
|
+
return new WsfeClient({
|
|
118
|
+
certPath,
|
|
119
|
+
keyPath,
|
|
120
|
+
cuit,
|
|
121
|
+
env,
|
|
122
|
+
requestTimeoutMs: Number.isFinite(timeout) ? timeout : 3e4,
|
|
123
|
+
maxRetries: Number.isFinite(retries) ? retries : 1
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
return void 0;
|
|
127
|
+
}
|
|
128
|
+
function describeFacturacionConfig() {
|
|
129
|
+
const cuit = process.env.AFIP_CUIT_REPRESENTADO?.trim();
|
|
130
|
+
if (!cuit) return "no configurado (faltan AFIP_CUIT_REPRESENTADO + cert)";
|
|
131
|
+
const certConfigured = !!process.env.AFIP_CERT_PEM || !!process.env.AFIP_CERT_PATH;
|
|
132
|
+
if (!certConfigured) return "no configurado (falta AFIP_CERT_PEM o AFIP_CERT_PATH)";
|
|
133
|
+
const ptovta = process.env.WSFE_DEFAULT_PTOVTA?.trim();
|
|
134
|
+
return `WSFE habilitado (CUIT ${cuit}${ptovta ? `, PtoVta ${ptovta}` : ""})`;
|
|
135
|
+
}
|
|
66
136
|
function buildIdentityTools() {
|
|
67
137
|
const afip = buildAfipAdapter();
|
|
68
138
|
return identityTools(afip ? { afip } : {});
|
|
@@ -179,20 +249,24 @@ function describeMercadoPagoConfig() {
|
|
|
179
249
|
|
|
180
250
|
// src/server.ts
|
|
181
251
|
var SERVER_NAME = "ar-agents";
|
|
182
|
-
var SERVER_VERSION = "0.
|
|
252
|
+
var SERVER_VERSION = "0.3.0";
|
|
183
253
|
async function createServer() {
|
|
184
254
|
const adapter = combineToolSets([
|
|
185
255
|
buildIdentityTools(),
|
|
186
256
|
buildMercadoPagoTools(),
|
|
187
257
|
buildWhatsAppTools(),
|
|
188
|
-
buildIdentityAttestTools()
|
|
258
|
+
buildIdentityAttestTools(),
|
|
259
|
+
buildBankingTools(),
|
|
260
|
+
buildFacturacionTools()
|
|
189
261
|
]);
|
|
190
262
|
const summary = [
|
|
191
263
|
`${SERVER_NAME}@${SERVER_VERSION} starting with ${adapter.tools.length} tools registered:`,
|
|
192
|
-
` identity
|
|
193
|
-
` mercadopago
|
|
194
|
-
` whatsapp
|
|
195
|
-
` identity-attest \u2192 ${describeIdentityAttestConfig()}
|
|
264
|
+
` identity \u2192 ${describeIdentityConfig()}`,
|
|
265
|
+
` mercadopago \u2192 ${describeMercadoPagoConfig()}`,
|
|
266
|
+
` whatsapp \u2192 ${describeWhatsAppConfig()}`,
|
|
267
|
+
` identity-attest \u2192 ${describeIdentityAttestConfig()}`,
|
|
268
|
+
` banking \u2192 ${describeBankingConfig()}`,
|
|
269
|
+
` facturacion \u2192 ${describeFacturacionConfig()}`
|
|
196
270
|
];
|
|
197
271
|
const server = new Server(
|
|
198
272
|
{ name: SERVER_NAME, version: SERVER_VERSION },
|
|
@@ -226,6 +300,6 @@ async function startStdio() {
|
|
|
226
300
|
console.error("ar-agents MCP server connected via stdio");
|
|
227
301
|
}
|
|
228
302
|
|
|
229
|
-
export { adaptToolSetToMcp, buildIdentityAttestTools, buildIdentityTools, buildMercadoPagoTools, buildWhatsAppTools, combineToolSets, createServer, describeIdentityAttestConfig, describeIdentityConfig, describeMercadoPagoConfig, describeWhatsAppConfig, getWhatsAppClient, startStdio };
|
|
303
|
+
export { adaptToolSetToMcp, buildBankingTools, buildFacturacionTools, buildIdentityAttestTools, buildIdentityTools, buildMercadoPagoTools, buildWhatsAppTools, combineToolSets, createServer, describeBankingConfig, describeFacturacionConfig, describeIdentityAttestConfig, describeIdentityConfig, describeMercadoPagoConfig, describeWhatsAppConfig, getWhatsAppClient, startStdio };
|
|
230
304
|
//# sourceMappingURL=index.js.map
|
|
231
305
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/adapter.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 { 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 { 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.1.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 ]);\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 ];\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/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"]}
|
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) to any MCP host (Claude Desktop, Cursor, Codeium, etc.). One install, one config, all AR integrations.",
|
|
3
|
+
"version": "0.3.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.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"mcp",
|
|
7
7
|
"model-context-protocol",
|
|
@@ -10,8 +10,15 @@
|
|
|
10
10
|
"ar-agents",
|
|
11
11
|
"argentina",
|
|
12
12
|
"afip",
|
|
13
|
+
"arca",
|
|
13
14
|
"mercadopago",
|
|
14
|
-
"whatsapp"
|
|
15
|
+
"whatsapp",
|
|
16
|
+
"banking",
|
|
17
|
+
"cbu",
|
|
18
|
+
"bcra",
|
|
19
|
+
"facturacion",
|
|
20
|
+
"wsfe",
|
|
21
|
+
"factura-electronica"
|
|
15
22
|
],
|
|
16
23
|
"license": "MIT",
|
|
17
24
|
"author": "Nazareno Clemente <naza@helloastro.co>",
|
|
@@ -85,6 +92,8 @@
|
|
|
85
92
|
}
|
|
86
93
|
],
|
|
87
94
|
"dependencies": {
|
|
95
|
+
"@ar-agents/banking": "workspace:*",
|
|
96
|
+
"@ar-agents/facturacion": "workspace:*",
|
|
88
97
|
"@ar-agents/identity": "workspace:*",
|
|
89
98
|
"@ar-agents/identity-attest": "workspace:*",
|
|
90
99
|
"@ar-agents/mercadopago": "workspace:*",
|