UNPKG

dingtalk-honorary-mcp

Version:

DingTalk Honor MCP Server - TypeScript implementation for AI assistants to manage enterprise honor system

334 lines (257 loc) 9.14 kB
# DingTalk Honor MCP Server [![npm version](https://badge.fury.io/js/dingtalk-honorary-mcp.svg)](https://www.npmjs.com/package/dingtalk-honorary-mcp) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) 钉钉企业文化荣誉管理 MCP 服务器 - 为 AI 助手提供简单、易用、友好的钉钉荣誉系统集成能力。 ## 📋 功能特性 ### 核心功能 - 🏆 **颁发荣誉** - 给员工颁发荣誉勋章,支持批量颁发 - 📊 **查询企业荣誉** - 获取企业可颁发的荣誉列表 - 🎖️ **查询员工荣誉** - 查看员工已获得的荣誉记录 - ✨ **创建荣誉模板** - 创建自定义荣誉勋章模板 - 🔄 **撤销荣誉** - 撤销已颁发的荣誉勋章 ### 技术特性 - 🔐 **智能Token管理** - 自动缓存和刷新access_token - 🛡️ **错误自愈** - Token失效、网络异常自动恢复 - 📝 **配置驱动** - YAML配置文件定义所有API - 🚀 **零配置启动** - 环境变量配置即可运行 - 🔧 **TypeScript支持** - 完整的类型定义和智能提示 ## 🚀 快速开始 ### 方式1:使用 npx 直接运行(推荐) 无需安装,直接运行: ```bash npx dingtalk-honorary-mcp@latest ``` ### 方式2:全局安装 ```bash # 全局安装 npm install -g dingtalk-honorary-mcp # 安装后运行 dingtalk-honorary-mcp ``` ### 方式3:作为项目依赖 ```bash # 在项目中安装 npm install dingtalk-honorary-mcp # 在 package.json scripts 中使用 { "scripts": { "honor-mcp": "dingtalk-honorary-mcp" } } ``` ### 方式4:从源码安装 ```bash git clone https://github.com/dingtalk-mcp/dingtalk-honorary-mcp.git cd dingtalk-honorary-mcp npm install npm run build npm start ``` ### 配置环境变量 有三种配置方式: #### 方式1:环境变量(推荐用于命令行) ```bash # Linux/macOS export DINGTALK_Client_ID=your_app_key_here export DINGTALK_Client_Secret=your_app_secret_here # Windows set DINGTALK_Client_ID=your_app_key_here set DINGTALK_Client_Secret=your_app_secret_here ``` #### 方式2:.env 文件(推荐用于开发) 创建 `.env` 文件: ```bash DINGTALK_Client_ID=your_app_key_here DINGTALK_Client_Secret=your_app_secret_here ``` #### 方式3:直接传递(适合 Cursor 集成) 在 Cursor MCP 配置中直接设置 env 字段(见下文) ### 运行服务 根据安装方式选择相应的运行命令: ```bash # 使用 npx(无需安装) npx dingtalk-honorary-mcp@latest # 全局安装后 dingtalk-honorary-mcp # 源码方式 npm start ``` ## 📖 工具使用说明 ### 1. 给员工颁发荣誉 (`mcp_dingtalk-honor_grantHonor`) 给组织内的员工颁发荣誉勋章,支持单人或多人批量颁发。 **参数说明:** - `honorId` (必填): 荣誉ID,可通过查询企业荣誉列表获取 - `senderUserId` (必填): 发送人userId - `grantReason` (必填): 颁奖词,最多50个字符 - `granterName` (必填): 颁奖人名字,最多15个字符 - `receiverUserIds` (必填): 接收人userId数组,最多10个 - `expirationTime` (可选): 荣誉有效期时间戳(毫秒) - `noticeSingle` (可选): 是否发送单聊通知 - `noticeAnnouncer` (可选): 是否使用官宣号通知 - `openConversationIds` (可选): 群ID列表,最多5个 **使用示例:** ```json { "honorId": "10001", "senderUserId": "manager001", "grantReason": "感谢您为团队做出的杰出贡献!", "granterName": "张经理", "receiverUserIds": ["user001", "user002"], "noticeSingle": true, "noticeAnnouncer": true } ``` ### 2. 查询企业荣誉列表 (`mcp_dingtalk-honor_queryOrgHonors`) 查询当前企业下可颁发的荣誉列表,支持分页。 **参数说明:** - `nextToken` (必填): 分页游标,首次调用传"0" - `maxResults` (可选): 每页条目数,默认20,最大100 **响应示例:** ```json { "success": true, "result": { "nextToken": "10", "openHonors": [ { "honorId": "10001", "honorName": "优秀员工", "honorDesc": "表彰工作出色的员工", "honorImgUrl": "https://..." } ] } } ``` ### 3. 查询员工荣誉记录 (`mcp_dingtalk-honor_queryUserHonors`) 查询某个员工已获得的荣誉记录。 **参数说明:** - `userId` (必填): 员工userId - `nextToken` (必填): 分页游标,首次调用传"0" - `maxResults` (可选): 每页条目数,默认20,最大100 ### 4. 创建荣誉模板 (`mcp_dingtalk-honor_createOrgHonor`) 创建企业自定义荣誉勋章模板。 **参数说明:** - `userId` (必填): 管理员userId(需要管理员权限) - `medalName` (必填): 荣誉名称,最多10字符 - `medalDesc` (必填): 荣誉描述,最多30字符 - `medalMediaId` (必填): 荣誉图片media_id(900x900 PNG) - `avatarFrameMediaId` (必填): 头像挂件media_id(240x240 PNG) - `defaultBgColor` (必填): 背景颜色,可选值: - `#FFFBB4` (浅黄色) - `#FFE7BC` (浅橙色) - `#FFDAF4` (浅粉色) - `#DAF6A8` (浅绿色) - `#E4D7FF` (浅紫色) - `#BFDFFF` (浅蓝色) - `#B9F2D6` (薄荷绿) ### 5. 撤销荣誉勋章 (`mcp_dingtalk-honor_recallHonor`) 撤销员工已获得的荣誉勋章。 **参数说明:** - `honorId` (必填): 荣誉勋章ID - `userId` (必填): 员工userId ## 🔧 Cursor 集成配置 在 Cursor 中使用本 MCP 服务器: 1. 打开 Cursor 设置(Cmd/Ctrl + ,) 2. 搜索 "MCP" 或找到 "Model Context Protocol" 设置 3. 点击 "Edit MCP Settings (JSON)" 4. 添加以下配置: ### 推荐配置(使用 npx) ```json { "dingtalk-honor": { "command": "npx", "args": ["dingtalk-honorary-mcp@latest"], "env": { "DINGTALK_Client_ID": "your_app_key", "DINGTALK_Client_Secret": "your_app_secret" } } } ``` ### 备选配置(全局安装) 如果您已全局安装: ```json { "dingtalk-honor": { "command": "dingtalk-honorary-mcp", "env": { "DINGTALK_Client_ID": "your_app_key", "DINGTALK_Client_Secret": "your_app_secret" } } } ``` 配置完成后,重启 Cursor 即可使用。 ## ✅ 安装验证 安装完成后,可以通过以下命令验证是否安装成功: ```bash # 查看版本 npx dingtalk-honorary-mcp@latest --version # 查看帮助(会启动 MCP 服务) npx dingtalk-honorary-mcp@latest --help ``` 如果看到 "DingTalk Honor MCP server running on stdio" 说明安装成功。 ## 📝 注意事项 1. **权限要求**: - 需要"组织文化荣誉信息读权限""组织文化荣誉信息写权限" - 创建荣誉模板需要管理员权限 2. **并发限制**: - 同一个颁发人不允许并发执行颁发操作 - 创建荣誉模板不允许并发调用 3. **审核说明**: - 创建的荣誉模板需要钉钉审核(一般5个工作日) - 企业每周审核次数有限制 4. **Token管理**: - 推荐使用Client ID/Secret方式,支持自动刷新 - Token缓存在本地,有效期2小时 ## 🛠️ 开发指南 ### 项目结构 ``` dingtalk-honorary-mcp/ ├── src/ │ ├── index.ts # 入口文件 │ ├── DingTalkHonorServer.ts # 主服务器类 │ ├── types.ts # TypeScript类型定义 │ └── cli.ts # CLI启动脚本 ├── dist/ # 编译输出目录 ├── dingtalk_honor_mcp.yaml # API配置文件 ├── package.json # 项目配置 ├── tsconfig.json # TypeScript配置 ├── env.example # 环境变量示例 ├── start-mcp.sh # 启动脚本 ├── test-honor-mcp.js # 测试脚本 ├── cursor-mcp-config.json # Cursor配置示例 ├── README.md # 使用文档 ├── USAGE_GUIDE.md # 详细使用指南 ├── PROJECT_SUMMARY.md # 项目总结 ├── LICENSE # MIT许可证 └── .gitignore # Git忽略配置 ``` ### 添加新API 1. 在 `dingtalk_honor_mcp.yaml` 中添加新的工具定义 2. 在 `types.ts` 中添加相应的类型定义 3. 重新构建项目:`npm run build` ### 调试模式 设置环境变量 `DEBUG=true` 可以查看详细的请求和响应日志。 ## 📄 许可证 MIT License ## 🤝 贡献 欢迎提交 Issue 和 Pull Request! ## 📦 发布信息 - **npm 包地址**: https://www.npmjs.com/package/dingtalk-honorary-mcp - **当前版本**: 1.0.0 - **发布日期**: 2024-06-24 - **维护者**: plutozhang - **下载量**: [![npm downloads](https://img.shields.io/npm/dm/dingtalk-honorary-mcp.svg)](https://www.npmjs.com/package/dingtalk-honorary-mcp) ## 📞 联系方式 如有问题或建议,请通过以下方式联系: - 提交 GitHub Issue - 发送邮件至:dingtalk-mcp@example.com ## 📝 更新日志 ### v1.0.0 (2024-06-24) - 🎉 首次发布 - ✨ 支持 5 个核心功能:颁发荣誉、查询荣誉、创建模板、撤销荣誉 - 🔐 智能 Token 管理 - 📋 配置驱动架构 - 🔧 完整的 TypeScript 支持