返回市场
ib-mcp-缓存服务器

ib-mcp-缓存服务器

作者:ibproduct19 星标更新:2025-01-03

项目介绍

内存缓存服务器

这是一个模型上下文协议(MCP)服务器,通过在语言模型交互之间高效地缓存数据来减少令牌消耗。它可以与任何MCP客户端以及使用令牌的任何语言模型一起工作。

安装

  1. 克隆仓库:
git clone git@github.com:ibproduct/ib-mcp-cache-server
cd ib-mcp-cache-server
  1. 安装依赖:
npm install
  1. 构建项目:
npm run build
  1. 添加到您的MCP客户端设置中:
{
  "mcpServers": {
    "memory-cache": {
      "command": "node",
      "args": ["/path/to/ib-mcp-cache-server/build/index.js"]
    }
  }
}
  1. 当您使用MCP客户端时,服务器会自动启动。

验证其是否正常工作

当服务器运行正常时,您会看到:

  1. 终端中的消息:“内存缓存MCP服务器正在stdio上运行”
  2. 访问相同数据多次时性能提升
  3. 您无需采取任何行动——缓存过程是自动进行的

您可以通过以下方式验证服务器是否正在运行:

  1. 打开您的MCP客户端
  2. 查看您启动服务器的终端中的任何错误消息
  3. 执行可以从缓存中受益的操作(如多次读取同一文件)

配置

服务器可以通过config.json或环境变量进行配置:

{
  "maxEntries": 1000,        // 缓存中的最大项目数
  "maxMemory": 104857600,    // 最大内存使用量(以字节为单位,100MB)
  "defaultTTL": 3600,        // 默认生存时间(秒,1小时)
  "checkInterval": 60000,    // 清理间隔(毫秒,1分钟)
  "statsInterval": 30000     // 统计更新间隔(毫秒,30秒)
}

配置选项解释

  1. maxEntries(默认:1000)

    • 缓存中可以存储的最大项目数
    • 防止缓存无限增长
    • 超过限制时,最旧且未使用的项目首先被移除
  2. maxMemory(默认:100MB)

    • 最大内存使用量(以字节为单位)
    • 防止过度占用内存
    • 超过限制时,最近最少使用的项目被移除
  3. defaultTTL(默认:1小时)

    • 项目默认在缓存中停留的时间
    • 项目在此时间后会被自动移除
    • 防止过期数据占用内存
  4. checkInterval(默认:1分钟)

    • 服务器检查过期项目的频率
    • 较低值使内存使用更准确
    • 较高值减少CPU使用
  5. statsInterval(默认:30秒)

    • 缓存统计信息更新的频率
    • 影响命中率/未命中率的准确性
    • 帮助监控缓存的有效性

如何减少令牌消耗

内存缓存服务器通过自动存储原本需要在您和语言模型之间重新发送的数据来减少令牌消耗。您不需要做任何特别的事情——当您通过MCP客户端与任何语言模型交互时,缓存过程会自动发生。

以下是缓存的一些示例:

1. 文件内容缓存

当多次读取一个文件时:

  • 第一次:完整文件内容被读取并缓存
  • 后续:内容从缓存中获取,而不是重新读取文件
  • 结果:重复文件操作使用的令牌更少

2. 计算结果

当执行计算或分析时:

  • 第一次:完整计算被执行,结果被缓存
  • 后续:如果输入相同,结果从缓存中获取
  • 结果:重复计算使用的令牌更少

3. 经常访问的数据

当需要多次访问相同数据时:

  • 第一次:数据被处理并缓存
  • 后续:数据从缓存中获取,直到TTL过期
  • 结果:访问相同信息使用的令牌更少

自动缓存管理

服务器通过以下方式自动管理缓存过程:

  • 当首次遇到数据时进行存储
  • 当可用时提供缓存数据
  • 根据设置移除旧的或未使用的数据
  • 通过统计数据跟踪有效性

优化建议

1. 设置适当的TTL

  • 对于经常变化的数据设置较短的TTL
  • 对于静态内容设置较长的TTL

2. 调整内存限制

  • 更高的内存限制用于更多的缓存(更多的令牌节省)
  • 如果内存使用是一个问题,则设置较低的限制

3. 监控缓存统计信息

  • 高命中率表示良好的令牌节省
  • 低命中率表示需要调整TTL或限制

环境变量配置

您可以在MCP设置中使用环境变量覆盖config.json设置:

{
  "mcpServers": {
    "memory-cache": {
      "command": "node",
      "args": ["/path/to/build/index.js"],
      "env": {
        "MAX_ENTRIES": "5000",
        "MAX_MEMORY": "209715200",  // 200MB
        "DEFAULT_TTL": "7200",      // 2小时
        "CHECK_INTERVAL": "120000",  // 2分钟
        "STATS_INTERVAL": "60000"    // 1分钟
      }
    }
  }
}

您还可以指定自定义配置文件的位置:

{
  "env": {
    "CONFIG_PATH": "/path/to/your/config.json"
  }
}

服务器将:

  1. 在其目录中查找config.json
  2. 应用任何环境变量覆盖
  3. 如果没有指定,则使用默认值

实践测试缓存

要查看缓存在实际中的效果,请尝试以下场景:

  1. 文件读取测试

    • 读取并分析一个大型文件
    • 再次询问关于该文件的问题
    • 第二次响应应该更快,因为文件内容已被缓存
  2. 数据分析测试

    • 对某些数据进行分析
    • 再次请求相同的分析
    • 第二次分析应使用缓存的结果
  3. 项目导航测试

    • 探索一个项目的结构
    • 再次查询相同的文件/目录
    • 目录列表和文件内容将从缓存中提供

当您注意到以下情况时,缓存正在工作:

  • 重复操作的响应速度更快
  • 关于未更改内容的一致答案
  • 不需要重新读取未更改的文件