mcpField
R
Robokassa Mcp

Robokassa Mcp

Local
github.comDeveloper Tools1Updated 27w ago

About Robokassa Mcp

Robokassa Mcp is a Python client and MCP server for the Robokassa payment gateway, aimed at payment integrations. It covers checkout, payment status, refunds, pre-authorization, recurring charges, fiscal receipts, and related endpoints.

Key features

  1. 01Build signed checkout URLs
  2. 02Check payment status
  3. 03Create and track refunds
  4. 04Manage card pre-authorization
  5. 05Handle recurring charges
  6. 06Support fiscal receipts and split payments

Use cases

  1. 01Generate a Robokassa checkout link
  2. 02Check whether a payment completed
  3. 03Issue or track a refund
  4. 04Set up a subscription charge

MCP support

Exposes 18 Robokassa tools to MCP clients, including checkout, payment status, refunds, recurring payments, fiscal receipts, and webhook signature checks. Supports stdio and HTTP-based transports.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"robokassa": {
"command": "uvx",
"args": [
"robokassa-mcp"
],
"env": {
"ROBOKASSA_LOGIN": "<ROBOKASSA_LOGIN>",
"ROBOKASSA_PASSWORD1": "<ROBOKASSA_PASSWORD1>",
"ROBOKASSA_PASSWORD2": "<ROBOKASSA_PASSWORD2>",
"ROBOKASSA_PASSWORD3": "<ROBOKASSA_PASSWORD3>"
}
}
}
}
Run commanduvx robokassa-mcp
Environment variables to set
ROBOKASSA_LOGINMerchant login identifier for the Robokassa shop.
ROBOKASSA_PASSWORD1SecretShop's Password #1 — used for checkout URL signing, SuccessURL signature verification, CalcOutSumm, fiscal receipts, and SMS.
ROBOKASSA_PASSWORD2SecretShop's Password #2 — used for OpStateExt payment status checks and ResultURL signature verification.
ROBOKASSA_PASSWORD3SecretShop's Password #3 — used for Refund API (JWT HS256). Refund API access must be enabled in the cabinet.

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
pypirobokassa-mcp0.1.2

Tools

18

Saved tool list · updated 2w ago

ParameterTypeRequiredDescription
inv_idintegerYes
algorithmenumNomd5 | sha256 | sha384 | sha512
password2anyNo
merchant_loginanyNo

Details

From the project README

robokassa-mcp — Robokassa payment gateway exposed to AI agents through MCP

robokassa-mcp

CI PyPI Python License Docs

📚 Documentation  ·  PyPI  ·  Docker  ·  MCP Registry


Comprehensive Python client and Model Context Protocol server for Robokassa — the Russian payment gateway.

Covers the full API surface: checkout, XML status interfaces, refunds, holding (pre-auth), recurring subscriptions, 54-ФЗ fiscal receipts, Partner API, and auxiliary endpoints.

Install (once published)

# As an MCP server for Claude Desktop / Claude Code / Cursor / Windsurf
uvx robokassa-mcp

# As a Python library
pip install robokassa-mcp

Use as a Python library

import asyncio
from decimal import Decimal
from robokassa import create_invoice, RobokassaClient

# Build a signed checkout URL (no HTTP — just URL construction).
invoice = create_invoice(
    merchant_login="my-shop",
    out_sum=Decimal("599.00"),
    inv_id=12345,
    password1="...",
    description="Premium subscription",
    email="[email protected]",
)
print(invoice.url)  # https://auth.robokassa.ru/Merchant/Index.aspx?...

# Check the state of a payment (hits the OpStateExt XML endpoint).
async def check() -> None:
    async with RobokassaClient("my-shop", password2="...") as client:
        state = await client.check_payment(inv_id=12345)
        print(state.is_paid, state.info.op_key)

asyncio.run(check())
Full refund flow
from robokassa import RobokassaClient

async def refund_flow(inv_id: int) -> None:
    async with RobokassaClient("my-shop", password2="p2", password3="p3") as client:
        # 1. Fetch the payment state to get its OpKey.
        state = await client.check_payment(inv_id)
        assert state.info.op_key, "payment not complete yet"

        # 2. Initiate a refund.
        created = await client.refund_create(state.info.op_key)
        print("refund requestId:", created.request_id)

        # 3. Poll status until finished / canceled.
        while True:
            status = await client.refund_status(created.request_id)
            if status.is_terminal:
                print("final:", status.state)
                break
Webhook signature verification (FastAPI example)
from fastapi import FastAPI, Request, HTTPException, PlainTextResponse
from robokassa import verify_result_signature, build_ok_response

app = FastAPI()

@app.post("/robokassa/result")
async def result_url(req: Request) -> PlainTextResponse:
    form = dict(await req.form())
    if not verify_result_signature(form, password2="..."):
        raise HTTPException(status_code=403, detail="Bad signature")
    # ... persist the notification, mark invoice paid ...
    return PlainTextResponse(build_ok_response(form["InvId"]))

Use as an MCP server

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{
  "mcpServers": {
    "robokassa": {
      "command": "uvx",
      "args": ["robokassa-mcp"],
      "env": {
        "ROBOKASSA_LOGIN": "your-shop-login",
        "ROBOKASSA_PASSWORD1": "password1",
        "ROBOKASSA_PASSWORD2": "password2",
        "ROBOKASSA_PASSWORD3": "password3"
      }
    }
  }
}
Claude Code
claude mcp add robokassa \
  -e ROBOKASSA_LOGIN=my-shop \
  -e ROBOKASSA_PASSWORD1=... \
  -e ROBOKASSA_PASSWORD2=... \
  -e ROBOKASSA_PASSWORD3=... \
  -- uvx robokassa-mcp
Cursor

Edit ~/.cursor/mcp.json:

{
  "mcpServers": {
    "robokassa": {
      "command": "uvx",
      "args": ["robokassa-mcp"],
      "env": {
        "ROBOKASSA_LOGIN": "your-shop-login",
        "ROBOKASSA_PASSWORD1": "password1",
        "ROBOKASSA_PASSWORD2": "password2",
        "ROBOKASSA_PASSWORD3": "password3"
      }
    }
  }
}
VS Code (GitHub Copilot)

In user or workspace settings.json:

{
  "github.copilot.chat.mcp.servers": {
    "robokassa": {
      "command": "uvx",
      "args": ["robokassa-mcp"],
      "env": {
        "ROBOKASSA_LOGIN": "your-shop-login",
        "ROBOKASSA_PASSWORD1": "password1",
        "ROBOKASSA_PASSWORD2": "password2",
        "ROBOKASSA_PASSWORD3": "password3"
      }
    }
  }
}
Windsurf

Edit ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "robokassa": {
      "command": "uvx",
      "args": ["robokassa-mcp"],
      "env": {
        "ROBOKASSA_LOGIN": "your-shop-login",
        "ROBOKASSA_PASSWORD1": "password1",
        "ROBOKASSA_PASSWORD2": "password2",
        "ROBOKASSA_PASSWORD3": "password3"
      }
    }
  }
}
HTTP transport (MCP Inspector, remote clients)
uvx robokassa-mcp --transport http --port 8000

Flags: --transport {stdio,http,streamable-http,sse}, --host, --port.

MCP tools exposed to agents

All 18 tools are wrapped as @mcp.tool() and available to any MCP-capable agent (Claude Desktop, Claude Code, Cursor, Windsurf, etc.).

ToolPurposeAuth
create_invoiceBuild a signed checkout URL (optional 54-ФЗ receipt).Password#1
check_paymentGet current state of a payment by InvId (via OpStateExt).Password#2
list_currenciesList payment methods available to the shop.—
calc_out_sumCompute amount credited to shop for a given payment.Password#1
refund_createInitiate a refund (requires Refund API access).Password#3 JWT
refund_statusPoll refund progress by requestId.—
verify_result_signatureValidate a ResultURL webhook.Password#2
verify_success_signatureValidate a SuccessURL redirect.Password#1
hold_init / hold_confirm / hold_cancelTwo-step card pre-authorization.Password#1
init_recurring_parent / recurring_chargeSubscription auto-charges.Password#1
build_split_invoiceMarketplace multi-recipient checkout.—
send_smsPaid SMS service.Password#1
second_receipt_create / second_receipt_status54-ФЗ final receipt after advance.Password#1
partner_refundAlternative refund path for partner integrators.Partner JWT

Low-level signature helpers are available from Python only: compute_signature, op_state_signature, build_checkout_signature, build_refund_jwt, build_sms_signature, compute_result_signature, compute_success_signature, encode_fiscal_body.

API coverage

Mapped against the 8 public Robokassa API groups:

GroupCoverageModule
Merchant Checkout✅ create_invoice (+ 54-ФЗ)robokassa.checkout
XML Interfaces✅ check_payment, list_currencies, calc_out_sumrobokassa.xml_interface
Refund API✅ refund_create, refund_statusrobokassa.refund
Holding / Pre-auth✅ init / confirm / cancelrobokassa.holding
Recurring✅ parent + childrobokassa.recurring
Fiscal 54-ФЗ✅ second receipt create / statusrobokassa.fiscal
Partner API🟡 partner_refund only — see coverage notesrobokassa.partner
Auxiliary✅ send_sms, webhook signatures, split paymentsrobokassa.sms, robokassa.webhooks, robokassa.split

Environment variables

Most high-level entry points fall back to these env vars when credentials aren't passed explicitly:

VariableRequired for
ROBOKASSA_LOGINAll operations
ROBOKASSA_PASSWORD1Checkout, webhook SuccessURL verification, CalcOutSumm, fiscal, SMS
ROBOKASSA_PASSWORD2check_payment (OpStateExt), webhook ResultURL verification
ROBOKASSA_PASSWORD3refund_create

Signature algorithms

All signature-producing helpers accept algorithm= with "md5" / "sha256" / "sha384" / "sha512" — match whatever is configured in your Robokassa cabinet.

Development

git clone https://github.com/artgas1/robokassa-mcp.git
cd robokassa-mcp
uv sync --all-extras --dev
uv run pytest            # 107+ unit tests
uv run ruff check .
uv run pyright

License

MIT — see LICENSE. Drop-and-forget maintenance; PRs welcome but not guaranteed to be reviewed promptly.

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.