Server definition
- Hash
- sha256:96f1352f973a6ae59640b88fa36100c3bac111bc9ee9eebd51550ed07e43d4dd
- What it is
- What a remote MCP server returned when asked what it offers: 20 tools
The blob, as servednamed by its sha256
{
"instructions": "TgPay Merchant API — crypto payments inside Telegram (CryptoBot-compatible). Read get_docs('quickstart') before integrating. No API token yet? Call connect — the human approves once in Telegram — then poll connect_status; afterwards pass the token via the 'TgPayCrypto-API-Token' header on this MCP server, or as an extra 'api_token' argument on any tool. Amounts are decimal strings in major units; user_id is the Telegram user id.",
"tools": [
{
"description": "Stop new signups for a plan (live subscriptions keep renewing).",
"inputSchema": {
"properties": {
"plan_id": {
"description": "The plan to archive.",
"type": "integer"
}
},
"required": [
"plan_id"
],
"type": "object"
},
"name": "archiveSubscriptionPlan",
"outputSchema": null
},
{
"description": "Stop future charges for one subscription (paid time runs out).",
"inputSchema": {
"properties": {
"subscription_id": {
"description": "The subscription.",
"type": "integer"
}
},
"required": [
"subscription_id"
],
"type": "object"
},
"name": "cancelSubscription",
"outputSchema": null
},
{
"description": "Start token issuance WITHOUT the Mini App UI: creates a merchant-app request and returns a t.me approve link plus a poll_secret. Show the link to the human — they approve with one button in the @tgpaycryptobot bot — then call connect_status with the poll_secret. Use only when no API token is configured yet.",
"inputSchema": {
"properties": {
"app_name": {
"description": "Merchant app name shown to the approving human, 1-64 chars (e.g. the project/bot name).",
"type": "string"
}
},
"required": [
"app_name"
],
"type": "object"
},
"name": "connect",
"outputSchema": null
},
{
"description": "Poll a connect request. Returns pending | denied | expired, or — once approved — the app id and the API TOKEN (returned exactly once: save it to the project's .env immediately, never print it in logs). The token is SCOPED (read, invoices, subscriptions, webhooks) — it cannot move money out of the app; transfers/refunds/checks need the primary token the human holds in the Mini App. Poll every 3-5 seconds while pending.",
"inputSchema": {
"properties": {
"poll_secret": {
"description": "The poll_secret from the connect tool.",
"type": "string"
}
},
"required": [
"poll_secret"
],
"type": "object"
},
"name": "connect_status",
"outputSchema": null
},
{
"description": "Create a one-off payment invoice; the payer opens result.mini_app_invoice_url. See the invoices doc.",
"inputSchema": {
"properties": {
"accepted_assets": {
"description": "Fiat mode: comma-separated assets the payer may pay in.",
"type": "string"
},
"allow_anonymous": {
"description": "Default true.",
"type": "boolean"
},
"allow_comments": {
"description": "Default true.",
"type": "boolean"
},
"amount": {
"description": "Decimal string in MAJOR units, e.g. \"5\" = 5 USDT. Never a float. Omit for an open-amount invoice.",
"type": "string"
},
"asset": {
"description": "Asset code (crypto mode).",
"type": "string"
},
"currency_type": {
"description": "crypto (default) | fiat.",
"type": "string"
},
"description": {
"description": "Shown to the payer (≤1024).",
"type": "string"
},
"expires_in": {
"description": "Invoice TTL in seconds.",
"type": "integer"
},
"fiat": {
"description": "Fiat code (fiat mode).",
"type": "string"
},
"hidden_message": {
"description": "Revealed to the payer ONLY after payment (≤2048).",
"type": "string"
},
"paid_btn_name": {
"description": "viewItem | openChannel | openBot | callback.",
"type": "string"
},
"paid_btn_url": {
"description": "URL for the paid button.",
"type": "string"
},
"payload": {
"description": "Opaque data echoed back in the webhook (≤4096).",
"type": "string"
},
"rate_lock_seconds": {
"description": "Fiat mode: freeze crypto quotes for this long.",
"type": "integer"
},
"swap_to": {
"description": "Auto-convert the received amount to this asset.",
"type": "string"
}
},
"type": "object"
},
"name": "createInvoice",
"outputSchema": null
},
{
"description": "Create an IMMUTABLE recurring-billing plan; send payers to result.mini_app_subscribe_url. See the subscriptions doc.",
"inputSchema": {
"properties": {
"amount": {
"description": "Decimal string in MAJOR units, e.g. \"5\" = 5 USDT. Never a float. Charged per period.",
"type": "string"
},
"asset": {
"description": "Asset code, e.g. USDT.",
"type": "string"
},
"name": {
"description": "Plan name shown to payers (≤64).",
"type": "string"
},
"period_days": {
"description": "Billing period in days.",
"type": "integer"
}
},
"required": [
"name",
"asset",
"amount",
"period_days"
],
"type": "object"
},
"name": "createSubscriptionPlan",
"outputSchema": null
},
{
"description": "Delete an unclaimed check (refunds the hold).",
"inputSchema": {
"properties": {
"check_id": {
"description": "The check to delete.",
"type": "integer"
}
},
"required": [
"check_id"
],
"type": "object"
},
"name": "deleteCheck",
"outputSchema": null
},
{
"description": "Delete an unpaid invoice.",
"inputSchema": {
"properties": {
"invoice_id": {
"description": "The invoice to delete.",
"type": "integer"
}
},
"required": [
"invoice_id"
],
"type": "object"
},
"name": "deleteInvoice",
"outputSchema": null
},
{
"description": "Merchant app balance per asset (available + onhold).",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "getBalance",
"outputSchema": null
},
{
"description": "List checks.",
"inputSchema": {
"properties": {
"asset": {
"description": "Filter by asset code.",
"type": "string"
},
"check_ids": {
"description": "Comma-separated ids.",
"type": "string"
},
"count": {
"description": "Page size (default 100).",
"type": "integer"
},
"offset": {
"description": "Skip this many.",
"type": "integer"
},
"status": {
"description": "active | activated.",
"type": "string"
}
},
"type": "object"
},
"name": "getChecks",
"outputSchema": null
},
{
"description": "Supported crypto assets (code/name/decimals) and fiats.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "getCurrencies",
"outputSchema": null
},
{
"description": "Current asset↔fiat display rates.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "getExchangeRates",
"outputSchema": null
},
{
"description": "List invoices (newest first).",
"inputSchema": {
"properties": {
"asset": {
"description": "Filter by asset code.",
"type": "string"
},
"count": {
"description": "Page size (default 100).",
"type": "integer"
},
"fiat": {
"description": "Filter by fiat code.",
"type": "string"
},
"invoice_ids": {
"description": "Comma-separated ids.",
"type": "string"
},
"offset": {
"description": "Skip this many.",
"type": "integer"
},
"status": {
"description": "active | paid | expired.",
"type": "string"
}
},
"type": "object"
},
"name": "getInvoices",
"outputSchema": null
},
{
"description": "Verify the token: app id, name, webhook config, token scopes.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "getMe",
"outputSchema": null
},
{
"description": "App volume/count stats for a period.",
"inputSchema": {
"properties": {
"end_at": {
"description": "ISO 8601 period end.",
"type": "string"
},
"start_at": {
"description": "ISO 8601 period start.",
"type": "string"
}
},
"type": "object"
},
"name": "getStats",
"outputSchema": null
},
{
"description": "List subscription plans.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "getSubscriptionPlans",
"outputSchema": null
},
{
"description": "List subscriptions (subscribers).",
"inputSchema": {
"properties": {
"plan_id": {
"description": "Filter by plan.",
"type": "integer"
},
"status": {
"description": "active | grace | cancelled | expired.",
"type": "string"
},
"user_id": {
"description": "Filter by Telegram user id.",
"type": "integer"
}
},
"type": "object"
},
"name": "getSubscriptions",
"outputSchema": null
},
{
"description": "List app→user transfers.",
"inputSchema": {
"properties": {
"asset": {
"description": "Filter by asset code.",
"type": "string"
},
"count": {
"description": "Page size (default 100).",
"type": "integer"
},
"offset": {
"description": "Skip this many.",
"type": "integer"
},
"spend_id": {
"description": "Filter by idempotency key.",
"type": "string"
},
"transfer_ids": {
"description": "Comma-separated ids.",
"type": "string"
}
},
"type": "object"
},
"name": "getTransfers",
"outputSchema": null
},
{
"description": "Read a TgPay Merchant API integration doc. START HERE before integrating: topics quickstart, invoices, subscriptions, transfers-checks, webhooks, errors.",
"inputSchema": {
"properties": {
"topic": {
"description": "quickstart | invoices | subscriptions | transfers-checks | webhooks | errors",
"type": "string"
}
},
"required": [
"topic"
],
"type": "object"
},
"name": "get_docs",
"outputSchema": null
},
{
"description": "Update app name / webhook_url (https) / webhook_events opt-in list. Needs the 'webhooks' scope (the connect-issued token has it) or the primary token. See the webhooks doc for the event types and signature verification.",
"inputSchema": {
"properties": {
"name": {
"description": "New app name (1-64).",
"type": "string"
},
"webhook_events": {
"description": "Extended event types to opt into (invoice_paid is always delivered); [] = invoice_paid-only.",
"items": {
"description": "Event type.",
"type": "string"
},
"type": "array"
},
"webhook_url": {
"description": "https URL for webhook delivery; \"\" clears it.",
"type": "string"
}
},
"type": "object"
},
"name": "updateApp",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:96f1352f973a6ae59640b88fa36100c3bac111bc9ee9eebd51550ed07e43d4dd | sha256sum