Token导航 LogoToken导航TokenDH.com
astrograph (Thaylo) logo
开发工具stdio官方级别未说明来源级核验

astrograph (Thaylo)

MCP Server

ASTrograph是一个基于抽象语法树(AST)的代码重复检测工具,通过算法比对代码结构来识别重复代码,帮助开发者和AI代理避免重复编写功能相同的代码。

工具数

0

提示词数

0

GitHub Stars

8

资源数

0
PythonClaude开发工具Claude DesktopClaude

安装说明

本站只整理中文说明和来源信息,不托管安装包,也不代用户安装。

作者 / 组织

Thaylo

提供方

Thaylo

最后核验

2026/5/17 20:22

快速接入

先看主来源和安装命令,再打开仓库或文档;下面只保留这个条目的关键接入事实。

命令预览

pip install .

详细介绍

天体照相仪

![CI](https://github.com/Thaylo/astrograph/actions/workflows/ci.yml) ![Release](https://github.com/Thaylo/astrograph/actions/workflows/release.yml) ](https://hub.docker.com/r/thaylo/astrograph) ![Arch](https://hub.docker.com/r/thaylo/astrograph) ![License](LICENSE) ![MCP](https://modelcontextprotocol.io)

MCP服务器 这有助于AI代理在编写之前检测重复代码。它提供了编写和编辑工具,使用AST图同构将新代码与代码库中的现有函数进行比较——由算法而不是LLM令牌提供支持。当发现结构重复时,将使用指向现有代码的指针阻止该操作。变量名、格式和注释将被忽略——如果两段代码共享相同的抽象结构,则ASTrogram会将它们标记为重复。

安装

添加 .mcp.json 到您的项目根目录:

{
  "mcpServers": {
    "astrograph": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i", "--pull", "missing",
        "--add-host", "host.docker.internal:host-gateway",
        "-v", ".:/workspace",
        "thaylo/astrograph:latest"
      ]
    }
  }
}

图像是多拱形(amd64,arm64)。代码库在启动时被索引。元数据存储在项目目录之外(在用户数据目录中),因此它永远不会干扰您的代码库。

要更新到新版本,请执行以下操作:

docker pull thaylo/astrograph:latest

运行版本在MCP中始终可见 serverInfo.version 连接上的字段。

Claude Desktop

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 窗户: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "astrograph": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i", "--pull", "missing",
        "--add-host", "host.docker.internal:host-gateway",
        "-v", "/absolute/path/to/project:/workspace",
        "thaylo/astrograph:latest"
      ]
    }
  }
}

Codex

~/.codex/config.toml:

[mcp_servers.astrograph]
command = "docker"
args = [
  "run", "--rm", "-i", "--pull", "missing",
  "--add-host", "host.docker.internal:host-gateway",
  "-v", "/absolute/path/to/project:/workspace",
  "thaylo/astrograph:latest"
]

wmark

~/.config/wmark/.mcp.json (用户级别,适用于macOS上的所有项目):

{
  "mcpServers": {
    "astrograph": {
      "command": "docker",
      "args": [
        "run", "--rm", "-i", "--pull", "missing",
        "--add-host", "host.docker.internal:host-gateway",
        "-v", "/Users:/Users:rw",
        "thaylo/astrograph:latest"
      ]
    }
  }
}

安装 /Users 使容器内的所有macOS主路径保持不变。呼叫 set_workspace 使用完整的主机路径(例如。 /Users/yourname/project)为项目编制索引。

对于Linux,替换 /Users:/Users:rw/home:/home:rw.

Without Docker

pip install .
{
  "mcpServers": {
    "astrograph": {
      "command": "python",
      "args": ["-m", "astrograph.server"],
      "cwd": "/path/to/astrograph"
    }
  }
}

运作原理

您的代码库已包含:

# src/math.py
def calculate_sum(a, b):
    return a + b

AI代理试图写:

# src/utils.py
def add_numbers(x, y):
    return x + y

A程序检测到重复并阻止写入:

BLOCKED: Cannot write - identical code exists at src/math.py:calculate_sum (lines 1-2).
Reuse the existing implementation instead.

不同的变量名,相同的结构。源代码被转换为带标签的有向图,并使用Weisfeiler Leman哈希与VF2同构验证进行比较——所有这些都是算法,没有在搜索上花费LLM令牌。

检测类型

AST程序检测四种类型的结构复制:

类型它捕获了什么它是如何工作的
精确具有重命名变量或不同格式的相同AST结构WL哈希标识+VF2图同构验证
模式具有不同运算符或常量的相同控制流运算符规范化图哈希
函数内重复的内部块(for/if/while/try)块级AST提取+哈希匹配
近重复约80%的结构相似性——复制粘贴修改模式4/5深度级别的层次哈希前缀匹配

接近重复检测可以捕获精确和模式检测失败的Type-3克隆。例如,Flask的 TagBytes, TagDateTime, TagTuple,以及 TagUUID 类共享80%以上的相同结构,但在叶级细节上有所不同。

语言支持

Python、JavaScript和TypeScript可以开箱即用。C、C++、Java和Go通过TCP连接到已经运行的语言服务器。

语言版本模式默认端点
Python3.11-3.14捆绑pylsp
JavaScriptES2021+,节点20/22/24 LTS捆绑typescript-language-server --stdio
TypeScriptTypeScript 5.x,节点20/22/24 LTS捆绑typescript-language-server --stdio
转到1.21--1.25附加tcp://127.0.0.1:2091
CC11、C17、C23tcp://127.0.0.1:2087
C++C++17、C++20、C++23附加tcp://127.0.0.1:2088
Java11、17、21、25附加tcp://127.0.0.1:2089

Docker镜像捆绑了Python和JS/TS LSP运行时。对于基于连接的语言,使用以下命令在TCP端口上公开语言服务器 socat 并通过MCP JSON进行配置:

{
  "mcpServers": {
    "astrograph": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "--add-host", "host.docker.internal:host-gateway", "-v", ".:/workspace", "thaylo/astrograph:latest"],
      "env": {
        "ASTROGRAPH_CPP_LSP_COMMAND": "tcp://host.docker.internal:2088",
        "ASTROGRAPH_GO_LSP_COMMAND": "tcp://host.docker.internal:2091",
        "ASTROGRAPH_JAVA_LSP_COMMAND": "tcp://host.docker.internal:2089",
        "ASTROGRAPH_C_LSP_COMMAND": "tcp://host.docker.internal:2087"
      }
    }
  }
}
语言Env-varSocat桥示例
C ASTROGRAPH_C_LSP_COMMANDsocat TCP-LISTEN:2087,reuseaddr,fork EXEC:clangd
C ASTROGRAPH_CPP_LSP_COMMANDsocat TCP-LISTEN:2088,reuseaddr,fork EXEC:clangd
Java ASTROGRAPH_JAVA_LSP_COMMANDsocat TCP-LISTEN:2089,reuseaddr,fork EXEC:jdtls
去吧ASTROGRAPH_GO_LSP_COMMANDsocat TCP-LISTEN:2091,reuseaddr,fork EXEC:"gopls serve"
python ASTROGRAPH_PY_LSP_COMMAND(捆绑,必要时覆盖)
JSASTROGRAPH_JS_LSP_COMMAND(捆绑,必要时覆盖)
TSASTROGRAPH_TS_LSP_COMMAND(捆绑,必要时覆盖)

lsp_setup(mode='inspect') 查看哪些语言可用,缺少什么。

真实世界的结果

在流行的开源项目上进行了测试:

项目语言文件代码单位发现重复项
瑞迪斯C20818272556组
类型ORMTypeScript4927107511组
Express.jsJavaScript1413866468组
nlohmann/jsonC++4889103959组
金酒前往991557141组
烧瓶Python2491048组
春季宠物诊所Java4727017组

通过VF2图同构验证了精确、模式和块发现。通过层次哈希前缀相似性(约80%的结构同一性)匹配近似重复项。

星迹

![Star History Chart](https://www.star-history.com/#Thaylo/astrograph&type=date&legend=top-left)

许可证

麻省理工学院

目录标签

目录标签

PythonClaude开发工具代码检测本地部署AST分析代码优化AI辅助编程

支持客户端

Claude DesktopClaude

接入字段

传输方式(transport,传输协议)

stdio

鉴权方式(authType,认证方式)

none

工具数量(toolCount,工具数)

0

资源数量(resourceCount,资源数)

0

提示词数量(promptCount,提示词数)

0

权限和风险

stdionone部署方式未说明

接入前请确认传输方式、认证方式和部署位置,并根据实际工具能力限制访问范围。

安装前确认

不要直接授予不必要的文件、网络或账号权限;先核对安装命令和配置内容。

来源信息

继续浏览同类 MCP