From 39f76ee4dcf3bd42c41909febc4ad60e9914c04c Mon Sep 17 00:00:00 2001 From: Panniantong Date: Fri, 27 Feb 2026 03:06:27 +0100 Subject: [PATCH] fix: replace 'mcporter list' with 'mcporter config list' to prevent hangs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit mcporter list probes all configured servers sequentially, which can hang indefinitely when servers are slow/offline. mcporter config list reads config without probing — sufficient for checking if a server is configured. Affected: doctor checks (4 channels) and install command (2 calls). Fixes #34 --- agent_reach/channels/douyin.py | 2 +- agent_reach/channels/exa_search.py | 2 +- agent_reach/channels/linkedin.py | 2 +- agent_reach/channels/xiaohongshu.py | 2 +- agent_reach/cli.py | 4 ++-- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/agent_reach/channels/douyin.py b/agent_reach/channels/douyin.py index ad45542..9aa5db6 100644 --- a/agent_reach/channels/douyin.py +++ b/agent_reach/channels/douyin.py @@ -29,7 +29,7 @@ class DouyinChannel(Channel): ) try: r = subprocess.run( - ["mcporter", "list"], capture_output=True, text=True, timeout=10 + ["mcporter", "config", "list"], capture_output=True, text=True, timeout=5 ) if "douyin" not in r.stdout: return "off", ( diff --git a/agent_reach/channels/exa_search.py b/agent_reach/channels/exa_search.py index e264399..ece5b91 100644 --- a/agent_reach/channels/exa_search.py +++ b/agent_reach/channels/exa_search.py @@ -24,7 +24,7 @@ class ExaSearchChannel(Channel): ) try: r = subprocess.run( - ["mcporter", "list"], capture_output=True, text=True, timeout=10 + ["mcporter", "config", "list"], capture_output=True, text=True, timeout=5 ) if "exa" in r.stdout.lower(): return "ok", "全网语义搜索可用(免费,无需 API Key)" diff --git a/agent_reach/channels/linkedin.py b/agent_reach/channels/linkedin.py index cb60ffa..2a2288a 100644 --- a/agent_reach/channels/linkedin.py +++ b/agent_reach/channels/linkedin.py @@ -26,7 +26,7 @@ class LinkedInChannel(Channel): ) try: r = subprocess.run( - ["mcporter", "list"], capture_output=True, text=True, timeout=10 + ["mcporter", "config", "list"], capture_output=True, text=True, timeout=5 ) if "linkedin" in r.stdout.lower(): return "ok", "完整可用(Profile、公司、职位搜索)" diff --git a/agent_reach/channels/xiaohongshu.py b/agent_reach/channels/xiaohongshu.py index e3dae04..75f0249 100644 --- a/agent_reach/channels/xiaohongshu.py +++ b/agent_reach/channels/xiaohongshu.py @@ -28,7 +28,7 @@ class XiaoHongShuChannel(Channel): ) try: r = subprocess.run( - ["mcporter", "list"], capture_output=True, text=True, timeout=10 + ["mcporter", "config", "list"], capture_output=True, text=True, timeout=5 ) if "xiaohongshu" not in r.stdout: return "off", ( diff --git a/agent_reach/cli.py b/agent_reach/cli.py index f5f3e7e..f6fca22 100644 --- a/agent_reach/cli.py +++ b/agent_reach/cli.py @@ -453,7 +453,7 @@ def _install_mcporter(): # Configure Exa MCP (free, no key needed) try: r = subprocess.run( - ["mcporter", "list"], capture_output=True, text=True, timeout=10 + ["mcporter", "config", "list"], capture_output=True, text=True, timeout=5 ) if "exa" not in r.stdout: subprocess.run( @@ -469,7 +469,7 @@ def _install_mcporter(): # Check XiaoHongShu MCP (only if server is running) try: r = subprocess.run( - ["mcporter", "list"], capture_output=True, text=True, timeout=10 + ["mcporter", "config", "list"], capture_output=True, text=True, timeout=5 ) if "xiaohongshu" in r.stdout: print(" ✅ XiaoHongShu MCP already configured")