feishu-user-plugin 1.3.9 → 1.3.11
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/.claude-plugin/plugin.json +1 -1
- package/.cursor-plugin/plugin.json +27 -0
- package/.mcpb/manifest.json +91 -0
- package/CHANGELOG.md +68 -0
- package/PRIVACY.md +105 -0
- package/README.en.md +610 -0
- package/README.md +309 -529
- package/package.json +7 -2
- package/scripts/build-mcpb.js +119 -0
- package/scripts/check-mcp-registry-version.js +43 -0
- package/scripts/check-mcpb-version.js +33 -0
- package/scripts/check-version.js +5 -0
- package/scripts/sync-team-skills.sh +72 -57
- package/skills/feishu-user-plugin/SKILL.md +1 -1
- package/skills/feishu-user-plugin/references/CLAUDE.md +1 -0
- package/src/auth/credentials.js +49 -0
- package/src/auth/lark-desktop.js +135 -0
- package/src/server.js +42 -0
- package/src/setup.js +44 -0
- package/src/test-lark-desktop.js +300 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "feishu-user-plugin",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.11",
|
|
4
4
|
"description": "All-in-one Feishu plugin for Claude Code — send messages as yourself, read chats (auto-expanded merge_forward), manage docs / bitable / wiki (full CRUD) / drive / OKR (with progress writes) / calendar (read+write) / Tasks v2 / multi-profile auto-switch / real-time WS events. 82 tools + 9 prompts, 3 auth layers.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "EthanQC"
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "feishu-user-plugin",
|
|
3
|
+
"displayName": "Feishu MCP for Claude Code & Codex",
|
|
4
|
+
"description": "All-in-one Feishu MCP server for Claude Code & Codex — 84 tools across 3 auth layers (cookie / app / OAuth). Send as you, read groups, manage docs / bitable / wiki / drive / calendar / tasks / OKR.",
|
|
5
|
+
"version": "1.3.11",
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "EthanQC"
|
|
8
|
+
},
|
|
9
|
+
"homepage": "https://ethanqc.github.io/feishu-user-plugin/",
|
|
10
|
+
"repository": "https://github.com/EthanQC/feishu-user-plugin",
|
|
11
|
+
"license": "MIT",
|
|
12
|
+
"category": "Communication",
|
|
13
|
+
"keywords": ["feishu", "lark", "mcp", "claude-code", "codex"],
|
|
14
|
+
"mcpServers": {
|
|
15
|
+
"feishu-user-plugin": {
|
|
16
|
+
"command": "npx",
|
|
17
|
+
"args": ["-y", "feishu-user-plugin"],
|
|
18
|
+
"env": {
|
|
19
|
+
"LARK_COOKIE": "${LARK_COOKIE}",
|
|
20
|
+
"LARK_APP_ID": "${LARK_APP_ID}",
|
|
21
|
+
"LARK_APP_SECRET": "${LARK_APP_SECRET}",
|
|
22
|
+
"LARK_USER_ACCESS_TOKEN": "${LARK_USER_ACCESS_TOKEN}",
|
|
23
|
+
"LARK_USER_REFRESH_TOKEN": "${LARK_USER_REFRESH_TOKEN}"
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
{
|
|
2
|
+
"manifest_version": "0.3",
|
|
3
|
+
"name": "feishu-user-plugin",
|
|
4
|
+
"display_name": "Feishu MCP for Claude Code & Codex",
|
|
5
|
+
"version": "1.3.11",
|
|
6
|
+
"description": "All-in-one Feishu MCP server for Claude Code & Codex — 84 tools across 3 auth layers (cookie / app / OAuth). Send as you, read groups, manage docs / bitable / wiki / drive / calendar / tasks / OKR.",
|
|
7
|
+
"long_description": "feishu-user-plugin is a local stdio MCP server that bridges Feishu / Lark and any MCP client (Claude Code, Codex, Cursor, Windsurf, OpenClaw, Claude Desktop). It exposes 84 tools across three auth layers: cookie + protobuf for sending messages as the real user (a capability not available through the official bot API), Feishu Open Platform app credentials for groups / docs / bitable / wiki / drive / calendar / tasks / OKR, and user OAuth (UAT) for P2P chat reading and user-owned resource creation.",
|
|
8
|
+
"author": {
|
|
9
|
+
"name": "EthanQC",
|
|
10
|
+
"url": "https://github.com/EthanQC"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://ethanqc.github.io/feishu-user-plugin/",
|
|
13
|
+
"documentation": "https://github.com/EthanQC/feishu-user-plugin/blob/main/README.md",
|
|
14
|
+
"support": "https://github.com/EthanQC/feishu-user-plugin/issues",
|
|
15
|
+
"repository": {
|
|
16
|
+
"type": "git",
|
|
17
|
+
"url": "https://github.com/EthanQC/feishu-user-plugin.git"
|
|
18
|
+
},
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"keywords": [
|
|
21
|
+
"feishu",
|
|
22
|
+
"lark",
|
|
23
|
+
"claude-code",
|
|
24
|
+
"codex",
|
|
25
|
+
"mcp",
|
|
26
|
+
"model-context-protocol",
|
|
27
|
+
"im",
|
|
28
|
+
"messaging",
|
|
29
|
+
"protobuf"
|
|
30
|
+
],
|
|
31
|
+
"privacy_policies": [
|
|
32
|
+
"https://github.com/EthanQC/feishu-user-plugin/blob/main/PRIVACY.md"
|
|
33
|
+
],
|
|
34
|
+
"server": {
|
|
35
|
+
"type": "node",
|
|
36
|
+
"entry_point": "src/index.js",
|
|
37
|
+
"mcp_config": {
|
|
38
|
+
"command": "node",
|
|
39
|
+
"args": ["${__dirname}/src/index.js"],
|
|
40
|
+
"env": {
|
|
41
|
+
"LARK_COOKIE": "${user_config.lark_cookie}",
|
|
42
|
+
"LARK_APP_ID": "${user_config.lark_app_id}",
|
|
43
|
+
"LARK_APP_SECRET": "${user_config.lark_app_secret}",
|
|
44
|
+
"LARK_USER_ACCESS_TOKEN": "${user_config.lark_user_access_token}",
|
|
45
|
+
"LARK_USER_REFRESH_TOKEN": "${user_config.lark_user_refresh_token}"
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"user_config": {
|
|
50
|
+
"lark_cookie": {
|
|
51
|
+
"type": "string",
|
|
52
|
+
"title": "LARK_COOKIE",
|
|
53
|
+
"description": "Feishu web cookie (from feishu.cn DevTools → Network → request headers Cookie). Required for user-identity messaging tools.",
|
|
54
|
+
"required": false,
|
|
55
|
+
"sensitive": true
|
|
56
|
+
},
|
|
57
|
+
"lark_app_id": {
|
|
58
|
+
"type": "string",
|
|
59
|
+
"title": "LARK_APP_ID",
|
|
60
|
+
"description": "Feishu self-built app ID (cli_xxx). Required for Official API tools (group reads, docs, bitable, wiki, drive, calendar, tasks, OKR).",
|
|
61
|
+
"required": false,
|
|
62
|
+
"sensitive": true
|
|
63
|
+
},
|
|
64
|
+
"lark_app_secret": {
|
|
65
|
+
"type": "string",
|
|
66
|
+
"title": "LARK_APP_SECRET",
|
|
67
|
+
"description": "Feishu self-built app secret. Pairs with LARK_APP_ID.",
|
|
68
|
+
"required": false,
|
|
69
|
+
"sensitive": true
|
|
70
|
+
},
|
|
71
|
+
"lark_user_access_token": {
|
|
72
|
+
"type": "string",
|
|
73
|
+
"title": "LARK_USER_ACCESS_TOKEN",
|
|
74
|
+
"description": "User OAuth UAT (run `npx feishu-user-plugin oauth` to obtain). Required for P2P chat reading and user-owned resource creation.",
|
|
75
|
+
"required": false,
|
|
76
|
+
"sensitive": true
|
|
77
|
+
},
|
|
78
|
+
"lark_user_refresh_token": {
|
|
79
|
+
"type": "string",
|
|
80
|
+
"title": "LARK_USER_REFRESH_TOKEN",
|
|
81
|
+
"description": "User OAuth refresh token. Pairs with LARK_USER_ACCESS_TOKEN; auto-rotates the UAT on expiry.",
|
|
82
|
+
"required": false,
|
|
83
|
+
"sensitive": true
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"compatibility": {
|
|
87
|
+
"runtimes": {
|
|
88
|
+
"node": ">=18.0.0"
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,74 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/), and this project adheres to [Semantic Versioning](https://semver.org/).
|
|
6
6
|
|
|
7
|
+
## [1.3.11] - 2026-05-09
|
|
8
|
+
|
|
9
|
+
主线一项:Lark Desktop 多账号无感切换 — 用户在 Feishu Desktop 切账号,MCP 在 ~15 s 内自动跟进,无需任何 CLI 命令、无需 MCP 工具调用。配套三件 v1.4 prep(Privacy Policy / `.mcpb` manifest / `.cursor-plugin/plugin.json` / MCP Registry CI 自动 publish)已就位但未对外提交,等用户 dispatch。工具数 84 不变。
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
- **Lark Desktop 多账号无感切换 (A)**:用户在 Feishu Desktop 切换账号 → MCP 自动跟进,不需要任何 CLI 命令、不需要 MCP 工具调用。`credentials.json::profiles[*].larkHash` 字段绑定 profile 与 `~/Library/Containers/com.bytedance.macos.feishu/Data/Library/Application Support/LarkShell/sdk_storage/<hash>/`;owner heartbeat (15 s) 监听各账号 `cookie_store.db` 的 mtime,最近活跃的 hash 与当前 active 不一致 + mtime 推进时调 `setActiveProfile`(5 s debounce)。`setup` 在 `fresh` / `update` 模式下自动绑定(单账号直接绑、多账号在交互模式下让用户选 / 非交互模式取最近活跃 + 在 stderr 列出其它)。新 CLI flag:`--bind-hash <hash>` 显式绑定,`--no-bind-hash` 跳过自动检测。未绑定但活跃的 hash 在 stderr 打一次性提示带 `setup --profile <name> --bind-hash <hash>` 命令。Lark 加密 `cookie_store.db` 全程不读不解密,cookie 仍由 `LARK_COOKIE` 按 profile 单独提供。macOS-only;Linux / Windows 默认无副作用。
|
|
13
|
+
- **`src/auth/lark-desktop.js` 模块**:`getSdkStorageDir()` / `listAccountHashes()` / `mostRecentHash()` / `detectSwitch()` 全部 fixture-testable,无新依赖(仅 `fs.statSync`)。13 个单元测试位于 `src/test-lark-desktop.js`,CI 友好(不依赖 Lark Desktop 安装)。
|
|
14
|
+
- **`.mcpb` 桌面扩展 manifest + Privacy Policy(v1.4 prep)**:`PRIVACY.md` 中英双语,按 Anthropic Connectors Directory 评审标准 6 维度组织(采集 / 处理 / 存储 / 第三方 / 留存 / 联系);`.mcpb/manifest.json` 走 `manifest_version=0.3` schema,含 `server.mcp_config` + `user_config` 块(5 个 `LARK_*` 全部声明 `sensitive=true`);`scripts/build-mcpb.js` 产出 `dist/feishu-user-plugin-<version>.mcpb`;CI gate `scripts/check-mcpb-version.js` 接进 `validate.yml`。**未提交**至 https://clau.de/desktop-extention-submission,等用户 dispatch(v1.4 计划)。
|
|
15
|
+
- **`.cursor-plugin/plugin.json`(v1.4 prep)**:按 Cursor plugins schema 编写(`mcpServers` 块镜像 README 的 Claude Code 配置);`scripts/check-version.js` 由 3 源扩到 4 源版本三角等价(`package.json` / `.claude-plugin/plugin.json` / `SKILL.md` / `.cursor-plugin/plugin.json`)。Schema 与 `docs/launch/submissions/cursor-marketplace.md` 校对发现 `author` 是 `{name, email}` 不是 `{name, url}`,已按官方 schema 修正。**未提交** Cursor Marketplace,等用户 dispatch。
|
|
16
|
+
- **MCP Registry CI 自动 publish(v1.4 prep)**:`.github/workflows/publish.yml` 增 mcp-publisher 步骤,`v*` tag 触发 → curl 安装 `mcp-publisher` → `login github-oidc`(runner OIDC token,无需 PAT)→ `publish mcp-registry.json`。`scripts/check-mcp-registry-version.js` 校验 `mcp-registry.json::version` + `packages[0].version` 与 `package.json::version` 一致;接进 `publish.yml`(pre-publish)+ `validate.yml`(PR-time)。从下个 release 起 Registry 同步零人工。
|
|
17
|
+
|
|
18
|
+
### Test scenarios
|
|
19
|
+
- 单 profile + 单 hash:`setup` 自动绑定,stderr 一行 `Bound profile "default" to Lark account hash <hex>`,无后续噪声
|
|
20
|
+
- 多 profile + 多 hash:在 Lark Desktop 切到 profile B 绑的账号 → 15 s 内 stderr 出 `Lark Desktop account changed; switching profile to "B"` → `credentials.json::active` 更新 → 下一次工具调用走 B 的凭证
|
|
21
|
+
- 未绑定但活跃 hash:在 Lark Desktop 切到一个新账号 → stderr 出一次性提示带 `setup --profile <name> --bind-hash <hash>` 命令;后续 heartbeat 不再重复
|
|
22
|
+
- 非 darwin:`getSdkStorageDir()` 返回 null,所有反应器代码 no-op;`setup --no-bind-hash` 显式跳过
|
|
23
|
+
- v1.4 prep 三件套不影响 v1.3.10 → v1.3.11 的运行时行为,仅扩 CI / metadata / packaging
|
|
24
|
+
|
|
25
|
+
## [1.3.10] - 2026-05-09
|
|
26
|
+
|
|
27
|
+
Growth track 一次性 ship + Official MCP Registry 上架。本版无新工具(84 不变),主体是发现入口、文档语气与发布元数据:仓库一句话描述与 npm description 同步、GitHub Pages 中文优先 SEO landing 上线、`README.md` 主版本切到中文、`docs/launch/` 13 文件 launch 草稿就位、Dockerfile 给 Glama listing introspection 用、自定义 OG image 替代 GitHub 默认渲染、CONTRIBUTING.md 双语重写。所有用户可见文档统一去除 reverse-engineering / 暴力探测 / 营销腔 / 合规免责段。
|
|
28
|
+
|
|
29
|
+
### Added
|
|
30
|
+
- **Official MCP Registry 上架**:仓库根 `mcp-registry.json` 是 registry 元数据契约(schema `https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json`),`packages[].registryType=npm` + `transport.type=stdio` + 5 个 LARK_* 环境变量声明。`package.json::mcpName=io.github.EthanQC/feishu-user-plugin` 提供命名空间归属,与现有 OpenClaw 格式 `server.json` 并行不冲突。v1.3.10 起包同步推到 `registry.modelcontextprotocol.io/v0/servers/io.github.EthanQC/feishu-user-plugin`,下游 Smithery / mcp.run / LobeHub 自动拉取。
|
|
31
|
+
- **Dockerfile + .dockerignore**:仓库根 `node:20-alpine` + `npm ci --omit=dev`,`CMD ["node", "src/index.js"]` 走 stdio。Glama 等需 Docker introspection 的 marketplace 检查可直接跑(MCP server 启动不需要 LARK_* env,工具调用时才校验,所以 introspection 不需要凭证)。
|
|
32
|
+
- **GitHub Pages 中文优先 SEO landing**:`https://ethanqc.github.io/feishu-user-plugin/`(中文)+ `/en.html`(英文)。jekyll-cayman + jekyll-seo-tag + jekyll-sitemap,源在 `docs/`;`docs/_config.yml` exclude 内部 dev 文档(REFACTOR-NOTES、TESTING-METHODOLOGY、CREDENTIALS-FORMAT、COOKIE-PROTOBUF-CAPTURES、superpowers/)保持 SEO 信号集中。仓库 Homepage URL 指向 Pages。
|
|
33
|
+
- **OG image 1200×630(中文 stat 卡)**:`docs/og.png`(rendered from `docs/og.svg`)+ `scripts/generate-og-image.js`(@resvg/resvg-js + 系统 PingFang SC 字体)。jekyll-seo-tag defaults 引用 + `twitter:card=summary_large_image`,社交分享卡替代 GitHub 默认渲染。
|
|
34
|
+
- **`docs/launch/` 13 文件 launch material**:MCP 收录(awesome-mcp-servers 提交模板 / mcp-registry 提交步骤 / Anthropic Connectors 与 Cursor Marketplace 推迟到 v1.4 的阻塞清单)+ 中文长稿(掘金 3 实战场景 / 知乎专栏首篇 / 知乎答题目标清单)+ 平台短稿(V2EX 周五帖 / 飞书开放平台社区贴 / HelloGitHub 月刊自荐 / 阮一峰 weekly issue)+ 英文 X long thread。所有 drafts,等用户 dispatch。
|
|
35
|
+
- **CONTRIBUTING.md 双语重写**:post-v1.3.7 layout(`src/clients/official/<domain>.js` + `src/tools/<domain>.js` + `_registry.js` ctx 契约)+ 4 个 pre-commit gate(CLAUDE.md sync / 三角等价 / 工具数徽章 / smoke)+ commit 前缀 + 9 步新增工具流程。中文优先,英文并列段。
|
|
36
|
+
- **GitHub Discussions 启用**:作为社群运营 + 维护信号渠道,`announcements` / `Q&A` / `show-and-tell` 默认 categories。
|
|
37
|
+
- **4 个 good-first-issue**(#61-#64):CHANGELOG 历史回填 v1.3.0-v1.3.5;`README.en.md` section header 工具数对齐到 84;`read_doc_markdown` 测试覆盖;Cursor / Windsurf / OpenClaw 9 prompt 兼容矩阵。
|
|
38
|
+
- **`.github/pull_request_template.md` 更新**:丢弃过时的 `test-send.js` / `test-all.js` checklist,换成 4 个真实 gate(smoke / 三角等价 / CLAUDE.md sync / 依赖审)。
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
- **README 主版本切到中文**:`README.md` 中文优先,`README.en.md` 是英文镜像;旧 `README_CN.md`(v1.3.4 起停滞,工具数仍写 74)删除。`package.json::files` 加 `README.en.md` 让 npm tarball 同时含两份。
|
|
42
|
+
- **About description 中文化**:GitHub repo 一句话描述从 "Feishu MCP Server using reverse-engineered protocol for user-identity messaging (not bot)" 换成中文版("飞书 MCP 服务器:让 Claude Code 与 Codex 直接接管你的飞书工作流...");npm description 走 `package.json` 英文版("All-in-one Feishu MCP server for Claude Code & Codex — 84 tools across 3 auth layers...")保持国际可见度。
|
|
43
|
+
- **topics 删 `reverse-engineering`**:标签 9 → 8(claude / claude-code / feishu / im / lark / mcp / messaging / protobuf)。
|
|
44
|
+
- **README + Pages + docs/launch/ 全部去 reverse-engineering / 暴力探测 / brute-force 框架**:用户可见文档统一改为 plain technical 语气,不再把 cookie + protobuf 协议路径写成"反向工程 / 暴力探测"。`send-as-user` 仍是核心差异化锚点,描述为"基于 cookie + protobuf 协议路径"。
|
|
45
|
+
- **删 ToS / 合规免责段**:README 与 Pages landing 顶部"个人 / 内部用途, 非商业 SaaS"段全部移除(用户判定为 performative,LICENSE + 技术现实已足够)。
|
|
46
|
+
- **`docs/launch/awesome-mcp-servers-pr.md` 增补 Glama listing 要求**:Glama bot 在 PR #6090 用 `missing-glama` label 标记并要求提交到 `glama.ai/mcp/servers` + 加 score badge。entry line 模板更新为含 Glama badge 版本(待 Glama listing 通过后才渲染分数)。
|
|
47
|
+
- **`docs/launch/mcp-registry-submission.md` 改为 agent-driven 版本**:从"用户跑 mcp-publisher CLI"换成"agent 装好 + 用 `gh auth token` 直连 login + publish",仅 GitHub OAuth 一次点击在用户侧(v1.3.10 ship 完后用 `github-oidc` 模式接进 GitHub Actions release workflow,CI 全自动)。
|
|
48
|
+
|
|
49
|
+
### Removed
|
|
50
|
+
- **`README_CN.md`(5 个版本 stale)**:内容由新主版本 `README.md` 取代。
|
|
51
|
+
- **demo 终端截图与生成脚本**:`docs/demo-send-as-user.{svg,png}` + `scripts/generate-demo-image.js` 全部移除(用户判定 README 不需要静态截图,OG image 已覆盖社交分享场景)。
|
|
52
|
+
- **README 顶部 ToS / 合规免责段**:移除(详见 Changed 段)。
|
|
53
|
+
|
|
54
|
+
### Deferred to v1.3.11
|
|
55
|
+
- **A. Lark Desktop 多账号联动**(v1.3.10 原计划主线,平移到 v1.3.11):用户在 Feishu Desktop 切账号 → MCP 自动跟进。schema 扩展 + setup CLI 自动检测 + owner heartbeat stat sdk_storage mtime + 未绑定 hash 的处理路径。预计 1-1.5 天单独 PR。
|
|
56
|
+
- **C. 本地 md → 飞书知识库同步**(v1.3.4 起持续推迟):md parser 选型、`src/doc-blocks.js` 构造器补齐、wikilink 三级解析、图片 / 文件 inline、CLI 子命令 vs MCP 工具取舍、增量 diff 策略。
|
|
57
|
+
- **B.5 `search_messages`**:先试 UAT `/open-apis/im/v1/messages/search`,不暴露则尝试 cookie 路径。
|
|
58
|
+
- **E. `src/config/` 目录化拆分**(条件触发)。
|
|
59
|
+
- **G. OpenClaw 偏好文件**。
|
|
60
|
+
|
|
61
|
+
### 已调研但暂不实施
|
|
62
|
+
- **Anthropic Connectors Directory**:需 `.mcpb` 打包 + `manifest.json::privacy_policies` + README "Privacy Policy" 段;缺一项即被拒。规划 v1.4 任务,详见 `docs/launch/anthropic-directory-prep.md`。
|
|
63
|
+
- **Cursor Marketplace**:需 `.cursor-plugin/plugin.json` manifest。规划 v1.4,详见 `docs/launch/cursor-marketplace-prep.md`。
|
|
64
|
+
- **Windsurf MCP Marketplace**:无公开第三方提交渠道(仅官方 partnership 邀请)。靠 Official MCP Registry 同步覆盖。
|
|
65
|
+
- **百度站长 / Google Search Console 主动提交**:用户决定靠自然爬取 + 反链。`docs/sitemap.xml` 与 `docs/robots.txt` 已就位作为被动准备,未来想提交时直接 paste-and-go。
|
|
66
|
+
|
|
67
|
+
### Test scenarios
|
|
68
|
+
- 验证 `npm view feishu-user-plugin version` 返回 `1.3.10`
|
|
69
|
+
- `mcp-publisher publish mcp-registry.json` 推到 registry,`curl https://registry.modelcontextprotocol.io/v0/servers/io.github.EthanQC/feishu-user-plugin` 返回 v1.3.10 元数据
|
|
70
|
+
- GitHub Pages https://ethanqc.github.io/feishu-user-plugin/ 与 `/en.html` 都返回 200,`<head>` 含 `og:image` 指向 `docs/og.png`
|
|
71
|
+
- `docs/sitemap.xml` 由 jekyll-sitemap 自动生成,含 index + en 两个 URL
|
|
72
|
+
- punkpeye/awesome-mcp-servers PR #6090 entry 带 Glama badge(待用户在 Glama 完成 listing 后渲染分数)
|
|
73
|
+
- 所有用户可见文档(README / README.en / docs/index / docs/en / docs/launch/*)均不再含 "反向工程" / "reverse engineering" / "暴力探测" / "brute-force" 字样
|
|
74
|
+
|
|
7
75
|
## [1.3.9] - 2026-05-08
|
|
8
76
|
|
|
9
77
|
D 系列首项 ship:新增 `read_doc_markdown` 工具,用 `feishu-docx` 把 docx blocks 转换为 markdown 字符串输出,替代 `get_doc_blocks` 的结构化 JSON,给 RAG / digest / 摘要类调用省 ~60% token(实测 216 KB JSON vs 90 KB markdown)。A 系列主线 ship:WS 机器级 SSOT + active profile 跨进程同步 + setup CLI 4 行决策矩阵 + per-profile events 字段。工具数 83 → 84。
|
package/PRIVACY.md
ADDED
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# 隐私政策 / Privacy Policy
|
|
2
|
+
|
|
3
|
+
`feishu-user-plugin` 是一个本地运行的 MCP 服务器。本文档说明插件如何处理用户提供的飞书 / Lark 凭证以及通过 MCP 工具调用流转的数据。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 中文
|
|
8
|
+
|
|
9
|
+
### 1. 收集的数据
|
|
10
|
+
|
|
11
|
+
插件本身不收集任何数据。运行需要用户主动配置以下凭证,全部来自用户自己的飞书 / Lark 账号:
|
|
12
|
+
|
|
13
|
+
- `LARK_COOKIE` —— 用户浏览器登录 feishu.cn 后从请求头复制的 cookie 串
|
|
14
|
+
- `LARK_APP_ID` + `LARK_APP_SECRET` —— 用户在飞书开放平台自建应用的 ID 与密钥
|
|
15
|
+
- `LARK_USER_ACCESS_TOKEN` + `LARK_USER_REFRESH_TOKEN` —— 用户通过 `npx feishu-user-plugin oauth` 在自己浏览器中授权后由插件本地保存的 OAuth 令牌
|
|
16
|
+
|
|
17
|
+
以上凭证保存在用户本地,不会发送给插件作者或除飞书自身以外的任何第三方。
|
|
18
|
+
|
|
19
|
+
### 2. 处理的数据
|
|
20
|
+
|
|
21
|
+
插件只处理用户通过 MCP 工具调用主动请求的数据:消息、文档、多维表格、知识库、云空间、日历、任务、OKR、联系人。插件是用户与飞书开放平台之间的薄代理,不在数据通过时做额外的留存、备份、上传或分析。
|
|
22
|
+
|
|
23
|
+
### 3. 数据存储位置
|
|
24
|
+
|
|
25
|
+
- 凭证文件:`~/.feishu-user-plugin/credentials.json`,文件权限 0600(仅当前用户可读写),由用户的操作系统强制访问控制
|
|
26
|
+
- 实时事件日志(启用时):`~/.feishu-user-plugin/events.jsonl`,append-only,10 MB 软上限 / 20 MB 硬上限自动轮转
|
|
27
|
+
- 不上报遥测,不发送埋点,不联网调用统计接口,不与插件作者维护的任何后台通信
|
|
28
|
+
|
|
29
|
+
唯一的数据驻留点是用户本机。
|
|
30
|
+
|
|
31
|
+
### 4. 第三方共享
|
|
32
|
+
|
|
33
|
+
插件运行时与两类外部方通信:
|
|
34
|
+
|
|
35
|
+
- **飞书开放平台 API**(`open.feishu.cn` / `feishu.cn`)—— 用户自己的飞书租户。所有读写都直接打到这里,等价于用户自己用飞书客户端的操作
|
|
36
|
+
- **用户运行的 AI 客户端**(Claude Code / Codex / Cursor / Windsurf / OpenClaw / Claude Desktop 等)—— 这是 MCP 协议的另一端,由用户自行选择安装
|
|
37
|
+
|
|
38
|
+
插件不引入任何额外的第三方依赖(无 CDN、无分析服务、无错误上报)。
|
|
39
|
+
|
|
40
|
+
### 5. 数据保留
|
|
41
|
+
|
|
42
|
+
完全由用户控制。插件不主动删除、归档或复制用户数据。要彻底移除:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
rm -rf ~/.feishu-user-plugin
|
|
46
|
+
npm uninstall -g feishu-user-plugin
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
撤销飞书侧的 OAuth 授权可在飞书开放平台的应用管理页操作。
|
|
50
|
+
|
|
51
|
+
### 6. 联系方式
|
|
52
|
+
|
|
53
|
+
- 一般问题:[GitHub Issues](https://github.com/EthanQC/feishu-user-plugin/issues)
|
|
54
|
+
- 安全披露:在 GitHub Issue 标题前加 `[security]` 前缀
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## English
|
|
59
|
+
|
|
60
|
+
### 1. Data Collected
|
|
61
|
+
|
|
62
|
+
The plugin itself collects no data. Operation requires the user to provide the following credentials, all from the user's own Feishu / Lark account:
|
|
63
|
+
|
|
64
|
+
- `LARK_COOKIE` — cookie string the user copies from their own browser session on feishu.cn
|
|
65
|
+
- `LARK_APP_ID` + `LARK_APP_SECRET` — credentials of a self-built app the user registers on the Feishu Open Platform
|
|
66
|
+
- `LARK_USER_ACCESS_TOKEN` + `LARK_USER_REFRESH_TOKEN` — OAuth tokens issued after the user grants consent via `npx feishu-user-plugin oauth` and saved locally by the plugin
|
|
67
|
+
|
|
68
|
+
These credentials remain on the user's machine and are not transmitted to the plugin author or any third party other than Feishu itself.
|
|
69
|
+
|
|
70
|
+
### 2. Data Processed
|
|
71
|
+
|
|
72
|
+
The plugin only processes data the user explicitly requests through MCP tool calls: messages, documents, bitable, wiki, drive, calendar, tasks, OKR, contacts. The plugin is a thin proxy between the user and the Feishu Open Platform; it does not retain, archive, replicate, upload, or analyse data in transit.
|
|
73
|
+
|
|
74
|
+
### 3. Where Data Is Stored
|
|
75
|
+
|
|
76
|
+
- Credential file: `~/.feishu-user-plugin/credentials.json`, mode 0600 (readable / writable only by the file owner), enforced by OS-level access control
|
|
77
|
+
- Realtime event log (when enabled): `~/.feishu-user-plugin/events.jsonl`, append-only, 10 MB soft / 20 MB hard rotation cap
|
|
78
|
+
- No telemetry, no analytics, no phone-home, no communication with any backend maintained by the plugin author
|
|
79
|
+
|
|
80
|
+
The user's machine is the only retention point.
|
|
81
|
+
|
|
82
|
+
### 4. Third-Party Sharing
|
|
83
|
+
|
|
84
|
+
At runtime the plugin communicates with two external parties:
|
|
85
|
+
|
|
86
|
+
- **Feishu Open Platform API** (`open.feishu.cn` / `feishu.cn`) — the user's own Feishu tenant. All reads and writes go directly there, equivalent to actions the user could take in the official Feishu client
|
|
87
|
+
- **The AI client the user runs** (Claude Code / Codex / Cursor / Windsurf / OpenClaw / Claude Desktop, etc.) — the other end of the MCP protocol, chosen and installed by the user
|
|
88
|
+
|
|
89
|
+
The plugin introduces no additional third party (no CDN, no analytics service, no error-reporting endpoint).
|
|
90
|
+
|
|
91
|
+
### 5. Data Retention
|
|
92
|
+
|
|
93
|
+
Entirely user-controlled. The plugin does not delete, archive, or replicate user data on its own. To remove everything:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
rm -rf ~/.feishu-user-plugin
|
|
97
|
+
npm uninstall -g feishu-user-plugin
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
OAuth authorization on the Feishu side can be revoked from the application management page of the Feishu Open Platform.
|
|
101
|
+
|
|
102
|
+
### 6. Contact
|
|
103
|
+
|
|
104
|
+
- General issues: [GitHub Issues](https://github.com/EthanQC/feishu-user-plugin/issues)
|
|
105
|
+
- Security disclosures: prefix the issue title with `[security]`
|