mcpField
🧠
🧠 Ultimate MCP Client

🧠 Ultimate MCP Client

github.com/dicklesworthstone桌面应用1712 周前更新

关于 🧠 Ultimate MCP Client

面向使用外部工具和上下文数据的 AI 模型用户的异步 Python MCP 客户端,提供交互式命令行和 Web UI,并支持服务发现、对话分支与监控。

主要功能

  1. 01交互式命令行和响应式 Web UI
  2. 02通过 stdio、SSE 和 streaming HTTP 连接
  3. 03发现本地、网络及注册表中的服务
  4. 04分支化并持久化对话
  5. 05通过 OpenTelemetry 和仪表板监控
  6. 06按可配置 TTL 缓存工具结果

适用场景

  1. 01让 Claude 使用 MCP 服务的工具进行对话
  2. 02查找并连接本地网络中的 MCP 服务
  3. 03探索不同的对话分支
  4. 04检查服务健康状况和工具活动

MCP 相关

通过 stdio、SSE 和 streaming HTTP 连接并管理 MCP 服务。它从本地路径、mDNS、端口扫描和远程注册表发现服务,并将模型的工具调用路由到相应服务。

详细介绍

🧠 Ultimate MCP 客户端

Python 3.13+ License: MIT MCP Protocol Ruff

一款功能全面的异步客户端,适用于 Model Context Protocol (MCP)。它连接了 Anthropic 的 Claude 等强大的 AI 模型与种类繁多的外部工具、本地/远程服务和上下文数据源,使复杂的有状态交互成为可能。

Web UI 截图

由 Jeffrey Emanuel 构建


🎯 目的与动机

Model Context Protocol (MCP) 对 AI 模型与外部功能(工具、资源、提示词)的交互方式进行了标准化。本客户端致力于成为使用 MCP 的终极接口,提供:

  1. 稳健的连接能力: 通过内置的弹性机制、高级错误处理和智能发现,可靠地连接各种 MCP 服务(stdio、sse)。
  2. 丰富的用户体验: 同时提供强大的交互式命令行界面和现代化的响应式 Web UI,满足各种工作流的使用需求。
  3. 高级状态管理: 不止于简单的聊天记录,还支持可分叉的对话图、跨会话持久化状态和智能上下文优化技术。
  4. 开发者洞察: 通过 OpenTelemetry 指标和追踪提供深入的可观测性,并配备实时仪表板,用于监控客户端和服务的运行状况与性能。
  5. 无缝集成: 轻松发现并集成本地文件系统脚本、本地网络 (mDNS) 服务、本地端口扫描结果、远程注册表条目,甚至是 Claude 桌面应用等现有工具的配置。

本项目致力于应对重大的工程挑战,尤其是可靠的 stdio 通信、异步状态管理,以及在命令行界面和 Web 界面之间提供一致的体验,从而打造真正全面的 MCP 客户端解决方案。


🔌 主要功能

  • 双界面:Web UI 与命令行界面

    • Web UI: 基于 Alpine.js、DaisyUI 和 Tailwind CSS 构建的精美响应式界面。支持通过 WebSockets 实时流式传输聊天内容、服务/工具管理弹窗、对话分支可视化视图、设置配置、多主题切换(代码高亮支持浅色/深色模式),以及直接执行工具。
    • 命令行界面: 功能丰富的交互式 Shell(支持 /commands、自动补全和 Rich Markdown 渲染),并可通过 Typer 批量运行。还包含用于监控的实时 Textual 用户界面 (TUI) 仪表板。
  • 强大的服务连接与管理

    • 支持 stdio、sse(HTTP Server-Sent Events)和 streaming-http MCP 服务。
    • **高级 STDIO 处理(重点工程投入):**采用自定义的 RobustStdioSession,旨在妥善处理可能存在噪声或不符合规范的 stdio 服务。其功能包括:
      • *噪声过滤:*忽略可能破坏协议的非 JSON-RPC 输出。
      • *直接解析 Future:*避免复杂的排队机制,以更快地处理响应。
      • *进程生命周期管理:*可靠地启动、监控、终止和结束 stdio 服务进程。
      • **关键 STDIO 安全保障:**多层防护系统(StdioProtectionWrapper、safe_stdout 上下文管理器、get_safe_console() 函数)可防止意外写入 sys.stdout 破坏 stdio 通道,确保多个 stdio 服务与用户输出安全共存(必要时将用户输出重定向到 stderr)。这对稳定性至关重要。
    • **弹性:**使用指数退避机制自动重试连接,并为故障服务启用熔断器(@retry_with_circuit_breaker)。后台健康监控(ServerMonitor)会检查服务的响应能力。
  • 现代传输协议支持

    • **Streaming-HTTP:**通过 FastMCP 库原生支持现代 streaming-http 传输协议。该传输协议可通过 HTTP 实现高效的双向通信,并内置流式处理能力,非常适合现代 MCP 服务部署。
    • **智能传输协议检测:**根据服务 URL 和发现信息自动检测并建议适当的传输类型:
      • 本地文件路径 → stdio
      • 路径中包含 /sse 或 /events 的 URL → sse
      • 一般 HTTP/HTTPS URL → streaming-http(现代服务的默认类型)
  • 智能服务发现

    • 在配置的文件系统路径中自动发现本地 stdio 服务(Python/JS 脚本)。
    • **mDNS 发现(Zeroconf):**实时发现本地网络上的 MCP 服务(_mcp._tcp.local.)并发送通知。提供交互式命令(/discover list、/discover connect 等)来管理局域网服务。
    • **本地端口扫描:**主动扫描可配置范围内的本地端口(例如 8000-9000),并尝试进行 initialize 握手以发现 MCP 服务。支持检测所有传输类型(stdio、sse、streaming-http)。可通过 /config port-scan ... 命令进行配置。
    • **注册表集成:**连接到配置中指定的远程 MCP 注册表,以查找并添加共享服务。
    • **Claude Desktop 导入:**自动检测项目根目录中的 claude_desktop_config.json。智能适配配置:
      • 将 wsl.exe ... bash -c "cmd" 调用映射为直接执行 Linux shell 命令(/bin/bash -c "cmd")。
      • 使用 adapt_path_for_platform 将参数中的 Windows 风格路径(C:\...)转换为对应的 Linux/WSL 路径(/mnt/c/...),实现无缝集成。
  • 强大的 AI 集成与流式处理

    • 通过官方 anthropic SDK 深度集成 Claude 模型,支持多轮工具调用场景。
    • 实时流式处理:通过 WebSockets(Web UI)和实时 Rich 渲染(CLI)流式传输 AI 响应和工具状态更新。支持处理复杂的流式事件,包括为需要结构化输入的工具累积部分 JSON 输入(input_json_delta)。
    • **智能工具路由:**根据已加载的功能,将工具调用路由到正确的来源服务;为兼容 API 使用经过清理的名称,同时在内部跟踪原始名称。
    • **直接执行工具:**通过 /tool 命令(CLI)或专用弹窗(Web UI),使用自定义 JSON 参数运行指定工具。
  • 高级对话管理

    • 分支功能: 可分叉的对话图(ConversationGraph)允许探索不同的交互路径,同时保留历史记录。在 Web UI 中以可视化方式呈现和导航。
    • 持久化: 对话图(包括所有分支和消息)自动保存到配置目录中的 JSON 文件,跨会话保留状态。
    • 上下文优化: 使用指定的 AI 大模型(可配置)自动或手动汇总(/optimize)长对话历史,以保持在上下文限制内。
    • 动态提示词: 使用 /prompt 命令将从服务获取的预定义提示词模板注入当前对话上下文。
    • 导入/导出: 轻松保存(/export)和加载(/import)整个对话分支,采用便携式 JSON 格式,便于共享或备份。
  • 可观测性与监控

    • OpenTelemetry: 集成的指标(使用 opentelemetry-sdk 的计数器、直方图)和追踪(跨度),用于监控客户端操作、服务请求和工具执行性能。可启用控制台导出器进行调试。
    • 实时仪表板:
      • 命令行: 使用 Rich 构建的实时 TUI 仪表板(/dashboard),显示服务健康状况、工具使用统计和客户端信息。
      • Web UI: 动态更新服务器状态、健康指标和功能计数。
  • 智能缓存

    • 可选的磁盘(diskcache)和内存中缓存,用于工具结果,以提高速度并降低成本。
    • 可配置的按工具类别生存时间(TTL)(例如 weather、filesystem)。
    • 依赖跟踪: 定义工具之间的关系。使一个工具的缓存失效(例如 stock:lookup)可以自动使依赖缓存失效(例如 stock:analyze)。通过 /cache dependencies 查看图表。

📸 截图

Ultimate MCP 客户端的界面概览:


CLI 交互模式,展示工具执行和流式响应

交互式命令行:带有工具调用/结果的流式响应。

CLI TUI 仪表板展示服务器状态

实时 TUI 仪表板:实时服务器和工具监控(/dashboard)。

Web UI 聊天界面

Web UI:主聊天界面,展示消息和工具交互。

Web UI 服务器管理选项卡

Web UI:服务器管理选项卡,包含连接状态和控制。

Web UI 对话分支视图

Web UI:对话选项卡,展示分支图结构。

说明: 某些截图展示了 llm_gateway:generate_completion 等工具。这些工具由 LLM Gateway MCP 服务提供,这是同一作者的另一个项目。该服务充当 MCP 本机网关,使高级 Agent(如本客户端使用的 Claude)能够智能地将任务委托给各种其他大模型(例如 Gemini、GPT-4o-mini),通常可优化成本和性能。



🚀 快速开始

安装依赖

需要 Python 3.13+

首先,安装 uv(推荐的快速 Python 包管理器):

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

然后克隆仓库,使用 Python 3.13+ 设置虚拟环境,并安装包:

git clone https://github.com/Dicklesworthstone/ultimate_mcp_client
cd ultimate_mcp_client

# Create venv using uv (recommended)
uv venv --python 3.13
# Or using standard venv
# python3.13 -m venv .venv

# Activate environment
source .venv/bin/activate # Linux/macOS
# .venv\Scripts\activate # Windows Powershell
# .\venv\Scripts\activate.bat # Windows CMD

# Install dependencies using uv (fastest)
uv sync --all-extras
# Or using pip (slower)
# pip install -e . # Installs only core dependencies
配置 API 密钥

将 Anthropic API 密钥设置为环境变量:

export ANTHROPIC_API_KEY="sk-ant-..."
# Or add ANTHROPIC_API_KEY="sk-ant-..." to a .env file in the project root

或者,稍后在交互式命令行中使用 /config api-key ... 命令或通过 Web UI 设置面板进行设置。

启动 Web UI(推荐)
mcpclient run --webui

然后在浏览器中打开 http://127.0.0.1:8017(或配置的主机/端口)。

你可以自定义主机和端口:

mcpclient run --webui --host 0.0.0.0 --port 8080
运行交互式命令行模式
mcpclient run --interactive
运行单次查询
mcpclient run --query "What's the weather in New York?"
显示命令行仪表板
mcpclient run --dashboard
配置端口扫描
# Enable port scanning (if disabled)
mcpclient config port-scan enable true

# Set the range (example)
mcpclient config port-scan range 8000 8999
导入和导出对话
# Export current conversation branch to a default filename
mcpclient export

# Export current branch to a specific file
mcpclient export --output my_conversation.json

# Export specific conversation branch by ID (first 8 chars often suffice)
mcpclient export --id 12345678 --output specific_branch.json

# Import a conversation file (creates a new branch under the current node)
mcpclient import-conv my_conversation.json

🌐 Web UI 功能

Web UI(mcpclient run --webui)基于 Alpine.js、Tailwind CSS 和 DaisyUI 构建,提供现代、易用的界面:

  • 实时聊天: 通过 WebSockets 流式接收 Claude 的响应,支持丰富的 Markdown 渲染(通过 Marked.js)、代码块语法高亮(通过 highlight.js)和复制按钮,并清晰显示系统消息和状态更新。
  • 工具交互: 在聊天流程中直观地区分并显示工具调用(参数)及其结果(成功或错误)。用户可通过模态框使用自定义 JSON 参数直接执行任何可用工具,以便测试和调试。
  • 服务管理: 专用侧边栏标签页会列出已配置的服务。用户可以:
    • 通过模态表单添加新服务(STDIO/SSE/Streaming-HTTP)。
    • 连接或断开与服务的连接,并查看状态指示器(加载中、已连接、已断开、错误)。
    • 启用或禁用服务(禁用时会自动断开连接)。
    • 移除服务配置。
    • 查看基本运行状况/状态,以及每个服务提供的工具数量。
  • 发现: Servers 标签页中的按钮可触发发现扫描(本地文件系统、远程注册表、mDNS)。发现的服务会显示在列表中,用户只需单击一次即可将其添加到配置中。
  • 对话分支: Conversation 标签页中的交互式树视图可直观呈现 ConversationGraph。用户可以单击切换到不同分支(更新聊天视图),也可以从当前节点分叉以创建新分支。
  • 上下文管理: Conversation 标签页中的按钮可清除当前分支的消息(重置为父级/根状态),或通过 API 触发上下文优化/摘要生成。
  • 导入/导出: Conversation 标签页中的按钮可将当前分支导出为 JSON 文件,或通过选择文件导入之前导出的 JSON 文件(上传至后端)。
  • 设置: 专用侧边栏标签页可查看和修改关键配置选项(API Key、默认模型、最大令牌数、温度、流式传输、缓存、自动发现、mDNS 等功能开关),修改后的设置会保存到服务端配置文件。
  • 主题切换: 下拉菜单提供多种 DaisyUI 主题供选择。界面会即时适配,代码高亮也会根据所选主题自动切换浅色/深色样式。
  • 状态指示器: 页眉中会显示 WebSocket 实时连接状态图标、服务连接总数和可用工具总数。聊天输入框下方会显示临时状态消息(例如“正在执行工具……”)。

🔌 API 服务

使用 --webui 运行时,FastAPI 服务会提供程序化访问能力:

GET    /api/status                     - Client overview (model, servers, tools, history count, current node)
GET    /api/config                     - Get current (non-sensitive) configuration
PUT    /api/config                     - Update configuration settings (e.g., { "temperature": 0.8 })
GET    /api/servers                    - List all configured servers with status, health, tools
POST   /api/servers                    - Add a new server configuration (Supports stdio/sse/streaming-http transports)
DELETE /api/servers/{server_name}    - Remove a server configuration
POST   /api/servers/{server_name}/connect    - Connect to a specific server
POST   /api/servers/{server_name}/disconnect - Disconnect from a specific server
PUT    /api/servers/{server_name}/enable?enabled={true|false} - Enable/disable a server
GET    /api/tools                      - List all available tools from connected servers
GET    /api/resources                  - List all available resources
GET    /api/prompts                    - List all available prompts
GET    /api/conversation               - Get current conversation state (messages, current node ID/name, full node graph)
POST   /api/conversation/fork          - Create a fork (optionally named) from the current conversation node
POST   /api/conversation/checkout      - Switch the current context to a different conversation node/branch (by ID)
POST   /api/conversation/clear         - Clear messages on the current node and switch to root
POST   /api/conversation/optimize      - Trigger context summarization for the current node (optional model/token args)
POST   /api/tool/execute               - Execute a specific tool with given parameters (Requires ToolExecuteRequest model)
WS     /ws/chat                        - WebSocket endpoint for streaming chat (`query`, `command`), receiving updates (`text_chunk`, `status`, `query_complete`, `error`, `state_update`).

(注意:ServerAddRequest、ToolExecuteRequest 等实际请求/响应模型定义在 Python 代码中,并由 FastAPI 用于验证。)


⚙️ 命令

CLI 选项

运行 mcpclient --help 或 mcpclient [COMMAND] --help 查看详情。

交互式 Shell 命令(mcpclient run --interactive)

输入 / 后接命令:

/help         Show this help message
/exit, /quit  Exit the client
/config       Manage configuration (api-key, model, max-tokens, history-size, auto-discover, discovery-path, port-scan)
/servers      Manage MCP servers (list, add, remove, connect, disconnect, enable, disable, status)
/discover     Discover/manage LAN servers (list, connect <NAME>, refresh, auto <on|off>)
/tools        List available tools (optionally filter by server: /tools <server_name>)
/tool         Directly execute a tool: /tool <tool_name> '{"param": "value"}'
/resources    List available resources (optionally filter by server: /resources <server_name>)
/prompts      List available prompt templates (optionally filter by server: /prompts <server_name>)
/prompt       Apply a prompt template to the current conversation context: /prompt <prompt_name>
/model        View or change the current AI model: /model [<model_name>]
/fork         Create a new branch from the current conversation point: /fork [Optional Branch Name]
/branch       Manage branches (list, checkout <node_id_prefix>)
/export       Export current branch: /export [--id <node_id>] [--output <file.json>]
/import       Import conversation file: /import <file.json>
/history      View recent conversation history (optionally specify number: /history 10)
/cache        Manage tool cache (list, clear [--all|tool_name], clean, dependencies [tool_name])
/dashboard    Show the live Textual User Interface (TUI) dashboard (requires separate run)
/optimize     Summarize current conversation context: /optimize [--model <model>] [--tokens <num>]
/reload       Disconnect, reload capabilities, and reconnect to enabled servers
/clear        Clear messages in the current branch and optionally reset to root

🏗️ 架构与工程亮点

此客户端采用了多种技术,以提供稳健且功能丰富的体验:

  • 异步核心: 完全基于 Python 的 asyncio 构建,可高效处理网络 I/O(HTTP、WebSockets、SSE)、子进程通信(stdio)、文件系统操作(aiofiles)以及并发后台任务(监控、发现、端口扫描)。
  • 基于组件的设计: 为便于使用,软件主要打包为单个脚本,但内部按职责划分为不同的类:
    • MCPClient:主应用类,负责协调 UI 循环、命令处理和核心逻辑。
    • ServerManager:负责服务配置、生命周期(连接、断开连接、重启)、发现机制、能力汇总(工具、资源、提示词),并管理服务进程和会话。使用 AsyncExitStack 确保可靠地清理资源。支持所有传输类型,包括通过 FastMCP 集成的现代 streaming-http 协议。
    • RobustStdioSession(关键工程工作): 专为 stdio 服务定制的 mcp.ClientSession 实现。其逻辑包括:
      • 过滤服务 stdout 中非 JSON-RPC 输出,以防止协议错误。
      • 通过直接解析与请求 ID 关联的 asyncio.Future 对象来处理响应,这可能比基于队列的方案性能更好。
      • 管理用于读取 stdout 以及异步将捕获的 stderr 写入日志文件的后台任务。
      • 妥善处理进程终止和清理。
    • STDIO 安全机制(至关重要): 通过多层防护,避免意外污染 stdout;这对基于 stdio 的协议而言是致命问题:
      • StdioProtectionWrapper:全局包装 sys.stdout 以拦截写入;如果有任何 stdio 服务处于活动状态,则将写入内容重定向到 stderr。
      • safe_stdout():上下文管理器,在关键操作(如连接服务)期间临时将 stdout 重定向到 stderr。
      • get_safe_console() / safe_print():实用函数,可确保 UI 输出(通过 Rich)根据活动的 stdio 服务使用正确的流(stdout 或 stderr)。
      • 这些措施使客户端 UI 和日志记录即使在与对 stdio 敏感的服务通信时,也能正常运行。
    • ConversationGraph:使用 ConversationNode 对象管理非线性、分支式的对话结构,并负责与 JSON 之间的持久化。
    • ToolCache:使用 diskcache 实现缓存逻辑,以便持久化,并通过内存层提高速度。包含 TTL 管理和依赖项失效机制。
    • ServerRegistry / ServerMonitor:负责 mDNS/Zeroconf 发现和注册,以及通过恢复尝试进行后台服务健康检查。
  • 双界面实现:
    • Web 后端: 使用 FastAPI 构建简洁的 REST API 结构,使用 uvicorn 作为 ASGI 服务,并使用 websockets 实现双向实时聊天。FastAPI lifespan 上下文管理器可确保在启动时正确初始化 MCPClient,并在关闭时完成清理。依赖注入使端点能够访问客户端实例。
    • Web 前端: 直接在 HTML 中使用 Alpine.js 实现轻量级响应式和组件逻辑。Tailwind CSS 和 DaisyUI 提供样式和预构建组件。Marked.js、highlight.js 和 DOMPurify 负责安全、美观地渲染 Markdown 和代码。Tippy.js 提供工具提示。
    • CLI/TUI: 使用 Typer 定义命令行界面并解析参数。大量使用 Rich 实现格式化控制台输出、表格、进度条、Markdown 渲染、语法高亮和实时 TUI 仪表板。通过谨慎的管理(_run_with_progress、_run_with_simple_progress 辅助函数),避免在复杂操作期间出现嵌套 Rich Live 显示问题。
  • 弹性与错误处理: 使用装饰器(@retry_with_circuit_breaker、@with_tool_error_handling)处理常见模式,例如重试和工具执行期间的标准化错误报告。整个项目广泛使用结构化的 try...except...finally 块来增强健壮性。
  • 可观测性: 集成 OpenTelemetry,用于结构化指标(请求计数器、延迟直方图、工具执行情况)和分布式跟踪(跨度跟踪查询处理、服务连接、工具调用等操作)。这有助于性能分析和调试。
  • 配置: 灵活的配置系统,使用 config.yaml 文件、环境变量(尤其是 ANTHROPIC_API_KEY 等敏感密钥),以及可将更改持久化回 YAML 文件的交互式命令或 Web UI 设置。

🔄 智能缓存依赖跟踪

智能缓存依赖系统允许工具声明对其他工具的依赖:

  • 当某个工具的缓存失效时,所有依赖该工具的工具缓存都会自动失效
  • 服务声明工具关系时,会注册依赖项
  • 使用 /cache dependencies 查看依赖关系图
  • 确保相关工具使用最新数据,从而提高数据一致性

依赖流程示例:

weather:current → weather:forecast → travel:recommendations

如果当前天气数据更新,天气预报和旅行建议的缓存都会自动失效。


🔍 工具与服务发现

此客户端提供多种方式来查找和集成 MCP 服务:

  • 已配置路径: 在 config.yaml(discovery_paths 下)指定的目录中搜索本地 stdio 服务脚本(例如,.py、.js)。默认路径包括:
    • .mcpclient_config/servers(位于项目根目录)
    • ~/mcp-servers
    • ~/modelcontextprotocol/servers
  • Claude Desktop 配置(claude_desktop_config.json): 如果此文件存在于项目根目录中,客户端会在设置期间自动从中导入服务定义。
    • 智能命令适配:
      • 检测 wsl.exe ... <shell> -c "command ..." 模式。
      • 提取 Linux <shell>(例如,bash、sh)和 "command ..."。
      • 将配置改为使用识别出的 Linux shell 直接执行命令(例如,/bin/bash -c "command ..."),绕过 wsl.exe。
      • 对于其他命令类型(例如,npx ...),会使用 adapt_path_for_platform 扫描参数中的 Windows 风格路径(C:\Users\...),并将其转换为对应的 /mnt/c/Users/... 路径,以确保客户端在 WSL/Linux 中运行时兼容。
  • 远程注册表: 连接到 config.yaml(registry_urls)中定义的 MCP 注册表服务 URL,以发现公开可用或共享的服务(通常使用 SSE)。
  • 本地网络(mDNS/Zeroconf):
    • 使用 zeroconf 库监听本地网络上以 _mcp._tcp.local. 名称广播的服务。
    • 当新服务出现或消失时,在交互式 CLI 中提供实时通知。
    • /discover 命令组可用于管理发现的服务:
      • /discover list:查看当前可见的 LAN 服务详情。
      • /discover connect <NAME>:将发现的服务添加到配置文件并尝试连接。
      • /discover refresh:手动触发网络重新扫描。
      • /discover auto [on|off]:切换持续的后台 mDNS 扫描(需要在配置中设置 enable_local_discovery: true)。
  • 本地端口扫描:
    • 如果已启用(在 config.yaml 中设置 enable_port_scanning: true,或通过 /config port-scan enable true 启用),则会在启动发现期间主动扫描指定本地 IP 地址上的一系列端口。
    • 尝试在每个端口进行基本的 MCP initialize 握手,以检测响应的 MCP 服务。支持根据服务响应和 HTTP 标头自动检测 sse 和 streaming-http 传输类型。
    • 适用于查找未使用 mDNS 广播的服务。
    • 可通过 config.yaml 或 /config port-scan ... 命令配置端口范围、目标 IP、并发数和超时时间。
    • 找到的服务会与其他已发现的服务一同列出,供用户选择是否添加到配置中。

📡 遥测 + 调试

  • OpenTelemetry: 为关键操作生成追踪和指标。默认情况下会收集数据,但不会导出。将 mcpclient.py 顶部附近的 use_console_exporter = True 设置为启用控制台输出,以便调试追踪和指标(输出内容较多)。在生产环境中,请配置合适的 OTel 导出器(例如 Jaeger、Prometheus)。
  • 仪表板:
    • CLI: 运行 mcpclient run --dashboard,即可启动由 Rich 驱动的实时 TUI 监控视图。此视图显示服务状态、运行状况、连接状态、基本工具使用统计信息和客户端信息,并会定期刷新。
    • Web UI: “Servers”选项卡以可视化方式显示服务状态(通过图标显示连接状态和运行状况),标题栏则显示总体计数。
  • 日志记录: 使用 Python 标准库 logging,并通过 RichHandler 美化控制台输出(输出到 stderr,以避免与 stdio 冲突)。
    • 使用 --verbose 或 -v 标志可将日志级别提高到 DEBUG,以查看详细的内部信息。
    • 详细模式还会启用 stdio 会话详细日志记录(USE_VERBOSE_SESSION_LOGGING = True),以查看原始 JSON-RPC 消息(有助于调试 MCP 服务)。
  • 错误回溯: 在运行前设置环境变量 MCP_CLIENT_DEBUG=1,可让 CLI 在发生意外错误时打印完整的 Python 回溯信息,便于调试客户端问题。
  • STDIO 服务日志: 异步捕获 stdio 服务的 stderr 输出,并将其写入配置目录中的日志文件(例如 .mcpclient_config/<server_name>_stderr.log),这对于诊断服务端问题至关重要。

📦 配置

  • 主配置文件: 配置从项目根目录下的 .mcpclient_config/config.yaml 加载,并保存到此文件。
  • 环境变量: ANTHROPIC_API_KEY 是提供 API 密钥的主要方式,并会覆盖配置文件中保存的密钥。EDITOR 用于 /config edit。MCP_CLIENT_DEBUG=1 可启用回溯信息。
  • 交互式 CLI: /config 命令可用于查看和修改 api-key、model、max-tokens、discovery-path、端口扫描参数等设置。更改会保存回 config.yaml。
  • Web UI 设置: Web UI 中的“Settings”选项卡提供了常用配置选项的控件。在此处所做的更改会通过 API 发送并保存到 config.yaml。

查看当前配置:

mcpclient config --show
# OR in interactive mode:
/config

手动编辑配置文件:

mcpclient config --edit
# (This will open .mcpclient_config/config.yaml in the editor specified by your $EDITOR environment variable)

🧪 开发说明

  • 核心: Python 3.13+、asyncio
  • CLI: Typer、Rich
  • Web: FastAPI、Uvicorn、WebSockets、Alpine.js、Tailwind CSS、DaisyUI
  • MCP: mcp SDK(mcp>=1.0.0)、fastmcp(用于 streaming-http 传输)
  • AI: anthropic SDK(anthropic>=0.15.0)
  • 可观测性: opentelemetry-sdk、opentelemetry-api、opentelemetry-instrumentation
  • 实用工具: httpx、PyYAML、python-dotenv、psutil、aiofiles、diskcache、tiktoken、zeroconf、colorama
  • 代码检查/格式化: 已在 pyproject.toml 中配置 ruff。使用 uv run lint 或 ruff check . && ruff format .。
  • 类型检查: 已在 pyproject.toml 中配置 mypy。使用 uv run typecheck 或 mypy mcpclient.py。

项目主要集中在 mcpclient.py 中,以便于分发和自省,同时保留内部基于类的模块化结构。Web UI 由独立的 mcp_client_ui.html 文件提供服务,并使用 CDN 托管的库以简化部署。健壮的 stdio 处理和异步管理等关键复杂逻辑,位于 RobustStdioSession 和 ServerManager 等专用类中。


📝 许可证

MIT License(附带 OpenAI/Anthropic 补充条款)。请参阅 LICENSE。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。