项目简介 Lancer MCP 是一个基于 Model Context Protocol (MCP) 构建的自托管服务器,旨在为大型语言模型 (LLM) 客户端提供高质量、私密的软件代码上下文服务。它通过深度索引您的本地 Git 仓库,包括代码解析、符号提取、代码块生成和向量嵌入,为 AI 代理提供强大的代码搜索、导航和关系查询能力。无需依赖云服务,所有数据都可以在本地安全管理。

主要功能点

  • Git 仓库索引: 自动克隆和跟踪配置的 Git 仓库,支持增量索引和持久化分支状态。
  • 多语言代码解析: 使用 Roslyn 对 C# 代码进行完整语义分析,并对 Python, JavaScript/TypeScript, Java, Go, Rust 等语言进行基于正则表达式的解析,提取类、函数、方法、属性等符号及其关系。
  • 智能代码块生成: 以函数/类粒度分割代码,并添加上下文重叠,确保代码块包含足够的语义信息。
  • 代码向量嵌入: 使用 'jina-embeddings-v2-base-code' 模型生成代码块的向量嵌入,支持 CPU 和 GPU 模式。
  • PostgreSQL 数据存储: 将所有索引数据(符号、关系、代码块、嵌入)存储在 PostgreSQL 数据库中,利用 'pgvector' 实现向量相似度搜索,同时支持 BM25 全文搜索和图遍历。
  • 混合搜索与重排序: 结合 BM25 全文搜索和向量语义搜索,并根据代码符号关系进行图重排序,提供高度相关的搜索结果。
  • 统一查询工具: 提供一个单一的 'Query' MCP 工具,智能识别查询意图(如代码搜索、导航、关系查找、文档获取),并返回结构化的结果。

安装步骤

  1. 克隆仓库:
    git clone https://github.com/ItBurnsWhenICommit/lancer-mcp.git
    cd lancer-mcp
  2. 构建项目:
    dotnet build LancerMcp/LancerMcp.csproj
  3. 启动数据库 (PostgreSQL + pgvector): 进入 'database' 目录,使用 Docker Compose 启动数据库。
    cd database
    docker compose up -d
    ./test_setup.sh # 可选:验证数据库是否就绪
    cd ..
  4. 启动嵌入服务 (Text Embeddings Inference): 启动一个 Docker 容器来运行 Jina AI 的代码嵌入模型。
    # CPU 模式 (无需 GPU)
    model=jinaai/jina-embeddings-v2-base-code
    volume=$PWD/embedding-data
    
    docker run -d --name text-embeddings -p 8080:80 \
      -v $volume:/data \
      ghcr.io/huggingface/text-embeddings-inference:cpu-1.8 \
      --model-id $model
    如果需要 GPU 模式,请参考仓库中的 'docs/EMBEDDING_SETUP.md' 文件。
  5. 配置仓库: 编辑 'LancerMcp/appsettings.json' 文件,添加您希望索引的 Git 仓库信息。
    {
      "Repositories": [
        {
          "Name": "您的项目名称",
          "RemoteUrl": "[email protected]:您的用户/您的仓库.git",
          "DefaultBranch": "main"
        }
      ]
    }
  6. 运行 MCP 服务器:
    dotnet run --project LancerMcp/LancerMcp.csproj
    服务器启动后,将自动克隆配置的仓库、解析代码、生成嵌入并存储数据,然后在 'http://localhost:5171' 启动 MCP 服务器。

服务器配置 (MCP客户端使用) MCP 客户端需要配置 Lancer MCP 服务器的连接信息。以下是一个 JSON 格式的配置示例,您需要根据实际部署情况填写。

{
  "serverName": "Lancer MCP Server",
  "command": "dotnet",
  "args": [
    "run",
    "--project",
    "path/to/LancerMcp.csproj",
    "--urls",
    "http://localhost:5171"
  ],
  "env": {
    "ASPNETCORE_URLS": "http://localhost:5171",
    "LANCER_MCP_WorkingDirectory": "path/to/your/repositories",
    "LANCER_MCP_DatabaseHost": "localhost",
    "LANCER_MCP_DatabasePort": "5432",
    "LANCER_MCP_DatabaseName": "lancer",
    "LANCER_MCP_DatabaseUser": "postgres",
    "LANCER_MCP_DatabasePassword": "postgres",
    "LANCER_MCP_EmbeddingServiceUrl": "http://localhost:8080",
    "LANCER_MCP_ApiKey": "YOUR_OPTIONAL_API_KEY"
  },
  "tools": [
    {
      "name": "Query",
      "description": "查询代码索引。支持自然语言查询代码搜索、符号查找、引用查找、调用图和代码导航。服务器会解释您的意图并返回相关结果。",
      "parameters": {
        "query": {
          "type": "string",
          "description": "描述您要查找内容的自然语言查询。例如:'查找所有实现IRepository的类','显示UserService的定义','哪些地方调用了Login方法?','查找认证代码中的最新更改'"
        },
        "repository": {
          "type": "string",
          "description": "可选:指定要搜索的仓库名称。如果未提供,则搜索所有已配置的仓库。必须与配置的仓库名称之一匹配。"
        },
        "branch": {
          "type": "string",
          "description": "可选:指定要搜索的分支。如果未提供,则使用默认分支。"
        },
        "maxResults": {
          "type": "integer",
          "description": "可选:要返回的最大结果数量(默认值:50)"
        }
      }
    }
  ]
}

参数注释:

  • 'serverName': 服务器的显示名称。
  • 'command': 启动 MCP 服务器进程的命令。对于 .NET 项目,通常是 'dotnet'。
  • 'args': 传递给 'command' 的参数列表。
    • '--project path/to/LancerMcp.csproj': 指定要运行的项目文件路径。请替换为 LancerMcp.csproj 的实际路径。
    • '--urls http://localhost:5171': 指定服务器监听的 URL。请根据实际情况调整端口。
  • 'env': 环境变量,用于配置 Lancer MCP 服务器。
    • 'ASPNETCORE_URLS': ASP.NET Core 应用监听的 URL。
    • 'LANCER_MCP_WorkingDirectory': Lancer MCP 存储 Git 仓库克隆的本地目录。
    • 'LANCER_MCP_DatabaseHost', 'LANCER_MCP_DatabasePort', 'LANCER_MCP_DatabaseName', 'LANCER_MCP_DatabaseUser', 'LANCER_MCP_DatabasePassword': PostgreSQL 数据库的连接信息。
    • 'LANCER_MCP_EmbeddingServiceUrl': 文本嵌入推理服务的 URL。
    • 'LANCER_MCP_ApiKey': 如果您在 'appsettings.json' 中配置了 API 密钥,客户端在发送请求时需要在 'Authorization' 头中包含此密钥。
  • 'tools': Lancer MCP 服务器提供的工具列表。
    • 'name': 工具名称,这里是 'Query'。
    • 'description': 工具的详细说明,告诉 LLM 它的用途。
    • 'parameters': 工具接受的参数及其类型和描述。
      • 'query': 核心查询字符串,自然语言描述。
      • 'repository': 可选的仓库名称过滤器。
      • 'branch': 可选的分支名称过滤器。
      • 'maxResults': 可选的最大结果数量。

基本使用方法

  1. 启动服务器: 按照“运行 MCP 服务器”步骤启动 Lancer MCP。
  2. 通过 MCP 客户端交互: 使用您选择的 MCP 客户端(如兼容 MCP 的 LLM 插件或框架)连接到 Lancer MCP 服务器的 'http://localhost:5171' 端点。
  3. 调用 'Query' 工具: 您的 LLM 客户端可以通过 MCP 协议调用 'Query' 工具,并传入自然语言查询。
    • 示例 (概念性调用,实际由MCP客户端处理JSON-RPC):
      {
        "jsonrpc": "2.0",
        "method": "Query",
        "params": {
          "query": "查找UserService类在哪里定义了Login方法",
          "repository": "您的项目名称",
          "branch": "main"
        },
        "id": 1
      }
    服务器将返回包含匹配代码片段、符号信息、相关性分数等内容的 JSON-RPC 响应。

信息

分类

开发者工具