mcpField
W
Wazuh MCP Server

Wazuh MCP Server

本地服务
github.com/gbrigandi安全24046 周前更新

关于 Wazuh MCP Server

Wazuh MCP Server 是一个用 Rust 编写的服务,将 Wazuh SIEM 数据通过 MCP 提供给 Claude Desktop 等 AI 助手。安全团队可以用自然语言查询告警、代理、漏洞和合规相关信息。

主要功能

  1. 01查询安全告警与事件数据
  2. 02管理代理状态、进程与网络端口
  3. 03查看漏洞评估与安全规则信息
  4. 04集群健康与日志分析
  5. 05支持 PCI-DSS、HIPAA 等合规检查

适用场景

  1. 01用自然语言查询关键漏洞并确定修补优先级
  2. 02调查特定代理上的运行进程与开放端口
  3. 03检查日志记录是否满足 PCI-DSS 要求

MCP 相关

该项目是一个 MCP 服务,向 MCP 客户端暴露 Wazuh 的告警、代理、漏洞、规则和集群等数据的工具。可通过 stdio 或(启用 http 特性后)HTTP 传输运行。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"wazuh": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"pull"
]
}
}
}
启动命令docker run -i --rm pull

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocipull

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Wazuh MCP Server——与你的 SIEM 对话

这是一个基于 Rust 的服务,旨在弥合 Wazuh 安全信息与事件管理(SIEM)系统与需要上下文安全数据的应用之间的差距,专为使用模型上下文协议(MCP)的 Claude Desktop 集成而设计。

概览

Claude 等现代 AI 助手可以从有关用户安全环境的实时上下文中获益良多。Wazuh MCP Server 通过自然语言交互全面提供对 Wazuh SIEM 数据的访问,弥合了这一差距。

此服务会将复杂的 Wazuh API 响应转换为兼容 MCP 的格式,使 AI 助手能够访问:

  • 安全警报与事件:来自 Wazuh Indexer,用于威胁检测和事件响应
  • Agent 管理与监控:包括运行状况、系统进程和网络端口
  • 漏洞评估:用于风险管理和补丁优先级排序的数据
  • 安全规则与配置:用于检测优化和合规性验证
  • 系统统计与性能:用于运营监控和审计跟踪的指标
  • 日志分析与取证:用于事件调查和合规性报告的功能
  • 集群运行状况与管理:满足基础设施可靠性和可用性要求
  • 合规性监控与差距分析:适用于 PCI-DSS、HIPAA、SOX 和 GDPR 等监管框架

安全团队无需手动调用 API 或编写复杂查询,现在可以直接提出自然语言问题,例如“显示 Web 服务器上的严重漏洞”“Agent 001 上正在运行哪些进程?”或“我们是否满足 PCI-DSS 日志记录要求?”,并从 Wazuh 部署中获取结构化、可执行的数据。

这种方式对合规团队尤其有价值,他们可以快速评估安全态势、发现监控覆盖方面的差距、验证规则有效性,并为分布式基础设施中的审计要求生成证据。

README 配图

示例用例

Wazuh MCP Server 通过自然语言交互直接提供对 Wazuh 安全数据的访问,支持多种实用场景:

安全警报分析
  • **警报分诊与调查:**使用 get_wazuh_alert_summary 查询近期安全警报,快速识别并确定需要立即处理的威胁优先级。
  • **警报模式识别:**分析警报趋势和模式,以识别反复出现的安全问题或潜在攻击活动。
漏洞管理
  • **Agent 漏洞评估:**使用 get_wazuh_vulnerability_summary 和 get_wazuh_critical_vulnerabilities 评估特定 Agent 的安全态势,并确定修补工作的优先级。
  • **基于风险的漏洞优先级排序:**将漏洞数据与 Agent 的重要性和暴露情况相关联,以集中开展修复工作。
系统监控与取证
  • **进程分析:**使用 get_wazuh_agent_processes 调查 Agent 上正在运行的进程,以开展威胁搜寻和系统分析。
  • **网络安全评估:**使用 get_wazuh_agent_ports 监控开放端口和网络服务,识别潜在攻击向量。
  • **Agent 运行状况监控:**使用 get_wazuh_running_agents 跟踪 Agent 状态和连接情况,确保全面的安全覆盖。
安全运营情报
  • **规则有效性分析:**使用 get_wazuh_rules_summary 检查和分析安全检测规则,优化检测能力。
  • **管理器性能监控:**使用 get_wazuh_weekly_stats、get_wazuh_remoted_stats 和 get_wazuh_log_collector_stats 等工具跟踪系统性能和统计数据。
  • **集群运行状况管理:**使用 get_wazuh_cluster_health 和 get_wazuh_cluster_nodes 监控 Wazuh 集群状态,保障运营可靠性。
事件响应与取证
  • 日志分析: 使用 search_wazuh_manager_logs 和 get_wazuh_manager_error_logs 搜索并分析管理器日志,以调查事件。
  • 针对特定 Agent 的调查: 在安全事件期间,结合多个工具为特定 Agent 建立全面的档案。
  • 自然语言安全查询: 用自然语言提出复杂的安全问题,并从多个 Wazuh 组件获取结构化数据。
运维效率
  • 自动化报告: 通过对话式界面生成安全报告和摘要,无需手动调用 API。
  • 跨组件分析: 关联 Wazuh Indexer(警报)和 Wazuh Manager(Agent、规则、漏洞)的数据,全面洞察安全状况。
  • 多语言安全运营: 访问 Wazuh 数据并以多种语言获取洞察,满足全球安全团队的需求。
威胁情报收集与响应

为增强威胁情报和事件响应能力,可将 Wazuh MCP Server 与互补的安全 MCP 服务结合使用:

服务描述
Cortex MCP Server通过 140 多种分析器进行工件分析和 IOC 丰富
TheHive MCP Server案例管理和事件响应编排
MISP MCP Server威胁情报共享和 IOC 查询

与 Cortex 集成后增强的能力:

  • 工件分析: 使用 Cortex 的 140 多种分析器,自动分析 Wazuh 警报中发现的可疑文件、URL、域名和 IP 地址
  • IOC 丰富: 利用包括 VirusTotal、Shodan、MISP 等多个来源的威胁情报,丰富 Wazuh 警报中的入侵指标(IOC)
  • 自动化威胁搜寻: 结合 Wazuh 的检测能力与 Cortex 的分析引擎,自动调查并分类威胁
  • 多源情报: 利用各类分析器进行信誉检查、恶意软件分析、域名分析和行为分析
  • 响应编排: 根据分析结果制定自动化响应操作并确定警报优先级

与 TheHive 集成后增强的能力:

  • 创建案例: 根据 Wazuh 警报自动在 TheHive 中创建案例,以结构化方式跟踪事件
  • 警报关联: 将相关的 Wazuh 警报关联到现有案例,形成全面的事件时间线
  • 任务管理: 根据警报的严重性和类型创建并跟踪调查任务
  • 可观测对象管理: 在案例调查中提取 IOC 并将其作为可观测对象进行管理
  • 协作: 支持安全团队协作处理 Wazuh 检测到的事件

与 MISP 集成后增强的能力:

  • IOC 查询: 检查 Wazuh 警报中的指标是否已记录在威胁情报数据库中
  • 威胁背景信息: 获取 IOC 的事件背景信息、威胁行为者归因和 MITRE ATT&CK 映射
  • 减少误报: 根据 MISP 警告列表验证 IOC,以减少误报
  • 发现记录跟踪: 记录并查询发现历史,以评估 IOC 的普遍程度
  • Galaxy 探索: 查看威胁行为者档案、恶意软件家族和攻击模式

示例工作流:

  1. Wazuh 在警报中检测到可疑文件哈希或网络连接
  2. AI 助手查询 MISP MCP Server,检查该 IOC 是否已收录在威胁情报中
  3. 如果该 IOC 未知,则由 Cortex MCP Server 使用多个分析器分析该工件
  4. 关联 VirusTotal、混合分析、域名信誉及其他来源的结果
  5. 通过 TheHive MCP Server 在 TheHive 中创建案例,以跟踪调查
  6. 综合情报为事件响应决策提供背景信息
  7. 可使用调查结果更新 Wazuh 规则或触发额外监控

要求

  • 兼容 MCP(Model Context Protocol)的 LLM 客户端(例如 Claude Desktop)
  • 正在运行的 Wazuh 服务(推荐 v4.12),且已启用 API 并可访问。
  • 此服务与 Wazuh API 之间的网络连接(如果使用 API 交互)。

安装

选项 1:下载预构建二进制文件(推荐)
  1. 下载二进制文件:
    • 前往 mcp-server-wazuh GitHub 仓库的发布页面。
    • 下载适用于你操作系统的二进制文件(例如,mcp-server-wazuh-linux-amd64、mcp-server-wazuh-macos-amd64、mcp-server-wazuh-macos-arm64、mcp-server-wazuh-windows-amd64.exe)。
    • 将下载的二进制文件设为可执行文件(例如,chmod +x mcp-server-wazuh-linux-amd64)。
    • (可选)将其重命名为更简单的名称,例如 mcp-server-wazuh,并移至系统 PATH 中的目录,以便更轻松地访问。
选项 2:Docker
  1. 拉取 Docker 镜像:
    docker pull ghcr.io/gbrigandi/mcp-server-wazuh:latest
    
选项 3:从源代码构建
  1. 先决条件:

  2. 构建:

    git clone https://github.com/gbrigandi/mcp-server-wazuh.git
    cd mcp-server-wazuh
    
    # 仅构建 stdio 传输(默认)
    cargo build --release
    
    # 构建并支持 HTTP 传输
    cargo build --release --features http
    

    二进制文件将位于 target/release/mcp-server-wazuh。

配置你的大模型客户端

配置大模型客户端的方法因客户端而异。对于支持 MCP(Model Context Protocol)的客户端,通常需要将客户端指向 mcp-server-wazuh 可执行文件的路径。

Claude Desktop 示例:

配置你的 claude_desktop_config.json 文件:

{
  "mcpServers": {
    "wazuh": {
      "command": "/path/to/mcp-server-wazuh",
      "args": [],
      "env": {
        "WAZUH_API_HOST": "your_wazuh_manager_api_host",
        "WAZUH_API_PORT": "55000",
        "WAZUH_API_USERNAME": "your_wazuh_api_user",
        "WAZUH_API_PASSWORD": "your_wazuh_api_password",
        "WAZUH_INDEXER_HOST": "your_wazuh_indexer_host",
        "WAZUH_INDEXER_PORT": "9200",
        "WAZUH_INDEXER_USERNAME": "your_wazuh_indexer_user",
        "WAZUH_INDEXER_PASSWORD": "your_wazuh_indexer_password",
        "WAZUH_VERIFY_SSL": "false",
        "WAZUH_TEST_PROTOCOL": "https",
        "RUST_LOG": "info"
      }
    }
  }
}

将 /path/to/mcp-server-wazuh 替换为二进制文件的实际路径,并按照配置部分中的说明配置环境变量。

配置完成后,你的大模型客户端应该能够启动 mcp-server-wazuh 并与其通信,以访问 Wazuh 安全数据。

如果使用 Docker,请创建一个 .env 文件并填写你的 Wazuh 配置:

WAZUH_API_HOST=your_wazuh_manager_api_host
WAZUH_API_PORT=55000
WAZUH_API_USERNAME=your_wazuh_api_user
WAZUH_API_PASSWORD=your_wazuh_api_password
WAZUH_INDEXER_HOST=your_wazuh_indexer_host
WAZUH_INDEXER_PORT=9200
WAZUH_INDEXER_USERNAME=your_wazuh_indexer_user
WAZUH_INDEXER_PASSWORD=your_wazuh_indexer_password
WAZUH_VERIFY_SSL=false
WAZUH_TEST_PROTOCOL=https
RUST_LOG=info

配置你的 claude_desktop_config.json 文件:

{
  "mcpServers": {
    "wazuh": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i",
        "--env-file", "/path/to/your/.env",
        "ghcr.io/gbrigandi/mcp-server-wazuh:latest"
      ]
    }
  }
}

配置

通过环境变量管理配置。进行本地开发时,可以将 .env 文件放在项目根目录中。

变量说明默认值必填
WAZUH_API_HOSTWazuh Manager API 服务的主机名或 IP 地址。localhost是
WAZUH_API_PORTWazuh Manager API 的端口号。55000是
WAZUH_API_USERNAME用于 Wazuh Manager API 身份验证的用户名。wazuh是
WAZUH_API_PASSWORD用于 Wazuh Manager API 身份验证的密码。wazuh是
WAZUH_INDEXER_HOSTWazuh Indexer API 服务的主机名或 IP 地址。localhost是
WAZUH_INDEXER_PORTWazuh Indexer API 的端口号。9200是
WAZUH_INDEXER_USERNAME用于 Wazuh Indexer API 身份验证的用户名。admin是
WAZUH_INDEXER_PASSWORD用于 Wazuh Indexer API 身份验证的密码。admin是
WAZUH_VERIFY_SSL设置为 true,以验证 Wazuh API 和 Indexer 连接的 SSL 证书。false否
WAZUH_TEST_PROTOCOLWazuh 连接使用的协议(例如,“http”、“https”)。会覆盖客户端默认值。https否
RUST_LOG日志级别(例如,info、debug、trace)。info否

关于 WAZUH_VERIFY_SSL 的说明: 对于生产环境,强烈建议设置 WAZUH_VERIFY_SSL=true,并确保正确验证 Wazuh Manager API 和 Wazuh Indexer 连接的证书。将其设置为 false 会禁用证书检查,存在安全风险。 “必填:是”表示这些变量对于服务连接到相应的 Wazuh 组件至关重要。虽然提供了默认值,但这些值很可能不适用于生产环境或非本地环境。

构建

先决条件
本地开发
  1. 克隆仓库:
    git clone https://github.com/gbrigandi/mcp-server-wazuh.git 
    cd mcp-server-wazuh
    
  2. 配置(如果使用 Wazuh API):
    • 复制示例环境文件:cp .env.example .env
    • 使用你的 Wazuh API 详细信息编辑 .env 文件(例如 WAZUH_API_HOST、WAZUH_API_PORT)。
  3. 构建:
    # 使用默认功能构建(仅 stdio 传输)
    cargo build
    
    # 构建并支持 HTTP 传输
    cargo build --features http
    
  4. 运行:
    # 使用 stdio 传输运行(默认)
    cargo run
    
    # 使用 HTTP 传输运行(构建时需要指定 --features http)
    cargo run --features http -- --transport http
    
    # 或使用运行脚本(可能会设置 stdio 模式):
    # ./run.sh
    

传输模式

Wazuh MCP 服务支持两种与 MCP 客户端通信的传输模式:

stdio 传输(默认)

stdio 传输是默认模式,适用于本地集成场景,在这种场景中,MCP 客户端会将服务作为子进程启动。通信通过 stdin/stdout 使用 JSON-RPC 2.0 消息进行。

# Run with stdio transport (default)
mcp-server-wazuh

# Explicit stdio transport
mcp-server-wazuh --transport stdio
Streamable HTTP 传输

HTTP 传输支持部署远程服务,让 MCP 客户端能够通过网络连接。此模式实现了 MCP Streamable HTTP 规范,并支持 Server-Sent Events(SSE)。

# Run with HTTP transport on default address (127.0.0.1:8080)
mcp-server-wazuh --transport http

# Run with custom host and port
mcp-server-wazuh --transport http --host 0.0.0.0 --port 3000

HTTP 传输功能:

  • 使用单个 /mcp 端点进行所有 MCP 通信
  • 通过 POST 请求发送 JSON-RPC 消息
  • 使用 Server-Sent Events(SSE)流式传输响应
  • 通过 MCP-Session-Id 标头管理会话
  • 协议版本:2025-06-18(rmcp 0.10 支持的 MCP 规范)

安全提示: 默认情况下,HTTP 传输绑定到 127.0.0.1(仅限本地主机)。若绑定到 0.0.0.0 以供远程访问,请确保已采取适当的网络安全措施(防火墙规则、带 TLS 的反向代理等)。

CLI 参数
参数说明默认值
--transport传输模式:stdio 或 httpstdio
--hostHTTP 服务绑定地址(仅适用于 http 传输)127.0.0.1
--portHTTP 服务端口(仅适用于 http 传输)8080

架构

此服务基于 rmcp 框架(v0.10+)构建,用于在 MCP 客户端(例如 Claude Desktop、IDE 扩展)与 Wazuh MCP Server 之间进行通信。该服务支持 stdio 和 Streamable HTTP 两种传输方式,并通过与 Wazuh Indexer 和 Wazuh Manager API 交互来获取安全警报及其他数据。

sequenceDiagram
    participant ClientApp as Client Application (e.g., IDE Extension / Claude Desktop)
    participant WazuhMCPServer as Wazuh MCP Server (this application)
    participant WazuhAPI as Wazuh API

    ClientApp->>+WazuhMCPServer: (stdio) MCP Initialize
    WazuhMCPServer-->>-ClientApp: (stdout) MCP Initialized
    
    ClientApp->>+WazuhMCPServer: (stdio) MCP Request (tools/list)
    WazuhMCPServer->>WazuhMCPServer: Parse MCP Request
    WazuhMCPServer->>WazuhMCPServer: Process internally
    WazuhMCPServer-->>-ClientApp: (stdout) MCP Response (available tools)
    
    ClientApp->>+WazuhMCPServer: (stdio) MCP Request (tools/call for wazuhAlerts)
    WazuhMCPServer->>WazuhMCPServer: Parse MCP Request
    WazuhMCPServer->>+WazuhAPI: Request Wazuh Alerts (with WAZUH_API_USERNAME, WAZUH_API_PASSWORD)
    WazuhAPI-->>-WazuhMCPServer: Wazuh Alert Data (JSON)
    WazuhMCPServer->>WazuhMCPServer: Transform Wazuh Alerts to MCP Format
    WazuhMCPServer-->>-ClientApp: (stdout) MCP Response (alerts)

数据流(以 stdio 为主):

  1. 应用程序(例如 IDE 扩展、CLI 工具)将 Wazuh MCP Server 作为子进程启动。
  2. 应用程序向服务的 stdin 发送 MCP 格式的请求(命令)。
  3. Wazuh MCP Server 从 stdin 读取命令。
  4. 处理:
    • 服务解析 MCP 命令。
    • 如果命令需要从 Wazuh 获取数据(例如“获取最新警报”):
      • 服务连接到 Wazuh API(如有需要,使用已配置的凭据进行身份验证,例如 WAZUH_API_USERNAME、WAZUH_API_PASSWORD)。
      • 服务获取所需数据(例如安全警报)。
      • 服务的转换逻辑会处理每条警报,将 Wazuh 字段映射为 MCP 格式。
    • 如果命令属于内部命令(例如仅针对 MCP 服务的状态检查),则直接处理。
  5. 服务通过 stdout 向应用程序发送 MCP 格式的 JSON 响应(例如转换后的警报、命令确认或错误消息)。
  6. 应用程序从服务的 stdout 读取并处理 MCP 响应。

这种 stdio 交互方式可与本地开发工具或其他能够管理子进程的应用程序紧密集成。也可以提供可选的 HTTP 端点(/mcp),供偏好轮询的客户端使用。

服务通过 stdin 和 stdout 使用 JSON-RPC 2.0 消息进行通信,并遵循 Model Context Protocol(MCP)。

交互流程示例:

  1. 客户端应用程序(例如 IDE 扩展)启动 mcp-server-wazuh 进程。

  2. 客户端向服务的 stdin 发送 initialize 请求:

    {
      "jsonrpc": "2.0",
      "id": 0,
      "method": "initialize",
      "params": {
        "protocolVersion": "2025-06-18",
        "capabilities": {
          "sampling": {},
          "roots": { "listChanged": true }
        },
        "clientInfo": {
          "name": "mcp-inspector",
          "version": "0.11.0"
        }
      }
    }
    
  3. 服务通过 stdout 向客户端发送 initialize 响应:

    {
      "jsonrpc": "2.0",
      "id": 1,
      "result": {
        "protocolVersion": "2025-06-18",
        "capabilities": {
          "prompts": {},
          "resources": {},
          "tools": {}
        },
        "serverInfo": {
          "name": "mcp-server-wazuh",
          "version": "0.3.0"
        },
        "instructions": "This server provides tools to interact with a Wazuh SIEM instance for security monitoring and analysis.\nAvailable tools:\n- 'get_wazuh_alert_summary': Retrieves a summary of Wazuh security alerts. Optionally takes 'limit' parameter to control the number of alerts returned (defaults to 100)."
      }
    }
    
  4. 客户端向服务的 stdin 发送 notifications/initialized: (这是一个通知,因此客户端会省略 id。)

    {
      "jsonrpc": "2.0",
      "method": "notifications/initialized"
    }
    
  5. 客户端向服务的 stdin 发送 tools/list,请求可用工具:

    {
      "jsonrpc": "2.0",
      "id": 1,
      "method": "tools/list",
      "params": {}
    }
    
  6. 服务通过 stdout 向客户端返回工具列表:

    {
      "jsonrpc": "2.0",
      "id": 2,
      "result": {
        "tools": [
          {
            "name": "get_wazuh_alert_summary",
            "description": "Retrieves a summary of Wazuh security alerts. Returns formatted alert information including ID, timestamp, and description.",
            "inputSchema": {
              "$schema": "http://json-schema.org/draft-07/schema#",
              "properties": {
                "limit": {
                  "description": "Maximum number of alerts to retrieve (default: 100)",
                  "format": "uint32",
                  "minimum": 0.0,
                  "type": ["integer", "null"]
                }
              },
              "title": "GetAlertSummaryParams",
              "type": "object"
            }
          }
        ]
      }
    }
    
  7. 客户端向服务的 stdin 发送 tools/call,调用 get_wazuh_alert_summary 工具:

    {
      "jsonrpc": "2.0",
      "id": 3,
      "method": "tools/call",
      "params": {
        "name": "get_wazuh_alert_summary",
        "arguments": {
          "limit": 5
        }
      }
    }
    
  8. 服务从 stdin 接收请求,并处理 get_wazuh_alert_summary 调用(包括查询 Wazuh Indexer API 并转换数据)。

  9. 服务通过 stdout 向客户端发送 tools/call 响应,其中包含格式化后的警报:

    {
      "jsonrpc": "2.0",
      "id": 3,
      "result": {
        "content": [
          {
            "type": "text",
            "text": "Alert ID: 1747091815.1212763\nTime: 2024-01-15T10:30:45.123Z\nAgent: web-server-01\nLevel: 7\nDescription: Attached USB Storage"
          },
          {
            "type": "text", 
            "text": "Alert ID: 1747066333.1207112\nTime: 2024-01-15T10:25:12.456Z\nAgent: database-server\nLevel: 5\nDescription: New dpkg (Debian Package) installed."
          }
        ],
        "isError": false
      }
    }
    

    或者,如果未找到警报:

    {
      "jsonrpc": "2.0",
      "id": 3,
      "result": {
        "content": [
          {
            "type": "text",
            "text": "No Wazuh alerts found."
          }
        ],
        "isError": false
      }
    }
    

    或者,如果连接 Wazuh 时出错:

    {
      "jsonrpc": "2.0",
      "id": 3,
      "result": {
        "content": [
          {
            "type": "text",
            "text": "Error retrieving alerts from Wazuh: HTTP request error: connection refused"
          }
        ],
        "isError": true
      }
    }
    

开发与测试

  • 代码风格: 使用标准的 Rust 格式化工具(cargo fmt)。
  • Lint 检查: 使用 Clippy(cargo clippy)。
  • 测试: 包含转换逻辑的单元测试和集成测试。对于 stdio,测试可能会通过向测试框架传入输入和输出进行。对于 HTTP,测试使用模拟的 Wazuh API 服务(httpmock)和测试 MCP 客户端。
    # 运行所有测试
    cargo test
    
    # 运行指定的集成测试(HTTP 测试示例)
    # cargo test --test integration_test
    
    # 运行测试并输出详细日志
    RUST_LOG=debug cargo test
    
  • 请参阅 tests/README.md,了解更多关于运行测试和使用测试客户端 CLI 的信息。

许可证

本项目采用 MIT 许可证授权。

评论

支持 Markdown

第一次接触 MCP?

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

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