mcpField
L
Luno MCP Server

Luno MCP Server

Local
github.com/lunoFinance28Updated 5w ago

About Luno MCP Server

Luno MCP Server is an MCP server for the Luno cryptocurrency exchange API. It targets users of Claude Code, VS Code, Cursor and other MCP clients who want market data, balances and transaction history, with trading write operations available only when enabled.

Key features

  1. 01Ticker, order book, trade and candle market data
  2. 02Account balances and transaction details
  3. 03Order creation, cancellation and conversion when enabled
  4. 04Read-only by default; writes require explicit opt-in
  5. 05Supports stdio and SSE transports

Use cases

  1. 01Checking the current price of Bitcoin in ZAR
  2. 02Reviewing Luno account balances and transaction history
  3. 03Viewing market data inside an AI coding or chat client

MCP support

The server runs as an MCP server and exposes exchange market, account and transaction functions to MCP clients as tools and resources.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"luno": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"\\"
]
}
}
}
Run commanddocker run -i --rm '\'

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
oci\

Tools

No tool list yet

Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.

Details

From the project README

Luno MCP Server

Quality Gate Status Coverage Bugs Security Rating Vulnerabilities Duplicated Lines (%) Go Report Card GoDoc luno-mcp MCP server

A Model Context Protocol (MCP) server that provides access to the Luno cryptocurrency exchange API.

This server enables integration with Claude Code/VSCode/Cursor (and other MCP-compatible clients), providing contextual information and functionality related to the Luno cryptocurrency exchange.

Getting started

Some tools require your Luno API key and secret. Get these from your Luno account settings.

Install in VS Code Install in VS Code Insiders Install in Cursor

Standard config (Docker) works with most MCP clients:

{
  "mcpServers": {
    "luno": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "LUNO_API_KEY_ID=YOUR_API_KEY_ID",
        "-e", "LUNO_API_SECRET=YOUR_API_SECRET",
        "ghcr.io/luno/luno-mcp:latest"
      ]
    }
  }
}
Claude Code

Using Docker:

claude mcp add luno -- docker run --rm -i -e LUNO_API_KEY_ID=YOUR_API_KEY_ID -e LUNO_API_SECRET=YOUR_API_SECRET ghcr.io/luno/luno-mcp:latest

Or if you've built from source:

claude mcp add luno -e LUNO_API_KEY_ID=YOUR_API_KEY_ID -e LUNO_API_SECRET=YOUR_API_SECRET -- luno-mcp
Claude Desktop

One-line install and configure (macOS):

curl -fsSL https://raw.githubusercontent.com/luno/luno-mcp/main/claude-desktop-install.sh | \
  LUNO_API_KEY_ID=<key> LUNO_API_SECRET=<secret> sh

Or add the standard config to your claude_desktop_config.json manually (setup guide).

Cursor

Go to Cursor Settings → MCP → Add new MCP Server. Use command type with command docker and the args from the standard config above.

Or add the standard config to your .cursor/mcp.json.

Windsurf

Follow the Windsurf MCP documentation. Use the standard config above.

VS Code (manual configuration)

Click the badges above for one-click Docker install, or add the following to your VS Code settings.json or .vscode/mcp.json:

With Docker
{
  "inputs": [
    {"id": "luno_api_key_id", "type": "promptString", "description": "Luno API Key ID", "password": true},
    {"id": "luno_api_secret", "type": "promptString", "description": "Luno API Secret", "password": true}
  ],
  "servers": {
    "luno": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "LUNO_API_KEY_ID=${input:luno_api_key_id}",
        "-e", "LUNO_API_SECRET=${input:luno_api_secret}",
        "ghcr.io/luno/luno-mcp:latest"
      ]
    }
  }
}
From source
{
  "inputs": [
    {"id": "luno_api_key_id", "type": "promptString", "description": "Luno API Key ID", "password": true},
    {"id": "luno_api_secret", "type": "promptString", "description": "Luno API Secret", "password": true}
  ],
  "servers": {
    "luno": {
      "command": "luno-mcp",
      "env": {
        "LUNO_API_KEY_ID": "${input:luno_api_key_id}",
        "LUNO_API_SECRET": "${input:luno_api_secret}"
      }
    }
  }
}
SSE transport
{
  "servers": {
    "luno": {
      "type": "sse",
      "url": "http://localhost:8080/sse"
    }
  }
}
Building from source

Requires Go 1.25 or later.

Install directly:

go install github.com/luno/luno-mcp/cmd/server@latest

Or clone and build:

git clone https://github.com/luno/luno-mcp
cd luno-mcp
go build -o luno-mcp ./cmd/server

Optionally make it available system-wide:

sudo mv luno-mcp /usr/local/bin/
Homebrew (macOS)

Install via Homebrew using the luno/homebrew-luno-mcp tap:

brew tap luno/luno-mcp
brew install luno-mcp

Then configure your MCP client:

{
  "mcpServers": {
    "luno": {
      "command": "luno-mcp",
      "args": ["--transport", "stdio"],
      "env": {
        "LUNO_API_KEY_ID": "YOUR_API_KEY_ID",
        "LUNO_API_SECRET": "YOUR_API_SECRET"
      }
    }
  }
}

Or with Claude Code:

claude mcp add luno -e LUNO_API_KEY_ID=YOUR_API_KEY_ID -e LUNO_API_SECRET=YOUR_API_SECRET -- luno-mcp
Docker

Use the standard config above, or run directly:

docker run --rm -i \
  -e LUNO_API_KEY_ID=YOUR_API_KEY_ID \
  -e LUNO_API_SECRET=YOUR_API_SECRET \
  ghcr.io/luno/luno-mcp:latest

For SSE mode:

docker run --rm \
  -e LUNO_API_KEY_ID=YOUR_API_KEY_ID \
  -e LUNO_API_SECRET=YOUR_API_SECRET \
  -p 8080:8080 \
  ghcr.io/luno/luno-mcp:latest \
  --transport sse --sse-address 0.0.0.0:8080

Optional environment variables:

  • LUNO_API_DEBUG=true — Enable debug logging
  • LUNO_API_DOMAIN=api.staging.luno.com — Override API domain
  • ALLOW_WRITE_OPERATIONS=true — Enable write operations (create_order, cancel_order, convert)

Standard config (Docker) works with most MCP clients:

{
  "mcpServers": {
    "luno": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "LUNO_API_KEY_ID=YOUR_API_KEY_ID",
        "-e", "LUNO_API_SECRET=YOUR_API_SECRET",
        "ghcr.io/luno/luno-mcp:latest"
      ]
    }
  }
}
Claude Code

Using Docker:

claude mcp add luno -- docker run --rm -i -e LUNO_API_KEY_ID=YOUR_API_KEY_ID -e LUNO_API_SECRET=YOUR_API_SECRET ghcr.io/luno/luno-mcp:latest

Or if you've built from source:

claude mcp add luno -e LUNO_API_KEY_ID=YOUR_API_KEY_ID -e LUNO_API_SECRET=YOUR_API_SECRET -- luno-mcp
Claude Desktop

One-line install and configure (macOS):

curl -fsSL https://raw.githubusercontent.com/luno/luno-mcp/main/claude-desktop-install.sh | \
  LUNO_API_KEY_ID=<key> LUNO_API_SECRET=<secret> sh

Or add the standard config to your claude_desktop_config.json manually (setup guide).

Cursor

Go to Cursor Settings → MCP → Add new MCP Server. Use command type with command docker and the args from the standard config above.

Or add the standard config to your .cursor/mcp.json.

Windsurf

Follow the Windsurf MCP documentation. Use the standard config above.

VS Code (manual configuration)

Click the badge above for one-click Docker install, or add the following to your VS Code settings.json or .vscode/mcp.json:

With Docker
{
  "servers": {
    "luno": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "-e", "LUNO_API_KEY_ID=${input:luno_api_key_id}",
        "-e", "LUNO_API_SECRET=${input:luno_api_secret}",
        "ghcr.io/luno/luno-mcp:latest"
      ],
      "inputs": [
         {"id": "luno_api_key_id", "type": "promptString", "description": "Luno API Key ID", "password": true},
         {"id": "luno_api_secret", "type": "promptString", "description": "Luno API Secret", "password": true}
      ]
    }
  }
}
From source
{
  "servers": {
    "luno": {
      "command": "luno-mcp",
      "env": {
        "LUNO_API_KEY_ID": "${input:luno_api_key_id}",
        "LUNO_API_SECRET": "${input:luno_api_secret}"
      },
      "inputs": [
        {"id": "luno_api_key_id", "type": "promptString", "description": "Luno API Key ID", "password": true},
        {"id": "luno_api_secret", "type": "promptString", "description": "Luno API Secret", "password": true}
      ]
    }
  }
}
SSE transport
{
  "servers": {
    "luno": {
      "type": "sse",
      "url": "http://localhost:8080/sse"
    }
  }
}
Building from source

Requires Go 1.25 or later.

Install directly:

go install github.com/luno/luno-mcp/cmd/server@latest

Or clone and build:

git clone https://github.com/luno/luno-mcp
cd luno-mcp
go build -o luno-mcp ./cmd/server

Optionally make it available system-wide:

sudo mv luno-mcp /usr/local/bin/
Docker

Use the standard config above, or run directly:

docker run --rm -i \
  -e LUNO_API_KEY_ID=YOUR_API_KEY_ID \
  -e LUNO_API_SECRET=YOUR_API_SECRET \
  ghcr.io/luno/luno-mcp:latest

For SSE mode:

docker run --rm \
  -e LUNO_API_KEY_ID=YOUR_API_KEY_ID \
  -e LUNO_API_SECRET=YOUR_API_SECRET \
  -p 8080:8080 \
  ghcr.io/luno/luno-mcp:latest \
  --transport sse --sse-address 0.0.0.0:8080

Optional environment variables:

  • LUNO_API_DEBUG=true — Enable debug logging
  • LUNO_API_DOMAIN=api.staging.luno.com — Override API domain
  • ALLOW_WRITE_OPERATIONS=true — Enable write operations (create_order, cancel_order, convert)

Features

  • Resources: Access to account balances, transaction history, and more
  • Tools: Functionality for creating and managing orders, checking prices, and viewing transaction details
  • Security: Secure authentication using Luno API keys
  • VS Code Integration: Easy integration with VSCode, or other AI IDEs

Available Tools

ToolCategoryDescriptionAuth RequiredWrite
get_tickerMarket DataGet current ticker information for a trading pair❌❌
get_tickersMarket DataList tickers for given pairs (or all)❌❌
get_order_bookMarket DataGet the order book for a trading pair❌❌
list_tradesMarket DataList recent trades for a currency pair❌❌
get_candlesMarket DataGet candlestick market data for a currency pair❌❌
get_markets_infoMarket DataList all supported markets parameter information❌❌
get_balancesAccount InformationGet balances for all accounts✅❌
create_orderTradingCreate a new buy or sell order✅✅
cancel_orderTradingCancel an existing order✅✅
list_ordersTradingList open orders✅❌
list_transactionsTransactionsList transactions for an account✅❌
get_transactionTransactionsGet details of a specific transaction✅❌
convertTradingInstantly convert between two currencies✅✅

Command-line options

  • --transport: Transport type (stdio, sse, or streamable-http; default: stdio)
  • --sse-address: Address for SSE and Streamable HTTP transports (default: localhost:8080)
  • --domain: Luno API domain (default: api.luno.com)
  • --log-level: Log level (debug, info, warn, error, default: info)
  • --allow-write-operations: Enable write operations (create_order, cancel_order, convert). Also configurable via ALLOW_WRITE_OPERATIONS env var

Examples

Working with wallets

You can ask your LLM to show your wallet balances:

What are my current wallet balances on Luno?
Trading

You can ask your LLM to help you trade:

Create a limit order to buy 0.001 BTC at 50000 ZAR
Transaction history

You can ask your LLM to show your transaction history:

Show me my recent Bitcoin transactions
Market Data

You can ask your LLM to show market data:

Show me recent trades for XBTZAR
What's the latest price for Bitcoin in ZAR?

Security Considerations

This tool requires API credentials that have access to your Luno account. Be cautious when using API keys, especially ones with withdrawal permissions. It's recommended to create API keys with only the permissions needed for your specific use case.

Write Operations Control

By default, the MCP server runs in read-only mode — create_order, cancel_order, and convert are not exposed. To enable them, set ALLOW_WRITE_OPERATIONS to true, 1, or yes. See the config examples above for where to add this flag.

Best Practices for API Credentials
  1. Create Limited-Permission API Keys: Only grant the permissions absolutely necessary for your use case
  2. Never Commit Credentials to Version Control: Ensure .env files are always in your .gitignore
  3. Rotate API Keys Regularly: Periodically regenerate your API keys to limit the impact of potential leaks
  4. Monitor API Usage: Regularly check your Luno account for any unauthorized activity
  5. Use Read-Only Mode by Default: Only enable write operations when specifically needed

Contributing

If you'd like to contribute to the development of this project, please see the CONTRIBUTING.md file for guidelines.

License

MIT License

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.