{"repo":"h7lu/RiMCP_hybrid","free":true,"listed":false,"github":"https://github.com/h7lu/RiMCP_hybrid","clone":"git clone https://github.com/h7lu/RiMCP_hybrid.git","description":"Rimworld Coding RAG MCP server","language":"C#","stars":42,"topics":["graph-algorithms","mcp","rag","rimworld-mod","csharp","mcp-server","python","ai","cli","mcp-client"],"license":"MIT","category":"mcp-servers","readme_excerpt":"RiMCP hybrid - 作者：五步蛇 English - 这个项目提供了一套面向 RimWorld 源代码与 XML 定义的检索与导航工具，核心目标是把词法检索、语义检索和图结构导航结合起来，构建一个能被 AI 助手调用的服务。项目既可以作为一个命令行工具使用，也可以以 MCP 服务器的形式被集成到像 Claude Desktop 或 VS Code Copilot 这样的助手中。当前源码包含索引构建、混合检索策略、跨层图关系以及完整源码定位与返回的功能实现。 思路介绍 - 项目主要分为三部分：索引构建管线，检索工具，mcp 服务器相关 索引构建管线 - 索引过程从原始数据开始，原始数据主要包括两类内容：一类是 C# 源代码文件，另一类是 XML 定义文件（Defs）。索引的目标不是把整个仓库原封不动地存入，而是把可检索、可理解的最小单元提取出来。这些单元既要保留足够的上下文以便阅读，也应足够小以便精确匹配和生成语义向量。因此第一步是扫描文件系统，逐文件读取（glob）并分类，记录文件路径、编码、时间戳等基础元数据作为索引项的输入标识。元素有类，函数，变量定义和 xmldef。 - 在读取文件后，需要把长文本切分成若干块。对 C# 代码，这通常按照语法符号来切分：分片基于类、方法、属性或注释块，同时记录每个片段在源文件中的起止偏移，以便后续精确回溯。对 XML Def，通常保留整个定义节点的字符串表示为一个块，因为 Def 本身语义相对独立且自包含。切分时会生成每个块的标题（例如符号名或 Def 名），摘要性片段（便于快速预览），以及用于检索的正文文本。切分策略会影响召回质量：块过大可能导致上下文腐化，块过小又可能丢失相关信息。 - 文本块生成后，索引流程并行地把每个块送入两个不同的存储层：用于传统词法检索的倒排索引（这里用 Lucene 实现）和用于语义检索的向量索引。写入倒排索引时，会把块的标题、类型（C# 或 XML）、路径、源偏移、标签等结构化字段一起存储，这些字段既支持过滤，也支持把结果定位回源文件。向量部分要求先把文本块转换成向量表示，这通常由外部的嵌入服务完成。项目对嵌入生成支持批量参数配置，以便在不同显存或 CPU 条件下调整批处理大小。生成向量后，这些向量会被写入向量索引，并与对应的块 ID 建立映射。由于 c#的 huggingface 支持就像吃狗屎，我专门起了一个 Python 服务器在后台 127.0.0.1:5000 进行嵌入服务，这样也能节省每次查询时冷启动的时间。说到向量运算，项目用上了 .NET 的 SIMD 加速特性，通过 System.Numerics.Tensors 库让向量点积运算跑得飞快，在现代 CPU 上能发挥硬件并行计算的全部潜力。 - 索引的另一个关键部分是图关系构建。静态分析器会在解析源码与 XML 时寻找有意义的引用关系，例如继承、方法调用、字段引用、XML 到 C# 的绑定（某个 Def 指定了使用某个组件或类）等。每发现一条关系，都会把它作为图的有向边写入图存储。图的节点和边属性存储在 tsv 中，而额外使用了两份（行和列）压缩稀疏矩阵表示来存储，这样可以在 O(1)时间写入，读取向下关系，读取向上关系。同时，由于使用二进制 bit 存储而不是完整的边信息文本，我把原先 b 树数据库的 6.2gb 大小压缩到了 400mb。这些边补充了文本相似度的不足，使得跨层查询（比如\"哪些 Def 使用了这个 C# 组件\"）可以高效地回答。 检索召回部分 - 检索召回一共有四个工具：粗搜 rou","default_branch":null,"files":null,"tree":[],"storefront":"/r/h7lu","claimed":false,"request_supported":{"post":"https://gitbuyer.com/r/h7lu/RiMCP_hybrid/request-supported","requests":0},"note":"indexed from public GitHub; nothing is for sale on this page. Clone it from GitHub. Paid listings live at /search."}