mcpField
F
Fossil Mcp

Fossil Mcp

本地服务
github.com/yfedoseev开发工具6929 周前更新

关于 Fossil Mcp

Fossil Mcp 是面向 AI 编码 Agent 工作流的静态分析工具,可通过命令行或 MCP 服务检查代码库。它构建调用图,并检测死代码、重复逻辑及 AI 编码留下的脚手架痕迹。

主要功能

  1. 01检测不可达代码和未使用导出
  2. 02识别精确、重命名及结构相似克隆
  3. 03查找 TODO、占位实现和临时文件
  4. 04构建调用图并追踪函数路径
  5. 05支持 16 种语言分析
  6. 06提供增量刷新和 CI 检查

适用场景

  1. 01清理 AI 重构后遗留的未使用函数
  2. 02定位跨文件的重复实现
  3. 03评估修改函数的影响范围
  4. 04在 CI 中按阈值检查代码质量

MCP 相关

作为 MCP 服务向 AI 编码工具提供扫描、死代码与克隆检测、脚手架识别,以及调用图检查和路径追踪等工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

暂未收录安装方式

我们还没有获取到这个服务的安装包或远程地址,请按项目 README 中的说明安装。

代码仓库

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Fossil MCP

氛围编程时代的代码质量工具包。

静态分析,发现氛围编程留下的混乱——死代码、重复逻辑、脚手架残留和孤立函数——覆盖 16 种语言。

fossil-mcp.com

CI Crates.io License: MIT OR Apache-2.0


问题

AI 辅助编码没问题——你审查代码,你理解架构,你保持掌控。氛围编程则不同。 你描述想要什么,AI 写出来,你不逐行阅读就发布。像 Claude Code、Cursor、GitHub Copilot 和 Windsurf 这样的工具让这种工作流快速且高效。但日复一日、周复一周,氛围编程的项目会累积一类传统 linter 无法捕捉的特定问题:

死代码迅速堆积。 当 AI 重构一个函数时,它会写新版本,但往往忘记删除旧版本。你不会注意到,因为你没有逐行阅读 diff。经过多次会话,未使用的函数、不可达的分支和孤立的工具函数不断堆积——代码库在增长,但没有任何东西被修剪。一项 METR 研究 发现,开发者在检查和调试 AI 输出上花费了大量时间。死代码让这件事变得指数级更难。

重复悄无声息地蔓延。 每个 AI 会话的上下文窗口都有限。它会生成一个别处已经存在的工具函数,或者在三个文件之外用略有不同的实现解决同一个问题。你要了一个功能,它能用,于是你继续前进。传统的重复检测专注于复制粘贴——氛围编程的重复是结构性的:相似的逻辑,不同的名字,分散在各个模块中。

// Phase 1、// TODO、// Step 2——到处都是。 AI Agent 分阶段工作。它们留下本应是临时的脚手架标记:// Phase 1: Setup、// TODO: implement error handling、用 pass 或 todo!() 占位的函数体,以及像 process_data_v2 这样的分阶段命名。在氛围编程中,没有人会回头清理这些。它们成了永久的固定装置。

存在没有任何东西调用的函数。 这是氛围编程的标志性特征。AI 写了一个辅助函数,使用了它,然后在之后的会话中重写调用方改用另一种方式——但辅助函数留下了。没有调用图,你和 AI 都无法分辨哪些函数实际上与代码库的其余部分相连。当前的 AI 编码工具通过文本搜索来导航代码,而不是通过理解函数之间如何相互调用。

临时文件在仓库中累积。 AI 会话会创建 temp_、backup_、old_、phase_1_ 文件和目录。在氛围编程中,你不会在每次会话后审计文件树。这些残留物会跨提交持续存在。

解决方案

Fossil MCP 是一个专为氛围编程项目打造的静态分析工具包。它能检测当 AI 编写大部分代码时累积的残留物——它既可作为面向开发者的 CLI 工具,也可作为 MCP 服务,为 AI Agent 提供代码图,而不仅仅是文本搜索。

  ███████╗ ██████╗ ███████╗███████╗██╗██╗           ()    ()
  ██╔════╝██╔═══██╗██╔════╝██╔════╝██║██║            \    /
  █████╗  ██║   ██║███████╗███████╗██║██║             |  |
  ██╔══╝  ██║   ██║╚════██║╚════██║██║██║             |  |
  ██║     ╚██████╔╝███████║███████║██║███████╗       /    \
  ╚═╝      ╚═════╝ ╚══════╝╚══════╝╚═╝╚══════╝      ()    ()
  Dig up dead code. Unearth clones. Expose scaffolding.
Fossil 能检测什么
分析它能发现什么Vibe coding 的问题
死代码不可达的函数、未使用的导出、孤立的方方法AI 重写了一个调用方,却忘了删除旧的辅助函数——没人注意到
代码克隆类型 1(完全相同)、类型 2(重命名)、类型 3(结构)重复每次 AI 会话都会重新发明代码库中其他地方已有的工具函数
脚手架Phase N / Step N 注释、TODO/FIXME 标记、占位函数体AI 分阶段工作,留下永远不被清理的临时标记
临时文件temp_*、backup_*、old_*、phase_* 文件和目录会话产物长期存在,因为没人审计文件树
代码图追踪任意两个函数之间的路径、爆炸半径分析、调用图遍历AI 工具靠文本搜索导航——Fossil 给它们一张图,用来追踪函数如何连接,以及修改某个函数会破坏什么
Fossil 有何不同
  • 专为 vibe coding 打造。 不是通用 linter——专门针对 AI 编写大部分代码、人类审查较少时积累的混乱。
  • 用图,而不是 grep。 AI 编码工具通过搜索文本导航代码。Fossil 构建调用图,让 Agent 追踪函数如何连接,在重构前发现爆炸半径,发现死胡同——无需阅读每个文件。
  • MCP 原生。 作为 MCP 服务运行,因此 AI Agent 可以在开发过程中自检其输出。
  • 节省 token,节省金钱。 Agent 不必反复扫描文件来发现问题,Fossil 一次就能识别死代码、克隆和脚手架——减少大模型推理轮次,降低成本。
  • 用 Rust 构建。 单一二进制文件,无运行时依赖。几秒钟扫描数千个文件。设计上内存安全。
  • 跨文件分析。 解析导入、barrel 重导出和类层次结构,跨模块边界发现死代码。
  • 框架感知。 自动检测 React、Next.js、Django、Spring、Axum 等——不会将生命周期方法误报为死代码。
  • 零配置。 开箱即用。配置文件可选。
  • 16 种语言。 一个工具应对多语言代码库。

安装

快速安装(推荐)

macOS / Linux:

curl -fsSL fossil-mcp.com/install.sh | sh

Windows (PowerShell):

irm fossil-mcp.com/install.ps1 | iex

自动检测你的操作系统和架构,下载最新二进制文件,并将其添加到 PATH。

手动下载

从 GitHub Releases 下载适合你平台的最新二进制文件:

# macOS (Apple Silicon)
curl -L https://github.com/yfedoseev/fossil-mcp/releases/latest/download/fossil-mcp-macos-aarch64.tar.gz | tar xz
mv fossil-mcp /usr/local/bin/

# macOS (Intel)
curl -L https://github.com/yfedoseev/fossil-mcp/releases/latest/download/fossil-mcp-macos-x86_64.tar.gz | tar xz
mv fossil-mcp /usr/local/bin/

# Linux (x86_64)
curl -L https://github.com/yfedoseev/fossil-mcp/releases/latest/download/fossil-mcp-linux-x86_64-musl.tar.gz | tar xz
mv fossil-mcp ~/.local/bin/
平台架构压缩包
Linuxx86_64(推荐)fossil-mcp-linux-x86_64-musl
Linuxx86_64 (glibc)fossil-mcp-linux-x86_64
LinuxARM64fossil-mcp-linux-aarch64
macOSIntelfossil-mcp-macos-x86_64
macOSApple Siliconfossil-mcp-macos-aarch64
Windowsx86_64fossil-mcp-windows-x86_64
cargo-binstall

如果你有 cargo-binstall,它会下载预构建的二进制文件,而不是从源码编译:

cargo binstall fossil-mcp
来自 crates.io
cargo install fossil-mcp

这会从 crates.io 下载源码并在本地编译。需要 Rust 工具链。

来自源码
git clone https://github.com/yfedoseev/fossil-mcp.git
cd fossil-mcp
cargo build --release

二进制文件位于 ./target/release/fossil-mcp。

更新
fossil-mcp update

MCP 服务设置

在 VS Code 中安装 在 VS Code Insiders 中安装 在 Cursor 中安装

Fossil 默认作为 MCP 服务运行 —— 只需不带参数运行 fossil-mcp。将它连接到你的 AI 编码工具:

Claude Code
claude mcp add fossil fossil-mcp
OpenAI Codex

添加到你的 Codex MCP 配置:

{
  "mcpServers": {
    "fossil": {
      "command": "fossil-mcp"
    }
  }
}
Cursor

添加到 ~/.cursor/mcp.json:

{
  "mcpServers": {
    "fossil": {
      "command": "fossil-mcp"
    }
  }
}

或点击上方的 Cursor 安装按钮。

VS Code / VS Code Insiders

添加到工作区中的 .vscode/mcp.json:

{
  "mcp": {
    "servers": {
      "fossil": {
        "command": "fossil-mcp"
      }
    }
  }
}

或点击上方的 VS Code 安装按钮。

Windsurf

添加到 ~/.codeium/windsurf/mcp_config.json:

{
  "mcpServers": {
    "fossil": {
      "command": "fossil-mcp"
    }
  }
}
Claude Desktop

添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "fossil": {
      "command": "fossil-mcp"
    }
  }
}
MCP 工具

连接后,你的 AI Agent 即可使用以下工具:

工具描述
scan_all对项目运行所有分析(死代码 + 克隆 + 脚手架)
analyze_dead_code以可配置的置信度检测不可达代码
detect_clones查找重复代码(Type 1/2/3 克隆)
fossil_refresh文件变更后进行增量重新分析(快速)
fossil_inspect检查任意函数的调用图、数据流、控制流或爆炸半径
fossil_trace查找两个函数之间的调用路径 —— 理解代码如何连接
fossil_explain_finding获取关于某个具体发现的丰富上下文
fossil_detect_scaffolding查找 AI 脚手架:分阶段注释、TODO、占位符和临时文件

命令行用法

模式

Fossil 有四种运行模式:

模式调用方式功能
交互式fossil-mcp(无参数)运行完整扫描 + 打开交互式 REPL 以探索发现
命令行fossil-mcp <command>运行特定的分析命令
MCP 服务fossil-mcp mcp 或管道输入 stdin面向 AI 编码工具的 JSON-RPC 服务
CI/CDfossil-mcp check当超出阈值时使构建失败
交互式模式

不带参数运行 fossil-mcp(或 fossil-mcp scan .)会扫描当前目录中的死代码、克隆和脚手架,显示仪表板,然后进入交互式 REPL:

  FOSSIL Scanning .
  ────────────────────────────────────────────────
   ✓  1200 nodes analyzed, 42 unreachable
   ✓  380 files analyzed, 8 clone groups
   ✓  3 scaffolding artifacts

  ══════════════════════════════════════════════════
  RESULTS  53  findings across 28 files
  ══════════════════════════════════════════════════

  ▐ Dead Code     42   ██████████████░░
  ▐ Clones         8   ██░░░░░░░░░░░░░░    120 duplicated lines
  ▐ Scaffolding    3   █░░░░░░░░░░░░░░░

  fossil>
REPL 命令

所有探索命令都支持可选的计数和语言过滤器:command [N] [lang]

fossil> dead 10                  # Top 10 dead code findings
fossil> dead 20 typescript       # Top 20 dead code in TypeScript
fossil> clones 5 rust            # Top 5 clone groups in Rust
fossil> scaffolding              # All scaffolding findings
fossil> scaffolding 10 python    # Top 10 scaffolding in Python
fossil> hotspots                 # Files with most findings
fossil> hotspots 10 go           # Top 10 hotspot files in Go
fossil> file auth.ts             # All findings in a specific file
fossil> langs                    # Language breakdown
fossil> export sarif             # Export full SARIF report
fossil> summary                  # Re-show dashboard
fossil> q                        # Quit
命令
fossil-mcp scan [path]

运行所有分析(死代码 + 克隆 + 脚手架)并显示交互式仪表板。

fossil-mcp scan .
fossil-mcp scan /path/to/project --format sarif -o results.sarif
fossil-mcp scan /path/to/project --format json
fossil-mcp dead-code [path]

仅进行死代码检测。

fossil-mcp dead-code .
fossil-mcp dead-code . --min-confidence high
fossil-mcp dead-code . --min-lines 10
fossil-mcp dead-code . --language rust,python
fossil-mcp dead-code . --diff main                  # Only changed files
fossil-mcp dead-code . --stats                      # Show graph statistics
fossil-mcp dead-code . --cache-dir .fossil-cache     # Persistent cache
fossil-mcp dead-code . --cache-stats                 # Cache hit rate
标志描述
--min-confidence <LEVEL>按置信度过滤:low、medium、high、certain
--min-lines <N>某个发现所需的最小代码行数
--language <LANGS>按语言过滤(逗号分隔):rust,python,go
--include-tests在结果中包含仅用于测试的代码
--diff <BRANCH>仅分析相对于基础分支发生变更的文件
--stats打印图基数估计值(HyperLogLog)
--cache-dir <PATH>用于增量分析的持久缓存目录
--cache-stats打印缓存命中率和内存使用情况
fossil-mcp clones [path]

仅检测克隆(重复代码)。

fossil-mcp clones .
fossil-mcp clones . --min-lines 10
fossil-mcp clones . --similarity 0.9
fossil-mcp clones . --language typescript
fossil-mcp clones . --types type1,type2
标志描述
--min-lines <N>克隆所需的最小行数(默认:6)
--similarity <F>Type 3 克隆的相似度阈值 0.0–1.0(默认:0.8)
--types <TYPES>要检测的克隆类型:type1,type2,type3(默认:全部)
--language <LANGS>按语言过滤(逗号分隔)
fossil-mcp scaffolding [path]

检测 AI 生成的脚手架痕迹。

fossil-mcp scaffolding .
fossil-mcp scaffolding . --language rust
fossil-mcp scaffolding . --include-todos
fossil-mcp scaffolding . --format json
标志描述
--language <LANGS>按语言过滤(逗号分隔)
--include-todos包含 TODO/FIXME/HACK 标记(默认排除)

检测:占位符主体(pass、todo!()、unimplemented!())、分阶段注释(Phase 1、Step 2)、脚手架标识符(scaffold_*、boilerplate_*)、调试打印,以及临时文件(temp_*、backup_*、old_*)。

fossil-mcp check [path]

CI/CD 模式 — 当超过阈值时使构建失败。完整详情见 CI/CD 集成。

fossil-mcp check
fossil-mcp check --max-dead-code 10 --max-clones 5
fossil-mcp check --diff origin/main
fossil-mcp check --diff origin/main --format sarif
fossil-mcp check --fail-on-scaffolding
标志描述
--max-dead-code <N>允许的最大死代码发现数
--max-clones <N>允许的最大克隆发现数
--max-scaffolding <N>允许的最大脚手架发现数
--min-confidence <LEVEL>计入发现所需的最低置信度
--diff <BRANCH>仅检查相对于基础分支变更的文件
--fail-on-scaffolding若发现任何脚手架痕迹则失败
fossil-mcp weekly

显示开源项目中每周的 AI 垃圾内容排名。

fossil-mcp weekly
fossil-mcp weekly --detailed
fossil-mcp update

将 fossil-mcp 更新到最新版本。

fossil-mcp update
fossil-mcp update --check    # Check without installing
fossil-mcp mcp

显式启动 MCP 服务(通常通过管道 stdin 自动检测)。

全局标志

这些标志适用于所有命令:

标志描述
--format <FMT>输出格式:text、json、sarif(默认:text)
-o, --output <FILE>将输出写入文件而非 stdout
-q, --quiet抑制所有非错误输出
-v, --verbose启用调试日志
-c, --config <FILE>配置文件路径

支持的语言

语言扩展名
Python.py
JavaScript.js、.jsx、.mjs
TypeScript.ts、.tsx
Rust.rs
Go.go
Java.java
C#.cs
C/C++.c、.h、.cpp、.cc、.cxx、.hpp
Ruby.rb
PHP.php
Swift.swift
Kotlin.kt
Scala.scala
Bash.sh、.bash
R.r、.R

配置(可选)

Fossil 可零配置工作。所有设置都有合理的默认值。如果需要自定义行为,请在项目根目录创建 fossil.toml:

[dead_code]
min_confidence = "high"       # low, medium, high, certain
include_tests = false
exclude_patterns = ["generated/**", "vendor/**"]

[clones]
min_lines = 6
similarity_threshold = 0.8

[entry_points]
# Mark additional functions as entry points (won't be flagged as dead)
functions = ["custom_handler", "my_entry"]
# Additional entry point attributes/decorators
attributes = ["MyFramework::route"]
# Framework presets (auto-detected by default)
presets = ["axum", "react"]
auto_detect_presets = true

配置会从以下文件名自动发现:fossil.toml、.fossil.toml、fossil.yml、fossil.yaml、fossil.json。

环境变量会覆盖配置文件中的值:

变量作用
FOSSIL_MIN_CONFIDENCE死代码发现的最低置信度
FOSSIL_MIN_LINES克隆检测的最小行数
FOSSIL_SIMILARITYType 3 克隆的相似度阈值
FOSSIL_OUTPUT_FORMAT输出格式(text、json、sarif)
框架预设

预设会从项目依赖中自动检测。它们会告诉 Fossil 哪些函数是框架入口点(生命周期钩子、路由处理器等),从而不会被标记为死代码:

预设检测依据识别出的入口点
react依赖中包含 reactcomponentDidMount、render、useEffect、...
nextjs依赖中包含 nextgetServerSideProps、getStaticProps、...
express依赖中包含 expressrouter.* 模式
django依赖中包含 djangoget、post、URL 模式处理器
flask依赖中包含 flaskapp.route 模式
spring依赖中包含 spring-boot@Bean、@Controller、@Service、...
axum依赖中包含 axum#[tokio::main]、#[debug_handler]
actix依赖中包含 actix-web#[actix_web::main]、#[get]、#[post]、...
angular依赖中包含 @angular/corengOnInit、ngOnDestroy、...

CI/CD 集成

Fossil 包含一个用于 CI/CD 流水线的 check 命令。当代码质量阈值被超出时,它会使构建失败,帮助团队强制执行代码标准并防止技术债务累积。

基本用法
# Check against configured thresholds
fossil-mcp check

# Override thresholds via CLI
fossil-mcp check --max-dead-code 10 --max-clones 5

# Diff-aware mode (only analyze changed files in PR)
fossil-mcp check --diff origin/main

# Generate SARIF for GitHub code scanning
fossil-mcp check --diff origin/main --format sarif

# Quiet mode (no diagnostic output)
fossil-mcp check --quiet
配置

在 fossil.toml 中添加 [ci] 配置段:

[ci]
max_dead_code = 10           # Maximum dead code findings (0 = fail on any)
max_clones = 5               # Maximum clone findings
max_scaffolding = 3          # Maximum scaffolding findings
min_confidence = "medium"    # Minimum confidence (low|medium|high|certain)
fail_on_scaffolding = false  # Fail if any scaffolding found
GitHub Actions 集成

创建 .github/workflows/fossil-check.yml:

name: Fossil CI Check

on:
  pull_request:
  push:
    branches: [main]

jobs:
  fossil:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0

      - name: Install Fossil
        run: curl -fsSL fossil-mcp.com/install.sh | sh

      - name: Run Fossil check
        run: |
          fossil-mcp check \
            --diff origin/${{ github.base_ref || 'main' }} \
            --format sarif \
            > fossil-results.sarif

      - name: Upload to GitHub Security
        if: always()
        uses: github/codeql-action/upload-sarif@v3
        with:
          sarif_file: fossil-results.sarif
工作原理
  1. 使用与 scan 相同的分析引擎 扫描 项目
  2. 可选地筛选 仅变更文件(通过 --diff branch)
  3. 根据配置的阈值进行 评估
  4. 将结果 报告 为文本、JSON 或 SARIF
  5. 如果超出阈值则 退出 并返回代码 1(使 CI 构建失败)
退出代码
代码含义
0所有阈值均通过 ✓
1超出阈值(构建失败)
2错误(缺少 git、无效配置等)

完整示例请参见 examples/fossil.toml 和 examples/fossil-check.yml。


工作原理

  1. 扫描 — 遍历项目文件,遵循 .gitignore,跳过供应商/生成的代码
  2. 解析 — 为每个源文件构建 tree-sitter AST(16 种语言)
  3. 提取 — 从 AST 中提取函数、调用、导入、属性和类层次结构
  4. 构建图 — 构建带有导入解析和 barrel 重导出支持的跨文件 CodeGraph
  5. 分析 — 检测入口点(通过启发式 + 框架预设),运行可达性分析,识别死代码和克隆
  6. 报告 — 将结果输出为文本仪表盘、JSON 或 SARIF

贡献

我们欢迎贡献!请参阅 CONTRIBUTING.md 了解指南。

许可

根据您的选择,在 Apache License, Version 2.0 或 MIT License 下授权。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。