Skip to main content
Two packages on npm build on the exy.sh API. Both are published under the MIT license and need Node.js 22 or newer.
  • @exysh/sdk: a typed client for the API v1, plus a verifier for webhook signatures.
  • @exysh/mcp: an MCP server that gives AI agents (Claude Code, Claude Desktop, Cursor and any other MCP client) tools to manage your servers, orders, invoices and support tickets.
Both work with an API token you create in the dashboard under Settings → API. See Get a token.

TypeScript SDK

Use it from your server, never in a browser: it holds your API token. Keep the token out of your source code, for example in the EXY_API_TOKEN environment variable.
  • Typed: every path, parameter, request body and response is typed. The paths, operations and webhooks types are exported too.
  • No exceptions on HTTP errors: a call resolves to { data, error, response } and never throws on an error status.
  • Options: the client is built on openapi-fetch. The second argument of createClient accepts its options, for example baseUrl or a custom fetch.
  • Paid calls: POST /v1/orders, POST /v1/servers/{id}/renew and POST /v1/servers/{id}/upgrades take an Idempotency-Key header. Generate one key per purchase and reuse it when you retry; see Order and renew servers.
  • Webhooks: verifyWebhook checks the signature and the timestamp of a delivery. Pass the raw body before parsing it; see Webhooks.

MCP server

The MCP server runs locally on your machine over stdio. It talks only to https://api.exy.sh/v1, through @exysh/sdk, with your own token. Nothing else has to be installed.
1

Create a token

Create a token under Settings → API with only the scopes the agent needs. vms.read, billing.read and tickets.read are enough to try it out.
2

Add the server to your client

The token is read from the EXY_API_TOKEN environment variable, never from an argument.Claude Code:
Claude Desktop, Cursor and other clients (JSON config):
Without EXY_API_TOKEN the server exits immediately with a message on stderr.

Scopes and tools

The agent only gets the tools its token’s scopes allow.
billing.manage spends real money: with it, the agent can order and renew servers, paid from your balance. vms.manage can delete and reinstall servers, which destroys their data. Grant these scopes only to an agent you trust to ask you first, and prefer a separate, short-lived token for them.

What the server guarantees

  • Confirmation: delete_server and reinstall_server require confirmName, like the API. The server never fills in the name itself. Whether your client asks you before running a destructive tool is up to the client.
  • Paid calls: order_server and renew_server require an idempotencyKey from the caller. The server never retries a call and never makes up a key. After a timeout, call again with the same key: the API returns the first result and charges once.
  • Errors: an error comes back with the HTTP status and the API’s code and message; a 429 also carries retryAfterSeconds.
  • Token: the server logs nothing and never returns the token in a result.