@fineorg/mcp 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,354 @@
1
+ # @fineorg/mcp
2
+
3
+ [![CI](https://github.com/congqiu/fine-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/congqiu/fine-mcp/actions/workflows/ci.yml)
4
+ [![npm @fineorg/mcp package](https://img.shields.io/npm/v/@fineorg/mcp.svg)](https://npmjs.org/package/@fineorg/mcp)
5
+
6
+ MCP (Model Context Protocol) 服务器,为 AI 编程工具提供 Bitbucket、Jira、Confluence 和飞书平台集成。
7
+
8
+ 通过 MCP 客户端(如 Claude Code、Cursor、Gemini CLI)调用工具,获取这些平台的数据。
9
+
10
+ ## 功能特性
11
+
12
+ - **Bitbucket 集成**: 获取 PR 详情、Diff
13
+ - **Jira 集成**: 获取任务详情
14
+ - **Confluence 集成**: 获取页面内容、子页面列表、页面评论
15
+ - **飞书开放平台集成**: 获取文档内容和评论、创建和更新云文档
16
+ - **飞书项目集成**: 获取工作项详情
17
+ - **按需启用**: 仅配置凭证的平台会被注册,无需全部配置
18
+
19
+ ## 快速开始
20
+
21
+ ### 标准配置
22
+
23
+ ```json
24
+ {
25
+ "mcpServers": {
26
+ "fine-mcp": {
27
+ "command": "npx",
28
+ "args": ["-y", "@fineorg/mcp@latest"],
29
+ "env": {
30
+ "JIRA_HOST": "https://jira.example.com",
31
+ "JIRA_USERNAME": "your-username",
32
+ "JIRA_TOKEN": "your-token"
33
+ }
34
+ }
35
+ }
36
+ }
37
+ ```
38
+
39
+ > `env` 中填写你需要的平台凭证,仅配置了凭证的平台会被启用。完整变量列表见 [平台配置](#平台配置)。
40
+
41
+ <details>
42
+ <summary>Claude Code</summary>
43
+
44
+ 使用 Claude Code CLI 添加 MCP 服务器:
45
+
46
+ ```bash
47
+ claude mcp add fine-mcp \
48
+ -e JIRA_HOST=https://jira.example.com \
49
+ -e JIRA_USERNAME=your-username \
50
+ -e JIRA_TOKEN=your-token \
51
+ -- npx -y @fineorg/mcp@latest
52
+ ```
53
+
54
+ </details>
55
+
56
+ <details>
57
+ <summary>Cursor</summary>
58
+
59
+ **点击安装:**
60
+
61
+ [<img src="https://cursor.com/deeplink/mcp-install-dark.svg" alt="Install in Cursor">](https://cursor.com/en/install-mcp?name=%40fineorg%2Fmcp&config=eyJjb21tYW5kIjoibnB4IC15IEBmaW5lb3JnL21jcEBsYXRlc3QifQ%3D%3D)
62
+
63
+ **或手动安装:**
64
+
65
+ 进入 `Cursor Settings` → `MCP` → `New MCP Server`,使用上方配置。
66
+
67
+ </details>
68
+
69
+ <details>
70
+ <summary>Gemini CLI</summary>
71
+
72
+ ```bash
73
+ # 项目级别
74
+ gemini mcp add fine-mcp npx @fineorg/mcp@latest
75
+
76
+ # 全局
77
+ gemini mcp add -s user fine-mcp npx @fineorg/mcp@latest
78
+ ```
79
+
80
+ </details>
81
+
82
+ <details>
83
+ <summary>VS Code</summary>
84
+
85
+ 按照 [VS Code MCP 安装指南](https://code.visualstudio.com/docs/copilot/chat/mcp-servers#_add-an-mcp-server) 使用上方标准配置。
86
+
87
+ </details>
88
+
89
+ ## 可用工具
90
+
91
+ ### Bitbucket
92
+
93
+ | 工具名称 | 描述 | 所需配置 |
94
+ |---------|------|---------|
95
+ | `get_pull_request` | 获取 PR 详情 | BITBUCKET_HOST + 认证 |
96
+ | `get_diff` | 获取 PR Diff | BITBUCKET_HOST + 认证 |
97
+
98
+ ### Jira
99
+
100
+ | 工具名称 | 描述 | 所需配置 |
101
+ |---------|------|---------|
102
+ | `get_jira_issue` | 获取 Jira 任务 | JIRA_HOST + 认证 |
103
+
104
+ ### Confluence
105
+
106
+ | 工具名称 | 描述 | 所需配置 |
107
+ |---------|------|---------|
108
+ | `get_confluence_page` | 获取 Confluence 页面 | CONFLUENCE_HOST + CONFLUENCE_TOKEN |
109
+ | `get_confluence_child_pages` | 获取子页面列表 | CONFLUENCE_HOST + CONFLUENCE_TOKEN |
110
+ | `get_confluence_page_comments` | 获取页面评论 | CONFLUENCE_HOST + CONFLUENCE_TOKEN |
111
+
112
+ ### 飞书开放平台
113
+
114
+ | 工具名称 | 描述 | 所需配置 |
115
+ |---------|------|---------|
116
+ | `get_feishu_document` | 获取文档内容和评论 | FEISHU_OPEN_APP_ID + FEISHU_OPEN_APP_SECRET |
117
+ | `create_feishu_document` | 创建云文档 | FEISHU_OPEN_APP_ID + FEISHU_OPEN_APP_SECRET |
118
+ | `update_feishu_document` | 更新云文档内容 | FEISHU_OPEN_APP_ID + FEISHU_OPEN_APP_SECRET |
119
+
120
+ ### 飞书项目
121
+
122
+ | 工具名称 | 描述 | 所需配置 |
123
+ |---------|------|---------|
124
+ | `get_feishu_work_item` | 获取飞书项目工作项 | FEISHU_PROJECT_KEY + 插件认证 |
125
+
126
+ ## 平台配置
127
+
128
+ 通过环境变量配置各平台凭证,仅配置了凭证的平台会被启用。
129
+
130
+ ### Bitbucket
131
+
132
+ | 环境变量 | 描述 |
133
+ |---------|------|
134
+ | `BITBUCKET_HOST` | Bitbucket 服务器地址 |
135
+ | `BITBUCKET_TOKEN` | API Token(Bearer Token 认证) |
136
+ | `BITBUCKET_USERNAME` | 用户名(Basic Auth,与密码配合使用) |
137
+ | `BITBUCKET_PASSWORD` | 密码(Basic Auth,与用户名配合使用) |
138
+
139
+ > Token 和 Username/Password 二选一,优先使用 Token。
140
+
141
+ ### Jira
142
+
143
+ | 环境变量 | 描述 |
144
+ |---------|------|
145
+ | `JIRA_HOST` | Jira 服务器地址 |
146
+ | `JIRA_USERNAME` | 用户名 |
147
+ | `JIRA_TOKEN` | API Token |
148
+
149
+ ### Confluence
150
+
151
+ | 环境变量 | 描述 |
152
+ |---------|------|
153
+ | `CONFLUENCE_HOST` | Confluence 服务器地址 |
154
+ | `CONFLUENCE_TOKEN` | 个人访问令牌(PAT,Bearer Token 认证) |
155
+
156
+ ### 飞书开放平台
157
+
158
+ | 环境变量 | 描述 |
159
+ |---------|------|
160
+ | `FEISHU_OPEN_APP_ID` | 自建应用 App ID |
161
+ | `FEISHU_OPEN_APP_SECRET` | 自建应用 App Secret |
162
+
163
+ > 需在飞书开放平台为自建应用开通以下权限(均为高级权限,需管理员审批):
164
+ > - `docx:document:readonly`(查看新版文档)— 读取文档内容时必需
165
+ > - `docx:document`(创建及编辑新版文档)— 创建/更新文档时必需
166
+ > - `wiki:wiki:readonly`(查看知识库)— 读取 Wiki 页面时必需
167
+ > - `docs:document.comment:read`(读取文档评论)— 读取文档评论时必需(可选)
168
+
169
+ ### 飞书项目
170
+
171
+ | 环境变量 | 描述 |
172
+ |---------|------|
173
+ | `FEISHU_PROJECT_KEY` | 飞书项目 Key |
174
+ | `FEISHU_PROJECT_PLUGIN_ID` | 插件 ID |
175
+ | `FEISHU_PROJECT_PLUGIN_SECRET` | 插件密钥 |
176
+ | `FEISHU_PROJECT_USE_VIRTUAL_TOKEN` | 使用虚拟 Token(默认 false) |
177
+ | `FEISHU_PROJECT_USER_KEY` | 用户 Key(虚拟 Token 时必须) |
178
+
179
+ ## 认证配置
180
+
181
+ MCP 服务器支持可选的 Token 认证,**主要用于 HTTP 模式远程部署**。Stdio 模式通过进程隔离保证安全,通常无需启用。
182
+
183
+ | 环境变量 | 描述 | 默认值 |
184
+ |---------|------|--------|
185
+ | `MCP_AUTH_ENABLED` | 是否启用认证 | `true` |
186
+ | `MCP_AUTH_TOKEN` | 认证令牌(使用 `openssl rand -hex 32` 生成) | — |
187
+ | `MCP_ALLOWED_CLIENTS` | 允许的客户端名称,逗号分隔 | — |
188
+
189
+ 当认证启用时,工具调用需要提供 `authToken` 参数。本地 Stdio 模式可设置 `MCP_AUTH_ENABLED=false` 禁用。
190
+
191
+ ## 传输模式
192
+
193
+ 支持三种传输模式:Stdio(默认)、HTTP(推荐远程部署)、SSE(已弃用)。
194
+
195
+ ### Stdio(默认)
196
+
197
+ 标准输入输出模式,MCP 客户端直接通过进程通信调用。适用于本地开发,无需额外配置。
198
+
199
+ ```bash
200
+ npx -y @fineorg/mcp@latest
201
+ ```
202
+
203
+ ### HTTP(推荐远程部署)
204
+
205
+ HTTP 传输模式,适用于远程连接场景。
206
+
207
+ | 环境变量 | 描述 | 默认值 |
208
+ |---------|------|--------|
209
+ | `MCP_HTTP_PORT` | HTTP 服务端口 | `3040` |
210
+ | `MCP_HTTP_HOST` | 监听地址 | `127.0.0.1` |
211
+ | `MCP_TRUST_PROXY` | 信任反向代理(从 X-Forwarded-For 获取真实 IP) | `false` |
212
+ | `MCP_RATE_LIMIT_WINDOW` | 速率限制窗口(毫秒) | `60000` |
213
+ | `MCP_RATE_LIMIT_MAX` | 窗口内最大请求数 | `60` |
214
+
215
+ #### Docker 部署(推荐)
216
+
217
+ ```bash
218
+ # 配置环境变量
219
+ cp .env.example .env
220
+ # 编辑 .env 文件,配置各平台的认证信息
221
+
222
+ # 使用 Docker Compose 启动
223
+ docker compose up -d fine-mcp-http
224
+
225
+ # 查看日志
226
+ docker compose logs -f fine-mcp-http
227
+
228
+ # 停止服务
229
+ docker compose down
230
+ ```
231
+
232
+ 也可以直接使用 Docker 命令:
233
+
234
+ ```bash
235
+ # 构建镜像
236
+ docker build -t fine-mcp .
237
+
238
+ # 运行容器
239
+ docker run -d \
240
+ --name fine-mcp-http \
241
+ -p 3040:3040 \
242
+ --env-file .env \
243
+ fine-mcp
244
+ ```
245
+
246
+ #### 本地运行
247
+
248
+ ```bash
249
+ bun run dev:http
250
+ # 或生产模式
251
+ bun run build && bun run start:http
252
+ ```
253
+
254
+ #### 端点说明
255
+
256
+ | 端点 | 方法 | 描述 |
257
+ |------|------|------|
258
+ | `/mcp` | POST | MCP 协议端点(JSON-RPC 请求) |
259
+ | `/mcp` | GET | SSE 消息流(需已有会话) |
260
+ | `/mcp` | DELETE | 关闭会话 |
261
+ | `/health` | GET | 健康检查 |
262
+
263
+ #### 测试连接
264
+
265
+ ```bash
266
+ # 健康检查
267
+ curl http://localhost:3040/health
268
+
269
+ # 初始化会话
270
+ curl -X POST http://localhost:3040/mcp \
271
+ -H "Content-Type: application/json" \
272
+ -H "Authorization: Bearer YOUR_TOKEN" \
273
+ -d '{"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-11-05","capabilities":{},"clientInfo":{"name":"test-client","version":"1.0.0"}},"id":1}'
274
+ ```
275
+
276
+ ### SSE(已弃用)
277
+
278
+ > SSE 传输已弃用,请使用 HTTP 传输模式替代。
279
+
280
+ SSE 模式默认运行在端口 3041,仅用于向后兼容:
281
+
282
+ ```bash
283
+ bun run dev:sse # 开发模式
284
+ bun run start:sse # 生产模式
285
+ ```
286
+
287
+ ## 本地开发
288
+
289
+ ```bash
290
+ # 安装依赖
291
+ bun install
292
+
293
+ # 配置环境
294
+ cp .env.example .env
295
+
296
+ # 开发模式(热重载)
297
+ bun run dev # Stdio
298
+ bun run dev:http # HTTP(推荐)
299
+
300
+ # 测试与 Lint
301
+ bun run test:run # 运行测试
302
+ bun run test:coverage # 测试覆盖率
303
+ bun run lint # ESLint 检查
304
+ bun run type-check # TypeScript 类型检查
305
+ ```
306
+
307
+ ## 发布
308
+
309
+ 项目通过 CI/CD 自动发布。推送 `v*` tag 时自动触发:
310
+
311
+ 1. CI 检查(lint → type-check → test → build)
312
+ 2. 发布到 npm(使用 OIDC Trusted Publishing + provenance 签名)
313
+ 3. 创建 GitHub Release(从 CHANGELOG.md 提取版本说明)
314
+
315
+ ```bash
316
+ # 手动发布流程(仅供参考)
317
+ bun run build
318
+ npm publish --dry-run # 预览发布内容
319
+ npm publish --access public --provenance
320
+ ```
321
+
322
+ ## 项目结构
323
+
324
+ ```
325
+ src/
326
+ ├── index.ts # MCP 服务器入口(Stdio)
327
+ ├── index-http.ts # HTTP 传输入口
328
+ ├── index-sse.ts # SSE 传输入口(已弃用)
329
+ ├── mcp/
330
+ │ ├── mcpAuth.ts # 认证模块
331
+ │ ├── server-factory.ts # MCP 服务器工厂
332
+ │ └── startup.ts # 启动和关闭共享逻辑
333
+ ├── services/
334
+ │ ├── mcpService.ts # MCP 服务层
335
+ │ └── platforms/ # 平台客户端
336
+ │ ├── BasePlatformClient.ts
337
+ │ ├── BitbucketClient.ts
338
+ │ ├── ConfluenceClient.ts
339
+ │ ├── FeishuClient.ts # 飞书项目(插件 API)
340
+ │ ├── FeishuOpenClient.ts # 飞书开放平台(官方 SDK)
341
+ │ └── JiraClient.ts
342
+ ├── utils/
343
+ │ └── logger.ts # 日志工具(自动脱敏)
344
+ ├── config/
345
+ │ └── index.ts # 配置管理(Zod 校验)
346
+ └── types/
347
+ ├── feishu.ts # 飞书项目 API 类型
348
+ ├── result.ts # Result 类型定义
349
+ └── schemas.ts # MCP 工具输出 Schema(SSoT)
350
+ ```
351
+
352
+ ## 许可证
353
+
354
+ MIT
@@ -0,0 +1 @@
1
+ #!/usr/bin/env node