ramzinex-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ramzinex-mcpshow me the current BTC price"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
A self-hostable Model Context Protocol server for the Ramzinex (رمزینکس) cryptocurrency exchange.
Unofficial integration. This is a community-built MCP server. The "Ramzinex" name and logo belong to their owner. Not affiliated with, endorsed by, or sponsored by Ramzinex. Trading carries risk — use the order tools at your own risk.
What is this?
ramzinex-mcp exposes the Ramzinex exchange API as MCP tools and prompts
so an LLM agent (Claude, etc.) can read markets, inspect an account, and — when
you explicitly allow it — place and cancel orders. It is a small, stateless,
async Python process you run yourself.
It mirrors the structure and quality of the sibling roshan-*-mcp servers:
typed httpx client, pydantic-settings configuration, full test suite, Docker
/ Helm / Kubernetes / Terraform deploy assets, and generated architecture
diagrams.
Related MCP server: Nobitex Market Data MCP Server
Public vs. private — and the trading guardrail
Ramzinex has two API bases, and this server routes each call to the right one automatically:
Surface | Base URL | Auth | Tools |
Public |
| none | market data (pairs, orderbooks, prices, currencies, networks) |
Private |
|
| orders, funds/balances, deposits, withdrawals, addresses, rewards/commissions, API-key access management |
🔐 Auth headers (Postman-accurate)
The live Ramzinex private API requires two non-standard headers — not the usual
Authorization:Authorization2: Bearer <token> x-api-key: <api_key>The header name carrying the token is configurable via
auth_header_name(defaultAuthorization2; set it toAuthorizationfor legacy compatibility), andx-api-keyis sent whenever anapi_keyis configured (send_x_api_keynow defaultstrue). See Authentication.
⚠️ Money-moving & account-control safety
Some actions move real money or change what your API keys can do. They are gated by three separate per-instance flags, all default
false:
enable_tradinggatesramzinex_place_limit_order,ramzinex_place_market_order,ramzinex_cancel_order.
enable_withdrawalsgatesramzinex_submit_withdraw,ramzinex_confirm_withdraw, andramzinex_allocate_address(creating a deposit address is a wallet-write).
account_controlgatesramzinex_edit_general_accessandramzinex_edit_private_access(API-key access management).A master
read_onlyflag forces all three off regardless of their values. When a gate is off the tool returns a structured refusal and never calls the API:{"error": "trading_disabled", "message": "Set enable_trading=true (and read_only=false) on this instance to allow order placement/cancellation."}Read-only tools (market data, viewing balances/orders) are always allowed. Tokens / secrets / api keys are never logged and are redacted from every error message. See Control flags & safety below.
Order lifecycle — placing is gated by
enable_trading:

Withdrawals are separately gated by
enable_withdrawalsand require 2FA confirmation:

Install
pip install -e . # from a checkout
# or, for development:
pip install -e ".[dev]"Requires Python 3.10+.
Quick start
Public market data needs no configuration at all:
python -m ramzinex_mcp # stdio transport (default)To use private (account) tools, authenticate with either a pre-issued bearer
token or an api_key + secret pair (the server exchanges it for a token via
the getToken login flow and re-issues automatically on a 401):
# Option A: pre-issued bearer token
export RAMZINEX_API_TOKEN=your-personal-api-token
# Option B: api_key + secret login flow (api_token wins if both are set)
export RAMZINEX_API_KEY=your-api-key
export RAMZINEX_SECRET=your-api-secret
# x-api-key is sent by default; the token rides in the Authorization2 header.
# export RAMZINEX_SEND_X_API_KEY=false # opt out of the x-api-key header
# export RAMZINEX_AUTH_HEADER_NAME=Authorization # legacy header-name mode
# Opt in to the gated tools (all default false):
export RAMZINEX_ENABLE_TRADING=true # allow placing/cancelling orders
export RAMZINEX_ENABLE_WITHDRAWALS=true # allow withdrawals + address allocation
export RAMZINEX_ACCOUNT_CONTROL=true # allow API-key access management
python -m ramzinex_mcpRun over HTTP for networked clients:
python -m ramzinex_mcp --transport streamable-http --host 0.0.0.0 --port 8000Configuration (multi-account / multi-instance)
Configuration is read from environment variables via pydantic-settings. One
process can front many Ramzinex accounts — each is a named instance with
its own token and trading policy. Every API tool accepts an optional instance
argument; omit it to use the default.
Shorthand (single default instance)
Variable | Default | Description |
| — | Pre-issued bearer token for private endpoints (wins over api_key+secret). |
| — | API key for the |
| — | API secret paired with |
|
| Header that carries the bearer token (set |
|
| Also send |
|
| Public base URL. |
|
| Private base URL. |
|
| API version segment for the exchange paths. |
|
| Allow placing/cancelling orders. |
|
| Allow withdrawals + deposit-address allocation. |
|
| Allow API-key access management (edit general/private access). |
|
| Master switch: forces all three gates off. |
|
| Verify TLS certificates. |
|
| Per-request timeout (seconds). |
|
| Instance used when |
|
|
|
Nested (named instances)
Variable | Description |
| Pre-issued bearer token for instance |
| API key for |
| API secret for |
| Bearer-token header name for |
| Send |
| Trading switch for |
| Withdrawals + address-allocation switch for |
| API-key access-management switch for |
| Master switch (forces all three gates off) for |
| API version for |
| Public base for |
| Private base for |
| TLS verification (default |
| Per-request timeout seconds (default |
| Instance used when |
|
|
Example: a read-only personal account, a trading bot using api_key+secret, and a strictly read-only viewer.
RAMZINEX__INSTANCES__PERSONAL__API_TOKEN=personal-token
RAMZINEX__INSTANCES__PERSONAL__ENABLE_TRADING=false
RAMZINEX__INSTANCES__BOT__API_KEY=bot-key
RAMZINEX__INSTANCES__BOT__SECRET=bot-secret
RAMZINEX__INSTANCES__BOT__ENABLE_TRADING=true
RAMZINEX__INSTANCES__READONLY__API_TOKEN=viewer-token
RAMZINEX__INSTANCES__READONLY__READ_ONLY=true
RAMZINEX__DEFAULT_INSTANCE=personalSee .env.example for a complete, annotated file. Use
list_instances to see what's configured (names, base URLs, api_version,
auth_header_name, has_credentials, auth_method, enable_trading,
enable_withdrawals, account_control, read_only) — it never reveals
credential values.
Authentication: a pre-issued
api_token, orapi_key+secretexchanged for a cached Bearer (refreshed on 401):

Control flags & safety
Three independent gates plus a master switch protect the account. Use the
effective trading_allowed / withdrawals_allowed / account_control_allowed
values from list_instances (they already fold in read_only):
Flag | Default | Gates | Effective when |
|
|
|
|
|
|
|
|
|
|
|
|
|
| forces all three of the above off | — |
When a gate is off, the tool returns
{"error": "trading_disabled" / "withdrawals_disabled" / "account_control_disabled", "message": ...}
and never contacts the API. ramzinex_refresh_deposits is a non-money-moving
refresh and is not gated.
Authentication: api_token vs api_key + secret
Private endpoints require two non-standard headers:
Authorization2: Bearer <token> and x-api-key: <api_key> (the live API
does not use the standard Authorization). The token-carrying header name is
configurable via auth_header_name (default Authorization2; set
Authorization for legacy mode), and x-api-key is sent whenever an api_key
is configured (send_x_api_key defaults true).
api_token— a pre-issued bearer token, sent directly asAuthorization2: Bearer <token>. Simplest; takes precedence if both are set.api_key+secret— the server POSTs them toauth/api_key/getToken, caches the returned token in memory per instance, reuses it, and re-authenticates once on a401. Callramzinex_authenticateto trigger/verify the login explicitly (it never returns the token). Theapi_keydoubles as thex-api-keyheader value. Tokens, secrets, and api keys are never logged or echoed (Authorization2/Authorization/x-api-key/secret/api_keyare all redacted from errors).
The
read_onlymaster switch overrides the trading / withdrawal / account-control gates:

Use with an MCP client
Add it to your client's MCP server config (stdio):
{
"mcpServers": {
"ramzinex": {
"command": "python",
"args": ["-m", "ramzinex_mcp"],
"env": {
"RAMZINEX_API_TOKEN": "your-personal-api-token",
"RAMZINEX_ENABLE_TRADING": "false"
}
}
}
}Tools
All 45 tools (42 service endpoints + 3 meta) accept an optional instance
(except the two local meta tools, list_instances and ramzinex_docs). Private
tools send Authorization2: Bearer <token> + x-api-key: <api_key>.
Market data — public, no auth
Tool | Endpoint |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Auth & access management — private
Tool | Endpoint | Notes |
|
| Runs the api_key+secret login flow; caches the token (never returns it). |
|
| ⚠️ gated by |
|
| ⚠️ gated by |
Orders — private
Tool | Endpoint | Notes |
|
| read-only |
|
| read-only |
|
| ⚠️ gated by |
|
| ⚠️ gated by |
|
| ⚠️ gated by |
|
| read-only |
Funds — private
Tool | Endpoint |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Wallet (deposits / withdrawals / addresses) — private
Tool | Endpoint | Notes |
|
| read-only |
|
| ⚠️ gated by |
|
| read-only |
|
| read-only |
|
| read-only |
|
| refresh (no funds moved) |
|
| read-only |
|
| read-only |
|
| read-only |
|
| ⚠️ gated by |
|
| ⚠️ gated by |
Rewards & commissions — private
Tool | Endpoint | Notes |
|
| read-only; best-effort path (confirm against panel) |
|
| read-only; best-effort path (confirm against panel) |
Meta
Tool | Description |
| Pings the public pairs endpoint and reports reachability. |
| Lists configured instances (base URLs, |
| Offline reference + links to https://ramzinex.com/exchange/apidocs. |
All endpoints at a glance, grouped by category:

API coverage
Every section/endpoint of the official Postman collection maps to a tool. The
source column is postman for items present in the collection text and
best-effort for the three tools whose exact URLs the pasted collection did not
include (rewards, commissions, and deposit-address allocation) — confirm those
against the Ramzinex panel/Postman.
Postman section / endpoint | Method | Path | Tool | Source |
Market — pairs | GET |
|
| postman |
Market — pair | GET |
|
| postman |
Market — orderbook | GET |
|
| postman |
Market — all orderbooks | GET |
|
| postman |
Market — orderbook buys | GET |
|
| postman |
Market — orderbook sells | GET |
|
| postman |
Market — market buy price | GET |
|
| postman |
Market — market sell price | GET |
|
| postman |
Market — prices feed | GET |
|
| postman |
Market — currencies | GET |
|
| postman |
Market — networks | GET |
|
| postman |
Auth — getToken | POST |
|
| postman |
Auth — editGeneralAccess | POST |
|
| postman |
Auth — editPrivateAccess | POST |
|
| postman |
Orders — list | POST |
|
| postman |
Orders — get | GET |
|
| postman |
Orders — limit | POST |
|
| postman |
Orders — market | POST |
|
| postman |
Orders — cancel | POST |
|
| postman |
Orders — turnover | GET |
|
| postman |
Funds — details | GET |
|
| postman |
Funds — currency detail | GET |
|
| postman |
Funds — summaryDesktop | GET |
|
| postman |
Funds — total | GET |
|
| postman |
Funds — available | GET |
|
| postman |
Funds — in_orders | GET |
|
| postman |
Funds — rial equivalent | GET |
|
| postman |
Funds — usdt equivalent | GET |
|
| postman |
Funds — refresh | POST |
|
| postman |
Wallet — addresses | POST |
|
| postman |
Wallet — allocate address | POST |
|
| best-effort |
Wallet — deposits | GET |
|
| postman |
Wallet — currency deposits | GET |
|
| postman |
Wallet — deposit | GET |
|
| postman |
Wallet — refresh deposits | POST |
|
| postman |
Wallet — withdraws | GET |
|
| postman |
Wallet — currency withdraws | GET |
|
| postman |
Wallet — withdraw | GET |
|
| postman |
Wallet — submit withdraw | POST |
|
| postman |
Wallet — confirm withdraw | POST |
|
| postman |
Rewards — rewards | GET |
|
| best-effort |
Rewards — commissions | GET |
|
| best-effort |
Meta — reachability | GET |
|
| local |
Meta — instances | – | (local) |
| local |
Meta — docs | – | (local) |
| local |
⚠ = money-moving or account-control; gated by enable_trading /
enable_withdrawals / account_control (all forced off by read_only).
Prompts
The server also ships MCP prompts — safety-aware workflows your client can
list and run (details in prompts/README.md):
market_overview— pull pairs + an orderbook and summarize the market.check_balances— walk the funds/balance tools to report holdings.place_trade_safely— a careful checklist that verifiesenable_tradingand confirms parameters before placing a REAL order.portfolio_report— combine funds + open orders + turnover.
Skill
A ready-to-use Claude/agent skill lives at
skills/ramzinex/SKILL.md. It describes when and how
to use these tools — market lookup, balance checks, and the safe trading flow —
with example tool sequences.
Architecture
The MCP client talks to one ramzinex-mcp process, which routes public calls to
publicapi.ramzinex.com and authenticated calls (with the Authorization2 +
x-api-key headers) to ramzinex.com.

One process can serve many accounts; the instance argument selects which token
/ trading policy to use.

A typical flow: read the market on the public API, check the enable_trading
gate, then place and confirm an order on the private API.

Regenerate the diagrams with make diagrams (uses the diagrams package +
Graphviz dot and cairosvg).
Self-hosting & scaling
ramzinex-mcp is stateless, so you can run as many replicas as you like behind a
load balancer. One process fronts multiple accounts via
RAMZINEX__INSTANCES__<NAME>__* — no code change. Back off on HTTP 429 if the
exchange rate-limits you. See deploy/ for Docker Compose,
Kubernetes (raw + Kustomize), a Helm chart, and a Terraform module.
Testing
make smoke # no-network smoke test (tools + prompts + descriptions)
make test # full pytest suite (offline; all HTTP mocked with respx)
make lint # ruffLive tests against the real API are skipped unless RAMZINEX_LIVE=1 is set (and,
for private endpoints, RAMZINEX_API_TOKEN):
RAMZINEX_LIVE=1 pytest tests/live -qLicense
MIT. ramzinex-mcp is an unofficial, community-built integration; the
Ramzinex name and logo belong to their owner.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dwin-gharibi/ramzinex-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server