diff --git a/astrbot/core/agent/mcp_client.py b/astrbot/core/agent/mcp_client.py index 18f4d47e04..ac19a06826 100644 --- a/astrbot/core/agent/mcp_client.py +++ b/astrbot/core/agent/mcp_client.py @@ -1,5 +1,7 @@ import asyncio import logging +import os +import sys from contextlib import AsyncExitStack from datetime import timedelta from typing import Generic @@ -45,6 +47,22 @@ def _prepare_config(config: dict) -> dict: return config +def _prepare_stdio_env(config: dict) -> dict: + """Preserve Windows executable resolution for stdio subprocesses.""" + if sys.platform != "win32": + return config + + pathext = os.environ.get("PATHEXT") + if not pathext: + return config + + prepared = config.copy() + env = dict(prepared.get("env") or {}) + env.setdefault("PATHEXT", pathext) + prepared["env"] = env + return prepared + + async def _quick_test_mcp_connection(config: dict) -> tuple[bool, str]: """Quick test MCP server connectivity""" import aiohttp @@ -210,6 +228,7 @@ def logging_callback(msg: str) -> None: ) else: + cfg = _prepare_stdio_env(cfg) server_params = mcp.StdioServerParameters( **cfg, )