Skip to main content
Glama
README.md
# BWIKI MCP Server

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Node.js](https://img.shields.io/badge/Node.js-%3E%3D18-green.svg)](https://nodejs.org/)
[![MCP](https://img.shields.io/badge/MCP-Compatible-blue.svg)](https://modelcontextprotocol.io/)

专为 BWIKI 编辑优化的 MCP (Model Context Protocol) 服务器。基于 Playwright 构建,自动处理 CodeMirror 编辑器,提供语义化的 BWIKI 操作工具。

## ✨ 特性

- 🎯 **BWIKI 专用工具** - 13 个语义化工具,专为 BWIKI 操作设计
- 🔧 **自动处理 CodeMirror** - 无需手动处理编辑器类型判断
- 📁 **智能分类管理** - 自动插入到正确位置,避免重复
- 🔐 **持久化登录** - 支持浏览器数据目录保存登录状态
- 🌐 **跨平台** - 支持 Windows、macOS、Linux

## 📦 安装

```bash
# 克隆仓库
git clone https://github.com/你的用户名/bwiki-mcp.git
cd bwiki-mcp

# 安装依赖
npm install

# 构建
npm run build
```

## ⚙️ 配置

### 环境变量

| 变量名 | 描述 | 默认值 |
|--------|------|--------|
| `BWIKI_USER_DATA_DIR` | 浏览器用户数据目录(持久化登录) | 无 |
| `BWIKI_HEADLESS` | 无头模式 | `false` |
| `BWIKI_BASE_URL` | BWIKI 基础 URL | `https://wiki.biligame.com/gc` |

### Trae IDE / Claude Desktop 配置

在 MCP 配置文件中添加:

```json
{
  "mcpServers": {
    "bwiki-mcp": {
      "command": "node",
      "args": ["/path/to/bwiki-mcp/dist/cli.js"],
      "env": {
        "BWIKI_USER_DATA_DIR": "/path/to/bwiki-mcp/browser-data",
        "BWIKI_BASE_URL": "https://wiki.biligame.com/你的wiki名称"
      }
    }
  }
}
```

## 🛠️ 可用工具

| 工具名称 | 功能描述 |
|----------|----------|
| `bwiki_navigate` | 导航到 BWIKI 页面 |
| `bwiki_edit_page` | 编辑页面内容(自动处理 CodeMirror) |
| `bwiki_add_category` | 为页面添加分类标记 |
| `bwiki_get_content` | 获取页面 Wiki 源码 |
| `bwiki_get_categories` | 获取页面分类列表 |
| `bwiki_get_file_info` | 获取文件信息 |
| `bwiki_click` | 点击页面元素 |
| `bwiki_evaluate` | 执行 JavaScript 代码 |
| `bwiki_screenshot` | 截取页面截图 |
| `bwiki_snapshot` | 获取页面 HTML 快照 |
| `bwiki_get_url` | 获取当前 URL |
| `bwiki_wait_for_selector` | 等待元素出现 |
| `bwiki_type` | 在输入框中输入文本 |

## 📖 使用示例

### 编辑页面

```javascript
// 使用 bwiki_edit_page 工具
{
  "pageName": "Main Page",
  "content": "== 新章节 ==\n这是新内容",
  "summary": "添加新章节"
}
```

### 添加分类

```javascript
// 使用 bwiki_add_category 工具
{
  "pageName": "文件:Example.png",
  "category": "游戏UI组件",
  "summary": "添加分类标记"
}
```

### 获取页面内容

```javascript
// 使用 bwiki_get_content 工具
{
  "pageName": "User:用户名/Sandbox"
}
```

## 🏗️ 项目结构

```
bwiki-mcp/
├── src/
│   ├── index.ts           # MCP 服务器主入口
│   ├── cli.ts             # 命令行入口
│   └── tools/
│       └── bwiki-tools.ts  # BWIKI 专用工具实现
├── dist/                   # 编译输出
├── package.json
├── tsconfig.json
└── README.md
```

## 🔧 开发

```bash
# 开发模式(自动编译)
npm run dev

# 构建
npm run build
```

## ⚠️ 安全提示

**`browser-data/` 目录包含浏览器登录状态和 Cookies,不要分享给他人!**

首次使用时:
1. 创建 `browser-data` 目录
2. 运行工具时会打开浏览器窗口
3. 手动登录 BWIKI
4. 登录状态会自动保存

## 📄 许可证

[MIT](LICENSE)

## 🙏 致谢

- [Microsoft Playwright MCP](https://github.com/microsoft/playwright-mcp) - 浏览器自动化基础
- [Model Context Protocol](https://modelcontextprotocol.io/) - MCP 协议规范

TDQS

A3.7/5.0

Scored across 13 tools

Disambiguation5/5

Each tool has a clear, distinct purpose: navigation, content retrieval/editing, category management, file info, and browser interaction primitives. The only potentially confusing pair is snapshot vs. screenshot, but the descriptions clearly distinguish HTML source from image capture.

Naming Consistency5/5

All tools share the 'bwiki_' prefix and follow a verb-based naming pattern. Getter functions use 'get_<noun>', while actions are single verbs like 'click', 'type', 'evaluate', 'navigate'. This makes tool names predictable and easy to remember.

Tool Count5/5

13 tools is well-scoped for a wiki automation server, covering content operations, category management, file lookup, and page interaction. It is neither too sparse nor overloaded, with each tool earning its place.

Completeness4/5

The surface covers the core wiki editing workflow: navigate, read, edit, add categories, and get file info. Browser automation tools (click, type, evaluate, wait, screenshot) enable advanced interactions. Missing page creation/deletion may be a minor gap, but edit_page likely handles page creation and the absence of delete is not critical for typical wiki editing.

Maintenance

ActivityInactive
ResponsivenessSyncing