> ## 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.

# Feishu / Lark MCP

## Overview

`lark_tools` (`from veadk.tools.builtin_tools.lark import lark_tools`) lets you integrate an AI agent with Feishu / Lark open capabilities for cloud-document processing, chat management, calendar scheduling, and more. It launches a local MCP Server via `npx @larksuiteoapi/lark-mcp`, so `npx` and `lark-mcp` must be installed.

<Note>
  This tool exposes Feishu capabilities **as tools the agent can call**. If instead you want to route inbound Feishu bot messages into a VeADK `Runner`, see the [Feishu Channel extension](/productions/veadk/preview/en/components/extensions/feishu-channel).
</Note>

## Environment & prerequisites

<Warning>
  To create an app, see [Lark app creation](https://open.larkoffice.com/document/develop-an-echo-bot/introduction).

  1. Configure the API key for the agent's reasoning model.
  2. Configure the Lark service Application ID, API key, and OAuthToken.
</Warning>

Environment variables (**must be set as environment variables**):

* `MODEL_AGENT_API_KEY`: API key for the agent's reasoning model
* `TOOL_LARK_ENDPOINT`: Lark service Application ID
* `TOOL_LARK_API_KEY`: Lark service API key
* `TOOL_LARK_TOKEN`: Lark service OAuthToken

## Usage

```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="A Feishu bot.",
    instruction="You are a Feishu bot. Use lark_tools to send messages to users.",
    tools=[lark_tools],
)

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


async def main():
    response = await runner.run(
        'Send "Hello, I am the lark agent" to developer@example.com'
    )
    print(response)


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