使用说明
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}
🛠️ 本地启动
- 依赖项和环境
- 复制 .env 文件并生成密钥
- 确保已安装 SQLite
- 安装和构建
- composer install(用于安装Composer项目依赖)
- npm install(用于安装npm包)
- npm run build(或 npm run dev)
- 数据库
- 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 类进行数据库播种”
- 服务器
- php artisan serve 命令在中文中可以翻译为:“使用 Laravel 艺术家(Artisan)命令行工具启动本地服务器”。不过,为了简洁明了,我们通常直接说“运行 php artisan serve 启动本地服务器”或“使用 php artisan serve 启动开发服务器”。这里的“php artisan serve”是 Laravel 框架中的一个命令,用于快速启动一个本地开发服务器,方便开发者在本地测试和开发应用
- 端点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)服务器。