Chuyển đến nội dung chính
Loading market data…
SoccerverseSoccerverse

These developer docs are available in English only. View in English

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, a Retry-After: 1 header and {"error":"Rate limit exceeded"}. Wait a second and try again. These numbers are measured, not promised, and may change.
  • Batches: one POST /mcp can carry up to 20 JSON-RPC messages in an array. More gets HTTP 413.
  • 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}. isError is not set, so look for success: false. Examples: an unknown tool, get_fixture without fixture_id, and get_club_details for a club that does not exist.
    • A JSON-RPC error with code -32603 and message Tool execution error. The details are in data. 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, and 422: ... for a value the API behind the tool rejects.
  • Some bad calls give no error at all. Required parameters are not always enforced: get_squad without club_id returns 50 unrelated players, and an id that does not exist can return an empty list or null. A few parameters that tools/list shows 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 normal User-Agent header. Python's default urllib one is blocked. curl is 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:

  1. Already in SVC. Use the _svc field when there is one, such as price_svc. Text that ends in SVC, such as "37989431.56 SVC", is also already converted. Do not divide either. A _short field such as "38.0M SVC" is shortened for display and loses digits, so do not calculate with it. For example, get_share_orders_dump gives one order's price as 157600, its price_svc as 15.76 and its price_short as "15 SVC": use price_svc.
  2. Raw, so divide by 10,000. The fields listed below have no converted twin.
  3. Plain numbers that are already in SVC. The money totals in get_market_data, the values in get_player_payouts and svc_per_influence_per_season in get_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_30d and the payout fields such as lifetime_payouts, season_payouts and last_week_payouts. The wages and last_price fields in the same rows are already converted.
  • get_club_balance_sheet_weeks: dilution_income. The other columns are already converted.
  • get_player_details, search_players and get_squad: volume_1_day, volume_7_day, last_7days and last_7days_price.
  • get_trading_graph: volume and weighted_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, ESP and DEU, 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), not timestamp.
  • Always set share_type on get_share_balances (club, player or all). On get_share_balances_detailed and get_portfolio_issues it is optional and only club or player work, but get_share_balances_detailed requires it when you use search or issue. get_share_balance_by_user_club has no share_type.
  • The REST endpoints /messages, /transfers/counts and /club_balance_sheet/weeks require season_id (they answer 422 without it), but the matching MCP tools default to the current season. Use get_seasons to list valid season ids. To find the current season, read seasonId from /v1/bootstrap. get_messages needs at least one of country_id, comp_id or club_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 /v1 path, added to https://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/gsp or on your own node, differs from the MCP tool in four ways:
    • share is an object, {"club": 50} or {"player": 1100}. The club_50 string 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_schedule without season_id is an error. To find the current season, read seasonId from /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).

ToolParamsNotes
resolve_player_namename, limitPlayer name to possible player ids.
resolve_club_namename, limitUse full club names for best results.
resolve_league_namename, country_id, limitLeague ids are season-specific.
resolve_competition_namename, limitCup/competition lookup.
resolve_stadium_namename, limitStadium 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.

ToolKey paramsUpstreamNotes
search_clubsclub_id, club_ids, country_id, min_balance, max_balance, sort_by, sort_order, pageREST /clubsSearch by id/filters; resolve name first. min_balance and max_balance are plain SVC.
get_club_overviewclub_idCompositeOne call with the essentials: details, squad, shareholders, trades, proposals, fixtures, news, league table.
get_club_detailsclub_idREST /clubs/detailedDetailed club record.
get_club_jobclub_idREST /clubs/{club_id}/jobJob posting. Returns a 404 error if the club has none.
get_jobs_boardsection, limitUnified API /v1/jobs-boardClubs with vacancies and unmanaged clubs. section is posted, available or both.
get_club_balance_sheet_weeksclub_id, weeks, season_idREST /club_balance_sheet/weeksFinancial history by week.
get_club_scheduleclub_id, season_idGSP get_club_scheduleSeason fixture list.
get_clubs_next_fixtureclub_idGSP get_clubs_next_fixture (raw only)Next scheduled fixture.
get_clubs_last_fixtureclub_idGSP get_clubs_last_fixture (raw only)Most recent played fixture.
get_club_tacticsclub_idGSP get_club_tacticsFormation, play style and team sheet. A club that keeps its tactics hidden returns only {"commitment": "<hash>"}.
get_squadclub_idGSP get_squadSquad with ratings, loans, availability.
get_clubs_leagueclub_idGSP get_clubs_league (raw only)Club's league information.
get_manager_history_by_clubclub_idGSP get_manager_history_by_clubClub manager history.
get_comp_history_by_clubclub_idGSP get_comp_history_by_clubCompetition history.
get_club_transfer_historyclub_idREST /player/transfer_historyClub transfer history.
get_clubs_transfer_auctionsclub_idGSP get_clubs_transfer_auctionsActive auctions for players being sold.
get_clubs_transfer_bidsclub_idGSP get_clubs_transfer_bidsAuctions this club has bid on.
get_transfer_countsclub_id, season_idREST /transfers/countsIn/out transfer counts.
get_loan_historyseason_id, club_idREST /players/loan_historyLoan 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_offersclub_id or player_idGSP 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_timeclub_id or player_idREST /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_messagesseason_id, country_id, comp_id, club_id, days, per_pageREST /messagesNews/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_matchclub_id, optional tactical overridesCompositeTactical recommendation.
analyse_matchuphome_club_id, away_club_id, optional for_club_id, days_until_match, opponent overridesCompositeTactical briefing for a hypothetical match between any two clubs. days_until_match is 0 to 60 (default 0).
analyse_clubclub_idCompositeClub 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.

ToolKey paramsUpstreamNotes
search_playersplayer_id, player_ids, club_id, country_id, rating/age/wage filters, page, per_pageREST /playersAll filters are optional. Results are paged. min_wage and max_wage use raw units.
get_player_overviewplayer_idCompositeOne call with the essentials: details, history, stats, field time, shareholders, trades, proposals, club.
get_player_detailsplayer_id, player_ids, filtersREST /players/detailedDetailed player record. wages_min and wages_max use raw units.
get_player_payoutsplayer_idGSP get_player_payouts (raw only)Payout structure: agent wage, assists, goals, lineup, regular.
get_agents_playersusernameGSP get_agents_playersPlayers a user represents as agent, with desired contract and fair wage. The GSP method takes agent_name.
get_player_transfer_historyplayer_idREST /player/transfer_historyPlayer moves.
get_league_player_dataplayer_idGSP get_comp_player_dataLeague stats: the leagues list of that reply.
get_cup_player_dataplayer_idGSP get_comp_player_dataCup stats: the cups list of that reply.
get_comp_player_dataplayer_idGSP get_comp_player_dataLeague and cup stats combined.
get_morale_historyplayer_id, limitREST /players/morale_history/{player_id}Morale changes.
get_player_historyplayer_idREST /player/history/{player_id}Loans, ratings, injuries, transfers.
get_transfer_auction_detailsplayer_idGSP get_transfer_auction_detailsActive auction details.
get_player_earningsthreshold, filters, sorting, paginationREST /dumps/player_earningsROI/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.

ToolKey paramsUpstreamNotes
get_user_detailsusername, user_idREST /users/detailedOne 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_activitynameREST /user_activityA user's activity points and rank (one summary row). page has no effect.
get_user_balance_sheetname, start_date, end_date, pageREST /user_balance_sheetTransactions, 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_earningsnameREST /user_balance_sheet/earningsEarnings summary.
get_user_balance_sheet_weeksname, weeksREST /user_balance_sheet/weeksWeekly balance.
get_achievementsusernameREST /achievementsAchievement/profile completion.
get_best_managersname, sort_by, sort_order, paginationREST /best_managersTactician/veteran rankings.
get_rich_listlimitREST /rich_listWealth leaderboard.
get_comp_history_by_managernameGSP get_comp_history_by_manager (raw only)Competition history.
get_manager_history_by_managernameGSP get_manager_history_by_managerCareer history.
get_referrals_leaderboard_timerangenoneREST /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_allnoneREST /leaderboards/referrals/allAll-time referrals. usd_spent is raw USDC (divide by 1,000,000).
get_portfolio_summaryusernameREST /share_balances/summaryBalance, net worth, holdings and 7/30-day earnings.
get_portfolio_issuesusername, share_type (club or player)REST /share_balances/issue_countsCounts of no, inactive or locked manager, bad form, unhappy players and low balance.
get_share_balances_detailedusername, share_type, has_manager, has_agent, issue, search, sorting, paginationREST /share_balances/detailedHoldings with management status.
get_share_transactionsusername, limit, offsetREST /share/transactionsTrades 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.

ToolKey paramsUpstreamNotes
get_market_datanoneREST /marketGame-wide market/population/activity stats.
get_svc_pricenoneREST /svc_priceSVC to USDC exchange rate.
get_trading_graphclub_id or player_id, time_rangeREST /trading_graphtime_range is required: 1d, 7d, 30d, 90d, 6m or 1y.
get_share_trade_historyname, club_id, player_id, sort_by, pageREST /share_trade_historyAt 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_tradesper_pageREST /share_trade_history/allLatest trades across the whole market.
get_share_balancesshare_type, plus club_id/player_id/name/aggregation filtersREST /share_balancesAlways set share_type.
get_share_balance_by_user_clubusername, club_id (both required)REST /share_balance_by_user_clubHow many shares (influence) a user holds in a club.
get_share_ownersshareGSP get_share_owners (raw only)Full owner list of a share. Use club_50 or player_1100 in MCP.
get_user_share_ordersnameGSP get_user_share_ordersActive bid/ask orders by user.
get_share_orderbookshareGSP get_share_orderbookUse club_50 or player_1100 in MCP.
get_top_tradersnoneREST /users/detailed sorted by volumeTop active influence traders.
get_svc_trades_summarynoneDemocrit GraphQLRecent SVC exchange trades.
get_share_orders_dumpshare_type, share_idsREST /dumps/share_orders/clubs or /playersBulk 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 include share_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/..., data is keyed by share id and each row is [order_id, name, is_ask, price, num]. meta.fields names the columns.
  • get_share_orders_dump reshapes that into {share_type, updated, requested, orderbooks_returned, no_orderbook, orderbooks}. Each orderbook has bids and asks lists 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.

ToolKey paramsUpstreamNotes
get_countriespageREST /countriesCountry list.
get_seasonsnoneGSP get_seasonsValid season ids and dates.
get_leaguescountry_id, division, pageREST /leaguesLeague ids are season-specific.
get_league_tablescountry_id, division, season_idREST /league_tablescountry_id + division required. division 1 is the top division. The whole table comes back at once, so page has no effect.
get_fixturefixture_idGSP get_fixtureFixture details.
get_turn_fixturesturn_idGSP get_turn_fixturesAll fixtures for a turn.
get_match_subsfixture_idGSP get_match_subs (raw only)Substitutions.
get_fixture_player_datafixture_idREST /fixture_history/players/{fixture_id}Player stats for fixture.
get_match_eventsfixture_idREST /commentary/match_events/{fixture_id}Events.
get_match_commentaryfixture_idREST /commentary/match_commentary/{fixture_id}Commentary.
get_all_turnscomp_idGSP get_all_turnsTurns for a competition.
get_cupsseason_idGSP get_cupsCups for a season.
get_cups_by_countrycountry_id, season_idGSP get_cups_by_country (raw only)Country cups.
get_cupcup_idGSP get_cup (raw only)Cup detail.
get_league_top_playersleague_idGSP get_league_top_playersTop league players.
get_associationsassociation_typeGSP get_associationsnational/continental/world.
get_associationcountry_idGSP get_association (raw only)Association detail.
get_association_qualifiersassociation_idGSP get_association_qualifiers (raw only)Qualifier info.
get_recent_competitionsdaysCompositeRecent competitions.
get_game_world_historyseason_id, country_id, comp_type, comp_id, max_positionGSP 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.

ToolKey paramsUpstreamNotes
get_transfer_marketpositions, min_rating, max_rating, min_age, max_age, min_bid, max_bid, search, sort, order, page, and more filtersUnified API /v1/transfer-marketSortable, filterable list of every player listed for auction. min_bid and max_bid are raw units (SVC multiplied by 10,000).
get_top_transfer_auctionsnum (default 20)GSP get_top_transfer_auctionsActive 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_auctionsclub_idGSP get_clubs_transfer_auctionsActive auctions for club's players.
get_clubs_transfer_bidsclub_idGSP get_clubs_transfer_bidsAuctions this club bid on.
get_transfer_auction_detailsplayer_idGSP get_transfer_auction_detailsSpecific active auction.
get_all_transfer_historyseason_id (optional)REST /player/transfer_historyThe 50 most recent completed transfers of a season (default: the current one).
get_club_transfer_historyclub_idREST /player/transfer_historyClub transfer history.
get_player_transfer_historyplayer_idREST /player/transfer_historyPlayer transfer history.
get_transfer_countsclub_id, season_idREST /transfers/countsIn/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.

ToolKey paramsUpstreamNotes
get_all_votesstate (optional)GSP get_all_votesAll 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_shareholdernameGSP get_votes_for_shareholder (raw only)Votes a user can participate in, including upcoming ones.
get_votes_for_club_or_playershareGSP get_share_proposalsMCP share string: club_50 or player_1100.
get_user_active_proposalsusernameREST /share_balances/active_proposalsOpen votes on shares a user holds, with time remaining and the current leader.
get_proposalsstatus, proposal_type, share_type, club_id, player_id, username, days_back, paginationREST /proposals/active and /proposals/historicalGovernance 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.

ToolKey paramsUpstreamNotes
get_shop_purchasesreceiver, club_id, limitShop GraphQL packsBoughtsPack purchases. Give receiver or club_id, or both.
get_sale_clubsclub_id, country_id, tier, active_only, limit, pageREST /shop/clubsPack price, tranche progress, tier and pack contents. club_id finds packs that contain that club's shares.
get_club_packscountry, division, max_payback_seasons, sort, limitREST dump /dumps/club_packsPack deals with payback.

Example MCP tool call:

{
  "name": "get_sale_clubs",
  "arguments": { "club_id": 50, "limit": 5 }
}

Response notes:

  • get_shop_purchases returns {purchases, count, note}. Each purchase has receiver, num_packs, usd_spent (a string such as "$47", raw value in usd_spent_raw), club_id, club_name, date and timestamp, and sometimes tier. club_shares_minted_total and club_tranche_remaining are the club's current state, repeated on every row. They are not per-purchase figures.
  • get_sale_clubs returns {sale_clubs, count, total, page}. Each entry has club_id, country_id, tier, status, tranche, tranche_remaining, price_per_pack (such as "$49.50", raw value in price_per_pack_raw), max_packs, club_name and pack_contents, a list of {club_id, shares_per_pack, price_per_share, club_name}. With a club_id filter the entries are packs that contain that club's shares, so an entry's own club_id can be a different club.
  • get_club_packs returns {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.

ToolKey paramsUpstreamNotes
get_market_datanoneREST /marketWorld stats.
get_rich_listlimitREST /rich_listWealthiest users.
get_best_managersname, sort_by, sort_order, paginationREST /best_managersManager leaderboards.
get_top_tradersnoneREST /users/detailed sorted by volumeTop influence traders.
get_earnings_leaderboardnoneREST /leaderboards/earningsAlways 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_tickernoneREST /tickerLatest transfers/trades/richest/poorest snippets.
get_club_earnings_lightclub_ids, limit, sort_orderREST /dumps/club_earnings_lightSVC per influence per season.
get_club_earningsthreshold, filters, sort, limitREST /dumps/club_earningsBuy-side ROI/payback.
get_club_seller_opportunitiesthreshold, filters, sort, limitREST /dumps/club_seller_opportunitiesSell-side premium bids.
get_player_earningsthreshold, filters, sort, order, paginationREST /dumps/player_earningsPlayer ROI/payback.
analyse_next_matchclub_id, optional overridesCompositeTactical recommendation.
analyse_clubclub_idCompositeClub 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}. data holds rows and meta.fields names the columns.
  • The MCP tools reshape them. get_player_earnings returns {meta, players} with one object per player. get_club_earnings, get_club_seller_opportunities and get_club_earnings_light return {updated, returned, clubs} plus a total (total_matching or total_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"}}'

Đối Tác Của Chúng Tôi