模型上下文管理器

一个用于增强AI模型的项目生命周期持久化上下文管理的服务,通过知识图谱存储和跨领域上下文管理,支持开发、项目管理、教育等多种场景。

  • by tejpalvirk
  • TypeScript
  • 本地部署
  • 10 星标
  • 更新于
在 GitHub 查看 tejpalvirk/contextmanager

使用说明

MCP上下文管理器

一组模型上下文协议(MCP)服务器,用于在整个项目生命周期的工作会话中增强具有持久上下文的AI模型。

每个项目的上下文都存储在由域服务器处理的特定于域的知识图中。所有域服务器都可以通过提供统一访问的中央上下文管理器进行管理。

每个域服务器也是一个独立的MCP服务器,您可以在没有上下文管理器的情况下单独使用。

特性

  • 持久上下文:容易 buildcontext, loadcontext,以及 deletecontext 随着你从创意到制作/出版/完成
  • 高效访问:让AI模型在需要时获取所需的确切上下文
  • 会话管理:
    1. startsession 工具,用于概述您在过去的课程中所做的工作
    2. endsession 用于分析整个会话并为未来会话更新知识图的工具
  • 跨域支持通过单一界面与多个知识领域合作,包括在不同领域的实体之间建立关系

为什么是知识图谱?

释放上下文窗口(性能),并最大限度地降低令牌成本(效率)。

可用服务器

contextmanager协调几个特定于域的MCP服务器:

  1. 开发人员MCP服务器:包含项目、组件和任务等实体的软件开发上下文。包括状态跟踪(非活动、活动、完成)、优先级管理(高、低)以及通过前置关系对任务进行排序。

  2. Project MCP服务器:包含项目、任务和资源等实体的项目管理上下文。具有状态管理(非活动、活动、完成)、优先级分配(高、低)和任务排序功能。

  3. 学生MCP服务器:包含课程、作业和考试等实体的教育背景。支持跟踪状态(活动、已完成、待定、放弃)、优先分配任务(高、低)和创建学习序列。

  4. 定性研究MCP服务器:定性研究背景,包括研究、参与者和访谈等实体。包括研究活动状态跟踪(活动、已完成、待定、放弃)、优先级管理(高、低)和分析排序。

  5. 定量研究MCP服务器:定量研究背景,包括数据集、变量和分析等实体。功能状态管理(活动、已完成、待定、放弃)、优先级分配(高、低)和顺序流程管理。

有关每个域服务器的详细文档,请参阅其各自目录中的README文件:

上下文管理器的好处

上下文管理器提供:

  • 统一接口:通过单个接口访问所有域服务器。
  • 智能路由:自动将请求路由到相应的域服务器。
  • 跨域上下文:维护不同域之间的引用。
  • 一致状态管理:跨领域状态跟踪的标准化方法。
  • 统一优先级系统:在不同情况下进行一致的优先级管理。
  • 集成测序:跨领域顺序工作流程的协调方法。

实施

上下文管理器使用MCP客户端SDK与特定于域的MCP服务器通信。它

  1. 维护域服务器及其连接信息的注册表
  2. 创建MCP客户端以连接到每个域服务器
  3. 根据活动域将请求路由到适当的域服务器
  4. 为跨域的相关实体提供跨域功能
  5. 确保对状态、优先级和顺序关系的一致处理

路径解析

上下文管理器使用在运行时构造的绝对路径来定位域服务器。如果需要修改域服务器的路径,请更新 domains 数组in main/index.ts.

安装与使用

您可以通过多种方式使用MCP上下文管理器:

使用npx(推荐)

直接使用npx运行:

npx github:tejpalvirk/contextmanager

全球安装

全局安装以使所有服务器都可以作为命令使用:

npm install -g github:tejpalvirk/contextmanager

然后运行:

mcp-server-contextmanager

或者直接运行特定的域服务器:

contextmanager-developer
contextmanager-project
contextmanager-student
contextmanager-qualitativeresearch
contextmanager-quantitativeresearch

从源代码克隆和构建

对于开发或定制:

git clone https://github.com/tejpalvirk/contextmanager.git
cd contextmanager
npm install
npm run build

然后运行:

node main/index.js

命令行参数

上下文管理器和域服务器接受以下命令行参数:

# Run on a specific port (default: 3000)
npx github:tejpalvirk/contextmanager --port 3001

# Enable debug logging
npx github:tejpalvirk/contextmanager --debug

# Specify a config file
npx github:tejpalvirk/contextmanager --config ./my-config.json

# Run only specific domain servers
npx github:tejpalvirk/contextmanager --domains developer,project

环境变量

每个域服务器都支持以下环境变量来自定义数据的存储位置:

  • 内存文件路径:存储知识图数据的路径

    • 可以是绝对的或相对的(相对路径使用当前工作目录)
    • 违约: <domain_directory>/memory.json
  • 会话文件路径:存储会话数据的路径

    • 可以是绝对的或相对的(相对路径使用当前工作目录)
    • 违约: <domain_directory>/sessions.json

示例用法:

# Store data in the current directory
MEMORY_FILE_PATH="./my-dev-memory.json" SESSIONS_FILE_PATH="./my-dev-sessions.json" npx github:tejpalvirk/contextmanager

# Store data in a specific location (absolute path)
MEMORY_FILE_PATH="/path/to/data/developer-memory.json" npx github:tejpalvirk/contextmanager

# Store data in user's home directory
MEMORY_FILE_PATH="$HOME/contextmanager/memory.json" npx github:tejpalvirk/contextmanager

与域服务器交互

域管理

使用 setActiveDomain 用于选择要使用的域的工具:

setActiveDomain(domain="developer")

会话管理

为活动域启动新会话:

startsession(domain="developer")

完成以下操作后结束会话:

endsession(sessionId="session_id_here", stage="assembly", stageNumber=6, totalStages=6, nextStageNeeded=false)

上下文操作

为活动域构建上下文:

buildcontext(type="entities", data={...})

加载特定实体的上下文:

loadcontext(entityName="MyProject", entityType="project")

删除上下文:

deletecontext(type="entities", data={...})

实体状态和优先级管理

为实体分配状态:

buildcontext(type="relations", data=[
  { from: "LoginFeature", to: "active", relationType: "has_status" }
])

设置实体优先级:

buildcontext(type="relations", data=[
  { from: "BugFix", to: "high", relationType: "has_priority" }
])

定义顺序关系:

buildcontext(type="relations", data=[
  { from: "DataModel", to: "UserInterface", relationType: "precedes" }
])

示例:使用开发人员域

// Set the active domain to developer
setActiveDomain(domain="developer")

// Start a new session
startsession(domain="developer")

// Create a new project entity
buildcontext(type="entities", data={
  "entityType": "project",
  "name": "MyProject",
  "description": "A sample project",
  "language": "TypeScript",
  "framework": "React"
})

// Load context for the project
loadcontext(entityName="MyProject", entityType="project")

// Create a component for the project and set its status to active
buildcontext(type="entities", data={
  "entityType": "component",
  "name": "AuthService",
  "project": "MyProject",
  "description": "Authentication service component",
  "dependencies": ["UserService"]
})

buildcontext(type="relations", data=[
  { from: "AuthService", to: "active", relationType: "has_status" },
  { from: "AuthService", to: "high", relationType: "has_priority" }
])

跨域操作

在不同域中的实体之间创建关系:

relateCrossDomain(fromDomain="developer", fromEntity="ProjectX", toDomain="project", toEntity="ProjectX", relationType="manages")

示例:跨域集成

// Create relationship between developer project and project management task
relateCrossDomain(
  fromDomain="developer", 
  fromEntity="MyProject", 
  toDomain="project", 
  toEntity="ProjectX", 
  relationType="manages"
)

与Claude整合

在Claude Desktop中,在设置中配置上下文管理器:

{
  "mcpServers": {
    "contextmanager": {
      "command": "npx",
      "args": [
        "-y",
        "github:tejpalvirk/contextmanager"
      ],
      "options": {
        "port": 3000,
        "domains": ["developer", "project", "student"]
      }
    }
  }
}

故障排除

常见问题

  1. 端口已在使用中:

    Error: listen EADDRINUSE: address already in use :::3000
    

    解决方案:使用 --port 选项指定其他端口。

  2. 连接被拒绝:

    Error: connect ECONNREFUSED 127.0.0.1:3000
    

    解决方案:确保服务器正在运行,并且可以在指定的地址访问。

  3. 找不到域服务器:

    Error: Domain server 'developer' not found
    

    解决方案:检查域名是否正确,服务器是否在上下文管理器中注册。

  4. 路径解析错误:

    Error: Cannot find module '...'
    

    解决方案:确保 domains 数组in main/index.ts 正确指定。

  5. 找不到方法:

    Error: Method 'buildcontext' not found in domain 'developer'
    

    解决方案:验证方法名称,并确保域服务器支持该方法。

  6. 状态或优先级值无效:

    Error: Invalid status value 'in_progress'. Valid values are: inactive, active, complete
    

    解决方案:确保您为特定域使用了正确的状态值。

后续步骤

  • 将JSON替换为YAML,令牌效率提高20-30%
  • 探索Markdown中的知识图谱

版本控制

此套餐如下 语义版本控制:

  • 重大:API更改不兼容
  • 次要的:添加向后兼容的功能
  • 补丁:向后兼容的错误修复

当前版本:1.0.0

贡献

欢迎投稿!请按照以下步骤操作:

  1. 分叉存储库
  2. 创建要素分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add some amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

编码标准

  • 对所有新代码使用TypeScript
  • 遵循现有代码样式
  • 添加新功能的测试
  • 根据需要更新文档

发展

先决条件

  • Node.js v16或更高版本
  • npm v7或更高版本

建筑

npm install
npm run build

测试

npm test

许可证

麻省理工学院

致谢

该项目基于Anthropic为Claude创建的模型上下文协议。