使用说明
RLM-MCP:用于Claude代码的递归语言模型服务器
状态: ✅ v0.2.2-为团队环境做好生产准备
实现递归语言模型模式的模型上下文协议(MCP)服务器 张等(2025),通过将提示视为外部环境对象,使LLM能够处理任意长的上下文。
v0.2.x的新增功能:
- v0.2.2:精确的BM25 doc_ids过滤•突出显示边界夹紧•服务器配置默认值•会话预算豁免。关闭
- v0.2.1:原子预算执行•chunk_index持久性•截断警告•错误消息改进
- v0.2.0版本:持久索引•并发会话安全•结构化日志记录•批量文档加载(速度提高2-3倍)
关键洞察
长提示不应直接输入神经网络,而应被视为LLM可以象征性地与之交互的环境的一部分。
特性
核心能力
- 基于会话的文档管理 --通过批处理加载文件、目录或内联内容
- 按需分块 --具有智能缓存的固定、基于行或基于分隔符的策略
- BM25搜索 --延迟构建、持久缓存、服务器重启后仍能存活
- 文物存储 --存储具有完整跨度来源的导出结果
生产特性(v0.2.0)
- 持久索引 --通过原子写入和损坏恢复将BM25索引保存到磁盘
- 并发会话安全 --每会话锁可防止多用户环境中的竞争情况
- 结构化日志 --带有相关ID的JSON输出,用于生产可观察性
- 批量文档加载 --使用内存限制信号量进行并发文件加载(速度提高2-3倍)
状态与验证
v0.2.2 生产就绪验证:
- ✅ 103/103测试通过 (100%功能+生产功能)
- ✅ 全部13个核心工具 使用规范命名实现
- ✅ MCP协议集成 与真实客户确认
- ✅ 已测试大型语料库 --加载并索引了1M+个字符
- ✅ 性能已验证 --亚秒级搜索,从磁盘加载索引<100ms
- ✅ 并发测试 --50个并发操作,无竞争条件
- ✅ 内存安全 --有界信号量可防止大批量OOM
- ✅ 生产测井 --具有相关性跟踪的JSON结构化日志
测试覆盖率
- 错误处理:13次测试
- 并发安全:9项测试
- 指数持久性:10次测试
- 集成工作流程:14项测试
- 大型语料库性能:5次测试
- 结构化日志记录:13次测试
- 批量加载:7次测试
- 来源追踪:8次测试
- 存储层:11次测试
- v0.2.2错误修复:13项测试
看 MIGRATION_v0.1_to_v0.2.md 获取升级指南。
安装
pip install rlm-mcp
或者具有开发依赖性:
pip install rlm-mcp[dev]
快速开始
from rlm_mcp import run_server
# Start the MCP server
run_server()
工具
所有工具都使用规范命名: rlm.<category>.<action>
| 类别 | 工具 |
|---|---|
rlm.session |
create, info, close |
rlm.docs |
load, list, peek |
rlm.chunk |
create |
rlm.span |
get |
rlm.search |
query |
rlm.artifact |
store, list, get |
工作流模式
- 初始化:
rlm.session.create带配置 - 负载:
rlm.docs.load文件 - 探测:
rlm.docs.peekat结构 - 搜索:
rlm.search.query查找相关章节 - 块:
rlm.chunk.create有适当的策略 - 过程:
rlm.span.get+客户端子呼叫 - 商店:
rlm.artifact.store结果与来源 - 关闭:
rlm.session.close
配置
配置文件: ~/.rlm-mcp/config.yaml
# Data storage
data_dir: ~/.rlm-mcp
# Session limits (per-session overridable)
default_max_tool_calls: 500
default_max_chars_per_response: 50000
default_max_chars_per_peek: 10000
# Batch loading (v0.2.0)
max_concurrent_loads: 20 # Max concurrent file loads (memory safety)
max_file_size_mb: 100 # Reject files larger than this
# Logging (v0.2.0)
log_level: "INFO" # DEBUG, INFO, WARNING, ERROR
structured_logging: true # JSON format (true) vs human-readable (false)
log_file: null # Optional: "/var/log/rlm-mcp.log"
# Tool naming: strict by default (fails if SDK doesn't support canonical names)
# Only set to true for experimentation with older MCP SDKs
allow_noncanonical_tool_names: false
工具命名(严格模式与兼容模式)
默认情况下,RLM-MCP需要一个支持显式工具命名的MCP SDK(例如FastMCP)。这确保了工具在以下情况下可被发现 rlm.session.create,不 rlm_session_create.
- 严格模式(默认):如果SDK不支持,服务器将无法启动
tool(name=...) - Compat模式:返回带有警告的函数名。仅用于实验。
# ~/.rlm-mcp/config.yaml
allow_noncanonical_tool_names: true # Enable compat mode (not recommended)
日志记录(v0.2.0)
RLM-MCP生成结构化JSON日志以实现生产可观察性。每个操作都会获得一个唯一的关联ID,用于跟踪相关事件。
JSON日志格式
{
"timestamp": "2026-01-15T10:30:45.123456Z",
"level": "INFO",
"logger": "rlm_mcp.server",
"message": "Completed rlm.session.create",
"correlation_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"session_id": "session-123",
"operation": "rlm.session.create",
"duration_ms": 42,
"success": true
}
筛选日志
# Filter by session
cat /var/log/rlm-mcp.log | jq 'select(.session_id == "session-123")'
# Filter by operation
cat /var/log/rlm-mcp.log | jq 'select(.operation == "rlm.search.query")'
# Track operation with correlation ID
cat /var/log/rlm-mcp.log | jq 'select(.correlation_id == "a1b2c3d4...")'
# Only errors
cat /var/log/rlm-mcp.log | jq 'select(.level == "ERROR")'
看 docs/LOGGING.md 查看详细的日志记录指南。
会话配置
{
"max_tool_calls": 500, # Budget enforcement
"max_chars_per_response": 50000, # DOS protection
"max_chars_per_peek": 10000, # DOS protection
"chunk_cache_enabled": True,
"model_hints": { # Advisory for client
"root_model": "claude-opus-4-5-20251101",
"subcall_model": "claude-sonnet-4-5-20250929",
"bulk_model": "claude-haiku-4-5-20251001"
}
}
建筑
┌─────────────────────────────────────────┐
│ Claude Skills (policy layer) │
├─────────────────────────────────────────┤
│ MCP Server (RLM Runtime) │
│ • Session management + concurrency │
│ • Document/span operations │
│ • BM25 search (lazy, persisted) │
│ • Batch loading with semaphores │
│ • Response size caps │
├─────────────────────────────────────────┤
│ Local Persistence (v0.2.0) │
│ • SQLite: sessions, docs, spans │
│ • Blob store: content-addressed │
│ • Index cache: persistent BM25 │
│ • Structured logs: JSON + correlation │
└─────────────────────────────────────────┘
设计原则
- 本地优先 --所有读/写操作都会影响本地存储
- 客户端管理的子呼叫 --MCP是“世界”,客户拨打LLM电话
- 不可变文档 --内容已解决,从未修改
- 按需分块 --查询时阻塞,缓存结果
- DoS保护 --响应大小的硬上限
发展
# Clone and install with uv (recommended)
git clone https://github.com/yourorg/rlm-mcp.git
cd rlm-mcp
uv sync --extra dev
# Run tests
uv run pytest
# Or with pip (editable install required for tests)
pip install -e ".[dev]"
pytest
# Type checking
uv run mypy src/
# Linting
uv run ruff check src/
MCP检查员烟雾测试
要从真实客户端验证工具发现和模式:
# Start server
uv run rlm-mcp
# In another terminal, use MCP Inspector
npx @anthropic/mcp-inspector
验证:
- 工具名称显示为
rlm.session.create,不rlm_session_create - 模式与预期的输入/输出结构匹配
truncated和index_built字段出现在响应中
许可证
麻省理工学院
参考文献
- 张,A.L.,克拉斯卡,T.,&Khattab,O.(2025)。 递归语言模型.arXiv:2512.24601