LingTai Feishu/Lark MCP server — message API client with LICC inbox callback.
Project description
lingtai-feishu
LingTai Feishu/Lark MCP server — Open API client with multi-account support and LICC inbox callback.
This is the canonical setup, configuration, and troubleshooting doc for the lingtai-feishu MCP. It is fetched by LingTai agents (or anyone else) when they need to install or configure this server.
MCP / LICC contract spec: see the
lingtai-anatomyskill,reference/mcp-protocol.md, for the canonical specification of the catalog → registry → activation chain, environment-variable injection, and the LICC v1 inbox callback protocol. The reference client implementation issrc/lingtai_feishu/licc.pyin this repo (vendored verbatim into all first-party LingTai MCP repos — copy it if you're writing your own).
Tools
One omnibus MCP tool: feishu(action=...). Actions: send, check, read, reply, search, delete, edit, contacts, add_contact, remove_contact, accounts. Compound message IDs: account_alias:chat_id:feishu_message_id.
Voice Messages
Audio/voice messages received from Feishu are automatically:
- Downloaded via the Feishu file resource API
- Transcribed locally using faster-whisper (no external API key needed)
- Delivered as text in the LICC inbox event
Voice transcription requires the voice extra:
pip install lingtai-feishu[voice]
The transcript replaces the empty text in the payload, and metadata includes is_voice_transcript: true, voice_duration, and voice_transcript (with language, segments, etc.).
Rich Feedback
- Seen reaction: When a message is received, the bot adds an "OK" emoji reaction (✅) to acknowledge receipt.
- Done reaction: After sending a reply, the bot adds a "THUMBSUP" emoji reaction (👍) to the original message.
- Typing indicator: A temporary "⏳ ..." message is sent immediately on message receipt and automatically deleted when the agent's response is sent.
- Placeholder mode: Send a placeholder message immediately and edit it later with the final content. Use
feishu(action="send", placeholder=true, ...)to get back a compound message_id, thenfeishu(action="edit", message_id=..., text=<final>)to update it.
Inbound messages (LICC)
Inbound Feishu events flow into the host agent's inbox via the LingTai Inbox Callback Contract. Each new message is delivered as a LICC event with:
from— contact's display name (or open_id if no contact saved).subject—"feishu message from <name> via <account_alias>".body— a ~300 char preview of the message text.metadata.message_id— compound ID forreply.metadata.account— which configured app received it.metadata.chat_id,metadata.chat_type,metadata.from_open_id— routing keys.
Install
# Into the LingTai agent's venv (typically ~/.lingtai-tui/runtime/venv/)
pip install git+https://github.com/Lingtai-AI/lingtai-feishu.git
After install, python -m lingtai_feishu (or the lingtai-feishu script) starts the MCP server over stdio.
lark-oapi (Feishu's official Python SDK) is a hard dependency.
Configure
The server reads its app config from a JSON file pointed at by LINGTAI_FEISHU_CONFIG. Recommended path: .secrets/feishu.json inside the agent's working directory. Plaintext only — this MCP does not support *_env indirection.
Config schema
{
"accounts": [
{
"alias": "myapp",
"app_id": "cli_xxxxxxxxxxxx",
"app_secret": "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"allowed_users": ["ou_xxxxxxxxxxxxxxxxxxxxxxxx"]
}
]
}
alias— human-friendly name; used as theaccountparameter in tool calls.app_id/app_secret— issued by Feishu Open Platform when you create a custom app.allowed_users— optional allow-list of useropen_ids. When set, messages from other senders are silently ignored. Omit to accept any sender within your app's scope.
Activation in LingTai
{
"addons": ["feishu"],
"mcp": {
"feishu": {
"type": "stdio",
"command": "/path/to/your/python",
"args": ["-m", "lingtai_feishu"],
"env": {
"LINGTAI_FEISHU_CONFIG": ".secrets/feishu.json"
}
}
}
}
Then run system(action="refresh") from the agent. The MCP subprocess starts, the per-account Feishu WebSocket clients connect, and the omnibus feishu tool becomes available.
Troubleshooting
LINGTAI_FEISHU_CONFIG env var not set— yourinit.jsonmcp.feishu.enventry is missing theLINGTAI_FEISHU_CONFIGkey.Feishu config not found— the path resolves but no file exists. Relative paths are resolved againstLINGTAI_AGENT_DIR.coroutine 'Client._connect' was never awaitedwarning — usually means invalidapp_id/app_secret. The lark SDK fails the WebSocket handshake; tool calls still work for actions that don't require live connection (likeaccounts,checkof cached state).- Server boots but no inbound messages — your app needs
im:messageandim:message:send_as_botscopes in the Feishu Open Platform console. After enabling, re-publish the version. - Voice messages arrive but aren't transcribed — ensure
faster-whisperis installed (pip install lingtai-feishu[voice]). Also check that your app has theim:resourcescope for downloading message resources. - Reactions fail silently — your app needs
im:message.reactions:writescope. Check logs for "Failed to add" warnings. - Edit/delete actions return errors — your app needs
im:message:patch(edit) and/orim:message:deletescopes respectively. - MCP server failed to start — usually the
commandpath ininit.jsondoesn't havelingtai_feishuinstalled. Confirm with<command> -m lingtai_feishu --helpfrom a shell. - Tool calls return
Feishu manager not initialized— server boot failed (most often a malformed config). Check stderr.
License
MIT.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file lingtai_feishu-0.2.0.tar.gz.
File metadata
- Download URL: lingtai_feishu-0.2.0.tar.gz
- Upload date:
- Size: 20.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
614b0c1bb6e2fbd711dbeff194f3578800507243450b9f14772f02d66d0fb2ce
|
|
| MD5 |
cb3e25ec08394c96100c84387445fd7e
|
|
| BLAKE2b-256 |
819e2a2d17841acd5f561ab3a13c7d1ff0f4150c0f28c64e9fee83dc106b7cad
|
File details
Details for the file lingtai_feishu-0.2.0-py3-none-any.whl.
File metadata
- Download URL: lingtai_feishu-0.2.0-py3-none-any.whl
- Upload date:
- Size: 22.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.6
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4765332539b9ca945947e58973c4186545745e3a0fdaae6013bc6e7037cdebbb
|
|
| MD5 |
5479201656ecfb55ac12e0c386223d72
|
|
| BLAKE2b-256 |
d61c6c97c33dd83988a651401e71b3e6d8216ae2fb5e9e3c74952cb682e63ea1
|