@ar-agents/mercadopago 0.13.0 → 0.15.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.
@@ -1,156 +1,154 @@
1
1
  {
2
2
  "$schema": "https://github.com/ar-agents/ar-agents/blob/main/tools-manifest.schema.json",
3
3
  "package": "@ar-agents/mercadopago",
4
- "version": "0.11.0",
4
+ "version": "0.15.0",
5
5
  "factory": "mercadoPagoTools",
6
6
  "tools": [
7
7
  {
8
- "name": "create_subscription",
9
- "summary": "Create a Mercado Pago recurring subscription. Returns the init_point URL where the customer must complete the FIRST payment with their card and CVV.",
10
- "purity": "io",
11
- "sideEffects": ["Creates a preapproval on MP", "Writes to SubscriptionStateAdapter"],
12
- "constraints": {
13
- "envVars": ["MP_ACCESS_TOKEN (TEST- for sandbox, APP_USR- for prod)"],
14
- "externalIO": ["MP REST API"],
15
- "latencyMs": "200-600",
16
- "costPerCall": "$0 (creation is free; merchant pays per-transaction fee on auto-charges)"
17
- },
8
+ "name": "analyze_payment_3ds",
9
+ "description": "Pure local analyzer for a Payment's 3DS (Strong Customer Authentication) state. Pass a payment_id (string) and the tool fetches the Payment then derives { status: 'not_required'|'frictionless'|'challe"
10
+ },
11
+ {
12
+ "name": "calculate_installments",
13
+ "description": "Calculate cuotas (installments) options for a given amount. THE killer Argentine feature — returns options like '12 cuotas sin interés de $X' (recommended_message field) which you should surface VERBA",
18
14
  "input": {
19
- "customer_email": "string (email; cannot equal seller email)",
20
- "amount_ars": "number (positive)",
21
- "frequency_months": "number (1-12)",
22
- "reason": "string (3-120 chars)",
23
- "external_reference": "string | undefined"
15
+ "amount_ars": "number positive",
16
+ "payment_method_id": "string? (e.g. visa, master, naranja)",
17
+ "bin": "string? 6-8 chars (first digits of card for issuer-specific promos)"
24
18
  },
25
19
  "output": {
26
- "subscription_id": "string",
27
- "status": "pending",
28
- "init_point_url": "string (URL the buyer must visit to complete first payment)",
29
- "next_step": "string (instructions for the agent)"
30
- },
31
- "whenToUse": ["User asks to subscribe a customer to a recurring plan"],
32
- "whenNotToUse": [
33
- "User wants a one-off payment — Subscriptions API is recurring-only",
34
- "User wants to charge a specific amount that varies per cycle — fix the amount or use a different MP product"
35
- ],
36
- "errorPatterns": [
37
- {
38
- "shape": "MercadoPagoBackUrlInvalidError",
39
- "meaning": "App passed a non-HTTPS backUrl (e.g., http://localhost). MP rejects all non-HTTPS even in sandbox.",
40
- "recovery": "App misconfiguration — surface to user as 'application error', not a user-fixable problem."
41
- },
42
- {
43
- "shape": "MercadoPagoSelfPaymentError",
44
- "meaning": "customer_email equals the seller account's email. MP refuses self-payment on subscriptions.",
45
- "recovery": "Tell user to use a different buyer email."
46
- },
47
- {
48
- "shape": "MercadoPagoAccountTypeMismatchError",
49
- "meaning": "Misleading MP error 'Cannot operate between different countries'. Real cause: seller token is real-account-in-test-mode but buyer email is a test_user_*@testuser.com AFIP test user.",
50
- "recovery": "Use a real consumer email as the buyer."
51
- }
52
- ]
20
+ "amount": "number",
21
+ "offers": "array of {payment_method_id, payment_type_id, issuer_name, options: [{installments, installment_amount, total_amount, installment_rate, recommended_message}]}"
22
+ }
53
23
  },
54
24
  {
55
- "name": "get_subscription_status",
56
- "summary": "Check the current status of a Mercado Pago subscription. Use to confirm the customer completed the first payment or to inspect next charge date.",
57
- "purity": "io",
58
- "sideEffects": [],
59
- "constraints": {
60
- "envVars": ["MP_ACCESS_TOKEN"],
61
- "externalIO": ["MP REST API"],
62
- "latencyMs": "200-500",
63
- "costPerCall": "$0"
25
+ "name": "cancel_order",
26
+ "description": "Cancel an Order. Releases any auth-holds and marks the Order as canceled. For orders that have already been CAPTURED, use refund_payment instead cancel only works pre-capture. **IRREVERSIBLE — confi",
27
+ "input": {
28
+ "order_id": "string"
64
29
  },
65
- "input": { "subscription_id": "string (MP preapproval ID)" },
66
30
  "output": {
67
- "subscription_id": "string",
68
- "status": "pending | authorized | paused | cancelled",
69
- "payer_email": "string",
70
- "amount": "number",
71
- "currency": "ARS | USD | ...",
72
- "next_payment_date": "ISO date | null",
73
- "last_webhook_status": "string | null (cached from latest webhook)",
74
- "last_webhook_at": "ISO date | null"
31
+ "order_id": "string",
32
+ "status": "string"
33
+ }
34
+ },
35
+ {
36
+ "name": "cancel_payment",
37
+ "description": "Cancel a pending or in_process payment (only works before approval). Once approved, use refund_payment instead. Common use: cancel an unpaid ticket payment that's still pending. **IRREVERSIBLE — confi",
38
+ "input": {
39
+ "payment_id": "string"
75
40
  },
76
- "whenToUse": [
77
- "User asks if a customer paid",
78
- "User asks when the next charge will happen",
79
- "Need to verify subscription is still authorized after potential webhook events"
80
- ],
81
- "whenNotToUse": ["You haven't created a subscription yet — no ID to query"]
41
+ "output": {
42
+ "payment_id": "string",
43
+ "status": "cancelled",
44
+ "message": "string"
45
+ }
46
+ },
47
+ {
48
+ "name": "cancel_point_payment_intent",
49
+ "description": "Cancel an OPEN point payment intent before the buyer interacts with the device. ONLY WORKS while state='OPEN' — once the buyer taps, you can't cancel; refund_payment after the fact instead. **IRREVERS"
50
+ },
51
+ {
52
+ "name": "cancel_qr_payment",
53
+ "description": "Cancel a pending QR order on a POS. Necessary if the buyer never scans — otherwise the next create_qr_payment on the same POS returns 409. **IRREVERSIBLE — but low-stakes since the QR has not been pai"
82
54
  },
83
55
  {
84
56
  "name": "cancel_subscription",
85
- "summary": "Cancel an active Mercado Pago subscription. IRREVERSIBLE — confirm with user before calling.",
86
- "purity": "io",
87
- "sideEffects": ["Mutates MP preapproval state to 'cancelled'", "Writes to SubscriptionStateAdapter"],
88
- "constraints": {
89
- "envVars": ["MP_ACCESS_TOKEN"],
90
- "externalIO": ["MP REST API"],
91
- "latencyMs": "200-500",
92
- "costPerCall": "$0"
57
+ "description": "Cancel an active Mercado Pago subscription. After cancellation, MP will not charge the customer again. This action is irreversible — confirm with the user before calling.",
58
+ "input": {
59
+ "subscription_id": "string"
93
60
  },
94
- "input": { "subscription_id": "string" },
95
61
  "output": {
96
62
  "subscription_id": "string",
97
63
  "status": "cancelled",
98
64
  "message": "string"
65
+ }
66
+ },
67
+ {
68
+ "name": "capture_order",
69
+ "description": "Capture a previously-authorized Order (only for orders created with capture_mode='manual'). Captures up to the originally-authorized amount; pass amount for partial capture. Common use: ride-share mar",
70
+ "input": {
71
+ "order_id": "string",
72
+ "amount": "number?"
99
73
  },
100
- "whenToUse": ["User explicitly confirms they want to cancel a subscription"],
101
- "whenNotToUse": [
102
- "User asked to pause temporarily — use pause_subscription instead",
103
- "Without explicit user confirmation — this tool's description triggers a confirm-before-call turn in Claude Sonnet 4.6+; honor that"
104
- ],
105
- "irreversibility": "MP cannot reactivate a cancelled subscription. Create a fresh one to resume billing."
74
+ "output": {
75
+ "order_id": "string",
76
+ "status": "string",
77
+ "captured_amount": "number"
78
+ }
106
79
  },
107
80
  {
108
- "name": "pause_subscription",
109
- "summary": "Pause an authorized subscription. Charges stop until resumed.",
110
- "purity": "io",
111
- "sideEffects": ["Mutates MP preapproval state to 'paused'", "Writes to SubscriptionStateAdapter"],
112
- "constraints": {
113
- "envVars": ["MP_ACCESS_TOKEN"],
114
- "externalIO": ["MP REST API"],
115
- "latencyMs": "200-500",
116
- "costPerCall": "$0"
81
+ "name": "capture_payment",
82
+ "description": "Capture an authorized credit-card payment that was created with capture=false. Use for hold-then-capture flows (e.g., authorize on order, capture on shipment). Optional partial amount. **MOVES MONEY —",
83
+ "input": {
84
+ "payment_id": "string",
85
+ "amount_ars": "number? (partial capture)"
117
86
  },
118
- "input": { "subscription_id": "string" },
119
- "output": { "subscription_id": "string", "status": "paused", "message": "string" },
120
- "whenToUse": ["User wants to pause billing temporarily but keep the subscription"],
121
- "whenNotToUse": [
122
- "Subscription is in pending status (not yet authorized) — pause only works on authorized subs"
123
- ]
87
+ "output": {
88
+ "payment_id": "string",
89
+ "status": "approved",
90
+ "amount": "number"
91
+ }
124
92
  },
125
93
  {
126
- "name": "resume_subscription",
127
- "summary": "Resume a paused subscription. Charges resume on next scheduled date.",
128
- "purity": "io",
129
- "sideEffects": ["Mutates MP preapproval state to 'authorized'", "Writes to SubscriptionStateAdapter"],
130
- "constraints": {
131
- "envVars": ["MP_ACCESS_TOKEN"],
132
- "externalIO": ["MP REST API"],
133
- "latencyMs": "200-500",
134
- "costPerCall": "$0"
94
+ "name": "charge_saved_card",
95
+ "description": "Charge a previously-saved card for a returning customer. Requires customer_id + card_id (from list_customer_cards) AND a fresh CVV the user provides this session. AR Mercado Pago does NOT support CVV-"
96
+ },
97
+ {
98
+ "name": "compute_marketplace_fee",
99
+ "description": "PURE HELPER (no network) — given a transaction amount + fee rule (% or flat ARS, with optional min/max floors), returns the exact `marketplace_fee` value in ARS to pass to create_order or create_payme"
100
+ },
101
+ {
102
+ "name": "confirm_3ds_challenge",
103
+ "description": "After the buyer completes a 3DS challenge (redirected back from challengeUrl), call this to poll MP and confirm whether the payment is now resolved. Polls get_payment up to N times with exponential ba"
104
+ },
105
+ {
106
+ "name": "create_customer",
107
+ "description": "Create a Mercado Pago customer record so the buyer can save cards for future charges. Idempotent on email — if a customer with that email exists, MP returns it instead of creating a duplicate. Use fin",
108
+ "input": {
109
+ "email": "string",
110
+ "first_name": "string?",
111
+ "last_name": "string?",
112
+ "identification": "{type: DNI|CUIT|CUIL, number: string}?"
135
113
  },
136
- "input": { "subscription_id": "string" },
137
- "output": { "subscription_id": "string", "status": "authorized", "message": "string" },
138
- "whenToUse": ["User wants to reactivate a previously-paused subscription"],
139
- "whenNotToUse": [
140
- "Subscription is cancelled — MP doesn't allow resuming cancelled subs (throws MercadoPagoAuthorizeForbiddenError). Create a new subscription instead."
141
- ]
114
+ "output": {
115
+ "customer_id": "string",
116
+ "email": "string",
117
+ "first_name": "string|null",
118
+ "last_name": "string|null",
119
+ "date_created": "ISO"
120
+ }
142
121
  },
143
122
  {
144
- "name": "create_payment",
145
- "summary": "Create a one-off payment. Two flows: (a) with `token` from MP frontend SDK for cards, (b) without token for account_money/rapipago/pagofacil.",
146
- "purity": "io",
147
- "sideEffects": ["Creates a payment on MP", "May charge buyer if account_money/card token"],
148
- "constraints": {
149
- "envVars": ["MP_ACCESS_TOKEN"],
150
- "externalIO": ["MP REST API POST /v1/payments"],
151
- "latencyMs": "300-1500 (cards), 200-700 (account_money)",
152
- "costPerCall": "$0 (creation); MP charges merchant per-transaction fee on success"
123
+ "name": "create_customer_card",
124
+ "description": "Add a saved card to an existing customer using a card_token (one-time token from MP frontend Cardform agents should NEVER take raw card data, that's a PCI violation). Returns the saved CustomerCard "
125
+ },
126
+ {
127
+ "name": "create_order",
128
+ "description": "Create a new Order via MP's modern Order Management API. DIFFERENT from create_payment_preference: Order is a transactional entity with explicit lifecycle (created → processed → captured/canceled), su",
129
+ "input": {
130
+ "type": "'online' | 'in_store'",
131
+ "currency_id": "string? (default ARS)",
132
+ "external_reference": "string?",
133
+ "total_amount": "number?",
134
+ "items": "array?",
135
+ "payer_email": "string?",
136
+ "capture_mode": "'automatic' | 'manual'?",
137
+ "notification_url": "string?",
138
+ "marketplace": "string?",
139
+ "marketplace_fee": "number? (ARS)",
140
+ "collector_id": "string|number? (seller MP user_id)"
153
141
  },
142
+ "output": {
143
+ "order_id": "string",
144
+ "status": "string",
145
+ "capture_mode": "string",
146
+ "total_amount": "number"
147
+ }
148
+ },
149
+ {
150
+ "name": "create_payment",
151
+ "description": "Create a one-time payment. Two flows: (a) with a card token from MP frontend Cardform — for transparent checkout; (b) without token, for non-card methods like 'account_money', 'rapipago', 'pagofacil'.",
154
152
  "input": {
155
153
  "amount_ars": "number positive",
156
154
  "payment_method_id": "string (visa | master | naranja | account_money | rapipago | ...)",
@@ -164,252 +162,502 @@
164
162
  "payment_id": "string",
165
163
  "status": "approved | pending | rejected | in_process | cancelled",
166
164
  "status_detail": "string (see AGENTS.md for recovery actions per value)",
167
- "amount": "number", "currency": "ARS",
168
- "installments": "number", "payment_method": "string",
165
+ "amount": "number",
166
+ "currency": "ARS",
167
+ "installments": "number",
168
+ "payment_method": "string",
169
169
  "external_reference": "string | null",
170
- "date_created": "ISO date", "date_approved": "ISO date | null"
170
+ "date_created": "ISO date",
171
+ "date_approved": "ISO date | null"
172
+ }
173
+ },
174
+ {
175
+ "name": "create_payment_preference",
176
+ "description": "Create a Mercado Pago Checkout Pro preference and get back a payment URL (init_point) to send to the customer. THIS is the recommended way for an agent to take a payment when you only have a payer ema",
177
+ "input": {
178
+ "items": "array of {title, quantity, unit_price, description?, picture_url?}",
179
+ "payer_email": "string?",
180
+ "external_reference": "string?",
181
+ "max_installments": "number 1-24?",
182
+ "statement_descriptor": "string max 13 chars?",
183
+ "excluded_payment_types": "array of (credit_card|debit_card|ticket|atm|bank_transfer)?"
171
184
  },
172
- "whenToUse": [
173
- "User wants to charge a specific payer email with account_money / Rapipago / Pago Fácil",
174
- "User has a valid card token from MP frontend SDK and wants server-side charge"
175
- ],
176
- "whenNotToUse": [
177
- "User pasted raw card data — REFUSE (PCI scope violation). Use create_payment_preference instead.",
178
- "User wants recurring billing — use create_subscription"
179
- ]
185
+ "output": {
186
+ "preference_id": "string",
187
+ "init_point_url": "string (production)",
188
+ "sandbox_init_point_url": "string (sandbox — use this if your token is TEST-)",
189
+ "external_reference": "string | null",
190
+ "next_step": "Send init_point_url to the customer..."
191
+ }
180
192
  },
181
193
  {
182
- "name": "get_payment",
183
- "summary": "Fetch a single payment by ID. Use after webhook to confirm status.",
184
- "purity": "io",
185
- "sideEffects": [],
186
- "constraints": { "latencyMs": "100-300", "externalIO": ["MP REST GET /v1/payments/:id"] },
187
- "input": { "payment_id": "string" },
188
- "output": "Same shape as create_payment output, plus net_received"
194
+ "name": "create_point_payment_intent",
195
+ "description": "Create a payment intent on a physical Point device — the device prompts the buyer to tap/insert/swipe their card. Returns immediately with intent_id; query state via get_point_payment_intent or wait f"
189
196
  },
190
197
  {
191
- "name": "search_payments",
192
- "summary": "Search payments by external_reference / status / date range. Paginated.",
193
- "purity": "io",
194
- "sideEffects": [],
195
- "constraints": { "latencyMs": "200-600", "externalIO": ["MP REST GET /v1/payments/search"] },
198
+ "name": "create_pos",
199
+ "description": "Create a POS (Point of Sale) under a store. The POS's external_id is what create_qr_payment uses. Each physical checkout / counter / agent typically has its own POS. Categories are MP-defined (default"
200
+ },
201
+ {
202
+ "name": "create_qr_payment",
203
+ "description": "Generate a dynamic in-store QR for a buyer to scan with any AR wallet (Modo, BNA+, Cuenta DNI, Naranja X, Mercado Pago, etc. — interop is mandated by Transferencias 3.0). Requires a pre-configured POS"
204
+ },
205
+ {
206
+ "name": "create_store",
207
+ "description": "Create a store under the seller's MP account. Stores are the parent entity for POSes (which generate QR payments). Required ONE-TIME setup before create_pos. Pass a unique external_id and a display na"
208
+ },
209
+ {
210
+ "name": "create_subscription",
211
+ "description": "Create a Mercado Pago recurring subscription. Returns an init_point URL where the customer must complete the FIRST payment with their card and CVV (this is a hard MP requirement; agents cannot bypass ",
196
212
  "input": {
197
- "external_reference": "string?", "status": "string?",
198
- "payer_email": "string?", "begin_date": "ISO?", "end_date": "ISO?",
199
- "limit": "number 1-100, default 30", "offset": "number, default 0"
213
+ "customer_email": "string (email; cannot equal seller email)",
214
+ "amount_ars": "number (positive)",
215
+ "frequency_months": "number (1-12)",
216
+ "reason": "string (3-120 chars)",
217
+ "external_reference": "string | undefined"
200
218
  },
201
- "output": { "total": "number", "returned": "number", "offset": "number", "payments": "array of {payment_id, status, amount, currency, payer_email, external_reference, date_created}" }
219
+ "output": {
220
+ "subscription_id": "string",
221
+ "status": "pending",
222
+ "init_point_url": "string (URL the buyer must visit to complete first payment)",
223
+ "next_step": "string (instructions for the agent)"
224
+ }
202
225
  },
203
226
  {
204
- "name": "cancel_payment",
205
- "summary": "Cancel a pending or in_process payment. For approved use refund_payment.",
206
- "purity": "io",
207
- "sideEffects": ["Mutates payment status to cancelled on MP"],
208
- "input": { "payment_id": "string" },
209
- "output": { "payment_id": "string", "status": "cancelled", "message": "string" }
227
+ "name": "create_subscription_plan",
228
+ "description": "Create a REUSABLE subscription plan (preapproval_plan). Different from create_subscription: a plan defines price + frequency once, then customers subscribe to it via subscribe_to_plan. Use plans for S"
210
229
  },
211
230
  {
212
- "name": "capture_payment",
213
- "summary": "Capture an authorized credit-card payment created with capture=false. Optional partial amount.",
214
- "purity": "io",
215
- "sideEffects": ["Captures funds; settles to seller per MP rules"],
216
- "input": { "payment_id": "string", "amount_ars": "number? (partial capture)" },
217
- "output": { "payment_id": "string", "status": "approved", "amount": "number" }
231
+ "name": "create_webhook",
232
+ "description": "Subscribe a webhook URL to a MP topic (payment, subscription_authorized_payment, subscription_preapproval, merchant_order, point_integration_wh). MP will POST to this URL when events of that topic fir"
218
233
  },
219
234
  {
220
- "name": "refund_payment",
221
- "summary": "Refund an approved payment. Partial (with amount) or full (omit). Auto-idempotent on (payment_id, amount).",
222
- "purity": "io",
223
- "sideEffects": ["Returns funds to buyer; debits seller balance"],
224
- "constraints": { "latencyMs": "300-800", "externalIO": ["MP REST POST /v1/payments/:id/refunds"] },
225
- "input": { "payment_id": "string", "amount_ars": "number? (omit for full refund)" },
226
- "output": { "refund_id": "string", "payment_id": "string", "amount": "number", "status": "approved", "message": "string" },
227
- "whenToUse": ["User explicitly requests a refund (full or partial)"],
228
- "whenNotToUse": [
229
- "Payment is still pending/in_process — use cancel_payment instead",
230
- "More than 30 days since payment — MP refund window expired"
231
- ],
232
- "irreversibility": "Refund is irreversible. Confirm amount and payment_id with user first."
235
+ "name": "delete_customer_card",
236
+ "description": "Delete a saved card from a customer. Common use: customer requests removal, or expired card cleanup. **IRREVERSIBLE — confirm with the user before calling. The customer must re-enter card data (PAN + ",
237
+ "input": {
238
+ "customer_id": "string",
239
+ "card_id": "string"
240
+ },
241
+ "output": {
242
+ "customer_id": "string",
243
+ "card_id": "string",
244
+ "deleted": "true"
245
+ }
233
246
  },
234
247
  {
235
- "name": "list_refunds",
236
- "summary": "List all refunds for a given payment.",
237
- "purity": "io",
238
- "sideEffects": [],
239
- "input": { "payment_id": "string" },
240
- "output": { "payment_id": "string", "count": "number", "refunds": "array of {refund_id, amount, status, date_created}" }
248
+ "name": "delete_pos",
249
+ "description": "Delete a POS. IRREVERSIBLE. Cancels any pending QR orders attached to it. Confirm with user before calling."
241
250
  },
242
251
  {
243
- "name": "create_payment_preference",
244
- "summary": "Create a Checkout Pro hosted payment URL. RECOMMENDED for agent flows where you don't have a card token buyer enters card on MP-hosted form (no PCI scope needed).",
245
- "purity": "io",
246
- "sideEffects": ["Creates a preference on MP"],
247
- "constraints": { "latencyMs": "200-500", "externalIO": ["MP REST POST /checkout/preferences"] },
252
+ "name": "delete_store",
253
+ "description": "Delete a store. IRREVERSIBLE. Confirm with user before calling. Will fail if the store has associated POSesdelete those first."
254
+ },
255
+ {
256
+ "name": "delete_webhook",
257
+ "description": "Delete a webhook subscription. MP stops POSTing to it immediately. **IRREVERSIBLE — confirm before calling. State the webhook URL + topic so the user knows which subscription is being removed. Re-subs"
258
+ },
259
+ {
260
+ "name": "explain_payment_status",
261
+ "description": "PURE HELPER (no network) — given a Payment object (from get_payment / create_payment / handle_webhook), returns { summary, recommendedAction, final, paid, retryable } in Spanish. Translates MP's crypt"
262
+ },
263
+ {
264
+ "name": "find_applicable_promos",
265
+ "description": "PURE HELPER (no network, sub-ms) — returns the 'cuotas sin interés' promotions applicable to a given (issuer, paymentMethodId, amount, category, date) tuple. Includes the federal Ahora 3/6/12/18/24/30"
266
+ },
267
+ {
268
+ "name": "find_customer_by_email",
269
+ "description": "Find an existing customer by email address. Returns the customer object if found, or null. Use before create_customer to avoid duplicate records.",
248
270
  "input": {
249
- "items": "array of {title, quantity, unit_price, description?, picture_url?}",
250
- "payer_email": "string?", "external_reference": "string?",
251
- "max_installments": "number 1-24?",
252
- "statement_descriptor": "string max 13 chars?",
253
- "excluded_payment_types": "array of (credit_card|debit_card|ticket|atm|bank_transfer)?"
271
+ "email": "string"
254
272
  },
255
273
  "output": {
256
- "preference_id": "string",
257
- "init_point_url": "string (production)",
258
- "sandbox_init_point_url": "string (sandbox — use this if your token is TEST-)",
259
- "external_reference": "string | null",
260
- "next_step": "Send init_point_url to the customer..."
274
+ "found": "boolean",
275
+ "customer_id": "string | null",
276
+ "email": "string?",
277
+ "first_name": "string?",
278
+ "last_name": "string?"
279
+ }
280
+ },
281
+ {
282
+ "name": "get_account_balance",
283
+ "description": "Get the seller's current MP wallet balance. Returns { available_balance, unavailable_balance, total_amount, currency_id }. The available balance is what the seller can withdraw or pay with right now; "
284
+ },
285
+ {
286
+ "name": "get_account_info",
287
+ "description": "Get info about the Mercado Pago account that owns the access token: site_id (MLA=Argentina), country_id, user_type (registered, partial, etc.). Useful to verify the agent is connected to the right acc",
288
+ "input": {},
289
+ "output": {
290
+ "account_id": "string",
291
+ "email": "string|null",
292
+ "nickname": "string|null",
293
+ "country_id": "string|null (AR for Argentina)",
294
+ "site_id": "string|null (MLA for Argentina)",
295
+ "user_type": "string|null"
296
+ }
297
+ },
298
+ {
299
+ "name": "get_customer",
300
+ "description": "Get a customer by id. Returns full Customer object: email, first_name, last_name, identification, address, default_card, registered cards. PURE READ. USE WHEN you have the customer_id from a previous "
301
+ },
302
+ {
303
+ "name": "get_customer_card",
304
+ "description": "Get details of a single saved card by (customer_id, card_id). Returns last 4 digits, expiration, brand, issuer. PURE READ — useful before charge_saved_card to confirm the card is still valid."
305
+ },
306
+ {
307
+ "name": "get_dispute",
308
+ "description": "Get details of a specific dispute including reason, amount, resolution status. Read-only."
309
+ },
310
+ {
311
+ "name": "get_merchant_order",
312
+ "description": "Get a merchant_order with all its associated payments + shipments. MerchantOrder is the parent entity for Payments associated with a single Preference — one Order can have multiple partial Payments (r"
313
+ },
314
+ {
315
+ "name": "get_order",
316
+ "description": "Fetch an Order by ID. Returns the Order with its lifecycle status and any attached payments/refunds.",
317
+ "input": {
318
+ "order_id": "string"
319
+ },
320
+ "output": "Order"
321
+ },
322
+ {
323
+ "name": "get_payment",
324
+ "description": "Fetch a single payment by ID. Use to confirm status after webhook arrives, or to inspect details (status_detail explains rejections).",
325
+ "input": {
326
+ "payment_id": "string"
261
327
  },
262
- "whenToUse": [
263
- "User wants to charge a payer over WhatsApp/email/SMS",
264
- "User says 'cobrale $X a [email]' and you don't have a card token"
265
- ],
266
- "whenNotToUse": [
267
- "Recurring subscription — use create_subscription",
268
- "User pasted raw card data — REFUSE (PCI violation)"
269
- ]
328
+ "output": "Same shape as create_payment output, plus net_received"
270
329
  },
271
330
  {
272
331
  "name": "get_payment_preference",
273
- "summary": "Fetch a Checkout Pro preference by ID.",
274
- "purity": "io", "sideEffects": [],
275
- "input": { "preference_id": "string" },
332
+ "description": "Fetch a Checkout Pro preference by ID. Returns the preference config and current init_point URLs. Use to inspect a previously-created link.",
333
+ "input": {
334
+ "preference_id": "string"
335
+ },
276
336
  "output": "Same as create_payment_preference output, plus items array"
277
337
  },
278
338
  {
279
- "name": "create_customer",
280
- "summary": "Create or upsert an MP customer for saving cards / repeat charges. Idempotent on email.",
281
- "purity": "io",
282
- "sideEffects": ["Creates customer record on MP if not exists"],
339
+ "name": "get_point_payment_intent",
340
+ "description": "Get the current state of a Point payment intent (OPEN, PROCESSING, FINISHED, CANCELED, ERROR). USE in polling loops if you can't wait for the webhook. When state=FINISHED, the intent.payment.id is the"
341
+ },
342
+ {
343
+ "name": "get_pos",
344
+ "description": "Fetch a POS by id. Returns: name, store_id, category, external_id, qr_template (if configured). PURE READ. Use when you need to find the external_id for create_qr_payment."
345
+ },
346
+ {
347
+ "name": "get_refund",
348
+ "description": "Fetch a single refund by (payment_id, refund_id). Returns the Refund object with amount, status, date_created. PURE READ — useful to verify a refund processed or to reconcile partial-refund history."
349
+ },
350
+ {
351
+ "name": "get_settlement",
352
+ "description": "Get details of a single settlement: amount, date_scheduled, date_processed, bank_account info (CBU + bank name)."
353
+ },
354
+ {
355
+ "name": "get_store",
356
+ "description": "Fetch a single store by (user_id, store_id). Returns store details: name, location, business_hours, external_id. PURE READ."
357
+ },
358
+ {
359
+ "name": "get_subscription_plan",
360
+ "description": "Fetch a subscription plan by id. Returns plan config: amount, frequency, status, init_point. Use to inspect a plan before subscribing customers, or to display plan details to the user."
361
+ },
362
+ {
363
+ "name": "get_subscription_status",
364
+ "description": "Check the current status of a Mercado Pago subscription. Use this to confirm the customer completed the first payment (status becomes 'authorized') or to inspect the next charge date.",
283
365
  "input": {
284
- "email": "string",
285
- "first_name": "string?", "last_name": "string?",
286
- "identification": "{type: DNI|CUIT|CUIL, number: string}?"
366
+ "subscription_id": "string (MP preapproval ID)"
287
367
  },
288
- "output": { "customer_id": "string", "email": "string", "first_name": "string|null", "last_name": "string|null", "date_created": "ISO" }
368
+ "output": {
369
+ "subscription_id": "string",
370
+ "status": "pending | authorized | paused | cancelled",
371
+ "payer_email": "string",
372
+ "amount": "number",
373
+ "currency": "ARS | USD | ...",
374
+ "next_payment_date": "ISO date | null",
375
+ "last_webhook_status": "string | null (cached from latest webhook)",
376
+ "last_webhook_at": "ISO date | null"
377
+ }
289
378
  },
290
379
  {
291
- "name": "find_customer_by_email",
292
- "summary": "Find existing customer by email. Returns null if not found.",
293
- "purity": "io", "sideEffects": [],
294
- "input": { "email": "string" },
295
- "output": { "found": "boolean", "customer_id": "string | null", "email": "string?", "first_name": "string?", "last_name": "string?" }
380
+ "name": "get_test_cards",
381
+ "description": "Pure helper that returns the official MP test cards for AR (MLA): VISA/Mastercard/Amex credit + debit, with the 'magic' holder names that route the payment to specific status_detail values (APRO=appro"
382
+ },
383
+ {
384
+ "name": "handle_webhook",
385
+ "description": "Process an incoming MP webhook in ONE call: verify the HMAC-SHA256 signature, parse the event, and (optionally) auto-fetch the underlying resource (Payment, Subscription, Order). Returns the structure",
386
+ "input": {
387
+ "raw_body": "string (raw JSON body — do NOT re-stringify)",
388
+ "signature_header": "string|null (x-signature)",
389
+ "request_id_header": "string|null (x-request-id)",
390
+ "auto_fetch": "boolean? default true"
391
+ },
392
+ "output": {
393
+ "verified": "boolean",
394
+ "event": "{ topic, dataId, action, raw } | null",
395
+ "resource": "Payment | Preapproval | null",
396
+ "resource_error": "string | null",
397
+ "error": "string | null"
398
+ }
399
+ },
400
+ {
401
+ "name": "list_account_movements",
402
+ "description": "List wallet movements (incoming payments, transfers, refunds, holdings) for the active MP account. Filter by date range with `from`/`to` (ISO 8601). Useful for monthly conciliation or 'show me what ca"
403
+ },
404
+ {
405
+ "name": "list_bank_accounts",
406
+ "description": "List the bank accounts (CBUs) the seller has registered with MP for receiving payouts. Returns an array — the one with `is_default: true` is where settlements (release_money) go. USE BEFORE list_settl"
296
407
  },
297
408
  {
298
409
  "name": "list_customer_cards",
299
- "summary": "List saved cards for a customer.",
300
- "purity": "io", "sideEffects": [],
301
- "input": { "customer_id": "string" },
302
- "output": { "customer_id": "string", "count": "number", "cards": "array of {card_id, last_four_digits, expiration_month, expiration_year, payment_method, payment_method_name}" }
410
+ "description": "List the saved cards for a customer. Returns array with last 4 digits, expiration, payment method (visa, master, naranja, etc.). The card_id can be used in subsequent create_payment calls to charge a ",
411
+ "input": {
412
+ "customer_id": "string"
413
+ },
414
+ "output": {
415
+ "customer_id": "string",
416
+ "count": "number",
417
+ "cards": "array of {card_id, last_four_digits, expiration_month, expiration_year, payment_method, payment_method_name}"
418
+ }
303
419
  },
304
420
  {
305
- "name": "delete_customer_card",
306
- "summary": "Delete a saved card. Irreversible.",
307
- "purity": "io", "sideEffects": ["Removes card from MP customer"],
308
- "input": { "customer_id": "string", "card_id": "string" },
309
- "output": { "customer_id": "string", "card_id": "string", "deleted": "true" }
421
+ "name": "list_identification_types",
422
+ "description": "List valid identification types for the seller's site. AR returns: DNI, CI, LE, LC, Otro, Pasaporte, CUIT, CUIL with their min/max length. Useful to validate an identification before passing to create"
423
+ },
424
+ {
425
+ "name": "list_issuers",
426
+ "description": "List card issuers (banks) that support a payment_method_id. Optionally filter by `bin` (first 6 digits of the card) for accurate issuer detection. Useful with calculate_installments — issuer-specific "
427
+ },
428
+ {
429
+ "name": "list_payment_disputes",
430
+ "description": "List all disputes / chargebacks raised against a payment. Read-only — resolution is dashboard-only. Surface the dashboard URL `https://www.mercadopago.com.ar/disputes/{dispute_id}` to the user when th"
310
431
  },
311
432
  {
312
433
  "name": "list_payment_methods",
313
- "summary": "List all payment methods enabled for the seller's MP account (visa, master, naranja, naranja_x, cabal, account_money, rapipago, pagofacil, etc.).",
314
- "purity": "io", "sideEffects": [],
434
+ "description": "List all payment methods enabled for the seller's MP account (visa, master, naranja, naranja_x, cabal, account_money, rapipago, pagofacil, etc.). Use to validate which methods you can offer the custom",
315
435
  "input": {},
316
- "output": { "count": "number", "methods": "array of {id, name, payment_type, status, min_amount, max_amount}" }
436
+ "output": {
437
+ "count": "number",
438
+ "methods": "array of {id, name, payment_type, status, min_amount, max_amount}"
439
+ }
317
440
  },
318
441
  {
319
- "name": "calculate_installments",
320
- "summary": "Calculate cuotas options for an amount. THE killer AR feature. Returns recommended_message strings ('12 cuotas sin interés de $X') ready to surface VERBATIM to the user.",
321
- "purity": "io", "sideEffects": [],
322
- "constraints": { "latencyMs": "100-300" },
442
+ "name": "list_point_devices",
443
+ "description": "List the physical Point devices (Smart, Tap to Pay, etc.) linked to the seller's MP account. Distinct from logical POS these are actual terminals at brick-and-mortar shops. Returns each device's id "
444
+ },
445
+ {
446
+ "name": "list_pos",
447
+ "description": "List all POSes for the seller (or filtered by store_id). Use to find an existing POS before create_qr_payment, or to surface options."
448
+ },
449
+ {
450
+ "name": "list_refunds",
451
+ "description": "List all refunds for a given payment. Returns array of Refund objects. Useful to confirm a refund was processed or to inspect partial-refund history.",
323
452
  "input": {
324
- "amount_ars": "number positive",
325
- "payment_method_id": "string? (e.g. visa, master, naranja)",
326
- "bin": "string? 6-8 chars (first digits of card for issuer-specific promos)"
453
+ "payment_id": "string"
327
454
  },
328
455
  "output": {
329
- "amount": "number",
330
- "offers": "array of {payment_method_id, payment_type_id, issuer_name, options: [{installments, installment_amount, total_amount, installment_rate, recommended_message}]}"
331
- },
332
- "whenToUse": [
333
- "User asks 'cuántas cuotas tiene esta tarjeta?'",
334
- "Before create_payment with installments > 1 to validate available options",
335
- "Show options BEFORE the user picks (AR transparency regulation E 51/2017 compliance)"
336
- ]
456
+ "payment_id": "string",
457
+ "count": "number",
458
+ "refunds": "array of {refund_id, amount, status, date_created}"
459
+ }
337
460
  },
338
461
  {
339
- "name": "get_account_info",
340
- "summary": "Get info about the MP account that owns the access token (site_id, country, user_type).",
341
- "purity": "io", "sideEffects": [],
342
- "input": {},
343
- "output": { "account_id": "string", "email": "string|null", "nickname": "string|null", "country_id": "string|null (AR for Argentina)", "site_id": "string|null (MLA for Argentina)", "user_type": "string|null" }
462
+ "name": "list_settlements",
463
+ "description": "List settlements (release_money) — i.e. transfers from the MP wallet to the seller's registered bank account (CBU). USE WHEN the user asks 'cuándo me deposita MP' or for monthly bank-conciliation repo"
344
464
  },
345
465
  {
346
- "name": "handle_webhook",
347
- "summary": "v0.5 Verify HMAC + parse + auto-fetch webhook in ONE call. THE recommended way to handle MP webhooks in production.",
348
- "purity": "io", "sideEffects": ["Fetches Payment / Preapproval AS the configured client when auto_fetch=true"],
349
- "constraints": { "latencyMs": "150-700", "envVars": ["webhookSecret in tools options"] },
350
- "input": { "raw_body": "string (raw JSON body — do NOT re-stringify)", "signature_header": "string|null (x-signature)", "request_id_header": "string|null (x-request-id)", "auto_fetch": "boolean? default true" },
351
- "output": { "verified": "boolean", "event": "{ topic, dataId, action, raw } | null", "resource": "Payment | Preapproval | null", "resource_error": "string | null", "error": "string | null" },
352
- "whenToUse": ["Always in webhook endpoints — REJECT (HTTP 401) when verified=false"]
466
+ "name": "list_settlements_all",
467
+ "description": "Collect ALL settlements matching a filter auto-paginates. Pass `max_items` to cap. Use for monthly bank-conciliation reports."
468
+ },
469
+ {
470
+ "name": "list_stores",
471
+ "description": "List all stores configured for this MP account. Use this to find an existing store_id before create_pos, or to surface store options to the agent."
472
+ },
473
+ {
474
+ "name": "list_subscription_payments",
475
+ "description": "List the auto-charge attempts (authorized_payments) under a subscription. Useful for 'show me the cobros del último mes for this client' or to debug a failing recurring charge."
476
+ },
477
+ {
478
+ "name": "list_subscription_plans",
479
+ "description": "List all subscription plans defined for this MP account. Useful before create_subscription_plan to check if one already exists, or for surfacing options to a customer."
480
+ },
481
+ {
482
+ "name": "list_webhooks",
483
+ "description": "List all webhook subscriptions configured for this MP application. Use to see what topics + URLs are wired before adding new ones."
484
+ },
485
+ {
486
+ "name": "mp_health_check",
487
+ "description": "Liveness probe against MP. Returns { ok, latencyMs, userId, circuit }. USE THIS as the first call in long-running agent workflows to verify (a) network path to MP is up, (b) accessToken is valid, (c) "
353
488
  },
354
489
  {
355
490
  "name": "oauth_authorize_url",
356
- "summary": "v0.5 — Build the URL the SELLER visits to authorize your marketplace app. Pure function.",
357
- "purity": "pure", "sideEffects": [],
358
- "constraints": { "latencyMs": "<1" },
359
- "input": { "redirect_uri": "string (must be whitelisted in MP dev panel)", "state": "string (CSRF token, bind to user session)" },
360
- "output": { "available": "boolean", "url": "string|null", "next_step": "string" }
491
+ "description": "Build the URL the SELLER (third-party MP account) visits to authorize your marketplace app. Pass the seller's redirect uri (must be whitelisted in MP dev panel) and an opaque state token (CSRF protect",
492
+ "input": {
493
+ "redirect_uri": "string (must be whitelisted in MP dev panel)",
494
+ "state": "string (CSRF token, bind to user session)"
495
+ },
496
+ "output": {
497
+ "available": "boolean",
498
+ "url": "string|null",
499
+ "next_step": "string"
500
+ }
361
501
  },
362
502
  {
363
503
  "name": "oauth_exchange_code",
364
- "summary": "v0.5 — Exchange the OAuth code (from redirect) for OAuthToken { access_token, refresh_token, user_id, expires_in }.",
365
- "purity": "io", "sideEffects": [],
366
- "constraints": { "latencyMs": "200-500", "envVars": ["oauth.clientId + oauth.clientSecret in tools options"] },
367
- "input": { "code": "string", "redirect_uri": "string (must EXACTLY match the URL used in oauth_authorize_url)" },
368
- "output": { "available": "boolean", "token": "OAuthToken | null", "error": "string | null", "next_step": "string" }
504
+ "description": "Exchange the authorization code (from the OAuth redirect) for an `OAuthToken`. Returns access_token, refresh_token, user_id, and expires_in. **PERSIST the entire response** — refresh_token is long-liv",
505
+ "input": {
506
+ "code": "string",
507
+ "redirect_uri": "string (must EXACTLY match the URL used in oauth_authorize_url)"
508
+ },
509
+ "output": {
510
+ "available": "boolean",
511
+ "token": "OAuthToken | null",
512
+ "error": "string | null",
513
+ "next_step": "string"
514
+ }
369
515
  },
370
516
  {
371
517
  "name": "oauth_refresh_token",
372
- "summary": "v0.5 — Refresh a per-seller access_token. Always persist the new refresh_token (it may rotate).",
373
- "purity": "io", "sideEffects": [],
374
- "constraints": { "latencyMs": "150-400" },
375
- "input": { "refresh_token": "string" },
376
- "output": { "available": "boolean", "token": "OAuthToken | null", "error": "string | null" }
518
+ "description": "Refresh a per-seller access_token using the saved refresh_token. Call PROACTIVELY before expires_in elapses, or REACTIVELY on a 401 from a per-seller MercadoPagoClient. Returns a fresh OAuthToken — pe",
519
+ "input": {
520
+ "refresh_token": "string"
521
+ },
522
+ "output": {
523
+ "available": "boolean",
524
+ "token": "OAuthToken | null",
525
+ "error": "string | null"
526
+ }
377
527
  },
378
528
  {
379
- "name": "create_order",
380
- "summary": "v0.5 Create an Order (modern API). Supports manual capture (auth-only) and marketplace splits.",
381
- "purity": "io", "sideEffects": ["Creates an Order in MP"],
382
- "constraints": { "latencyMs": "200-500" },
383
- "input": { "type": "'online' | 'in_store'", "currency_id": "string? (default ARS)", "external_reference": "string?", "total_amount": "number?", "items": "array?", "payer_email": "string?", "capture_mode": "'automatic' | 'manual'?", "notification_url": "string?", "marketplace": "string?", "marketplace_fee": "number? (ARS)", "collector_id": "string|number? (seller MP user_id)" },
384
- "output": { "order_id": "string", "status": "string", "capture_mode": "string", "total_amount": "number" }
529
+ "name": "pause_subscription",
530
+ "description": "Pause an authorized Mercado Pago subscription. Charges stop until resumed. Only works on subscriptions in 'authorized' status.",
531
+ "input": {
532
+ "subscription_id": "string"
533
+ },
534
+ "output": {
535
+ "subscription_id": "string",
536
+ "status": "paused",
537
+ "message": "string"
538
+ }
385
539
  },
386
540
  {
387
- "name": "get_order",
388
- "summary": "v0.5 Fetch an Order by id.",
389
- "purity": "io", "sideEffects": [],
390
- "input": { "order_id": "string" },
391
- "output": "Order"
541
+ "name": "refund_payment",
542
+ "description": "Refund an approved payment. Pass amount for partial refund; omit for full refund. Idempotency key is auto-generated based on paymentId+amount to prevent double-refunds on retries. **IRREVERSIBLE AND M",
543
+ "input": {
544
+ "payment_id": "string",
545
+ "amount_ars": "number? (omit for full refund)"
546
+ },
547
+ "output": {
548
+ "refund_id": "string",
549
+ "payment_id": "string",
550
+ "amount": "number",
551
+ "status": "approved",
552
+ "message": "string"
553
+ }
554
+ },
555
+ {
556
+ "name": "register_bank_account",
557
+ "description": "Register a new bank account (CBU) for the seller. NOTE: MP usually requires this through the dashboard for compliance — this endpoint may not work for all accounts. If it fails with 403, redirect the "
558
+ },
559
+ {
560
+ "name": "resume_subscription",
561
+ "description": "Resume a paused Mercado Pago subscription. Charges resume on the next scheduled date. Only works on subscriptions in 'paused' status.",
562
+ "input": {
563
+ "subscription_id": "string"
564
+ },
565
+ "output": {
566
+ "subscription_id": "string",
567
+ "status": "authorized",
568
+ "message": "string"
569
+ }
570
+ },
571
+ {
572
+ "name": "search_merchant_orders",
573
+ "description": "Search merchant_orders by preference_id, external_reference, or status. Paginated. Returns up to 50 per page. USE WHEN you have a preference_id and want all its derived merchant_orders, or when reconc"
574
+ },
575
+ {
576
+ "name": "search_payments",
577
+ "description": "Search payments with filters. Most common: by external_reference (your-system identifier) to find all payments for an order, or by status='approved' to list successful charges in a date range. Returns",
578
+ "input": {
579
+ "external_reference": "string?",
580
+ "status": "string?",
581
+ "payer_email": "string?",
582
+ "begin_date": "ISO?",
583
+ "end_date": "ISO?",
584
+ "limit": "number 1-100, default 30",
585
+ "offset": "number, default 0"
586
+ },
587
+ "output": {
588
+ "total": "number",
589
+ "returned": "number",
590
+ "offset": "number",
591
+ "payments": "array of {payment_id, status, amount, currency, payer_email, external_reference, date_created}"
592
+ }
593
+ },
594
+ {
595
+ "name": "search_payments_all",
596
+ "description": "Collect ALL payments matching a filter — auto-paginates under the hood. Returns an array (NOT paginated) so the agent doesn't have to manage offset/limit loops manually. SAFETY: pass `max_items` to ca"
597
+ },
598
+ {
599
+ "name": "search_subscriptions",
600
+ "description": "Search subscriptions across the seller's account. Filter by status (pending/authorized/paused/cancelled), payer_email, external_reference, or preapproval_plan_id (to find all subscribers of a plan). P"
601
+ },
602
+ {
603
+ "name": "subscribe_to_plan",
604
+ "description": "Subscribe a customer to an existing reusable plan. Returns a Preapproval with init_point URL where the customer completes first payment. Cleaner than create_subscription when you have fixed tiers."
605
+ },
606
+ {
607
+ "name": "update_customer",
608
+ "description": "Update a customer's profile (first_name, last_name, phone, identification, address, default_card). MP merges the patch — fields you don't send remain unchanged. Use to keep customer records in sync (e"
609
+ },
610
+ {
611
+ "name": "update_merchant_order",
612
+ "description": "Update a merchant_order — typically to add items or shipping info. Most agent flows don't need this; use only when integrating with a custom shipping flow that requires updating the MO mid-lifecycle."
392
613
  },
393
614
  {
394
615
  "name": "update_order",
395
- "summary": "v0.5 — Patch an Order (external_reference, total_amount).",
396
- "purity": "io", "sideEffects": ["Mutates Order"],
397
- "input": { "order_id": "string", "external_reference": "string?", "total_amount": "number?" },
616
+ "description": "Patch an existing Order before it's captured/canceled. Common use: update items or external_reference.",
617
+ "input": {
618
+ "order_id": "string",
619
+ "external_reference": "string?",
620
+ "total_amount": "number?"
621
+ },
398
622
  "output": "Order"
399
623
  },
400
624
  {
401
- "name": "capture_order",
402
- "summary": "v0.5 Capture an authorized Order (capture_mode='manual'). Optional partial-capture amount.",
403
- "purity": "io", "sideEffects": ["Captures funds — IRREVERSIBLE"],
404
- "input": { "order_id": "string", "amount": "number?" },
405
- "output": { "order_id": "string", "status": "string", "captured_amount": "number" }
625
+ "name": "update_payment_preference",
626
+ "description": "Update a Checkout Pro preference (notification_url, back_urls, items, payer info, payment_methods exclusion list). Only works on preferences NOT yet paid. Common use: regenerate the link with a new no"
406
627
  },
407
628
  {
408
- "name": "cancel_order",
409
- "summary": "v0.5 Cancel a non-captured Order. Releases auth-holds. For captured orders, use refund_payment.",
410
- "purity": "io", "sideEffects": ["Cancels Order"],
411
- "input": { "order_id": "string" },
412
- "output": { "order_id": "string", "status": "string" }
629
+ "name": "update_point_device_mode",
630
+ "description": "Switch a Point device's operating_mode between 'PDV' (bound to a logical POS, takes payments triggered through that POS) and 'STANDALONE' (works independently, accepts any payment). PDV is for cash-re"
631
+ },
632
+ {
633
+ "name": "update_pos",
634
+ "description": "Update a POS's properties (name, category, external_id). MP merges the patch."
635
+ },
636
+ {
637
+ "name": "update_store",
638
+ "description": "Update a store's properties (name, location, business_hours, external_id). MP merges the patch."
639
+ },
640
+ {
641
+ "name": "update_subscription",
642
+ "description": "Update a subscription's amount, status, reason, external_reference, OR card_token_id (to switch payment method when the buyer's card is expired/declined). For card swap: pass card_token_id from a fres"
643
+ },
644
+ {
645
+ "name": "update_subscription_plan",
646
+ "description": "Update a subscription plan's reason / amount / status / back_url. Existing customer subscriptions to the plan are NOT automatically updated — only NEW subscribers get the new pricing."
647
+ },
648
+ {
649
+ "name": "update_webhook",
650
+ "description": "Update a webhook's URL or topic. Useful when you change deployment URLs without resubscribing from scratch."
651
+ },
652
+ {
653
+ "name": "validate_tax_id",
654
+ "description": "PURE HELPER (no network, sub-ms) — validates a tax ID against the appropriate country algorithm. Supports AR (DNI/CUIT/CUIL with modulo-11), BR (CPF/CNPJ with two-step weighted modulo), MX (RFC struct"
413
655
  }
414
- ]
656
+ ],
657
+ "name": "@ar-agents/mercadopago",
658
+ "meta": {
659
+ "generated_at": "2026-05-06T20:54:56.481Z",
660
+ "generated_by": "scripts/regen-manifests.mjs",
661
+ "tool_count": 89
662
+ }
415
663
  }