Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
131 changes: 131 additions & 0 deletions server/mcp_server_rabbitmq/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
# RabbitMQ MCP Server

RabbitMQ MCP Server 是一个模型上下文协议(Model Context Protocol,MCP)服务器,为 MCP 客户端(如 Claude Desktop)提供与火山引擎 RabbitMQ 服务交互的能力。

## Tools
本 MCP Server 产品提供以下 Tools(工具/能力):

### Tool 1: 查询可用区列表(DescribeAvailabilityZones)

#### 类型
SaaS(云 API)

#### 详细描述
查询指定地域下支持 RabbitMQ 的可用区列表,便于在创建实例或规划容灾架构时选择合适的部署位置。

#### 调试所需的输入参数
- RegionId(string):地域 ID,例如 cn-beijing。

#### 输出
- RegionId:请求的地域 ID。
- Zones:可用区列表,每个可用区包含可用区 ID、名称等信息。

#### 最容易被唤起的 Prompt 示例
- 列出北京地域的可用区。
- 查看 cn-beijing 下可以创建 RabbitMQ 实例的可用区列表。

### Tool 2: 查询地域列表(DescribeRegions)

#### 类型
SaaS(云 API)

#### 详细描述
查询当前账号支持的 RabbitMQ 地域列表,用于选择实例部署地域或规划多地域容灾架构。

#### 调试所需的输入参数
- 无:此工具无需额外输入参数。

#### 输出
- Regions:地域列表,每个地域包含地域 ID、名称等基础信息。

#### 最容易被唤起的 Prompt 示例
- 列出当前支持 RabbitMQ 的所有地域。
- 帮我查看有哪些地域可以创建 RabbitMQ 实例。

## 可适配平台
可以使用 cline、cursor、claude desktop 或支持 MCP Server 调用的其它终端。

## 服务开通链接
[开通 RabbitMQ 服务](https://console.volcengine.com/rabbitmq),未开通的用户会自动重定向到开通页;如果已经开通,则会跳转控制台首页。

## 鉴权方式

### 火山 OpenAPI 鉴权
通过 AK/SK(签名机制)访问火山 OpenAPI。默认从环境变量读取(推荐)。

### MCP Client 鉴权(可选)
可通过配置 `auth=oauth` 为 MCP Client 增加 OAuth 身份认证(仅 SSE 模式适用)。

## 安装部署

### 系统依赖
- 安装 Python 3.10 或者更高版本
- 安装 uv

### 安装 uv 方法
**Linux/macOS:**
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```

**Windows:**
```bash
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
```

## 安装 MCP-Server
克隆仓库:
```bash
git clone git@github.com:volcengine/mcp-server.git
```

## 运行 MCP-Server 指南

### 1. 配置文件
`server/mcp_server_rabbitmq/src/mcp_server_rabbitmq/config/cfg.yaml`

默认配置:`transport = stdio``credential = env`

### 2. 协议切换
对应配置中 `transport` 参数:
- `sse`: 使用 Server-Sent Events 协议
- `server_port`: 用来设置 SSE 端口
- `StreamableHTTP`: 使用 StreamableHTTP 协议
- `server_port`: 用来设置 StreamableHTTP 端口
- `stdio`: 使用标准输入输出流协议

### 3. 身份认证
若期望对 MCP Client 的身份进行认证,可配置 `auth` 参数(仅适用于 SSE 协议):
- `oauth`, 使用 OAuth 认证(需要自备 OAuth 服务)
- `none`, 不进行身份认证

### 4. 火山访问凭证
因为 MCP Server 需要调用火山 OpenAPI,因此要提供火山访问凭证信息。
对应配置中 `credential` 参数:
- `env`: 从环境变量获取 AK、SK 进行鉴权(推荐)
- `token`: 从 Header 中获取凭证(适用于 HTTP 模式,不适用于 STDIO)

### 5. 环境变量设置
- ak 环境变量名: `VOLCENGINE_ACCESS_KEY`
- sk 环境变量名: `VOLCENGINE_SECRET_KEY`
- session_token 环境变量名: `VOLCENGINE_ACCESS_SESSION_TOKEN`
- credential 环境变量名: `VOLCENGINE_CREDENTIAL_TYPE`(若设置,则优先级高于配置)
- transport 环境变量名: `MCP_SERVER_MODE`(若设置,则优先级高于配置)
- auth 环境变量名: `MCP_SERVER_AUTH`(若设置,则优先级高于配置)
- sse_port 环境变量名: `MCP_SERVER_PORT`(若设置,则优先级高于配置)

### 6. 运行

#### 本地运行(STDIO / 默认)
```bash
uv --directory server/mcp_server_rabbitmq run mcp-server-rabbitmq
```

#### 作为远程服务(SSE / StreamableHTTP)
下载代码仓库,并设置 `transport = sse`(或 `StreamableHTTP`)。
```bash
uv --directory server/mcp_server_rabbitmq run mcp-server-rabbitmq
```

## License
MIT
46 changes: 46 additions & 0 deletions server/mcp_server_rabbitmq/pyproject.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
[project]
name = "mcp-server-rabbitmq"
version = "1.0.0"
description = "A Model Context Protocol server providing tools for volcengine rabbitmq for LLMs"
readme = "README.md"
requires-python = ">=3.10"
authors = [
{ name = "volc-sdk-team" },
]
keywords = ["rabbitmq", "mcp", "llm"]
license = { text = "MIT" }
classifiers = [
"Development Status :: 4 - Beta",
"Intended Audience :: Developers",
"License :: OSI Approved :: MIT License",
"Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.10",
]
dependencies = [
"mcp>=1.23.2",
"aiohttp>=3.11.18",
"fastmcp>=2.0.0",
"pydantic>=2.0.0",
"pyyaml>=6.0.2",
"requests>=2.32.3",
"starlette>=0.46.2",
"tzdata>=2024.2",
"uvicorn>=0.34.2",
"volcengine-python-sdk>=3.0.1",
"h11>=0.16.0",
]

[project.scripts]
mcp-server-rabbitmq = "mcp_server_rabbitmq:main"

[build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

[tool.uv]
dev-dependencies = [
"freezegun>=1.5.1",
"pyright>=1.1.389",
"pytest>=8.3.3",
"ruff>=0.8.1",
]
168 changes: 168 additions & 0 deletions server/mcp_server_rabbitmq/requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,168 @@
# This file was autogenerated by uv via the following command:
# uv pip compile pyproject.toml --output-file requirements.txt
aiohappyeyeballs==2.6.1
# via aiohttp
aiohttp==3.11.18
# via mcp-server-rabbitmq (pyproject.toml)
aiosignal==1.3.2
# via aiohttp
annotated-types==0.7.0
# via pydantic
anyio==4.9.0
# via
# httpx
# mcp
# sse-starlette
# starlette
attrs==25.3.0
# via
# aiohttp
# jsonschema
# referencing
certifi==2025.1.31
# via
# httpcore
# httpx
# requests
# volcengine-python-sdk
cffi==2.0.0
# via cryptography
charset-normalizer==3.4.1
# via requests
click==8.1.8
# via
# typer
# uvicorn
cryptography==46.0.5
# via pyjwt
exceptiongroup==1.2.2
# via fastmcp
fastmcp==2.2.2
# via mcp-server-rabbitmq (pyproject.toml)
frozenlist==1.6.0
# via
# aiohttp
# aiosignal
h11==0.16.0
# via
# mcp-server-rabbitmq (pyproject.toml)
# httpcore
# uvicorn
httpcore==1.0.9
# via httpx
httpx==0.28.1
# via
# fastmcp
# mcp
httpx-sse==0.4.0
# via mcp
idna==3.10
# via
# anyio
# httpx
# requests
# yarl
jsonschema==4.25.1
# via mcp
jsonschema-specifications==2025.9.1
# via jsonschema
markdown-it-py==3.0.0
# via rich
mcp==1.26.0
# via
# mcp-server-rabbitmq (pyproject.toml)
# fastmcp
mdurl==0.1.2
# via markdown-it-py
multidict==6.4.3
# via
# aiohttp
# yarl
openapi-pydantic==0.5.1
# via fastmcp
propcache==0.3.1
# via
# aiohttp
# yarl
pycparser==3.0
# via cffi
pydantic==2.11.3
# via
# mcp-server-rabbitmq (pyproject.toml)
# mcp
# openapi-pydantic
# pydantic-settings
pydantic-core==2.33.1
# via pydantic
pydantic-settings==2.9.1
# via mcp
pygments==2.19.1
# via rich
pyjwt==2.11.0
# via mcp
python-dateutil==2.9.0.post0
# via volcengine-python-sdk
python-dotenv==1.1.0
# via
# fastmcp
# pydantic-settings
python-multipart==0.0.20
# via mcp
pyyaml==6.0.2
# via mcp-server-rabbitmq (pyproject.toml)
referencing==0.36.2
# via
# jsonschema
# jsonschema-specifications
requests==2.32.3
# via mcp-server-rabbitmq (pyproject.toml)
rich==14.0.0
# via
# fastmcp
# typer
rpds-py==0.27.1
# via
# jsonschema
# referencing
shellingham==1.5.4
# via typer
six==1.17.0
# via
# python-dateutil
# volcengine-python-sdk
sniffio==1.3.1
# via anyio
sse-starlette==2.3.3
# via mcp
starlette==0.46.2
# via
# mcp
# sse-starlette
typer==0.15.2
# via fastmcp
typing-extensions==4.13.2
# via
# mcp
# pydantic
# pydantic-core
# typer
# typing-inspection
typing-inspection==0.4.2
# via
# mcp
# pydantic
# pydantic-settings
tzdata==2025.2
# via mcp-server-rabbitmq (pyproject.toml)
urllib3==2.4.0
# via
# requests
# volcengine-python-sdk
uvicorn==0.34.2
# via mcp
volcengine-python-sdk==3.0.1
# via mcp-server-rabbitmq (pyproject.toml)
websockets==15.0.1
# via fastmcp
yarl==1.20.0
# via aiohttp
12 changes: 12 additions & 0 deletions server/mcp_server_rabbitmq/src/mcp_server_rabbitmq/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from .server import serve


def main():
"""Volcengine MCP Server"""
import asyncio

asyncio.run(serve())


if __name__ == "__main__":
main()
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
from . import main

main()
12 changes: 12 additions & 0 deletions server/mcp_server_rabbitmq/src/mcp_server_rabbitmq/config/cfg.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
service_code: rabbitmq
transport: stdio # 支持 stdio 和 sse 和 StreamableHTTP
server_port: 8888 # sse | StreamableHTTP 模式需要设定端口
auth: none # 支持 oauth 和 none
credential: env # 支持 env 和 token

#oauth:
# client_id: your client id
# client_secret: your client secret
# authorize_url: 'https://github.com/login/oauth/authorize'
# token_url: 'https://github.com/login/oauth/access_token'
# scope: [user]
Loading