GoalCast MCP Server
Click on "Deploy 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., "@GoalCast MCP Servercheck pool status for match m-usa-mex-01"
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.
GoalCast MCP Server
A small, standards-compliant MCP server (using the official
@modelcontextprotocol/sdk, Streamable HTTP transport) that wraps the
PredictionPool CosmWasm contract deployed on Injective testnet. It exposes
exactly two tools:
Tool | What it does |
| Signs and broadcasts |
| Reads the current home/draw/away split for a match |
This is what GoalCast's Next.js app (lib/injective.ts) connects to as a
real MCP client — not a hand-rolled REST bridge.
Setup
cd mcp-server
npm install
cp .env.example .envFill .env:
INJECTIVE_PRIVATE_KEY=<testnet wallet private key, no 0x needed either way>
INJECTIVE_NETWORK=testnet
PREDICTION_POOL_CONTRACT_ADDRESS=inj1... # from DEPLOY.md step 4
PORT=8787Use a dedicated testnet-only wallet here — this key signs every prediction the server submits. In this hackathon MVP the MCP server's wallet is the signer for all predictions (see "Known limitation" below).
Run it:
npm run devYou should see:
GoalCast MCP server listening on http://localhost:8787/mcpRelated MCP server: pmxt-mcp
Connect the Next.js app to it
In the main app's .env.local:
INJECTIVE_MCP_SERVER_URL=http://localhost:8787/mcpRestart npm run dev in the app root. lib/injective.ts will now call the
real tools instead of its simulated fallback.
Test it directly (without the app)
curl -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": { "name": "get_pool_status", "arguments": { "matchId": "m-usa-mex-01" } }
}'Or point the MCP Inspector at
http://localhost:8787/mcp for a UI to browse and call the tools.
Known limitation (worth mentioning in your demo/judging notes)
Right now the MCP server's own wallet signs every prediction — a fan's "vote" is broadcast by the server, not by their own wallet. That's fine for a hackathon MVP (it proves the full MCP → contract → chain path works), but a production version should have the fan sign client-side (e.g. via Keplr) and have the MCP server only build the unsigned tx, or verify a fan-signed payload before relaying it. Worth a sentence in your submission write-up — judges tend to reward projects that name their own known limitations over ones that gloss over them.
This server cannot be deployed
Maintenance
Related MCP Connectors
Live prices, perps, prediction markets and a paper trading desk over one MCP.
Hosted MCP server for live Bittensor chain reads and self-custodial on-chain writes.
Hosted MCP for Kalshi prediction markets: search, odds, order books, settlement rules, and trading.
Prediction-market news, $0.01/query. Register and buy inside this MCP session — free testnet funds.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP (Model Context Protocol) server that gives AI agents structured access to Predict.fun — a prediction market protocol on BNB Chain with $1.5B+ volume and yield-bearing mechanics via Venus Protocol. Indexes data from three subgraphs: orderbook activity, position lifecycle, and yield mechanics.15MIT
- AlicenseCqualityCmaintenanceMCP server that provides a unified prediction market API for multiple venues like Polymarket and Kalshi, allowing AI agents to discover markets, fetch order books, and execute trades through a single interface.32216 npm8MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for querying and optionally trading across prediction markets (Polymarket, Kalshi, Limitless, Manifold) through a unified API.31MIT
- AlicenseAqualityAmaintenanceMCP server for FIFA World Cup 2026 data including fixtures, live scores, odds, and knockout bracket, plus a tool (wc_edge) that autonomously pays for premium data via Injective's x402 protocol.87 npmMIT