Open-source B2B and marketplace ecommerce; new stores include an MCP server for AI agents.
MagicMarkets
Overview
Description from the maker (original English)
Sports prediction markets for AI agents — live prices, quotes, orders, and positions.
PopNx MCP’s three pillars
These three are never merged into one score: opinions, measurements and popularity are different things.
- User voiceiNo reviews yetReviews open together with accounts in a later step
- Our basic checksi1 of 1 passedChecked from public information; code not scanned yet
- UsageiNot measured yet★ –
What you can do with it
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
- Connection: Runs in the cloud
- Transport: Streamable HTTP
- Category: Online shops & payments
Install
Pick the AI app you use, then copy the settings.
Before you install
- Basic checks: 1 of 1 passed
- Runs on the maker’s server: what you ask it goes through their server.
- The registry lists no key to fill in.
You need
- Runs in the cloudNothing to install; it connects over the internet
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Works in Claude on the web, desktop and mobile:
- Open Settings → Connectors
- Press Add custom connector
- Paste the address below and press Add
- If it asks you to sign in, sign in with the maker
https://magicmarkets.com/mcpRun this in your terminal
claude mcp add --transport http magicmarkets https://magicmarkets.com/mcpOr copy the settings yourself
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"magicmarkets": {
"url": "https://magicmarkets.com/mcp"
}
}
}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.
Or copy the settings yourself
Paste into .vscode/mcp.json in your project
{
"servers": {
"magicmarkets": {
"type": "http",
"url": "https://magicmarkets.com/mcp"
}
}
}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.
ChatGPT connects only to servers on the internet:
- Open ChatGPT on the web → Settings → Connectors (Apps)
- Press Create or Add (some plans need Developer mode under Advanced first)
- Paste the address below, give it a name and save
- If it asks you to sign in, sign in with the maker
https://magicmarkets.com/mcpMenu names can differ slightly by plan and over time.
Your choice stays on this device in a cookie; no account needed.
These settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
What it can do
We have not read this server’s tool list yet; we check endpoints in rotation.
Basic checksi
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 7, 2026
- ✓ Pass
Maker matches the repo
The registry name was verified against the domain magicmarkets.com (the registry checks domain ownership)
- … Not checked yet
Still maintained
We have not read this repo from GitHub yet
- … Not checked yet
Has a licence
We have not read this repo from GitHub yet
- … Not checked yet
Endpoint responds
Not checked yet; we check endpoints in rotation
- … Not checked yet
Sign-in with OAuth
Not checked yet; we check endpoints in rotation
- … Not checked yet
No hidden instructions in tool descriptions
Not checked yet; we read the tool list when we check the endpoint
Compared with others in Online shops & paymentsi
- More stars than 0% of the other 1748 servers in this category
- Published to the registry more recently than 52% of the other 1748 servers in this category
- Basic checks equal to or better than 100% of the other 1748 servers in this category
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
Common questions
Is MagicMarkets safe?
It passed 1 of 1 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.
What keys or codes does it need?
The registry does not list a required key, though some servers ask you to sign in on first use.
Does it run on my computer or in the cloud?
It runs in the maker’s cloud. Connect over the internet with nothing to install, but what you send passes through the maker’s servers.
Is it still maintained?
The GitHub repo last changed –, and the latest version (1.0.0) reached the registry 30 days ago.
Which apps can use it?
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. It connects by URL, so apps that accept remote MCP servers work too, such as ChatGPT in developer mode.
What can I use instead?
In the same category: Spree Commerce: open-source B2B and marketplace ecommerce, Stripe MCP, MCP Cn Commerce
Alternatives
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
Stripe MCP
Stripe’s official server lets AI view and manage customers, products, payments and invoices. Connect to Stripe’s cloud and sign in with OAuth.
MCP Cn Commerce
8 read-only MCP platform entries; support is operation-specific; merchant live acceptance pending
README from the maker
Open the README
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.
magicmarkets-cli
A command-line interface for the Magic Markets v2 API — stream live sports prices, quote selections, place and manage orders, and inspect your position. The same API is also available as MCP tools: the easiest path is the hosted, OAuth-authenticated endpoint at https://magicmarkets.com/mcp — no install required. This binary also serves the same tools locally, over stdio (a client launches magicmarkets mcp as a subprocess) or the streamable HTTP transport on localhost.
Single static binary, authenticated with one API key. No request signing, no private keys.
magicmarkets markets --sport fb # find events with live prices
magicmarkets offers fb 2026-06-15,1001,2002 # list priced bet types magicmarkets betslip create fb 2026-06-15,1001,2002 for,h --wait 5s magicmarkets order place --betslip bs-123 --price 2.10 --stake 50
- [Setup](#setup) — install, authenticate, first commands
- [Using it](#using-it) — the bet flow, command reference, MCP, prices, errors
- [Development](#development) — layout, code generation, conventions, contributing
Setup
1. Install
From a clone:
git clone https://github.com/magicmarkets/magicmarkets-cli
cd magicmarkets-cli make install # installs magicmarkets into your Go bin directory
make where prints exactly where that landed. If magicmarkets is not found afterwards, that directory is not on your PATH:
export PATH="$PATH:$(go env GOPATH)/bin" # add to ~/.zshrc or ~/.bashrc
Prefer not to install? make build produces ./build/magicmarkets and leaves your PATH alone.
go install directly
Note the /cmd/magicmarkets path — installing the module root would build a binary called magicmarkets-cli:
go install ./cmd/magicmarkets
The Go module path is magicmarkets-cli, not a GitHub URL, so go install github.com/…/magicmarkets-cli@latest will not work. Cloning and make install is the supported path.
2. Add your API key
Create a key at magicmarkets.com under Settings → API. It is shown once at creation, so store it immediately.
Put it in ~/.magicmarkets/.env so it works from any directory:
mkdir -p ~/.magicmarkets
echo 'MAGICMARKETS_API_KEY=your-key-here' > ~/.magicmarkets/.env chmod 600 ~/.magicmarkets/.env
An env var or a project-local .env works too — cp env.example .env and fill it in.
3. Verify
$ magicmarkets status
version v1.0.0 api url https://magicmarkets.com/v2 ws url wss://magicmarkets.com/v2/stream lang en api key ***********1234 env files [/Users/you/.magicmarkets/.env] authenticated yes
Always check this before opening a stream — the WebSocket rejects a bad key at the handshake without a useful error.
That's the whole setup. Everything below is optional.
Try it
magicmarkets balance # money position
magicmarkets xrates # exchange rates to USDT magicmarkets markets --sport fb --limit 5 # events that currently have prices magicmarkets offers fb --depth 2 # priced bet types on one event magicmarkets orders --open # your open orders magicmarkets ticks 2.345 # where a price lands on the tick schedule magicmarkets api endpoints # every endpoint (no key, no network)
Add --json to any command to pipe it into jq.
Configuration
Resolved in this order, first match winning:
| Priority | Source |
|---|---|
| 1 | Real environment variables |
| 2 | ./.env |
| 3 | ~/.magicmarkets/.env |
| 4 | ~/.env |
| 5 | Built-in defaults |
| Variable | Default | Purpose |
|---|---|---|
MAGICMARKETS_API_KEY | — | API key (X-Api-Key) for the CLI and stdio MCP. HTTP MCP takes the key per request instead |
MAGICMARKETS_OAUTH_ISSUER | https://magicmarkets.com/api/auth | Upstream AS that mcp --http proxies /authorize and /token to, and that POST /oauth2/firebase-token is resolved against for a Bearer credential — see Authentication |
MAGICMARKETS_SESSION_GROUP_ID | — | Environment-specific id from Magic Markets, used to build the session value an OAuth Bearer credential resolves to. No safe default — required wherever a Bearer credential is expected |
MAGICMARKETS_FIREBASE_WEB_API_KEY | — | Firebase Web API key for the Magic Markets Firebase project, used to exchange the Firebase custom token from /oauth2/firebase-token for a real Firebase ID token — see Authentication. No safe default — required wherever a Bearer credential is expected |
MAGICMARKETS_OAUTH_CLIENT_ID | — | Pre-registered client allowlisting *this host's own* /mcp/callback |
MAGICMARKETS_OAUTH_PROXY_SECRET | — | Seals OAuth proxy state; every replica must share it |
MAGICMARKETS_MCP_PUBLIC_URL | — | Public base of mcp --http (this host is the MCP Authorization Server) |
MAGICMARKETS_API_URL | https://magicmarkets.com/v2 | REST base, including /v2 |
MAGICMARKETS_BASIC_AUTH | — | Base64 user:pass sent as an additional Authorization: Basic header on every /v2/* REST call — the token for an infra-level wall some non-production environments put in front of the v2 API. Production has no such wall, so this is unset there. Never sent to /oauth2/firebase-token, Firebase's signInWithCustomToken, or the WebSocket stream |
MAGICMARKETS_WS_URL | derived from MAGICMARKETS_API_URL | Stream endpoint |
MAGICMARKETS_LANG | en | Event name language: en, ko, zh-hans |
MAGICMARKETS_TIMEOUT | 30s | Per-request timeout |
MAGICMARKETS_ALLOW_TRADING | unset (off) | Lets magicmarkets mcp place bets. No effect on the CLI. |
Global flags: --json, --verbose/-v, --api-key, --api-url, --ws-url.
--api-url re-derives the stream endpoint from it (matching MAGICMARKETS_WS_URL's own derivation), unless MAGICMARKETS_WS_URL or --ws-url pins it explicitly — so --api-url https://staging... doesn't leave stream reading production prices while every other command reaches staging.
Using it
The two-step bet flow
Placing a bet always takes two steps:
- A betslip registers interest in one selection and receives a live quote. It costs nothing and commits nothing.
- An order commits a stake against that quote.
Betslips are short-lived and carry no price when created — the quote arrives asynchronously, over the WebSocket as a pmm message or by polling. Hence --wait:
# 1. find an event that has prices
$ magicmarkets markets --sport fb --limit 5 SPORT EVENT ID EVENT COMPETITION STATUS START
fb 2026-06-15,1001,2002 Arsenal v Chelsea England Premier League pre_event 2026-06-15 16:00:00
2. read a bet_type straight off the feed
$ magicmarkets offers fb 2026-06-15,1001,2002 --depth 2 BET TYPE MARKET IR PRICES (stake @ price) TOTAL
for,h 1x2 - 150.00@2.10 80.00@2.08 230.00 for,ah,h,-4 ah - 200.00@1.95 120.00@1.94 320.00
3. quote it, waiting for the price to land
$ magicmarkets betslip create fb 2026-06-15,1001,2002 for,h --wait 5s betslip id bs-abc123 bet type for,h description Home expires 2026-06-15 15:42:10 (28s) total available 230.00 USDT
Prices: PRICE MIN MAX
2.10 5.00 150.00 2.08 - 80.00
4. commit a stake (asks for confirmation)
$ magicmarkets order place --betslip bs-abc123 --price 2.10 --stake 50
Never construct a `bet_type` by hand. Copy it verbatim from magicmarkets offers or the stream — it encodes the market, handicap, outcome and direction in one string.
Command reference
Account
| Command | Purpose |
|---|---|
magicmarkets status | Show config and verify the key |
magicmarkets balance | Balance, open stake, smart credit, available |
magicmarkets xrates | Exchange rates to USDT |
magicmarkets position | Aggregate P&L, with --grid for the payoff matrix |
Discovery
| Command | Purpose |
|---|---|
magicmarkets markets | Events that currently have prices |
magicmarkets offers ... | Priced bet types on one or more events |
magicmarkets stream | Tail the live price and account feed |
markets and offers are plain REST calls (GET /v2/events/, GET /v2/offers/). Sport, competition, in-play status, start window, market type, bet type and minimum liquidity are filtered by the API; --search is matched locally. REST offers can trail the live market by a few seconds — use stream --register when every tick matters.
magicmarkets markets --sport fb,tennis --limit 20
magicmarkets markets --sport fb --from 2026-06-15 --to 2026-06-16 magicmarkets markets --search arsenal magicmarkets markets --in-play magicmarkets offers fb 2026-06-15,1001,2002 --market ah --depth 3 magicmarkets offers fb 2026-06-15,1001,2002 2026-06-15,1003,2004 --min-liquidity 500 magicmarkets stream --register fb:2026-06-15,1001,2002 magicmarkets stream --type order,bet # only order activity
Trading
| Command | Purpose |
|---|---|
magicmarkets betslip create [sport] [event] [bet-type] | Quote a selection |
magicmarkets betslip get | Show a betslip and its prices |
magicmarkets betslip list | Open betslip IDs (--expand for full detail) |
magicmarkets betslip refresh | Extend expiry |
magicmarkets betslip close | Close a betslip you no longer need |
magicmarkets order place | Place an order against a betslip |
magicmarkets orders / magicmarkets order list | List orders |
magicmarkets order get | Show one order and its bets |
magicmarkets order tracked | Look an order up by idempotency key |
magicmarkets order updates | Orders changed in a time window |
magicmarkets order close | Cancel one order |
magicmarkets order close-many ... | Cancel up to 500 orders |
magicmarkets order close-all | Cancel every open order |
Lay bets and parlays:
# lay (against) a selection
magicmarkets betslip create --lay fb 2026-06-15,1001,2002 for,over,2.5
a 2-leg accumulator
magicmarkets betslip create \ --leg fb:2026-06-15,1001,2002:for,h \ --leg fb:2026-06-16,1003,2004:for,over,2.5 --wait 5s
Risk
| Command | Purpose |
|---|---|
magicmarkets heartbeat run | Create a heartbeat and keep it alive in the foreground |
magicmarkets heartbeat create/list/get/refresh/cancel | Manage heartbeats directly |
A heartbeat is a dead-man's switch: if it is not refreshed before it expires, every open order is closed automatically. Run one alongside an automated strategy so a crash cannot leave orders live.
$ magicmarkets heartbeat run --timeout 60
heartbeat hb-xyz created, expires 2026-06-15 15:43:10; refreshing every 20s press Ctrl-C to cancel it and leave orders open
On Ctrl-C the heartbeat is cancelled cleanly, leaving orders open. If the process dies, the switch fires.
MCP
| Command | Purpose |
|---|---|
magicmarkets mcp | MCP tools over stdio by default, or --http for the streamable HTTP transport on localhost. See MCP |
Reference
| Command | Purpose |
|---|---|
magicmarkets bet-type | Validate a bet type, show its payoff grid |
magicmarkets ticks | Snap a price onto the tick schedule |
magicmarkets api endpoints | List every endpoint |
magicmarkets api show [method] | Endpoint detail: parameters, body, responses |
| magicmarkets api schema [name] | Componen
Only the beginning is shown; read the rest in the repo