首页 / 资讯中心 / 文章详情

如何把 Pascal Editor 的 MCP 服务器塞进自己进程:零子进程、零端口的内存传输实战

如何把 Pascal Editor 的 MCP 服务器塞进自己进程:零子进程、零端口的内存传输实战 ★ FEATURED ARTICLE
如何把 Pascal Editor 的 MCP 服务器塞进自己进程零子进程、零端口的内存传输实战【免费下载链接】editorOpen-source 3D architectural editor with a local CLI, MCP tools, and practical workflows for humans and AI agents.项目地址: https://gitcode.com/GitHub_Trending/editor93/editor当你自己的 Agent 框架要处理 3D 建筑建模任务时第一反应通常是另起一个 pascal-mcp 子进程走 stdio 对话。这条路能走通但会引入进程管理、端口占用和跨进程往返延迟。更轻的路径是Pascal Editor 的 pascal-app/mcp 能把服务器直接塞进你的 Node 或 Bun 进程模型当场获得整套建筑建模能力。选型判断三种传输方式的取舍MCP 协议里客户端和服务器的通信有三种走法。stdio 面向 Claude Desktop 这类配置式外部客户端HTTP 面向多客户端共享与跨机访问。Agent 和服务器同进程时内存传输的优势最直白不用管进程生命周期不怕端口占用也不留僵尸对外暴露的 tools、resources、prompts 与另外两种完全一致不用维护两套接入逻辑测试环境里秒级搭起客户端加服务器这对组合就能完整跑一轮对话代价同样直白这种模式只适合“Agent 和服务器同进程”的场景。需要多客户端共享同一份服务器或者客户端在机器外面就回 HTTP。跑通最小链路三个对象和一对端点整条链路用到的东西一个无头场景桥 SceneBridge一个服务器工厂 createPascalMcpServer再加 InMemoryTransport 造出的内存传输对。官方示例 embed-in-agent.ts 可以直接编译运行核心接入代码就这么多const bridge new SceneBridge() bridge.loadDefault() const server createPascalMcpServer({ bridge }) const [srvT, cliT] InMemoryTransport.createLinkedPair() const client new Client({ name: my-agent, version: 0.1.0 }) await Promise.all([server.connect(srvT), client.connect(cliT)])链路背后有两个细节。第一SceneBridge 不是新造的数据层它直接操作核心包的全局 store改动全部落在真实数据上所以撤销、重做开箱即用Zundo 把每次工具调用记成一个可回退的步骤。第二loadDefault() 会预先种好站点、建筑、楼层三层骨架客户端一启动就有东西可查实现细节在 bridge/scene-bridge.ts 里。链路打通后Agent 立刻拿到 30 多个建模工具入参全部经过 Zod 校验。get_scene、find_nodes、describe_node 负责看场景图create_level、create_room、create_wall 负责楼层、房间和墙体add_door、add_window、cut_opening 处理门窗与开洞place_item 放目录模型furnish_room 自动布置整间房apply_patch 一次原子提交批量增改删undo 和 redo 在时间轴上来回validate_scene 加 check_collisions 管校验与碰撞export_json 把场景落成 JSON。工具之外还有 5 个资源场景快照、建造工作流指南等和 3 个提示模板例如 from_brief 把一段文字需求转成增量补丁序列。跑通之后接进你自己的模型决策环内嵌的价值在于工具路由完全发生在你自己的代码里。第一步是把工具清单整体交给模型作为 function-calling 定义。模型返回工具名和参数你把它递给 callTool()再把返回值当作观察结果喂回去“思考 → 调用 → 观察”的循环就转起来了。中间没有进程所以“思考 → 调用 → 读场景 → 再思考”可以全挤在同一个事件循环里往返速度明显快于跨进程通信。官方示例走了一遍完整链路找到默认楼层、建一根 5 米的墙、一步撤销、校验场景、导出 JSON这套顺序可以直接改成你 Agent 的冒烟脚本。钩子注入自定义存储与工具审计基础能力不够时createPascalMcpServer 的选项对象留了三个扩展点类型定义见 server.ts持久层。给一个满足 SceneStore 接口的存储实现save、load、list、delete 四个动作服务器自动解锁 save_scene、load_scene、list_scenes 这类持久化能力。不想自己写的话包里带了一个现成的 SQLite 工厂 createSceneStore()参考 storage/index.ts想把数据放进 Supabase 或自研数据库实现同一套接口即可客户端零改动。执行包裹。executeTool 钩子给每次工具调用套一层壳你能拿到 name、AbortSignal 和原始执行函数审计日志、耗时统计、权限拦截都往这里塞const server createPascalMcpServer({ bridge, store: await createSceneStore(), executeTool: ({ name, execute }) { console.log([audit] ${name}) return execute() }, })操作层。想重写整套场景操作的行为把 operations 对象整个换掉即可上面这层工具注册逻辑不受影响。无头环境的边界与暗坑坐标是右手系X/Z 铺在地面平面Y 向上长度用米角度用弧度。二维点 [x, z] 能直接填进世界坐标省一步换算。如果你的 MCP 和编辑器共用同一份数据目录写入会附带版本核对。撞车时返回 live_sync_version_conflict用 load_scene 把状态重新对齐再往下走。无头模式不是全功能环境。GLB 导出依赖浏览器渲染器无头环境里调它只会拿到 not_implementedanalyze_floorplan_image 这类视觉工具要求宿主提供 sampling 能力。还有一个容易忽略的点无头运行下 dirtyNodes 这类脏标记只增不减盯着内存或想做可观测性时用 flushDirty() 清一遍。想动手试最快的方式是在仓库里执行 bun run packages/mcp/examples/embed-in-agent.ts客户端与服务器的完整对跑一条命令就结束剩下的事就是把 LLM 决策环换成你自己的。【免费下载链接】editorOpen-source 3D architectural editor with a local CLI, MCP tools, and practical workflows for humans and AI agents.项目地址: https://gitcode.com/GitHub_Trending/editor93/editor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站