ERROR mcp.client.stdio: Failed to parse JSONRPC message from server

报错日志

docker启动日志报错

hermes-agent  | WARNING hermes_plugins.raft_platform.adapter: [raft] raft CLI not found in PATH — install from https://raft.build
hermes-agent  | HERMES_DASHBOARD_READY port=9119
hermes-agent  |   Hermes Web UI → http://0.0.0.0:9119
hermes-agent  | ERROR mcp.client.stdio: Failed to parse JSONRPC message from server
hermes-agent  | Traceback (most recent call last):
hermes-agent  |   File "/opt/hermes/.venv/lib/python3.13/site-packages/mcp/client/stdio/__init__.py", line 155, in stdout_reader
hermes-agent  |     message = types.JSONRPCMessage.model_validate_json(line)
hermes-agent  |   File "/opt/hermes/.venv/lib/python3.13/site-packages/pydantic/main.py", line 782, in model_validate_json
hermes-agent  |     return cls.__pydantic_validator__.validate_json(
hermes-agent  |            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
hermes-agent  |         json_data, strict=strict, extra=extra, context=context, by_alias=by_alias, by_name=by_name
hermes-agent  |         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
hermes-agent  |     )
hermes-agent  |     ^
hermes-agent  | pydantic_core._pydantic_core.ValidationError: 1 validation error for JSONRPCMessage
hermes-agent  |   Invalid JSON: expected value at line 1 column 2 [type=json_invalid, input_value='[dotenv@17.2.3] injectin...https://dotenvx.com/ops', input_type=str]
hermes-agent  |     For further information visit https://errors.pydantic.dev/2.13/v/json_invalid
hermes-agent  |   💾 Self-improvement review: Patched SKILL.md in skill 'native-mcp' (1 replacement).

异常分析

    问题根因总结:                                                                                                                                
                                                                                                                                                  
      层        原因                                                                                                                              
      ────────  ───────────────────────────────────────────────────────────────────────────────────────       
      直接原因  trilium-mcp 使用 dotenv@17.2.3,该版本在 dotenv.config() 成功时调用 console.log() 打印推广消息到 stdout(MCP 协议要求 stdout 纯 JSON-RPC)                                                                                                              
      代码路径  main.js:305-320 — `if (debug \                                                                                                    
      修复 1    配置文件加 DOTENV_CONFIG_QUIET: true → dotenv 读到环境变量,跳过 stdout 消息                                                      
      修复 2    源码 dist/index.js:13 改 dotenv.config({ quiet: true }) → 从 API 参数层面彻底关掉   

故障反复

hermes-agent  | WARNING hermes_plugins.raft_platform.adapter: [raft] raft CLI not found in PATH — install from https://raft.build
hermes-agent  | HERMES_DASHBOARD_READY port=9119
hermes-agent  |   Hermes Web UI → http://0.0.0.0:9119
hermes-agent  | WARNING tools.mcp_tool: MCP server 'trilium' initial connection failed (attempt 1/3), retrying in 1s: 1 validation error for StdioServerParameters
hermes-agent  | env.DOTENV_CONFIG_QUIET
hermes-agent  |   Input should be a valid string [type=string_type, input_value=True, input_type=bool]
hermes-agent  |     For further information visit https://errors.pydantic.dev/2.13/v/string_type
hermes-agent  | WARNING tools.mcp_tool: MCP server 'trilium' initial connection failed (attempt 2/3), retrying in 2s: 1 validation error for StdioServerParameters
hermes-agent  | env.DOTENV_CONFIG_QUIET
hermes-agent  |   Input should be a valid string [type=string_type, input_value=True, input_type=bool]
hermes-agent  |     For further information visit https://errors.pydantic.dev/2.13/v/string_type
hermes-agent  | WARNING tools.mcp_tool: MCP server 'trilium' initial connection failed (attempt 3/3), retrying in 4s: 1 validation error for StdioServerParameters
hermes-agent  | env.DOTENV_CONFIG_QUIET
hermes-agent  |   Input should be a valid string [type=string_type, input_value=True, input_type=bool]
hermes-agent  |     For further information visit https://errors.pydantic.dev/2.13/v/string_type
hermes-agent  | WARNING tools.mcp_tool: MCP server 'trilium' failed initial connection after 3 attempts, giving up: 1 validation error for StdioServerParameters
hermes-agent  | env.DOTENV_CONFIG_QUIET
hermes-agent  |   Input should be a valid string [type=string_type, input_value=True, input_type=bool]
hermes-agent  |     For further information visit https://errors.pydantic.dev/2.13/v/string_type
hermes-agent  | WARNING tools.mcp_tool: Failed to connect to MCP server 'trilium' (command=node): 1 validation error for StdioServerParameters
hermes-agent  | env.DOTENV_CONFIG_QUIET
hermes-agent  |   Input should be a valid string [type=string_type, input_value=True, input_type=bool]
hermes-agent  |     For further information visit https://errors.pydantic.dev/2.13/v/string_type

故障分析

Pydantic 要求 env 值是 string 类型,但 YAML true 被解析成了 Python boolean。需要用引号确保 YAML 存为字符串:
 YAML 直写成功,DOTENV_CONFIG_QUIET: 'true' 现在是一个 YAML 字符串。唯一的代价是丢失了原文件的注释(不影响语义)。