# Laso MCP MCP Server

> **Laso MCP MCP Server** is a hosted, multitenant Model Context Protocol (MCP) server run by **MewCP** (https://mewcp.com), giving AI agents managed access to Laso MCP.
>
> MewCP takes care of all MCP infrastructure for you — credential storage, OAuth flows,
> token refresh, and production-grade auto-scaling — so your AI agents can connect to
> third-party services and run freely without you managing any MCP server yourself.
>
> Server page:  https://mewcp.com/mcp/laso-mcp
> MewCP docs:   https://docs.mewcp.com
> Full catalog: https://mewcp.com/llms.txt

---

## About

Laso Finance enables AI agents to manage financial operations through managed wallets, prepaid cards, gift cards, bank payments, withdrawals, balance checks, and x402 payments to external APIs, with automated USDC settlement and configurable spending guardrails.

---

## Details

- Server ID: `laso-mcp`
- Version: 1.0.0
- Tools: 68
- Authentication: OAuth, managed by MewCP
- Transport: http

---

## Access

The gateway URL below serves your **entire MewCP toolset**, not this server on its
own. Pasting a config snippet is not enough — Laso MCP has to be in the toolset
first. In order:

1. Add Laso MCP to your toolset at https://mewcp.com/mcp/laso-mcp
2. Connect your Laso MCP account (OAuth); MewCP stores the credential and attaches it to each call
3. Copy your MewCP API key from the dashboard (Developer)
4. Configure your client with the snippet for it below

Once connected, an agent does **not** see this server's tools as top-level tools.
It sees four meta-tools and reaches everything through them:

- `search(query)` — find tools by keyword across the toolset
- `get_schema(tools)` — full description and arguments for the tools you picked
- `list_accounts(provider)` — only when one app has several connected accounts
- `call_tool(server_maskedId, tool_name, args)` — execute

So the list below is what `search` can return for this server, not a set of
callable tool names on their own.

---

## Tools (68)

Descriptions are truncated to 160 characters; call `get_schema`
for the full text and the argument schema. Where a tool is annotated, its type
is shown — treat `destructive` as irreversible.

- `get_version` _(read)_ — Get the current docs version Returns the current API contract version (`api_version`), the versioning and deprecation policy, and the content-hash version of…
- `refresh_token` _(write)_ — Refresh an ID token Exchange a refresh token for a new ID token. This is a free endpoint — no x402 payment required. Uses the standard OAuth2…
- `order_card` _(destructive)_ — Order a USA prepaid card Pay between $5–$1000 USDC to order a Laso Finance USA prepaid card. By default returns JSON with auth credentials and card info (for…
- `get_card_data` _(read)_ — Get card details Returns the current status and details of card orders. If `card_id` is provided, returns a single card, looked up across U.S. non-reloadable,…
- `list_card_transactions` _(read)_ — List reloadable card transactions Returns transactions on the authenticated user's **reloadable** cards, newest first: amount, merchant, status, and…
- `get_card_deposit_address` _(read)_ — Get the reloadable card deposit address Returns the account holder's own USDC deposit address at the card issuer, and the balance currently on it. **This is…
- `get_saved_cards` _(read)_ — List the holder's saved cards Lists the cards the account holder saved themselves: a card they already own, typed once on the card issuer's page and locked…
- `create_saved_card_link` _(write)_ — Get a link for the holder to save their own card Returns a single-use link where the account holder types a card they already own and locks it with their…
- `buy_with_saved_card` _(write)_ — Shop and pay with the holder's saved card Buys from online merchants (Amazon, Walmart, Target, Best Buy, DoorDash and more) and pays with the card the account…
- `get_purchase_turn` _(read)_ — Read a purchase turn that was still running Reads back a turn from `POST /buy-with-saved-card` that came back `state: running`. Poll every few seconds until…
- `get_purchase_conversation` _(read)_ — Read a purchase conversation's orders The record of a purchase conversation: whether a turn is still running, the last checkout attempt, and every order it…
- `create_reloadable_card` _(write)_ — Create a reloadable card Creates a **reloadable** card funded from the account holder's balance with the card issuer, and returns it. This is the same card the…
- `get_account_balance` _(read)_ — Get account balance Returns the current account balance and total deposits for the authenticated user.
- `get_kyc_status` _(read)_ — Get KYC verification status (optional) **KYC is optional.** Most endpoints (cards, gift cards, push-to-card, account balance, withdrawals) do not require…
- `get_kyc_link` _(read)_ — Get a KYC verification link (optional) **KYC is optional.** It is only needed for certain features such as Venmo/PayPal payouts via `/send-payment`, and may be…
- `register_webhook` _(write)_ — Register a notification webhook (free) Registers (or replaces) an HTTPS webhook URL to receive the calling wallet's account notifications as signed POSTs —…
- `get_webhook` _(read)_ — Get webhook registration & delivery health (free) Returns the calling wallet's webhook registration and its delivery health. The signing secret is never…
- `delete_webhook` _(destructive)_ — Delete the notification webhook (free) Removes the calling wallet's webhook registration. Notifications keep flowing to the user's other channels (push, SMS,…
- `withdraw` _(destructive)_ — Withdraw from account balance Initiate a withdrawal from the user's account balance. The USDC is sent on Solana to the `solana_address` you supply; the…
- `get_withdrawal_status` _(read)_ — Get withdrawal statuses Returns the status of withdrawals for the authenticated user. If `withdrawal_id` is provided, returns a single withdrawal. If omitted,…
- `refresh_card_data` _(write)_ — Trigger a card data refresh Requests an updated balance for a card. For U.S. non-reloadable cards (default), the card is re-scraped from the issuer via a…
- `order_intl_card` _(destructive)_ — Order an international prepaid card Order an international non-reloadable prepaid card (USD). The order is queued and fulfilled by an admin — after…
- `cancel_intl_order` _(destructive)_ — Cancel a queued international card order Cancel a previously queued international non-reloadable card order, as long as it has not yet been fulfilled by an…
- `search_merchants` _(read)_ — Search merchant spend data Search Laso's merchant database for confirmed spend data for a given card type. Returns whether the card was accepted, not accepted,…
- `get_pricing` _(read)_ — Get the fee schedule Returns the fee and limits of every paid product: the route, the `amount` range it accepts, the fee rate, and the minimum fee. Free, no…
- `get_supported_countries` _(read)_ — Get supported countries Returns where each product can be used or sent, as ISO 3166-1 alpha-2 country codes. Free, no auth or payment header. The USA prepaid…
- `start_signup` _(write)_ — Start a signup for a human with no Laso account Begins account creation for a human who does not have a Laso account yet. Requires no authentication, because…
- `get_signup_status` _(read)_ — Wait for your human to finish the signup Long-polls until the human opens the claim link and finishes creating the account. Holds the connection open for about…
- `get_auth_link` _(read)_ — Get a login link for the web dashboard Returns a URL that a human can open in a browser to log in to the Laso Finance web dashboard as the authenticated user.…
- `send_feedback` _(write)_ — Send feedback about the API Tell the humans running Laso what worked, what was confusing, and what you wish existed. It lands on their dashboard, so it is the…
- `list_address_book` _(read)_ — List saved recipients The saved recipient names your human manages on their dashboard, so a request like "send $20 to the coffee vendor" can be resolved to an…
- `save_address_book_entry` _(write)_ — Save or rename a recipient The saved recipient names your human manages on their dashboard, so a request like "send $20 to the coffee vendor" can be resolved…
- `delete_address_book_entry` _(destructive)_ — Remove a saved recipient The saved recipient names your human manages on their dashboard, so a request like "send $20 to the coffee vendor" can be resolved to…
- `push_to_card` _(destructive)_ — Send money to a debit card (USD, EUR, GBP) Pay USDC to initiate a push-to-card transfer. Specify the face value in the target currency (USD, EUR, or GBP); Laso…
- `send_payment` _(destructive)_ — Send a payment via Venmo or PayPal Pay USDC to send money to a Venmo or PayPal recipient. The x402 USDC price is the requested amount plus a 4.9% fee (with a…
- `fund_card_balance` _(destructive)_ — Load a reloadable card balance Pay USDC to load the account holder's reloadable card balance at the card issuer. **Why this exists:** the card issuer only…
- `withdraw_card_balance` _(destructive)_ — Withdraw from a reloadable card balance Move unspent money off the account holder's reloadable card. The balance behind a reloadable card is held by the card…
- `list_payment_recipients` _(read)_ — List saved Venmo and PayPal recipients (free) Lists the Venmo or PayPal recipients this account has paid before, so you can resolve a name your human said…
- `update_payment_recipient` _(write)_ — Rename or archive a saved recipient (free) Renames a saved Venmo or PayPal recipient, archives it, or both. Provide at least one of `display_name` or…
- `delete_payment_recipient` _(destructive)_ — Remove a saved recipient (free) Removes a saved Venmo or PayPal recipient. Payment history is kept; only the saved entry stops being offered. This is not…
- `get_payment_status` _(read)_ — Check Venmo and PayPal payout status (free) Reports the state of the Venmo and PayPal payouts this account has sent with `GET /send-payment`. Free: only the…
- `send_bank_payment` _(destructive)_ — Send dollars to a bank account Pay USDC to send dollars to a bank account by ACH. The x402 USDC price is the requested amount plus a 0.25% transfer fee (with a…
- `search_gift_cards` _(read)_ — Search the gift card catalog Browse and search available gift cards. Returns a list of gift card products with pricing, denomination, and catalog information.…
- `order_gift_card` _(destructive)_ — Order a gift card Pay USDC via x402 to order a gift card. First browse the catalog via `GET /search-gift-cards` to find the `laso_server_id` for the card you…
- `create_banking_profile` _(write)_ — Create the banking profile Opens the banking profile that all other banking calls hang off. Identity verification is required first; if the human has not…
- `get_banking_profile_status` _(read)_ — Check the banking profile status Reads the current state of the banking profile: whether it exists, and where its application stands. Free.
- `get_banking_application` _(read)_ — Read the banking application Reads what the application still needs. Returns `ready` (whether it can be submitted), `applicationStatus`, and the outstanding…
- `update_banking_application_details` _(write)_ — Answer application questions Submits answers to the non-identity application questions read from `getBankingApplication`. Call as many times as needed; each…
- `upload_banking_document` _(write)_ — Upload a proof-of-address document Attaches a proof-of-address document to the banking application, for the cases where the partner asks for one. The…
- `submit_banking_application` _(write)_ — Submit the application Submits the completed application for review. If the partner rejects it as incomplete, the reply says what is still missing rather than…
- `create_banking_account` _(write)_ — Open an on-ramp or off-ramp account Opens a banking rail. An **on-ramp** issues a virtual US bank account: dollars sent to it arrive as USDC in the managed…
- `list_banking_accounts` _(read)_ — List banking accounts Lists the account's banking rails and their details — for an on-ramp, the routing and account numbers to give whoever is paying in. The…
- `create_banking_recipient` _(write)_ — Create a payout recipient Creates a person or company money can be sent to. Bank details are attached separately with `addBankingDestination`. Free.
- `add_banking_destination` _(write)_ — Attach bank details to a recipient Attaches a bank account or crypto address to a recipient and returns the `destination_id` that `/send-bank-payment` pays out…
- `list_banking_recipients` _(read)_ — List recipients and destinations Lists payout recipients and their destinations, with account numbers masked to the last four digits. This is where…
- `update_banking_destination` _(write)_ — Rename a destination Sets or clears a destination's nickname. This is the only editable field: bank details are immutable at the partner, so anything else…
- `delete_banking_recipient` _(destructive)_ — Delete a recipient Deletes a recipient, its destinations, and any off-ramp account that paid out to it. Irreversible. Free.
- `get_banking_transaction` _(read)_ — Read one transaction Reads a single banking transaction — an on-ramp arriving or an off-ramp paying out — with its normalized status. Free.
- `list_banking_transactions` _(read)_ — List transactions Lists banking transactions for the account: money arriving over the on-ramp and paying out over the off-ramp, with normalized statuses and…
- `exchange_api_key` _(write)_ — Exchange an API key for a session Exchanges a durable `lasoak_` API key for a short-lived `id_token` (one hour) plus a `refresh_token`, and returns an…
- `get_agent_spend_limit` _(read)_ — Read the per-payment spend limit Returns the maximum the account owner allows for any single payment from the managed wallet: `maxPerPaymentUsdc`, plus the…
- `create_agent_api_key` _(write)_ — Issue an API key Issues a durable `lasoak_` API key for the account. **The raw key is returned once** — only its hash is stored, so it cannot be retrieved…
- `announce_connection` _(write)_ — Call this FIRST, before any other Laso tool. Your human is watching a screen that waits for you to connect; this is what resolves it, names you in their…
- `get_agent_wallet` _(read)_ — Get your managed agent wallet: whether one exists, its Solana address, its USDC balance, and whether it needs funding. Paid tools draw from this wallet, so…
- `create_agent_wallet` _(write)_ — Create your managed agent wallets (one Solana wallet and one Base wallet per account; idempotent). Returns the Solana wallet as walletId and address, and the…
- `agent_wallet_transfer` _(destructive)_ — Transfer USDC out of your managed agent wallet to any Solana address, or to any Base address by setting destination_network to base (bridged over CCTP, minimum…
- `pay_x402_endpoint` _(destructive)_ — Pay ANY external x402-paywalled endpoint from your managed agent wallet: the target's 402 challenge is settled in USDC and the response body is returned, with…
- `search_docs` _(read)_ — Search the Laso Finance agent docs (SKILL.md and the full API reference). Returns the most relevant sections. Use this for anything the tool descriptions don't…

---

## Connect

Gateway URL: https://gateway.mewcp.com/personal/mcp

Every request carries one header:

    Authorization: Bearer <API_KEY>

Replace `API_KEY` with your own key from the dashboard (Developer).

## Apps

### Claude Desktop

Mac & Windows app

- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "command": "npx",
      "args": [
        "-y",
        "mcp-remote@latest",
        "https://gateway.mewcp.com/personal/mcp",
        "--header",
        "Authorization: Bearer API_KEY"
      ]
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open Claude Desktop → Settings → Developer → "Edit Config"
2. Paste the snippet inside the outer { } of the config file (merge with your existing "mcpServers" section if you have one)
3. Save the file and restart Claude Desktop
4. Start a new conversation — your tool will be available

### VS Code

Copilot / Cline

- Command Palette → "MCP: Open User Configuration" (opens mcp.json). For one project only, use .vscode/mcp.json instead.

```json
{
  "mcp.servers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have a "servers" section in your mcp.json? Just add the server entry inside it.

1. Open VS Code → Command Palette (Cmd+Shift+P / Ctrl+Shift+P)
2. Run "MCP: Open User Configuration" to open your mcp.json
3. Paste the snippet and save
4. Start the server when prompted (or from the MCP servers view) and use it in Copilot Chat

### Cursor

AI-first editor

- macOS: `~/.cursor/mcp.json`
- Windows: `%USERPROFILE%\.cursor\mcp.json`

```json
{
  "mcpServers": {
    "mewcp": {
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your mcp.json? Just add the server entry inside it.

1. Open Cursor → Settings → Cursor Settings → MCP
2. Click "Add new global MCP server"
3. Paste the snippet and save
4. Restart Cursor

### Codex

OpenAI's CLI agent

- Add the snippet to your Codex MCP config or your standard MCP config file for the CLI tool you use.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Codex generally reads a standard MCP server block, so you can add this alongside your other configured servers.

1. Open your Codex MCP config or project-level config file
2. Paste the MewCP server block inside the config JSON/TOML structure your tool expects
3. Save the file and restart Codex
4. Verify the tool is available inside a fresh session

### Claude Code

Anthropic's CLI agent

- ~/.claude.json (user scope) or .mcp.json in your project root — create it if it doesn't exist. Or skip the file and use the CLI command below.

```json
{
  "mcpServers": {
    "mewcp": {
      "type": "http",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it.

1. Open ~/.claude.json (or .mcp.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file and start (or restart) Claude Code
4. Or skip the file entirely and run the CLI command below instead

### OpenCode

Open-source terminal agent

- ~/.config/opencode/opencode.json (global) or opencode.json in your project root — create it if it doesn't exist.

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mewcp": {
      "type": "remote",
      "url": "https://gateway.mewcp.com/personal/mcp",
      "enabled": true,
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcp" section in your opencode.json? Just add the server entry inside it.

1. Open ~/.config/opencode/opencode.json (or opencode.json in your project root) in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and start (or restart) OpenCode

### OpenClaw

Self-hosted agent gateway

- ~/.openclaw/openclaw.json — create it if it doesn't exist.

```json
{
  "mcp": {
    "servers": {
      "mewcp": {
        "transport": "streamable-http",
        "url": "https://gateway.mewcp.com/personal/mcp",
        "enabled": true,
        "headers": {
          "Authorization": "Bearer API_KEY"
        }
      }
    }
  }
}
```

Already have an "mcp" section in your openclaw.json? Just add the server entry inside "servers".

1. Open ~/.openclaw/openclaw.json in a text editor
2. Paste the snippet inside the outer { } (merge with your existing "mcp" section if you have one)
3. Save the file and restart OpenClaw

### Antigravity

Google's agentic IDE

- ~/.gemini/config/mcp_config.json (global) or .agents/mcp_config.json (workspace-local) — create it if it doesn't exist.

```json
{
  "mcpServers": {
    "mewcp": {
      "serverUrl": "https://gateway.mewcp.com/personal/mcp",
      "headers": {
        "Authorization": "Bearer API_KEY"
      }
    }
  }
}
```

Already have an "mcpServers" section in your config? Just add the server entry inside it. Remote servers must use the "serverUrl" field — the legacy "url"/"httpUrl" fields aren't supported.

1. In the editor's agent side panel, click "…" → "MCP Servers" → "Manage MCP Servers" → "View raw config" (Antigravity CLI: type /mcp instead to open the Interactive MCP Manager)
2. Paste the snippet inside the outer { } (merge with your existing "mcpServers" section if you have one)
3. Save the file — the server connects automatically

### Hermes

Nous Research's CLI agent

- config.yaml in your Hermes config directory (~/.hermes) — add this under a top-level "mcp_servers:" key.

```yaml
mcp_servers:
  mewcp:
    url: "https://gateway.mewcp.com/personal/mcp"
    headers:
      Authorization: "Bearer API_KEY"
```

Already have an "mcp_servers" section in your config.yaml? Just add the server entry inside it.

1. Open config.yaml in your Hermes config directory
2. Paste the snippet under the top-level "mcp_servers:" key (merge with existing entries if you have any)
3. Save the file, then run /reload-mcp in Hermes (or start a fresh session)
4. Ask Hermes "Tell me which MCP-backed tools are available right now" to confirm it connected

### DeepSeek Harness

DeepSeek's agent harness

- cordis.yml in your DSH project — or the patch file you mount plugins from.

```yaml
- id: mcp-mewcp
  name: '@deepseek-ai/dsh-mcp-client'
  config:
    serverName: mewcp
    transport: streamable-http
    url: https://gateway.mewcp.com/personal/mcp
    headers:
      Authorization: "Bearer API_KEY"
```

One plugin instance = one MCP server. Add this entry to your plugin list; don't nest it inside another entry.

1. Open cordis.yml (or your patch file) in your DSH project
2. Paste the entry into your plugin list, keeping the leading dash and indentation
3. Restart DSH (or let HMR reload) — tools register as mcp__mewcp__<tool_name>
4. Verify with: dsh web --dump-config | grep -A3 mcp

## SDKs

### Python

fastmcp client

```python
import asyncio
from fastmcp import Client
from fastmcp.client.transports import StreamableHttpTransport

SERVER_URL = "https://gateway.mewcp.com/personal/mcp"
API_KEY = "API_KEY"

transport = StreamableHttpTransport(
    url=SERVER_URL,
    headers={
        "Authorization": f"Bearer {API_KEY}",
    }
)

async def main():
    client = Client(transport)
    async with client:
        tools = await client.list_tools()
        print(tools)

asyncio.run(main())
```

1. Install fastmcp: pip install fastmcp
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run your script

### TypeScript

MCP SDK

```typescript
import { Client } from "@modelcontextprotocol/sdk/client/index.js";
import { StreamableHTTPClientTransport } from "@modelcontextprotocol/sdk/client/streamableHttp.js";

const SERVER_URL = "https://gateway.mewcp.com/personal/mcp";
const API_KEY = "API_KEY";

const transport = new StreamableHTTPClientTransport(new URL(SERVER_URL), {
  requestInit: {
    headers: {
      Authorization: `Bearer ${API_KEY}`,
    },
  },
});

const client = new Client({ name: "mewcp-client", version: "1.0.0" });
await client.connect(transport);

const tools = await client.listTools();
console.log(tools.tools.map((t) => t.name));
```

1. Install: npm install @modelcontextprotocol/sdk
2. Copy the snippet into your project
3. Replace API_KEY with your key from the dashboard
4. Run with Node 18+ as an ES module (e.g. npx tsx script.ts)