经典街机游戏服务器

一个允许在MCP兼容主机上浏览和玩来自archive.org的经典街机游戏的服务器,通过严格的版权验证系统确保游戏合法性。

  • by idosal
  • TypeScript
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 idosal/mcp-apps-arcade

使用说明

示例:Arcade服务器

MCP Apps服务器,让您浏览和玩经典街机游戏 archive.org 直接在启用MCP的主机中。

法律免责声明

这是一个技术演示,而不是一个分发平台。

  • 游戏在运行时直接从archive.org的嵌入系统中获取
  • 我们不托管、分发或存储游戏内容
  • 只能加载具有验证分发权限的游戏
  • 未经验证权限的游戏被阻止

权限验证的工作原理

服务器使用 严格的核查制度:

  1. 管理许可名单:游戏在 allowlist.ts 拥有外部记录的源网址(出版商公告、官方网站)的分发权。每个条目都包含法律依据。

  2. 元数据验证:对于不在允许列表中的游戏,我们检查archive.org元数据中的明确权利指标(共享软件、免费软件、公共领域、知识共享)。

只有经过验证的权限才允许游戏。 未知或受限游戏被阻止。

有哪些游戏可供选择?

  • 共享软件:明确免费发布的第一集/演示(DOOM、Duke Nukem、指挥官Keen、Wolfenstein 3D等)
  • 免费软件:由发行商正式免费发行的游戏(《Tyrian 2000》、《Jill of the Jungle》)
  • 公共领域:版权已过期或被放弃的游戏

看 allowlist.ts 查看完整的清单和法律文件。

模拟器运行时

Archive.org使用 乳化性 系统在浏览器中运行游戏。这包括:

仿真器 许可证 用于
DOSBox GPL-2.0+ DOS游戏
EM-DOSBox GPL-2.0+ DOSBox通过Emscripten编译为JavaScript
多机种街机模拟器 BSD-3条款/GPL-2.0+ 街机游戏

我们与这些模拟器的关系:

  • 我们做 不 分发、捆绑或修改任何仿真器代码
  • 仿真器在运行时直接从archive.org获取
  • 我们只使用proxy-archive.org的嵌入系统,该系统托管这些模拟器的自己的副本
  • 临时内存缓存(见下文)纯粹是为了CORS解决方法

许可证兼容性说明:

MCP Apps SDK是Apache-2.0许可的。没有许可证冲突,因为:

  1. 街机服务器 不 捆绑、包含或链接GPL模拟器代码
  2. 模拟器在运行时从archive.org获取(就像加载任何CDN资源一样)
  3. 模拟器在用户的浏览器中执行,这是一个单独的执行上下文
  4. 这类似于嵌入YouTube视频——嵌入页面不是YouTube播放器的衍生产品

如果你创建了一个修改后的版本 捆绑包 在将仿真器代码引入发行版时,您必须遵守GPL-2.0+条款(copyleft,源代码可用性)。

脚本重新托管(CORS解决方案)

服务器临时缓存archive.org的 emulation.min.js 仅在内存中执行脚本(不持久化到磁盘),以绕过沙盒iframe中的浏览器安全限制。这是技术上的需要,而不是再分配:

  • 缓存使用 Cache-Control: no-store 标头
  • 服务器重新启动时清除缓存
  • 脚本在第一次请求时从archive.org获取
  • 除更换外,不进行任何修改 import() 随着 loadScript() 为了iframe兼容性

添加新游戏

要将游戏添加到列表中,您必须提供:

  1. 源URL:指向记录发行权的权威来源的链接(出版商网站、新闻稿、官方公告)
  2. 法律依据:明确解释为什么游戏可以合法发行
  3. 验证:确认archive.org标识符有效

如有疑问,请勿添加游戏。

概述

此示例演示了服务 外部HTML内容 作为MCP应用程序资源。该资源是一个静态加载器,它使用MCP Apps协议接收工具参数,然后从服务器端点获取处理后的游戏HTML。这种模式允许同一资源根据工具输入显示不同的游戏。

关键技术:

  • MCP Apps协议握手(ui/initialize → ui/notifications/tool-input)动态接收游戏ID
  • 每个游戏ID的服务器端HTML获取和处理
  • <base href> 用于解析相对于archive.org的相对URL的标签
  • baseUriDomains CSP元数据允许基本标记
  • 重写ES模块 import() 经典 <script src> 加载(用于srcdoc-iframe兼容性)
  • 绕过沙盒iframe中CORS限制的本地脚本端点
  • 权限检查 在加载游戏之前验证分发权限

关键文件

入门指南

npm install
npm run dev

服务器启动于 http://localhost:3002/mcp 默认情况下。设置 PORT 环境变量来改变它。

MCP客户端配置

{
  "mcpServers": {
    "arcade": {
      "url": "http://localhost:3002/mcp"
    }
  }
}

工具

工具 说明 UI
search_games 搜索经过验证的共享软件/免费游戏 否
get_game_by_id 加载并玩经过验证的版权游戏 是

search_games参数

参数 类型 默认值 说明
searchTerm string - 游戏名称或搜索词
maxResults number 10 最大结果(1-50)

get_game_by_id参数

参数 类型 默认值 说明
gameId string - 游戏的Archive.org标识符

运作原理

1. Host calls search_games → Server searches allowlist + archive.org → Returns verified games only
2. Host calls get_game_by_id → Server verifies rights status
3. If rights verified → Tool returns success
4. If rights NOT verified → Tool returns error, game blocked
5. Host reads resource → Gets static loader with MCP Apps protocol handler
6. View performs ui/initialize handshake with host
7. Host sends tool-input with gameId → View fetches /game-html/:gameId
8. Server fetches embed HTML from archive.org and processes it:
   - Removes archive.org's <base> tag
   - Injects <base href="https://archive.org/"> for URL resolution
   - Rewrites ES module import() to <script src> loading
   - Fetches emulation.min.js, patches it, serves from local endpoint
   - Injects layout CSS for full-viewport display
9. Game runs: emulator loads ROM, initializes MAME, game is playable

为什么要处理?

Archive.org的游戏嵌入页面使用ES模块 import() 用于加载仿真引擎。在 srcdoc iframe(由MCP主机使用), import() 失败,因为iframe具有 null 起源。服务器通过以下方式解决此问题:

  1. 获取 emulation.min.js 服务器端 并替换 import() 随着 window.loadScript()
  2. 提供已修补的脚本 从本地Express端点(/scripts/emulation.js)
  3. 使用 <script src> 它不受CORS限制,不像 fetch() 或 import()

可用游戏(18个已验证的游戏)

所有游戏都有经过验证的发行权。看 allowlist.ts 法律文件。

id软件共享软件

标识符 标题 年份
doom-play 厄运 1993
msdos_DOOM_1993 厄运(MS-DOS) 1993
wolfenstein-3d 《德军总部3D》 1992
w3d-box 《德军总部3D》v1.4 1993
commander_keen_volume_one_131 《基恩指挥官:火星上的马龙》1990
heretic-dos 异端 1994

Apogee/3D Realms共享软件

标识符 标题 年份
duke-nukem2-sw 杜克核武器II 1993
3dduke13SW-altcontrols 《Duke Nukem 3D》 1996年
Bs-aog-sw1 布莱克·斯通:《黄金异形》1993
rise-of-the-triad-the-hunt-begins-version-1.0 三合会的崛起 1994
biomenace1-sw 生物威胁 1993
Crystal-cave-sw1 水晶洞穴 1991
monster-bash1-sw 怪物狂欢 1993
halloween_harry_shareware 万圣节哈利 1993

Epic MegaGames共享软件/免费软件

标识符 标题 年份
Epic-pinball-sw1 史诗弹珠台 1993
radsw20 根:虚空之外 1995
msdos_Tyrian_2000_1999 Tyrian 2000(免费软件) 1999
jill-of-the-jungle-0mhz 丛林中的吉尔(免费软件) 1992