Skip to content

zed 使用新版获取不到tools #84

@soullifepan

Description

@soullifepan

一直回退到8771a5bf6fd1fe7d474f88743cc5ac167a5c1ca7 这个 commit id,才正常。
原因是:
node simple-test.js
简单测试 MCP Server tools/list 请求...
Sending initialize request...
STDERR: [DEBUG] Starting Shrimp Task Manager MCP Server...

STDERR: [DEBUG] ENABLE_GUI: false

STDERR: [DEBUG] MCP Server created successfully
[DEBUG] Connecting to STDIO transport...

STDERR: [DEBUG] MCP Server connected and ready to receive requests

STDOUT: {"result":{"protocolVersion":"2024-11-05","capabilities":{"tools":{},"logging":{}},"serverInfo":{"name":"Shrimp Task Manager","version":"1.0.0"}},"jsonrpc":"2.0","id":1}

Sending tools/list request...
STDERR: [DEBUG] Received tools/list request

STDERR: [DEBUG] Starting to load tool descriptions...

STDOUT: {"method":"roots/list","jsonrpc":"2.0","id":0}

Killing process...
我看到了一个现象,server收到了 tools/list 请求,开始加载工具描述,但是没有看到 "Successfully loaded planTask description" 的日志。然后出现了 roots/list 请求。

这看起来像是服务器在处理 tools/list 请求的过程中遇到了错误,然后MCP SDK自动发起了 roots/list 请求。让我检查 getDataDir 函数,因为这可能是问题的根源:
/Users/panrui/.config/mcphub/mcp-shrimp-task-manager/src/utils/paths.ts
我发现了问题!在 getDataDir() 函数中,当存在全局server时,它会调用 server.listRoots() 方法。这就是我们在STDOUT中看到 {"method":"roots/list","jsonrpc":"2.0","id":0} 的原因!

这个 roots/list 请求是由我们自己的代码发起的,不是来自客户端。但是,这个过程可能导致问题,因为我们在处理 tools/list 请求的过程中同步调用了另一个MCP方法。

listRoots 在不支持 listRoots的客户端无法使用

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions