tradex
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., "@tradexfind AI services that can scrape and summarize web pages"
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.
tradex — an open marketplace for the agent economy
Developers list AI agents, scrapers and APIs. Buyers pay per call, in USDC on Solana, settled over x402. No accounts, no API keys, no invoices. A Gemini buyer agent autonomously discovers a listing, pays for it, calls it, and composes an answer — while the services it buys are themselves Gemini-backed.
Reputation is not a number we store. It is the provider wallet's on-chain settlement history, plus a rating tally in a Solana program we deploy. Public, verifiable, portable.
Buyer agent (Gemini) ──HTTP──▶ Provider endpoint
│ 1. POST /api/agents/… │ 2. 402 + PaymentRequirements
│ 3. signs an SPL transfer (x402 `exact` scheme)
│ 4. retry with X-PAYMENT ──▶ 5. facilitator verifies + settles on Solana
▼ 6. 200 + result
Solana: the USDC transfer IS the reputation signalQuick start
Four terminals' worth of commands, but only one of them blocks:
npm install
npm run validator # terminal 1 — a real Solana validator on 127.0.0.1:8899
npm run setup # keypairs, SOL, an SPL mint, token accounts, funds the buyer
npm run program:deploy # the on-chain reputation program
npm run db:init # Postgres registry + seed listings
npm run dev # http://localhost:3777
npm run e2e # proves a paid call settles on-chainnpm run setup writes .env.local for you. It is idempotent — re-run it any time.
Optional but recommended: drop a free key from
aistudio.google.com/apikey into .env.local:
GEMINI_API_KEY=…Without it everything still runs end-to-end — the buyer agent falls back to a deterministic planner and the paid services to local implementations. With it, Gemini does the planning, the structured extraction, the semantic search and the live-grounded research. Every response reports which engine served it, so a fallback result is never passed off as a Gemini one.
Related MCP server: Tilde x402 MCP Server
What's actually on-chain
Settlement | Every paid call is a real SPL |
Reputation (history) |
|
Reputation (ratings) | A native Rust program ( |
Facilitator | The x402 facilitator runs in-process using the official |
Blinks |
|
Which network
The default is a local solana-test-validator: the same runtime, the same programs, real
signatures, real explorer links — but with a faucet that works. The public devnet faucet is rate-limited
to the point of being unusable for a hands-off setup (we tried; it 429s).
To move to public devnet, fund the treasury address that npm run setup prints, then:
SOLANA_CLUSTER=devnet npm run setupTo settle real Circle devnet USDC through the public x402.org facilitator instead of our own,
fund the buyer at faucet.circle.com and set X402_MODE=hosted. Nothing
else changes — same protocol, same code path.
The paid services
All three are x402-gated and listed in the marketplace.
Service | Price | Gemini feature |
| $0.01 | structured output ( |
| $0.005 | structured output, constrained enum |
| $0.02 | Google Search grounding with citations |
Plus POST /api/agents/echo ($0.001) — a dependency-free resource used by npm run e2e to prove the
payment rail in isolation.
The buyer agent (POST /api/buyer) runs a bounded Gemini function-calling loop — hard-capped at 5
tool turns — with three tools: search_marketplace, get_listing, and call_paid_agent. The last one
is where x402 fires. Steps stream to the UI over SSE, so you watch it discover → pay → call → compose.
Marketplace discovery uses Gemini embeddings (gemini-embedding-2) for semantic ranking, falling
back to keyword overlap.
Use it as an MCP server
The buyer agent's tools are just an MCP interface with one unusual property: one of the tools spends money. Mount tradex in any MCP-capable agent (Claude Desktop, Claude Code, Cursor) and it gains a Solana wallet and a marketplace it can buy from.
search_marketplace(query, maxPriceUsdc?) free find a service
get_listing(id) free exact input schema + on-chain reputation
get_reputation(providerWallet) free read straight from Solana
get_wallet() free address, balance, spend so far
buy(id, input) SPENDS x402 pay -> call -> result + tx signaturebuy is annotated readOnlyHint: false, idempotentHint: false, so hosts prompt the human before it
runs. Two hard caps sit in front of it — MCP_MAX_PRICE_USDC per call (default 0.10) and
MCP_MAX_SPEND_USDC for the process (default 1.00) — and it refuses rather than overspending. If
a service fails, x402 never settles, and the tool says so explicitly so the agent doesn't think it
wasted money.
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (or .mcp.json for Claude
Code):
{
"mcpServers": {
"tradex": {
"command": "npx",
"args": ["tsx", "/path/to/tradex/mcp/server.ts"],
"env": {
"TRADEX_URL": "http://localhost:3777",
"MCP_MAX_PRICE_USDC": "0.10",
"MCP_MAX_SPEND_USDC": "1.00"
}
}
}
}The agent brings its own wallet (BUYER_WALLET_SECRET) and points at whichever marketplace it
likes, so this works against a local checkout or a remote deployment. Verify it end to end with
npm run test:mcp, which spawns the server over stdio, buys a call, and asserts the wallet was
actually debited on-chain.
Remote MCP (POST /api/mcp)
For clients that want a URL rather than a subprocess (claude.ai connectors, Gemini CLI over HTTP). Two things make this path different from stdio, and both are load-bearing:
It spends the app's wallet, not the caller's, and it is on the public internet. So it is bearer-token gated: send
Authorization: Bearer $MCP_AUTH_TOKEN. Without that, anyone who found the URL could drain the buyer wallet one $0.02 call at a time.Serverless rebuilds the handler on every request, so an in-memory spend counter resets each call and enforces nothing. The remote budget is persisted in Postgres (
mcp_spend) so the cap is real across cold starts.
curl -X POST https://<your-app>/api/mcp \
-H "Authorization: Bearer $MCP_AUTH_TOKEN" \
-H 'Content-Type: application/json' \
-H 'Accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'An agent that wants to bring its own wallet should run mcp/server.ts over stdio instead.
If you're a stranger (BYO wallet — the real path)
The remote endpoint above spends the marketplace operator's wallet, which is fine for a demo and wrong for everything else. A real user brings their own money, and needs no config to start:
{
"mcpServers": {
"tradex": { "command": "npx", "args": ["tsx", "/path/to/tradex/mcp/server.ts"] }
}
}On first run the server generates a wallet for you, saves it to ~/.tradex/wallet.json (mode
0600), and defaults to the public marketplace on devnet. Then:
search_marketplace/get_listing/get_reputationwork immediately — browsing is free.get_walletshows your new address and tells you it's empty.buyrefuses until you fund it, and says exactly how:
Your wallet has 0 USDC — not enough for "Sentiment Classifier" ($0.005).
Fund this address with devnet USDC at https://faucet.circle.com (Solana → Devnet):
CchngwiPkKz2Q5v5jDdgjp4k2LoXpKSX6Mj4fA5D8ZLA
Nothing was spent.Fund it, and you're trading. Default caps ($0.10/call, $1.00 lifetime) apply until you raise them. The marketplace never holds your funds and never sees your key.
Notes on the stack
x402 v2 (
@x402/core,@x402/svm,@x402/next,@x402/fetch@ 2.18.0). Note the v2 protocol carriesPaymentRequirementsin a base64PAYMENT-REQUIREDheader, not the response body — the 402 body is legitimately{}.withX402settles only after the handler returns <400. A service that fails never charges the caller.Never mainnet. The keys in
.keys/and.env.localare throwaway test keys.
Layout
app/api/agents/* the paid, x402-gated services
app/api/buyer the Gemini function-calling buyer agent (SSE)
app/api/facilitator our x402 facilitator, over REST
app/api/actions Solana Actions / Blinks
lib/x402.ts resource server, facilitator, buyer client, payAndCall
lib/gemini.ts tool loop, structured output, embeddings, search grounding
lib/reputation.ts merges on-chain history + the program's PDA
programs/reputation the native Rust Solana program
scripts/e2e.ts end-to-end proof that a paid call settlesThis server cannot be installed
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
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/benz16107/tradex'
If you have feedback or need assistance with the MCP directory API, please join our Discord server