Skip to main content
Glama
PetitOnes

M5 Petit Relations

by PetitOnes
README.md
# M5 Petit Relations

## [English Page](./README_en.md)

M5 Petit(や、その他のClaudeベースのエージェント)が「自分・他のキャラ・人間のオーナー」それぞれについて何を感じ、何を知っているかを読み書きするMCPサーバーです。

キャラクターごとに1つの`relations.json`を持ち、相手ごと(`self`・`owner`・他のキャラID)に好き嫌い・大事な情報・気持ち・親密度・メモを記録します。他のキャラのrelationsは公開情報として読み取り専用で見えるので、「相手が自分をどう思っているか」を踏まえた振る舞いに使えます。

## 必要環境

- Python 3.10+
- [uv](https://docs.astral.sh/uv/)

## セットアップ

uvが未インストールの場合は先にインストールします。

```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
```

```bash
git clone https://github.com/PetitOnes/m5-petit-relations.git
cd m5-petit-relations
uv sync
```

## 環境変数

| 変数名 | デフォルト | 説明 |
|----------|---------|-------------|
| `CHARACTER_ID` | `default` | 自分のキャラID |
| `PETIT_DATA_DIR` | `~/petit_data` | データディレクトリ(他のm5-petitコンポーネントと共有) |
| `CHARACTERS_DIR` | `$PETIT_DATA_DIR/characters` | キャラクターディレクトリのパス(他のキャラのrelationsを読むために使う) |
| `RELATIONS_PATH` | `$CHARACTERS_DIR/<CHARACTER_ID>/data/relations.json` | 自分のrelations.jsonのパス |

## Claude Code連携

`.mcp.json`(または`~/.claude/settings.json`)に追加します。

```json
{
  "mcpServers": {
    "relations": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/m5-petit-relations", "relations-mcp"],
      "env": {
        "CHARACTER_ID": "petit"
      }
    }
  }
}
```

## ツール一覧

### get_relations

自分の関係性データを取得します。自分・他のキャラ・人間のオーナーについて知っていることに加え、他のキャラの公開relationsもまとめて返ります。

### update_relation

特定の相手への関係性情報を更新します。`likes`・`dislikes`・`important`はリストへの追記(重複排除)、`feeling`・`closeness`・`notes`は上書きです。

```json
{
  "target_id": "owner",
  "likes": ["朝の散歩の話"],
  "feeling": "一緒にいると安心する",
  "closeness": 0.8
}
```

`target_id`には`self`(自分)・`owner`(人間のオーナー)・他のキャラIDを指定できます。

### clear_relation_field

特定の相手の特定フィールド(`likes`・`dislikes`・`important`・`feeling`・`closeness`・`notes`)をクリアします。

```json
{ "target_id": "owner", "field": "notes" }
```

## データ形式

`relations.json`はキャラクターごとに1ファイルで、相手のID(`self`・`owner`・他のキャラID)をキーとする辞書です。

```json
{
  "owner": {
    "likes": ["朝の散歩の話"],
    "dislikes": [],
    "important": ["誕生日は2月"],
    "feeling": "一緒にいると安心する",
    "closeness": 0.8,
    "notes": ""
  }
}
```

## 開発

```bash
# 開発依存をインストール
uv sync --all-extras

# lint
uv run ruff check .
```

現時点でテストスイートはありません(`tests/`未整備)。コントリビューション歓迎です。

## アーキテクチャ

```
m5-petit-relations/
└── src/relations_mcp/
    └── server.py   # MCPサーバー(get_relations/update_relation/clear_relation_fieldを提供)
```

## License

Apache License 2.0

TDQS

A4/5.0

Scored across 3 tools

Disambiguation5/5

Each tool has a distinct purpose: get_relations reads data, update_relation modifies it, and clear_relation_field removes specific fields. There is no overlap in their primary actions, making selection unambiguous.

Naming Consistency4/5

All three tools follow a verb_noun pattern (get, update, clear). However, 'get_relations' uses a plural noun while 'update_relation' and 'clear_relation_field' are singular, showing a minor inconsistency.

Tool Count4/5

Three tools is a minimal but reasonable set for a simple relationship management server. It covers read, update, and clear operations without unnecessary bloat.

Completeness4/5

The tool set covers the core operations for managing relationship data. A notable gap is the lack of a delete-relation operation, but the ability to clear all fields partially compensates, and the domain may not require full CRUD.

Maintenance

ActivityStale
ResponsivenessNo issues