mcpField
M
mulewatch

mulewatch

本地服务
heybrahim.com云与基础设施02 周前更新

关于 mulewatch

mulewatch 是面向 MuleSoft Anypoint 运维人员的只读 MCP 服务,无需本地 Mule 项目即可查看平台状态。它整合实时与归档日志、部署信息、API Manager 和 Exchange 资产。

主要功能

  1. 01列出业务组和环境
  2. 02检查不同目标上的已部署应用
  3. 03获取并分析应用日志
  4. 04搜索历史监控归档
  5. 05列出 API Manager 实例
  6. 06搜索 Exchange 资产

适用场景

  1. 01从实时日志排查应用错误
  2. 02搜索历史事件的归档日志
  3. 03跨环境查看部署和 API 资产

MCP 相关

该 stdio MCP 服务使用运维人员的凭据,将 MCP 客户端连接到 MuleSoft Anypoint。它提供日志、部署、环境、API Manager 和 Exchange 的只读工具。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"brbousnguar-mulewatch": {
"command": "npx",
"args": [
"-y",
"mulewatch"
],
"env": {
"ANYPOINT_CLIENT_ID": "<ANYPOINT_CLIENT_ID>",
"ANYPOINT_CLIENT_SECRET": "<ANYPOINT_CLIENT_SECRET>",
"ANYPOINT_ORG_ID": "<ANYPOINT_ORG_ID>",
"ANYPOINT_ALLOWED_ENVIRONMENTS": "<ANYPOINT_ALLOWED_ENVIRONMENTS>",
"ANYPOINT_BASE_URL": "<ANYPOINT_BASE_URL>",
"ANYPOINT_MONITORING_BASE_URL": "<ANYPOINT_MONITORING_BASE_URL>"
}
}
}
}
启动命令npx -y mulewatch
需要配置的环境变量
ANYPOINT_CLIENT_IDAnypoint connected app client id (app acts on its own behalf).
ANYPOINT_CLIENT_SECRET密钥Anypoint connected app client secret.
ANYPOINT_ORG_IDBusiness group id to operate on. Defaults to the organization the credentials belong to.
ANYPOINT_ALLOWED_ENVIRONMENTSComma-separated environment names or ids the server is allowed to read. Unset means all visible environments.
ANYPOINT_BASE_URLAnypoint control plane host. Defaults to https://anypoint.mulesoft.com.
ANYPOINT_MONITORING_BASE_URLAnypoint Monitoring host. Defaults to https://monitoring.anypoint.mulesoft.com.

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

安装包
npmmulewatch0.1.2

工具

9

收录的工具列表 · 更新于 2 周前

此工具无需参数。

详细介绍

mulewatch

mulewatch

通过 MCP 对 MuleSoft Anypoint Platform 进行只读可观测性分析。
应用日志、历史归档搜索、Runtime Manager、API Manager 和 Exchange——任何 Anypoint 客户都可使用自己的凭据。

mulewatch on npm Listed in the MCP registry Apache-2.0 licensed
平台 MCP SDK Node.js MuleSoft Anypoint

工作原理 · 项目页面 · npm · MCP 注册表


功能

mulewatch 将 MCP 客户端——Claude Desktop、Claude Code、Cursor、OpenClaw——连接到 MuleSoft Anypoint Platform,让你可以用通俗语言询问 Mule 环境的情况,并从平台 API 获取真实答案。它面向的是值班人员,而不是编写流程的人员:无需本地 Mule 项目,且所有工具均为只读。

  • 应用日志来自 Runtime Manager,并统一了 CloudHub 2.0、Runtime Fabric 和旧版 CloudHub 的日志格式。
  • 通过 Anypoint Monitoring Archive API 搜索历史日志,查找早已超出实时日志滚动缓冲区的事件。
  • 适用于分析的日志负载——标准化日志行,以及按优先级、日志记录器和副本统计的数量。
  • 涵盖 Application Manager、CloudHub 和混合式本地部署目标的 Runtime Manager 清单。
  • API Manager 实例和 Exchange 资产,让单个服务即可回答“部署了什么、由什么提供入口,以及出了什么问题”。

所有内容都不会针对单一客户进行硬编码:业务组、环境和凭据均来自你自己的已连接应用。

与 MuleSoft 官方 MCP 服务的关系

MuleSoft 发布了自己的 MCP 服务(mulesoft-mcp-server,文档)。它是一款开发工具——主要在 IDE 的本地项目中搭建 Mule 项目、生成流程和 API 规范,并部署应用。

mulewatch 是一款运维工具。它不会对你的环境进行写入,不要求本地项目,并且涵盖了官方服务完全未涉及的领域:获取和搜索应用日志,包括 Monitoring Archive 中的历史日志。两者可以轻松并行运行;如果你需要部署或项目搭建工具,请使用官方服务。

要求

  • Node.js 20+
  • Anypoint Platform 账户,并有权访问要读取的业务组
  • 已连接应用(推荐),并启用 “以自身名义执行操作”,或使用平台凭据
  • 仅用于搜索历史日志:组织已启用 Anypoint Monitoring
已连接应用的范围

为计划使用的界面授予相应范围,并限定在需要的业务组和环境中。如果缺少范围,Anypoint 会返回一个不附带说明的 403 Forbidden;mulewatch 会捕获该错误,并指出你可能需要的范围。

界面范围
环境、业务组View Environments、View Organization
Runtime Manager 应用和日志Read Applications
历史存档搜索Anypoint Monitoring Viewer
API Manager 实例View APIs Configuration
Exchange 资产Exchange 查看者访问权限

设置

在 Anypoint Platform → Access Management → Connected Apps 中创建一个已连接应用,选择 "App acts on its own behalf (client credentials)",授予上述范围,并复制客户端 ID 和密钥。

配置仅通过环境变量完成——没有配置文件,也没有默认组织。

ANYPOINT_CLIENT_ID=your_connected_app_client_id
ANYPOINT_CLIENT_SECRET=your_connected_app_client_secret
变量必需用途
ANYPOINT_CLIENT_ID / ANYPOINT_CLIENT_SECRET一种身份验证方式已连接应用客户端凭据,自动化场景首选
ANYPOINT_USERNAME / ANYPOINT_PASSWORD一种身份验证方式Platform 登录
ANYPOINT_ACCESS_TOKEN一种身份验证方式预先生成的 bearer token;优先于另外两种方式
ANYPOINT_ORG_ID否业务组 ID。未设置时,使用“凭据所属的组织”
ANYPOINT_ALLOWED_ENVIRONMENTS否以逗号分隔的环境名称或 ID;设置后,所有工具都会拒绝访问列表之外的环境
ANYPOINT_BASE_URL否控制平面主机,默认为 https://anypoint.mulesoft.com
ANYPOINT_MONITORING_BASE_URL否Monitoring 主机,默认为 https://monitoring.anypoint.mulesoft.com
业务组

环境属于业务组,而非根组织。如果 anypoint_list_environments 返回空列表,说明凭据解析到了根组织——调用 anypoint_list_business_groups 列出 ID,然后将其中一个传入 orgId,或通过 ANYPOINT_ORG_ID 固定指定。

限制对生产环境的访问

ANYPOINT_ALLOWED_ENVIRONMENTS 限制的是整个服务,而非单个工具。设置为

ANYPOINT_ALLOWED_ENVIRONMENTS=Dev,Sandbox

后,无论目标业务组是什么,所有工具都会拒绝访问列表之外的环境,并说明原因。为加强纵深防御,可同时使用仅能访问这些环境的已连接应用。

运行

无需安装——将 MCP 客户端指向 npx:

{
  "mcpServers": {
    "mulewatch": {
      "command": "npx",
      "args": ["-y", "mulewatch"],
      "env": {
        "ANYPOINT_CLIENT_ID": "your_connected_app_client_id",
        "ANYPOINT_CLIENT_SECRET": "your_connected_app_client_secret"
      }
    }
  }
}

该代码块可直接用于 Claude Desktop(claude_desktop_config.json)、Cursor(.cursor/mcp.json)和 OpenClaw。Claude Code 的配置如下:

claude mcp add mulewatch --env ANYPOINT_CLIENT_ID=... --env ANYPOINT_CLIENT_SECRET=... -- npx -y mulewatch

也可以从克隆的仓库运行:

npm install
npm run build
npm start

该服务使用 stdio 通信,这是 MCP 客户端所需的方式。首先调用 anypoint_whoami,确认凭据、业务组和范围,然后再进行其他操作。


工具

所有工具均为只读。每个工具都接受 orgId,用于覆盖已配置的业务组。

anypoint_whoami

确认服务正在使用的凭据、业务组、主机和环境允许列表。无需参数。遇到任何故障时,请先调用此工具。

anypoint_list_business_groups

列出凭据所属组织下的业务组及其 ID 和嵌套深度。

{ "rootOrgId": "optional-root-organization-id" }
anypoint_list_environments

列出某个业务组的环境;设置了 ANYPOINT_ALLOWED_ENVIRONMENTS 时,会按该变量进行筛选。

{ "orgId": "your-business-group-id" }
anypoint_list_deployed_apps

按 environmentId 或 environmentName 列出某个环境中已部署的 Mule 应用。

{ "environmentName": "Dev", "target": "all" }
选项用途
targetapplication_manager(默认)、cloudhub、hybrid 或 all
limit返回的最大记录数,默认为 100
includeRaw在响应中包含原始 API 对象
includeErrors目标端点不可用或无访问权限时,包含各目标的错误信息

application_manager 涵盖 CloudHub 2.0 和 Runtime Fabric 部署,cloudhub 指旧版 CloudHub,hybrid 指本地 Runtime Manager。all 会查询所有目标,并报告各目标的失败情况,而不是中止查询。

anypoint_list_app_logs

列出应用在 Runtime Manager 中的最新日志。

{ "environmentName": "Dev", "appName": "my-mule-app" }
选项用途
environmentId用于替代 environmentName
deploymentId当应用名称不明确或已知时使用
specId特定的 Application Manager 部署规范/配置 ID
targetauto(默认)、application_manager 或 cloudhub
limit最大日志条目数,默认为 100,上限为 500
offsetApplication Manager 日志偏移量,默认为 0
descending是否按最新优先排列,默认为 true
startTime / endTimeApplication Manager 时间筛选条件,采用 ISO 8601 格式
includeRaw包含原始 API 响应
includeErrors当 target 为 auto 时,包含失败目标的错误信息

对于 CloudHub 2.0 和 Runtime Fabric,该工具会将 appName 解析为部署,解析当前规范,然后读取该规范的日志。对于旧版 CloudHub,该工具会直接调用 CloudHub 日志端点。

anypoint_get_app_logs_for_analysis

数据源与上文相同,但返回适用于分析的负载,而不是原始列表。诊断问题时优先使用此工具。

{ "environmentName": "Dev", "appName": "my-mule-app", "limit": 200, "errorOnly": true }

支持 anypoint_list_app_logs 的所有选项,此外还有:

选项用途
searchTerms不区分大小写的筛选词,与时间戳、优先级、消息、日志记录器、线程或实例进行匹配
errorOnly仅返回 ERROR 和 FATAL 行

响应中包含 analysis.totalFetched、analysis.totalMatched、analysis.priorityCounts、analysis.loggerCounts、analysis.instanceCounts 和 analysis.logs。计数描述所有已获取的内容;logs 包含匹配的内容。

anypoint_search_archived_logs

通过 Anypoint Monitoring Archive API 搜索历史日志,适用于实时日志流无法查看的日期。

这是其他工具无法替代的工具。anypoint_list_app_logs 和 anypoint_get_app_logs_for_analysis 读取的是 Runtime Manager 的实时日志流——这是一个较小的滚动缓冲区,在繁忙的应用中,几分钟内就可能滚动过去,无论你传入什么 startTime/endTime。每个十分钟时间窗口结束后约十分钟,归档中就会存入相应文件,并且这些文件会保留更长时间。

要求组织已启用 Anypoint Monitoring。 未启用时,每次调用都会返回 403 或 404;请改用 Runtime Manager UI 手动导出 Download Logs。

{
  "environmentName": "Prod",
  "appName": "my-mule-app",
  "date": "2026-08-09",
  "searchTerms": ["Started product import", "Import finished"]
}
选项用途
date必填,YYYY-MM-DD(UTC)
endDate可选的包含式范围结束日期,YYYY-MM-DD(UTC),总范围最多 7 天
searchTerms不区分大小写的文本筛选条件
errorOnly仅返回 ERROR 和 FATAL 行
maxEntities全量扫描回退期间探测的副本实体上限,默认值为 150,最大值为 300
maxFiles下载并解析的归档文件上限,默认值为 100,最大值为 500
limit返回的匹配行数上限,默认值为 500,最大值为 2000
includeRaw在规范化字段旁包含解析后的原始条目

查找日志的方式。 Archive API 按副本/Pod({appName}_{replicaId})而非应用建立索引,因此必须先确定副本,才能读取日志。mulewatch 会先尝试 Runtime Manager 实时日志流中可见的副本 ID(entityResolution: "live-replica")——Pod 通常在重新部署前会长期运行,因此近期过去日期的日志通常也由同一副本生成,一般只需调用几次归档 API。如果该副本在请求日期没有文件(例如应用此后已重新部署),则会回退到列出该应用曾使用过的所有副本并逐一探测(entityResolution: "full-scan"),探测范围受 maxEntities 限制。

Archive API 的请求限额为每分钟 60 次;客户端会将请求速率控制在该限额以下,并在收到 429 时退避。跨多个副本进行全量扫描回退可能需要一些时间,因此请尽可能缩小日期范围。响应会说明采用了哪种路径,以及结果是否因达到上限而被截断。

anypoint_list_api_manager_instances

列出环境中由 API Manager 管理的 API 实例。

{ "environmentName": "Dev", "assetId": "my-api" }
选项用途
assetId按 Exchange 资产 ID 筛选
technology按技术筛选,例如 mule4、flexGateway
limit / offset分页,默认值分别为 100 / 0
includeRaw包含原始 API 对象
anypoint_search_exchange_assets

搜索组织中的 Anypoint Exchange 资产。

{ "search": "customer", "types": ["rest-api"], "limit": 20 }
选项用途
search在资产名称和描述中进行自由文本搜索
types按资产类型筛选,例如 rest-api、connector、template、example
limit / offset分页,默认值分别为 50 / 0
includeRaw包含原始 API 对象

技术栈

层技术
运行时Node.js 20+,ES 模块
语言TypeScript 5.7,启用 strict,编译到 dist/
协议Model Context Protocol SDK 1.30,stdio 传输
验证zod 4
身份验证Anypoint client_credentials 令牌流程、用户名/密码或 bearer 令牌
测试node:test,无运行器依赖

仓库结构

.
├── src/
│   ├── index.ts          # bin entry: config check, stdio wiring
│   ├── tools.ts          # MCP tool registration and argument schemas
│   ├── client.ts         # AnypointClient: auth, org resolution, all API calls
│   ├── config.ts         # env-var config, environment allowlist
│   ├── normalize.ts      # envelope unwrapping, log normalization, analysis
│   ├── archive-parse.ts  # archive log line parsing, date range enumeration
│   └── errors.ts         # AnypointApiError and message formatting
├── test/                 # unit tests for the pure logic
├── docs/
│   ├── logo.png          # project mark, used in this README
│   └── og-image.png      # social preview card
├── server.json           # MCP registry manifest
├── PRICING.md            # positioning notes
└── .env.example

验证状态

开发期间,已针对一个正在运行的 Anypoint 组织测试读取路径:

工具状态
anypoint_whoami已在线验证
anypoint_list_business_groups已在线验证
anypoint_list_environments已在线验证
anypoint_list_deployed_apps已在线验证(application_manager;未测试 cloudhub/hybrid 目标)
anypoint_list_app_logs已在线验证(Application Manager 路径)
anypoint_get_app_logs_for_analysis已在线验证(Application Manager 路径)
anypoint_search_exchange_assets已在线验证
anypoint_search_archived_logs已在线验证——live-replica 快速路径和 full-scan 回退路径均已验证
anypoint_list_api_manager_instances未验证——测试用的已连接应用缺少 View APIs Configuration 范围,因此调用返回了 403

在此次检查所用的应用中,归档存有 669 个历史副本实体。搜索当天的数据时,通过实时副本快速路径处理,仅探测了其中 1 个,找到 127 个归档文件并解析了 2,859 行日志。搜索上次重新部署之前日期的数据时,则正确地回退到完整扫描路径;这是较慢的情况,设置 maxEntities 上限正是为了限制这种情况。

备注

  • 所有工具均为只读。按设计,不提供部署、停止、重启或修改策略的工具——LLM 不应修改生产 Mule 环境,而且 MuleSoft 官方服务已涵盖部署功能。
  • 令牌会缓存在内存中,直到过期前一分钟,绝不会写入磁盘。
  • 仅从环境中读取凭据;不会记录任何信息。
  • 缺少已连接应用范围时,Anypoint 会直接返回 403。系统会捕获这些错误,并注明可能缺少的范围。
  • 通过覆盖 ANYPOINT_BASE_URL 和 ANYPOINT_MONITORING_BASE_URL,即可使用 EU 及其他控制平面。

许可证

Apache-2.0。MuleSoft、Anypoint Platform 和 CloudHub 是 Salesforce, Inc. 的商标;本项目为独立项目,与 Salesforce 无关,也未获得 Salesforce 的认可。


由 Brahim Bousnguar 构建,他是一名 MuleSoft 集成工程师,可提供平台和 Agentic AI 咨询服务。

评论

支持 Markdown

第一次接触 MCP?

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

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