Skip to content

PayRam

by payram.com · remote · no sign-in to list tools · v1.2.0 · published by com.payram

Install, configure, operate and integrate self-hosted PayRam crypto payment gateways.

Final · 12Changes · 203 high findings

44 tools: 12 do something that can't be undone, 20 change things and 12 only read.

Scanned Oct 21, 2026

32 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http payram https://mcp.payram.com/mcp

Findings

Matches of fixed checks, with the text they matched.

3 high25 warn4 info
  • The title refers to ".env".

    Matched text

    title: "Generate Payram .env Template"

    What this check looks for
  • The annotations title refers to ".env".

    Matched text

    annotations.title: "Generate Payram .env Template"

    What this check looks for
  • The description refers to ".env".

    Matched text

    description: "Creates a .env template for configuring a merchant bac..."

    What this check looks for
  • The server marks "payram_setup_plan" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "start": a word for a change.

    What this check looks for
  • The server marks "generate_env_template" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_env_template" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_setup_checklist" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_setup_checklist" says "generate": a word for a change.

    What this check looks for
Show 26 more findings
  • The server marks "generate_payment_sdk_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payment_sdk_snippet" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_payment_http_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payment_http_snippet" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_payment_status_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payment_status_snippet" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_payment_route_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payment_route_snippet" says "generate": a word for a change.

    What this check looks for
  • The server marks "snippet_nextjs_payment_route" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "snippet_nextjs_payment_route" says "payment": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "snippet_express_payment_route" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "snippet_express_payment_route" says "payment": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "snippet_fastapi_payment_route" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "snippet_fastapi_payment_route" says "payment": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "snippet_laravel_payment_route" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "snippet_laravel_payment_route" says "payment": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "snippet_go_payment_handler" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "snippet_go_payment_handler" says "payment": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "snippet_spring_payment_controller" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "snippet_spring_payment_controller" says "payment": a word that usually means money moves, which cannot be taken back.

    What this check looks for
  • The server marks "generate_payout_sdk_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payout_sdk_snippet" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_payout_status_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payout_status_snippet" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_payout_recipient_flow_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payout_recipient_flow_snippet" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_referral_sdk_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_referral_sdk_snippet" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_referral_validation_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_referral_validation_snippet" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_referral_status_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_referral_status_snippet" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_referral_route_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_referral_route_snippet" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_webhook_handler" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_webhook_handler" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_webhook_event_router" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_webhook_event_router" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_mock_webhook_event" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_mock_webhook_event" says "generate": a word for a change.

    What this check looks for
  • The server marks "generate_topup_integration_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_topup_integration_snippet" says "generate": a word for a change.

    What this check looks for
  • The server marks "scaffold_payram_app" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

    Matched text

    annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

    What this check looks for
  • The description mentions "credentials".

    Matched text

    description: "...URL — works from the hosted MCP without credentials: reachability, health, TLS certificate,..."

    What this check looks for
  • The description mentions "credentials".

    Matched text

    description: "..., plus which tool to use next. Needs no credentials and no access to the server; what you p..."

    What this check looks for
  • The description mentions "credentials".

    Matched text

    description: "...against the merchant's PayRam API with credentials that stay on your machine: which endpoi..."

    What this check looks for
  • The description mentions "credentials".

    Matched text

    description: "Confirm hosting, credentials, and environment variables before gener..."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

44 tools

Can't be undone 12Claude Code: ask
  • generate_payment_http_snippetGenerates a raw HTTP sample for creating a Payram payment in the requested language.1 finding

    Why it is in this group

    • The name "generate_payment_http_snippet" says "generate": a word for a change.
    • The name "generate_payment_http_snippet" also says "payment": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_payment_http_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payment_http_snippet" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates a raw HTTP sample for creating a Payram payment in the requested language.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate HTTP payment snippet
  • generate_payment_route_snippetGenerates a ready-to-use backend endpoint (e.g., /api/pay/create) that creates a Payram payment.1 finding

    Why it is in this group

    • The name "generate_payment_route_snippet" says "generate": a word for a change.
    • The name "generate_payment_route_snippet" also says "payment": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_payment_route_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payment_route_snippet" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates a ready-to-use backend endpoint (e.g., /api/pay/create) that creates a Payram payment.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate payment route snippet
  • generate_payment_sdk_snippetGenerates backend code using the official Payram JS/TS SDK to create a payment.1 finding

    Why it is in this group

    • The name "generate_payment_sdk_snippet" says "generate": a word for a change.
    • The name "generate_payment_sdk_snippet" also says "payment": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_payment_sdk_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payment_sdk_snippet" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates backend code using the official Payram JS/TS SDK to create a payment.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate SDK payment snippet
  • generate_payout_recipient_flow_snippetGenerates the recommended OTP-verified payout flow: create recipient → validate OTP → create payout against the saved recipient.1 finding

    Why it is in this group

    • The name "generate_payout_recipient_flow_snippet" says "generate": a word for a change.
    • The name "generate_payout_recipient_flow_snippet" also says "payout": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_payout_recipient_flow_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payout_recipient_flow_snippet" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates the recommended OTP-verified payout flow: create recipient → validate OTP → create payout against the saved recipient. Use this for repeat beneficiaries; use generate_payout_sdk_snippet for one-off direct payouts.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate 3-step recipient payout flow snippet
  • generate_payout_sdk_snippetGenerates a backend code snippet for creating a payout using the Payram JS/TS SDK.1 finding

    Why it is in this group

    • The name "generate_payout_sdk_snippet" says "generate": a word for a change.
    • The name "generate_payout_sdk_snippet" also says "payout": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_payout_sdk_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payout_sdk_snippet" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates a backend code snippet for creating a payout using the Payram JS/TS SDK.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate payout SDK snippet
  • generate_topup_integration_snippetFor EXISTING apps: emits the recommended top-up wallet integration — ledger schema + cumulative-credit webhook handler + atomic invoice-settle function.1 finding

    Why it is in this group

    • The name "generate_topup_integration_snippet" says "generate": a word for a change.
    • The name "generate_topup_integration_snippet" also says "topup": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_topup_integration_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_topup_integration_snippet" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    For EXISTING apps: emits the recommended top-up wallet integration — ledger schema + cumulative-credit webhook handler + atomic invoice-settle function. Credits crypto payments to a user's balance first, then debits invoices from it, so over/under/late/duplicate payments become balance states, not payment exceptions. Pair with the payram-topup-wallet-integration skill. (New store with no users? Use the checkout/plugin path instead.)

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate top-up wallet integration
  • snippet_express_payment_routeReturns an Express router that posts to Payram's /api/v1/payment endpoint.1 finding

    Why it is in this group

    • The name "snippet_express_payment_route" says "payment": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "snippet_express_payment_route" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "snippet_express_payment_route" says "payment": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Returns an Express router that posts to Payram's /api/v1/payment endpoint.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Express create-payment route snippet
  • snippet_fastapi_payment_routeReturns a FastAPI handler that calls Payram's create-payment HTTP API.1 finding

    Why it is in this group

    • The name "snippet_fastapi_payment_route" says "payment": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "snippet_fastapi_payment_route" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "snippet_fastapi_payment_route" says "payment": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Returns a FastAPI handler that calls Payram's create-payment HTTP API.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: FastAPI create-payment route snippet
  • snippet_go_payment_handlerReturns a Gin handler that proxies /api/pay/create to Payram's create-payment API.1 finding

    Why it is in this group

    • The name "snippet_go_payment_handler" says "payment": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "snippet_go_payment_handler" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "snippet_go_payment_handler" says "payment": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Returns a Gin handler that proxies /api/pay/create to Payram's create-payment API.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Go (Gin) create-payment route snippet
  • snippet_laravel_payment_routeReturns a Laravel controller that posts to Payram's /api/v1/payment endpoint.1 finding

    Why it is in this group

    • The name "snippet_laravel_payment_route" says "payment": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "snippet_laravel_payment_route" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "snippet_laravel_payment_route" says "payment": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Returns a Laravel controller that posts to Payram's /api/v1/payment endpoint.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Laravel create-payment route snippet
  • snippet_nextjs_payment_routeReturns a Next.js App Router API route that calls Payram's create-payment HTTP API.1 finding

    Why it is in this group

    • The name "snippet_nextjs_payment_route" says "payment": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "snippet_nextjs_payment_route" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "snippet_nextjs_payment_route" says "payment": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Returns a Next.js App Router API route that calls Payram's create-payment HTTP API.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Next.js create-payment route snippet
  • snippet_spring_payment_controllerReturns a Spring Boot controller that calls Payram's /api/v1/payment endpoint.1 finding

    Why it is in this group

    • The name "snippet_spring_payment_controller" says "payment": a word that usually means money moves, which cannot be taken back.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "snippet_spring_payment_controller" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "snippet_spring_payment_controller" says "payment": a word that usually means money moves, which cannot be taken back.

      What this check looks for
    Description, as the server wrote it
    Returns a Spring Boot controller that calls Payram's /api/v1/payment endpoint.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Spring Boot create-payment controller snippet
Changes things 20Claude Code: ask
  • generate_env_templateCreates a .env template for configuring a merchant backend to talk to a self-hosted Payram server.4 findings

    Why it is in this group

    • The name "generate_env_template" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • High

      The title refers to ".env".

      Matched text

      title: "Generate Payram .env Template"

      What this check looks for
    • High

      The annotations title refers to ".env".

      Matched text

      annotations.title: "Generate Payram .env Template"

      What this check looks for
    • High

      The description refers to ".env".

      Matched text

      description: "Creates a .env template for configuring a merchant bac..."

      What this check looks for
    • Warn

      The server marks "generate_env_template" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_env_template" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Creates a .env template for configuring a merchant backend to talk to a self-hosted Payram server.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate Payram .env Template
  • generate_mock_webhook_eventGenerates a snippet to send mock Payram webhook events to your local endpoint for testing.1 finding

    Why it is in this group

    • The name "generate_mock_webhook_event" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_mock_webhook_event" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_mock_webhook_event" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates a snippet to send mock Payram webhook events to your local endpoint for testing.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate mock Payram webhook event
  • generate_payment_status_snippetGenerates backend code to query the status of a Payram payment.1 finding

    Why it is in this group

    • The name "generate_payment_status_snippet" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_payment_status_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payment_status_snippet" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates backend code to query the status of a Payram payment.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate payment status snippet
  • generate_payout_status_snippetGenerates backend code to query the status of a payout using the Payram SDK.1 finding

    Why it is in this group

    • The name "generate_payout_status_snippet" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_payout_status_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_payout_status_snippet" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates backend code to query the status of a payout using the Payram SDK.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate payout status SDK snippet
  • generate_referral_route_snippetGenerates a backend route such as /api/referrals/create for logging referral events.1 finding

    Why it is in this group

    • The name "generate_referral_route_snippet" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_referral_route_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_referral_route_snippet" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates a backend route such as /api/referrals/create for logging referral events.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate referral route snippet
  • generate_referral_sdk_snippetGenerates a backend route or service snippet to create a referral event using the Payram SDK.1 finding

    Why it is in this group

    • The name "generate_referral_sdk_snippet" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_referral_sdk_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_referral_sdk_snippet" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates a backend route or service snippet to create a referral event using the Payram SDK.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate referral SDK snippet
  • generate_referral_status_snippetGenerates code to fetch referral progress, rewards, or status.1 finding

    Why it is in this group

    • The name "generate_referral_status_snippet" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_referral_status_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_referral_status_snippet" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates code to fetch referral progress, rewards, or status.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate referral status snippet
  • generate_referral_validation_snippetGenerates a snippet to validate referral IDs, statuses, and eligibility.1 finding

    Why it is in this group

    • The name "generate_referral_validation_snippet" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_referral_validation_snippet" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_referral_validation_snippet" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates a snippet to validate referral IDs, statuses, and eligibility.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate referral validation snippet
  • generate_setup_checklistReturns a step-by-step checklist of everything a merchant must configure to start using Payram.1 finding

    Why it is in this group

    • The name "generate_setup_checklist" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_setup_checklist" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_setup_checklist" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Returns a step-by-step checklist of everything a merchant must configure to start using Payram.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate Payram Setup Checklist
  • generate_webhook_event_routerGenerates a backend event router that dispatches Payram webhook events to domain handlers.1 finding

    Why it is in this group

    • The name "generate_webhook_event_router" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_webhook_event_router" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_webhook_event_router" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates a backend event router that dispatches Payram webhook events to domain handlers.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate Payram webhook event router
  • generate_webhook_handlerGenerates backend code to handle Payram webhook HTTP requests.1 finding

    Why it is in this group

    • The name "generate_webhook_handler" says "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "generate_webhook_handler" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "generate_webhook_handler" says "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates backend code to handle Payram webhook HTTP requests.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Generate Payram webhook HTTP handler
  • onboard_agent_setupDeprecated: use payram_setup_plan, which does this and lets you personalise it.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Deprecated: use payram_setup_plan, which does this and lets you personalise it. Returns the default headless plan (testnet, USDC on Base).

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Onboard: install PayRam as an agent (deprecated)
  • payram_ops_playbookExact, copy-paste recipes for day-2 operations and troubleshooting that YOU run against the merchant's PayRam API with credentials that stay on your machine: which endpoint, which …1 finding

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Info

      The description mentions "credentials".

      Matched text

      description: "...against the merchant's PayRam API with credentials that stay on your machine: which endpoi..."

      What this check looks for
    Description, as the server wrote it
    Exact, copy-paste recipes for day-2 operations and troubleshooting that YOU run against the merchant's PayRam API with credentials that stay on your machine: which endpoint, which credential (public / dashboard JWT / project API key), a curl+jq command, how to read the answer, and what not to do. Start with "connect". Tasks: connect, health, version_check, workers, restart_worker, node_sync, site_url, payment_options, unswept_funds, payments_today, payment_lookup, stuck_payment, create_payment_link, payouts, webhooks, logs, daily_check. Omit task to list them.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: PayRam ops playbook (direct API recipes)
  • payram_runbookStep-by-step procedures for changes to a running PayRam, each step marked agent vs human with hard stops: set_site_url, change_domain, ssl_setup, ssl_renewal_fix, firewall_ports, u…No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Step-by-step procedures for changes to a running PayRam, each step marked agent vs human with hard stops: set_site_url, change_domain, ssl_setup, ssl_renewal_fix, firewall_ports, upgrade, backup, restore, add_chain, smart_bridge, mainnet_cutover, operator_setup, rotate_api_key, reset_test_install, shopify_connector, woocommerce_plugin, secure_analytics_mcp, install_failed, custom_port_or_proxy, external_database, forgot_root_password. Omit task to list them.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: PayRam runbooks (one-off admin tasks)
  • payram_setup_planStart here to install PayRam on a VPS.1 finding

    Why it is in this group

    • The description's first verb is "start": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "payram_setup_plan" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "start": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Start here to install PayRam on a VPS. Returns an ordered, personalised plan — prepare server → install → claim admin + set public URL → wallets (incl. Smart Bridge review) → API key + first payment link → hardening → store/app integration — with who runs each step (agent shell vs human/dashboard), exact commands, what success looks like, and hard stops that need the human (cold wallet, mainnet spend, root-only settings). Ask the user first whether you can run commands on their server (access "ssh") or only chat with them (access "human_runs_commands": they run each command and paste the output back). Pass stage to resume mid-way; payram_doctor tells you the stage of a running server.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Plan a PayRam install (step by step)
  • payram_troubleshootSomething is not working?1 finding

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Info

      The description mentions "credentials".

      Matched text

      description: "..., plus which tool to use next. Needs no credentials and no access to the server; what you p..."

      What this check looks for
    Description, as the server wrote it
    Something is not working? Describe the problem in plain words and/or paste the error or log text. Returns the known PayRam problems it matches, what each usually means, how to confirm it and the fix, plus which tool to use next. Needs no credentials and no access to the server; what you paste is not stored. Call with nothing to list known problems. For a live check of a running server use payram_doctor.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Troubleshoot a PayRam problem
  • prepare_payram_testConfirm hosting, credentials, and environment variables before generating demo apps.1 finding

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Info

      The description mentions "credentials".

      Matched text

      description: "Confirm hosting, credentials, and environment variables before gener..."

      What this check looks for
    Description, as the server wrote it
    Confirm hosting, credentials, and environment variables before generating demo apps.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Payram Test Readiness Checklist
  • scaffold_payram_appGenerates a minimal full-stack app skeleton with Payram payments and payouts routes (and a simple UI) for a chosen language and framework.1 finding

    Why it is in this group

    • The description's first verb is "generate": a word for a change.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.

    Findings

    • Warn

      The server marks "scaffold_payram_app" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

      Matched text

      annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The description's first verb is "generate": a word for a change.

      What this check looks for
    Description, as the server wrote it
    Generates a minimal full-stack app skeleton with Payram payments and payouts routes (and a simple UI) for a chosen language and framework.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Scaffold Payram Payments & Payouts App
  • suggest_file_structureSuggests a recommended backend folder/file structure for integrating Payram.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Suggests a recommended backend folder/file structure for integrating Payram.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Suggest Payram File Structure
  • test_payram_connectionDeprecated: use payram_doctor, which does this and more.No findings

    Why it is in this group

    • Nothing in its name or description says what it does, so it is counted as a write.
    • The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
    Description, as the server wrote it
    Deprecated: use payram_doctor, which does this and more. Read-only check that a PayRam server is reachable and healthy and, if an API key is supplied, that the key is accepted. Never creates payments.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • title: Test PayRam connectivity (deprecated)
Only reads 12Claude Code: allow
  • explain_payment_flowDescribe how payments move from customer initiation through settlement.No findings

    Why it is in this group

    • The name "explain_payment_flow" says "explain": a word for reading.
    Description, as the server wrote it
    Describe how payments move from customer initiation through settlement.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Payment Flow Guide
  • explain_payram_basicsExplain Payram's product pillars, architecture, payments, and payouts capabilities.No findings

    Why it is in this group

    • The name "explain_payram_basics" says "explain": a word for reading.
    Description, as the server wrote it
    Explain Payram's product pillars, architecture, payments, and payouts capabilities.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Payram Basics Overview
  • explain_payram_conceptsGlossary-backed explanation of Payram terminology and constraints.No findings

    Why it is in this group

    • The name "explain_payram_concepts" says "explain": a word for reading.
    Description, as the server wrote it
    Glossary-backed explanation of Payram terminology and constraints.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Core Payram Concepts
  • explain_payram_securityAnswer "is PayRam safe / trustworthy / audited?": why an agent can use it without holding secrets, the independent smart contract audit (what it covers and what it does not), and h…No findings

    Why it is in this group

    • The name "explain_payram_security" says "explain": a word for reading.
    Description, as the server wrote it
    Answer "is PayRam safe / trustworthy / audited?": why an agent can use it without holding secrets, the independent smart contract audit (what it covers and what it does not), and how to verify the report.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Is PayRam safe? Security and trust
  • explain_referral_flowDetail the referrer/referee lifecycle and required APIs.No findings

    Why it is in this group

    • The name "explain_referral_flow" says "explain": a word for reading.
    Description, as the server wrote it
    Detail the referrer/referee lifecycle and required APIs.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Referral Flow Guide
  • explain_referrals_basicsSummarize how Payram referral campaigns are configured and managed.No findings

    Why it is in this group

    • The name "explain_referrals_basics" says "explain": a word for reading.
    Description, as the server wrote it
    Summarize how Payram referral campaigns are configured and managed.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Referral Basics Overview
  • get_agent_setup_flowReturns the canonical PayRam headless-agent guide: agent CLI commands, env vars, merchant vs operator mode, wallet flows, adding chains, troubleshooting.No findings

    Why it is in this group

    • The name "get_agent_setup_flow" says "get": a word for reading.
    Description, as the server wrote it
    Returns the canonical PayRam headless-agent guide: agent CLI commands, env vars, merchant vs operator mode, wallet flows, adding chains, troubleshooting. Long (~11k tokens). For a short personalised plan use payram_setup_plan.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get the headless agent guide (full reference)
  • get_payram_doc_by_idReturns the markdown for a Payram doc given its id, e.g.No findings

    Why it is in this group

    • The name "get_payram_doc_by_id" says "get": a word for reading.
    Description, as the server wrote it
    Returns the markdown for a Payram doc given its id, e.g. "features/payouts".

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Get Payram Doc By ID
  • get_referral_dashboard_guideExplain how to embed and manage the referral dashboard experience.No findings

    Why it is in this group

    • The name "get_referral_dashboard_guide" says "get": a word for reading.
    Description, as the server wrote it
    Explain how to embed and manage the referral dashboard experience.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: Referral Dashboard Guide
  • list_payram_docsLists the available Payram doc ids.No findings

    Why it is in this group

    • The name "list_payram_docs" says "list": a word for reading.
    Description, as the server wrote it
    Lists the available Payram doc ids. Optionally scope by a prefix such as "features".

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: false
    • title: List Payram Docs
  • payram_doctorRead-only diagnosis of a PayRam server by its public URL — works from the hosted MCP without credentials: reachability, health, TLS certificate, installed vs latest version, worker…1 finding

    Why it is in this group

    • The description's first verb is "read": a word for reading.

    Findings

    • Info

      The description mentions "credentials".

      Matched text

      description: "...URL — works from the hosted MCP without credentials: reachability, health, TLS certificate,..."

      What this check looks for
    Description, as the server wrote it
    Read-only diagnosis of a PayRam server by its public URL — works from the hosted MCP without credentials: reachability, health, TLS certificate, installed vs latest version, worker states. Optionally validates an API key without creating anything. Returns ranked likely causes and exact fixes for the first failing stage. Run this first when anything PayRam-related fails.

    Annotations the server declares

    • readOnlyHint: true
    • destructiveHint: false
    • idempotentHint: true
    • openWorldHint: true
    • title: Diagnose a PayRam server

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Install

Pinned to version 1.2.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http payram https://mcp.payram.com/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__payram__payram_doctor",
      "mcp__payram__get_agent_setup_flow",
      "mcp__payram__explain_payram_basics",
      "mcp__payram__explain_payram_security",
      "mcp__payram__get_payram_links",
      "mcp__payram__explain_payment_flow",
      "mcp__payram__explain_payram_concepts",
      "mcp__payram__explain_referrals_basics",
      "mcp__payram__explain_referral_flow",
      "mcp__payram__get_referral_dashboard_guide",
      "mcp__payram__get_payram_doc_by_id",
      "mcp__payram__list_payram_docs"
    ],
    "ask": [
      "mcp__payram__payram_setup_plan",
      "mcp__payram__payram_troubleshoot",
      "mcp__payram__payram_runbook",
      "mcp__payram__payram_ops_playbook",
      "mcp__payram__generate_env_template",
      "mcp__payram__generate_setup_checklist",
      "mcp__payram__suggest_file_structure",
      "mcp__payram__generate_payment_sdk_snippet",
      "mcp__payram__generate_payment_http_snippet",
      "mcp__payram__generate_payment_status_snippet",
      "mcp__payram__generate_payment_route_snippet",
      "mcp__payram__snippet_nextjs_payment_route",
      "mcp__payram__snippet_express_payment_route",
      "mcp__payram__snippet_fastapi_payment_route",
      "mcp__payram__snippet_laravel_payment_route",
      "mcp__payram__snippet_go_payment_handler",
      "mcp__payram__snippet_spring_payment_controller",
      "mcp__payram__generate_payout_sdk_snippet",
      "mcp__payram__generate_payout_status_snippet",
      "mcp__payram__generate_payout_recipient_flow_snippet",
      "mcp__payram__generate_referral_sdk_snippet",
      "mcp__payram__generate_referral_validation_snippet",
      "mcp__payram__generate_referral_status_snippet",
      "mcp__payram__generate_referral_route_snippet",
      "mcp__payram__generate_webhook_handler",
      "mcp__payram__generate_webhook_event_router",
      "mcp__payram__generate_mock_webhook_event",
      "mcp__payram__generate_topup_integration_snippet",
      "mcp__payram__prepare_payram_test",
      "mcp__payram__scaffold_payram_app",
      "mcp__payram__test_payram_connection",
      "mcp__payram__onboard_agent_setup"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as payram. Review it before you use it.