Commodore 64旗舰版——MCP服务器
⚠️ Alpha发布 这是一个alpha版本。它已经用我自己的Ultimate板和家庭网络设置进行了测试,但我还没有广泛测试所有配置组合和API端点。将此视为玩耍和娱乐的起点!欢迎投稿、错误报告和反馈。
A. 模型上下文协议(MCP) 服务器 Commodore 64终极版 --官方现代Commodore 64电脑。该服务器使Claude、ChatGPT和Cursor等人工智能助手能够通过Ultimate的REST API控制您的C64。
______________________________________________________________________
🎯 这是什么?
Commodore 64终极版
Commodore 64 Ultimate具有USB存储、以太网、HDMI输出和用于远程控制的强大REST API。这个MCP服务器利用REST API让人工智能助手直接和C64交互。
也兼容
此服务器还可以与来自的其他产品配合使用 吉迪恩的逻辑:
| 设备 | 描述 |
|---|---|
| 终极64 | Gideon's Logic公司最初的基于FPGA的Commodore 64主板。 |
| 终极II+ | 适用于原始Commodore 64或C128的墨盒,可添加USB存储、以太网、驱动器模拟等。 |
所有Ultimate设备都公开了此MCP服务器使用的相同REST API。
这个MCP服务器做什么?
此MCP服务器充当 桥 在人工智能助手和Commodore 64 Ultimate(或其他Ultimate设备)之间,将自然语言命令转换为API调用。有了它,您可以:
- 加载并运行C64程序(PRG、SID、MOD文件)
- 直接读写C64内存
- 安装并创建磁盘映像(D64、D71、D81)
- 控制驱动器仿真
- 管理设备配置
- 流式音频/视频(仅限Ultimate 64)
______________________________________________________________________
✨ 特性
- 37工具 涵盖所有主要的Ultimate设备功能
- 双重运输模式:STDIO(本地)和SSE(远程/托管)
- Docker支持:易于集装箱化部署
- 动态连接:在运行时设置C64连接
- 通过base 64/url上传PRG:从任何地方运行程序
- 缺省巩固安全:非根Docker容器
______________________________________________________________________
📋 可用工具
连接管理
| 工具 | 说明 |
|---|---|
ultimate_set_connection | 设置Ultimate C64设备的主机名和端口 |
ultimate_get_connection | 获取当前连接详细信息 |
ultimate_version | 获取REST API版本 |
程序执行
| 工具 | 说明 |
|---|---|
ultimate_run_program | 运行已存储在Ultimate文件系统(USB/SD)上的程序 |
ultimate_load_program | 将程序加载到内存中而不运行它 |
ultimate_run_prg_binary | 从外部源上传并运行PRG --接受本地文件路径、base64数据或URL(详情) |
ultimate_run_cartridge | 加载并运行盒式文件(.crt) |
音频播放
| 工具 | 说明 |
|---|---|
ultimate_play_sid | 播放SID音乐文件(带有可选歌曲编号) |
ultimate_play_mod | 播放Amiga MOD音乐文件 |
存储器操作
| 工具 | 说明 |
|---|---|
ultimate_read_memory | 从C64内存地址读取最多256个字节 |
ultimate_write_memory | 将十六进制数据写入C64内存地址 |
ultimate_write_memory_binary | 将二进制文件内容写入内存 |
驱动器和磁盘管理
| 工具 | 说明 |
|---|---|
ultimate_mount_disk | 在驱动器a-D上安装磁盘映像(D64/D71/D81) |
ultimate_unmount_disk | 从驱动器中卸载磁盘 |
ultimate_turn_drive_on | 打开虚拟驱动器 |
ultimate_turn_drive_off | 关闭虚拟驱动器 |
ultimate_set_drive_mode | 设置驱动类型:1541、1571或1581 |
ultimate_load_drive_rom | 将自定义ROM加载到驱动器中 |
ultimate_create_d64 | 创建新的D64磁盘映像(35或40个轨道) |
ultimate_create_d71 | 创建新的D71磁盘映像 |
ultimate_create_d81 | 创建新的D81磁盘映像 |
ultimate_create_dnp | 创建新的DNP磁盘映像 |
机器控制
| 工具 | 说明 |
|---|---|
ultimate_reset_machine | 执行C64重置 |
ultimate_soft_reset | 软复位(加载空程序) |
ultimate_reboot_device | 重新启动Ultimate设备 |
ultimate_power_off | 关闭Ultimate设备的电源 |
ultimate_get_machine_info | 获取机器信息和状态 |
ultimate_get_machine_state | 获取当前机器状态 |
配置
| 工具 | 说明 |
|---|---|
ultimate_get_config_categories | 列出所有配置类别 |
ultimate_get_config_category | 获取类别中的设置 |
ultimate_get_config_item | 获取特定的设置值 |
ultimate_set_config_item | 设置配置值 |
ultimate_bulk_config_update | 一次更新多个设置 |
ultimate_save_config | 将配置保存到闪存 |
ultimate_load_config | 从闪存加载配置 |
ultimate_reset_config | 重置为出厂默认值 |
文件操作
| 工具 | 说明 |
|---|---|
ultimate_get_file_info | 获取Ultimate上文件的相关信息 |
流媒体(仅限终极64)
| 工具 | 说明 |
|---|---|
ultimate_start_stream | 启动视频、音频或调试流媒体 |
ultimate_stop_stream | 停止活动流 |
______________________________________________________________________
📦 远程运行程序
这 ultimate_run_prg_binary 该工具旨在运行以下PRG文件 未存储在Ultimate设备上这对于托管部署至关重要,在托管部署中,AI助手需要从外部源上传和运行程序。
三种输入法
| 参数 | 用例 |
|---|---|
prg_data_base64 | AI将PRG作为base64嵌入请求中——非常适合小程序或AI生成的代码 |
url | 服务器从任何HTTP/HTTPS URL下载PRG——非常适合托管程序存档 |
file_path | 从服务器的本地文件系统读取——用于服务器端程序存储 |
每次调用只应提供一个参数。
示例:Base64编码的PRG
AI可以将编译后的PRG程序编码为base64并直接发送:
{
"name": "ultimate_run_prg_binary",
"arguments": {
"prg_data_base64": "AQgLCJ4ACJ4ACQoAHgoAoCAKgBQKgP8f..."
}
}这对于人工智能生成的演示来说尤其强大——人工智能可以:
- 编写6502汇编代码
- 编译它(如果工具可用)或直接生成机器代码
- 将生成的PRG编码为base64
- 将其发送到实际的C64硬件上运行
示例:URL下载
指向互联网上任何地方托管的PRG:
{
"name": "ultimate_run_prg_binary",
"arguments": {
"url": "https://csdb.dk/getinternalfile.php/12345/game.prg"
}
}MCP服务器下载文件并将其上传到Ultimate设备。
示例:服务器本地文件
如果PRG位于MCP服务器的文件系统上:
{
"name": "ultimate_run_prg_binary",
"arguments": {
"file_path": "/workspace/demos/mydemo.prg"
}
}注: 对于Ultimate设备存储(USB、SD卡)上已有的文件,请使用 ultimate_run_program 相反。______________________________________________________________________
🚀 快速开始
先决条件
- Python 3.11+
- A. Commodore 64终极版 (或终极64/II+/II+L)在您的网络上
- Ultimate的REST API必须是可访问的(默认情况下启用)
安装
# Clone the repository
git clone https://github.com/yourusername/ultimate64-mcp.git
cd ultimate64-mcp/mcp_hosted
# Install dependencies
pip install -r requirements.txt运行服务器
选项1:环境变量(推荐)
# Set your Ultimate device's IP address
export C64_HOST="192.168.1.64"
# Start the server
python mcp_ultimate_server.py选项2:命令行参数
python mcp_ultimate_server.py http://192.168.1.64选项3:动态连接
在没有配置主机的情况下启动,稍后通过 ultimate_set_connection 工具:
python mcp_ultimate_server.py
# Server starts, then use ultimate_set_connection tool to connect服务器运行在 http://0.0.0.0:8000 默认情况下。
______________________________________________________________________
🔌 运输方式
SSE模式(默认)--用于托管/远程访问
默认模式使用 服务器发送事件(SSE) 用于持久HTTP连接。这非常适合:
- 托管部署(云、VPS)
- 基于网络的人工智能助手
- 多客户端场景
终点:
| 端点 | 方法 | 描述 |
|---|---|---|
/sse | GET | 建立SSE连接,返回会话ID |
/messages?session_id={id} | POST | 发送JSON-RPC消息 |
/upload-prg | POST | 直接PRG上传端点(对于大文件绕过MCP) |
SSE连接流程:
- 客户端连接到
GET /sse - 服务器发送初始事件
session_id和端点URL - 客户端向发送JSON-RPC请求
POST /messages?session_id={id} - 响应通过SSE返回
STDIO模式——供本地使用
对于本地MCP客户端(如Cursor或Claude Desktop),请使用STDIO模式:
python mcp_ultimate_server.py --stdio
# Or with explicit host:
python mcp_ultimate_server.py http://192.168.1.64 --stdio______________________________________________________________________
🐳 Docker部署
塑造形象
cd mcp_hosted
docker build -t ultimate64-mcp .运行容器
# With environment variable
docker run -p 8000:8000 -e C64_HOST=192.168.1.64 ultimate64-mcp
# With custom port to Ultimate device (in case C64 is behind NAT/port fowards)
docker run -p 8000:8000 -e C64_HOST=http://192.168.1.64:6464 ultimate64-mcp
# Start without connection (configure later via tool)
docker run -p 8000:8000 ultimate64-mcp环境变量
| 变量 | 描述 | 示例 |
|---|---|---|
C64_HOST | Ultimate设备的IP地址或URL | 192.168.1.64 或 http://myC64.domain.com:6464 |
______________________________________________________________________
⚙️ 客户端配置
光标IDE
添加到光标MCP设置(.cursor/mcp.json):
对于SSE(远程)模式:
{
"mcpServers": {
"ultimate64-mcp": {
"transport": {
"type": "sse",
"url": "http://your-server-address:8000/sse"
}
}
}
}对于STDIO(本地)模式:
{
"mcpServers": {
"ultimate64-mcp": {
"command": "python",
"args": ["/path/to/mcp_ultimate_server.py", "--stdio"],
"env": {
"C64_HOST": "192.168.1.64"
}
}
}
}克劳德桌面版
添加到您的Claude Desktop配置中:
{
"mcpServers": {
"ultimate64-mcp": {
"command": "python",
"args": ["/path/to/mcp_ultimate_server.py", "--stdio"],
"env": {
"C64_HOST": "192.168.1.64"
}
}
}
}______________________________________________________________________
📡 直接PRG上传端点
除了MCP ultimate_run_prg_binary 工具,服务器公开了一个用于上传PRG文件的直接REST端点。这有助于:
- 大文件 (>100KB),其中MCP协议开销不理想
- 非MCP客户端 想要直接上传程序
- 自动化脚本 和CI/CD管道
- Web应用程序 与Ultimate设备集成
端点
POST /upload-prg支持的内容类型
1.多部分表单上传 (multipart/form-data)
curl -X POST http://localhost:8000/upload-prg \
-F "file=@myprogram.prg"2.原始二进制文件上传 (application/octet-stream)
curl -X POST http://localhost:8000/upload-prg \
-H "Content-Type: application/octet-stream" \
--data-binary @myprogram.prg3.Base64 JSON上传 (application/json)
curl -X POST http://localhost:8000/upload-prg \
-H "Content-Type: application/json" \
-d '{"prg_data_base64": "AQgLCJ4A..."}'响应
{
"success": true,
"message": "Running PRG (1234 bytes)",
"size_bytes": 1234,
"response": {"message": "Program started"}
}______________________________________________________________________
🔧 配置文件
这 config.json 文件提供了默认设置:
{
"ultimate": {
"base_url": "http://192.168.1.64:6464",
"timeout": 30,
"retry_attempts": 3
},
"logging": {
"level": "INFO",
"format": "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
}
}注意:环境变量和命令行参数优先于 config.json.______________________________________________________________________
🛠️ API 参考
JSON-RPC协议
服务器实现 模型上下文协议(MCP) 规范。所有通信都使用JSON-RPC 2.0。
示例:列表工具
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/list",
"params": {}
}示例:调用工具
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "ultimate_play_sid",
"arguments": {
"file": "/Usb0/Music/Commando.sid",
"song_number": 1
}
}
}______________________________________________________________________
🔐 安全考虑
- Docker容器以非root用户身份运行
- Ultimate设备API需要网络访问
- 考虑在反向代理后面运行公共部署
- 使用环境变量进行敏感配置
______________________________________________________________________
🐛 故障排除
连接问题
- 验证Commodore 64 Ultimate是否已通电并连接到网络
- 在终极菜单(F2)中检查IP地址→ 网络设置)
- 确保REST API已启用(默认情况下为启用)
- 测试连接性:
curl http:///v1/version
“未配置C64主机”错误
这意味着没有设置连接。要么:
- 设置
C64_HOST环境变量 - 将URL作为命令行参数传递
- 使用
ultimate_set_connection启动后的工具
大文件上传
对于大于~100KB的PRG文件,请考虑:
- 使用
/upload-prg直接REST端点 - 使用
url参数在ultimate_run_prg_binary让服务器获取文件
______________________________________________________________________
📜 许可证
MIT许可证——见 许可证 了解详情。
______________________________________________________________________
🙏 致谢
- 准将 --感谢您将Commodore 64带回官方Commodore 64Ultimate,特别是Christian Simpson,又名PeriFractic
- Anthropic --对于模型上下文协议规范
- Commodore 64社区 --自1982年以来一直保持平台的活力
______________________________________________________________________
🔗 链接
______________________________________________________________________
Have fun with your C64!
马丁 Bosschaart\ 📧 martijn@runstoprestore.nl
