easypaydirect-mcp
A read-only MCP server that lets AI assistants query Easy Pay Direct / NMI-family gateway data for transactions, subscriptions, recurring plans, and Customer Vault records.
Fetch a single transaction by gateway transaction ID.
Search transactions by date range and optional filters: condition, action type, payment type, source, email, and order ID.
Fetch a single recurring subscription by ID.
List recurring subscriptions, optionally filtered by created/updated date range.
List recurring billing plans, or fetch one by plan ID.
Fetch a single Customer Vault record by ID.
List Customer Vault records, optionally filtered by created/updated date range.
All operations are strictly read-only; it cannot charge, refund, void, or modify vault data.
Requires
NMI_SECURITY_KEY; optionalNMI_API_URLfor EPD/white-label hosts.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@easypaydirect-mcp Find failed transactions for customer 12345 last week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
easypaydirect-mcp
📖 Documentation: https://praveendias1180.github.io/easypaydirect-mcp/
Unofficial, read-only Model Context Protocol server for the Easy Pay Direct (EPD) / NMI-family payment gateway.
Give an AI assistant (Claude Desktop, Claude Code, or any MCP client) safe, read-only access to your gateway's transactions, subscriptions, recurring plans, and Customer Vault records — so you can ask questions like "find the failed transactions for this customer last week" or "is this subscription still active?" in plain language.
Easy Pay Direct is built on the NMI / Network Merchants gateway platform, so this server works with any NMI white-label gateway — just point it at your gateway's host. EPD is the headline example, not the limit.
⚠️ Not affiliated with, endorsed by, or sponsored by Easy Pay Direct or NMI. "Easy Pay Direct", "EPD", and "NMI" are trademarks of their respective owners. This is an independent open-source client for their public Query API.
Why read-only?
This server talks only to the gateway's Query API (/api/query.php) — the reporting endpoint. It has no code path to the transaction endpoint (transact.php), so it cannot charge a card, issue a refund, void a transaction, or modify the vault. An LLM connected to this server can look, but it cannot touch money. See docs/security.md.
Write operations may arrive in a future major version — always opt-in, off by default, and loudly gated.
Related MCP server: MSSQL-MCP
Install & run
Requires Node.js 18+.
# no install needed — run straight from npm
npx easypaydirect-mcpThe server speaks MCP over stdio and expects two environment variables:
Variable | Required | Description |
| ✅ | Your gateway API security key (a read-only key is recommended). Merchant portal → Settings → Security Keys. |
| — | Gateway API base URL. Defaults to |
See docs/configuration.md for how to find your key and host.
Run with Docker
No local Node.js needed. Build the image from the repository root, then run it with -i — MCP talks over stdio, so the container needs stdin kept open:
docker build -t easypaydirect-mcp .
docker run --rm -i \
-e NMI_SECURITY_KEY=your_read_only_security_key \
-e NMI_API_URL=https://secure.nmi.com \
easypaydirect-mcpOr keep the variables in an env file (--env-file .env). .env is already git-ignored — never commit a real key.
Connect it to Claude
Claude Desktop — add to claude_desktop_config.json (see examples/claude-desktop-config.json):
{
"mcpServers": {
"easypaydirect": {
"command": "npx",
"args": ["-y", "easypaydirect-mcp"],
"env": {
"NMI_SECURITY_KEY": "your_read_only_security_key",
"NMI_API_URL": "https://secure.nmi.com"
}
}
}
}Claude Code:
claude mcp add easypaydirect \
-e NMI_SECURITY_KEY=your_read_only_security_key \
-e NMI_API_URL=https://secure.nmi.com \
-- npx -y easypaydirect-mcpTo use the Docker image instead, swap the command — a bare -e NAME forwards the variable into the container:
claude mcp add easypaydirect \
-e NMI_SECURITY_KEY=your_read_only_security_key \
-e NMI_API_URL=https://secure.nmi.com \
-- docker run --rm -i -e NMI_SECURITY_KEY -e NMI_API_URL easypaydirect-mcpFull walkthrough: docs/getting-started.md.
Claude Code plugin (server + skill)
The plugin installs the MCP server and an Agent Skill that teaches Claude how to read gateway data correctly — for example that a successful ACH sale is only submitted, not paid, and that EPD timestamps are UTC.
Set the key in your shell (the plugin reads it from the environment), then install:
export NMI_SECURITY_KEY=your_read_only_security_key
export NMI_API_URL=https://secure.nmi.com # optional; your EPD / white-label host/plugin marketplace add praveendias1180/easypaydirect-mcp
/plugin install easypaydirect@easypaydirect-mcpUsing another client? The skill is a plain SKILL.md — add it to any tool that supports Agent Skills.
Tools
All tools are read-only. Full reference in docs/tools.md.
Tool | What it does |
| Fetch one transaction by gateway transaction ID. |
| Search transactions by date range + filters (condition, action type, payment type, source, email, order id). |
| Fetch one recurring subscription by ID. |
| List recurring subscriptions, optionally by created/updated date range. |
| List recurring billing plans (or one by |
| Fetch one stored Customer Vault record by ID. |
| List stored Customer Vault records, optionally by date range. |
Develop
git clone https://github.com/praveendias1180/easypaydirect-mcp.git
cd easypaydirect-mcp
npm install
npm run build # compile TypeScript to dist/
npm run typecheck # type-check onlyLocal run against the MCP Inspector:
npx @modelcontextprotocol/inspector node dist/index.jsArchitecture and how tools map to the Query API: docs/nmi-api-mapping.md.
Roadmap
Planned / under consideration — contributions welcome (see open issues):
Tests — unit suite with recorded Query API fixtures (#1)
Friendlier dates — accept ISO-8601 in date filters (#2)
More filters — merchant-defined fields on
search_transactions(#3)Better errors — map NMI response codes to actionable messages (#4)
Distribution — publish-on-release automation (#8)
Docs — response-field reference (#9)
Read-only stays the default posture — any write support would be a separate, opt-in, gated major version.
See the changelog for released changes.
Contributing
Contributions are welcome — this aims to be a small, dependable, read-only MCP server. See CONTRIBUTING.md for the ground rules and dev setup.
New here? Start with a good first issue — each one has context, a task checklist, file pointers, and acceptance criteria. Have a question? Open a Discussion.
License
MIT © the easypaydirect-mcp contributors.
Available Tools
7 toolsget_customer_vault_recordA
Fetch a single stored Customer Vault record by its customer_vault_id (report_type=customer_vault). Returns stored profile data only — never full card numbers. Read-only.
Inputs: customer_vault_id (required).
get_subscriptionA
Fetch a single recurring subscription by its subscription ID (report_type=recurring). Read-only.
Inputs: subscription_id (required).
get_transactionA
Fetch a single transaction by its gateway transaction ID. Read-only.
Inputs: transaction_id (required).
list_customer_vaultA
List stored Customer Vault records, optionally filtered by created/updated date range (report_type=customer_vault). Read-only.
Inputs: end_date, start_date, date_search.
list_recurring_plansA
List recurring billing plans, optionally filtered to a single plan (report_type=recurring_plans). Read-only.
Inputs: plan_id.
list_subscriptionsA
List recurring subscriptions, optionally filtered by created/updated date range (report_type=recurring). Read-only.
Inputs: end_date, start_date, date_search.
search_transactionsA
Search transactions by date range and optional filters (condition, action type, payment type, source, email, order id). Read-only.
Inputs: email, source, end_date, order_id, +4 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 7 tools
Each tool targets a distinct resource and action: plans, transactions, subscriptions, and customer vault entries. The get vs. list/search operations are clearly separated, making misselection unlikely.
Most tools follow a consistent verb_noun pattern (list_*, get_*), but 'search_transactions' deviates from the list_* convention for collection queries, and 'get_customer_vault_record' includes an extra descriptor compared to similar getters. These are minor deviations.
With 7 tools, the set is well-scoped for a read-only reporting API, covering the core entities without unnecessary redundancy or bloat.
For a read-only reporting domain, the coverage is complete: all major entities (plans, transactions, subscriptions, customer vault) have retrieval capabilities, including single-item and list/search variants. No obvious gaps are present.
Maintenance
Related MCP Connectors
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Read-only MCP server for The Quiet Protocol's engines, benchmarks, proof, and business data.
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
MCP server for Modern Treasury — payment orders, transactions, counterparties and ledgers.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceRead-only MCP server for TourScale ERPNext, enabling agents to query franchisees, agreements, invoices, and GL entries via natural language.-
- AlicenseAqualityCmaintenanceSecurity-first, read-only MCP server for Microsoft SQL Server, enabling safe natural-language querying of databases.57 npmMIT
- AlicenseNot gradedqualityDmaintenanceA read-only MCP server for Wave Accounting that lets you query accounts receivable (outstanding invoices with viewing status) and monthly invoiced revenue via natural language.MIT
- AlicenseNot gradedqualityDmaintenanceRead-only MCP server enabling pest and lawn owners to ask FieldRoutes questions in plain English, with owner-shaped tools and a hosted connect vault.MIT