{"id":47142293,"url":"https://github.com/ethanqc/feishu-user-plugin","last_synced_at":"2026-03-13T23:01:21.934Z","repository":{"id":342737516,"uuid":"1174966314","full_name":"EthanQC/feishu-user-plugin","owner":"EthanQC","description":"Feishu MCP Server using reverse-engineered protocol for user-identity messaging (not bot)","archived":false,"fork":false,"pushed_at":"2026-03-11T13:34:27.000Z","size":245,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-13T02:14:13.796Z","etag":null,"topics":["claude","claude-code","feishu","im","lark","mcp","messaging","protobuf","reverse-engineering"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EthanQC.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":"ROADMAP.md","authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-03-07T03:42:25.000Z","updated_at":"2026-03-11T13:34:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/EthanQC/feishu-user-plugin","commit_stats":null,"previous_names":["ethanqc/feishu-user-mcp","ethanqc/feishu-user-plugin"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/EthanQC/feishu-user-plugin","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EthanQC%2Ffeishu-user-plugin","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EthanQC%2Ffeishu-user-plugin/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EthanQC%2Ffeishu-user-plugin/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EthanQC%2Ffeishu-user-plugin/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EthanQC","download_url":"https://codeload.github.com/EthanQC/feishu-user-plugin/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EthanQC%2Ffeishu-user-plugin/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30478929,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-13T20:45:58.186Z","status":"ssl_error","status_checked_at":"2026-03-13T20:45:20.133Z","response_time":60,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["claude","claude-code","feishu","im","lark","mcp","messaging","protobuf","reverse-engineering"],"created_at":"2026-03-12T22:14:26.569Z","updated_at":"2026-03-13T23:01:21.923Z","avatar_url":"https://github.com/EthanQC.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# feishu-user-plugin\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)\n[![Node.js](https://img.shields.io/badge/Node.js-%3E%3D18-green.svg)](https://nodejs.org)\n[![MCP](https://img.shields.io/badge/MCP-Compatible-purple.svg)](https://modelcontextprotocol.io)\n[![Tools](https://img.shields.io/badge/Tools-33-orange.svg)](#tools-33-total)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)\n\n**All-in-one Feishu/Lark MCP Server -- 33 tools, 9 skills, 3 auth layers for messaging, docs, tables, wiki, and drive.**\n\nThe only MCP server that lets you send messages as your **personal identity** (not a bot), while also integrating the full official Feishu API for documents, spreadsheets, wikis, and more.\n\n## Highlights\n\n- **Send as yourself** -- Messages show your real name, not a bot. Supports text, rich text, images, files, stickers, and audio.\n- **Read everything** -- Group chats via bot API, P2P (direct messages) via OAuth UAT.\n- **Full Feishu suite** -- Docs, Bitable (spreadsheets), Wiki, Drive, Contacts -- all in one plugin.\n- **3 auth layers** -- Cookie-based user identity, app credentials (Official API), and OAuth UAT (P2P reading). All three are needed for full functionality.\n- **9 slash commands** for Claude Code -- `/send`, `/reply`, `/search`, `/digest`, `/doc`, `/table`, `/wiki`, `/drive`, `/status`\n- **Auto session management** -- Cookie heartbeat every 4h, UAT auto-refresh with token rotation.\n- **Chat name resolution** -- Pass a group name instead of `oc_xxx` ID; it resolves automatically.\n\n## Why This Exists\n\nFeishu's official API has a hard limitation: **there is no `send_as_user` scope**. Even with `user_access_token` (OAuth), messages still show `sender_type: \"app\"`.\n\nThis project combines three auth layers into one plugin:\n\n```\nUser Identity (cookie):     You -\u003e Protobuf -\u003e Feishu (messages appear as YOU)\nOfficial API  (app token):  You -\u003e REST API -\u003e Feishu (docs, tables, wiki, drive)\nUser OAuth    (UAT):        You -\u003e REST API -\u003e Feishu (read P2P chats, list all chats)\n```\n\n**One plugin. Everything Feishu. No other MCP needed.**\n\n## Quick Start\n\n### Option 1: npx (recommended)\n\n```bash\nnpx feishu-user-plugin\n```\n\nNo installation needed. The package runs directly via npx.\n\n### Option 2: Clone and run locally\n\n```bash\ngit clone https://github.com/EthanQC/feishu-user-plugin.git\ncd feishu-user-plugin\nnpm install\nnpm start\n```\n\n## Create Your Feishu App\n\nTo use the Official API tools (docs, tables, wiki, drive, bot messaging), you need to create a Feishu app:\n\n### Step 1: Create the App\n\n1. Go to [Feishu Open Platform](https://open.feishu.cn/app) and log in\n2. Click **Create Custom App** (创建自建应用) -- you must choose **Custom App** (自建应用), NOT marketplace/third-party types\n3. Fill in the app name and description, then create it\n\n### Step 2: Enable Bot Capability\n\n1. In your app settings, go to **Add Capabilities** (添加应用能力)\n2. Enable **Bot** (机器人)\n\n### Step 3: Add Permissions (Scopes)\n\nGo to **Permissions \u0026 Scopes** (权限管理) and add the following scopes:\n\n| Scope | Purpose |\n|-------|---------|\n| `im:message` | Send messages as bot |\n| `im:message:readonly` | Read message history |\n| `im:chat:readonly` | List and read chats |\n| `docx:document` | Read and create documents |\n| `docx:document:readonly` | Read documents |\n| `bitable:record` | Read and write Bitable records |\n| `wiki:wiki:readonly` | Read wiki spaces and nodes |\n| `drive:drive:readonly` | List Drive files and folders |\n| `contact:user.base:readonly` | Look up users by email/mobile |\n\n\u003e Add more scopes as needed depending on which tools you use.\n\n### Step 4: Get App Credentials\n\n1. Go to **Credentials \u0026 Basic Info** (凭证与基础信息)\n2. Copy the **App ID** (`cli_xxxxxxxxxxxx`) and **App Secret**\n3. Set them as `LARK_APP_ID` and `LARK_APP_SECRET` in your environment\n\n### Step 5: Publish and Approve\n\n1. **Create a version** and submit it for review (创建版本)\n2. Have your organization admin approve the app (管理员审核)\n3. After approval, the app is live\n\n### Step 6: Add Bot to Group Chats\n\nAdd your bot to the group chats where you want it to read messages. The bot can only access chats it has been added to.\n\n## Environment Variables\n\n| Variable | Required For | Description |\n|----------|-------------|-------------|\n| `LARK_COOKIE` | User identity tools | Feishu web session cookie string. Needed for `send_to_user`, `send_to_group`, `search_contacts`, etc. |\n| `LARK_APP_ID` | Official API tools | App ID from Feishu Open Platform. Needed for `read_messages`, docs, tables, wiki, drive. |\n| `LARK_APP_SECRET` | Official API tools | App Secret from Feishu Open Platform. Used together with `LARK_APP_ID`. |\n| `LARK_USER_ACCESS_TOKEN` | P2P chat reading | OAuth user token. Needed for `read_p2p_messages` and `list_user_chats`. Obtained via `node src/oauth.js`. |\n| `LARK_USER_REFRESH_TOKEN` | UAT auto-refresh | Refresh token for automatic UAT renewal. Obtained together with UAT via OAuth flow. |\n\nAll five variables are required for full functionality. Configure all of them during setup.\n\n## How to Get Your Cookie\n\n**Option A: Automated via Playwright MCP (recommended, zero manual copying)**\n\nFirst, install Playwright MCP if you don't have it:\n```bash\nnpx @anthropic-ai/claude-code mcp add playwright -- npx @anthropic-ai/mcp-server-playwright\n```\n\nThen just tell Claude Code: **\"Help me set up my Feishu cookie\"**\n\nClaude Code will automatically:\n1. Open feishu.cn in a browser via Playwright\n2. Show you the QR code — scan it with Feishu mobile app\n3. Extract the full cookie (including HttpOnly) via `context.cookies()`\n4. Write it to your `.mcp.json` LARK_COOKIE field\n5. Prompt you to restart Claude Code\n\n**Option B: Manual (via Network tab)**\n\n1. Open [feishu.cn/messenger](https://www.feishu.cn/messenger/) in your browser and log in\n2. Open DevTools (`F12` or `Cmd+Option+I`)\n3. Go to the **Network** tab → check **Disable cache** → press `Cmd+R` to reload\n4. Click the first request in the list (usually the page itself)\n5. In the right panel, find **Request Headers** → **Cookie:** → right-click → **Copy value**\n6. Set it as `LARK_COOKIE` in your environment\n\n\u003e Do NOT use `document.cookie` in the Console or copy from Application → Cookies tab — they miss HttpOnly cookies (`session`, `sl_session`) required for auth.\n\n\u003e The server automatically refreshes the session via heartbeat every 4 hours. The `sl_session` cookie has a 12-hour max-age.\n\n## Set Up OAuth (Required for P2P Chat Reading)\n\nTo enable `read_p2p_messages` and `list_user_chats`:\n\n1. Your Feishu app must be a **Custom App** (自建应用), NOT marketplace/third-party\n2. Add scopes: `im:message`, `im:message:readonly`, `im:chat:readonly`\n3. In your app's **Security Settings** (安全设置), add the OAuth redirect URI: `http://127.0.0.1:9997/callback`\n4. **Important**: Make sure \"对外共享\" (external sharing) is **disabled** in your app version settings — enabling it marks the app as b2c/b2b type, which blocks P2P chat access\n5. Run the authorization flow:\n\n```bash\n# If you cloned the repo:\nnode src/oauth.js\n\n# If you installed via npx:\ncd $(npm root -g)/feishu-user-plugin \u0026\u0026 node src/oauth.js\n# Or clone the repo just for the OAuth step, then use npx for daily use\n```\n\nA browser window will open for OAuth consent. The token is saved to `.env` automatically and auto-refreshes at runtime. Add both `LARK_USER_ACCESS_TOKEN` and `LARK_USER_REFRESH_TOKEN` from `.env` to your MCP config's `env` section.\n\n## MCP Client Configuration\n\n### Claude Code\n\nAdd to your project's `.mcp.json` (or `~/.claude/.mcp.json` for global):\n\n**Using npx:**\n\n```json\n{\n  \"mcpServers\": {\n    \"feishu\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"feishu-user-plugin\"],\n      \"env\": {\n        \"LARK_COOKIE\": \"your-cookie-string\",\n        \"LARK_APP_ID\": \"cli_xxxxxxxxxxxx\",\n        \"LARK_APP_SECRET\": \"your-app-secret\",\n        \"LARK_USER_ACCESS_TOKEN\": \"your-uat\",\n        \"LARK_USER_REFRESH_TOKEN\": \"your-refresh-token\"\n      }\n    }\n  }\n}\n```\n\n**Using a local clone:**\n\n```json\n{\n  \"mcpServers\": {\n    \"feishu\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/feishu-user-plugin/src/index.js\"],\n      \"env\": {\n        \"LARK_COOKIE\": \"your-cookie-string\",\n        \"LARK_APP_ID\": \"cli_xxxxxxxxxxxx\",\n        \"LARK_APP_SECRET\": \"your-app-secret\",\n        \"LARK_USER_ACCESS_TOKEN\": \"your-uat\",\n        \"LARK_USER_REFRESH_TOKEN\": \"your-refresh-token\"\n      }\n    }\n  }\n}\n```\n\nThen just say things like:\n- \"Send a message to Alice saying the meeting is at 3pm\"\n- \"What did the engineering group chat about today?\"\n- \"Search for docs about MCP\"\n\n### Claude Desktop\n\nAdd to `~/Library/Application Support/Claude/claude_desktop_config.json` (macOS) or `%APPDATA%\\Claude\\claude_desktop_config.json` (Windows):\n\n```json\n{\n  \"mcpServers\": {\n    \"feishu\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"feishu-user-plugin\"],\n      \"env\": {\n        \"LARK_COOKIE\": \"your-cookie-string\",\n        \"LARK_APP_ID\": \"cli_xxxxxxxxxxxx\",\n        \"LARK_APP_SECRET\": \"your-app-secret\",\n        \"LARK_USER_ACCESS_TOKEN\": \"your-uat\",\n        \"LARK_USER_REFRESH_TOKEN\": \"your-refresh-token\"\n      }\n    }\n  }\n}\n```\n\n### Cursor\n\nAdd to `.cursor/mcp.json` in your project:\n\n```json\n{\n  \"mcpServers\": {\n    \"feishu\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"feishu-user-plugin\"],\n      \"env\": {\n        \"LARK_COOKIE\": \"your-cookie-string\",\n        \"LARK_APP_ID\": \"cli_xxxxxxxxxxxx\",\n        \"LARK_APP_SECRET\": \"your-app-secret\",\n        \"LARK_USER_ACCESS_TOKEN\": \"your-uat\",\n        \"LARK_USER_REFRESH_TOKEN\": \"your-refresh-token\"\n      }\n    }\n  }\n}\n```\n\n### VS Code (Copilot)\n\nAdd to `.vscode/mcp.json` in your project:\n\n```json\n{\n  \"servers\": {\n    \"feishu\": {\n      \"type\": \"stdio\",\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"feishu-user-plugin\"],\n      \"env\": {\n        \"LARK_COOKIE\": \"your-cookie-string\",\n        \"LARK_APP_ID\": \"cli_xxxxxxxxxxxx\",\n        \"LARK_APP_SECRET\": \"your-app-secret\",\n        \"LARK_USER_ACCESS_TOKEN\": \"your-uat\",\n        \"LARK_USER_REFRESH_TOKEN\": \"your-refresh-token\"\n      }\n    }\n  }\n}\n```\n\n### Windsurf\n\nAdd to `~/.codeium/windsurf/mcp_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"feishu\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"feishu-user-plugin\"],\n      \"env\": {\n        \"LARK_COOKIE\": \"your-cookie-string\",\n        \"LARK_APP_ID\": \"cli_xxxxxxxxxxxx\",\n        \"LARK_APP_SECRET\": \"your-app-secret\",\n        \"LARK_USER_ACCESS_TOKEN\": \"your-uat\",\n        \"LARK_USER_REFRESH_TOKEN\": \"your-refresh-token\"\n      }\n    }\n  }\n}\n```\n\n## Tools (33 total)\n\n### User Identity -- Messaging (cookie auth, Protobuf)\n\nSend messages as yourself, not as a bot.\n\n| Tool | Description |\n|------|-------------|\n| `send_to_user` | Search user by name + send text -- one step |\n| `send_to_group` | Search group by name + send text -- one step |\n| `send_as_user` | Send text to any chat by ID, supports reply threading (`root_id` / `parent_id`) |\n| `send_image_as_user` | Send image (requires `image_key` from upload) |\n| `send_file_as_user` | Send file (requires `file_key` from upload) |\n| `send_post_as_user` | Send rich text with title + formatted paragraphs (links, @mentions) |\n| `send_sticker_as_user` | Send sticker/emoji |\n| `send_audio_as_user` | Send audio message |\n\n### User Identity -- Contacts \u0026 Info (cookie auth)\n\n| Tool | Description |\n|------|-------------|\n| `search_contacts` | Search users, bots, or group chats by name |\n| `create_p2p_chat` | Create/get P2P (direct message) chat, returns numeric `chat_id` |\n| `get_chat_info` | Group details: name, description, member count, owner |\n| `get_user_info` | User display name lookup by user ID |\n| `get_login_status` | Check cookie, app credentials, and UAT status |\n\n### User OAuth UAT -- P2P Chat Reading\n\n| Tool | Description |\n|------|-------------|\n| `read_p2p_messages` | Read P2P (direct message) history. Works for chats the bot cannot access. |\n| `list_user_chats` | List group chats the user is in. Note: only returns groups, not P2P. |\n\n### Official API -- IM (Bot Identity)\n\n| Tool | Description |\n|------|-------------|\n| `list_chats` | List all chats the bot has joined |\n| `read_messages` | Read message history (accepts chat name or `oc_xxx` ID) |\n| `reply_message` | Reply to a specific message by `message_id` (as bot) |\n| `forward_message` | Forward a message to another chat |\n\n### Official API -- Documents\n\n| Tool | Description |\n|------|-------------|\n| `search_docs` | Search documents by keyword |\n| `read_doc` | Read raw text content of a document |\n| `create_doc` | Create a new document |\n\n### Official API -- Bitable (Spreadsheets)\n\n| Tool | Description |\n|------|-------------|\n| `list_bitable_tables` | List all tables in a Bitable app |\n| `list_bitable_fields` | List all fields (columns) in a table |\n| `search_bitable_records` | Query records with filter and sort |\n| `create_bitable_record` | Create a new record (row) |\n| `update_bitable_record` | Update an existing record |\n\n### Official API -- Wiki\n\n| Tool | Description |\n|------|-------------|\n| `list_wiki_spaces` | List all accessible wiki spaces |\n| `search_wiki` | Search wiki/docs by keyword |\n| `list_wiki_nodes` | Browse wiki node tree |\n\n### Official API -- Drive\n\n| Tool | Description |\n|------|-------------|\n| `list_files` | List files in a folder |\n| `create_folder` | Create a new folder |\n\n### Official API -- Contacts\n\n| Tool | Description |\n|------|-------------|\n| `find_user` | Find user by email or mobile number |\n\n## Claude Code Slash Commands (9 skills)\n\nThis plugin includes 9 built-in skills in `skills/feishu-user-plugin/`:\n\n| Skill | Usage | Description |\n|-------|-------|-------------|\n| `/send` | `/send Alice: meeting at 3pm` | Send message as yourself |\n| `/reply` | `/reply engineering-chat` | Read recent messages and reply |\n| `/digest` | `/digest engineering-chat 7` | Summarize recent chat messages |\n| `/search` | `/search engineering` | Search contacts and groups |\n| `/doc` | `/doc search MCP` | Search, read, or create documents |\n| `/table` | `/table query appXxx` | Query or create Bitable records |\n| `/wiki` | `/wiki search protocol` | Search and browse wiki |\n| `/drive` | `/drive list folderToken` | List files or create folders in Drive |\n| `/status` | `/status` | Check login and auth status |\n\nSkills are automatically available when the plugin is installed.\n\n## Architecture\n\n```\n                               Cookie + Proto   ┌──────────────────────────────────────┐\n                             ────────────────── \u003e│  internal-api-lark-api.feishu.cn     │\n┌──────────────┐                                 │  /im/gateway/ (Protobuf over HTTP)   │\n│  MCP Client  │                                 └──────────────────────────────────────┘\n│  (Claude,    │  App Token (REST) ┌──────────────────────────────────────┐\n│   Cursor,    │ ────────────────-\u003e│  open.feishu.cn/open-apis/           │\n│   VS Code)   │                   │  (Official REST API)                 │\n│              │                   └──────────────────────────────────────┘\n│              │  User OAuth (REST)┌──────────────────────────────────────┐\n│              │ ────────────────-\u003e│  open.feishu.cn/open-apis/           │\n└──────────────┘                   │  (UAT -- P2P chat reading)           │\n                                   └──────────────────────────────────────┘\n```\n\n## Session \u0026 Token Lifecycle\n\n| Auth Layer | Token | Lifetime | Refresh |\n|------------|-------|----------|---------|\n| Cookie | `sl_session` | 12h max-age | Auto-refreshed every 4h via heartbeat |\n| App Token | `tenant_access_token` | 2h | Auto-managed by SDK |\n| User OAuth | `user_access_token` | ~2h | Auto-refreshed via `refresh_token`, saved to `.env` |\n\nWhen the cookie expires (after ~12-24h without heartbeat), re-login at feishu.cn and update `LARK_COOKIE`. Use `get_login_status` to check health proactively.\n\n## Project Structure\n\n```\nfeishu-user-plugin/\n├── .claude-plugin/\n│   └── plugin.json          # Plugin metadata\n├── skills/\n│   └── feishu-user-plugin/\n│       ├── SKILL.md         # Main skill definition (trigger, tools, auth)\n│       └── references/      # 8 skill reference docs + CLAUDE.md\n├── src/\n│   ├── index.js             # MCP server entry point (33 tools)\n│   ├── client.js            # User identity client (Protobuf gateway)\n│   ├── official.js          # Official API client (REST, UAT)\n│   ├── utils.js             # ID generators, cookie parser\n│   ├── oauth.js             # OAuth flow for user_access_token\n│   ├── test-send.js         # Quick CLI test\n│   └── test-all.js          # Full test suite\n├── proto/\n│   └── lark.proto           # Protobuf message definitions\n├── .mcp.json.example        # MCP server config template\n├── server.json              # MCP Registry manifest\n├── .env.example             # Configuration template\n└── package.json\n```\n\n## Limitations\n\n- Cookie-based auth requires periodic refresh (auto-heartbeat extends to ~12h; manual re-login needed after that)\n- Depends on Feishu's internal Protobuf protocol -- may break if Feishu updates their web client\n- Image/file/audio sending requires pre-uploaded keys (upload via Official API or external bridge)\n- No real-time message receiving (WebSocket push not yet implemented)\n- May violate Feishu's Terms of Service -- use at your own risk\n\n## Contributing\n\nIssues and PRs welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, code style, and submission guidelines.\n\nIf Feishu updates their protocol and something breaks, please [open an issue](https://github.com/EthanQC/feishu-user-plugin/issues/new?template=bug_report.md) with the error details.\n\n## License\n\n[MIT](LICENSE)\n\n## Acknowledgments\n\n- [cv-cat/LarkAgentX](https://github.com/cv-cat/LarkAgentX) -- Original Feishu protocol reverse-engineering (Python)\n- [cv-cat/OpenFeiShuApis](https://github.com/cv-cat/OpenFeiShuApis) -- Underlying API research\n- [Model Context Protocol](https://modelcontextprotocol.io) -- The MCP standard\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethanqc%2Ffeishu-user-plugin","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fethanqc%2Ffeishu-user-plugin","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fethanqc%2Ffeishu-user-plugin/lists"}