Repository navigation
Replies: 2 comments 1 reply
|
你这份定位是对的(空 我维护一个跑 Pi 生态 MCP 适配器的桥,为此对着上游做过一份兼容矩阵。里面明确记着一条已知差异: 今天真正能让 codegraph 指对项目的,是绕开 roots 这一步——你自己列的解析顺序里第 3 步就是出路:
也就是按工作区配一个 server 实例,把项目路径显式写进启动参数: - id: codegraph-projectA
name: '@deepseek-ai/dsh-mcp-client'
config:
serverName: codegraph
transport: stdio
command: codegraph
args: ['serve', '--mcp', '--path', '/Users/你/Documents/code/private-aiagentos']配合项目级配置分层(把这段放在项目自己的配置里而不是用户级),每个工作区起自己的那一份,路径就跟着工作区走了。这不优雅,但它绕开的正是缺失的那个握手。 (顺带: 边界说清楚:
你这个 upstream issue 我认为提得很准,尤其是把 codegraph 的五步解析顺序列出来——它同时证明了"缺哪一步"和"从哪一步能绕"。 利益相关:我维护 pi2dsh, |
|
确认了: 两个务实绕法1. 单工作区:给 MCP server 配 stdio 配置里有 2. 多工作区:如果 codegraph 的工具 schema 支持项目参数,调用时显式带上;否则目前只能接受「切换工作区要重启 MCP server」。多工作区场景本质需要 roots 支持,绕法救不了。 关于让上游支持MCP 规范里 (基于 |
Uh oh!
There was an error while loading. Please reload this page.
环境
@deepseek-ai/dshv0.1.0-rc.7),dsh-mcp-client插件(@deepseek-ai/dsh-mcp-client/lib/index.js)codegraph serve --mcp)现象
在一个 DSH 实例内切换工作区时,
codegraph_explore等工具的默认项目始终指向 DSH 宿主进程的启动目录,而不是当前会话的工作区。实测:DSH 宿主从
~/Documents/code/DataNex/scripts启动(工作区为~/Documents/code/private-aiagentos),codegraph MCP 默认项目解析到 DataNex(Rust 项目),本项目的.codegraph/索引只有显式传projectPath时才会被打开。根因(源码证据)
1. dsh-mcp-client 建立连接时不声明任何 MCP capabilities,也不发送 workspace 信息:
rootUri/workspaceFolders(initialize 参数)capabilities.roots,因此 codegraph 不会发起roots/listcwd(config.cwd),即 DSH 宿主进程启动目录,与当前会话 workspace 无关2. codegraph v1.5.0 的默认项目解析顺序(
mcp/session.jshandleInitialize + resolveRoot):initialize带rootUri→ 用fileUriToPath(rootUri)initialize带workspaceFolders[0].uri→ 用之--pathcapabilities.roots→ 启动后roots/list拉取第一个 rootprocess.cwd()向上找最近的.codegraph/(findNearestCodeGraphRoot)DSH 对 1/2/4 全部不提供(3 也由配置决定),于是永远走到第 5 条 = 宿主启动目录。
影响
projectPath绕开,agent 工作流容易漏传。期望行为
codegraph 默认项目应跟随 DSH 的当前会话 workspace:
capabilities: { roots: { listChanged: false } },并实现roots/list处理器返回当前 workspace root(file://URI);codegraph 侧已原生支持(clientSupportsRoots → roots/list 优先于 cwd)。rootUri发送(LSP 风格,codegraph 最高优先级)。--path。复现步骤
cd A && dsh web),工作区切换到项目 B;codegraph_explore(不传 projectPath);lsof -p <codegraph-mcp-pid> | grep cwd确认其 cwd = 项目 A。建议
在 dsh-mcp-client 中补充 MCP workspace 集成:声明 roots capability 并响应
roots/list(返回当前ctx.sessionsworkspace 根),使 DSH 的 workspace 概念贯通到 MCP 层。codegraph 端无需改动。相关文件
@deepseek-ai/dsh-mcp-client/lib/index.js(new Client(..., { capabilities: {} })、StdioClientTransport({ cwd }))lib/dist/mcp/session.js(handleInitializerootUri/workspaceFolders/--path 分支、roots/list、cwd 兜底)、lib/dist/mcp/directory.js(findNearestCodeGraphRoot)All reactions