Binance MCP server setup
Figures on this page are as of 2026-09. Fees, limits and margin tiers change — check the venue's own docs before acting on a number.
We found no official Binance MCP server — what exists is community code. And the
most prominent of those, AnalyticAce/binance-mcp-server, differs from the best
of its peers in one important way: trading operations are available by
default, with no documented mechanism to disable them.
That is not a criticism of the project, which is clear about what it does. It is a statement about where your safety has to come from when you use it.
Install
pip install binance-mcp-server
# or
uv add binance-mcp-server
Credentials:
BINANCE_API_KEY
BINANCE_API_SECRET
BINANCE_TESTNET # optional, default false
The documentation recommends “Use testnet for development and safe testing” and carries a plain disclaimer: “Cryptocurrency trading involves financial risk. Always use the Binance Testnet for testing and development,” noting the software is for educational purposes and that the developers are not responsible for losses.
What it exposes
Six categories:
| Category | Tools |
|---|---|
| Account & portfolio | 4 |
| Market data & analysis | 3 |
| Trading operations | 2 — includes create_order |
| Performance & analytics | 2 |
| Wallet & transfers | 3 |
| Risk management | 1 |
Two things to notice.
create_order is present and reachable on a default run. There is no
TRADING_ENABLED-style gate documented, unlike the
Bybit community server which ships trading off
until you set an environment variable.
“Wallet & transfers” exists as a category. Transfers move value between accounts. Whether those tools are reachable depends on the key’s permission flags, which is the point of the next section.
So the key is doing all the work
With no in-server gate, the boundary that decides what can happen is the Binance API key, enforced by Binance rather than by anything on your machine.
Start read-only. A key with enableReading and nothing else cannot place an
order regardless of what the server exposes or how the model is prompted.
Verify rather than remember, at process start:
GET /sapi/v1/account/apiRestrictions
It returns ipRestrict, createTime, enableReading, enableWithdrawals,
enableInternalTransfer, enableMargin, enableFutures and
permitsUniversalTransfer. Assert the values you expect and refuse to run if
they differ. Given a “Wallet & transfers” tool category, checking
enableInternalTransfer and permitsUniversalTransfer is not theoretical.
Withdrawals are structurally unavailable on an unrestricted key. Binance requires the IP Access Restriction filter before withdrawals can be enabled at all — so a key with no IP whitelist cannot withdraw. That is a stronger statement than remembering to untick a box, and it is the single largest reduction in blast radius available here. See disabling withdrawals on a Binance API key.
The 90-day trap. A key with no IP whitelist has its spot trading permission
automatically switched off 90 days after activation. If your MCP setup works for
three months and then starts refusing orders while reads keep working, this is
almost certainly why — see
the IP whitelist article, and expect the
failure to surface as -2015.
Set the testnet flag while learning
BINANCE_TESTNET=true points the server at
https://testnet.binance.vision/api/v3/, which uses separate credentials. An
environment mix-up therefore produces an authentication error rather than a live
order — the safe arrangement, and the reason Binance’s testnet is easier to work
with than OKX’s header-switched demo mode.
What testnet will not reproduce: production symbol availability, filters and minimum order sizes, or rate limits under real pressure. See Binance testnet API keys.
Two things to get right around it
Rate limits are weight-based, not count-based. A model answering “how is my
portfolio doing” can fan out into many calls, and Binance meters by request
weight per endpoint. Exceeding it returns -1003, and severe violations
escalate to an IP ban signalled by HTTP 418. Reserve headroom for cancels —
see Binance API rate limits.
Never auto-retry an order. A timeout means the outcome is unknown, not that
it failed, and newClientOrderId does not save you: Binance documents it as
unique only among open orders, so a retry is accepted once the original has
filled. That is the exact case you needed protection for —
the full explanation.
FAQ
Is there an official Binance MCP server?
We did not find one; what is available is community code such as
AnalyticAce/binance-mcp-server and ethancod1ng/binance-mcp-server. That means
we did not find one rather than that none exists — check Binance’s own
documentation before concluding either way.
Can I stop a Binance MCP server from placing orders?
Not through a documented setting in the server reviewed here, which exposes
create_order on a default run. The reliable way is a Binance API key without
trade permission: that boundary is enforced by Binance and holds regardless of
what the server exposes or how the model behaves.
How do I check what my key is allowed to do?
GET /sapi/v1/account/apiRestrictions returns the live permission flags,
including ipRestrict, enableReading, enableWithdrawals and the transfer
permissions. Calling it at process startup and asserting the expected values
turns a misconfiguration into an immediate, obvious failure instead of a latent
exposure.
Why did my Binance MCP setup stop being able to trade?
If the key has no IP whitelist, most likely the 90-day expiry — Binance
automatically unchecks spot and margin trading 90 days after activation for
unrestricted-IP keys. Reads continue working, so only order placement fails,
typically with -2015. Re-enable the permission and add an IP whitelist.