# Emotion Analyzer MCP Server
一个使用 OpenRouter 的 Gemma-3 模型分析图像中人物表情的 MCP (Model Context Protocol) 服务器。
## 功能特性
- 🎭 **表情识别**: 识别快乐、悲伤、愤怒、惊讶、恐惧、厌恶、中性等表情
- 📊 **强度评估**: 提供 1-10 分的表情强度评分
- 🎯 **置信度评估**: 提供 0-1 的分析置信度
- 👤 **详细描述**: 提供面部特征和情绪状态的详细描述
- 🌐 **多种输入**: 支持文件路径和 base64 编码的图像
- 🔧 **标准 MCP**: 完全兼容 MCP 协议,可与各种 MCP 客户端集成
## 安装
### 方法 1: 使用 pip 安装(推荐)
```bash
pip install emotion-analyzer-mcp
```
### 方法 2: 从源码安装
```bash
git clone https://github.com/yourusername/emotion-analyzer-mcp.git
cd emotion-analyzer-mcp
pip install -e .
```
## 配置
### 1. 获取 OpenRouter API 密钥
1. 访问 [OpenRouter](https://openrouter.ai/)
2. 注册账户并获取 API 密钥
3. 设置环境变量:
```bash
export OPENROUTER_API_KEY="your_api_key_here"
```
### 2. 在 Cherry Studio 中配置
在 Cherry Studio 的 MCP 设置中添加以下配置:
```json
{
"mcpServers": {
"emotion-analyzer": {
"command": "emotion-analyzer-mcp",
"env": {
"OPENROUTER_API_KEY": "your_api_key_here"
}
}
}
}
```
### 3. 在其他 MCP 客户端中配置
对于支持 MCP 的其他客户端,使用类似的配置:
```json
{
"name": "emotion-analyzer",
"command": "emotion-analyzer-mcp",
"env": {
"OPENROUTER_API_KEY": "your_api_key_here"
}
}
```
## 使用方法
### 可用工具
#### 1. analyze_emotion
通过文件路径分析图像中的表情。
**参数:**
- `image_path` (string, 必需): 图像文件的路径
**示例:**
```json
{
"name": "analyze_emotion",
"arguments": {
"image_path": "/path/to/image.jpg"
}
}
```
#### 2. analyze_emotion_base64
通过 base64 编码的图像数据分析表情。
**参数:**
- `image_data` (string, 必需): base64 编码的图像数据
- `image_format` (string, 可选): 图像格式,默认为 "jpeg"
**示例:**
```json
{
"name": "analyze_emotion_base64",
"arguments": {
"image_data": "base64_encoded_image_data",
"image_format": "jpeg"
}
}
```
### 在 Cherry Studio 中使用
1. 确保 MCP 服务器已正确配置
2. 在对话中使用工具调用:
```
请分析这张图片中人物的表情:/path/to/image.jpg
```
Cherry Studio 会自动调用 `analyze_emotion` 工具并显示分析结果。
### 输出格式
分析结果包含以下信息:
```
表情分析结果:
📸 图像: /path/to/image.jpg
😊 主要表情: 快乐
📊 表情强度: 8/10
🎯 置信度: 0.90
👤 面部特征: 眼角上扬,嘴角微笑,面部肌肉放松
💭 情绪状态: 积极愉悦的情绪状态
📝 其他观察: 表情自然真实
原始JSON结果:
{
"success": true,
"image_path": "/path/to/image.jpg",
"analysis": {
"emotion": "快乐",
"intensity": 8,
"confidence": 0.9,
"facial_features": "眼角上扬,嘴角微笑,面部肌肉放松",
"emotional_state": "积极愉悦的情绪状态",
"additional_notes": "表情自然真实"
}
}
```
## 支持的图像格式
- JPEG (.jpg, .jpeg)
- PNG (.png)
- GIF (.gif)
- BMP (.bmp)
- WebP (.webp)
## 故障排除
### 常见问题
1. **API 密钥错误**
- 确保 `OPENROUTER_API_KEY` 环境变量已正确设置
- 验证 API 密钥是否有效
2. **图像文件不存在**
- 检查图像文件路径是否正确
- 确保文件存在且可读
3. **网络连接问题**
- 确保网络连接正常
- 检查防火墙设置
4. **MCP 服务器无法启动**
- 检查 Python 环境和依赖是否正确安装
- 查看错误日志获取详细信息
### 调试模式
设置环境变量启用调试模式:
```bash
export DEBUG=1
emotion-analyzer-mcp
```
## 开发
### 本地开发
1. 克隆仓库:
```bash
git clone https://github.com/yourusername/emotion-analyzer-mcp.git
cd emotion-analyzer-mcp
```
2. 安装开发依赖:
```bash
pip install -e ".[dev]"
```
3. 运行测试:
```bash
pytest
```
### 贡献
欢迎提交 Issue 和 Pull Request!
## 许可证
MIT License
## 更新日志
### v1.0.0
- 初始版本
- 支持基本表情分析功能
- 支持文件路径和 base64 输入
- 完整的 MCP 协议支持
Raw data
{
"_id": null,
"home_page": "https://github.com/yourusername/emotion-analyzer-mcp",
"name": "emotion-analyzer-mcp",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "mcp, emotion, analysis, ai, gemma, openrouter",
"author": "Your Name",
"author_email": "Your Name <your.email@example.com>",
"download_url": "https://files.pythonhosted.org/packages/af/86/419a5ace93d273be6397cb77065db1b118d20bd972ffeae4ffcf8bda01e7/emotion_analyzer_mcp-1.0.0.tar.gz",
"platform": null,
"description": "# Emotion Analyzer MCP Server\r\n\r\n\u4e00\u4e2a\u4f7f\u7528 OpenRouter \u7684 Gemma-3 \u6a21\u578b\u5206\u6790\u56fe\u50cf\u4e2d\u4eba\u7269\u8868\u60c5\u7684 MCP (Model Context Protocol) \u670d\u52a1\u5668\u3002\r\n\r\n## \u529f\u80fd\u7279\u6027\r\n\r\n- \ud83c\udfad **\u8868\u60c5\u8bc6\u522b**: \u8bc6\u522b\u5feb\u4e50\u3001\u60b2\u4f24\u3001\u6124\u6012\u3001\u60ca\u8bb6\u3001\u6050\u60e7\u3001\u538c\u6076\u3001\u4e2d\u6027\u7b49\u8868\u60c5\r\n- \ud83d\udcca **\u5f3a\u5ea6\u8bc4\u4f30**: \u63d0\u4f9b 1-10 \u5206\u7684\u8868\u60c5\u5f3a\u5ea6\u8bc4\u5206\r\n- \ud83c\udfaf **\u7f6e\u4fe1\u5ea6\u8bc4\u4f30**: \u63d0\u4f9b 0-1 \u7684\u5206\u6790\u7f6e\u4fe1\u5ea6\r\n- \ud83d\udc64 **\u8be6\u7ec6\u63cf\u8ff0**: \u63d0\u4f9b\u9762\u90e8\u7279\u5f81\u548c\u60c5\u7eea\u72b6\u6001\u7684\u8be6\u7ec6\u63cf\u8ff0\r\n- \ud83c\udf10 **\u591a\u79cd\u8f93\u5165**: \u652f\u6301\u6587\u4ef6\u8def\u5f84\u548c base64 \u7f16\u7801\u7684\u56fe\u50cf\r\n- \ud83d\udd27 **\u6807\u51c6 MCP**: \u5b8c\u5168\u517c\u5bb9 MCP \u534f\u8bae\uff0c\u53ef\u4e0e\u5404\u79cd MCP \u5ba2\u6237\u7aef\u96c6\u6210\r\n\r\n## \u5b89\u88c5\r\n\r\n### \u65b9\u6cd5 1: \u4f7f\u7528 pip \u5b89\u88c5\uff08\u63a8\u8350\uff09\r\n\r\n```bash\r\npip install emotion-analyzer-mcp\r\n```\r\n\r\n### \u65b9\u6cd5 2: \u4ece\u6e90\u7801\u5b89\u88c5\r\n\r\n```bash\r\ngit clone https://github.com/yourusername/emotion-analyzer-mcp.git\r\ncd emotion-analyzer-mcp\r\npip install -e .\r\n```\r\n\r\n## \u914d\u7f6e\r\n\r\n### 1. \u83b7\u53d6 OpenRouter API \u5bc6\u94a5\r\n\r\n1. \u8bbf\u95ee [OpenRouter](https://openrouter.ai/)\r\n2. \u6ce8\u518c\u8d26\u6237\u5e76\u83b7\u53d6 API \u5bc6\u94a5\r\n3. \u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\uff1a\r\n\r\n```bash\r\nexport OPENROUTER_API_KEY=\"your_api_key_here\"\r\n```\r\n\r\n### 2. \u5728 Cherry Studio \u4e2d\u914d\u7f6e\r\n\r\n\u5728 Cherry Studio \u7684 MCP \u8bbe\u7f6e\u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u914d\u7f6e\uff1a\r\n\r\n```json\r\n{\r\n \"mcpServers\": {\r\n \"emotion-analyzer\": {\r\n \"command\": \"emotion-analyzer-mcp\",\r\n \"env\": {\r\n \"OPENROUTER_API_KEY\": \"your_api_key_here\"\r\n }\r\n }\r\n }\r\n}\r\n```\r\n\r\n### 3. \u5728\u5176\u4ed6 MCP \u5ba2\u6237\u7aef\u4e2d\u914d\u7f6e\r\n\r\n\u5bf9\u4e8e\u652f\u6301 MCP \u7684\u5176\u4ed6\u5ba2\u6237\u7aef\uff0c\u4f7f\u7528\u7c7b\u4f3c\u7684\u914d\u7f6e\uff1a\r\n\r\n```json\r\n{\r\n \"name\": \"emotion-analyzer\",\r\n \"command\": \"emotion-analyzer-mcp\",\r\n \"env\": {\r\n \"OPENROUTER_API_KEY\": \"your_api_key_here\"\r\n }\r\n}\r\n```\r\n\r\n## \u4f7f\u7528\u65b9\u6cd5\r\n\r\n### \u53ef\u7528\u5de5\u5177\r\n\r\n#### 1. analyze_emotion\r\n\u901a\u8fc7\u6587\u4ef6\u8def\u5f84\u5206\u6790\u56fe\u50cf\u4e2d\u7684\u8868\u60c5\u3002\r\n\r\n**\u53c2\u6570:**\r\n- `image_path` (string, \u5fc5\u9700): \u56fe\u50cf\u6587\u4ef6\u7684\u8def\u5f84\r\n\r\n**\u793a\u4f8b:**\r\n```json\r\n{\r\n \"name\": \"analyze_emotion\",\r\n \"arguments\": {\r\n \"image_path\": \"/path/to/image.jpg\"\r\n }\r\n}\r\n```\r\n\r\n#### 2. analyze_emotion_base64\r\n\u901a\u8fc7 base64 \u7f16\u7801\u7684\u56fe\u50cf\u6570\u636e\u5206\u6790\u8868\u60c5\u3002\r\n\r\n**\u53c2\u6570:**\r\n- `image_data` (string, \u5fc5\u9700): base64 \u7f16\u7801\u7684\u56fe\u50cf\u6570\u636e\r\n- `image_format` (string, \u53ef\u9009): \u56fe\u50cf\u683c\u5f0f\uff0c\u9ed8\u8ba4\u4e3a \"jpeg\"\r\n\r\n**\u793a\u4f8b:**\r\n```json\r\n{\r\n \"name\": \"analyze_emotion_base64\",\r\n \"arguments\": {\r\n \"image_data\": \"base64_encoded_image_data\",\r\n \"image_format\": \"jpeg\"\r\n }\r\n}\r\n```\r\n\r\n### \u5728 Cherry Studio \u4e2d\u4f7f\u7528\r\n\r\n1. \u786e\u4fdd MCP \u670d\u52a1\u5668\u5df2\u6b63\u786e\u914d\u7f6e\r\n2. \u5728\u5bf9\u8bdd\u4e2d\u4f7f\u7528\u5de5\u5177\u8c03\u7528\uff1a\r\n\r\n```\r\n\u8bf7\u5206\u6790\u8fd9\u5f20\u56fe\u7247\u4e2d\u4eba\u7269\u7684\u8868\u60c5\uff1a/path/to/image.jpg\r\n```\r\n\r\nCherry Studio \u4f1a\u81ea\u52a8\u8c03\u7528 `analyze_emotion` \u5de5\u5177\u5e76\u663e\u793a\u5206\u6790\u7ed3\u679c\u3002\r\n\r\n### \u8f93\u51fa\u683c\u5f0f\r\n\r\n\u5206\u6790\u7ed3\u679c\u5305\u542b\u4ee5\u4e0b\u4fe1\u606f\uff1a\r\n\r\n```\r\n\u8868\u60c5\u5206\u6790\u7ed3\u679c\uff1a\r\n\r\n\ud83d\udcf8 \u56fe\u50cf: /path/to/image.jpg\r\n\ud83d\ude0a \u4e3b\u8981\u8868\u60c5: \u5feb\u4e50\r\n\ud83d\udcca \u8868\u60c5\u5f3a\u5ea6: 8/10\r\n\ud83c\udfaf \u7f6e\u4fe1\u5ea6: 0.90\r\n\ud83d\udc64 \u9762\u90e8\u7279\u5f81: \u773c\u89d2\u4e0a\u626c\uff0c\u5634\u89d2\u5fae\u7b11\uff0c\u9762\u90e8\u808c\u8089\u653e\u677e\r\n\ud83d\udcad \u60c5\u7eea\u72b6\u6001: \u79ef\u6781\u6109\u60a6\u7684\u60c5\u7eea\u72b6\u6001\r\n\ud83d\udcdd \u5176\u4ed6\u89c2\u5bdf: \u8868\u60c5\u81ea\u7136\u771f\u5b9e\r\n\r\n\u539f\u59cbJSON\u7ed3\u679c:\r\n{\r\n \"success\": true,\r\n \"image_path\": \"/path/to/image.jpg\",\r\n \"analysis\": {\r\n \"emotion\": \"\u5feb\u4e50\",\r\n \"intensity\": 8,\r\n \"confidence\": 0.9,\r\n \"facial_features\": \"\u773c\u89d2\u4e0a\u626c\uff0c\u5634\u89d2\u5fae\u7b11\uff0c\u9762\u90e8\u808c\u8089\u653e\u677e\",\r\n \"emotional_state\": \"\u79ef\u6781\u6109\u60a6\u7684\u60c5\u7eea\u72b6\u6001\",\r\n \"additional_notes\": \"\u8868\u60c5\u81ea\u7136\u771f\u5b9e\"\r\n }\r\n}\r\n```\r\n\r\n## \u652f\u6301\u7684\u56fe\u50cf\u683c\u5f0f\r\n\r\n- JPEG (.jpg, .jpeg)\r\n- PNG (.png)\r\n- GIF (.gif)\r\n- BMP (.bmp)\r\n- WebP (.webp)\r\n\r\n## \u6545\u969c\u6392\u9664\r\n\r\n### \u5e38\u89c1\u95ee\u9898\r\n\r\n1. **API \u5bc6\u94a5\u9519\u8bef**\r\n - \u786e\u4fdd `OPENROUTER_API_KEY` \u73af\u5883\u53d8\u91cf\u5df2\u6b63\u786e\u8bbe\u7f6e\r\n - \u9a8c\u8bc1 API \u5bc6\u94a5\u662f\u5426\u6709\u6548\r\n\r\n2. **\u56fe\u50cf\u6587\u4ef6\u4e0d\u5b58\u5728**\r\n - \u68c0\u67e5\u56fe\u50cf\u6587\u4ef6\u8def\u5f84\u662f\u5426\u6b63\u786e\r\n - \u786e\u4fdd\u6587\u4ef6\u5b58\u5728\u4e14\u53ef\u8bfb\r\n\r\n3. **\u7f51\u7edc\u8fde\u63a5\u95ee\u9898**\r\n - \u786e\u4fdd\u7f51\u7edc\u8fde\u63a5\u6b63\u5e38\r\n - \u68c0\u67e5\u9632\u706b\u5899\u8bbe\u7f6e\r\n\r\n4. **MCP \u670d\u52a1\u5668\u65e0\u6cd5\u542f\u52a8**\r\n - \u68c0\u67e5 Python \u73af\u5883\u548c\u4f9d\u8d56\u662f\u5426\u6b63\u786e\u5b89\u88c5\r\n - \u67e5\u770b\u9519\u8bef\u65e5\u5fd7\u83b7\u53d6\u8be6\u7ec6\u4fe1\u606f\r\n\r\n### \u8c03\u8bd5\u6a21\u5f0f\r\n\r\n\u8bbe\u7f6e\u73af\u5883\u53d8\u91cf\u542f\u7528\u8c03\u8bd5\u6a21\u5f0f\uff1a\r\n\r\n```bash\r\nexport DEBUG=1\r\nemotion-analyzer-mcp\r\n```\r\n\r\n## \u5f00\u53d1\r\n\r\n### \u672c\u5730\u5f00\u53d1\r\n\r\n1. \u514b\u9686\u4ed3\u5e93\uff1a\r\n```bash\r\ngit clone https://github.com/yourusername/emotion-analyzer-mcp.git\r\ncd emotion-analyzer-mcp\r\n```\r\n\r\n2. \u5b89\u88c5\u5f00\u53d1\u4f9d\u8d56\uff1a\r\n```bash\r\npip install -e \".[dev]\"\r\n```\r\n\r\n3. \u8fd0\u884c\u6d4b\u8bd5\uff1a\r\n```bash\r\npytest\r\n```\r\n\r\n### \u8d21\u732e\r\n\r\n\u6b22\u8fce\u63d0\u4ea4 Issue \u548c Pull Request\uff01\r\n\r\n## \u8bb8\u53ef\u8bc1\r\n\r\nMIT License\r\n\r\n## \u66f4\u65b0\u65e5\u5fd7\r\n\r\n### v1.0.0\r\n- \u521d\u59cb\u7248\u672c\r\n- \u652f\u6301\u57fa\u672c\u8868\u60c5\u5206\u6790\u529f\u80fd\r\n- \u652f\u6301\u6587\u4ef6\u8def\u5f84\u548c base64 \u8f93\u5165\r\n- \u5b8c\u6574\u7684 MCP \u534f\u8bae\u652f\u6301\r\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "MCP\u670d\u52a1\u5668\uff1a\u4f7f\u7528Gemma-3\u6a21\u578b\u5206\u6790\u56fe\u50cf\u4e2d\u7684\u4eba\u7269\u8868\u60c5",
"version": "1.0.0",
"project_urls": {
"Documentation": "https://github.com/yourusername/emotion-analyzer-mcp#readme",
"Homepage": "https://github.com/yourusername/emotion-analyzer-mcp",
"Issues": "https://github.com/yourusername/emotion-analyzer-mcp/issues",
"Repository": "https://github.com/yourusername/emotion-analyzer-mcp"
},
"split_keywords": [
"mcp",
" emotion",
" analysis",
" ai",
" gemma",
" openrouter"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "683500e35f3ac3811f88b03f0216f4904f8700749cd1f9ddbc78af807021fc98",
"md5": "b71e61c85c35de5e08f70e5a4a62a71b",
"sha256": "0db288b7d30a7b87488030f2adb1f7db1a373f9e28975ed690320194c88d1937"
},
"downloads": -1,
"filename": "emotion_analyzer_mcp-1.0.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b71e61c85c35de5e08f70e5a4a62a71b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 9164,
"upload_time": "2025-07-22T03:48:31",
"upload_time_iso_8601": "2025-07-22T03:48:31.524727Z",
"url": "https://files.pythonhosted.org/packages/68/35/00e35f3ac3811f88b03f0216f4904f8700749cd1f9ddbc78af807021fc98/emotion_analyzer_mcp-1.0.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "af86419a5ace93d273be6397cb77065db1b118d20bd972ffeae4ffcf8bda01e7",
"md5": "e77e4f22c88114adc90a7329f867ccee",
"sha256": "be4cdb8a6cbcdba686b4e0750b87651be780b096f2b321e1134314f90a23b4f1"
},
"downloads": -1,
"filename": "emotion_analyzer_mcp-1.0.0.tar.gz",
"has_sig": false,
"md5_digest": "e77e4f22c88114adc90a7329f867ccee",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 8891,
"upload_time": "2025-07-22T03:48:32",
"upload_time_iso_8601": "2025-07-22T03:48:32.626256Z",
"url": "https://files.pythonhosted.org/packages/af/86/419a5ace93d273be6397cb77065db1b118d20bd972ffeae4ffcf8bda01e7/emotion_analyzer_mcp-1.0.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-22 03:48:32",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "yourusername",
"github_project": "emotion-analyzer-mcp",
"github_not_found": true,
"lcname": "emotion-analyzer-mcp"
}