Skip to content

Commit fc69473

Browse files
authored
feat: rocketmq mcp server (#373)
* feat: rocketmq mcp server * feat: add support for IAMRole access
1 parent d94332f commit fc69473

14 files changed

Lines changed: 9992 additions & 0 deletions

File tree

Lines changed: 342 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,342 @@
1+
# RocketMQ MCP Server
2+
3+
RocketMQ MCP Server 是一个模型上下文协议(Model Context Protocol)服务器,为MCP客户端(如Claude Desktop)提供与火山引擎RocketMQ服务交互的能力。可以基于自然语言对云端实例资源进行巡检信息、地域、可用区的查询操作以及风险巡检的开关操作,实现RocketMQ资源的高效管理。
4+
5+
6+
| 版本 | v0.1.0 |
7+
| :-: | :-: |
8+
| 描述 | 自然语言驱动 RocketMQ 运维新体验 |
9+
| 分类 | 云基础-消息队列 |
10+
| 标签 | RocketMQ,消息队列,MCP |
11+
12+
## Tools
13+
本 MCP Server 产品提供以下 Tools (工具/能力):
14+
15+
### Tool 1: 查询可用区列表(DescribeAvailabilityZones)
16+
17+
#### 类型
18+
19+
SaaS(云 API)
20+
21+
#### 详细描述
22+
23+
查询指定地域下支持 RocketMQ 的可用区列表,便于在创建实例或规划容灾架构时选择合适的部署位置。
24+
25+
#### 调试所需的输入参数
26+
27+
- RegionId(string):地域 ID,例如 cn-beijing。
28+
29+
#### 输出
30+
31+
- RegionId:请求的地域 ID。
32+
- Zones:可用区列表,每个可用区包含可用区 ID、名称等信息。
33+
34+
#### 最容易被唤起的 Prompt 示例
35+
36+
- 列出北京地域的可用区。
37+
- 查看 cn-beijing 下可以创建 RocketMQ 实例的可用区列表。
38+
39+
### Tool 2: 查询地域列表(DescribeRegions)
40+
41+
#### 类型
42+
43+
SaaS(云 API)
44+
45+
#### 详细描述
46+
47+
查询当前账号支持的 RocketMQ 地域列表,用于选择实例部署地域或规划多地域容灾架构。
48+
49+
#### 调试所需的输入参数
50+
51+
- 无:此工具无需额外输入参数。
52+
53+
#### 输出
54+
55+
- Regions:地域列表,每个地域包含地域 ID、名称等基础信息。
56+
57+
#### 最容易被唤起的 Prompt 示例
58+
59+
- 列出当前支持 RocketMQ 的所有地域。
60+
- 帮我查看有哪些地域可以创建 RocketMQ 实例。
61+
62+
### Tool 3: 开启或关闭实例风险巡检(EnableInstanceInspect)
63+
64+
#### 类型
65+
66+
SaaS(云 API)
67+
68+
#### 详细描述
69+
70+
为指定实例开启或关闭风险巡检功能,用于按需启用巡检、控制告警数量或在变更前临时关闭巡检。
71+
72+
#### 调试所需的输入参数
73+
74+
- InstanceId(string):实例 ID。
75+
- Enable(boolean):是否开启风险巡检,true 表示开启,false 表示关闭。
76+
77+
#### 输出
78+
79+
- 空对象或 OK 状态:表示实例风险巡检开关操作已执行成功。
80+
81+
#### 最容易被唤起的 Prompt 示例
82+
83+
- 帮我为实例 rocketmq-xxxx 开启风险巡检功能。
84+
- 关闭实例 rocketmq-xxxx 的风险巡检开关。
85+
86+
### Tool 4: 查询巡检规则配置(GetInspectConfig)
87+
88+
#### 类型
89+
90+
SaaS(云 API)
91+
92+
#### 详细描述
93+
94+
查询指定实例已配置的巡检规则及手动触发限制,用于巡检策略排查与合规审计。
95+
96+
#### 调试所需的输入参数
97+
98+
- InstanceId(string):实例 ID。
99+
- PageNumber(integer):页码,最小值为 1。
100+
- PageSize(integer):每页返回的巡检规则数量,取值范围 1~100。
101+
- Filters(map,可选):筛选条件,例如按规则类型、状态过滤。
102+
103+
#### 输出
104+
105+
- InstanceId:实例 ID。
106+
- Configs:巡检规则配置列表,每条记录包含规则名称、类型、开关状态等信息。
107+
- Total:巡检规则总数。
108+
- TriggerLimit:手动触发巡检的时间间隔(秒),例如 900 表示 15 分钟。
109+
110+
#### 最容易被唤起的 Prompt 示例
111+
112+
- 查询实例 rocketmq-xxxx 当前配置了哪些巡检规则。
113+
- 帮我查看实例 rocketmq-xxxx 的巡检规则配置和手动触发限制。
114+
115+
### Tool 5: 查询实例巡检异常结果(GetInstanceInspectResult)
116+
117+
#### 类型
118+
119+
SaaS(云 API)
120+
121+
#### 详细描述
122+
123+
分页查询指定实例的巡检异常结果,用于了解当前风险项、异常数量及分布情况。
124+
125+
#### 调试所需的输入参数
126+
127+
- InstanceId(string):实例 ID。
128+
- PageNumber(integer):页码,最小值为 1。
129+
- PageSize(integer):每页返回的巡检异常结果数量,取值范围 1~100。
130+
- SortBy(string,可选):排序字段,目前仅支持 TimeStamp。
131+
- SortOrder(string,可选):排序方式,ASC(升序)或 DESC(降序)。
132+
133+
#### 输出
134+
135+
- InstanceId:实例 ID。
136+
- Results:巡检异常结果列表,每条记录包含异常类型、级别、发生时间、建议处理方式等信息。
137+
- Total:巡检异常结果总数。
138+
- InspectCnt:本次统计涉及的巡检规则数量。
139+
- UnExpectedCnt:检测到的异常数量。
140+
141+
#### 最容易被唤起的 Prompt 示例
142+
143+
- 查询实例 rocketmq-xxxx 最近的巡检异常结果,按时间倒序展示。
144+
- 帮我看看实例 rocketmq-xxxx 当前的巡检异常概况和总数量。
145+
146+
### Tool 6: 手动处理巡检异常结果(ManualProcessResult)
147+
148+
#### 类型
149+
150+
SaaS(云 API)
151+
152+
#### 详细描述
153+
154+
将指定巡检异常结果标记为已处理(Solved),用于在人工排查或确认无需处理后关闭对应告警。
155+
156+
#### 调试所需的输入参数
157+
158+
- InstanceId(string):实例 ID。
159+
- ResultId(string):巡检异常结果的唯一 ID,可通过 GetInstanceInspectResult 获取。
160+
161+
#### 输出
162+
163+
- 空对象或 OK 状态:表示指定巡检异常结果已成功标记为已处理。
164+
165+
#### 最容易被唤起的 Prompt 示例
166+
167+
- 将实例 rocketmq-xxxx 中 ResultId 为 45e215e9fe10... 的巡检异常标记为已处理。
168+
- 我已经手动处理了某个巡检异常,帮我把对应的巡检结果设为已解决。
169+
170+
### Tool 7: 手动触发巡检(ManualTriggerInspect)
171+
172+
#### 类型
173+
174+
SaaS(云 API)
175+
176+
#### 详细描述
177+
178+
手动触发指定实例的单条巡检规则,用于在变更前后验证 Queue 资源、队列均衡或订阅一致性等情况。
179+
180+
#### 调试所需的输入参数
181+
182+
- InstanceId(string):实例 ID。
183+
- Type(string):巡检规则类型,取值为 cluster、topic 或 group。
184+
- InspectName(string):巡检任务名称,取值为 queueInsufficient、queueBalance 或 subscribeConsistency(5.x 实例不支持 subscribeConsistency)。
185+
186+
#### 输出
187+
188+
- 空对象或 OK 状态:表示巡检任务已成功触发,可稍后通过 GetInstanceInspectResult 查询结果。
189+
190+
#### 最容易被唤起的 Prompt 示例
191+
192+
- 立刻对实例 rocketmq-xxxx 执行 Queue 资源不足巡检(cluster/queueInsufficient)。
193+
- 对实例 rocketmq-xxxx 的 Topic 队列均衡情况执行一次手动巡检(topic/queueBalance)。
194+
195+
## 可适配平台
196+
197+
可以使用cline、cursor、claude desktop或支持MCP server调用的其它终端
198+
199+
## 服务开通链接
200+
201+
[开通 RocketMQ 服务](https://console.volcengine.com/rocketmq), 未开通的用户会自动重定向到开通页. 如果已经开通,则会跳转首页
202+
203+
## 鉴权方式
204+
205+
API Key ([签名机制]())
206+
207+
## 安装部署
208+
209+
### 系统依赖
210+
211+
- 安装 Python 3.10 或者更高版本
212+
- 安装 uv
213+
214+
```
215+
uv sync
216+
source .venv/bin/activate
217+
mv .env_example .env
218+
```
219+
220+
请在.env文件中设置相关环境变量
221+
222+
如果是本地部署,可以设置 `VOLCENGINE_ACCESS_KEY`, `VOLCENGINE_SECRET_KEY` 等,用于当作工具的默认参数
223+
224+
如果是Server化部署,需设置DEPLOY_MODE=remote,且仅设置REGION
225+
226+
## 安装 MCP-Server
227+
克隆仓库:
228+
```bash
229+
git clone git@github.com:volcengine/mcp-server.git
230+
```
231+
232+
## 运行 MCP-Server 指南
233+
### 1. 配置文件
234+
`server/mcp_server_rocketmq/src/mcp_server_rocketmq/config/config.yaml`
235+
236+
### 2. 协议切换
237+
对应配置中 `transport` 参数:
238+
- `sse`: 使用 Server-Sent Events 协议
239+
- - `server_port`: 用来设置 SSE 端口
240+
- `StreamableHTTP`: 使用 StreamableHTTP 协议
241+
- - `server_port`: 用来设置 StreamableHTTP 端口
242+
- `stdio`: 使用标准输入输出流协议
243+
244+
### 3. 身份认证
245+
若期望对MCP-Client的身份进行认证,可配置 `auth` 参数 (仅适用于SSE协议):
246+
- `oauth`, 使用 OAuth 认证(需要自备OAuth服务)
247+
- `none`, 不进行身份认证
248+
249+
### 4. 火山访问凭证
250+
因为MCP-Server需要调用火山OpenAPI,因此要提供火山访问凭证信息
251+
对应配置中 `credential` 参数:
252+
- `env`: 从环境变量获取 AK、SK 进行鉴权,取值内容参考:环境变量设置
253+
- `token` 从Header中获取凭证,需要按照下面的流程准备
254+
1. **准备JSON**
255+
- 构建一个JSON结构,其格式为`{"AccessKeyId":"","SecretAccessKey":"","SessionToken":""}`
256+
- 请将`AccessKeyId``SecretAccessKey`替换为具体的内容,`SessionToken`可以为空。
257+
- 示例:`{"AccessKeyId":"AK","SecretAccessKey":"SK","SessionToken":""}`
258+
2. **Base64编码上述JSON**
259+
- 使用Base64编码工具对准备好的JSON进行编码。
260+
- 示例:假设原始JSON为`{"AccessKeyId":"AK","SecretAccessKey":"SK","SessionToken":""}`,编码后可能为`ICB7IkFjY2Vzc0tleUlkIjoiQUsiLCJTZWNyZXRBY2Nlc3NLZXkiOiJTSyIsIlNlc3Npb25Ub2tlbiI6IiJ9`(实际编码结果可能因工具和编码规范略有差异)
261+
3. **设置Header**
262+
- **Key**:设置为`Authorization`
263+
- **Value**:格式为`Bearer +` 上面Base64编码的结果,注意`Bearer`后面有一个空格。
264+
- 示例:`Authorization = Bearer ICB7IkFjY2Vzc0tleUlkIjoiQUsiLCJTZWNyZXRBY2Nlc3NLZXkiOiJTSyIsIlNlc3Npb25Ub2tlbiI6IiJ9`
265+
266+
### 5. 运行模式
267+
#### SSE/StreamableHTTP 模式
268+
- 支持本地启动
269+
- 如果 `auth = oauth`: 需自行准备Oauth服务器
270+
- - 必须设置 `credential = env`: 并自行准备AK、SK并设置到环境变量
271+
- 如果 `auth = none`,则 credential 可设置为 token 或 env
272+
#### STDIO 模式
273+
- 只能设置 `credential = env` 需准备AK、SK并设置到环境变量
274+
275+
### 6. 环境变量设置
276+
- ak 环境变量名: VOLCENGINE_ACCESS_KEY
277+
- sk 环境变量名: VOLCENGINE_SECRET_KEY
278+
- session_token 环境变量名: VOLCENGINE_ACCESS_SESSION_TOKEN
279+
- credential 环境变量名: VOLCENGINE_CREDENTIAL_TYPE (若设置,则优先级高于配置)
280+
- transport 环境变量名: MCP_SERVER_MODE (若设置,则优先级高于配置)
281+
- auth 环境变量名: MCP_SERVER_AUTH (若设置,则优先级高于配置)
282+
- sse_port 环境变量名: MCP_SERVER_PORT (若设置,则优先级高于配置)
283+
284+
### 7. 运行
285+
286+
#### 变量说明
287+
- /ABSOLUTE/PATH/TO/PARENT/FOLDER
288+
- mcp-server-rocketmq 的代码库目录,例如 /Users/xxx/mcp-server/server/mcp_server_rocketmq,对应 https://github.com/volcengine/mcp-server/tree/main/server/mcp_server_rocketmq
289+
290+
#### Run Locally
291+
#### 如果已经下载代码库
292+
```json
293+
{
294+
"mcpServers": {
295+
"RocketMQ": {
296+
"command": "uv",
297+
"args": [
298+
"--directory",
299+
"/ABSOLUTE/PATH/TO/PARENT/FOLDER",
300+
"run",
301+
"mcp-server-rocketmq"
302+
],
303+
"env": {
304+
"VOLCENGINE_ACCESS_KEY": "your ak",
305+
"VOLCENGINE_SECRET_KEY": "your sk",
306+
"VOLCENGINE_ACCESS_SESSION_TOKEN": "your session token"
307+
}
308+
}
309+
}
310+
}
311+
```
312+
#### 如果没有下载代码库
313+
```json
314+
{
315+
"mcpServers": {
316+
"RocketMQ": {
317+
"command": "uvx",
318+
"args": [
319+
"--from",
320+
"git+https://github.com/volcengine/mcp-server#subdirectory=server/mcp_server_rocketmq",
321+
"mcp-server-rocketmq"
322+
],
323+
"env": {
324+
"VOLCENGINE_ACCESS_KEY": "your ak",
325+
"VOLCENGINE_SECRET_KEY": "your sk",
326+
"VOLCENGINE_ACCESS_SESSION_TOKEN": "your session token"
327+
}
328+
}
329+
}
330+
}
331+
```
332+
#### Run Remote
333+
下载代码仓库,并设置transport = StreamableHTTP
334+
```shell
335+
uv --directory /ABSOLUTE/PATH/TO/PARENT/FOLDER run mcp-server-rocketmq
336+
```
337+
338+
## License
339+
340+
volcengine/mcp-server is licensed under the [MIT License](https://github.com/volcengine/mcp-server/blob/main/LICENSE).
341+
342+
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
[project]
2+
name = "mcp-server-rocketmq"
3+
version = "1.0.0"
4+
description = "A Model Context Protocol server providing tools for volcengin rocketmq for LLMs"
5+
readme = "README.md"
6+
requires-python = ">=3.10"
7+
authors = [
8+
{ name = "volc-sdk-team", email = "volc-sdk-team@bytedance.com" },
9+
]
10+
keywords = ["rocketmq", "mcp", "llm"]
11+
license = { text = "MIT" }
12+
classifiers = [
13+
"Development Status :: 4 - Beta",
14+
"Intended Audience :: Developers",
15+
"License :: OSI Approved :: MIT License",
16+
"Programming Language :: Python :: 3",
17+
"Programming Language :: Python :: 3.10",
18+
]
19+
dependencies = [
20+
"mcp>=v1.23.2",
21+
"aiohttp>=3.11.18",
22+
"fastmcp>=2.0.0",
23+
"pydantic>=2.0.0",
24+
"pyyaml>=6.0.2",
25+
"requests>=2.32.3",
26+
"tzdata>=2024.2",
27+
"volcengine-python-sdk>=3.0.1",
28+
"h11>=0.16.0",
29+
]
30+
31+
[project.scripts]
32+
mcp-server-rocketmq = "mcp_server_rocketmq:main"
33+
34+
[build-system]
35+
requires = ["hatchling"]
36+
build-backend = "hatchling.build"
37+
38+
[tool.uv]
39+
dev-dependencies = [
40+
"freezegun>=1.5.1",
41+
"pyright>=1.1.389",
42+
"pytest>=8.3.3",
43+
"ruff>=0.8.1",
44+
]

0 commit comments

Comments
 (0)