Soccerverse MCP
The Soccerverse MCP server: tool catalogue, the public Streamable HTTP endpoint, calling shape and source-backed behaviour.
The Soccerverse MCP server lets an AI assistant, or your own code, look up live game data with ready-made tools: clubs, players, users, markets, fixtures, transfers, votes, shop data and leaderboards. It is read-only and needs no API key. The server address is:
https://mcp.soccerverse.com/mcp
The tools return the same data as the hosted APIs on play.soccerverse.com, which the Overview describes.
Connect an AI client
Use these settings in any MCP client that supports Streamable HTTP servers:
- URL:
https://mcp.soccerverse.com/mcp - Transport: Streamable HTTP
- Authentication: none. There is no API key, token or special header, and the server is read-only.
In Claude Code, add it with:
claude mcp add --transport http soccerverse https://mcp.soccerverse.com/mcp
The server accepts MCP protocol versions 2024-11-05, 2025-03-26 and 2025-06-18. The Mcp-Session-Id that initialize returns is optional, so you can also call tools/list and tools/call directly, as in the next section.
GET https://mcp.soccerverse.com/health returns {"status":"healthy","data_loaded":true} and works as a health check.
Use /mcp. The older /sse path does not work with standard MCP clients.
Try it with curl
tools/list returns every tool with its input schema and is the authoritative list. tools/call runs one tool. No handshake is needed.
# List every tool
curl -sS https://mcp.soccerverse.com/mcp \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}'
# Call one tool: the details of club 50
curl -sS https://mcp.soccerverse.com/mcp \
-H 'Content-Type: application/json' \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_club_details",
"arguments": {"club_id": 50}
}
}'
The reply is a JSON-RPC envelope. The tool's result is a JSON string in result.content[0].text, so parse it a second time. A shortened example (the real text has many more fields):
{
"jsonrpc": "2.0",
"id": 1,
"result": {
"content": [
{
"type": "text",
"text": "{\"club_id\":50,\"balance\":\"37989431.56 SVC\",\"form\":\"WWWLDD\"}"
}
]
}
}
Limits and errors
- Rate limit: about 5 requests per second, with bursts of up to about 30. Over the limit you get HTTP
429, aRetry-After: 1header and{"error":"Rate limit exceeded"}. Wait a second and try again. These numbers are measured, not promised, and may change. - Batches: one
POST /mcpcan carry up to 20 JSON-RPC messages in an array. More gets HTTP413. - Browsers: the server sends no CORS headers, so JavaScript on another website cannot call it. Use an MCP client, or call it from your own server.
- A bad call can fail in two ways, so check for both:
- A normal result whose text is
{"error":"...","success":false}.isErroris not set, so look forsuccess: false. Examples: an unknown tool,get_fixturewithoutfixture_id, andget_club_detailsfor a club that does not exist. - A JSON-RPC error with code
-32603and messageTool execution error. The details are indata. Examples:404: No job posting found for club ID 50,400: At least one of country_id, comp_id, or club_id must be provided, and422: ...for a value the API behind the tool rejects.
- A normal result whose text is
- Some bad calls give no error at all. Required parameters are not always enforced:
get_squadwithoutclub_idreturns 50 unrelated players, and an id that does not exist can return an empty list ornull. A few parameters thattools/listshows are ignored, and the tables below mark the ones we know about. Always send every parameter a tool needs, and check that the reply is about what you asked for. - If a script gets
403 error code: 1010, send a normalUser-Agentheader. Python's defaulturllibone is blocked.curlis not.
Money values
Raw REST and GSP money values are integers in units of 1/10,000 SVC. Divide by 10,000: a raw 123456789 is 12,345.6789 SVC.
MCP tools convert most money values for you. Read each one like this:
- Already in SVC. Use the
_svcfield when there is one, such asprice_svc. Text that ends inSVC, such as"37989431.56 SVC", is also already converted. Do not divide either. A_shortfield such as"38.0M SVC"is shortened for display and loses digits, so do not calculate with it. For example,get_share_orders_dumpgives one order'spriceas157600, itsprice_svcas15.76and itsprice_shortas"15 SVC": useprice_svc. - Raw, so divide by 10,000. The fields listed below have no converted twin.
- Plain numbers that are already in SVC. The money totals in
get_market_data, the values inget_player_payoutsandsvc_per_influence_per_seasoninget_club_earnings_light. Do not divide them.
The raw fields for step 2:
get_share_balances_detailed:club_balance,player_value,total_spent,sale_proceeds,remaining_cost_basis,realised_pl,earnings_7d,earnings_30dand the payout fields such aslifetime_payouts,season_payoutsandlast_week_payouts. Thewagesandlast_pricefields in the same rows are already converted.get_club_balance_sheet_weeks:dilution_income. The other columns are already converted.get_player_details,search_playersandget_squad:volume_1_day,volume_7_day,last_7daysandlast_7days_price.get_trading_graph:volumeandweighted_average_price.
Shop prices and referral spend (USDC) are scaled by 1,000,000 instead of 10,000. Text such as "$47" comes with a _raw field (usd_spent_raw, price_per_pack_raw) that holds the raw amount, so 47000000 is $47. get_referrals_leaderboard_all has only a raw usd_spent: divide it by 1,000,000. Plain numbers with usdc in the name, such as total_earnings_usdc, are already dollars.
Money filters that you send do not all use the same unit. These take raw units (SVC multiplied by 10,000): min_bid and max_bid on get_transfer_market, min_wage and max_wage on search_players, and wages_min and wages_max on get_player_details. The min_balance and max_balance filters on search_clubs take plain SVC.
Notes
- Country ids are 3-letter codes such as
ENG,ESPandDEU, never numeric codes. - The Datacentre REST API numbers divisions from 0 (0 is the top division). MCP tools use 1 for the top division.
- MCP replies often add names (
club_name,player_name,league_name) and readable dates next to ids and unix timestamps. - Fixture timestamps usually use
date(unix seconds), nottimestamp. - Always set
share_typeonget_share_balances(club,playerorall). Onget_share_balances_detailedandget_portfolio_issuesit is optional and onlycluborplayerwork, butget_share_balances_detailedrequires it when you usesearchorissue.get_share_balance_by_user_clubhas noshare_type. - The REST endpoints
/messages,/transfers/countsand/club_balance_sheet/weeksrequireseason_id(they answer422without it), but the matching MCP tools default to the current season. Useget_seasonsto list valid season ids. To find the current season, readseasonIdfrom/v1/bootstrap.get_messagesneeds at least one ofcountry_id,comp_idorclub_id.
Tool domains
Each table lists a tool and its key parameters. Most tables also have an Upstream column that says where the same data can be read directly. The name lookups have none, because they search the datapack. tools/list has the full schema of every tool. The Overview explains how to call the hosted APIs.
- REST: a path on the Datacentre REST API, added to
https://play.soccerverse.com/datacentre. Most apps start here. - Unified API: a
/v1path, added tohttps://play.soccerverse.com. These are ready-made, page-sized reads. - GSP: a read method of the game-state processor, sent as JSON-RPC with
POST https://play.soccerverse.com/v1/gsp(see GSP JSON-RPC). Use it only when the REST API has no equivalent. A method marked "raw only" is not served there: use the MCP tool, or run your own node. A GSP call, on/v1/gspor on your own node, differs from the MCP tool in four ways:shareis an object,{"club": 50}or{"player": 1100}. Theclub_50string exists only in MCP.- Money values are raw integers: divide by 10,000.
- Pass every parameter. MCP fills in defaults such as the current season and GSP does not:
get_club_schedulewithoutseason_idis an error. To find the current season, readseasonIdfrom/v1/bootstrap. - Replies arrive in the state envelope, with the payload in
result.data.
- GraphQL: a query on one of the public subgraphs. "Democrit GraphQL" is the Democrit/SVC subgraph, and "Shop GraphQL" is the shop, referrals and pricing subgraph.
- Composite: the tool combines several calls into one.
Name resolution
Look up ids from names. Names are matched against the public datapack (see Datapack and assets).
| Tool | Params | Notes |
|---|---|---|
resolve_player_name | name, limit | Player name to possible player ids. |
resolve_club_name | name, limit | Use full club names for best results. |
resolve_league_name | name, country_id, limit | League ids are season-specific. |
resolve_competition_name | name, limit | Cup/competition lookup. |
resolve_stadium_name | name, limit | Stadium lookup. |
Example MCP call:
{
"name": "resolve_club_name",
"arguments": { "name": "Manchester United", "limit": 5 }
}
Response notes: ranked matches with ids and confidence scores. Treat fuzzy matches as candidates, not proof. The game uses its own names: real-world "Manchester United" resolves to Manchester Red (id 33, confidence 0.84), leagues are named like "ENG Division 1", and real-world names such as "Premier League" return an empty list.
Clubs
Club details, lists, job postings, squads, schedules, tactics, fixtures, league membership, history, balance sheets, messages, loans, transfers and tactical analysis.
| Tool | Key params | Upstream | Notes |
|---|---|---|---|
search_clubs | club_id, club_ids, country_id, min_balance, max_balance, sort_by, sort_order, page | REST /clubs | Search by id/filters; resolve name first. min_balance and max_balance are plain SVC. |
get_club_overview | club_id | Composite | One call with the essentials: details, squad, shareholders, trades, proposals, fixtures, news, league table. |
get_club_details | club_id | REST /clubs/detailed | Detailed club record. |
get_club_job | club_id | REST /clubs/{club_id}/job | Job posting. Returns a 404 error if the club has none. |
get_jobs_board | section, limit | Unified API /v1/jobs-board | Clubs with vacancies and unmanaged clubs. section is posted, available or both. |
get_club_balance_sheet_weeks | club_id, weeks, season_id | REST /club_balance_sheet/weeks | Financial history by week. |
get_club_schedule | club_id, season_id | GSP get_club_schedule | Season fixture list. |
get_clubs_next_fixture | club_id | GSP get_clubs_next_fixture (raw only) | Next scheduled fixture. |
get_clubs_last_fixture | club_id | GSP get_clubs_last_fixture (raw only) | Most recent played fixture. |
get_club_tactics | club_id | GSP get_club_tactics | Formation, play style and team sheet. A club that keeps its tactics hidden returns only {"commitment": "<hash>"}. |
get_squad | club_id | GSP get_squad | Squad with ratings, loans, availability. |
get_clubs_league | club_id | GSP get_clubs_league (raw only) | Club's league information. |
get_manager_history_by_club | club_id | GSP get_manager_history_by_club | Club manager history. |
get_comp_history_by_club | club_id | GSP get_comp_history_by_club | Competition history. |
get_club_transfer_history | club_id | REST /player/transfer_history | Club transfer history. |
get_clubs_transfer_auctions | club_id | GSP get_clubs_transfer_auctions | Active auctions for players being sold. |
get_clubs_transfer_bids | club_id | GSP get_clubs_transfer_bids | Auctions this club has bid on. |
get_transfer_counts | club_id, season_id | REST /transfers/counts | In/out transfer counts. |
get_loan_history | season_id, club_id | REST /players/loan_history | Loan moves. There is no paging: per_page and page are ignored and every matching move comes back, so pass club_id to keep it short. |
get_loan_offers | club_id or player_id | GSP get_clubs_player_loan_offers (by club) / get_player_loan_offer (by player, raw only) | Active loan offers for a club's players, or the offer for one player. |
get_player_field_time | club_id or player_id | REST /player_field_time/{club_id} | League minutes and field-time share this season. For one player, REST has /player_field_time/by-player/{player_id}. |
get_messages | season_id, country_id, comp_id, club_id, days, per_page | REST /messages | News/events, newest first. Needs at least one of country_id, comp_id or club_id. You get at most 100 messages (per_page sets how many, default 50) and page has no effect. To see more, ask per comp_id or club_id, or call REST /messages with a larger limit. |
analyse_next_match | club_id, optional tactical overrides | Composite | Tactical recommendation. |
analyse_matchup | home_club_id, away_club_id, optional for_club_id, days_until_match, opponent overrides | Composite | Tactical briefing for a hypothetical match between any two clubs. days_until_match is 0 to 60 (default 0). |
analyse_club | club_id | Composite | Club state analysis. |
Example MCP tool call:
{
"name": "get_club_details",
"arguments": { "club_id": 50 }
}
Response notes: REST club records include balance, fans_current, stadium_size_current, manager_name, default_formation, transfers_in/out, country/division fields, and share/market values. GSP fixture rows include fixture_id, turn_id, date, home/away clubs, goals, comp metadata, and played.
Players
Search players and get details, transfer, loan, morale and history data, competition statistics, squad membership, and player ROI analytics.
| Tool | Key params | Upstream | Notes |
|---|---|---|---|
search_players | player_id, player_ids, club_id, country_id, rating/age/wage filters, page, per_page | REST /players | All filters are optional. Results are paged. min_wage and max_wage use raw units. |
get_player_overview | player_id | Composite | One call with the essentials: details, history, stats, field time, shareholders, trades, proposals, club. |
get_player_details | player_id, player_ids, filters | REST /players/detailed | Detailed player record. wages_min and wages_max use raw units. |
get_player_payouts | player_id | GSP get_player_payouts (raw only) | Payout structure: agent wage, assists, goals, lineup, regular. |
get_agents_players | username | GSP get_agents_players | Players a user represents as agent, with desired contract and fair wage. The GSP method takes agent_name. |
get_player_transfer_history | player_id | REST /player/transfer_history | Player moves. |
get_league_player_data | player_id | GSP get_comp_player_data | League stats: the leagues list of that reply. |
get_cup_player_data | player_id | GSP get_comp_player_data | Cup stats: the cups list of that reply. |
get_comp_player_data | player_id | GSP get_comp_player_data | League and cup stats combined. |
get_morale_history | player_id, limit | REST /players/morale_history/{player_id} | Morale changes. |
get_player_history | player_id | REST /player/history/{player_id} | Loans, ratings, injuries, transfers. |
get_transfer_auction_details | player_id | GSP get_transfer_auction_details | Active auction details. |
get_player_earnings | threshold, filters, sorting, pagination | REST /dumps/player_earnings | ROI/payback analysis. threshold (payback seasons) is required. |
Example MCP tool call:
{
"name": "get_player_details",
"arguments": { "player_id": 1100 }
}
Response notes: get_comp_player_data returns {"leagues": [...], "cups": [...]}, one row per competition and season. Player records include availability (fitness, injured, banned), ratings (rating, rating_gk, rating_tackling, rating_passing, rating_shooting and more), position fields, wages, contract, morale, and club and agent details. Some money and volume numbers are raw, see Money values.
Users and managers
Inspect user profiles, trading stats, activity, balance sheets, achievements, rankings, referrals, portfolios, manager history and manager competition history.
| Tool | Key params | Upstream | Notes |
|---|---|---|---|
get_user_details | username, user_id | REST /users/detailed | One name or a list of names. user_id is ignored, and with no username you get the first 20 users of the game. |
get_user_activity | name | REST /user_activity | A user's activity points and rank (one summary row). page has no effect. |
get_user_balance_sheet | name, start_date, end_date, page | REST /user_balance_sheet | Transactions, newest first, 50 per page. Dates are YYYY-MM-DD. Send both dates or neither: one alone is ignored. With both, every transaction in the range comes back at once and page has no effect. |
get_user_balance_sheet_earnings | name | REST /user_balance_sheet/earnings | Earnings summary. |
get_user_balance_sheet_weeks | name, weeks | REST /user_balance_sheet/weeks | Weekly balance. |
get_achievements | username | REST /achievements | Achievement/profile completion. |
get_best_managers | name, sort_by, sort_order, pagination | REST /best_managers | Tactician/veteran rankings. |
get_rich_list | limit | REST /rich_list | Wealth leaderboard. |
get_comp_history_by_manager | name | GSP get_comp_history_by_manager (raw only) | Competition history. |
get_manager_history_by_manager | name | GSP get_manager_history_by_manager | Career history. |
get_referrals_leaderboard_timerange | none | REST /leaderboards/referrals/windowed (window is 30d or season) | Currently returns an error. Use get_referrals_leaderboard_all, or call the REST endpoint. |
get_referrals_leaderboard_all | none | REST /leaderboards/referrals/all | All-time referrals. usd_spent is raw USDC (divide by 1,000,000). |
get_portfolio_summary | username | REST /share_balances/summary | Balance, net worth, holdings and 7/30-day earnings. |
get_portfolio_issues | username, share_type (club or player) | REST /share_balances/issue_counts | Counts of no, inactive or locked manager, bad form, unhappy players and low balance. |
get_share_balances_detailed | username, share_type, has_manager, has_agent, issue, search, sorting, pagination | REST /share_balances/detailed | Holdings with management status. |
get_share_transactions | username, limit, offset | REST /share/transactions | Trades and user-to-user share transfers, newest first. |
Example MCP tool call:
{
"name": "get_user_details",
"arguments": { "username": "snailbrain" }
}
Response notes: user detail records include name, balance, last-active timestamps, managed club_id, trade volume fields, and milestone trade dates.
Market and shares
Inspect world market data, share balances, trading graphs and history, orderbooks, user orders, top traders, SVC trades and pre-aggregated order dumps.
| Tool | Key params | Upstream | Notes |
|---|---|---|---|
get_market_data | none | REST /market | Game-wide market/population/activity stats. |
get_svc_price | none | REST /svc_price | SVC to USDC exchange rate. |
get_trading_graph | club_id or player_id, time_range | REST /trading_graph | time_range is required: 1d, 7d, 30d, 90d, 6m or 1y. |
get_share_trade_history | name, club_id, player_id, sort_by, page | REST /share_trade_history | At least one of name, club_id or player_id. Newest first. sort_by (such as price) re-sorts from high to low: order has no effect. |
get_all_share_trades | per_page | REST /share_trade_history/all | Latest trades across the whole market. |
get_share_balances | share_type, plus club_id/player_id/name/aggregation filters | REST /share_balances | Always set share_type. |
get_share_balance_by_user_club | username, club_id (both required) | REST /share_balance_by_user_club | How many shares (influence) a user holds in a club. |
get_share_owners | share | GSP get_share_owners (raw only) | Full owner list of a share. Use club_50 or player_1100 in MCP. |
get_user_share_orders | name | GSP get_user_share_orders | Active bid/ask orders by user. |
get_share_orderbook | share | GSP get_share_orderbook | Use club_50 or player_1100 in MCP. |
get_top_traders | none | REST /users/detailed sorted by volume | Top active influence traders. |
get_svc_trades_summary | none | Democrit GraphQL | Recent SVC exchange trades. |
get_share_orders_dump | share_type, share_ids | REST /dumps/share_orders/clubs or /players | Bulk orderbook dump, refreshed about every 2 min. |
Example MCP tool call:
{
"name": "get_share_balances",
"arguments": { "club_id": 50, "share_type": "club", "page": 1 }
}
Response notes:
- Share balances identify the holder by
name(a username). There is no user-id field. Rows includeshare_type,share_id,num,last_price, country/league/division, and manager and agent names where available. - The raw REST dumps return
{meta, data}. For/dumps/share_orders/...,datais keyed by share id and each row is[order_id, name, is_ask, price, num].meta.fieldsnames the columns. get_share_orders_dumpreshapes that into{share_type, updated, requested, orderbooks_returned, no_orderbook, orderbooks}. Each orderbook hasbidsandaskslists of{order_id, name, is_ask, price, num, price_svc, price_short}.
Fixtures, competitions, leagues, and reference data
Discover seasons, countries, leagues, league tables, cups, associations, fixtures, match events and commentary, match player data, and recent competitions.
| Tool | Key params | Upstream | Notes |
|---|---|---|---|
get_countries | page | REST /countries | Country list. |
get_seasons | none | GSP get_seasons | Valid season ids and dates. |
get_leagues | country_id, division, page | REST /leagues | League ids are season-specific. |
get_league_tables | country_id, division, season_id | REST /league_tables | country_id + division required. division 1 is the top division. The whole table comes back at once, so page has no effect. |
get_fixture | fixture_id | GSP get_fixture | Fixture details. |
get_turn_fixtures | turn_id | GSP get_turn_fixtures | All fixtures for a turn. |
get_match_subs | fixture_id | GSP get_match_subs (raw only) | Substitutions. |
get_fixture_player_data | fixture_id | REST /fixture_history/players/{fixture_id} | Player stats for fixture. |
get_match_events | fixture_id | REST /commentary/match_events/{fixture_id} | Events. |
get_match_commentary | fixture_id | REST /commentary/match_commentary/{fixture_id} | Commentary. |
get_all_turns | comp_id | GSP get_all_turns | Turns for a competition. |
get_cups | season_id | GSP get_cups | Cups for a season. |
get_cups_by_country | country_id, season_id | GSP get_cups_by_country (raw only) | Country cups. |
get_cup | cup_id | GSP get_cup (raw only) | Cup detail. |
get_league_top_players | league_id | GSP get_league_top_players | Top league players. |
get_associations | association_type | GSP get_associations | national/continental/world. |
get_association | country_id | GSP get_association (raw only) | Association detail. |
get_association_qualifiers | association_id | GSP get_association_qualifiers (raw only) | Qualifier info. |
get_recent_competitions | days | Composite | Recent competitions. |
get_game_world_history | season_id, country_id, comp_type, comp_id, max_position | GSP get_game_world_history (raw only) | Final placements (honours) of a completed season. season_id is required. |
Example MCP tool call:
{
"name": "get_league_tables",
"arguments": { "country_id": "ENG", "division": 1 }
}
Response notes: league-table rows include club_id, league_id, manager_name, country_id, division, played, won, drawn, lost, goals_for, goals_against, pts, form, season_id, stadium_size and fanbase.
Transfers
Inspect the transfer market, active transfer auctions, club and player transfer history, auction details, transfer counts, and recent completed moves.
| Tool | Key params | Upstream | Notes |
|---|---|---|---|
get_transfer_market | positions, min_rating, max_rating, min_age, max_age, min_bid, max_bid, search, sort, order, page, and more filters | Unified API /v1/transfer-market | Sortable, filterable list of every player listed for auction. min_bid and max_bid are raw units (SVC multiplied by 10,000). |
get_top_transfer_auctions | num (default 20) | GSP get_top_transfer_auctions | Active auctions, highest-rated players first (sort does not currently change the order). To sort by bid or end time, use get_transfer_market. |
get_clubs_transfer_auctions | club_id | GSP get_clubs_transfer_auctions | Active auctions for club's players. |
get_clubs_transfer_bids | club_id | GSP get_clubs_transfer_bids | Auctions this club bid on. |
get_transfer_auction_details | player_id | GSP get_transfer_auction_details | Specific active auction. |
get_all_transfer_history | season_id (optional) | REST /player/transfer_history | The 50 most recent completed transfers of a season (default: the current one). |
get_club_transfer_history | club_id | REST /player/transfer_history | Club transfer history. |
get_player_transfer_history | player_id | REST /player/transfer_history | Player transfer history. |
get_transfer_counts | club_id, season_id | REST /transfers/counts | In/out transfer counts. season_id defaults to the current season. |
Example MCP tool call:
{
"name": "get_top_transfer_auctions",
"arguments": { "num": 5 }
}
Response notes: auction rows include transfer_auction_id, player_id, club_id, minimum_bid, high_bid, rating, position, age/date fields, and status flags. get_transfer_market returns {items, page, perPage, total, totalPages, totalListed, bidRange}. get_all_transfer_history returns {transfers, metadata}, and metadata.total_in_season counts every completed transfer of the season.
Votes
Inspect votes and proposals globally, by user, or by club or player share.
| Tool | Key params | Upstream | Notes |
|---|---|---|---|
get_all_votes | state (optional) | GSP get_all_votes | All open votes (voting and upcoming): a large response. state narrows it to voting or upcoming. finished always returns an empty list: for ended votes use get_proposals with status: "historical" (last 7 days), or get_votes_for_club_or_player (the full history of one club or player). |
get_votes_for_shareholder | name | GSP get_votes_for_shareholder (raw only) | Votes a user can participate in, including upcoming ones. |
get_votes_for_club_or_player | share | GSP get_share_proposals | MCP share string: club_50 or player_1100. |
get_user_active_proposals | username | REST /share_balances/active_proposals | Open votes on shares a user holds, with time remaining and the current leader. |
get_proposals | status, proposal_type, share_type, club_id, player_id, username, days_back, pagination | REST /proposals/active and /proposals/historical | Governance proposals with vote counts and outcomes. status is active or historical. historical covers only the last 7 days (days_back is 1 to 7). |
Example MCP tool call:
{
"name": "get_user_active_proposals",
"arguments": { "username": "snailbrain" }
}
Response notes: get_all_votes and get_votes_for_shareholder rows include share (with share_name), type, state, start_time and end_time, plus readable date fields. get_votes_for_club_or_player rows have no share. They carry proposal_id, type, state, start_time, end_time, options with vote counts, and total_votes. get_user_active_proposals returns {items, total, note}.
Shop
Inspect Soccerverse pack purchases and club sale and tranche status.
| Tool | Key params | Upstream | Notes |
|---|---|---|---|
get_shop_purchases | receiver, club_id, limit | Shop GraphQL packsBoughts | Pack purchases. Give receiver or club_id, or both. |
get_sale_clubs | club_id, country_id, tier, active_only, limit, page | REST /shop/clubs | Pack price, tranche progress, tier and pack contents. club_id finds packs that contain that club's shares. |
get_club_packs | country, division, max_payback_seasons, sort, limit | REST dump /dumps/club_packs | Pack deals with payback. |
Example MCP tool call:
{
"name": "get_sale_clubs",
"arguments": { "club_id": 50, "limit": 5 }
}
Response notes:
get_shop_purchasesreturns{purchases, count, note}. Each purchase hasreceiver,num_packs,usd_spent(a string such as"$47", raw value inusd_spent_raw),club_id,club_name,dateandtimestamp, and sometimestier.club_shares_minted_totalandclub_tranche_remainingare the club's current state, repeated on every row. They are not per-purchase figures.get_sale_clubsreturns{sale_clubs, count, total, page}. Each entry hasclub_id,country_id,tier,status,tranche,tranche_remaining,price_per_pack(such as"$49.50", raw value inprice_per_pack_raw),max_packs,club_nameandpack_contents, a list of{club_id, shares_per_pack, price_per_share, club_name}. With aclub_idfilter the entries are packs that contain that club's shares, so an entry's ownclub_idcan be a different club.get_club_packsreturns{updated, total_packs, total_matching, returned, packs}.
Analytics and leaderboards
Aggregate market stats, earnings leaderboards, ROI/payback analytics, tactical analysis, rich, best-manager and top-trader lists, referrals, and ticker data.
| Tool | Key params | Upstream | Notes |
|---|---|---|---|
get_market_data | none | REST /market | World stats. |
get_rich_list | limit | REST /rich_list | Wealthiest users. |
get_best_managers | name, sort_by, sort_order, pagination | REST /best_managers | Manager leaderboards. |
get_top_traders | none | REST /users/detailed sorted by volume | Top influence traders. |
get_earnings_leaderboard | none | REST /leaderboards/earnings | Always the 30-day board for now: the reply says days: 30, and the period parameter is ignored. For 7 days, call REST /leaderboards/earnings?days=7, which returns raw money. |
get_ticker | none | REST /ticker | Latest transfers/trades/richest/poorest snippets. |
get_club_earnings_light | club_ids, limit, sort_order | REST /dumps/club_earnings_light | SVC per influence per season. |
get_club_earnings | threshold, filters, sort, limit | REST /dumps/club_earnings | Buy-side ROI/payback. |
get_club_seller_opportunities | threshold, filters, sort, limit | REST /dumps/club_seller_opportunities | Sell-side premium bids. |
get_player_earnings | threshold, filters, sort, order, pagination | REST /dumps/player_earnings | Player ROI/payback. |
analyse_next_match | club_id, optional overrides | Composite | Tactical recommendation. |
analyse_club | club_id | Composite | Club analysis. |
Example MCP tool call:
{
"name": "get_player_earnings",
"arguments": { "threshold": 5, "limit": 5, "sort": "payback" }
}
Response notes:
- The raw REST dumps (
/dumps/*) return{meta, data}.dataholds rows andmeta.fieldsnames the columns. - The MCP tools reshape them.
get_player_earningsreturns{meta, players}with one object per player.get_club_earnings,get_club_seller_opportunitiesandget_club_earnings_lightreturn{updated, returned, clubs}plus a total (total_matchingortotal_clubs).
Running your own node
Everything above is hosted by Soccerverse: the MCP server on mcp.soccerverse.com and the APIs on play.soccerverse.com. If you run your own node, you talk to its raw GSP JSON-RPC interface instead, with nothing in front of it: no cache, no /datacentre, no /v1 and no /events. Every GSP method named in the tables above works there, including the ones marked "raw only". The GSP JSON-RPC page has the full method list and says which methods are switched off by default.
Send JSON-RPC 2.0 POST requests to http://localhost:8600/. By default a node only accepts connections from its own machine (with Docker, from inside its own container). To reach it from elsewhere, start it with --nogame_rpc_listen_locally. Pass parameters as a JSON object and follow the GSP call rules in Tool domains. Two examples:
# A player's payouts (raw values, see Money values)
curl -sS http://localhost:8600/ \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"get_player_payouts","params":{"player_id":1100}}'
# The votes a user can take part in
curl -sS http://localhost:8600/ \
-H 'Content-Type: application/json' \
-d '{"jsonrpc":"2.0","id":1,"method":"get_votes_for_shareholder","params":{"name":"snailbrain"}}'