Skip to main content
Glama

M5 Petit Desire

EnglishPage

M5 Petitに、時間経過とセンサー入力に基づいて変化する内的な「欲求」を持たせる自律欲求システムです。

desire_config.json(キャラクターごとの設定ファイル)で定義した欲求それぞれについて、3段階で欲求レベル(0.0〜1.0)を計算します。

  1. 時間ベース計算m5-petit-memoryのSQLite DBをキーワード検索し、最後にその欲求が満たされてからの経過時間を欲求レベルに変換

  2. センサー効果の適用 — M5の/sensorsエンドポイント(m5-petit-mcpが公開)から取得したセンサー値で欲求を増減

  3. 欲求間の相互作用 — ある欲求が閾値を超えたときに他の欲求へ影響を与える(cross_effects)

desire_updater.pyをcronで定期実行してdesires.jsonを更新し、MCPサーバー(server.py)がそれを読んでClaudeにツールとして提供します。

Related MCP server: mcp-esieabot

必要環境

  • Python 3.10+

  • uv

セットアップ

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

curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/PetitOnes/m5-petit-desire.git
cd m5-petit-desire
uv sync

desire_config.jsonをキャラクターごとに用意します($PETIT_DATA_DIR/characters/<character_id>/config/desire_config.json)。

{
  "desires": {
    "curiosity": {
      "name_ja": "知りたい",
      "description": "気になることを調べたい、新しいことを知りたい好奇心",
      "satisfaction_hours": 2.0,
      "keywords": ["調べた", "検索した", "発見した", "学んだ"],
      "color": "#5bc8d4"
    },
    "miss_companion": {
      "name_ja": "会いたい",
      "description": "一緒にいる人と話したい、一緒にいたい気持ち",
      "satisfaction_hours": 3.0,
      "keywords": []
    }
  },
  "sensor_effects": [
    {
      "sensor": "battery",
      "condition": { "op": "range", "min": 1, "max": 20 },
      "effects": { "*": { "multiply": 0.5 } },
      "description": "電池が減ると他の欲求が下がる"
    }
  ],
  "cross_effects": [],
  "priority": ["miss_companion", "curiosity"]
}
  • keywordsが空の欲求のうちmiss_companionは、COMPANION_NAME環境変数から自動でキーワードを生成します(「〇〇と話した」「〇〇に伝えた」など)

  • time_driven: falseを指定すると時間経過では変化せず、base_levelに留まります(センサー・相互作用のみで変化)

cronで5分ごとに更新します。

# crontab -e
*/5 * * * * cd /path/to/m5-petit-desire && CHARACTER_ID=petit uv run desire-updater

環境変数

変数名

デフォルト

説明

CHARACTER_ID

default(コマンドライン引数が優先)

キャラクターID。desire_config.jsondesires.jsonのパス決定に使う

PETIT_DATA_DIR

~/petit_data

データディレクトリ(m5-petit-appと共有)

COMPANION_NAME

あなた

一緒にいる人の名前(miss_companion欲求のキーワード自動生成に使用)

MEMORY_DB_PATH

~/.claude/memories/<character_id>/memory.db

m5-petit-memoryが使うSQLite DBのパス

DESIRES_PATH

$PETIT_DATA_DIR/characters/<character_id>/data/desires.json

欲求レベルの出力先

Claude Code連携

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

{
  "mcpServers": {
    "desire-system": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/m5-petit-desire", "desire-system"],
      "env": {
        "CHARACTER_ID": "petit"
      }
    }
  }
}

ツール一覧

get_desires

現在の欲求レベルを取得します。レベルが0.7以上の欲求があれば、すぐに行動することが期待されます。

satisfy_desire

行動した後に欲求を満たします(レベルが0.4下がる)。

{ "desire_name": "curiosity" }

boost_desire

驚き・新規性による欲求のブースト(ドーパミン応答のシミュレーション)。

{ "desire_name": "curiosity", "amount": 0.3 }

開発

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

# テスト実行
PYTEST_DISABLE_PLUGIN_AUTOLOAD=1 uv run pytest

# lint
uv run ruff check .

アーキテクチャ

m5-petit-desire/
├── desire_updater.py   # 欲求レベルの計算・desires.jsonへの保存(cronから実行)
├── server.py           # MCPサーバー(get_desires/satisfy_desire/boost_desireを提供)
└── tests/

License

Apache License 2.0

本プロジェクトは lifemate-ai/embodied-claude(MITライセンス)の desire-system コンポーネントを元に、M5 Petit向けに大幅に改変したものです。元のライセンスと著作権表示は NOTICE を参照してください。

Available Tools

3 tools
boost_desireA

Boost a desire level due to novelty/surprise (dopamine/prediction error). Call when you feel surprised or encounter unexpected info. Simulates dopamine response to novelty.

ParametersJSON Schema
NameRequiredDescriptionDefault
amountYesAmount to boost (0.1-0.5). 0.2=mild surprise, 0.5=strong.
desire_nameYesName of the desire to boost: (desire_config.json を確認)

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description explains the mechanism (simulates dopamine response) and the trigger, but does not disclose potential side effects, permanence, or prerequisites for the boost. With no annotations, the description carries the burden, and it only partially fulfills it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the action. The third sentence is somewhat redundant with the first but overall concise and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool, the description gives purpose and trigger but omits return behavior or side effects. No output schema exists, so a bit more detail on the effect would improve completeness, but it remains adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides full descriptions for both parameters, including value meanings for amount and reference to desire_config.json for desire_name. The description adds no additional parameter detail, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool boosts a desire level in response to novelty/surprise, using dopamine/prediction error framing. It distinguishes from siblings by focusing on increasing desire due to unexpectedness, whereas satisfy_desire likely reduces/fulfills and get_desires reads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit trigger condition is given: 'Call when you feel surprised or encounter unexpected info.' This gives clear when-to-use guidance. It does not explicitly mention when not to use or alternative tools, so not a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_desiresA

Get current desire levels. Act immediately on any desire with level >= 0.7.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden for behavioral disclosure. While 'Get' implies a read operation, the description does not explicitly state that it has no side effects, how the levels are returned, or any other behavioral traits. The threshold instruction is advisory, not a disclosure of tool behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise—two short sentences that front-load the purpose and add a key action threshold. Every word earns its place, with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simplicity (0 params, no output schema, no annotations), the description covers the core purpose and a usage trigger. However, it omits details about the response format (e.g., how desire levels are presented), which the agent would need to interpret results. Still, it is adequate for a basic read tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema coverage is 100% (vacuously). The baseline for 0 params is 4, and the description does not need to explain parameter meaning since none exist. No additional parameter information is required.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb+resource: 'Get current desire levels.' It distinguishes itself from sibling tools (satisfy_desire, boost_desire) by being a read-only retrieval operation, and the threshold instruction adds concrete scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Act immediately on any desire with level >= 0.7' gives clear context for when to use the tool (to check levels) and what to do next (act if threshold met). It implies the need for follow-up actions via sibling tools, though it doesn't explicitly name alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

satisfy_desireA

Satisfy a desire after taking an action. Pass the desire_name you just acted on. The level drops by 0.4. Call again if still high.

ParametersJSON Schema
NameRequiredDescriptionDefault
desire_nameYesName of the desire to satisfy: (desire_config.json を確認)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the full burden. It clearly discloses the core behavioral trait: 'The level drops by 0.4' and that repeated calls are possible. It does not cover error handling or prerequisites, but the essential mutation behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences, front-loaded with the action and outcome. Every phrase contributes: the trigger, the parameter, the numeric effect, and the repeat condition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter tool with no output schema, the description covers purpose, usage trigger, and effect. It is sufficient, but lacks explicit mention of invalid desire names or return values, so it is not fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the single parameter 100%, so baseline is 3. The description adds meaning by requiring the desire_name to be the one 'you just acted on' and references desire_config.json for valid names, which goes beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'satisfy' and identifies the resource 'desire', with a clear effect: 'The level drops by 0.4.' This distinguishes it from sibling tools like boost_desire, which would increase the level.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states when to use the tool: 'after taking an action' and 'Pass the desire_name you just acted on.' It also gives a conditional instruction, 'Call again if still high.' It does not name alternatives explicitly, so it misses the top score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 3 tool updatesv0.1.0
    • First observedboost_desire
    • First observedget_desires
    • First observedsatisfy_desire

TDQS

A4.3/5.0
Disambiguation5/5

Each tool has a distinctly different purpose: get_desires reads current levels, satisfy_desire reduces a desire, and boost_desire increases a desire. There is no overlap or confusion between them.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: get_desires, satisfy_desire, boost_desire. The naming is uniform and predictable.

Tool Count5/5

Three tools is an appropriate scope for a desire management system, covering the essential operations (read, decrease, increase) without unnecessary bloat.

Completeness5/5

The tool set provides complete coverage of the domain: it allows checking desire levels, satisfying desires to lower them, and boosting desires to raise them. There are no obvious missing operations for the stated purpose.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/PetitOnes/m5-petit-desire'

If you have feedback or need assistance with the MCP directory API, please join our Discord server