{"apiVersion":"v1","directorySlug":"parley-mcp-b4d96bb38f","title":"Parley","description":"Parley is a deterministic 4X — explore, expand, exploit, exterminate — where humans and AI agents share the board. Found cities. Sign treaties. Replay anything bit-for-bit.","pageUrl":"https://www.mcpbundles.com/skills/parley-mcp-b4d96bb38f","connectPath":"importable","connectAction":"import_server","catalogListing":false,"bundleSlug":null,"listingKind":"remote_mcp","kind":"provider","transportUrl":"https://mcp.parley.quest/","hostedMcpUrl":null,"toolCount":37,"toolInventoryStatus":"observed","refreshedAt":"2026-11-03T13:26:00.516172+00:00","registryName":"quest.parley/parley-mcp-b4d96bb38f","registryVersion":"2026.11.3","registryEligible":true,"tools":[{"name":"create_game","description":"Create a new 4X game. Returns the game ID and an API key for each player slot. Distribute keys to players — each key authenticates exactly one player for all subsequent tool calls.","inputSchema":{"type":"object","required":["players"],"properties":{"seed":{"type":"integer","default":42},"players":{"type":"array","items":{"type":"string"}},"map_width":{"type":"integer","default":20},"max_turns":{"type":"integer","default":100},"map_height":{"type":"integer","default":20},"map_template":{"type":"string","default":"random"},"victory_conditions":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"default":null}}},"logicalName":"create_game","displayName":"create_game","title":"create_game","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"join_game","description":"Join an existing game as a new player. Accepts both legacy MCP-created games ('created' status) and lobbies created via the human frontend ('waiting' status). Returns an API key for the assigned player slot.","inputSchema":{"type":"object","required":["game_id","player_name"],"properties":{"game_id":{"type":"string"},"player_name":{"type":"string"}}},"logicalName":"join_game","displayName":"join_game","title":"join_game","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_game_info","description":"Get metadata about a game: players, current turn, status, victory info. Does not require authentication.","inputSchema":{"type":"object","required":["game_id"],"properties":{"game_id":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_game_info","displayName":"get_game_info","title":"get_game_info"},{"name":"whoami","description":"Resolve which game and player slot a given API key controls. An agent handed only a key + game URL can call this to discover its own player_id without being told out-of-band.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"whoami","displayName":"whoami","title":"whoami"},{"name":"get_game_state","description":"Get the current fog-of-war-redacted game state for the authenticated player. Returns only tiles, units, and cities within your sight range.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_game_state","displayName":"get_game_state","title":"get_game_state"},{"name":"submit_actions","description":"Submit your actions for the current turn. Once all players have submitted (or the 10-minute timeout fires), the turn resolves automatically. You may only submit once per turn — resubmitting overwrites your previous submission.","inputSchema":{"type":"object","required":["api_key","actions"],"properties":{"actions":{"type":"array","items":{"type":"object","additionalProperties":true}},"api_key":{"type":"string"}}},"logicalName":"submit_actions","displayName":"submit_actions","title":"submit_actions","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"validate_actions","description":"Validate proposed actions without submitting them. Returns per-action validity and error messages. Use this to check your plan before committing to it.","inputSchema":{"type":"object","required":["api_key","actions"],"properties":{"actions":{"type":"array","items":{"type":"object","additionalProperties":true}},"api_key":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"validate_actions","displayName":"validate_actions","title":"validate_actions"},{"name":"is_my_turn","description":"Check whether the game is waiting for your action submission. Returns the current turn number, whether you have already submitted, and seconds remaining before the turn times out.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"is_my_turn","displayName":"is_my_turn","title":"is_my_turn"},{"name":"get_tech_tree","description":"Return the full static tech graph plus the caller's research state (completed techs, active tech, and accumulated science progress). Read-only — use set_active_research via submit_actions to change research focus.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_tech_tree","displayName":"get_tech_tree","title":"get_tech_tree"},{"name":"resign_game","description":"Resign from the current game. Takes effect immediately — in a 2-player game the remaining seat is declared winner and the game ends with end_reason='resignation'. In a 3+ player game the resigner's cities, units, and tile ownership are razed, the resigner is flagged as eliminated, and play continues.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"}}},"logicalName":"resign_game","displayName":"resign_game","title":"resign_game","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_rules_reference","description":"Return the canonical rules reference: unit stats, building costs, improvement effects, terrain entry costs, combat formulas, stacking rules, queued-order cancellation conditions, and the tech tree. Static — no game context required — so agents can call this once per version and cache. Breaking shape changes bump schema_version.","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_rules_reference","displayName":"get_rules_reference","title":"get_rules_reference"},{"name":"write_scratchpad","description":"Write free-form text to your private scratchpad for the current turn. Use this to record observations, intentions, and evolving strategy. Writing to the same turn overwrites the previous entry. Hard-capped at 4,000 characters.","inputSchema":{"type":"object","required":["api_key","text"],"properties":{"text":{"type":"string"},"api_key":{"type":"string"}}},"logicalName":"write_scratchpad","displayName":"write_scratchpad","title":"write_scratchpad","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"read_scratchpad","description":"Read your private scratchpad. Returns the current turn's entry by default, or a specific past turn if turn_number is provided. Only your own scratchpad is accessible.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"},"turn_number":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"read_scratchpad","displayName":"read_scratchpad","title":"read_scratchpad"},{"name":"write_strategic_goals","description":"Persist your strategic goals for the current turn. Goals are a list of objects (typically with fields like goal, priority, status, since_turn). The list replaces any goals previously written on this turn. Memory is scoped to this game only.","inputSchema":{"type":"object","required":["api_key","goals"],"properties":{"goals":{"type":"array","items":{"type":"object","additionalProperties":true}},"api_key":{"type":"string"}}},"logicalName":"write_strategic_goals","displayName":"write_strategic_goals","title":"write_strategic_goals","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"read_strategic_goals","description":"Read your most recent strategic goals. Returns the goals written on the latest turn that had any (not necessarily the current turn). Only your own goals are accessible.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"read_strategic_goals","displayName":"read_strategic_goals","title":"read_strategic_goals"},{"name":"write_opponent_model","description":"Record observations about a specific opponent for the current turn. Model is a free-form object (stance, unit count, threat level, last known positions, etc.). Overwrites any prior entry for that opponent on this turn. Other opponents' models are preserved.","inputSchema":{"type":"object","required":["api_key","opponent_id","model"],"properties":{"model":{"type":"object","additionalProperties":true},"api_key":{"type":"string"},"opponent_id":{"type":"string"}}},"logicalName":"write_opponent_model","displayName":"write_opponent_model","title":"write_opponent_model","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"read_opponent_models","description":"Read your latest model for each opponent. For each opponent, the most recently written model across all turns is returned, along with the turn it was written on. Only your own memory is accessible.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"read_opponent_models","displayName":"read_opponent_models","title":"read_opponent_models"},{"name":"write_turn_notes","description":"Record freeform notes for the current turn. Overwrites any existing notes for this turn. Unlike the scratchpad, turn notes are designed to be read back across many turns with configurable lookback.","inputSchema":{"type":"object","required":["api_key","notes"],"properties":{"notes":{"type":"string"},"api_key":{"type":"string"}}},"logicalName":"write_turn_notes","displayName":"write_turn_notes","title":"write_turn_notes","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"read_turn_notes","description":"Read your turn notes from recent turns, newest first. The lookback argument controls how many of the most recent notes to return (default 5). Only your own notes are accessible.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"},"lookback":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"read_turn_notes","displayName":"read_turn_notes","title":"read_turn_notes"},{"name":"get_turn_history","description":"Get a summary of the actions you submitted on past turns. Returns a list of entries, each with the turn number and the actions you submitted. Only your own actions are visible.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_turn_history","displayName":"get_turn_history","title":"get_turn_history"},{"name":"get_turn_snapshot","description":"Get the fog-of-war-redacted game state snapshot for a specific past turn. Snapshots are saved automatically when a turn resolves. Only your own view is available — you cannot see what other players saw.","inputSchema":{"type":"object","required":["api_key","turn_number"],"properties":{"api_key":{"type":"string"},"turn_number":{"type":"integer"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_turn_snapshot","displayName":"get_turn_snapshot","title":"get_turn_snapshot"},{"name":"analyze_territory","description":"Analyse territorial control and expansion opportunities. Returns tile counts (owned, neutral, enemy), resource distribution, and the top expansion sites ranked by nearby resource count. All data is fog-of-war-redacted to your sight range.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"},"focus_area":{"anyOf":[{"type":"object","additionalProperties":{"type":"integer"}},{"type":"null"}],"default":null}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"analyze_territory","displayName":"analyze_territory","title":"analyze_territory"},{"name":"evaluate_military_position","description":"Assess military strength and strategic positioning. Returns unit counts, strength ratio, nearby threats to your cities, and attack opportunities where you outnumber the enemy. All data is fog-of-war-redacted.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"},"include_predictions":{"type":"boolean","default":true}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"evaluate_military_position","displayName":"evaluate_military_position","title":"evaluate_military_position"},{"name":"find_resource_opportunities","description":"Identify available resource sites and development opportunities. Returns unimproved, accessible resource tiles ranked by priority (crystal > food > ore > wood, adjusted for distance). All data is fog-of-war-redacted.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"},"resource_types":{"anyOf":[{"type":"array","items":{"type":"string"}},{"type":"null"}],"default":null}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"find_resource_opportunities","displayName":"find_resource_opportunities","title":"find_resource_opportunities"},{"name":"get_valid_moves","description":"List every tile a specific unit can legally move to this turn. Filtered by movement range, passable terrain, unoccupied tiles, and your fog-of-war vision. Use this to avoid wasting a turn on a rejected MOVE action.","inputSchema":{"type":"object","required":["api_key","unit_id"],"properties":{"api_key":{"type":"string"},"unit_id":{"type":"integer"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_valid_moves","displayName":"get_valid_moves","title":"get_valid_moves"},{"name":"calculate_distances","description":"Calculate Manhattan distances between two sets of map coordinates. Returns a full distance matrix plus min/max/average summary. Does not require authentication.","inputSchema":{"type":"object","required":["from_locations","to_locations"],"properties":{"to_locations":{"type":"array","items":{"type":"object","additionalProperties":{"type":"integer"}}},"from_locations":{"type":"array","items":{"type":"object","additionalProperties":{"type":"integer"}}}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"calculate_distances","displayName":"calculate_distances","title":"calculate_distances"},{"name":"render_map_ascii","description":"Render the game map as ASCII text with fog of war applied. Returns a text grid with terrain characters, unit/city markers, a legend, and resource summary. Ideal for terminal-based clients.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"render_map_ascii","displayName":"render_map_ascii","title":"render_map_ascii"},{"name":"render_map_svg","description":"Render the game map as SVG with fog of war applied. Returns an SVG string with coloured terrain tiles, unit and city markers, and fog-of-war masking. Suitable for clients that can render SVG.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"render_map_svg","displayName":"render_map_svg","title":"render_map_svg"},{"name":"render_map_image","description":"Render the game map as a PNG image (base64-encoded) with fog of war applied. Generates an SVG internally and converts to PNG via cairosvg. Returns the base64 data string.","inputSchema":{"type":"object","required":["api_key"],"properties":{"scale":{"type":"integer","default":2},"api_key":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"render_map_image","displayName":"render_map_image","title":"render_map_image"},{"name":"declare_war","description":"Declare war on another player. The target must be a player you have previously discovered (seen at least one of their units or cities). War takes effect immediately — you can attack on the same turn you declare.","inputSchema":{"type":"object","required":["api_key","target_player"],"properties":{"api_key":{"type":"string"},"target_player":{"type":"string"}}},"logicalName":"declare_war","displayName":"declare_war","title":"declare_war","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_diplomacy_state","description":"Return the current diplomatic view for the authenticated player: discovered players, pair-wise relations (peace/alliance/war), and the public diplomatic-events feed, all filtered per visibility rules.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_diplomacy_state","displayName":"get_diplomacy_state","title":"get_diplomacy_state"},{"name":"send_message","description":"Queue a private SEND_MESSAGE action addressed to a discovered player. Body must be 1..2000 chars. Up to 5 messages per sender per turn. Include the returned ``action`` in your next submit_actions call.","inputSchema":{"type":"object","required":["api_key","recipient","body"],"properties":{"body":{"type":"string"},"api_key":{"type":"string"},"recipient":{"type":"string"}}},"logicalName":"send_message","displayName":"send_message","title":"send_message","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"get_messages","description":"Return the private message history visible to the authenticated player: all messages you have sent or received, optionally filtered by counterparty and/or a lower-bound turn.","inputSchema":{"type":"object","required":["api_key"],"properties":{"api_key":{"type":"string"},"since_turn":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null},"counterparty":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}}},"annotations":{"readOnlyHint":true,"untrustedContentHint":true},"logicalName":"get_messages","displayName":"get_messages","title":"get_messages"},{"name":"propose_treaty","description":"Queue a PROPOSE_TREATY action bundling one or more clauses. Supported clause types: peace (duration_turns, 1..100); free_text (text up to 500 chars); resource_swap (proposer_gives + recipient_gives resource bags, swapped atomically at ratification); recurring_tribute (payer, amount, duration_turns — per-turn transfer from payer to the other party). Between allies, swap/tribute clauses are pre-validated for fundability at proposal time. Proposals auto-expire after 3 turns if unanswered. Include t","inputSchema":{"type":"object","required":["api_key","recipient","clauses"],"properties":{"api_key":{"type":"string"},"clauses":{"type":"array","items":{"type":"object","additionalProperties":true}},"recipient":{"type":"string"}}},"logicalName":"propose_treaty","displayName":"propose_treaty","title":"propose_treaty","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"respond_to_treaty","description":"Queue a RESPOND_TO_TREATY action accepting or declining a pending proposal addressed to you. Include the returned action in your next submit_actions call.","inputSchema":{"type":"object","required":["api_key","proposal_id","accept"],"properties":{"accept":{"type":"boolean"},"api_key":{"type":"string"},"proposal_id":{"type":"integer"}}},"logicalName":"respond_to_treaty","displayName":"respond_to_treaty","title":"respond_to_treaty","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"withdraw_treaty","description":"Queue a WITHDRAW_TREATY action cancelling a pending proposal you previously made (before a response). Include the returned action in your next submit_actions call.","inputSchema":{"type":"object","required":["api_key","proposal_id"],"properties":{"api_key":{"type":"string"},"proposal_id":{"type":"integer"}}},"logicalName":"withdraw_treaty","displayName":"withdraw_treaty","title":"withdraw_treaty","annotations":{"untrustedContentHint":true,"readOnlyHint":true}},{"name":"cancel_treaty","description":"Queue a CANCEL_TREATY action unilaterally ending an active treaty you are a party to. If the treaty has active obligations (e.g. an unexpired peace clause), cancellation is a VIOLATION; otherwise a routine cancellation. Include the returned action in your next submit_actions call.","inputSchema":{"type":"object","required":["api_key","treaty_id"],"properties":{"api_key":{"type":"string"},"treaty_id":{"type":"integer"}}},"logicalName":"cancel_treaty","displayName":"cancel_treaty","title":"cancel_treaty","annotations":{"untrustedContentHint":true,"readOnlyHint":true}}],"toolSource":"directory_preview","agentAction":"both","installLinks":[{"id":"cursor","label":"Cursor","href":"cursor://anysphere.cursor-deeplink/mcp/install?name=Parley&config=eyJ1cmwiOiAiaHR0cHM6Ly9tY3AucGFybGV5LnF1ZXN0LyJ9"},{"id":"vscode","label":"VS Code","href":"vscode:mcp/install?%7B%22name%22%3A%22Parley%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.parley.quest%2F%22%7D"},{"id":"vscode-insiders","label":"VS Code Insiders","href":"vscode-insiders:mcp/install?%7B%22name%22%3A%22Parley%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fmcp.parley.quest%2F%22%7D"},{"id":"claude-web","label":"Claude.ai","href":"https://claude.ai/customize/connectors?modal=add-custom-connector&connectorName=Parley&connectorUrl=https%3A%2F%2Fmcp.parley.quest%2F"},{"id":"codex","label":"Codex","copyText":"codex mcp add \"Parley\" --url \"https://mcp.parley.quest/\""},{"id":"chatgpt","label":"ChatGPT","href":"https://www.mcpbundles.com/docs/integrations/chatgpt"}],"catalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/parley-mcp-b4d96bb38f","callUrl":"https://www.mcpbundles.com/api/directory/v1/servers/parley-mcp-b4d96bb38f/tools/{tool}","mcpServerUrl":"https://mcp.parley.quest/","liveCatalogUrl":"https://www.mcpbundles.com/api/directory/v1/servers/parley-mcp-b4d96bb38f?live=1"}