Skip to main content
Glama
README.md
# Emotion MCP Server

弗洛伊德双驱情绪管理 MCP 服务器 —— [astrbot_plugin_affection](https://github.com/middcom/astrbot_plugin_affection) 的独立 MCP 实现。

> **NPM**: https://www.npmjs.com/package/emotion-mcp
> **GitHub**: https://github.com/yaoxiaolinglong/emotion-mcp

为 AI 角色扮演/伴侣场景提供动态情绪模拟系统。基于弗洛伊德心理动力学(力比多/攻击性),通过**潜意识 LLM 分析对话内容**实时调整情绪数值,具备**时间衰减**能力。

## 快速开始

```bash
npx -y emotion-mcp
```

## 集成方式

### 零配置(推荐) — Agent 自主分析

```yaml
mcpServers:
  emotion:
    type: stdio
    command: npx
    args:
      - -y
      - emotion-mcp
    timeout: 60000
```

**无需任何环境变量!** Agent 通过两步模式完成情绪分析:

```
用户发言
  → emotion_get_analysis_prompt(user_id, message)  # 获取分析任务
  → Agent 自己分析 → 输出 JSON
  → emotion_apply_deltas(user_id, deltas)           # 提交结果,数值更新
  → emotion_get_emotion_prompt(user_id)             # 获取情绪文本
  → 注入 system prompt → 生成回复
```

### 后台 LLM 模式 — 独立分析

如果配置了 `EMOTION_LLM_API_KEY`,可用 `emotion_analyze` 一步完成:

```yaml
mcpServers:
  emotion:
    type: stdio
    command: npx
    args:
      - -y
      - emotion-mcp
    env:
      EMOTION_LLM_API_KEY: sk-your-key-here
    timeout: 60000
```

## 环境变量

| 变量 | 默认值 | 说明 |
|------|--------|------|
| `EMOTION_LLM_API_KEY` | (必填) | 潜意识 LLM API Key |
| `EMOTION_LLM_API_BASE` | `https://api.mulanteastory.cn` | API 地址 |
| `EMOTION_LLM_MODEL` | `gpt-3.5-turbo` | 模型名(建议轻量模型) |
| `EMOTION_SENSITIVITY` | `30` | 情绪敏感度 (0-100) |
| `EMOTION_INITIAL_AFFECTION` | `50` | 初始好感度 (0-100) |

## MCP 工具

### `emotion_analyze` ★ 核心
分析用户消息 → 调用潜意识 LLM → 更新情绪数值。每次用户发言后调用。
- 输入: `user_id`, `message`, `history`(可选)
- 输出: 更新后的完整情绪面板 + 增量详情

### `emotion_get_emotion_prompt`
生成可追加到 system prompt 的情绪文本。
- 输入: `user_id`
- 输出: 情绪数值面板文本

### `emotion_get_panel`
获取当前情绪数值面板(JSON 格式)。
- 输入: `user_id`

### `emotion_get_status`
完整情绪档案,含参考表。

### `emotion_reset` / `emotion_set` / `emotion_reset_all`
管理工具。

## Agent 角色的「情绪驱动规则」

将以下规则加入角色设定的 system prompt 末尾:

```
【情绪驱动规则】

你的回复风格和情感倾向由系统实时计算的「力比多/攻击性/好感」数值决定。每次对话前,你会收到【当前情绪数值】面板,包含:

- 他力比多(0-50):想亲近对方的欲望。高→主动撒娇黏人,低→冷淡回避疏远。
- 他攻击性(0-50):想伤害对方的冲动。高→敌意烦躁刻薄,低→温顺容忍顺从。
- 好感度(0-100):长期累积的喜欢和依恋。≥70 时攻击性表现为"吃醋""占有欲";≤30 时表现为"厌恶""敌意"。
- 自力比多(0-50):自爱程度。高→自信自爱,低→自卑空虚。
- 自攻击性(0-50):自责/自我毁灭冲动。高→崩溃自我贬低。

重要约束:不要提及任何具体数值,根据数值强度自然演绎。数值的微小变化也应体现在语气强度上。
```

## 许可

基于 [astrbot_plugin_affection](https://github.com/middcom/astrbot_plugin_affection) (AGPL-3.0) 改造。同样采用 AGPL-3.0。

TDQS

A3.8/5.0

Scored across 10 tools

Disambiguation3/5

Several get tools overlap in the data they return. get_panel and get_status both provide current emotion values, and get_analysis_prompt also includes current values, which could confuse agents. However, descriptions clearly differentiate their broader purposes (UI panel, full profile, analysis task), so overlaps are manageable.

Naming Consistency5/5

All tools use the emotion_ prefix with snake_case, and verbs like get, apply, set, reset are consistent and predictable. The pattern is verb_noun or verb, with only minor exceptions like emotion_analyze and emotion_reset_all, but these are still clear and uniform.

Tool Count5/5

10 tools is well within the typical 3-15 range and each tool serves a distinct function in managing emotion state. The number feels appropriate for a focused emotion management server, covering read, update, reset, and analysis operations without unnecessary bloat.

Completeness4/5

The server covers the full emotion lifecycle: reading (get_panel, get_status, get_analysis_prompt), updating (set, apply_deltas, analyze, apply_decay), and resetting (reset, reset_all). Minor gaps like listing all users are not essential for typical role-play scenarios, so the surface is almost complete.

Maintenance

ActivityInactive
ResponsivenessNo issues