Deploy the MCP¶
The primedelta-mcp server exposes the PrimeDelta tools to any MCP client. This page covers installing it, the environment it reads, and the ways to run it.
Install¶
pip install "primedelta-mcp @ git+https://github.com/PrimeDeltaCorp/primedelta-mcp.git"
pip install "primedelta[kms] @ git+https://github.com/PrimeDeltaCorp/primedelta-python.git" # for KMS
The package installs the primedelta-mcp console command.
Choose a signing mode¶
On a server there's no browser, so:
| Mode | Signer | Use |
|---|---|---|
execute + PRIMEDELTA_MCP_KMS_KEY_ID |
AWS KMS | Recommended — key never leaves KMS |
execute + PRIMEDELTA_MCP_PRIVATE_KEY |
Raw key | Dev / sandbox only |
craft |
— | Returns unsigned transactions for your own tooling |
Browser mode can't work headless. See Signing modes.
Environment variables¶
The most-used ones:
| Variable | Controls | Default |
|---|---|---|
PRIMEDELTA_MCP_NETWORK |
dev / testnet / mainnet — selects contracts, chain id, and the derived RPC |
dev |
PRIMEDELTA_MCP_PROVIDER_URL |
Override the derived RPC (custom node) | derived |
PRIMEDELTA_MCP_MODE |
browser / execute / craft (aliases aws/privatekey → execute) |
browser |
PRIMEDELTA_MCP_KMS_KEY_ID |
KMS key id/ARN for execute/craft | — |
PRIMEDELTA_MCP_KMS_REGION |
AWS region for the KMS client | default AWS region |
PRIMEDELTA_MCP_PRIVATE_KEY |
Raw key (dev only) — sensitive | — |
PRIMEDELTA_MCP_MAX_TRADE_USD |
Per-trade dUSD cap | none |
PRIMEDELTA_MCP_MAX_DAILY_USD |
Daily dUSD cap (per UTC day, persisted) | none |
PRIMEDELTA_MCP_ALLOW_ORDERS |
Gate: brokerage orders | off |
PRIMEDELTA_MCP_ALLOW_WITHDRAWALS |
Gate: withdrawals | off |
PRIMEDELTA_MCP_ALLOW_DEPOSITS |
Gate: deposits | off |
PRIMEDELTA_MCP_ALLOW_SUBACCOUNTS |
Gate: confirm AI subaccounts | off |
The chain id is derived from the network and checked against the RPC on startup — there's no chain-id variable. Additional allowlist and HTTP/auth variables are covered in Operator hardening and Connect Claude web.
Run it¶
stdio (default)¶
For a local MCP client (Claude Code, Cursor, …):
export PRIMEDELTA_MCP_NETWORK=testnet
export PRIMEDELTA_MCP_MODE=execute
export PRIMEDELTA_MCP_KMS_KEY_ID=<key-id>
primedelta-mcp
A Claude Code .mcp.json entry:
{
"mcpServers": {
"primedelta": {
"command": "primedelta-mcp",
"env": {
"PRIMEDELTA_MCP_NETWORK": "testnet",
"PRIMEDELTA_MCP_MODE": "execute",
"PRIMEDELTA_MCP_KMS_KEY_ID": "<key-id>"
}
}
}
}
HTTP (hosted)¶
HTTP refuses to start without authentication — a bearer token or OAuth. There's an unauthenticated GET /healthz for liveness. See Connect Claude web.
Docker¶
docker build -t primedelta-mcp .
docker run -p 8000:8000 \
-e PRIMEDELTA_MCP_NETWORK=testnet \
-e PRIMEDELTA_MCP_MODE=execute \
-e PRIMEDELTA_MCP_KMS_KEY_ID=<key-id> \
-e PRIMEDELTA_MCP_AUTH_TOKEN=<token> \
primedelta-mcp --transport http --host 0.0.0.0 --port 8000
The container is headless, so use KMS or a private key — never browser mode.
Next → Connect Claude web · AWS KMS · Operator hardening