RimSearcher
A Model Context Protocol (MCP) server for fast searching and retrieval of RimWorld source code.
Ask AI about RimSearcher
Powered by Claude · Grounded in docs
I know everything about RimSearcher. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
RimSearcher
一个基于 MCP 的 RimWorld 源码检索与分析服务。它把本地 RimWorld C# / XML 数据建立为可查询索引,让 AI 助手能在真实源码上定位、追踪、阅读和解释逻辑,减少“幻觉式回答”。
采用 Roslyn + XML 继承解析,支持高并发只读查询。
MCP 协议版本:
2025-11-25
1. 核心特性
精准 C# 解析(Roslyn)
- 单次解析提取类型继承和成员索引(方法/属性/字段/事件)
- 支持类大纲、成员体提取、继承链追踪
- 支持方法、属性、构造器、索引器、运算符级别读取
XML Def 继承合并
- 递归解析
ParentName链路 - 合并父子节点并处理列表容器/覆盖逻辑
- 输出可直接阅读的“最终 Def 结果”
C# 与 XML 语义桥接
- 从 Def 自动提取关联 C# 类型(如 thingClass / compClass / workerClass)
- 在
inspect中同时展示 Def 信息与关联代码路径
面向查询性能优化
- 预建索引 + N-gram 候选筛选
- 启动后冻结索引(
FrozenDictionary)优化只读查询吞吐 - 搜索结果带上限控制,避免超长输出拖慢上下文
低 Token 消耗(LLM 友好)
- 采用先定位再深入的查询链路(
locate→inspect/trace→read_code),避免一次返回大段无关文本 locate/trace/search_regex工具采用结果上限与预览截断,控制上下文体积并保持关键信息密度read_code支持按methodName/extractClass精确读取代码,未指定成员时再按小范围行号读取,避免一次返回整个文件
运行模型与边界
- 本地运行,核心检索不依赖网络
- 网络请求仅用于版本更新提示(可关闭)
2. 六大工具
以下为实际注册的 MCP 工具名与能力说明。
rimworld-searcher__locate
全局模糊定位入口。
支持内容
- C# 类型、成员(方法/属性/字段)、XML Def、文件名
- 过滤语法:
type:method:field:def: - CamelCase 缩写与拼写容错(如
JDW)
示例查询
def:Apparel_ShieldBelt
type:CompShield
method:CompTick
field:energy
rimworld-searcher__inspect
深度分析单个 Def 或 C# 类型。
Def 模式
- 展示 Def 类型、来源文件
- 返回继承合并后的 XML
- 提取关联 C# 类型并尝试映射到索引文件
C# 模式
- 返回继承关系图
- 返回类成员大纲(字段/属性/方法签名)
示例
Apparel_ShieldBelt
RimWorld.CompShield
rimworld-searcher__trace
交叉引用追踪工具。
模式
inheritors:列出某基类/接口的子类usages:查找符号文本引用(C# + XML),带行号预览
示例
symbol: ThingComp, mode: inheritors
symbol: CompShield, mode: usages
rimworld-searcher__read_code
精确读取 C# 代码片段。
支持读取方式
- 指定成员:
methodName(支持方法/属性/构造器/索引器/运算符) - 指定类型:
extractClass - 指定行区间:
startLine+lineCount
路径支持
- 绝对路径
- 已索引文件名(如
CompShield.cs) - 文件基名(如
CompShield)
示例
path: CompShield.cs, methodName: CompTick
rimworld-searcher__search_regex
全局正则检索(C# + XML)。
特性
- 可选
fileFilter(如.cs/.xml) - 结果按文件分组,显示行号预览
- 内置输出截断提示,避免超大响应
示例
pattern: class.*:.*ThingComp
fileFilter: .cs
rimworld-searcher__list_directory
目录浏览工具。
特性
- 列出目录下文件与子目录(子目录以
/结尾) - 支持
limit分页提示 - 受
PathSecurity白名单约束(除非显式关闭)
2.5 系统架构
RimSearcher Architecture (Narrow)
MCP Client
|
| JSON-RPC (MCP)
v
RimSearcher.cs (runtime)
|- request routing / concurrency / cancel / progress / logging bridge
v
Program.cs (bootstrap)
|- load config + PathSecurity
|- try cache -> fallback full scan -> save cache
|- start MCP server
|
+-- IndexCacheService
| |- .cache/index/manifest.json
| `- .cache/index/index.bin (compressed snapshot)
|
`-- UpdateChecker
`- .cache/.update-cache (latest version + check time)
Tool Layer
|- locate | inspect | trace | read_code | search_regex | list_directory
|
+-- SourceIndexer
| |- RoslynHelper / FuzzyMatcher / QueryParser
| `- Local C# source (Assembly-CSharp)
|
`-- DefIndexer
|- XmlInheritanceHelper / FuzzyMatcher / QueryParser
`- Local RimWorld XML (Data/Defs...)
启动流程
- 读取配置(优先
RIMSEARCHER_CONFIG,未设置时回退到同目录config.json) - 初始化路径安全策略
- 自动准备缓存目录(
<exe目录>/.cache/index) - 尝试加载索引缓存(
manifest.json+index.bin) - 缓存未命中时扫描 C# / XML 并建索引,然后回写缓存
- 冻结索引(读优化)
- 注册工具并启动 MCP 服务
3. 典型工作流
场景:分析护盾腰带如何生效
locate(def:Apparel_ShieldBelt):定位 Definspect(Apparel_ShieldBelt):看合并后 XML 与关联 C# 类型inspect(RimWorld.CompShield):看继承链和类大纲read_code(path=CompShield.cs, methodName=CompTick):读取核心逻辑trace(symbol=CompShield, mode=usages):追踪相关引用
4. 性能与安全
| 维度 | 当前实现 |
|---|---|
| 索引策略 | 启动优先加载本地缓存,未命中时扫描并冻结索引(FrozenDictionary) |
| 索引缓存 | manifest.json + index.bin,默认目录 <exe目录>/.cache/index |
| 模糊匹配 | N-gram 候选过滤 + 评分排序 |
| 并发控制 | MCP 请求并发上限 10 |
| 正则搜索保护 | 全局/单文件命中上限 + 行数上限 + regex 超时 |
| 路径安全 | 白名单根目录校验(SkipPathSecurity=false 时生效) |
索引缓存说明
- 缓存目录:
RimSearcher.Server.exe同目录下/.cache/index - 缓存文件:
manifest.json(元数据)+index.bin(压缩索引快照) - 首次启动通常会全量建索引并写缓存;二次启动通常会直接命中缓存,这能显著提升二次启动速度
- 若需要强制重建,删除
/.cache/index后重启该程序即可 - 当前策略下,配置路径变化或缓存结构版本变化会触发自动重建
5. 快速开始
前置要求
运行 Release 版
RimSearcher.Server.exe需要 .NET 10 Runtime;若需本地编译源码,则需要安装 .NET 10 SDK。
安装步骤
- 从 Releases 下载
RimSearcher.Server.exe。 - 创建
config.json
配置示例:
{
"CsharpSourcePaths": [
"C:/Path/To/Your/RimWorld/Source"
],
"XmlSourcePaths": [
"C:/SteamLibrary/steamapps/common/RimWorld/Data"
],
"SkipPathSecurity": false,
"CheckUpdates": true
}
字段说明:
CsharpSourcePaths: C# 源码目录(反编译源码目录,需要自己反编译导出游戏源码文件,这里不提供)XmlSourcePaths: RimWorldData目录SkipPathSecurity:true时关闭路径白名单检查(仅建议本地可信环境)CheckUpdates: 是否启用版本更新提示
- 在 MCP 客户端中把
RimSearcher.Server.exe注册为 stdio MCP Server,并设置环境变量RIMSEARCHER_CONFIG指向上一步的config.json。
兼容模式说明:
- 若设置了
RIMSEARCHER_CONFIG,优先读取该路径。- 若未设置,则回退到
RimSearcher.Server.exe同目录下的config.json。
安装到 AI 助手(不同客户端配置差异)
通用 MCP 客户端(Claude Desktop / Gemini CLI / Cursor 等)
{
"mcpServers": {
"RimSearcher": {
"command": "D:/Tools/RimSearcher/RimSearcher.Server.exe",
"args": [],
"env": {
"RIMSEARCHER_CONFIG": "D:/your/custom/path/config.json"
}
}
}
}
GitHub Copilot(servers 结构)
{
"servers": {
"RimSearcher": {
"command": "D:/Tools/RimSearcher/RimSearcher.Server.exe",
"args": [],
"env": {
"RIMSEARCHER_CONFIG": "D:/your/custom/path/config.json"
}
}
}
}
OpenCode(mcp 结构)
{
"mcp": {
"RimSearcher": {
"type": "local",
"command": ["D:/Tools/RimSearcher/RimSearcher.Server.exe"],
"enabled": true,
"environment": {
"RIMSEARCHER_CONFIG": "D:/your/custom/path/config.json"
}
}
}
}
常见注意事项:
command使用RimSearcher.Server.exe的绝对路径。- 推荐始终配置
RIMSEARCHER_CONFIG指向明确路径,避免多环境切换时误读配置。 - 若不设置
RIMSEARCHER_CONFIG,才要求config.json与 exe 在同一目录。 - 修改客户端 MCP 配置后,重启客户端或重载 MCP 服务。
- 若客户端有工具白名单/权限开关,确保已允许
RimSearcher。
本地验证
手动验证时:
- 方式 A:设置环境变量
RIMSEARCHER_CONFIG指向目标config.json。 - 方式 B:不设置环境变量,把
config.json放到RimSearcher.Server.exe同目录。

然后运行 RimSearcher.Server.exe,若最后一条看到类似的JSON-RPC2.0日志即表示启动成功(不同版本可能看到的日志不同,但只要看到RimSearcher MCP server started都可视为成功启动):
- 首次构建:
Program: Cache unavailable, rebuilding index->Program: Index build completed ...->Program: Index cache saved - 缓存命中:
Program: Index loaded from cache - 服务就绪:
RimSearcher MCP server started

快速检查是否接入成功:
- 客户端工具列表中能看到
rimworld-searcher__locate、rimworld-searcher__inspect等 6 个工具。 - 执行一次
locate(例如def:Apparel_ShieldBelt)能返回结果。
6. 更新提示说明
- 更新检查为非阻塞后台任务,不影响核心检索服务。
- 仅在
CheckUpdates=true时启用。 - 若遇到 GitHub 匿名限流,更新检查会静默失败,不影响工具功能。
- 更新信息默认通过日志通道输出;若 MCP 客户端不展示日志,则可能看不到该提示。
- 更新检查缓存文件路径:
<exe目录>/.cache/.update-cache(与index文件夹同级)。
免责声明
- 本项目为第三方开源工具,与 Ludeon Studios 及 RimWorld 官方无隶属、赞助或背书关系。
- 本工具仅对用户本地提供的源码/XML进行索引与检索,不内置或分发任何游戏原始资源。
- 检索与分析结果仅供学习、调试与研究参考。
- 使用者应自行确保其数据来源、反编译行为与使用方式符合当地法律法规、RimWorld 相关协议及各 Mod 许可证要求。
- 因使用本工具造成的任何直接或间接损失,项目作者与贡献者不承担责任。
License
MIT
如果这个项目对你有帮助,欢迎点个 Star⭐。
