Skip to main content
Glama
wildfirechat

Wildfire Robot MCP Server

Official
by wildfirechat

野火机器人 MCP Server

Wildfire Robot MCP Server — 将野火IM机器人 SDK 封装为 MCP (Model Context Protocol) 服务,供 AI 智能体(Agent)调用野火IM机器人接口。

功能特性

基于野火IM的 RobotService,提供以下功能的 MCP Tool 接口:

  • 消息:发送消息、回复消息、撤回消息、更新消息,以及便捷的文本/图片/文件消息接口

  • 用户:获取用户信息(通过用户ID/手机号/用户名)、搜索用户、获取好友列表、获取用户机器人列表

  • 资料:获取机器人资料

  • 群组:创建/解散/转让群组、修改群信息、成员管理(添加/踢出/禁言/管理员/别名等)

  • 文件上传:上传文件

34 个 MCP 工具

Related MCP server: dws-cli-mcp

安全说明

此 MCP 服务仅对接野火IM的 机器人 API/robot/ 路径),机器人可执行的操作受 IM 服务端控制,权限范围有限。

关于认证

本 MCP 服务不需要额外的认证机制,因为每次调用工具时,请求参数中都包含了野火IM机器人的 robotIdrobotSecret,由野火IM服务端负责鉴权。

⚠️ 部署到公网时必须使用 HTTPS:由于 robotIdrobotSecret 随每个请求明文传输,如果通过 HTTP 部署在公网,凭证会被中间人截获。生产环境务必通过 HTTPS、VPN 或内网访问。

关于本地文件操作

以下工具涉及服务端本地文件系统,要求 MCP 服务与调用方在同一台机器上(或至少能访问相同的文件路径):

  • upload_file

  • send_image_message / send_image_message_with_optionsfilePath 模式

  • send_file_message / send_file_message_with_optionsfilePath 模式

部署到远程服务器时

  • filePath 模式不可用(客户端提供的本地路径在服务器上不存在)

  • 请改用 imageUrl / fileUrl 模式,传入可被 MCP 服务端访问的网络链接

不建议暴露管理 API

野火IM还提供 管理后台 API/admin/ 路径),可用于创建用户、删除消息、销毁群组等高级操作。但管理 API 权限极大,一旦暴露给 AI Agent 使用,可能造成严重安全风险。强烈不建议将管理 API 暴露给 Agent,如果出错会造成很大危害。

如果需要管理 API 的 MCP 服务,可以参考本项目自行封装,但务必注意:

  • 管理密钥(admin secret)一旦泄露,整个 IM 服务将被控制

  • AI Agent 可能误解用户意图执行危险操作(如批量删用户、删消息)

  • 建议仅在内网可信环境使用,或对工具做严格的参数校验和白名单

一般情况下,使用本项目的 机器人 MCP 即可满足大多数业务需求。

快速开始

环境要求

  • Node.js >= 18

  • npm >= 8

安装

git clone <your-repo-url>
cd wf-robot-mcp-server.ts

# 安装依赖
npm install

# 构建
npm run build

配置

通过环境变量配置:

# 设置野火IM服务器地址(默认 http://localhost,端口80)
# 注意:机器人接口默认端口是80,不是18080(18080是管理后台端口)
export WF_IM_SERVER_URL=http://your-im-server

启动

支持两种运行模式:

1. stdio 模式(默认,适用于 Claude Desktop 等本地 Agent)

npm start
# 或直接运行编译后的文件
node dist/index.js

2. HTTP 模式(适用于部署在服务器上,供远程客户端连接)

# 设置端口,即启动 HTTP 服务
export WF_MCP_PORT=3100
npm start

启动后 MCP 服务监听在 http://localhost:3100/mcp,客户端可通过 Streamable HTTP 协议连接。

注意:HTTP 模式支持需要客户端实现 MCP Streamable HTTP 传输。本地 Agent(如 Claude Desktop)通常使用 stdio 模式,不需要 HTTP。

多会话支持

HTTP 模式下,每个 Agent 初始化时会分配独立的 Session ID,互不干扰

  • 每个会话拥有独立的 McpServerTransport 实例

  • 会话间完全隔离,一个 Agent 的调用不影响其他 Agent

  • 无效 Session ID 的请求会被拒绝(400)

  • 空闲会话超时(10分钟)后自动清理,防止内存泄漏

验证

stdio 模式验证

启动后可通过标准输入/输出与客户端通信:

printf '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}\n{"jsonrpc":"2.0","method":"notifications/initialized"}\n{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' | node dist/index.js 2>/dev/null

HTTP 模式验证

# 健康检查
curl http://localhost:3100/

# 初始化
curl -X POST http://localhost:3100/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0"}}}'

# 列出工具(需要带上 Initialize 返回的 Mcp-Session-Id)
curl -X POST http://localhost:3100/mcp \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -H "Mcp-Session-Id: <session-id>" \
  -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'

自动化测试脚本

项目提供了 scripts/test-http.mjs,可自动验证 MCP 协议、工具注册以及各工具调用。

# 先启动 HTTP 模式服务(示例端口 3100)
WF_MCP_PORT=3100 npm start

# 另开终端,运行测试
npm test                    # 仅验证协议 + 34 个工具是否注册
npm test -- --port 3100     # 指定端口
npm run test:tools          # 测试所有工具调用(需配置凭证)

不带凭证时,脚本只验证健康检查、初始化、会话管理和工具列表。要测试实际工具调用,设置以下环境变量:

export WF_TEST_ROBOT_ID=your_robot_id
export WF_TEST_ROBOT_SECRET=your_robot_secret
export WF_TEST_TARGET_USER=existing_user_id      # 用于用户/消息相关工具
export WF_TEST_TARGET_GROUP=existing_group_id    # 用于群组只读工具
export WF_TEST_TARGET_MESSAGE_UID=123456         # 用于 reply/recall/update
export WF_TEST_IMAGE_URL=https://example.com/test.png
export WF_TEST_FILE_URL=https://example.com/test.txt
export WF_TEST_FILE_NAME=test.txt

测试写操作时,显式开启对应范围:

# 测试消息发送工具
npm test -- --send

# 测试群组创建/修改等(会在 IM 服务器上创建一个测试群组)
npm test -- --group

# 测试解散/踢人/转让等高风险群组操作
npm test -- --destructive

# 测试全部工具
npm run test:tools

安全提示:--destructive 会实际执行解散群组、踢出成员、转让群主等操作,请确保在测试环境使用。

API 接口说明

所有工具的前两个参数均为认证信息:

参数

类型

说明

robotId

string

机器人ID

robotSecret

string

机器人密钥

消息工具

send_message

发送消息。

参数

类型

说明

sender

string

发送者用户ID

conversation_type

number

会话类型:0-单聊, 1-群聊, 2-聊天室, 3-频道, 4-客服

conversation_target

string

会话目标ID

conversation_line

number

会话线路(默认0)

payload

string (JSON)

消息内容JSON字符串

payload 示例:{"type":1,"searchableContent":"hello"}

reply_message

回复消息。

参数

类型

说明

messageUid

number

消息UID

only2Sender

boolean

是否只回复给发送者(默认false)

payload

string (JSON)

消息内容JSON字符串

recall_message

撤回消息。

参数

类型

说明

messageUid

number

消息UID

update_message

更新消息内容。

参数

类型

说明

messageUid

number

消息UID

payload

string (JSON)

新的消息内容JSON字符串

便捷消息工具

send_text_message

发送文本消息(便捷接口,自动构造消息 payload)。

参数

类型

说明

sender

string

发送者用户ID

conversation_type

number

会话类型:0-单聊, 1-群聊, 2-聊天室, 3-频道, 4-客服

conversation_target

string

会话目标ID

conversation_line

number

会话线路(默认0)

text

string

文本消息内容

send_image_message

发送图片消息,支持 MCP 服务端本地文件或网络图片 URL。自动生成缩略图并上传到 IM 服务器后发送。

参数

类型

说明

sender

string

发送者用户ID

conversation_type

number

会话类型

conversation_target

string

会话目标ID

conversation_line

number

会话线路(默认0)

filePath

string

MCP 服务端本地图片路径(与 imageUrl 二选一)。远程部署时不可用

imageUrl

string

网络图片 URL(与 filePath 二选一)。远程部署时请使用此参数

处理流程:

  • 本地图片:读取 MCP 服务端文件 → 生成缩略图 → 上传原图 → 发送图片消息

  • 网络图片:下载图片 → 生成缩略图 → 上传原图 → 发送图片消息

send_file_message

发送文件消息。MCP 服务端本地文件自动上传后发送,网络链接直接发送。

参数

类型

说明

sender

string

发送者用户ID

conversation_type

number

会话类型

conversation_target

string

会话目标ID

conversation_line

number

会话线路(默认0)

filePath

string

MCP 服务端本地文件路径(与 fileUrl 二选一)。远程部署时不可用

fileUrl

string

文件网络链接(与 filePath 二选一)。远程部署时请使用此参数

fileName

string

文件名(fileUrl 模式下必填)

fileSize

number

文件大小,单位字节(可选)

send_text_message_with_options

发送文本消息(便捷接口,可指定接收用户)。

参数

类型

说明

sender

string

发送者用户ID

conversation_type

number

会话类型

conversation_target

string

会话目标ID

conversation_line

number

会话线路(默认0)

text

string

文本消息内容

to_users

string (JSON)

指定接收用户ID列表(可选),如 ["uid1","uid2"]

send_image_message_with_options

发送图片消息(支持 MCP 服务端本地文件或网络图片 URL,可指定接收用户,自动生成缩略图并上传)。

参数

类型

说明

sender

string

发送者用户ID

conversation_type

number

会话类型

conversation_target

string

会话目标ID

conversation_line

number

会话线路(默认0)

filePath

string

MCP 服务端本地图片路径(与 imageUrl 二选一)。远程部署时不可用

imageUrl

string

网络图片 URL(与 imageUrl 二选一)。远程部署时请使用此参数

to_users

string (JSON)

指定接收用户ID列表(可选)

send_file_message_with_options

发送文件消息(MCP 服务端本地文件自动上传、网络链接直接发送,可指定接收用户)。

参数

类型

说明

sender

string

发送者用户ID

conversation_type

number

会话类型

conversation_target

string

会话目标ID

conversation_line

number

会话线路(默认0)

filePath

string

MCP 服务端本地文件路径(与 fileUrl 二选一)。远程部署时不可用

fileUrl

string

文件网络链接(与 filePath 二选一)

fileName

string

文件名(fileUrl 模式下必填)

fileSize

number

文件大小,单位字节(可选)

to_users

string (JSON)

指定接收用户ID列表(可选)

用户工具

get_user_info

通过用户ID获取用户信息。

参数

类型

说明

userId

string

用户ID

get_user_info_by_mobile

通过手机号获取用户信息。

参数

类型

说明

mobile

string

手机号

get_user_info_by_name

通过用户名获取用户信息。

参数

类型

说明

userName

string

用户名

get_owner_friend_list

获取机器人 owner 的好友列表。

无额外参数。

search_user_by_display_name

根据昵称搜索用户。

参数

类型

说明

keyword

string

搜索关键词(用户昵称)

get_user_robots

获取指定用户拥有的机器人列表。

参数

类型

说明

userId

string

用户ID

资料工具

get_robot_profile

获取机器人资料。

群组工具

create_group

创建群组。

参数

类型

说明

groupInfo

string (JSON)

群组信息,如 {"name":"群名","portrait":"","type":0,"extra":""}

members

string (JSON)

成员列表(可选),如 [{"member_id":"uid","type":0,"alias":""}]

memberExtra

string

成员额外信息(可选)

get_group_info

获取群组信息。

参数

类型

说明

groupId

string

群组ID

dismiss_group

解散群组。

参数

类型

说明

groupId

string

群组ID

transfer_group

转让群组。

参数

类型

说明

groupId

string

群组ID

newOwner

string

新群主用户ID

modify_group_info

修改群组信息。

参数

类型

说明

groupId

string

群组ID

type

number

修改类型:0-群名, 1-群头像, 2-群extra, 3-群禁言, 4-群允许发言, 5-群类型, 6-群搜索类型, 7-群自动同意加入, 8-群加入权限

value

string

新值

get_group_members

获取群组成员列表。

参数

类型

说明

groupId

string

群组ID

get_group_member

获取群组成员信息。

参数

类型

说明

groupId

string

群组ID

memberId

string

成员用户ID

add_group_members

添加群组成员。

参数

类型

说明

groupId

string

群组ID

members

string (JSON)

成员列表,如 [{"member_id":"uid1","type":0,"alias":""}]

memberExtra

string

成员额外信息(可选)

set_group_manager

设置/取消群组管理员。

参数

类型

说明

groupId

string

群组ID

memberIds

string (JSON)

成员ID列表,如 ["uid1","uid2"]

isManager

boolean

true-设置管理员, false-取消管理员

mute_group_member

禁言/取消禁言群组成员。

参数

类型

说明

groupId

string

群组ID

memberIds

string (JSON)

成员ID列表

isMute

boolean

true-禁言, false-取消禁言

allow_group_member

设置/取消群组成员发言权限。

参数

类型

说明

groupId

string

群组ID

memberIds

string (JSON)

成员ID列表

isAllow

boolean

true-允许发言, false-禁止发言

kickoff_group_members

踢出群组成员。

参数

类型

说明

groupId

string

群组ID

memberIds

string (JSON)

要踢出的成员ID列表

quit_group

机器人退出群组。

参数

类型

说明

groupId

string

群组ID

set_group_member_alias

设置群组成员别名。

参数

类型

说明

groupId

string

群组ID

memberId

string

成员用户ID

alias

string

别名

set_group_member_extra

设置群组成员额外信息。

参数

类型

说明

groupId

string

群组ID

memberId

string

成员用户ID

extra

string

额外信息

文件上传工具

upload_file

上传 MCP 服务端本地文件 到 IM 服务器(传入服务端本地文件路径,自动完成预签名获取和上传)。

参数

类型

说明

filePath

string

MCP 服务端本地文件路径,如 /path/to/image.png。远程部署时不可用

mediaType

number

媒体类型(默认4-文件):1-图片, 2-音频, 3-视频, 4-文件, 5-链接, 6-存储, 7-位置

contentType

string (可选)

文件 Content-Type,不传则根据文件扩展名自动识别

⚠️ 此工具读取的是 MCP 服务端本地文件系统 上的文件,因此仅在 MCP 服务与客户端在同一台机器时可用。远程部署时请先将文件上传到可被服务端访问的位置,或使用 send_image_message / send_file_messageimageUrl / fileUrl 模式。

部署到服务器

MCP 服务支持部署到服务器上,通过 HTTP 供远程客户端连接。

⚠️ 公网部署务必使用 HTTPS:本服务不实现额外的认证层,机器人凭证 robotId / robotSecret 随每次工具调用明文传输。HTTP 部署在公网会导致凭证泄露。建议通过 Nginx/Caddy 等反向代理开启 HTTPS,或仅在 VPN/内网环境使用。

⚠️ 远程服务器不支持 filePath 模式upload_file 以及 send_image_message / send_file_messagefilePath 模式依赖 MCP 服务端本地文件系统。远程部署时,请让客户端使用 imageUrl / fileUrl 模式传入可被服务端访问的网络链接。

使用 PM2 守护进程

npm install -g pm2
WF_MCP_PORT=3100 WF_IM_SERVER_URL=http://your-im-server pm2 start dist/index.js --name wf-robot-mcp
pm2 save
pm2 startup

使用 nohup

nohup env WF_MCP_PORT=3100 WF_IM_SERVER_URL=http://your-im-server node dist/index.js > mcp.log 2>&1 &

使用 systemd(Linux)

创建 /etc/systemd/system/wf-robot-mcp.service

[Unit]
Description=Wildfire Robot MCP Server
After=network.target

[Service]
Type=simple
User=nobody
Environment=WF_MCP_PORT=3100
Environment=WF_IM_SERVER_URL=http://your-im-server
ExecStart=/usr/bin/node /path/to/wf-robot-mcp-server.ts/dist/index.js
Restart=on-failure

[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable wf-robot-mcp
sudo systemctl start wf-robot-mcp

在常见 Agent 中配置使用

本地模式(stdio,默认)

对于本地 Agent(如 Claude Desktop),MCP 服务以子进程方式运行,通过 stdio 通信。

Claude Desktop

编辑 Claude Desktop 配置文件(macOS: ~/Library/Application Support/Claude/claude_desktop_config.json,Windows: %APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "wf-robot": {
      "command": "node",
      "args": ["/path/to/wf-robot-mcp-server.ts/dist/index.js"],
      "env": {
        "WF_IM_SERVER_URL": "http://your-im-server"
      }
    }
  }
}

重启 Claude Desktop 后,即可在对话中使用野火机器人相关工具。

注意:机器人 API 端口默认是 80,不是 18080。18080 是管理后台端口,不要混淆。如果 IM 服务在本地,不设置 WF_IM_SERVER_URL 即可默认使用 http://localhost

Cursor

在 Cursor 的 MCP 配置中添加:

{
  "mcpServers": {
    "wf-robot": {
      "command": "node",
      "args": ["/path/to/wf-robot-mcp-server.ts/dist/index.js"],
      "env": {
        "WF_IM_SERVER_URL": "http://your-im-server"
      }
    }
  }
}

Windsurf

在 Windsurf 的 MCP 配置中添加:

{
  "mcpServers": {
    "wf-robot": {
      "command": "node",
      "args": ["/path/to/wf-robot-mcp-server.ts/dist/index.js"],
      "env": {
        "WF_IM_SERVER_URL": "http://your-im-server"
      }
    }
  }
}

通用 MCP 客户端(如 mcp-cli)

使用 npx 或直接运行:

# 使用 npx
WF_IM_SERVER_URL=http://your-im-server npx /path/to/wf-robot-mcp-server.ts

# 或通过 MCP 客户端配置
mcp add wf-robot --cmd "node" --args "/path/to/wf-robot-mcp-server.ts/dist/index.js" --env WF_IM_SERVER_URL=http://your-im-server

### 使用 uvx(Python 生态)

如果通过 Python 的 MCP 客户端工具连接:

```json
{
  "mcpServers": {
    "wf-robot": {
      "command": "node",
      "args": ["/path/to/wf-robot-mcp-server.ts/dist/index.js"],
      "env": {
        "WF_IM_SERVER_URL": "http://your-im-server"
      }
    }
  }
}

远程 HTTP 连接

如果 MCP 服务已部署到服务器(HTTP 模式),支持 HTTP 的 MCP 客户端可远程连接:

{
  "mcpServers": {
    "wf-robot": {
      "url": "http://your-server-ip:3100/mcp"
    }
  }
}

注意:不是所有 MCP 客户端都支持远程 HTTP 连接。Claude Desktop 等本地 Agent 仅支持 stdio 模式,需要在运行 MCP 服务的同一台机器上配置。

使用说明

  1. IM 服务地址:需配置可访问的野火IM服务器地址。如果 IM 服务在本地,可用 http://localhost;如果在远程,请替换为实际地址。

  2. 机器人认证:每次调用工具时,都需要提供 robotIdrobotSecret。Agent 会要求用户提供这些信息。

  3. JSON 参数:部分工具的参数需要以 JSON 字符串形式传入(如消息 payload、群组信息等),Agent 会自动处理序列化。

开发

目录结构

src/
  index.ts         # MCP 服务主代码
  types.d.ts       # 类型声明
package.json       # 依赖和脚本
tsconfig.json      # TypeScript 配置

构建

npm run build

添加新工具

src/index.ts 中调用 registerTool() 函数即可添加新工具:

registerTool(server, "tool_name", "工具描述", {
  param1: z.string().describe("参数1说明"),
  param2: z.number().describe("参数2说明"),
}, async (args, _extra) => {
  return handleToolCall(args.robotId, args.robotSecret, async (service) => {
    // 调用 service 的对应方法
    return service.someMethod(args.param1, args.param2);
  });
});

许可证

MIT

F
license - not found
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/wildfirechat/wf-robot-mcp-server.ts'

If you have feedback or need assistance with the MCP directory API, please join our Discord server