Docs
让大模型调用本地海图能力:东星海图的 CLI 思路
本地 C/C++ 海图能力如何安全交给大模型:从 C ABI 固定边界、eastarmap_cli.exe 的 JSON 命令契约,到 Python MCP Server 接入客户端。
现在,大模型已经可以参与很多工作流。但对海图系统来说,一个关键问题是:本地海图能力怎样安全、稳定地交给大模型调用?东星海图采用的思路是:先把本地能力做成命令行,再通过 MCP 暴露给大模型客户端。
第一步:本地能力不直接暴露给脚本
东星海图的底层能力来自 C/C++ 海图模块。这类能力不适合直接把 C++ 类、异常或内存结构暴露给脚本层,因此底层通过 C ABI 形成稳定接口,例如 ogc_chart_c_api.dll 和相关 sdk_c_api 头文件。这样做的目的,是把底层能力边界固定下来。
第二步:用 eastarmap_cli.exe 形成命令行契约
在 C ABI 之上,eastarmap_cli.exe 负责把能力变成可调用命令,默认输出 JSON,适合被程序解析。常见工具包括:
- health:检查运行环境
- version:返回版本和 ABI 绑定信息
- capabilities:说明支持哪些能力
- s57parse:解析 S57 海图数据
- s57render:渲染海图图片
这样,大模型不需要理解底层 DLL,只需要通过 MCP 间接调用这些命令。
第三步:用 Python MCP Server 接到大模型客户端
Python MCP Server 负责接收工具调用、校验参数、调用 CLI、解析 JSON,再把结果返回给 Trae、Kilo 等客户端。首版推荐通过 CLI 间接复用 C ABI,而不是让 Python 直接调用 DLL,这样更容易定位问题,也能减少跨语言内存和异常边界风险。
为什么这件事重要
这条链路让本地海图能力可以被大模型安全调用。例如,大模型可以先调用 health 查看环境是否可用,再调用 capabilities 确认可用工具,之后按需使用 s57parse 或 s57render。同时,路径白名单、超时和结构化错误也可以作为安全边界,避免随意读取或输出文件。

东星海图的 CLI/MCP 思路,是把本地 C/C++ 海图能力变成可验证的 JSON 命令,再交给大模型按工具方式调用。

