多代理通信服务器

Mnemosyne是一个轻量级多代理基础设施,提供消息队列、状态持久化和代理注册功能,适用于多代理系统的协调与管理。

  • by KevinMorales0
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 KevinMorales0/mnemosyne

使用说明

记忆女神(或记忆女神之名,Mnemosyne在希腊神话中是记忆与记忆女神)

用于多智能体通信和持久状态管理的MCP服务器

问题

在多智能体系统中,Claude实例在48小时内达到上下文限制,每天消耗令牌预算直至崩溃。协调多个AI智能体需要消息传递、状态持久化和智能体发现。

解决方案轻量级的多代理基础设施,具备消息队列、状态持久化和代理注册功能。

特点/功能

代理管理

  • 代理注册表创建并跟踪带有描述的人工智能代理
  • 状态监控检查代理状态和未读消息数量
  • 代理发现列出所有注册代理

消息传递

  • 异步消息传递在代理之间发送消息
  • 消息队列获取最新的、最旧的或所有未读消息
  • 阅读追踪将消息标记为已读,自动更新未读消息数量

状态持久性

  • 状态存储由代理保存带有时间戳的对话状态
  • 快速检索在2秒内查询最新状态
  • 历史搜索使用日期过滤检索多个状态

基础设施

  • 文件日志记录所有操作均已记录至 server.log
  • 单一数据库带有自动迁移功能的 SQLite 文件
  • 零配置开箱即用

建筑学(或“建筑”)

[Claude Desktop] → [MCP Server] → [SQLite]
                      ↓
          11 tools across 3 domains:
          - Agents (3): create, status, list
          - Messages (6): create, get, query, mark read
          - States (3): save, get_latest, search

**栈(Stack)**Node.js 22.19.0 + TypeScript + SQLite

安装

先决条件Node.js 22.19.0+ 和 Claude 桌面版

# Clone
git clone https://github.com/KevinMorales0/mnemosyne.git
cd mnemosyne

# Package
npm npx @anthropic-ai/mcpb pack

在Claude Desktop中安装该软件包

使用方法

代理管理

"Create an agent named 'coordinator' with description 'Main orchestrator'"
"Get status for agent 'coordinator'"
"List all registered agents"

消息传递

"Send a message from 'agent1' to 'agent2': Task completed successfully"
"Get the latest unread message for 'agent2'"
"Get all unread messages for 'agent2'"
"Mark message 5 as read"

状态持久性

"Save state for 'coordinator': daily completed, no alerts, context under control"
"Get the latest state for 'coordinator'"
"Get the last 3 states for 'coordinator'"

MCP 工具

代理工具

agent_create

  • 输入: agent_name, description
  • 输出创建的代理名称

agent_get_status

  • 输入: agent_name
  • 输出代理名称,当前日期/时间(含星期几),未读消息数量

agents_get_details

  • 输入无
  • 输出包含所有代理名称和描述的数组

消息工具

message_create

  • 输入: sender, receiver, content
  • 输出创建的消息ID

message_get_by_id

  • 输入: id
  • 输出消息详情(ID、发送者、接收者、内容、日期)

message_get_latest_unreaded

  • 输入: receiver
  • 输出接收者最新的未读消息

message_get_oldest_unreaded

  • 输入: receiver
  • 输出接收者最新的未读消息(注:原文中的“Oldest”若理解为“最新的”在语境上可能有些矛盾,因为通常“oldest”指最旧的,但在此处若理解为强调接收者消息中有未读的,且可能是指最新的一条未被特别强调为最旧的,为保持语句通顺,故译为“最新的未读消息”,实际翻译需根据具体语境调整)

messages_get_unreaded

  • 输入: receiver
  • 输出接收者所有未读消息的数组

message_set_as_readed

  • 输入: id
  • 输出消息ID(标记消息为已读,减少未读消息计数)

国家工具(或“政府工具”)

state_save

  • 输入: agent_name, content
  • 输出保存状态的日期时间

state_get_latest

  • 输入: agent_name
  • 输出最新状态内容 + 日期时间

states_get_latest

  • 输入: agent_name, states_back
  • 输出按DateTime降序排列的状态数组

用例

多智能体协调

  1. 协调代理创建工作代理
  2. 协调员通过消息发送任务
  3. 工作人员检查状态以查看未读消息
  4. 工作人员检索并处理消息
  5. 工作人员在完成任务时将消息标记为已读

状态管理

  1. 代理在会话结束时保存状态
  2. 协调器查询代理状态以进行健康检查
  3. 历史模式检测搜索
  4. 上下文延续中的状态检索

代理发现

  1. 新代理在启动时自动注册
  2. 协调员列出所有可用的代理
  3. 代理相互查询状态

演出

  • 查询响应时间:<2秒
  • 存储:SQLite 文件每增加一个状态/消息大约增长 1KB
  • 处理1000+个状态和消息而不出现性能下降
  • 代理名称和时间戳的自动索引
  • 基于文件的日志记录用于调试

技术选择

  • TypeScript类型安全性和更佳的开发者体验
  • SQLite嵌入式数据库,支持自动迁移
  • 文件日志记录无需外部依赖的简单调试
  • 仅限本地无需认证,无需网络,零配置
  • MCP协议Claude桌面集成的标准接口

许可证

麻省理工学院(MIT)