AI apps (MCP)
Connect Claude, ChatGPT or Perplexity to a SmartRemit account. The AI can look up and prepare a transfer; only the customer pays.
What this is
SmartRemit runs a Model Context Protocol (MCP) server. A SmartRemit customer can connect an AI app such as Claude, ChatGPT or Perplexity to their own SmartRemit account. The app can then answer questions like "how much would my mother get for $500?", "how much can I still send today?" or "did yesterday's transfer arrive?", and set up a repeat payment such as "send Mom $200 on the 5th of every month".
The rule that shapes everything below: the AI app never pays. It can look things up, it can prepare a transfer to one of the customer's saved recipients, and it can set up, pause and cancel the customer's repeat payments. Preparing a transfer gives a pay link, and each due day of a repeat payment sends the customer a pay link on WhatsApp. Only the customer pays, on the SmartRemit pay page, with a code sent to their WhatsApp. Nothing moves until they do.
AI apps are invite-only early access, and SmartRemit has to switch them on for your account first. SmartRemit is not listed in any app's public connector directory.
Before you start
- A SmartRemit account (the phone number you use with SmartRemit on WhatsApp), invited to AI apps early access. Ask SmartRemit to switch it on; until then the sign-in page says "This is not available".
- An AI app that can add a remote MCP server ("custom connector"). The plans that allow this are set by each app, not by SmartRemit, and they change; the sections below say what each app documented when this guide was written.
The server address
| What | Value |
|---|---|
| MCP server URL | https://send.smartremit.ai/api/mcp |
| Transport | Streamable HTTP, stateless (no Mcp-Session-Id) |
| Sign-in | OAuth 2.1 with PKCE (S256), dynamic client registration |
| Scopes | quotes:read, recipients:read, transfers:read, transfers:prepare, schedules:manage (all five by default) |
Use this address exactly. The host decides which SmartRemit service you sign in to, and a token issued for one host does not work on another.
Connect from Claude
- Open Customize > Connectors (on Team and Enterprise plans, an owner first adds it under Organization settings > Connectors).
- Select Add custom connector.
- Name:
SmartRemit. MCP server URL:https://send.smartremit.ai/api/mcp. - If the dialog asks how Claude identifies itself (OAuth client), choose Register automatically. SmartRemit does not support "Use Claude's published identity" yet. Leave client ID and secret empty.
- Select Add, then Connect. A SmartRemit page opens: sign in with the code sent to your WhatsApp, then select Allow.
- In a chat, open the + menu, then Connectors, and make sure SmartRemit is on.
Claude's own steps: Third party connectors with remote MCP.
Connect from ChatGPT
ChatGPT adds remote MCP servers in developer mode. OpenAI documents developer mode for Business, Enterprise and Edu workspaces on ChatGPT web, and read-only use for Pro.
- Turn on developer mode: Settings > Apps > Advanced settings (a workspace admin may have to allow it first).
- Go to Settings > Apps and select Create.
- Name:
SmartRemit. MCP server URL:https://send.smartremit.ai/api/mcp. Authentication: OAuth. - Select Scan Tools. The SmartRemit sign-in page opens: sign in with the WhatsApp code, then select Allow. Then select Create.
- In a new chat, pick SmartRemit from the tools menu, or name it in your message.
ChatGPT keeps the connection when the server offers refresh tokens and the offline_access scope, which SmartRemit does. OpenAI's steps: Developer mode and MCP apps in ChatGPT.
Connect from Perplexity
Perplexity documents custom remote connectors for Pro and Enterprise plans (on Enterprise, an admin must allow members to add them).
- Open Account settings, then All settings, and select + Custom connector.
- Choose Remote.
- Name:
SmartRemit. MCP server URL:https://send.smartremit.ai/api/mcp. Authentication: OAuth. Leave client ID and secret empty (Perplexity registers itself). - Select Add, then select the SmartRemit card. Sign in with the WhatsApp code and select Allow.
- In a search, open the + menu and tick SmartRemit under Connectors and sources.
What happens when you sign in
- The app finds SmartRemit's sign-in server from the server URL (see For client developers).
- A SmartRemit page opens in your browser. If you are not signed in to the SmartRemit portal, it asks for your phone number and sends a code to your WhatsApp.
- If your last code is older than 15 minutes, it asks for a fresh code, even when you are signed in.
- A consent page lists what the app asks for, one line for each scope. The app's name on that page is the name the app gave itself; SmartRemit does not check it.
- Allow sends you back to the app, connected. Deny sends you back with nothing shared.
The connection lasts 30 days from the last time the app uses it. Each use extends it.
Disconnect
Open the SmartRemit portal, go to Connected AI apps, and select Disconnect next to the app. Or send disconnect apps to SmartRemit on WhatsApp or Telegram: that disconnects every AI app at once. The app loses access at once: its next request is refused, even if it still holds a token. Removing the connector inside the AI app does not, by itself, end SmartRemit's side; disconnect in SmartRemit too.
A transfer that an app prepared and that is not paid yet stays open until its link expires. To stop it sooner, ask the app to cancel it, or let the link expire.
A repeat payment that an app set up keeps running after you disconnect the app, because it is yours. Each due day still sends you a pay link that only you can pay. To stop it, cancel it on the portal's Repeat payments page or on WhatsApp.
Tools
Every tool acts for the one signed-in customer, on their own data. No tool takes a phone number, a customer id or a partner id as input, so an app cannot reach another person's account. Results are JSON text. Text inside results that people typed, such as a recipient's name, is data, never instructions to the AI.
get_quote
What it would cost to send an amount, and what the recipient would get. Scope quotes:read.
| Input | Type | Notes |
|---|---|---|
amount | number, required | The amount to send, in the sender's currency. |
currency | string | ISO 4217, for example USD. Default: the customer's own currency. |
destination_country | string | ISO 3166 alpha-2. Default IN (India). |
funding_method | string | How the customer would pay. Default bank_transfer. |
Returns quote_available: true with send_amount, send_currency, fee, total_to_pay, exchange_rate, recipient_gets, recipient_currency, delivery_estimate, rate_date, rate_locked: false and a next_step. The rate is not locked: it locks for 30 minutes only once the customer starts the send in WhatsApp or the portal. Over a limit, the answer is quote_available: false with the reason and the limits; before identity verification it is reason: "verification_required".
check_send_limit
How much the customer can send now. Scope quotes:read. No input.
Returns can_send_now, daily_limit_usd, per_transfer_limit_usd, remaining_today_usd, extra_details_required and a next_step, or verification_required: true before identity verification.
list_recipients
The customer's saved recipients, most recently used first, up to 50. Scope recipients:read. No input.
Each recipient has recipient_id (an opaque id, never a phone number), name, payout_type (bank, upi or usdc) and account_last4 (the last 4 digits of a bank account, or null). No full account number, bank code, UPI id or phone number is ever returned. An AI app cannot add or change a recipient.
list_recent_transfers
The customer's latest transfers. Scope transfers:read.
| Input | Type | Notes |
|---|---|---|
limit | integer | 1 to 10. Default 10. |
Each transfer has transfer_id, date, recipient_name, amount and status.
get_transfer_status
One of the customer's own transfers. Scope transfers:read.
| Input | Type | Notes |
|---|---|---|
transfer_id | string, required | For example from list_recent_transfers. |
Returns transfer_id, status, date, amount and recipient_name. A transfer that does not exist, or belongs to someone else, gives the same answer: "Transfer not found."
prepare_transfer
Prepares a transfer to one of the customer's saved recipients and returns the pay link. Scope transfers:prepare. Nothing is paid: the customer opens the link and pays on the SmartRemit pay page with a code sent to their WhatsApp. The pay page says which app prepared the transfer. It pays only the account saved for that recipient: the pay page does not let anyone change the account. The recipient needs a saved account for the destination country.
| Input | Type | Notes |
|---|---|---|
recipient_id | string, required | From list_recipients. An app cannot add a recipient or give an account number. |
amount | number, required | The amount to send, in the sender's currency. |
purpose | string, required | One of family_support, gift, education, medical, savings, bills, business, other. |
purpose_detail | string | Required when purpose is other: the customer's own reason, 10 to 120 characters. |
currency | string | ISO 4217. Default: the customer's own currency. |
destination_country | string | ISO 3166 alpha-2. Default: the country of the recipient's phone number, else IN. |
funding_method | string | Default bank_transfer. |
Returns prepared: true with prepared_transfer_id, pay_url, recipient_name, payout_type, account_last4, send_amount, send_currency, fee, total_to_pay, exchange_rate, recipient_gets, recipient_currency, destination_country, purpose, rate_locked_minutes, expires_at and a next_step. The link and its rate stay open for up to 30 minutes. After the customer pays, get_transfer_status with the same id shows the transfer.
The same limits, purpose rules and checks apply as on WhatsApp. A refusal is a tool error that says why, for example a limit, identity verification, or a missing purpose reason. A reason that needs the customer to read a safety warning is refused here; the customer can send that transfer in the SmartRemit portal. The same call repeated within 120 seconds returns the same prepared transfer, not a second one.
cancel_prepared_transfer
Cancels a transfer that this app prepared, while it is not paid. Scope transfers:prepare. Its pay link stops working.
| Input | Type | Notes |
|---|---|---|
prepared_transfer_id | string, required | From prepare_transfer. |
Returns cancelled: true. A paid, expired or unknown id, or one another app prepared, gives the same answer: "Prepared transfer not found." A paid transfer cannot be cancelled or refunded here.
list_schedules
The customer's active and paused repeat payments, newest first. Scope schedules:manage. No input. Each has schedule_id, status, recipient_name, recipient_id, amount, currency, frequency (monthly or weekly), day_of_month or day_of_week, end_date, next_due_date (the next day a pay link goes out, US Eastern date), last_pay_link_sent_at, purpose and set_up_in (the name of the app that set it up, or null). No account number or phone number is returned.
create_schedule
Sets up a repeat payment to one of the customer's saved recipients in India. Scope schedules:manage. It uses the same checks as the SmartRemit portal: a saved recipient with a saved account, India only, the customer's legal name on file, an amount inside the platform range and a required purpose. Nothing is paid: on each due day SmartRemit makes the transfer, with every usual check and the customer's send limits, and sends the customer the pay link on WhatsApp. The portal shows "Set up in" and the app's name.
| Input | Type | Notes |
|---|---|---|
recipient_id | string, required | From list_recipients. |
amount | number, required | The amount to send each time, in the sender's currency. |
frequency | string, required | monthly or weekly. |
day_of_month | integer | Required for monthly: 1 to 28. |
day_of_week | string | Required for weekly: sunday to saturday. |
end_date | string | Optional last date, YYYY-MM-DD, in the future. Absent: it runs until cancelled. |
purpose | string, required | One of family_support, gift, education, medical, savings, bills, business, other. |
purpose_detail | string | Required when purpose is other: the customer's own reason, 10 to 120 characters. |
Returns created: true and the repeat payment as list_schedules shows it. The same call repeated within 120 seconds returns the same repeat payment, not a second one. A reason that needs the customer to read a safety warning is refused here; the customer can set that one up in the SmartRemit portal.
change_schedule
Pauses, resumes or cancels one of the customer's repeat payments. Scope schedules:manage. A cancel is final. To change the amount or the day, cancel it and set up a new one.
| Input | Type | Notes |
|---|---|---|
schedule_id | string, required | From list_schedules. |
action | string, required | pause, resume or cancel. |
Returns changed: true, the new status and the next_due_date. Another customer's id, or an unknown one, answers "Repeat payment not found."
Limits
- 60 tool calls a minute and 600 an hour per connection. Over the limit, the tool answers "Too many requests from this app. Wait a minute, then try again."
- A request body is at most 64 KB.
prepare_transfer: at most 10 prepared transfers an hour per customer, all apps together. This budget is separate from the SmartRemit portal's, so an app never blocks the customer's own sends.create_schedule: at most 5 new repeat payments a day per customer, all apps together.change_schedule: at most 20 changes an hour per customer, all apps together, on a budget separate from the portal's.- The send limits themselves are the customer's normal SmartRemit limits; an AI app never raises them.
Errors
| What you see | Why | What to do |
|---|---|---|
HTTP 401 with WWW-Authenticate: Bearer resource_metadata=… | No token, an expired or revoked token, or a token for another host. | The app signs in again (an expired access token is refreshed automatically). |
HTTP 403 insufficient_scope | The connection was granted without the scope this tool needs. | Disconnect and connect again, allowing all permissions. |
| Tool error "SmartRemit AI tools are switched off." | AI apps are not switched on for this account, or SmartRemit switched them off. | Ask SmartRemit. |
| Tool error "Too many requests from this app…" | A rate limit above. | Wait a minute. |
| Tool error "Transfer not found." | Unknown id, or not this customer's transfer. | Check the id with list_recent_transfers. |
| Tool error "Recipient not found…" | The recipient_id is not one of this customer's saved recipients. | Get the id with list_recipients. |
| Tool error "This recipient has no saved account for that country…" | The recipient has no saved account the pay page can pay, for that country. | The customer sends to them in SmartRemit on WhatsApp or the portal. |
| Tool error "This prepared transfer is being paid now…" | The customer is paying it at this moment, so it cannot be cancelled. | Check get_transfer_status. |
| Tool error "Prepared transfer not found…" | The prepared transfer is paid, cancelled or expired, or another app prepared it. | Check get_transfer_status. |
HTTP 403 insufficient_scope on prepare_transfer | The connection was made before SmartRemit added transfers:prepare, or without it. | Disconnect and connect again, allowing all permissions. |
HTTP 403 insufficient_scope on list_schedules, create_schedule or change_schedule | The connection was made before SmartRemit added schedules:manage (October 2026), or without it. | Connect again and allow all permissions. Most apps ask you to sign in again by themselves. |
| Tool error "Repeat payments go to recipients in India only…" | Repeat payments are India only today. | Send to that recipient with prepare_transfer. |
| Tool error "Repeat payment not found…" | Unknown id, or not this customer's repeat payment. | Get the id with list_schedules. |
| Tool error "Something went wrong on our side…" | A temporary SmartRemit problem. | Try again later. |
| Sign-in page "This is not available" | AI apps are not switched on for this account. | Ask SmartRemit. |
The app cannot add the connector (registration answers 403 access_denied). Claude says "Couldn't register with smartremit's sign-in service" and offers an OAuth Client ID field: leave it empty. | AI apps are switched off for this SmartRemit service. | Ask SmartRemit. |
For client developers
You only need this section if you are building your own MCP client. SmartRemit follows the MCP authorization specification.
| Endpoint | Path on https://send.smartremit.ai |
|---|---|
| Protected resource metadata (RFC 9728) | /.well-known/oauth-protected-resource/api/mcp |
| Authorization server metadata (RFC 8414) | /.well-known/oauth-authorization-server |
| Dynamic client registration (RFC 7591) | /oauth/register |
| Authorization | /oauth/authorize |
| Token | /oauth/token |
| Revocation (RFC 7009) | /oauth/revoke |
- The issuer is
https://send.smartremit.ai. Authorization responses carryiss(RFC 9207). - PKCE with
S256is required.plainis refused. - Send
resource=https://send.smartremit.ai/api/mcp(RFC 8707) on both the authorization and the token request; any other value isinvalid_target. - Register at
/oauth/registerwithtoken_endpoint_auth_methodnone(a public client, the usual choice) orclient_secret_post/client_secret_basic(the secret is shown once). - Register with up to 20
redirect_uristhat usehttps(a loopbackhttpaddress is allowed for local tools), each at most 512 characters. The redirect URI must match exactly. - Authorization codes last 300 seconds and work once. Access tokens (
sra_…) last 60 minutes. Refresh tokens (srr_…) rotate on every use; presenting an already-used refresh token ends the whole connection. - Send the access token only in the
Authorization: Bearerheader, never in a query string. - Partner API keys are never accepted on the MCP server.
- Protocol versions
2025-11-25,2025-06-18,2025-03-26and2024-11-05are served.