mcpField
N
napi - Better Software Architecture for the AI Age

napi - Better Software Architecture for the AI Age

本地服务
nanoapi.io开发工具32328 周前更新

关于 napi - Better Software Architecture for the AI Age

napi 是一款完全离线运行的命令行工具,用于分析代码库的依赖、复杂度与结构,并提供交互式架构图查看器。它面向需要理解和重构遗留代码的开发团队,代码不会离开本机。

主要功能

  1. 01文件、符号与依赖关系分析
  2. 02按复杂度、体积、耦合度进行审计
  3. 03Cytoscape.js 交互式架构图
  4. 04提取函数或类为独立文件
  5. 05可选 AI 自动标注依赖
  6. 06可集成到 CI/CD 流水线

适用场景

  1. 01梳理遗留系统的依赖结构
  2. 02在重构前定位过度耦合的文件
  3. 03在 CI 中持续记录架构变化

MCP 相关

README 中仅提及 mcp-server 标签,未说明与 MCP 的具体关系,因此此处留空。

配置

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

暂未收录安装方式

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

代码仓库

工具

还没有获取到工具列表

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

详细介绍

NanoAPI Banner

napi - AI 时代的更优软件架构

napi 是一款完全离线的 CLI,可分析代码库的架构——包括依赖关系、复杂度和结构——然后让你可视化并重构代码,全程不会将代码发送到任何地方。

它会根据源代码生成依赖清单,将其保存在本地,并直接通过 CLI 提供交互式图形可视化工具。

NanoAPI UI Overview

功能

  • 🔍 依赖分析:自动绘制代码库中每个文件、符号和依赖关系的映射。
  • 🚨 审计:检测复杂度、大小或耦合度超出阈值的文件和符号。
  • 📊 交互式可视化工具:通过在浏览器中本地提供的 Cytoscape.js 图形探索架构。
  • 📝 符号提取:将指定的函数、类或符号提取到独立文件中,以便重构。
  • 🏷️ AI 标注(可选):使用 OpenAI、Google 或 Anthropic 模型自动标注依赖项。
  • ⚙️ 支持 CI/CD:可集成到任何流水线中——每次推送时生成清单并跟踪架构变化。
  • 🔒 完全离线:无需账户或服务,不会有任何数据离开你的设备。

支持的语言

语言状态
Python✅ 支持
C#✅ 支持
C✅ 支持
Java✅ 支持
C++🚧 开发中
PHP🚧 开发中
JS/TS🚧 开发中

安装

Unix(macOS、Linux)
curl -fsSL https://raw.githubusercontent.com/nanoapi-io/napi/refs/heads/main/install_scripts/install.sh | bash

也可以直接从 GitHub Releases 下载二进制文件。

Windows

使用 WSL 运行 napi。 原生 Windows 支持正在开发中。

快速开始

# 1. Initialize your project (creates .napirc)
napi init

# 2. Generate a dependency manifest
napi generate

# 3. Open the visualizer in your browser
napi view

就这样。清单已保存在本地的 .napi/manifests/ 中,可视化工具会在 http://localhost:3000 打开。

CLI 命令

napi init

交互式设置,会在项目根目录中创建 .napirc 配置文件。

它会提示你输入:

  • 语言 —— Python、C#、C 或 Java
  • 包含/排除模式 —— 要分析哪些文件
  • 输出目录 —— 提取的符号写入的位置
  • AI 标注(可选)——提供方和并发设置
napi init
napi generate

分析代码库并生成依赖清单。清单会记录每个文件、符号、依赖项和指标(行数、复杂度、耦合度)。

清单以 JSON 文件形式保存在 .napi/manifests/ 中,命名格式为 {timestamp}-{commitSha}.json。

# Interactive (prompts for branch/commit if not in git)
napi generate

# Non-interactive (for CI)
napi generate --branch main --commit-sha abc1234 --commit-sha-date 2026-01-01T00:00:00Z

选项:

  • --branch —— Git 分支名称(省略时自动检测)
  • --commit-sha —— Git 提交哈希(省略时自动检测)
  • --commit-sha-date —— ISO 8601 格式的提交日期(省略时自动检测)
  • --labelingApiKey —— 用于 AI 标注的 API 密钥(覆盖全局配置)
napi view

启动本地 Web 服务,并在浏览器中打开交互式依赖可视化工具。

napi view
napi view --port 8080

查看器提供:

  • 清单列表 —— 按分支、提交和日期浏览所有本地存储的清单
  • 项目图形 —— 使用 Cytoscape.js 展示文件级依赖关系图
  • 文件图形 —— 查看文件内的符号级视图(函数、类、变量)
  • 符号图形 —— 查看特定符号的传递依赖链
  • 文件浏览器侧边栏 —— 浏览代码库结构
  • 审计警报 —— 以可视化标记提示超出阈值的文件/符号
napi extract

使用本地清单,将代码库中的指定符号提取到单独的文件中。

# Extract a function from a specific file
napi extract --symbol "src/auth/login.py|authenticate"

# Extract multiple symbols
napi extract --symbol "src/models.py|User" --symbol "src/models.py|Session"

# Use a specific manifest (defaults to latest)
napi extract --symbol "src/main.py|run" --manifestId 1712500000000-a1b2c3d

输出写入 {outDir}/extracted-{timestamp}/。

napi set apiKey

配置用于 AI 驱动依赖标注的 API 密钥。密钥存储在全局配置中(而非项目中)。

napi set apiKey

它会提示你输入:

  • 提供方 —— Google、OpenAI 或 Anthropic
  • API 密钥 —— 你的提供方 API 密钥

本地清单存储

所有清单都存储在相对于项目根目录的 .napi/manifests/ 中。 每个清单都是一个独立的 JSON 文件:

{
  "id": "1712500000000-a1b2c3d",
  "branch": "main",
  "commitSha": "a1b2c3d4e5f6...",
  "commitShaDate": "2026-04-07T10:00:00Z",
  "createdAt": "2026-04-07T10:01:00Z",
  "manifest": {}
}

你可以将 .napi/ 添加到 .gitignore,也可以将其提交到版本控制中以追踪架构历史——由你决定。

CI/CD 集成

在每次推送时自动生成清单:

# .github/workflows/napi.yml
name: Generate Manifest
on: [push]
jobs:
  manifest:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install napi
        run: curl -fsSL https://raw.githubusercontent.com/nanoapi-io/napi/refs/heads/main/install_scripts/install.sh | bash

      - name: Generate manifest
        run: napi generate --branch ${{ github.ref_name }} --commit-sha ${{ github.sha }} --commit-sha-date "$(git log -1 --format=%cI)"

配置参考

.napirc

由 napi init 创建的项目级配置:

{
  "language": "python",
  "python": { "version": "3.10" },
  "project": {
    "include": ["src/**/*.py"],
    "exclude": [".git/**", "**/__pycache__/**", "napi_out/**"]
  },
  "outDir": "napi_out",
  "labeling": {
    "modelProvider": "openai",
    "maxConcurrency": 5
  }
}
全局配置

存储在操作系统的配置目录中(Linux 上为 ~/.config/napi/config.json,macOS 上为 ~/Library/Application Support/napi/config.json)。通过 napi set apiKey 管理。

{
  "labeling": {
    "apiKeys": {
      "openai": "sk-...",
      "google": "AIza...",
      "anthropic": "sk-ant-..."
    }
  }
}

开发

需要 Deno v2.4+。

# Install dependencies
deno install --allow-scripts

# Run CLI in dev mode
deno task dev

# Run viewer dev server (hot-reload)
deno task dev:viewer

# Build viewer for production
deno task build:viewer

# Compile binary (includes viewer)
deno task compile

# Run tests
deno task test

# Lint
deno lint

# Format
deno fmt

贡献

我们欢迎社区贡献。请阅读我们的 贡献指南 ,了解如何参与。

许可证

napi 根据 Sustainable Use License 授权。

延伸阅读

捐赠

NanoAPI 是一个公平源码项目。因此,我们认为将任何捐赠据为己有是不道德的。我们将按以下方式处理捐赠:

  • 捐赠将汇入资金池
  • 资金池中的款项将分配给贡献者
  • 年末,任何剩余款项都将捐赠给社区选定的慈善机构

我们会定期发布更新,说明资金池中的金额以及款项的分配情况。

评论

支持 Markdown

第一次接触 MCP?

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

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