如何修复新版本MCP不运行的问题
原因基本锁定了:不是端口问题,是编码问题 + 可能插件重复加载。
日志关键报错:
'ascii' codec can't decode byte 0xca
'utf8' codec can't decode byte 0xd3
这说明对方电脑的 Abaqus / Windows 环境里有中文路径、中文用户名、中文系统编码或中文状态文本,MCP v5 的 Socket Bridge 在处理 ping/status 时按 ascii/utf8 解码,结果遇到 GBK/ANSI 中文字节直接炸了。
另外这句也很关键:
registered Abaqus MCP GUI menu
registered Abaqus MCP GUI menu
registered Abaqus MCP GUI menu
说明可能同一个插件被加载了多次。
你让 Codex 这样修:
请修复 Abaqus MCP v5 socket bridge 在中文 Windows / Abaqus 环境下连接失败的问题。
日志报错包括:
1. 'ascii' codec can't decode byte 0xca
2. 'utf8' codec can't decode byte 0xd3
3. compat status write failed
4. socket closed before a complete message was received
判断原因:
Abaqus 2021+ 在中文 Windows 环境中,路径、状态文本、日志或 GUI 返回内容可能是 GBK/mbcs 编码,但当前 socket bridge 使用 ascii 或 utf8 强制解码,导致 ping/status 请求失败。
修复要求:
1. 所有 socket 接收内容统一使用安全解码:
- 优先 utf-8
- 失败后 fallback 到 mbcs
- 再失败 fallback 到 gbk
- 最后使用 errors='replace'
2. 所有 socket 返回 JSON 时,必须:
- json.dumps(..., ensure_ascii=True)
- 返回内容只用 ASCII 安全字符
- 禁止直接返回中文异常对象
- 禁止直接把 bytes 当 str 拼接
3. 兼容 Python2 / Abaqus旧环境:
- 不使用 Python3-only 写法
- 不直接使用 TimeoutError,必须兼容 socket.timeout
- str/unicode/bytes 处理必须兼容
4. compat status 写入失败时不能让 socket bridge 崩溃:
- 捕获异常
- 写入失败只记录日志
- 不影响 bridge 继续监听 127.0.0.1:48152
5. ping 方法必须返回最简单 ASCII JSON:
{"ok": true, "message": "pong"}
6. status 方法也必须返回 ASCII JSON,不要返回中文。
7. 检查插件是否重复注册菜单:
- 如果菜单已经注册,不要重复注册
- 避免 registered Abaqus MCP GUI menu 重复出现多次
8. 给出修改后的完整文件,并说明修改位置。
目标:
在中文 Windows、中文路径、Abaqus 2021/2022/2023/2024/2025 环境下,Start Socket Bridge 后,GUI 可以正常 ping 127.0.0.1:48152,不再出现 ascii/utf8 decode error。
临时解决法:
1. 用户电脑路径尽量不要有中文
2. 插件目录不要放中文路径
3. Abaqus工作目录不要有中文
4. 先删除重复插件副本,只保留一份最新版
5. 重启 Abaqus
6. 再点 Plug-ins > Abaqus MCP > Start Socket Bridge
一句话:Bridge启动了,但一收到 ping 就因为中文编码炸了;再加上插件可能重复加载。修 socket bridge 的编码兼容即可。