DWG MCP服务器
DWG MCP Server是一个MCP服务器,用于使用AI代理和助手检查AutoCAD DWG文件。 它提供对作为可查询对象的图形内容的只读访问。 代理可以打开DWG、检查可用类型、按句柄获取对象以及查询属性、范围和引用。
快速开始
从您选择的MCP客户端使用DWG MCP服务器。 npm包启动已发布的Docker镜像。
法典
codex mcp add dwg-mcp \
--env DWG_MCP_HOST_FOLDERS=/absolute/path/to/your/dwg/folder \
-- npx -y @dmytro-prototypes/dwg-mcp-server或者简单地说
codex mcp add dwg-mcp -- npx -y @dmytro-prototypes/dwg-mcp-server克劳德
claude mcp add --scope user --transport stdio --env DWG_MCP_HOST_FOLDERS=/absolute/path/to/your/dwg/folder dwg-mcp -- npx -y @dmytro-prototypes/dwg-mcp-server光标
{
"mcpServers": {
"dwg-mcp": {
"command": "npx",
"args": ["-y", "@dmytro-prototypes/dwg-mcp-server"],
"env": {
"DWG_MCP_HOST_FOLDERS": "${workspaceFolder}"
}
}
}
}DWG文件只能从允许的文件夹中打开。 集 DWG_MCP_HOST_FOLDERS 到一个或多个由以下内容分隔的绝对主机文件夹 ;.
外露工具
| 工具 | 目的 |
|---|---|
dwg.open_file | 从绝对路径打开DWG或 file:// URI并返回 documentId. |
dwg.close_file | 关闭打开的文档并释放其工作进程。 |
dwg.list_types | 列出后端已知的全局支持的DWG类型。 |
dwg.list_file_types | 仅列出特定打开的DWG中存在的类型。 |
dwg.describe_type | 描述支持的类型,包括其属性和默认投影。 |
dwg.get_objects | 按句柄获取特定对象,保留请求的顺序并报告丢失的句柄。 |
dwg.query_objects | 使用过滤器、作用域、关系遍历、排序、投影和分页查询对象。 |
典型的流程是:
- 打开一个文件
dwg.open_file. - 检查支持的或文件本地类型
dwg.list_types,dwg.list_file_types,或dwg.describe_type. - 使用以下命令获取已知句柄
dwg.get_objects或使用以下命令搜索图形dwg.query_objects. - 结束会话
dwg.close_file.
建筑
运行期模型
在打包部署中,DWG MCP Server是一个用Python实现的stdio MCP服务器,通常在Linux容器内运行。 Python主机公开MCP工具,验证文件访问,并管理文档会话。
每 dwg.open_file 调用启动一个专用的Rust dwg-worker 处理该DWG并返回主机端 documentId. 所有后续的文件范围调用都使用该文档id。 dwg.close_file 终止该会话的工作进程。
Worker和查询模型
Rust worker在stdin和stdout上使用换行符分隔的JSON。 当它通过LibreDWG打开DWG时,它首先构建一个内存中的索引文档。 前期索引步骤是设计的核心:服务器在打开文件时支付一次费用,然后根据索引回答后续请求,而不是每次重新扫描DWG。
索引模型存储对象句柄、种类、类型名称、泛型类型、摘要和完整属性,以及派生块、布局和空间成员资格。 它还存储支持的类型元数据,如别名、默认投影和属性定义。
当您请求完整的对象记录时,响应还包括以下项下的派生成员资格 extendedData,包括容器块、布局以及已知的模型或图纸空间。
dwg.get_objects 是通过句柄直接查找。 dwg.query_objects 运行句柄、类型、泛型类型、种类、精确属性值、块、布局和空间的索引,然后应用过滤器、作用域、关系遍历、排序、投影和分页。 这就是在打开的图形上对块、图层、布局、参照和相关对象进行查询的原因。
通道和包装
服务器接受绝对本地路径或 file:// 仅限URI。 如果MCP客户端公开根,则打开的DWG必须留在这些根中。 如果 DWG_MCP_HOST_FOLDERS 如果已配置,打开的DWG也必须位于其中一个允许的文件夹中。
Docker包装器以只读方式将这些主机文件夹挂载到容器中,并将相同的文件夹列表转发给Python主机。 Docker镜像本身分三个阶段构建:LibreDWG、Rust worker和最终的Python运行时镜像。
从源代码构建和测试
本地来源构建使用供应商 third_party/libredwg 默认情况下为子模块。
先决条件
- 防锈工具链
- Python 3.11或更新版本
- Docker,如果你想构建或运行容器镜像
- 基于macOS或Linux的本地LibreDWG自动工具(
autoreconf,aclocal,automake,autoconf,make)
独自创立
git submodule update --init --recursive
bash scripts/build-libredwg.sh构建和测试
cargo test --workspace
bash scripts/run-e2e-tests.sh在本地运行MCP主机
Python主机查找 dwg-worker 在...之下 target/release 或 target/debug. 如果您希望明确发布版本:
cargo build -p dwg-worker --release然后运行MCP主机:
PYTHONPATH=server/src python3 -m dwg_mcp_server如果worker二进制文件位于其他地方,则设置 DWG_WORKER_BIN 对于该可执行文件。
使用Docker构建和运行
塑造形象:
bash scripts/build-docker-mcp-server.sh运行服务器并以只读方式公开特定的主机文件夹:
DWG_MCP_HOST_FOLDERS="$HOME/Documents;$HOME/Desktop/dwg" \
bash scripts/run-docker-mcp-server.sh默认情况下,Docker启动器公开 ~/Documents.
清洁重建
删除本地构建工件、Python缓存和本地Docker映像:
bash scripts/clean-build-artifacts.sh还要擦除LibreDWG构建下的主机 third_party/libredwg:
bash scripts/clean-build-artifacts.sh --with-libredwg许可证
此项目根据GNU通用公共许可证v3.0获得许可。 看 LICENSE 获取完整的许可证文本。
