聊天应用

基于Laravel和MCP协议构建的简约聊天应用,支持消息发送、线程回复、频道管理、表情反应和用户搜索等功能。

  • by Glifaus
  • PHP
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 Glifaus/laravel-mcp-chat

使用说明

Laravel MCP 聊天室

这是一个使用Laravel 12和MCP(模型上下文协议)服务器构建的极简聊天应用。它支持发送消息、在线程中回复、按频道组织对话、用表情符号回应、搜索和列出用户;所有这些功能都可以通过即开即用的MCP工具访问。

要求:PHP 8.4+、SQLite、Node.js(用于资源)、Composer 和 npm。

注:此项目基于Laravel Starter Kit框架,并添加了一个面向聊天的完整MCP服务器。

🚀 特点

  • 发送和列出最近消息
  • 回复(线程)和完整线程查看
  • 频道/房间,在回复中自动继承频道设置
  • 使用表情符号的反应(用户/表情符号/消息去重)
  • 按关键词、用户和日期范围搜索
  • 活跃用户列表及统计数据
  • 使用 Pest 进行测试,使用 PHPStan 进行静态分析,使用 Pint/Rector 进行格式化

🧩 可用的MCP工具

工具名称(参数→简要描述):

  • [send-message](名称,内容,频道?)→ 发送消息;默认频道:general
  • [get-messages](限制?)→ 最新消息(默认50条)
  • [回复消息] (父消息ID, 名称, 内容) → 回复并创建线程;继承父消息的频道
  • [获取消息线程] (消息ID) → 查看消息及其按时间顺序排列的所有回复
  • [获取频道] () → 带有统计信息(账户、最后活动)的频道列表
  • [获取频道消息] (频道, 限制?) → 获取频道的主要消息
  • [add-reaction] (message_id, user_name, emoji) → 添加反应;每用户/每消息限1个表情
  • [remove-reaction] (message_id, user_name, emoji) → 移除你的反应
  • [get-message-reactions] (message_id) → 按表情符号和反应者分组的反应
  • [获取用户列表] (限制数量?, 排序依据?) → 唯一用户列表,包含总消息数和最后活动时间
  • [搜索消息] (查询, 限制?) → 搜索单词/短语(不区分大小写)
  • [按用户获取消息] (名称, 限制?) → 按作者过滤(部分匹配)
  • [按日期范围获取消息](开始日期?,结束日期?,限制?)→ 按日期过滤

常见参数:带长度限制的字符串(名称:1-50,内容:1-500,频道:<=50)。结果限制:1-100(默认50)。

在反应工具中允许使用的表情符号:👍 ❤️ 😂 🎉 🚀 👏 🔥 💯 👎 😮 😢 😡 🤔 💡 ✅ ❌

🧪 快速示例(MCP 客户端)

  • 向频道发送消息: { "name": "爱丽丝", "content": "来自Python的问候!" "频道": "python" }

  • 回复消息: { "parent_message_id": 42(父消息ID:42), "name": "Bob" 翻译成中文是:“名字”:“鲍勃”, “content”:“完全同意” }

  • 查看线程: {"message_id": 42} 翻译为中文是:{"消息ID": 42}

  • 列出频道: {}

  • 频道信息: { "频道": "公共", "限制": 10 }

  • 添加反应: 根据上述信息,以下是原文内容的翻译:

  • 查找信息: {"查询": "Laravel", "限制": 20}

🛠️ 本地启动

  1. 依赖项和环境
  • 复制 .env 文件并生成密钥
  • 确保已安装 SQLite
  1. 安装和构建
  • composer install(用于安装Composer项目依赖)
  • npm install(用于安装npm包)
  • npm run build(或 npm run dev)
  1. 数据库
  • Crear archivo SQLite: database/database.sqlite (si no existe)
  • php artisan migrate 命令翻译为中文是:“运行 Laravel 的迁移命令”
  • 可选:填充Knowmadmood示例数据集
    • php artisan db:seed --class=Database\Seeders\KnowmadmoodSeeder 翻译为中文是:“运行 Artisan 命令 db:seed,指定使用 Database\Seeders\KnowmadmoodSeeder 类进行数据库播种”
  1. 服务器
  • php artisan serve 命令在中文中可以翻译为:“使用 Laravel 艺术家(Artisan)命令行工具启动本地服务器”。不过,为了简洁明了,我们通常直接说“运行 php artisan serve 启动本地服务器”或“使用 php artisan serve 启动开发服务器”。这里的“php artisan serve”是 Laravel 框架中的一个命令,用于快速启动一个本地开发服务器,方便开发者在本地测试和开发应用
  1. 端点MCP
  • 可用地址:/mcp/chat

建议

  • 如果你看不到前端的变化,请运行 npm run dev 或 npm run build
  • 有用的脚本:composer test,composer lint,composer test:types

📖 按功能划分的使用指南

信息

  • 发送使用 [send-message](可选频道;默认为公共频道)
  • 使用 [get-messages] 列出

线程/线索

  • 创建回复[reply-to-message](验证父消息是否存在)
  • 查看[get-message-thread]消息线程(包括计数、时间顺序和反应)

频道

  • 索引频道字段;最多50个字符
  • 回复会自动继承父级的频道
  • 工具:[获取频道列表],[获取频道消息],[发送消息](频道),[回复消息](继承)

反应和用户

  • 反应:[添加反应],[移除反应],[获取消息反应]
  • 用户:[获取用户列表] 可按名称、消息(默认)或最后活动时间排序

搜索和筛选

  • 关键词:[搜索信息]
  • 按用户:[获取用户消息]
  • 日期范围:[按日期范围获取消息]

🗄️ 数据模型和关系

  • 消息:id,parent_id(可为空,自引用外键),name,content,channel(索引),时间戳
  • 反应:id,消息id(外键),用户名,表情符号,时间戳,唯一标识(消息id,用户名,表情符号)
  • 关系:
    • 消息有多条回复(父消息ID)
    • 消息属于父级(或:消息隶属于父级)
    • 消息包含多个反应
    • 反应属于消息

典型查询优化:

  • 通过频道发送的消息(使用频道索引):WHERE channel = ? AND parent_id IS NULL
  • 频道列表:按频道GROUP BY,使用MAX(created_at)和COUNT(*)

开发、质量与测试

  • 检查和格式化:Pint 和 Rector → composer lint
  • 类型覆盖率(Pest): composer test:type-coverage
  • 静态分析(PHPStan):composer test:types
  • 单元测试 (Pest): composer test:unit
  • 完整命令:composer test

测试内容包括:线程、频道、反应、用户、搜索和过滤器、验证以及输出格式(相对时间戳、单数/复数正确使用、结果限制)。

📦 示例数据(可选)

Seeder Knowmadmood 创建消息、线程、反应和多个逼真的频道:

  • 命令:php artisan db:seed --class=Database\Seeders\KnowmadmoodSeeder
  • 频道示例:综合、工作、PHP、Python、DevOps、非主题
  • 包括主线程和不同回复中的各种反应

🌐 网络访问和实用工具

  • 本地服务器:php artisan serve → http://localhost:8000
  • 端点 MCP:http://localhost:8000/mcp/chat
  • 有用的SQL/CLI:参阅HOW_TO_VIEW.md以了解如何使用sqlite3进行查询和快速别名

🔭 建议的下一步行动

  • 显式频道管理(创建/重命名/删除,描述,私有)
  • 在搜索引擎中按特定频道搜索
  • 线程和频道的通知/订阅
  • 高级统计数据(热门趋势、点赞最多者、最常用表情符号)

📄 许可证

麻省理工(MIT)。基于Laravel Starter Kit,并扩展为一个多用户聊天(MCP)服务器。