CCXT
Official CCXT MCP server - Market data and trading across 100+ exchanges and prediction markets
Description from the maker (original English)
MCP server for Xero accounting — contacts, invoices, payments, accounts, and financial reports.
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
XERO_TENANT_ID, XERO_ACCESS_TOKEN, MCP_TRANSPORT, AUTH_MODE, LOG_LEVELValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"xero": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"XERO_TENANT_ID",
"-e",
"XERO_ACCESS_TOKEN",
"-e",
"MCP_TRANSPORT",
"-e",
"AUTH_MODE",
"-e",
"LOG_LEVEL",
"ghcr.io/wyre-technology/xero-mcp:v1.5.5"
],
"env": {
"XERO_TENANT_ID": "your-value",
"XERO_ACCESS_TOKEN": "your-value",
"MCP_TRANSPORT": "your-value",
"AUTH_MODE": "your-value",
"LOG_LEVEL": "your-value"
}
}
}
}Run this in your terminal
claude mcp add xero --env XERO_TENANT_ID=your-value --env XERO_ACCESS_TOKEN=your-value --env MCP_TRANSPORT=your-value --env AUTH_MODE=your-value --env LOG_LEVEL=your-value -- docker run -i --rm -e XERO_TENANT_ID -e XERO_ACCESS_TOKEN -e MCP_TRANSPORT -e AUTH_MODE -e LOG_LEVEL ghcr.io/wyre-technology/xero-mcp:v1.5.5Fill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"xero": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"XERO_TENANT_ID",
"-e",
"XERO_ACCESS_TOKEN",
"-e",
"MCP_TRANSPORT",
"-e",
"AUTH_MODE",
"-e",
"LOG_LEVEL",
"ghcr.io/wyre-technology/xero-mcp:v1.5.5"
],
"env": {
"XERO_TENANT_ID": "your-value",
"XERO_ACCESS_TOKEN": "your-value",
"MCP_TRANSPORT": "your-value",
"AUTH_MODE": "your-value",
"LOG_LEVEL": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"xero": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"XERO_TENANT_ID",
"-e",
"XERO_ACCESS_TOKEN",
"-e",
"MCP_TRANSPORT",
"-e",
"AUTH_MODE",
"-e",
"LOG_LEVEL",
"ghcr.io/wyre-technology/xero-mcp:v1.5.5"
],
"env": {
"XERO_TENANT_ID": "your-value",
"XERO_ACCESS_TOKEN": "your-value",
"MCP_TRANSPORT": "your-value",
"AUTH_MODE": "your-value",
"LOG_LEVEL": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
MCP_TRANSPORT envAUTH_MODE envLOG_LEVEL envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 10, 2026
The registry name was verified with the GitHub account wyre-technology, which owns the repo
Code last changed yesterday
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 2 of 2 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: XERO_TENANT_ID, XERO_ACCESS_TOKEN
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed yesterday, and the latest version (1.5.5) reached the registry 3 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Docker on your computer.
In the same category: CCXT, Finance Toolkit, AKQuant
Servers in the same category from other makers, sorted by stars.
Reading a card:↓ Downloads per weeki★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Official CCXT MCP server - Market data and trading across 100+ exchanges and prediction markets
500+ transparent financial methods calculated from raw statements, not third-party endpoints.
Write and backtest trading strategies with AKQuant: API lookup, strategy checks, backtest runs
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
Model Context Protocol (MCP) server for the Xero Accounting API. Enables Claude and other MCP-compatible clients to manage Xero contacts, invoices, payments, accounts, and reports.
xero_invoices_get renders as a rich, read-only card in MCP Apps hosts — neutral by default, brandable via window.__BRAND__ injection or MCP_BRAND_* env varsNote on registry auth: This server depends only on public npm packages, so the Cloudflare and DigitalOcean cloud builders install its dependencies anonymously — no token is required for one-click deploy. (If a future release adds a private
@wyre-ai/*dependency, you would supply a GitHub PAT withread:packagesas a build variable —NODE_AUTH_TOKENfor Cloudflare Workers, a build-timeGITHUB_TOKENsecret for DigitalOcean.)
Installing the published package: The released package is published to the GitHub Packages npm registry, which requires authentication on every install (even for public packages). To install it, authenticate npm to
npm.pkg.github.comwith a GitHub PAT that hasread:packages:
`bash
export NODE_AUTH_TOKEN=$(gh auth token)
npm install @wyre-ai/xero-mcp
`
npm install
npm run build
XERO_ACCESS_TOKEN=your-access-token XERO_TENANT_ID=your-tenant-id npm start
CONDUIT_S2S_SECRET is required. If it is empty or a known placeholder, the process logs an error and exits non-zero. It never prints the secret.
MCP_TRANSPORT=http \
CONDUIT_S2S_SECRET="$CONDUIT_S2S_SECRET" \ XERO_ACCESS_TOKEN=your-access-token \ XERO_TENANT_ID=your-tenant-id \ npm start
With a secret set and MCP_HTTP_HOST unset, the server listens on http://0.0.0.0:8080/mcp.
Local HTTP without a secret is development-only. It logs a warning, does not check X-Gateway-S2S, and binds 127.0.0.1 only (a non-loopback MCP_HTTP_HOST is ignored):
MCP_TRANSPORT=http MCP_ALLOW_INSECURE_DEV=1 npm start
The image listens on 0.0.0.0 inside the container. Publish the port on loopback and pass the S2S secret. Gateway mode does not read Xero credentials from the environment:
docker build -t xero-mcp .
docker run \ -e CONDUIT_S2S_SECRET=your-s2s-secret \ -e AUTH_MODE=gateway \ -p 127.0.0.1:8080:8080 \ xero-mcp
Single-tenant HTTP (AUTH_MODE=env) still requires the S2S secret, then uses XERO_ACCESS_TOKEN and XERO_TENANT_ID:
docker run \
-e CONDUIT_S2S_SECRET=your-s2s-secret \ -e AUTH_MODE=env \ -e XERO_ACCESS_TOKEN=your-access-token \ -e XERO_TENANT_ID=your-tenant-id \ -p 127.0.0.1:8080:8080 \ xero-mcp
The checked-in Compose service is gateway mode. It does not set XERO_ACCESS_TOKEN or XERO_TENANT_ID and does not use env_file, so a project .env cannot inject static vendor credentials into the container. Compose refuses to start when CONDUIT_S2S_SECRET is unset or empty, and publishes 127.0.0.1:8080:8080.
CONDUIT_S2S_SECRET=your-s2s-secret docker compose up
Copy .env.example. Leave CONDUIT_S2S_SECRET empty in that file.
| Variable | Required | Default | Description |
|---|---|---|---|
XERO_ACCESS_TOKEN | For stdio and AUTH_MODE=env | — | Xero OAuth2 access token. Not set on the gateway Compose service. |
XERO_TENANT_ID | For stdio and AUTH_MODE=env | — | Xero tenant ID (organisation). Not set on the gateway Compose service. |
MCP_TRANSPORT | No | stdio | Transport type: stdio or http |
MCP_HTTP_PORT | No | 8080 | HTTP server port |
MCP_HTTP_HOST | No | 0.0.0.0 when CONDUIT_S2S_SECRET is set | Bind address. A configured secret honors this value. With no secret, MCP_ALLOW_INSECURE_DEV=1 forces 127.0.0.1. The container image sets 0.0.0.0. |
AUTH_MODE | No | env | env or gateway. Compose sets gateway. |
CONDUIT_S2S_SECRET | Yes for HTTP | — | Service-to-service HMAC secret. HTTP startup exits non-zero when this is empty or a known placeholder. Never commit a real value. The value is never logged. |
MCP_ALLOW_INSECURE_DEV | No | unset | Set to exactly 1 for local HTTP without CONDUIT_S2S_SECRET. Logs a warning, skips X-Gateway-S2S, and binds 127.0.0.1 only. Does not accept a placeholder secret. |
/health stays unauthenticated and does not read credentials. The stdio transport does not use CONDUIT_S2S_SECRET.
With MCP_TRANSPORT=http and CONDUIT_S2S_SECRET set, every /mcp request must include X-Gateway-S2S. The check is verifyS2sHeader in src/s2s-verify.ts.
The header value is t= ,v1= :
is the current UTC time. is HMAC-SHA256 of the literal string t= (the same t= prefix and digits), keyed with CONDUIT_S2S_SECRET, encoded as 64 lowercase hex characters.A missing or invalid header is HTTP 401, before vendor credentials are read. The secret is never logged.
TS=$(date +%s)
SIG=$(printf 't=%s' "$TS" | openssl dgst -sha256 -hmac "$CONDUIT_S2S_SECRET" -hex | awk '{print $NF}') curl -sS http://127.0.0.1:8080/mcp \ -H 'Content-Type: application/json' \ -H 'Accept: application/json, text/event-stream' \ -H "X-Gateway-S2S: t=${TS},v1=${SIG}" \ -H "X-Xero-Access-Token: $XERO_ACCESS_TOKEN" \ -H "X-Xero-Tenant-Id: $XERO_TENANT_ID" \ -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
Known placeholders (replace-with-a-real-secret, your-s2s-secret, your-secret, changeme, change-me, placeholder, secret, example, replace-me, s2s-secret, any case, surrounding whitespace ignored) are refused at startup so a copied example cannot forge that header. Generate a secret with openssl rand -hex 32.
When AUTH_MODE=gateway, credentials are passed per-request via HTTP headers instead of environment variables:
X-Xero-Access-Token — OAuth2 access tokenX-Xero-Tenant-Id — Xero tenant IDA request missing either header gets HTTP 401 and does not fall back to XERO_ACCESS_TOKEN or XERO_TENANT_ID. When CONDUIT_S2S_SECRET is set, the request must also include a valid X-Gateway-S2S header. This allows a gateway/proxy to manage multi-tenant credentials.
xero_invoices_get renders as an interactive card in MCP Apps hosts (Claude Desktop/web) showing status, contact, dates, amounts, and line items; plain-JSON behavior is unchanged in other hosts. The card is read-only — invoices are financial records, so no write actions are exposed from it. It is neutral by default and brandable via window.__BRAND__ injection or MCP_BRAND_* env vars (MCP_BRAND_NAME, MCP_BRAND_LOGO_URL, MCP_BRAND_PRIMARY_COLOR, MCP_BRAND_ACCENT_COLOR, MCP_BRAND_BG, MCP_BRAND_TEXT) — no rebuild needed.
Tools are organized into domains. Use xero_navigate to select a domain, then use the domain-specific tools.
xero_navigate — Select a domain (contacts, invoices, payments, accounts, reports)xero_back — Return to domain selectionxero_contacts_list — List contacts with pagination and optional filteringxero_contacts_get — Get detailed contact information by IDxero_contacts_create — Create a new contact (customer or supplier)xero_contacts_search — Search contacts by namexero_invoices_list — List invoices with optional status and type filtersxero_invoices_get — Get detailed invoice information by IDxero_invoices_create — Create a new invoice (sales or bill)xero_invoices_update_status — Update invoice status (submit, authorise, void)xero_payments_list — List payments with optional status filterxero_payments_get — Get detailed payment information by IDxero_payments_create — Record a payment against an invoicexero_accounts_list — List chart of accounts with optional type/class filterxero_accounts_get — Get detailed account information by IDxero_reports_profit_and_loss — Profit and Loss (income statement) for a date rangexero_reports_balance_sheet — Balance Sheet as of a specific datexero_reports_aged_receivables — Aged Receivables by contactxero_reports_aged_payables — Aged Payables by contactApache-2.0