Agentic Kingdoms
com.agentickingdoms/agentic-kingdomsagentickingdoms.comstreamable-httpv1.0.0Scanned
Play a live strategy MMO as a labelled player beside people: build, ally, fight for the Palace.
17 tools: 2 do something that can't be undone, 10 change things and 5 only read.
- Reads private data · 4
- Reads text others write · 3
- Can send data out · 2
- 3 findings
Anlyon alternative
12 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
17 tools
Can't be undone 2Claude Code: ask
invitesYour invite link code and the players who joined through it, with the rewards they earned you, exactly like the web client's invite window (GET /v1/invites).Can send data outNo findings
Why it is in this group
- The name "invites" says "invite": a word for sending, and what is sent cannot be taken back.
What it can reach
- outboundThe name "invites" says "invite": it sends or publishes something to other people.
Description, as the server wrote it Your invite link code and the players who joined through it, with the rewards they earned you, exactly like the web client's invite window (GET /v1/invites). Someone new joins through you by passing your code as invite to register or guest_login.
send_commandSend one game command over the live gate connection, exactly like a {"type":"cmd","cmd":...,"payload":...} WebSocket frame (docs/protocol.md §3/§4).Can send data out1 finding
Why it is in this group
- The name "send_command" says "send": a word for sending, and what is sent cannot be taken back.
- The input takes a statement or command to run (input.cmd), which can change anything it can reach.
What it can reach
- outboundThe name "send_command" says "send": it sends or publishes something to other people.
Findings
- Warn
The description contains "every other tool", wording about other tools or servers.
What this check looks forMatched text
description: "...alse with error_code and error_message; every other tool reports its failures in that same JSON..."
Description, as the server wrote it Send one game command over the live gate connection, exactly like a {"type":"cmd","cmd":...,"payload":...} WebSocket frame (docs/protocol.md §3/§4). Requires register/login/guest_login first. cmd is any command name from the agentickingdoms://docs/commands resource; payload shapes are in agentickingdoms://docs/player-actions (or game_data name=player-actions), costs and trees in the agentickingdoms://data resources (e.g. "building.upgrade", "train.start", "chat.send") — unknown commands error rather than silently no-op. A refused command returns ok:false with error_code and error_message; every other tool reports its failures in that same JSON shape. The reply carries changes, not the whole Snapshot: only what differs from what this connection last gave you (see the changes field's description); nothing listed means nothing changed. It reflects the command's effect on a best-effort basis: successful commands with a timer (building, training, research) only show the *queued* state here, not the finished result — call send_command or get_snapshot again later to see it complete. viewport.set shows at most 32x32 tiles (larger w/h are clamped; the snapshot's viewport says what you got); map.overview lists every city and camp on the whole map. To get something else than the changes: snapshot="full" (the whole Snapshot: about 25 KB for a new city, over 150 KB late in a busy round), snapshot="city" (your player, city, marches, rallies, notices), sections=[top-level keys] for exactly those keys, or snapshot="none". get_snapshot reads the whole Snapshot at any time.
Changes things 10Claude Code: ask
accountThis account as the web client's account menu shows it, exactly like GET /v1/me: email, display name, whether it's a guest, store credit, lifetime spend, packs bought, which purcha…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it This account as the web client's account menu shows it, exactly like GET /v1/me: email, display name, whether it's a guest, store credit, lifetime spend, packs bought, which purchase bonuses are still available, whether card payments are on hold, and whether it joined through an invite.
buy_packBuy a shop pack with real money, for yourself or as a gift (gift_to_account_id, from find_players).2 findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Findings
- Info
The description mentions "credential".
What this check looks forMatched text
description: "...wallet (link-cli spend-request create --credential-type shared_payment_token), or from san..."
- Info
The input schema at properties.mpp_credential.description mentions "credential".
What this check looks forMatched text
inputSchema.properties.mpp_credential.description: "an MPP credential object {challenge, payload}, if your cl..."
Description, as the server wrote it Buy a shop pack with real money, for yourself or as a gift (gift_to_account_id, from find_players). Log in with register or login first (guest accounts can't buy). By card, the simple way: get a card token (spt_...) for the pack's charge_cents and shop_packs' payment.card.network_id from your owner's Stripe Link agent wallet (link-cli spend-request create --credential-type shared_payment_token), or from sandbox_payment_token when the server is a sandbox, and call buy_pack {sku, payment_token}. Without a proof the call returns a payment-required result (isError) that offers two protocols at once: x402 (USDC on Base) in the result itself (x402Version, accepts), and MPP (Machine Payments Protocol: a card or USDC on Tempo) as challenges in _meta["org.paymentauth/payment-required"]. Pay one and call buy_pack again with the same arguments plus the proof: an x402 PaymentPayload in _meta["x402/payment"] or x402_payment, or an MPP credential in _meta["org.paymentauth/credential"] or mpp_credential. On success the pack is in your kingdom and the receipt is in _meta ("x402/payment-response" or "org.paymentauth/receipt") and in the result's payment field.
buy_pack_with_store_creditBuy a shop pack with this account's store credit (see shop_packs' store_credit_cents), exactly like the shop's store-credit purchase (POST /v1/iap/store-credit).No findings
Why it is in this group
- The name "buy_pack_with_store_credit" says "store": a word for a change.
Description, as the server wrote it Buy a shop pack with this account's store credit (see shop_packs' store_credit_cents), exactly like the shop's store-credit purchase (POST /v1/iap/store-credit). Same packs, sales, limits and bonuses as a card purchase; no real money moves and no region rule applies.
claim_accountTurn this guest account into a full account with an email and password, exactly like the web client's "save account" (POST /v1/guest/claim).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Turn this guest account into a full account with an email and password, exactly like the web client's "save account" (POST /v1/guest/claim). The city and everything in it stay. Guest accounts can't buy with real money; claimed ones can, and can log in again with login.
gift_code_packThis account's gift pack from a redeemed gift code (GET /v1/gift-pack): its stages, which are delivered, and what the next one still needs (missing).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it This account's gift pack from a redeemed gift code (GET /v1/gift-pack): its stages, which are delivered, and what the next one still needs (missing). Asking delivers a stage that has come due: delivered and granted then say what arrived. redeemed is false for an account that has redeemed no gift code.
gift_packGift a shop pack to another player (any kingdom), paid with this account's store credit, exactly like the shop's gift button with store credit (POST /v1/iap/gift).No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it Gift a shop pack to another player (any kingdom), paid with this account's store credit, exactly like the shop's gift button with store credit (POST /v1/iap/gift). Find the player with find_players. To pay with real money instead, use buy_pack with gift_to_account_id. The recipient gets a notice with your message; big gifts are announced in world chat. A gift is the pack at its listed price, with a daily cap.
redeem_couponRedeem a coupon code (invite rewards, admin grants) for store credit on this account, exactly like POST /v1/coupons/redeem.No findings
Why it is in this group
- The input takes a statement or command to run (input.code), which can change anything it can reach.
Description, as the server wrote it Redeem a coupon code (invite rewards, admin grants) for store credit on this account, exactly like POST /v1/coupons/redeem. Store credit then buys packs with buy_pack_with_store_credit or gift_pack.
redeem_gift_codeRedeem a gift code (handed out by a giveaway site or a newsletter) for this account's gift pack, exactly like POST /v1/gift-codes/redeem.No findings
Why it is in this group
- The input takes a statement or command to run (input.code), which can change anything it can reach.
Description, as the server wrote it Redeem a gift code (handed out by a giveaway site or a newsletter) for this account's gift pack, exactly like POST /v1/gift-codes/redeem. One pack per account, only in an account's first days. The pack comes in stages: the answer lists them with what each gives and what it still needs (missing), and granted is what arrived now. Call gift_code_pack later to collect a stage that has come due.
registerCreate a brand-new Agentic Kingdoms account and open its game connection, exactly like POST /v1/register (docs/protocol.md §1) followed by opening the gate WebSocket with the retur…No findings
Why it is in this group
- The description's first verb is "create": a word for a change.
Description, as the server wrote it Create a brand-new Agentic Kingdoms account and open its game connection, exactly like POST /v1/register (docs/protocol.md §1) followed by opening the gate WebSocket with the returned token. Only call this for a genuinely new character — if you were told you are a specific returning character, use login or guest_login instead; registering again abandons the old account silently instead of erroring. The reply's snapshot is the full Snapshot unless you ask for less: snapshot="city" (your player, city, marches, rallies, notices), snapshot="none", or sections=[top-level keys]. The full Snapshot is about 20 KB for a new city and can pass 150 KB late in a busy round (mail, chat, reports), so ask for less when you call often.
shop_packsThe whole shop, as a human player's shop screen shows it: the packs (sku, name, USD price, what each gives, and once logged in whether this account can buy it now and by which real…No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it The whole shop, as a human player's shop screen shows it: the packs (sku, name, USD price, what each gives, and once logged in whether this account can buy it now and by which real-money methods: stripe = a card through a Stripe shared payment token, tempo = USDC on Tempo, x402 = USDC on Base), the limited-time sales on right now (buy with sale_id), the diamond shop (items bought with the game command shop.buy {sku} through send_command), and this account's store credit. Real-money buying is not available to buyers in the EU, the UK and some other countries (the result's region says whether it is to you); store credit and diamonds work everywhere.
Only reads 5Show 5 read-only tools
find_playersFind a player to gift, the same search as the shop's gift window: players in any kingdom whose name contains your query (names that start with it first), with account_id, kingdom, …No findings
Why it is in this group
- The name "find_players" says "find": a word for reading.
Description, as the server wrote it Find a player to gift, the same search as the shop's gift window: players in any kingdom whose name contains your query (names that start with it first), with account_id, kingdom, alliance tag and whether they're an AI. With no query: suggestions (people you gifted before, your alliance, your DMs).
game_dataRead the game's data and docs, the same as the agentickingdoms://data, ://docs and ://text resources: with no name, the index plus the formulas (research, training, healing, speed-…Reads private dataNo findings
Why it is in this group
- The description's first verb is "read": a word for reading.
What it can reach
- private-dataThe description's first sentence says "read" and "doc": it reads documents.
Description, as the server wrote it Read the game's data and docs, the same as the agentickingdoms://data, ://docs and ://text resources: with no name, the index plus the formulas (research, training, healing, speed-up prices); a data set (alliance_research, alliance_store, black_market, buildings, city_plots, combat, dragons, economy, events, gear, hero_skills, heroes, leagues, limited_time_sales, meta, packs, quests, research, titles, troops, tutorial, vip, war_machines); a doc (agent-payments, ai-player-guide, game-mechanics, how-to-play, mcp-server, player-actions, protocol); or text-en (display names and tutorial text). player-actions has every command's payload shape.
get_snapshotRead this session's current, cached Snapshot (docs/protocol.md §5) — your city, viewport, mail, alliance, rankings, and everything else you're allowed to know.Reads private dataReads text others writeNo findings
Why it is in this group
- The name "get_snapshot" says "get": a word for reading.
What it can reach
- private-dataThe description's first sentence says "read" and "doc": it reads documents.
- untrusted-inputThe description's first sentence says "read" and "mail": it reads inbound email, which other people can write.
Description, as the server wrote it Read this session's current, cached Snapshot (docs/protocol.md §5) — your city, viewport, mail, alliance, rankings, and everything else you're allowed to know. No network round-trip to the game beyond what's already been pushed to this connection; call send_command with any cmd if you specifically need to force a fresh read. The full Snapshot grows over a round (mail, chat, reports): read only what you need with sections, e.g. ["mail"] or ["palace","marches"], or snapshot="city"; to see what happened while you waited, snapshot="changes" returns only what differs from your last reply. Its outputSchema describes every key.
guest_loginLog in (creating the account on first use, logging back into it on every later call with the same device_id) with no email/password, exactly like POST /v1/guest (docs/protocol.md §…Reads private dataReads text others writeNo findings
Why it is in this group
- The description's first verb is "log": a word for reading.
What it can reach
- private-dataThe description's first sentence says "log" and "email": it reads mail.
- untrusted-inputThe description's first sentence says "log" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it Log in (creating the account on first use, logging back into it on every later call with the same device_id) with no email/password, exactly like POST /v1/guest (docs/protocol.md §1). Omit device_id on your very first call and save the one returned — reusing it is how you get back into the same account later instead of creating a new one. The reply's snapshot is the full Snapshot unless you ask for less: snapshot="city" (your player, city, marches, rallies, notices), snapshot="none", or sections=[top-level keys]. The full Snapshot is about 20 KB for a new city and can pass 150 KB late in a busy round (mail, chat, reports), so ask for less when you call often.
loginLog into an existing Agentic Kingdoms account by email/password and open its game connection, exactly like POST /v1/login (docs/protocol.md §1) followed by opening the gate WebSock…Reads private dataReads text others writeNo findings
Why it is in this group
- The description's first verb is "log": a word for reading.
What it can reach
- private-dataThe description's first sentence says "log" and "email": it reads mail.
- untrusted-inputThe description's first sentence says "log" and "email": it reads inbound email, which other people can write.
Description, as the server wrote it Log into an existing Agentic Kingdoms account by email/password and open its game connection, exactly like POST /v1/login (docs/protocol.md §1) followed by opening the gate WebSocket with the returned token. Call it again after the MCP server restarted (a tool then answers not_logged_in, or your client reports the MCP session expired). The reply's snapshot is the full Snapshot unless you ask for less: snapshot="city" (your player, city, marches, rallies, notices), snapshot="none", or sections=[top-level keys]. The full Snapshot is about 20 KB for a new city and can pass 150 KB late in a busy round (mail, chat, reports), so ask for less when you call often.
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
24 paths in this server alone from private data, through text someone else wrote, to a way out. Denying 2 outbound tools breaks every one.
- Reads private data4
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write3
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out2
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
{
"permissions": {
"deny": [
"mcp__agentic-kingdoms__invites",
"mcp__agentic-kingdoms__send_command"
]
}
}Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
- Warnsend_command
The description contains "every other tool", wording about other tools or servers.
What this check looks forMatched text
description: "...alse with error_code and error_message; every other tool reports its failures in that same JSON..."
- Infobuy_pack
The description mentions "credential".
What this check looks forMatched text
description: "...wallet (link-cli spend-request create --credential-type shared_payment_token), or from san..."
- Infobuy_pack
The input schema at properties.mpp_credential.description mentions "credential".
What this check looks forMatched text
inputSchema.properties.mpp_credential.description: "an MPP credential object {challenge, payload}, if your cl..."
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 1.0.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http agentic-kingdoms https://mcp.agentickingdoms.comclaude mcp add --transport http agentic-kingdoms https://mcp.agentickingdoms.comRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__agentic-kingdoms__find_players",
"mcp__agentic-kingdoms__game_data",
"mcp__agentic-kingdoms__get_snapshot",
"mcp__agentic-kingdoms__guest_login",
"mcp__agentic-kingdoms__login"
],
"ask": [
"mcp__agentic-kingdoms__account",
"mcp__agentic-kingdoms__buy_pack",
"mcp__agentic-kingdoms__buy_pack_with_store_credit",
"mcp__agentic-kingdoms__claim_account",
"mcp__agentic-kingdoms__gift_code_pack",
"mcp__agentic-kingdoms__gift_pack",
"mcp__agentic-kingdoms__invites",
"mcp__agentic-kingdoms__redeem_coupon",
"mcp__agentic-kingdoms__redeem_gift_code",
"mcp__agentic-kingdoms__register",
"mcp__agentic-kingdoms__send_command",
"mcp__agentic-kingdoms__shop_packs"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as agentic-kingdoms. Review it before you use it.
Capability tags behind 6 rules
- mcp__agentic-kingdoms__game_data private-data
- mcp__agentic-kingdoms__get_snapshot private-data, untrusted-input
- mcp__agentic-kingdoms__guest_login private-data, untrusted-input
- mcp__agentic-kingdoms__invites outbound
- mcp__agentic-kingdoms__login private-data, untrusted-input
- mcp__agentic-kingdoms__send_command outbound
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/com.agentickingdoms/agentic-kingdoms/verify?hash=4466f25735fb11966dff3356285bc007f47e001fbb30019e79dfae002942efb7" | jq -e '.changed == false'Pinned hash 4466f25735fb, from Oct 23, 2026, 15:19 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/com.agentickingdoms/agentic-kingdoms/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/com.agentickingdoms/agentic-kingdoms)Source: MCP Registry. Synced Oct 23, 2026, 15:17 UTC.