Askell

io.github.NeschadinPublished by GitHub account Neschadinv0.5.0Updated Nov 13, 2026

MCP server for the Askell payment and subscription API (Bun + stdio)

Overview

AI-generated overview

Local MCP server for the Askell payment and subscription API, letting an assistant discover endpoints, inspect customers, contracts and billing, and make API…

What you can do
  • Search and describe bundled OpenAPI v1/v2 operations, including parameters, schemas and error codes
  • Call read-only endpoints (GET/HEAD) and follow paginated list endpoints
  • Perform writes (POST/PUT/PATCH/DELETE) through a separate mutation tool
  • Review customers with subscriptions and contracts, contract billing runs, and billing-run triage
  • List configured webhooks with the HMAC secret redacted
  • Load OpenAPI specs and webhook event docs as resources, plus bundled guidance skills
When to use it
Useful when you work with Askell payments or subscriptions and want an assistant to look up API operations, inspect customer, contract and billing data, or run API calls without leaving the chat client. Keep separate production and sandbox entries if you need both.
Requirements
Runs locally over stdio via bunx (Bun 1.4.4 or newer) or a prebuilt binary. Needs an Askell account and the secret API key in ASKELL_PRIVATE_API_KEY; ASKELL_PUBLIC_API_KEY is optional for a few checkout and payment-method endpoints. ASKELL_ENV selects production (default) or sandbox, and keys do not work across hosts. Network access to the Askell API is required.
Before you install
The secret API key grants access to a live payments account; keep it in a gitignored dotenv file rather than plaintext JSON where possible, and use sandbox keys for testing. Mutation tools can create, change or delete data, and the default gate relies on the client's own approval UI, so consider the elicit setting. Customer-portal sign-in URLs and widget tokens are returned unredacted.

Installation

In SourceWeft

  1. Open Askell in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

askell-mcp

MCP server for the Askell payment and subscription API.

Connect it to Cursor, Claude Desktop, or any MCP client to discover Askell endpoints, inspect customers/contracts/billing, and call the API. Reads and writes are separate tools so clients can show their own approval UI on mutations.

Requirements

  • An Askell account and secret API key (from the Askell dashboard). The public key is optional — only temporary payment-method and checkout status endpoints use it
  • One of:
    • Bun ≥ 1.4.4 (for bunx), or
    • a prebuilt binary from Releases (no Bun needed)

Quick start

Prefer two server entries if you have both production and sandbox keys. Tool names are the same on both; the client distinguishes them by the server key (askell-prod vs askell-sandbox). Each instance's instructions include the environment it is talking to.

Put keys in gitignored dotenv files, not in JSON. Copy .env.example:

  • .env — production (ASKELL_ENV=production and that dashboard's keys)
  • .env.sandbox — sandbox (ASKELL_ENV=sandbox and that dashboard's keys)

Bun does not auto-load .env.sandbox. --no-env-file stops the sandbox process from also reading a production .env that happens to sit in the cwd.

Cursor

Project file: .cursor/mcp.json. mcp.json.example is this shape. ${workspaceFolder} is the directory that contains that mcp.json (the repo root when the file is .cursor/mcp.json). In ~/.cursor/mcp.json, use an absolute envFile path.

With Bun:

json
{  "mcpServers": {    "askell-prod": {      "command": "bunx",      "args": ["--no-env-file", "x", "askell-mcp"],      "envFile": "${workspaceFolder}/.env"    },    "askell-sandbox": {      "command": "bunx",      "args": ["--no-env-file", "x", "askell-mcp"],      "envFile": "${workspaceFolder}/.env.sandbox"    }  }}

With a binary (download askell-mcp-<os>-<arch> from Releases, then chmod +x). Same envFile; the binary reads the environment Cursor injects:

json
{  "mcpServers": {    "askell-prod": {      "command": "/absolute/path/to/askell-mcp-linux-x64",      "envFile": "${workspaceFolder}/.env"    }  }}

Reload the window after saving.

Claude Desktop

Config file:

  • Linux: ~/.config/Claude/claude_desktop_config.json
  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

No envFile field. The desktop process cwd is not your repo, so a relative .env path does not resolve. With Bun, pass an absolute --env-file:

json
{  "mcpServers": {    "askell-prod": {      "command": "bunx",      "args": [        "--no-env-file",        "--env-file=/absolute/path/.env",        "x",        "askell-mcp"      ]    },    "askell-sandbox": {      "command": "bunx",      "args": [        "--no-env-file",        "--env-file=/absolute/path/.env.sandbox",        "x",        "askell-mcp"      ]    }  }}

A binary has no --env-file. Put the keys in env (plaintext in that JSON file):

json
{  "mcpServers": {    "askell-prod": {      "command": "/absolute/path/to/askell-mcp-linux-x64",      "env": {        "ASKELL_ENV": "production",        "ASKELL_PRIVATE_API_KEY": "your_production_secret_api_key",        "ASKELL_PUBLIC_API_KEY": "your_production_public_api_key_optional"      }    }  }}

Quit Claude Desktop completely and reopen it. Saving the file is not enough.

Claude Code

Project .mcp.json expands ${VAR} from the environment of the process that launched claude. It does not load a dotenv file. The Bun --env-file args from the Desktop section work here as well; a relative path is fine when you start claude from the repo. ${ASKELL_PRIVATE_API_KEY} inside env only works when that variable is already exported in that environment. A .env file alone is not read.

Configuration

VariableRequiredDefaultDescription
ASKELL_PRIVATE_API_KEYyes*—Secret API key (or ASKELL_SECRET_API_KEY)
ASKELL_PUBLIC_API_KEYno—Public key for a few checkout/payment endpoints
ASKELL_ENVnoproductionproduction | sandbox — selects the official API host
ASKELL_API_BASE_URLno—Custom/local API base only. Do not set together with ASKELL_ENV unless it matches
ASKELL_RESPONSE_MAX_BYTESno131072Max response size returned to the model
ASKELL_MUTATION_GATEnoautoauto / elicit / off — see below
ASKELL_REQUIRE_MUTATION_APPROVALno—Deprecated alias: true→elicit, false→off

ASKELL_ENV picks a stable host (same v1/v2 surface):

  • production — https://askell.is/api
  • sandbox — https://sandbox.askell.is/api (isolated tenant; keys from that dashboard)

Point a second MCP server entry at sandbox (ASKELL_ENV=sandbox) rather than switching env on one process. Keys do not work across hosts. Áskell Test Gateway is a payment acquirer (fake cards) on either host — not the same as the sandbox API. Official prose at docs.askell.is still documents Test Gateway and may omit the sandbox host.

ASKELL_MUTATION_GATE:

  • auto (default) — confirmation form only if this request's _meta envelope declared form elicitation (MCP 2026-07-28). 2025-era clients (Cursor, most hosts) do not send that envelope, so the mutation runs and their own “allow this tool” UI is the gate.
  • elicit — always return an elicitation form. The SDK refuses the call if the client cannot fulfil it (2026 envelope / 2025 initialize via the legacy shim).
  • off — never ask (eval / trusted automation).

If both ASKELL_MUTATION_GATE and ASKELL_REQUIRE_MUTATION_APPROVAL are set, ASKELL_MUTATION_GATE wins.

What you can do

Tools

ToolDescription
askell_list_operationsSearch bundled OpenAPI operations (paths, tags, error codes)
askell_describe_operationParams, body schema, and response/error codes for one operation
askell_callGET/HEAD any v1/v2 endpoint
askell_mutatePOST/PUT/PATCH/DELETE any v1/v2 endpoint
askell_paginate_allFollow paginated list endpoints
askell_customer_overviewv1 customer + subscriptions (+ optional v2 contracts)
askell_contract_overviewv2 subscription contract + billing runs
askell_billing_run_triagev2 billing run (+ optional contract)
askell_list_webhooksList configured webhooks (hmac_secret redacted)

hmac_secret is the only field redacted in tool output. Customer-portal sign-in URLs and widget tokens (POST /v2/customer-portal-entries/, POST /v2/customer-portal-sessions/) are returned in full so the browser can use them. Do not put the widget token in a URL.

Resources

URIContent
askell://spec/v1OpenAPI v1
askell://spec/v2OpenAPI v2
askell://docs/webhook-eventsWebhook event reference

Skills (SEP-2640)

Clients supporting MCP Skills (skills/list, skills/get) can load bundled guidance on demand:

SkillPurpose
askell-docsLive Askell docs workflow and integration traps (claims, coupons, checkouts, webhooks)
askell-mcpTool selection, discovery, read/mutate split, and prod vs sandbox safety

Docs: docs.askell.is · OpenAPI: v1 · v2

License

MIT

Contributing

See CONTRIBUTING.md for local development, tests, and releases.

Source: README.md at commit dffe611

Tools

0
SourceWeft started this package once in an isolated sandbox, without credentials, to list its tools. That failed: the server did not start.

Version history

11
  1. v0.5.0LatestNov 13, 2026
  2. v0.4.27Nov 3, 2026
  3. v0.4.26Oct 29, 2026
  4. v0.4.25Oct 26, 2026
  5. v0.4.24Oct 16, 2026
  6. v0.4.23Oct 9, 2026
  7. v0.4.21Oct 5, 2026
  8. v0.4.20Oct 2, 2026
  9. v0.4.19Oct 1, 2026
  10. v0.4.18Sep 30, 2026
  11. v0.4.17Sep 25, 2026

Score

50% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts

    Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.

  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts