角色状态管理服务器

Celestial-MCP是一个用于SillyTavern的角色状态管理服务器,用于存储和管理角色的CP、技能、成就等信息,并提供API和UI进行交互。

  • by Crazy-Rain
  • 本地部署
  • 更新于
在 GitHub 查看 Crazy-Rain/Celestial-MCP

使用说明

天体MCP

MCP与Sillytavern一起使用。可能有效也可能无效。适用于Celestial Forge场景。

简短的回答:是的,这非常适合MCP服务器。您可以构建一个符合MCP标准的小型服务 真相之源 对于玩家的Forge状态(特权、CP、响应计数、成就),公开一个小的web UI进行手动编辑,并将其连接到SillyAvon中,这样LLM总是能看到最新的工作表。

这里有一个你可以实施的具体计划。

此MCP服务器的功能

  • 商店:角色表(CP、响应计数器、等级、笔记)、解锁特权、库存/特制物品、成就。
  • 供应:只读的“上下文数据包”大小用于提示,加上用于工具/UI的完整JSON。
  • 更新:端点/工具调用,以添加/删除特权、授予CP、提前响应计数、记录成就/制作。
  • 生存:通过web面板重新启动(SQLite/Postgres)、多会话和手动编辑。
  • 可选地:预加载福利目录(您的 perks-database.json)因此AI/UI可以搜索/验证津贴。

最小架构

  • 后端(MCP服务器):带有MCP适配器层的TypeScript(Express/fastify)或Python(FastAPI)。
  • 数据库:SQLite便于本地部署;Postgres如果是多用户。
  • 用户界面:小React/Vite管理员 /ui (列出/过滤特权、编辑工作表、撤消)。
  • 认证:API密钥或localhost-only在开发期间;每个“世界/保存”的令牌。
  • 模式:用于验证和迁移的JSON模式。

数据模型(精简但完整)

// characters
Character {
  id: string,               // UUID or short slug
  name: string,
  world: string,            // optional campaign label
  cp_total: number,
  cp_spent: number,
  response_count: number,   // 0..9 (award CP at 10)
  tier: string,             // computed from CP or set manually
  notes: string,
  created_at: datetime,
  updated_at: datetime
}

// unlocked perks (1:n with Character)
UnlockedPerk {
  id: string,
  character_id: string,
  perk_id?: string,         // from catalog, if known
  name: string,             // denormalized for custom perks
  category: string,         // Assistants / Breeding / Crafting:Artisan / ...
  source: string,           // origin universe or "homebrew"
  cost_cp?: number,
  description?: string,
  acquired_at: datetime,
  tags: string[]
}

// catalog (optional, loaded from perks-database.json)
PerkCatalog {
  id: string,
  name: string,
  category: string,
  source: string,
  cost_cp: number,
  description: string,
  tags: string[]
}

// achievements / crafting logs (optional)
EventLog {
  id: string,
  character_id: string,
  kind: "achievement" | "craft" | "award" | "spend" | "note",
  payload: JSON,            // freeform details
  delta_cp?: number,        // positive/negative for ledger
  created_at: datetime
}

MCP工具(LLM可以调用)

定义这些MCP“工具”,以便SillyTavern/AI可以 查询+修改 国家确定性。

阅读工具

  • forge.get_sheet({character_id}) → 已修剪的提示表:

    • { cp_total, cp_spent, response_count, tier, top_perks:[..5], recent_events:[..5] }
  • forge.list_perks({character_id, q?, category?, limit?})

  • forge.search_catalog({q, category?, limit}) (可选,用于提供建议)

编写工具

  • forge.add_perk({character_id, perk_id? | name, category, source, cost_cp?, description?})

  • forge.remove_perk({character_id, unlocked_perk_id})

  • forge.award_cp({character_id, amount, reason})

  • forge.spend_cp({character_id, amount, reason})

  • forge.tick_response({character_id})

    • 服务器增量 response_count;如果它达到10→ 重置为0, award_cp(base_award) 并附加一个 EventLog.
  • forge.set_tier({character_id, tier}) (或CP服务器端的计算层)

智能与安全

  • 每个变异工具都接受一个可选 request_id 因此重试不会重复应用。
  • 服务器验证:不能花费超过可用CP;无法删除不存在的福利;如果提供了目录交叉检查。

快速接线(所以它永远不会“忘记”)

在SillyTavern中:

  1. 消息开始时:呼叫 forge.get_sheet 并将紧凑块注入系统/上下文:

    [FORGE STATE]
    CP: 450 (Spent 300) | Tier: Forge Adept | Responses: 7/10
    Perks (sample): A.I. Chip (Assistants, 600), Artisan (Crafting:Artisan, 100), Constructor Drone (Assistants, 200)
    Recent: +50 CP (Spark cycle), Crafted "Silver Relic"
    
  2. AI回复结束时:呼叫 forge.tick_response (服务器在10/10执行裁决)。

    • 服务器返回更新的计数器,如果触发,则返回 cp_awarded 现场。
  3. 当玩家购买/解锁时:人工智能/工具调用 forge.add_perk 和 forge.spend_cp.

  4. 可选的:如果人工智能提出新的福利,它可以致电 forge.search_catalog 建议有效条目。

因为 服务器 是真理的源泉 AI专用镜像 在提示中,您可以避免漂移或丢失。

Web UI功能(适合您/GM)

  • 选择角色(或创建)。
  • 活动表:CP、回复、层级、注释。
  • Perk manager:添加(从目录或自定义)、编辑、删除。
  • 分类账:撤销/重做最后N个事件。
  • 目录浏览器:导入/更新 perks-database.json,按类别/来源/成本过滤。
  • 导出/导入:按字符保存完整的JSON。

CP/响应逻辑(服务器端)

  • 配置文件:

    {
      "spark_cycle_size": 10,
      "cp_award_per_cycle": 50,
      "tiers": [
        {"name":"Spark Initiate","min_cp":0},
        {"name":"Forge Adept","min_cp":500},
        {"name":"Celestial Artisan","min_cp":1500},
        {"name":"Architect of Realities","min_cp":3000}
      ]
    }
    
  • tick_response:

    • response_count = (response_count + 1) % 10
    • 如果翻车→ award_cp(cp_award_per_cycle) 并写一个 EventLog.

保持提示简洁

  • forge.get_sheet 应返回 两种变体:

    • summary_for_prompt (≤800–1200个字符)。
    • full_sheet (用于UI或深度检查)。
  • 提示的附加值列表:top N by 新近性 或 协同相关性 (服务器可以计算一个小集合)。

处理多个聊天/保存

  • 使用 character_id +可选 session_id 因此不同的ST聊天可以引用相同的字符。
  • 您还可以将角色克隆到新的“世界/保存”中。

安全与稳定

  • 本地首次部署(localhost:8787),CORS仅适用于SillyAvern主机。
  • ST的标题中的简单API令牌,web UI的单独管理令牌。
  • 每日JSON导出以进行备份。

有东西真好

  • 制作层次:let forge.craft_item({tier,...}) 按级别自动授予CP。
  • 协同助手:服务器建议在添加新功能时提供补充功能(通过目录标签)。
  • 冲突检查:防止互斥特权的可选规则。