peopleworks/codeboarding-mcp

GitHub: peopleworks/codeboarding-mcp

一个 MCP 服务器,为代码库提供无需 LLM 的低成本架构偏移检测,仅在发生结构性变更时按需重新生成架构映射图。

Stars: 1 | Forks: 0

# 🗺️ codeboarding-mcp ### 为你的代码库提供活态架构文档 —— 作为一个 MCP 服务器。 *低成本检测架构何时**真正**发生了变化 —— 无需 LLM 调用 —— 并仅在变化时重新生成映射。* [![.NET 9](https://img.shields.io/badge/.NET-9.0-512BD4?logo=dotnet&logoColor=white)](https://dotnet.microsoft.com/) [![MCP](https://img.shields.io/badge/Model_Context_Protocol-stdio-000000)](https://modelcontextprotocol.io) [![Built on CodeBoarding](https://img.shields.io/badge/built_on-CodeBoarding-6E56CF)](https://github.com/CodeBoarding/CodeBoarding) [![License: MIT](https://img.shields.io/github/license/peopleworks/codeboarding-mcp?color=green)](LICENSE) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](#-contributing) [![Stars](https://img.shields.io/github/stars/peopleworks/codeboarding-mcp?style=social)](https://github.com/peopleworks/codeboarding-mcp)
## 存在的问题 代码编写代理或 RAG 的效果取决于它对你代码库的心智模型。**架构文档写完的那一刻就过时了。** 有两种糟糕的选择: - 🔥 **每次提交都重新生成映射** → 你得为成千上万次 LLM 运行买单,而绝大多数时候只是为了重新发现*什么结构性变化都没发生*。 - 🧊 **从不重新生成** → 代理只能基于一个已经不存在的代码库进行推理。 [CodeBoarding](https://github.com/CodeBoarding/CodeBoarding) 能够生成精美的架构图(markdown + mermaid),并提供了 CLI、GitHub Action 和 VS Code 插件 —— **但没有 MCP 服务器**,也**无法判断何时值得重新生成映射。** ## 解决方案 `codeboarding-mcp` 将 CodeBoarding CLI 封在一个 [Model Context Protocol](https://modelcontextprotocol.io)(模型上下文协议)服务器中,并补齐了缺失的一环:一个**低成本、无需 LLM 的偏移检测器**。它会为每个仓库的*架构表面*保留一个微小的指纹,只有当该表面的偏移度超过你设定的阈值时,才会触发昂贵的重新映射。 ``` ┌─────────────┐ cheap, no LLM ┌──────────────┐ expensive, only if stale ┌───────────┐ │ status │ ─────────────────▶ │ map │ ───────────────────────────▶ │ get │ │ drift score │ "is it stale?" │ regenerate │ runs CodeBoarding + LLM │ read map │ └─────────────┘ └──────────────┘ └───────────┘ ``` 这样做的好处是:**架构文档能够自动保持最新**,在没有任何重要变更时几乎零成本,而一旦发生变更则恰好触发完整的重新映射。将任何 MCP 宿主(Claude Code、Codex 等)指向它,分析就会在**本地**运行 —— 搭配 Ollama,你的代码永远不会离开本机。 ## ✨ 核心亮点 - 🧠 **无 LLM 偏移检测** —— 基于 Roslyn 的公共 API 表面指纹。注释和方法体编辑不会影响它,但签名修改会。 - 💸 **仅在关键时付费** —— 当偏移度超过*你的*设定阈值时才重新映射,而不是每次提交都执行。 - 🔌 **提供商无关** —— 本地 **Ollama**(用于私有代码)、**Anthropic**(追求极致质量),或者是**任何兼容 OpenAI** 的端点(DeepSeek、OpenRouter、LiteLLM)。支持按仓库独立配置,配置会被持久化,且绝不存储密钥。 - 🔒 **单提供商隔离** —— 从子进程中清除所有提供商环境变量,然后只精确设置其中一个,确保 CodeBoarding 绝不会因为环境不明确而报错。 - 🧩 **可组合** —— 4 个小工具,代理可在对话过程中随时调用。标准输出极其重要(MCP 协议);所有日志均输出到 stderr。 ## 🛠️ 四大工具 | 工具 | 成本 | 功能描述 | | --- | --- | --- | | **`codeboarding_status`** | 🟢 低成本(无 LLM) | 偏移分数 + `stale`(过期)标志 + 建议。请在执行映射*之前*调用它。 | | **`codeboarding_map`** | 🔴 高成本(使用 LLM) | 运行 CodeBoarding → 将 `analysis.json` 写入 `/.codeboarding/`;成功后会更新偏移基准。 | | **`codeboarding_get`** | 🟢 低成本 | 读回映射 —— 将 `analysis.json` 解析为 markdown 概览和重建的 **mermaid** 图表,或深入查看单个组件。 | | **`codeboarding_configure`** | 🟢 低成本 | 设置仓库的 LLM 提供商、模型和偏移阈值(持久化在清单文件中)。 |
示例:对从未映射过的仓库执行 codeboarding_status(瞬间完成,零 LLM 成本) ``` { "repoPath": "/path/to/repo", "stale": true, "neverMapped": true, "driftScore": 1, "threshold": 0.15, "reason": "No prior map — a full analysis is needed.", "recommendation": "Run codeboarding_map with mode=\"full\".", "provider": "Ollama · qwen2.5-coder:7b", "totalComponents": 13, "added": ["src/.../Fingerprint.cs", "src/.../CodeboardingTools.cs", "..."], "removed": [], "changed": [] } ```
示例:codeboarding_get 输出(markdown + 从 analysis.json 重建的 mermaid 图表) ``` # CodeBoarding 架构图 A sample service that ingests records, validates them, and persists results. ## Components (3) ### Ingestor Reads incoming records from the source and hands them to the Validator. ### Validator Checks record shape and business rules; rejects bad input. ### Record Store Persists validated records and exposes them for query. ## Relations ```mermaid graph LR C0["Ingestor"] C1["Validator"] C2["Record Store"] C0 -->|"sends records to"| C1 C1 -->|"writes to"| C2 ``` ```
## 🧬 偏移检测原理 `codeboarding-mcp` 会为每个文件构建一个*架构表面*哈希 —— 成本极低且**无需 LLM** —— 并将其与上一次映射的基准进行比较。偏移分数计算方式很简单:`变更组件数 / 并集总数`,一旦该分数达到你设定的阈值(默认为 **0.15**),该仓库就会标记为 `stale`。 | 文件类型 | 何种变动会被计算在内 | | --- | --- | | **C# (`.cs`)** | public / protected / internal 的**类型和成员签名**(通过 Roslyn 解析)。注释和方法体会被忽略 —— 只有 API 表面的变动才会改变哈希。 | | **依赖清单** (`*.csproj`, `package.json`, `requirements.txt`, `go.mod`, `Cargo.toml`, `pom.xml`, …) | 全量内容哈希 —— 依赖项的变更*属于*架构层面的变动。 | | **其他源代码文件** | 仅路径哈希 —— 新增 / 删除 / 重命名会被计入;(目前)不包含内容编辑。 | ## 🏗️ 架构 这是 CodeBoarding 映射结果的一个自指样例 —— 以下是 `codeboarding-mcp` 自身的架构: ``` graph TD Host["MCP Host
(Claude Code / Codex)"] -->|stdio JSON-RPC| Program["Program.cs
MCP stdio host"] Program --> Tools["CodeboardingTools
status · map · get · configure"] Tools -->|cheap, no LLM| Drift["Fingerprint + DriftCalculator
Roslyn surface hash"] Tools -->|read map| Reader["AnalysisReader
analysis.json → md + mermaid"] Tools -->|persist config / baseline| Manifest["RepoManifest
.codeboarding/.manifest.json"] Tools -->|expensive, LLM| Runner["CodeboardingRunner
shells out to the CLI"] Runner --> Env["ProviderEnvironment
scrub-all → set one provider"] Runner -->|child process| CLI["codeboarding CLI
(Python)"] CLI -->|writes| Analysis["analysis.json"] Reader -->|reads| Analysis Env -.-> Ollama["Ollama (local)"] Env -.-> Anthropic["Anthropic"] Env -.-> OpenAI["OpenAI-compatible
DeepSeek · OpenRouter · LiteLLM"] ``` ## 🚀 快速开始 ### 1. 前置条件 - **.NET 9 SDK**(或更高版本)。 - **Python 3.12 或 3.13** + **CodeBoarding CLI**: pipx install codeboarding --python python3.13 codeboarding-setup # 一次性操作:下载语言服务器 - 一个 **LLM 后端** —— 可以是本地 Ollama: ollama pull qwen2.5-coder:7b ……或者是云提供商的 API 密钥(Anthropic / DeepSeek 等)。 ### 2. 构建 ``` dotnet build src/CodeboardingMcp/CodeboardingMcp.csproj -c Release ``` ### 3. 在你的 MCP 宿主中注册 ``` claude mcp add codeboarding -- \ dotnet /path/to/codeboarding-mcp/src/CodeboardingMcp/bin/Release/net9.0/codeboarding-mcp.dll ``` ### 4. 开始使用 只需询问你的代理 —— 例如: ……或者直接调用工具: ``` configure → status → (if stale) map → get set cheap expensive read map provider check regen only for RAG / per repo when it matters agent ``` ## 🔌 选择提供商 每个仓库都可以选择自己的后端,存储在 `/.codeboarding/.manifest.json` 中。**API 密钥从指定的环境变量中读取,绝不写入清单文件。** | 类型 | 选择项 | 最适合 | | --- | --- | --- | | `ollama` | 本地 Ollama (`OLLAMA_BASE_URL`) | 🔒 私有 / 客户端代码 —— 数据绝不离开本机 | | `anthropic` | `ANTHROPIC_API_KEY` | 🏆 公开仓库,生成最高质量的映射图 | | `openai-compatible` | `OPENAI_BASE_URL` + 密钥环境变量 | 🧩 DeepSeek、OpenRouter、LiteLLM 及任何代理 | ``` // codeboarding_configure arguments { "repoPath": "/path/to/repo", "kind": "anthropic", // or "ollama" / "openai-compatible" "model": "claude-sonnet-4-6", "apiKeyEnv": "ANTHROPIC_API_KEY", "driftThreshold": 0.15 } ``` 添加一个兼容 OpenAI 的新提供商(如 DeepSeek)**仅需修改配置 —— 无需改动代码。** ## 📂 生成文件说明 所有内容都存放在 `/.codeboarding/` 目录下: | 路径 | 写入方 | 用途 | | --- | --- | --- | | `analysis.json` | CodeBoarding CLI | 架构映射图(包含 `description`、`components`、`components_relations`) | | `.manifest.json` | 本服务器 | 仓库级提供商、阈值及偏移基准 | | `cache/`, `logs/`, `health/`, `static_analysis.pkl` | CodeBoarding CLI | 运行时产生的构件 | 建议将 `.codeboarding/` 添加到你的 `.gitignore` 中(如果你希望将映射图纳入版本控制,也可以仅提交 `analysis.json`)。 ## 🗺️ 路线图 - [x] 4 个 MCP 工具、基于 Roslyn 的偏移检测、通用提供商、单提供商环境变量隔离 - [x] 解析 `analysis.json` → 在 `codeboarding_get` 中生成 markdown + 重建 mermaid 图表 - [ ] 更强大的非 C# 偏移检测(支持超越仅路径哈希的导出符号提取) - [ ] 自动触发机制(git hook / 定时扫描)—— v1 版本仅支持会话内 / 代理驱动 - [ ] CI 流水线 + 发布编译好的二进制文件 ## 🤝 贡献 非常欢迎提交 Issue 和 PR —— 特别期待新的语言指纹识别器、提供商预设和质量反馈。请保持 stdout 纯净(用于 MCP 协议),并将所有日志路由到 **stderr**。 ## 📄 许可证 [MIT](LICENSE)。基于 [CodeBoarding](https://github.com/CodeBoarding/CodeBoarding) (MIT) 构建 —— 请同样为他们点个 ⭐。
专为那些渴望了解你代码库真实面貌的代理而打造。
标签:AI风险缓解, LLM辅助开发, MCP服务器, SOC Prime, 代码可视化, 开发工具, 架构文档, 逆向工具