Skip to main content
Glama
xendit-mcp

xendit-mcp

by indratjhai

xendit-mcp (read-only)

Minimal, read-only MCP server for Xendit. Built for the CareNow Issue Resolver agent — looks up payments, disbursements, refunds, and VA transactions. Never moves money.

Unofficial. Not affiliated with or endorsed by Xendit.

Why read-only?

Agents should not be able to call create_disbursement, create_refund, or expire_invoice — even via prompt injection from a Xendit-side field. This server exposes only GET endpoints. For defense in depth, also use a Xendit API key scoped to *_READ permissions.

Related MCP server: mcp-hevo-service

Install & run

No clone required. Install directly from GitHub via npx:

{
  "mcpServers": {
    "xendit": {
      "command": "npx",
      "args": ["-y", "github:indratjhai/xendit-mcp"],
      "env": {
        "XENDIT_API_KEY": "xnd_development_..."
      }
    }
  }
}

On first run, npm clones the repo, installs deps, and runs npm run build via the prepare script. After that it launches from the cached install.

Pin a specific commit for reproducibility:

"args": ["-y", "github:indratjhai/xendit-mcp#<commit-sha>"]

Local development

git clone https://github.com/indratjhai/xendit-mcp.git
cd xendit-mcp
npm install
cp .env.example .env  # fill in XENDIT_API_KEY
npm run dev

API key

  1. Go to https://dashboard.xendit.co/settings/developers#api-keys

  2. Create a key with READ-only permissions:

    • BALANCE_READ

    • INVOICE_READ

    • TRANSACTION_READ

    • DISBURSEMENT_READ

    • REFUND_READ

    • PAYMENT_REQUEST_READ

  3. Use a xnd_development_... test key while developing.

Tools

Tool

Purpose

xendit_get_balance

Account balance by type (CASH / HOLDING / TAX)

xendit_list_invoices

Filter by external_id, status, date range

xendit_get_invoice

Invoice by ID

xendit_list_transactions

Core tool — filter by reference_id, type, channel, date

xendit_get_transaction

Transaction by ID

xendit_get_disbursement

Disbursement by ID

xendit_get_disbursement_by_external_id

Disbursement by your reference

xendit_list_refunds

Filter by payment_request_id / invoice_id / reference_id

xendit_get_refund

Refund by ID

xendit_list_payment_requests

New Payments API — filter by reference_id

xendit_get_payment_request

Payment request by ID

xendit_get_fixed_va

Virtual account — for Wrong VA investigations

xendit_get_va_payment

VA payment by payment_id

What's not here (by design)

  • create_invoice, expire_invoice

  • create_disbursement

  • create_refund

  • create_payment_request

  • Any POST / PATCH / DELETE

If a workflow needs a mutation, it should be done manually in the Xendit dashboard or via a separate approval flow that a human reviews — not from an agent session.

Security notes

  • API key read from XENDIT_API_KEY env var. Never logged, never sent to tool output.

  • Network egress is hardcoded to https://api.xendit.co — no other hosts.

  • Path-component IDs are validated against ^[a-zA-Z0-9_-]+$ and URL-encoded.

  • All tool inputs are zod-validated.

  • Only runtime deps: @modelcontextprotocol/sdk, zod.

License

MIT

Available Tools

13 tools
xendit_get_balanceA

Get Xendit account balance. Returns available balance by account type (CASH, HOLDING, TAX).

Inputs: accountType, currency.

xendit_get_disbursementA

Get disbursement status by Xendit disbursement ID. Use for refund/payout status lookups.

Inputs: disbursementId (required).

xendit_get_disbursement_by_external_idB

Look up disbursements by your external_id (usually CareNow reference). Returns array of matching disbursements.

Inputs: externalId (required).

xendit_get_fixed_vaB

Get fixed virtual account details by Xendit VA ID. Critical for Wrong VA investigations.

Inputs: vaId (required).

xendit_get_invoiceC

Get details of a specific invoice by Xendit invoice ID.

Inputs: invoiceId (required).

xendit_get_payment_requestB

Get payment request details by Xendit payment_request ID. The new Payments API replaces the legacy VA / charge flows.

Inputs: paymentRequestId (required).

xendit_get_refundC

Get refund details by Xendit refund ID.

Inputs: refundId (required).

xendit_get_transactionC

Get details of a specific transaction by Xendit transaction ID.

Inputs: transactionId (required).

xendit_get_va_paymentB

Look up a VA payment by payment_id (the ID returned in the VA paid callback).

Inputs: paymentId (required).

xendit_list_invoicesA

List invoices with optional filters. For Wrong VA / Payment Discrepancy, filter by external_id (usually the CareNow loan ID).

Inputs: externalId, status, limit, createdAfter, +2 more.

xendit_list_payment_requestsB

List payment requests with optional filters. Use reference_id for CareNow loan ID lookups.

Inputs: referenceId, paymentMethodId, customerId, limit.

xendit_list_refundsC

List refunds, optionally filtered by payment_request_id, invoice_id, or reference_id.

Inputs: paymentRequestId, invoiceId, referenceId, limit.

xendit_list_transactionsB

List transactions (payments, disbursements, fees, refunds, adjustments). Core tool for payment discrepancy and wrong VA investigations. Filter by reference_id to find a specific transaction.

Inputs: referenceId, type, status, channelCode, +4 more.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.5/5.0

    Scored across 13 tools

    Disambiguation4/5

    Most tools are clearly distinct by resource type (e.g., balance, disbursement, invoice, transaction) and action (get vs. list), but there is some overlap between 'xendit_get_disbursement' and 'xendit_get_disbursement_by_external_id' as both retrieve disbursements, which could cause confusion. Descriptions help clarify the distinction, but the purpose overlap exists.

    Naming Consistency5/5

    All tool names follow a consistent 'xendit_verb_noun' pattern with snake_case, using 'get' for single resource retrieval and 'list' for collections. This predictable naming scheme makes it easy for agents to understand and navigate the tool set without ambiguity.

    Tool Count5/5

    With 13 tools, the count is well-scoped for a payment processing domain, covering key resources like balance, disbursements, invoices, transactions, and refunds. Each tool serves a specific purpose, and the number is neither too sparse nor overwhelming for the server's functionality.

    Completeness4/5

    The tool set provides comprehensive read operations (get and list) for all major payment-related resources, which is suitable for investigation and monitoring use cases. However, there are gaps in write operations (e.g., create, update, or delete for invoices or disbursements), limiting full lifecycle coverage, though this may be intentional for the server's focus.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Read-only SQL Server MCP server enabling safe database queries, table listing, and schema inspection with built-in security protections.
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Read-only MCP server for Hevo Data API, enabling monitoring of pipelines, objects, destinations, models, and workflows with secure self-hosted credentials.
      -
    • F
      license
      B
      quality
      D
      maintenance
      A secure, read-only MCP server that enables AI assistants to inspect transactions, vendor performance, wallet balances, and analytics through validated REST API calls.
      19
      -
    • A
      license
      Not graded
      quality
      B
      maintenance
      A read-only MCP server for Lunch Money that provides secure, retrieval-only access to financial data through ChatGPT Business, with OAuth authentication and enforced read-only restrictions.
      MIT