Koskamo

Arcade.fun MCP

Provides connection metadata for the Arcade.fun MCP endpoint, enabling agents to interact with playable browser experiences and manage creator-owned game uploads.

Endpoint and access

No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.

Arcade.fun MCP logo, by theguysaccountCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-01Published by theguysaccount
MCP endpoint (Streamable HTTP)
https://arcade.fun/mcp
Vendor documentation

What you can do with it

  • Discover playable browser experiences
  • Manage creator-owned game uploads

Source and maintenance

Community listingRegistry 1.0.0
Maintenance checked

Protocol and capabilities

Server
arcade.fun 1.0.0
MCP protocol
2025-06-18
Tools
8 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
Not advertised
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

Publish and update browser experiences on arcade.fun. First time: create_experience returns a game id and its manage key. The key is shown once and is the only way back in, from any client — store it before doing anything else. Then upload_build sends the build and puts it in the review queue. A build that passes the sandbox checks goes live the moment upload_build finishes — no queue, no waiting for a person. The result says `live: true` and carries the play URL. If it says `live: false`, read `waiting`: it lists exactly what to fix, and fixing it and sending another version publishes it. Updating: start_version with the game id and key, then upload_build with the new version. The live version keeps playing until the new one takes over. A build is one HTML file or a zip of a complete web build with index.html at its root, and relative asset paths. Call arcade.ready(...) literally in the entry page to have the arcade SDK injected, which is what gives a game score reporting, pause and resume, and cloud saves. An SDK build gets no network of its own, so bundle everything locally. Builds over 24 MB go to PUT /api/uploads/<version>/files with an X-Manage-Key header instead of through upload_build.

Tools

8 advertised

list_experiences — List the Community shelf
Advertised by the server during the last successful anonymous check.
Advertised read-only

Every approved experience currently playable on arcade.fun, with the origin games are served from. Needs no credentials.

list_experiences input schema
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
list_experiences annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}
create_experience — Create an experience
Advertised by the server during the last successful anonymous check.

Register a new experience and get its manage key. Returns game, key and the first version id. The key is shown only here and controls the listing forever — save it. This creates a draft; upload_build is what sends it for review.

create_experience input schema
{
  "type": "object",
  "required": [
    "title",
    "author",
    "email",
    "wallet",
    "inputs",
    "rights",
    "terms"
  ],
  "properties": {
    "how": {
      "type": "string",
      "maxLength": 1200,
      "description": "How to take part: the controls and how to begin."
    },
    "kind": {
      "enum": [
        "web",
        "sdk"
      ],
      "type": "string",
      "description": "'sdk' if the entry page calls arcade.ready(), otherwise 'web'. Detected from the build too."
    },
    "email": {
      "type": "string",
      "maxLength": 254,
      "description": "Reviewer contact address. Players never see it."
    },
    "terms": {
      "type": "boolean",
      "description": "Confirm you agree to the arcade.fun terms and community guidelines."
    },
    "title": {
      "type": "string",
      "maxLength": 60,
      "description": "What the experience is called, 2 to 60 characters."
    },
    "aspect": {
      "enum": [
        "",
        "16:9",
        "4:3",
        "1:1",
        "3:4",
        "9:16"
      ],
      "type": "string",
      "description": "Shape on screen. Empty fills the screen."
    },
    "author": {
      "type": "string",
      "maxLength": 30,
      "description": "The creator name players see, 2 to 30 characters."
    },
    "inputs": {
      "type": "array",
      "items": {
        "enum": [
          "voice",
          "camera",
          "keyboard",
          "mouse",
          "touch",
          "gamepad"
        ],
        "type": "string"
      },
      "description": "How people interact. At least one."
    },
    "rights": {
      "type": "boolean",
      "description": "Confirm the experience is yours to share, including its art, music and code."
    },
    "wallet": {
      "type": "string",
      "maxLength": 44,
      "description": "Solana address that receives this listing's creator trading fees. Every public listing launches with its own coin."
    },
    "devices": {
      "type": "array",
      "items": {
        "enum": [
          "mobile",
          "desktop"
        ],
        "type": "string"
      },
      "description": "Devices actually tested. Mobile requires touch, voice or camera among inputs."
    },
    "tagline": {
      "type": "string",
      "maxLength": 140,
      "description": "One line for the cabinet."
    }
  },
  "additionalProperties": false
}
create_experience annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
start_version — Start a new version
Advertised by the server during the last successful anonymous check.

Open a new version slot for an experience you already own. The live approved version keeps playing until the new one is reviewed.

start_version input schema
{
  "type": "object",
  "required": [
    "game",
    "key"
  ],
  "properties": {
    "key": {
      "type": "string",
      "description": "That game's manage key."
    },
    "game": {
      "type": "string",
      "description": "The 12-character game id."
    }
  },
  "additionalProperties": false
}
start_version annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
upload_build — Upload a build
Advertised by the server during the last successful anonymous check.

Send the browser build for a version and publish it. One HTML file, or a zip with index.html at its root. A build that passes the sandbox checks goes live immediately: the result has `live: true` and the play URL. Otherwise `live: false` and `waiting` says why, either a list of things to fix or that this arcade reviews that upload by hand. Also returns file count, size, engine and whether the arcade SDK was detected. If the zip has several pages and no index.html, the result asks which page starts it — answer with set_entry.

upload_build input schema
{
  "type": "object",
  "required": [
    "version",
    "key",
    "content_base64",
    "filename"
  ],
  "properties": {
    "key": {
      "type": "string",
      "description": "The game's manage key."
    },
    "entry": {
      "type": "string",
      "maxLength": 300,
      "description": "Start page inside a zip, if it is not index.html."
    },
    "threads": {
      "type": "boolean",
      "description": "True if the build needs SharedArrayBuffer. Threaded builds open in their own tab and cannot use the SDK bridge. Omit to work it out from the files."
    },
    "version": {
      "type": "string",
      "description": "Version id from create_experience or start_version."
    },
    "filename": {
      "type": "string",
      "description": "The file's name, so the type is read correctly: e.g. index.html or build.zip."
    },
    "content_base64": {
      "type": "string",
      "description": "The .html or .zip file, base64 encoded. Up to 24 MB decoded."
    }
  },
  "additionalProperties": false
}
upload_build annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": false,
  "destructiveHint": false
}
set_entry — Choose the start page
Advertised by the server during the last successful anonymous check.

Name the page that starts the experience, when a zip had several and no index.html.

set_entry input schema
{
  "type": "object",
  "required": [
    "version",
    "key",
    "entry"
  ],
  "properties": {
    "key": {
      "type": "string"
    },
    "entry": {
      "type": "string",
      "maxLength": 300,
      "description": "A path the upload result offered, e.g. game/play.html."
    },
    "version": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
set_entry annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
set_cover — Set the cover art
Advertised by the server during the last successful anonymous check.

Upload the square cover used for the cabinet, the sharing card and the coin image. PNG, JPEG, WebP or GIF up to 4 MB.

set_cover input schema
{
  "type": "object",
  "required": [
    "game",
    "key",
    "image_base64"
  ],
  "properties": {
    "key": {
      "type": "string"
    },
    "game": {
      "type": "string"
    },
    "image_base64": {
      "type": "string",
      "description": "The image, base64 encoded."
    }
  },
  "additionalProperties": false
}
set_cover annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
set_trailer — Set the trailer
Advertised by the server during the last successful anonymous check.

Upload the MP4 played when the experience's link is shared. Without one the platform builds an animated title card from the cover instead.

set_trailer input schema
{
  "type": "object",
  "required": [
    "game",
    "key",
    "video_base64"
  ],
  "properties": {
    "key": {
      "type": "string"
    },
    "game": {
      "type": "string"
    },
    "video_base64": {
      "type": "string",
      "description": "The MP4, base64 encoded."
    }
  },
  "additionalProperties": false
}
set_trailer annotations
{
  "readOnlyHint": false,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}
experience_status — Check an experience
Advertised by the server during the last successful anonymous check.
Advertised read-only

Where an experience stands: its details, its coin plan, any note from the reviewers, and every version with its status.

experience_status input schema
{
  "type": "object",
  "required": [
    "game",
    "key"
  ],
  "properties": {
    "key": {
      "type": "string"
    },
    "game": {
      "type": "string"
    }
  },
  "additionalProperties": false
}
experience_status annotations
{
  "readOnlyHint": true,
  "openWorldHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

30-day availability

Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.

Successful checks
1 of 1 (100%)
Average latency
289 ms
95th percentile latency
289 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 289 ms · metadata changed · 8 tool(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http arcade-fun-mcp https://arcade.fun/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add arcade-fun-mcp --url https://arcade.fun/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable arcade-fun-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "arcade-fun-mcp": {
      "url": "https://arcade.fun/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "arcade-fun-mcp": {
      "type": "streamableHttp",
      "url": "https://arcade.fun/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start arcade-fun-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "arcade-fun-mcp": {
      "type": "http",
      "url": "https://arcade.fun/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http arcade-fun-mcp https://arcade.fun/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "arcade-fun-mcp": {
      "url": "https://arcade.fun/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "arcade-fun-mcp": {
      "serverUrl": "https://arcade.fun/mcp"
    }
  }
}

Let your agent find its tools

Find servers like Arcade.fun MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.