ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

如何把 Pascal Editor 的 MCP 服务器嵌入自己的 Agent 框架:InMemory 实战指南

如何把 Pascal Editor 的 MCP 服务器嵌入自己的 Agent 框架:InMemory 实战指南 如何把 Pascal Editor 的 MCP 服务器嵌入自己的 Agent 框架InMemory 实战指南【免费下载链接】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 Editor 的pascal-app/mcp包支持 InMemory 内嵌方式把整个 MCP 服务器装进你的 Node/Bun 进程不起子进程、不占端口、不依赖外部数据库Agent 在同一次运行里就能建墙、开门窗、摆家具、撤销重做并导出 JSON。拆成三个对象一次说清进程内装配MCPModel Context Protocol是一套让模型以标准方式调用工具、读取资源的协议客户端和服务器之间靠传输通信。内嵌场景只需要三个对象各管一事SceneBridge无头场景桥直连pascal-app/core的 Zustand store所有变更走真实 store所以撤销/重做天然可用。类比接线板——它把服务器接到真实车间而不是模拟车间。createPascalMcpServer服务器工厂接收bridge、store等选项返回装配好的McpServer。类比装配线——零件塞进去成品拿出来。InMemoryTransport内存传输对createLinkedPair()返回两个端点客户端与服务器各接一端即可对话。类比一根电话线——两头都在同一间屋子里。三者组合的价值在于stdio、HTTP、内存三种传输暴露的 tools / resources / prompts 完全一致选内存方式只是省掉进程边界因此同一套代码可以直接写进 Agent 框架的单测。跑通最小链路让 Agent 建起第一面墙官方示例 embed-in-agent.ts 给了可直接运行的参考核心就两段代码。import { Client } from modelcontextprotocol/sdk/client/index.js import { InMemoryTransport } from modelcontextprotocol/sdk/inMemory.js import { createPascalMcpServer, SceneBridge } from pascal-app/mcp const bridge new SceneBridge() bridge.loadDefault() // 预置 Site → Building → Level 三层结构 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)])loadDefault()在空 store 里种出 Site → Building → Level实现细节见 scene-bridge.tscreatePascalMcpServer的装配顺序见 server.ts。连接完成后调用工具就和调用本地函数一样const tools await client.listTools() const scene await client.callTool({ name: get_scene, arguments: {} }) // 查楼层 → 建 5 米墙 → 一步撤销 const levels await client.callTool({ name: find_nodes, arguments: { type: level } }) await client.callTool({ name: create_wall, arguments: { levelId, start: [0, 0], end: [5, 0] } }) await client.callTool({ name: undo, arguments: { steps: 1 } })示例文件里还串了validate_scene校验与export_json导出从查询到落盘一条链走完。盘点工具清单知道它替你做了什么内嵌后你的 Agent 立刻拥有 30 余个建筑建模工具全部经 Zod 校验变更操作由 Zundo 捕获为单个可撤销步骤。分组速览分组常用工具场景查询get_scene/get_node/describe_node/find_nodes/get_level_summary/measure结构建模create_story_shell/create_room/create_wall/create_level/create_roof/duplicate_level门窗开洞add_door/add_window/cut_opening家具布置place_item/furnish_room/set_zone批量变更apply_patchcreate/update/delete 原子提交先校验再落库校验导出validate_scene/verify_scene/check_collisions/export_json时间轴undo/redo完整参数与返回结构在 packages/mcp/README.md 的工具表里。除工具外服务器还暴露了 5 个资源如pascal://scene/current场景快照、pascal://agent/guide给 Agent 的建造规则和 3 个提示模板from_brief、iterate_on_feedback、renovation_from_photos把80㎡两居室这类文字需求转成增量修改序列。把工具表喂给 LLM闭上 ReAct 环内嵌的落点只有一个工具调用在你的代码里路由。listTools()返回的就是 MCP 工具定义名称、描述、输入 schema可直接映射成 LLM 的 function-calling 格式模型返回工具调用后再喂回callTool()const llmCall await llm.decide({ tools: tools.tools, message }) const result await client.callTool({ name: llmCall.name, arguments: llmCall.args, }) // result 作为观察结果喂回 LLM循环继续为什么这样接没有进程边界思考 → 调工具 → 读场景 → 再思考可以发生在同一事件循环里比 stdio 子进程少了进程启停与序列化开销单测里也能秒级拉起完整客户端-服务器对跑。拧动三个注入点把扩展做进骨架createPascalMcpServer的选项是官方预留的扩展位类型定义见 server.tsstore实现 SceneStore 接口save/load/list/delete/rename等注入后服务器自动注册save_scene、load_scene、list_scenes等持久化工具。包内置本地 SQLite 实现 createSceneStore也可换成 Supabase 或自研库。场景会话结束后把场景落盘下次运行直接加载。executeTool包装每一次工具调用拿到name、AbortSignal和execute回调。场景审计日志、耗时统计、按工具名做权限拦截。operations替换整套场景操作层operations/工具不再走默认实现。场景多场景协同、自定义提交策略或业务校验。const server createPascalMcpServer({ bridge, store: await createSceneStore(), // 本地 SQLite 持久化 executeTool: ({ name, execute }) { console.log([audit] ${name}) // 每次调用记一条审计 return execute() }, })过一遍避坑清单少走弯路坐标拿不准Pascal 是右手系X/Z 为地面平面、Y 朝上长度单位米、旋转弧度2D 平面点[x, z]直接映射世界坐标拿不准时先读 coordinate-conventions-demo.md。写入报版本冲突与编辑器共享数据目录时MCP 写入会做版本检查冲突返回live_sync_version_conflict——用load_scene重新加载再改。能力边界export_glb依赖浏览器渲染器无头模式返回not_implemented改用export_json视觉工具analyze_floorplan_image等要求客户端声明 sampling 能力否则直接调用会失败。内存悄悄涨无头模式下dirtyNodes会累积需要可观测性时调用bridge.flushDirty()排空。一条链收束全链路长这样new SceneBridge().loadDefault()→createPascalMcpServer({ bridge })→InMemoryTransport.createLinkedPair()→client.callTool(...)预置场景、装配工具、内存接线、函数级调用四步走完你的 Agent 就在一行箭头里拥有了完整建筑建模能力。更多生成公寓、照片转场景等工作流可看 packages/mcp/examples/ 目录。【免费下载链接】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),仅供参考
返回列表