bepaid-mcp
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., "@bepaid-mcpexport last month's transactions to XLSX"
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.
bepaid-mcp
MCP server for the bePaid payment gateway:
Unofficial. A community project, not affiliated with or endorsed by bePaid. It uses the public bePaid APIs with your own shop credentials.
Transactions — list, look up and export transactions of a period (paginated report API) with fees, payouts, payer and card data, and the country of the card-issuing bank (domestic / foreign).
Payment links — one-off checkout pages with your own
tracking_idand required payer fields.Roster module (optional) — with a groups/payers workbook: payments per group and payer, per-payer payment links whose
tracking_ididentifies group, meeting and payer.
Tools
Always available:
Tool | Purpose |
| Transactions for a period (compact rows + totals) |
| Lookup by |
| All transactions of a period to a new XLSX (summary + transactions) or CSV |
| One-off payment link: amount, description, |
Registered only when ROSTER_XLSX_PATH is set:
Tool | Purpose |
| Groups from the roster workbook |
| Payer lookup by id, email, phone or name |
| Payments per group → payer, plus |
| Same report written to a new XLSX/CSV file |
| Payment link for a roster payer (prefilled payer, exact matching) |
Related MCP server: paystack-mcp-server
Setup
Getting the shop ID / secret key and the first test run: docs/credentials.md.
Requires Node.js 20+. Register with Claude Code (runs the published package via npx):
claude mcp add bepaid --scope user \
-e BEPAID_SHOP_ID=... -e BEPAID_SECRET_KEY=... \
-- npx -y bepaid-mcpOther MCP clients (Claude Desktop, Cursor, ...):
{
"mcpServers": {
"bepaid": {
"command": "npx",
"args": ["-y", "bepaid-mcp"],
"env": { "BEPAID_SHOP_ID": "...", "BEPAID_SECRET_KEY": "..." }
}
}
}Variable | Description |
| Shop credentials (HTTP Basic auth for all bePaid APIs) |
|
|
| Time zone for report periods (default |
| Optional redirect after checkout |
| Optional roster workbook (read-only); enables the |
| Comma-separated substrings identifying bePaid payment URLs in the roster |
| Output folder for exports (default |
|
|
From a local checkout:
npm install && npm run build
cp .env.example .env # fill in; npm start / npm run inspect read it
claude mcp add bepaid -- node --env-file=/absolute/path/.env /absolute/path/dist/index.jsRoster workbook format
Sheet
Groups: columnsГруппа,Основная локация,Тип, optionalПрограмма— the payment description bePaid shows for the group's payments (e.g.Основы терапии; quotes and case are ignored).One sheet per group: cell
B1holds the group code; a header row (within the first 10 rows) starts with the payer columnПлательщик(also accepted:Обучающийся,Payer). Columns are located by header name:First Name + Last Name,Имя Фамилия Отчество,Email,Phone,Телеграм ник,Способ оплаты.Optional sheet
Модули— one row per module, header in row 1:Группа
Встреча
Дата
Цена
Валюта
Альфа-25.1
1
14.09.2026
550
BYN
Группаis the group code (as inB1of the group sheet);Датаa date cell orDD.MM.YYYY;Валютаdefaults to BYN. Unreadable rows are listed as warnings byroster_list_groups.Optional sheet
Ручные сопоставления— assignments for payments that cannot be matched automatically (ERIP, a relative's card), header in row 1:UID транзакции
Группа
Плательщик
Встреча
Комментарий
12345-abcdef0123
Альфа-25.1
Анна Иванова
3
ЕРИП
Copy
UID транзакцииfrom the export.Плательщикaccepts a name, email, phone or roster id.
Payment matching
Manual assignment (
Ручные сопоставления) by transaction UID.tracking_idof links created by this server (exact group, meeting and payer).Payment description → only groups with that
Программа. A description no group has (e.g. an individual consultation) goes to «Другие программы»; groups without aПрограммаvalue always stay candidates.Payer email → phone → name (first + last name, any order, Cyrillic or Latin) → name allowing Belarusian passport spellings (Volha = Ольга, Aliaksandra = Александра; reported as
name_fuzzy— worth a glance).If the payer studies in several groups:
price — the amount must equal the group's module price or a multiple of it (several modules paid at once). Exactly one fitting group wins; none fitting → left for review.
date — if several groups fit the price, the group with a module date nearest to the payment date wins.
Otherwise (no data, equal distance) the payment is listed as
ambiguousfor manual review.
The report column «Группа выбрана по» shows which rule decided.
Payment origin
Every payment carries the country of the card-issuing bank (issuer_country from bePaid; ERIP is always BY).
Reports total domestic / foreign payments, foreign ones per country and per group, and the export has a sheet
«Иностранные платежи» with all foreign payments (matched or not) for declaring them to the bank.
Publishing
npm version patch # or minor / major
npm publish # prepublishOnly builds and runs the testsDevelopment
npm test # vitest
npx vitest run test/report.test.ts -t "ambiguous" # single file / test
npm run typecheck
npm run inspect # MCP Inspector against dist/Testing payments: in test mode use card 4200000000000000 (success) or 4005550000000019 (failure).
License
MIT
Available Tools
4 toolsbepaid_create_payment_linkCreate bePaid payment linkA
Creates a one-off bePaid payment page (checkout token) and returns its URL. Links are test payments unless the server runs with BEPAID_TEST_MODE=false.
| Name | Required | Description | Default |
|---|---|---|---|
| test | No | Defaults to the server test mode | |
| amount | Yes | Amount in major units, e.g. "550.00" | |
| currency | No | BYN | |
| description | Yes | Shown to the payer | |
| tracking_id | No | Your order/reference id, returned with the transaction | |
| customer_email | No | ||
| expires_in_hours | No | ||
| customer_last_name | No | ||
| customer_first_name | No | ||
| require_customer_fields | No | Fields the payer must fill in on the payment page |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, idempotent=false, openWorld=true, so the safety profile is covered. The description adds genuinely new behavior: the operation mints a checkout token and returns a URL, and crucially that links are test payments unless BEPAID_TEST_MODE=false — non-obvious context that affects how the agent interprets results. It does not mention auth requirements or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, zero filler, with the core purpose front-loaded and the mode caveat second. Nothing redundant with the title or schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 10 parameters, no output schema, and openWorld behavior, the description is thin: it does cover the return value (URL), which is the main gap left by the absent output schema, but ignores the customer/expiry/currency surface entirely. Adequate minimum, clear gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 50% across 10 parameters, so the description should compensate more than it does. It clarifies the interplay between the `test` flag and server test mode, which is valuable, but says nothing about currency, expiry, customer fields, or require_customer_fields. Baseline 3 for partial compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Creates a one-off bePaid payment page (checkout token)') and even names the returned artifact ('returns its URL'). This cleanly separates it from the read-only sibling tools (list/get/export transactions), so an agent can distinguish it without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the purpose — one-off payment collection — but the description never states when to reach for this versus the transaction-lookup siblings, nor any prerequisites (merchant account, credentials). The test-mode sentence is a useful contextual hint rather than explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bepaid_export_transactionsExport bePaid transactionsA
Writes all transactions of a period to a new XLSX (summary + transactions sheets) or CSV file: amounts, fees, payouts, payer, card, issuing bank country (domestic/foreign). Totals cover successful payments.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End of the period (inclusive), shop time zone | |
| from | Yes | Start of the period (inclusive), shop time zone | |
| format | No | xlsx | |
| status | No | all | |
| language | No | Column headers; defaults to EXPORT_LANGUAGE | |
| date_type | No | Which transaction date the period applies to | paid_at |
| payment_method_types | No | Defaults to all: credit_card, alternative, erip |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, openWorldHint=true, so the safety profile is covered. The description adds genuine behavioral detail beyond that — it writes to a NEW file and notes that totals cover only successful payments — but omits auth requirements, where the file lands, and any size/rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence that front-loads the action and output artifact before listing contents. No filler, though the second clause (contents list) could be trimmed without losing decision-relevant meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 7 parameters, no output schema, and a file-producing tool, the definition should at least say how the generated file is returned or where it is written. The 'totals cover successful payments' caveat is helpful, but the delivery mechanism of the export is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 71%, and the schema itself documents the date pattern, defaults, and enums. The description restates the output format options and hints at the period (from/to) and the successful-only total, but adds no syntax or semantic detail the schema lacks.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (writes/exports) plus the resource (all transactions of a period) and the concrete output artifact (new XLSX with summary + transactions sheets, or CSV). This clearly separates it from bepaid_list_transactions and bepaid_get_transaction, which return data rather than producing a file.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is for bulk period exports versus the list/get siblings, but the description never states when to choose it over bepaid_list_transactions or any exclusions (e.g. large ranges, unsupported filters). No explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bepaid_get_transactionGet bePaid transactionARead-only
Looks up a transaction by its uid, or all transactions with a given tracking_id. Also finds test transactions, which the report API does not return. With a roster configured, shows the matched group/payer.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | No | ||
| tracking_id | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds non-obvious behavioral context beyond that: it surfaces test transactions that the report API omits, and it notes that a configured roster causes matched group/payer data to be shown — real output-shaping behavior an agent could not infer from the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the primary lookup modes and followed by the two edge behaviors. No filler, though the roster sentence is slightly dense and could be more clearly attached to its trigger condition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read lookup with no output schema, the description covers what can be looked up, the special test-transaction behavior, and the roster-dependent enrichment. Return shape is left unspecified, but no output schema exists to define it either, so a small gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does clarify semantics: uid retrieves one transaction while tracking_id retrieves all transactions with that value, which is meaningful given neither parameter is required. It still omits format, expected value shape, and what happens when neither or both are supplied.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (looks up) and resource (transaction), and distinguishes the two lookup modes by uid vs tracking_id. It also notes two distinctive behaviors (test transactions, roster matching). It does not explicitly differentiate itself from the sibling bepaid_list_transactions, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied: use it when you have a uid or a tracking_id. The remark that it finds test transactions 'which the report API does not return' hints at when this tool is preferable to a reporting path, but no explicit alternatives (e.g. bepaid_list_transactions or bepaid_export_transactions) or exclusion conditions are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bepaid_list_transactionsList bePaid transactionsARead-only
Lists bePaid transactions for a period (paginated report API) as compact rows. Test transactions are not included by bePaid.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | End of the period (inclusive), shop time zone | |
| from | Yes | Start of the period (inclusive), shop time zone | |
| limit | No | Maximum rows returned | |
| status | No | successful | |
| date_type | No | Which transaction date the period applies to | paid_at |
| payment_method_types | No | Defaults to all: credit_card, alternative, erip |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds real behavioral context beyond that: results are paginated, returned as compact rows, and test transactions are excluded by bePaid. It stops short of noting rate limits or that pagination is via the report API's page mechanism.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, with the core purpose and the period scope front-loaded and the test-transaction exclusion appended as a qualifier.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description is the only source for return-shape information, and 'compact rows' is vague; it also never explains how pagination is performed (page parameter, cursor, or repeated limit-based calls). Adequate for selecting the tool, thin for using it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 83%, so the schema already documents from/to, limit, and date_type. The description only echoes the period concept and adds nothing about the undocumented 'status' parameter or the non-obvious defaults (status=successful, date_type=paid_at) that materially change results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Lists') and resource ('bePaid transactions') scoped to a period, and adds the nature of the result ('compact rows'). It implicitly contrasts with sibling bepaid_get_transaction (single) and bepaid_export_transactions (export), but never names them, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The period framing implies when this tool applies, but there is no explicit when-to-use guidance and no mention of the alternatives (bepaid_export_transactions for bulk export, bepaid_get_transaction for single lookup). An agent must infer the routing decision from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
bepaid_create_payment_link - First observed
bepaid_export_transactions - First observed
bepaid_get_transaction - First observed
bepaid_list_transactions
TDQS
Scored across 4 tools
Each tool targets a clearly distinct action: listing a period's transactions, looking up a single transaction (or by tracking_id), exporting to a file, and creating a payment link. The list/get distinction is standard and well-explained, leaving no realistic misselection risk.
All four names share the bepaid_ prefix and follow a clean verb_noun pattern (list_transactions, get_transaction, export_transactions, create_payment_link). No style mixing or vague verbs.
Four tools is a tight, focused set for transaction lookup/export plus payment-link creation, with each tool earning its place. It sits at the low end of the ideal 3-15 range, so slightly thin but not mismatched.
The read/reporting surface is solid (list, get, export) and creation of a payment link is covered, but there are no write/lifecycle operations such as refunds, payment cancellation, or status/webhook management. Notable gaps exist for an agent handling full payment workflows.
Related MCP Connectors
Self-facilitated x402/MCP payments for hosted endpoints, rail proofs, receipts, and agents.
A paid remote MCP for hosted MCP server, built to return verdicts, receipts, usage logs, and audit-r
Payments MCP: self-serve merchant key, PayNow + PayPal checkouts.
MCP server for Modern Treasury — payment orders, transactions, counterparties and ledgers.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables interaction with the South African PayFast payment gateway to manage transactions, subscriptions, and refunds. It allows users to create payments, query transaction statuses, and check settlement balances through the MCP protocol.816 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables interaction with Paystack via MCP tools to get total transactions, create checkout links, and verify transactions.3,882 npm4MIT

AgentTax MCP Serverofficial
AlicenseAqualityFmaintenanceEnables MCP tool developers and AI agents to track payments, calculate sales tax liability, and ensure tax compliance across US jurisdictions.6MIT- FlicenseNot gradedqualityCmaintenanceMCP server that provides tools for retrieving transaction context and recording AI decisions or creating human reviews for payment risk exceptions. Enables LLM agents to handle exception transactions in a hybrid payment-decisioning workflow.-