Lark MCP

Lark MCP

一个模型上下文协议服务器,它使 AI 模型能够通过飞书/Lark 消息平台执行函数调用,使用您的个人帐户(无需机器人配置)来创建一个功能齐全的 AI 助手。

Category
访问服务器

README

Lark MCP - 飞书全场景 Function Call AI 助手 🚀

Python Version Node.js Version

一个基于飞书(Lark)的全场景MCP Function Call AI Agent,实现大模型通过飞书进行函数调用和消息处理。

无需配置飞书机器人,你的飞书账号即是AI助手。

只需定义函数和注释,你的飞书机器人会自动根据场景调用。

项目概述 🌟

Lark MCP是一个现代化的Python应用程序,能够:

  • 📊 连接飞书API,监听并记录消息
  • 🤖 提供自定义函数供大模型调用
  • 🔄 实现基于MCP (Model Context Protocol) 的函数调用框架
  • 💾 使用SQLAlchemy将消息存储到MySQL数据库

效果图🧸

<div align="center"> <img src="static/resource/back_end.png" width="600" alt="后台日志"> <br> <em>图1: 后台日志</em> </div>

<div align="center"> <img src="static/resource/front_end_1.png" width="600" alt="聊天数据库查询"> <br> <em>图2: 聊天数据库查询</em> </div>

<div align="center"> <img src="static/resource/front_end_2.png" width="600" alt="天气查询"> <br> <em>图3: 天气查询</em> </div>

<div align="center"> <img src="static/resource/functions.png" width="600" alt="注册函数"> <br> <em>图4: 简单注册函数,只需定义函数和注释</em> </div>

✨ 功能特点

  • 函数注册机制: 简单直观的函数注册装饰器
  • 消息自动处理: 记录所有接收到的消息(私聊和群聊)
  • 异步处理: 采用async/await模式进行异步通信
  • 数据持久化: 使用SQLAlchemy将消息存储在MySQL数据库中
  • 灵活配置: 通过环境变量进行配置
  • 容器化部署: 支持Docker快速部署
  • 智能函数调用: AI会根据用户输入的文字自动分析并调用最匹配的函数,开发者只需添加函数及其注释描述

📦 当前支持的函数

项目目前内置了以下函数供大模型调用:

函数名 描述
tell_joke 讲一个随机笑话
get_time 获取当前时间
roll_dice 掷一个指定面数的骰子
make_todo_list 从逗号分隔的任务创建待办清单
translate_to_chinese 将英文单词翻译成中文
countdown 创建一个从指定数字开始的倒计时
random_color 生成一个随机的十六进制颜色代码
fortune 抽取一个随机运势
count_daily_speakers 获取今天发言的人数统计
get_top_speaker_today 获取今天发言最多的用户
send_message 给指定用户发送消息
list_tools 列出所有可用的工具及其描述

你可以通过在飞书中输入触发指令后跟要执行的操作来调用这些功能,例如: /run 讲个笑话

📂 项目结构

project/
├── app/                    # 应用程序模块
│   ├── api/                # API相关模块
│   │   ├── auth.py         # 认证模块
│   │   └── lark_client.py  # 飞书客户端
│   ├── config/             # 配置模块
│   │   └── settings.py     # 应用配置
│   ├── core/               # 核心业务逻辑
│   │   ├── mcp_server.py   # MCP服务器
│   │   └── message_service.py  # 消息处理服务
│   ├── db/                 # 数据库相关
│   │   ├── models.py       # 数据模型
│   │   └── session.py      # 数据库会话管理
│   └── utils/              # 工具函数
├── builder/                # 请求构建器
├── static/                 # 静态资源
│   ├── resource/           # 图片资源
│   ├── proto_pb2.py        # 协议定义
│   └── lark_decrypt.js     # 飞书解密工具
├── .env                    # 环境变量
├── main.py                 # 应用入口
└── Dockerfile              # Docker配置

🛠️ 自定义函数开发

app/core/mcp_server.py 文件中,您可以使用 @register_tool 装饰器添加您自己的自定义函数:

@register_tool(name="tell_joke", description="讲一个随机笑话")
def tell_joke() -> str:
    jokes = [
        "为什么程序员都喜欢黑色?因为他们不喜欢 bug 光。",
        "Python 和蛇有什么共同点?一旦缠上你就放不下了。",
        "为什么 Java 开发者很少被邀去派对?因为他们总是抛出异常。",
    ]
    return random.choice(jokes)

@register_tool(name="send_message", description="给指定用户发送消息 {user:用户名称 content:消息内容}")
def send_message(user: str, content: str) -> str:
    """给指定用户发送私信"""
    lark_client = LarkClient(get_auth())
    # ... 实现逻辑 ...
    return f"成功向 {user} 发送了私信: '{content}'"

重要: 只需添加函数和对应的描述,AI会根据用户的文字自动分析并调用最匹配的函数,无需手动实现函数匹配逻辑。

🔧 环境要求

  • Python 3.10+
  • Node.js 20+
  • MySQL数据库

📦 安装方法

使用本地环境

  1. 安装依赖:

    pip install -r requirements.txt
    
  2. Windows用户注意: Windows系统需要额外安装以下依赖:

    pip install win-inet-pton==1.1.0
    

使用Docker

# 构建镜像
docker build -t feishuapp .

# 运行容器
docker run -it feishuapp bash

⚙️ 配置说明

复制.env.example文件命名为.env文件,包含以下配置:

# 飞书API设置 - 只需配置LARK_COOKIE即可,无需配置飞书机器人
LARK_APP_ID=your_app_id
LARK_APP_SECRET=your_app_secret
LARK_COOKIE=your_lark_cookie   # 只需配置此项,无需飞书机器人配置

# 数据库设置
DB_HOST=localhost
DB_PORT=3306
DB_NAME=lark_messages
DB_USER=username
DB_PASSWORD=password

# OpenAI API配置
OPENAI_API_KEY=your_openai_api_key
OPENAI_API_BASE=https://api.openai.com/v1
OPENAI_MODEL=gpt-4-turbo-preview

# 函数调用触发设置
FUNCTION_TRIGGER_FLAG=/run   # 可自定义触发函数调用的前缀

🚀 使用指南

运行应用程序

python main.py

应用程序将:

  1. 初始化MCP服务器
  2. 连接到飞书API并使用你的飞书账号作为AI助手
  3. 监听传入的消息
  4. 处理并执行大模型通过飞书发起的函数调用
  5. 将消息存储在MySQL数据库中

🗄️ 数据库结构

应用程序将消息存储在messages表中,该表具有以下结构:

列名 类型 描述
id INT (PK) 主键
user_name VARCHAR(255) 消息发送者的名称
user_id VARCHAR(255) 发送者的飞书用户ID
content TEXT 消息内容
is_group_chat BOOLEAN 消息是否来自群聊
group_name VARCHAR(255) 群聊名称(如适用)
chat_id VARCHAR(255) 聊天ID
message_time DATETIME 消息发送时间
created_at DATETIME 记录创建时间

🤝 贡献指南

欢迎贡献!请随时提交Pull Request。

  1. Fork这个仓库
  2. 创建您的特性分支 (git checkout -b feature/amazing-feature)
  3. 提交您的更改 (git commit -m '添加一些很棒的特性')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 打开Pull Request

🐛 问题与支持

如果您遇到任何问题或有疑问,请提交issue或访问我们的讨论论坛

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选