> ## Documentation Index
> Fetch the complete documentation index at: https://docs.veadk.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# 飞书 Lark MCP

## 功能说明

`lark_tools`（`from veadk.tools.builtin_tools.lark import lark_tools`）帮助快速集成 AI 智能体与飞书 / Lark 开放能力，实现云文档处理、会话管理、日历安排等自动化场景。它通过 `npx @larksuiteoapi/lark-mcp` 启动本地 MCP Server，因此需要预装 `npx` 与 `lark-mcp`。

<Note>
  本工具是把飞书能力**作为工具提供给智能体**。若需把飞书机器人的入站消息接入 VeADK `Runner`，请看[飞书 Channel 扩展](/productions/veadk/preview/zh/components/extensions/feishu-channel)。
</Note>

## 环境变量与前提

<Warning>
  应用获取方式见 [Lark 创建应用](https://open.larkoffice.com/document/develop-an-echo-bot/introduction)。

  1. 配置用于智能体推理模型的 API Key；
  2. 配置 Lark 服务的 App ID、App Secret 与 user access token。
</Warning>

环境变量：

* `MODEL_AGENT_API_KEY`：智能体推理模型的 API Key
* `TOOL_LARK_ENDPOINT`：Lark 服务的 Application ID
* `TOOL_LARK_API_KEY`：飞书应用的 App Secret（变量名仍为 API\_KEY）
* `TOOL_LARK_TOKEN`：已授权且未过期的 user access token

先安装 Node.js 与 npm，再安装 `npm install -g @larksuiteoapi/lark-mcp`。确认 `npx --version` 和 `lark-mcp -V` 均可执行；工具导入时即检查这两个命令。应用需开通所用 API 的权限，并完成对应用户授权；App Secret 与用户令牌不能互相替代

## 使用方法

```python title="examples/tools/lark/agent.py" lines theme={null}
import asyncio

from veadk import Agent, Runner
from veadk.memory.short_term_memory import ShortTermMemory
from veadk.tools.builtin_tools.lark import lark_tools

agent = Agent(
    name="lark_agent",
    model_name="doubao-seed-2-1-pro-260628",
    description="一个飞书机器人。",
    instruction="按用户要求读取飞书数据；没有明确指令时不发送消息或修改数据。",
    tools=[lark_tools],
)

runner = Runner(agent=agent, short_term_memory=ShortTermMemory())


async def main():
    response = await runner.run("查询我能访问的日历，列出名称，不创建或修改日程")
    print(response)


if __name__ == "__main__":
    asyncio.run(main())
```

## 验证工具发现

内置实例在导入时读取凭证并创建本地 MCP 连接。先用以下代码列出当前可用工具，工具名与参数由所安装的 Lark MCP 版本决定。该内置实例没有云区域切换参数，`CLOUD_PROVIDER` 不会自动配置飞书与 Lark 的平台差异；需要自定义服务地址或启动参数时使用[自定义 MCP](/productions/veadk/preview/zh/components/tools/custom-mcp)

```python lines theme={null}
import asyncio

from veadk.tools.builtin_tools.lark import lark_tools


async def main():
    try:
        tools = await lark_tools.get_tools()
        print([tool.name for tool in tools])
    finally:
        await lark_tools.close()


if __name__ == "__main__":
    asyncio.run(main())
```
