关于 4da-mcp-server
4da-mcp-server 根据项目锁文件,为编码 Agent 提供本地依赖升级影响分析和漏洞检查。它可指出受影响的代码、排列升级选项并记录决策;源代码留在本机,服务只查询所述来源中的包元数据。
主要功能
- 01扫描受支持的项目锁文件
- 02检查依赖中的已知漏洞
- 03展示升级变化及受影响代码
- 04为依赖升级安排优先级
- 05保存决策与 Agent 记忆
适用场景
- 01升级包前评估代码影响
- 02扫描锁定依赖中的漏洞
- 03决定优先升级哪些过时依赖
- 04留存依赖升级决策记录
MCP 相关
该服务向 MCP 客户端提供依赖分析、漏洞扫描、升级规划和记忆工具。Claude Code 插件还包含一个钩子,在受支持清单文件中的版本发生变化时提示执行依赖检查。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
11收录的工具列表 · 更新于 3 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| package | string | 否 | 仅检查此软件包(任何生态系统,包含所有已安装副本及传递依赖),并通过 `package_note` 说明锁定文件中对此软件包的记录。使用此参数询问单个依赖,而无需阅读完整报告。 |
| include_dev | boolean | 否 | 包含已知的直接 devDependencies。传递依赖的开发/运行时范围可能未知。默认值:false。 |
| project_path | string | 否 | 要扫描的项目目录。默认值:当前工作目录。 |
| force_refresh | boolean | 否 | 忽略 OSV 公告缓存,并从 OSV.dev 获取最新公告数据(无论如何,每次锁文件变更时都会重新读取依赖版本)。默认值:false。 |
| response_format | enum | 否 | concise(默认):每个易受攻击的软件包版本一行(最高严重性、修复其所有公告的版本、公告数量及首批 ID、固定版本的位置),显示严重性最高的 40 项和 25 条建议,并统计所有未显示项。detailed:每条公告一行并附带引用,另包含平台上不生效的公告、维护通知、安装偏差和解决来源。concise | detailed |
| severity_filter | enum | 否 | 仅显示呈现的严重性达到或高于此级别的漏洞。critical | high | medium | low |
详细介绍
@4da/mcp-server
为 AI 编码 Agent 提供升级情报。 在 Agent 升级依赖之前,它会根据你自己的锁文件,在你的机器上了解你当前使用的版本与目标版本之间有哪些变化、会影响哪些文件,以及此次升级能修复哪些漏洞。此外,还提供与 osv-scanner 同等能力的漏洞扫描、排序后的升级计划和决策记忆。零配置,无需账户。
You: "Upgrade axum to 0.8"
Agent → upgrade_impact { package: "axum", to_version: "0.8.4" }
axum 0.7.9 -> 0.8.4: 5 releases (0.8.2 yanked), changelog from the 0.8.4 crate.
12 breaking entries, 8 touch your code (Path, Query, Router, extract, serve):
breaking Remove OptionalFromRequestParts impl for `Query` (you use Query)
breaking Require `Sync` for all handlers added to `Router` (you use Router)
...
Your code: 10 files import axum.
(真实输出,已删节,基于本仓库于 2026-10-02 运行。)
一条命令即可安装。无需 API 密钥,无需账户。你的代码绝不会离开你的机器。
安装
需要 Node.js 22 或更高版本。
该服务使用 Node 内置的 node:sqlite(Node 22.13 及更高版本),因此不需要安装脚本,也兼容 npm 12 默认阻止安装脚本的行为。在 Node 22.0-22.12 上,它会使用可选的 better-sqlite3,其原生模块由 npm 10 和 11 在安装时构建。运行 npx @4da/mcp-server --doctor 可查看当前使用的是哪一种。
claude mcp add 4da -- npx @4da/mcp-server
作为 Claude Code 插件(MCP 服务加钩子):
claude plugin marketplace add 4DA-Systems/4da-mcp-server
claude plugin install 4da@4da
当 Agent 在 package.json、Cargo.toml、pyproject.toml、requirements.txt 或 go.mod 中修改依赖版本时,钩子会告知哪些软件包发生了变动,并提供确切的 dependency_check 和 upgrade_impact 调用,要求 Agent 在安装和构建之前执行。该钩子使用纯 Node,不会连接任何地方,其他编辑操作也不会触发任何提示。
Cursor / Windsurf / Devin Desktop
添加到 ~/.cursor/mcp.json(Cursor)、~/.codeium/windsurf/mcp_config.json(Windsurf)或 ~/.config/devin/mcp_config.json(Devin Desktop 和 Devin CLI;Windows 上为 %APPDATA%devinmcp_config.json):
{
"mcpServers": {
"4da": {
"command": "npx",
"args": ["@4da/mcp-server"]
}
}
}
VS Code(Copilot)
运行 MCP: Open User Configuration 并添加条目,或直接编辑文件:%APPDATA%CodeUsermcp.json(Windows)、~/Library/Application Support/Code/User/mcp.json(macOS)、~/.config/Code/User/mcp.json(Linux)。VS Code 使用 servers,而非 mcpServers:
{
"servers": {
"4da": {
"type": "stdio",
"command": "npx",
"args": ["@4da/mcp-server"]
}
}
}
Claude Desktop
添加到 ~/Library/Application Support/Claude/claude_desktop_config.json(macOS)或 %APPDATA%\Claude\claude_desktop_config.json(Windows):
{
"mcpServers": {
"4da": {
"command": "npx",
"args": ["@4da/mcp-server"]
}
}
}
自动设置(检测所有已安装的编辑器)
npx @4da/mcp-server --setup --dry-run # show each file and entry, write nothing
npx @4da/mcp-server --setup
会写入检测到的 Cursor、VS Code(及 Insiders)、Windsurf、Devin Desktop 和 Claude Desktop 配置,并与现有配置合并:保留其他服务、设置和注释;先创建备份(.bak);无法解析的文件则保持不变,并提示你手动添加条目。对于 Claude Code,它会打印 claude mcp add 命令,而不会编辑 ~/.claude.json。
然后询问你的 AI:“将 X 升级到 Y 会有哪些变化?”、“扫描漏洞”或“我应该先升级什么?”
工作原理
该服务会读取其启动目录下项目的每个锁文件,包括根目录下方独立锁定的项目(例如,src-tauri/Cargo.lock 与根目录的 pnpm-lock.yaml 并列的仓库会被整体扫描),并跳过 .gitignore 排除的内容:package-lock.json / npm-shrinkwrap.json、pnpm-lock.yaml(v5–v9)、yarn.lock(v1 和 berry)、bun.lock、Cargo.lock(包括 Cargo 工作区)、poetry.lock、uv.lock、pdm.lock、Pipfile.lock、requirements 固定版本文件(*requirements*.txt、requirements/*.txt,包括 -r 和 -c)、go.mod / go.sum(Go 的构建列表)、Gemfile.lock(RubyGems;git 和路径 gem 是本地代码,不是发行版)以及 composer.lock(Packagist)。文件夹中的每个 Python 源文件都会被读取,而不只是第一个。每个已安装副本都会被扫描,而不是每个名称只扫描一个版本,并采用锁文件自身的 dev 标记。每当锁文件发生变化时,服务都会重新读取;对于 npm,还会检查 node_modules 中实际安装的内容。遍历会深入 4 层,最多扫描 256 个项目。未纳入扫描的内容,以及所有没有锁文件的清单文件(其声明的版本范围并非已安装内容,因此不会扫描),都会列在回答的 coverage 块中,绝不会悄然省略。未读取其清单文件的生态系统(Maven pom.xml、Gradle、.NET *.csproj / packages.lock.json、Pub、Hex、SwiftPM、CocoaPods:coverage.not_covered),存在但无法读取的锁文件(合并冲突标记、无效 JSON:coverage.unreadable_lockfiles),以及测试夹具目录(tests/、test/、fixtures/、testdata/、__fixtures__/、conformance/ 等)中的锁文件也会列出;除非传入 include_test_fixtures: true,否则这些目录不会作为项目自身内容扫描(coverage.not_scanned)。
不完整的回答绝不会被视为干净。 当 OSV.dev 无法回答某些依赖项的查询时(服务中断、HTTP 错误、超时、查询预算用尽),vulnerability_scan 会以 summary: "NOT CHECKED: ... N of M dependencies have no vulnerability answer" 开头,在 coverage.unchecked_dependencies 中统计这些依赖项,并将 total_vulnerable_packages 和 by_severity 设为 null(已检查部分的结果位于 found_in_checked_dependencies);dependency_health 不会提供评分和漏洞数量,upgrade_planner 则会将 vulnerabilityDataAvailable: false 设为 false。大型依赖树会根据 OSV 的预算分批查询,每批 1,000 个,因此超过 10,000 个依赖项的树也会得到完整回答。
在 19 个公开仓库(npm、pnpm v5-v9、yarn v1 和 berry、bun、Cargo、Poetry、uv、Pipfile、requirements、Go;2026-10-10)上与 osv-scanner 对比,所有差异均由 OSV 自身的 API 判定:19,115 条结果的精确率为 1.00;在该工具会读取的锁文件中,召回 19,116 条中的 19,115 条(不会读取 Maven/Gradle)。新纳入读取的 requirements 文件也通过 pip-audit 进行了检查。
- OSV.dev:用于查询已知漏洞,并与精确的已安装版本匹配
- npm 注册表、crates.io、PyPI、Go 模块代理(registry.npmjs.org、crates.io 和 index.crates.io、pypi.org、proxy.golang.org):用于查询版本、弃用状态和撤回状态
- npm 下载量(api.npmjs.org):用于提供
dependency_health的每周下载量数据 - 软件包自身的注册表归档(registry.npmjs.org、static.crates.io、files.pythonhosted.org、proxy.golang.org):用于读取
upgrade_impact所需的变更日志;只有在选择启用下文所述的FOURDA_GITHUB_CHANGELOG=true时才会使用 GitHub - npm 完整 packument、crates.io 版本 API、PyPI JSON API 和 Go 代理的版本列表:供
dependency_check使用(发布时间、撤回状态和 yanked 状态;在 npm 和 crates.io 上还包括发布者、安装脚本和各版本的依赖项)。这些请求只携带软件包名称;除 Go 代理的版本列表不包含日期,因此会针对正在评估的版本请求.info(与go get发出的请求相同)外,绝不会向注册表发送已安装的版本。软件包的 OSV.dev 公告列表可让dependency_check在约束条件中列出安全版本。packument 会缓存在磁盘上,并通过If-None-Match重新验证;对 crates.io API 的读取请求间隔为每秒一次。 - Hacker News Algolia API(hn.algolia.com):仅在调用
ecosystem_pulse时使用 - GitHub(api.github.com、raw.githubusercontent.com):仅在设置
FOURDA_GITHUB_CHANGELOG=true时使用 - 你的嵌入服务提供商:仅在配置语义召回时使用(本地 Ollama URL 或 api.openai.com;见下文)
这些就是该服务会联系的所有主机。
结果会按数据来源进行限流,并缓存一段时间(注册表数据缓存 24 小时,漏洞数据缓存 1 小时,新闻缓存 30 分钟)。
**通过网络发送的内容:**软件包名称和版本(与锁定文件中可见的数据相同);仅对于 ecosystem_pulse,还会将你的少数几个依赖项名称作为搜索词发送。不会发送源代码、文件路径或个人数据。upgrade_impact 的调用点扫描在本地运行。设置 FOURDA_OFFLINE=true 可禁用所有网络调用。
**GitHub 发行说明(选择启用,默认关闭)。**许多软件包的注册表归档中不包含变更日志(vite、zod、cobra 和大多数 Go 模块都如此)。在服务的环境中设置 FOURDA_GITHUB_CHANGELOG=true 后,如果归档中没有对应版本范围的变更日志,upgrade_impact 就会读取该代码库的 GitHub 发行版信息(对于 PyPI 软件包,则会先读取项目通过其 project_urls 链接的 GitHub 变更日志文件)。此时 GitHub 会收到代码库名称和版本,不会收到其他内容。服务使用未经身份验证的 REST API(每小时 60 次请求),或在设置 GITHUB_TOKEN 时使用该令牌(每小时 5,000 次请求);达到速率限制时会报告重置时间,不会在循环中重试,并且结果会被缓存。关闭此功能时,如果回答中没有变更日志,服务会如实说明并指出相关设置;不会进行猜测。
写入磁盘的内容及位置:仅写入服务自身拥有的文件,存放于用户数据目录下的服务文件夹中(%LOCALAPPDATA%\4da-mcp、~/Library/Application Support/4da-mcp 或 ~/.local/share/4da-mcp;可通过 FOURDA_MCP_HOME 更改位置):cache.db(注册表、OSV 和变更日志响应;可安全删除)和 standalone.db(未使用桌面应用时:项目扫描结果,以及你记录的决策、Agent 记忆和反馈)。不会在你的代码库中写入任何内容。
安装 4DA 桌面应用后,服务会通过只读连接读取应用的数据库(4da.db),绝不会在其中创建或修改任何内容:没有表、没有列,也没有缓存。唯一的写入操作是向工具要填充的四个应用自有表中写入行,以便应用能够看到这些内容:决策(decision_memory -> developer_decisions)、Agent 记忆(agent_memory)和反馈(record_feedback -> interactions 和 feedback,应用的校准功能会读取这些内容)。这些写入通过单独的写入连接进行,该连接会短暂等待应用释放锁。如果你的应用版本缺少记录所需的表或列,该记录会改写入 standalone.db,并在 _meta 中说明。(6.1 之前,服务还会在应用数据库中创建 live_cache 表;现在则将该缓存保存在 cache.db 中。)
**配置和数据库的来源:**如果已设置 FOURDA_DB_PATH,则使用该路径(相对路径会基于服务的工作目录解析,且必须指向已有文件;若绝对路径指向的文件不存在,且其所在目录存在,则会将其创建为新的独立数据库,并在第一个工具响应的 _meta.database_note 中说明;否则会拒绝并报错);否则使用桌面应用数据目录中的数据库;再否则使用服务自己的 standalone.db。嵌入设置来自 FOURDA_SETTINGS_PATH;若未设置,则来自与 FOURDA_DB_PATH 同目录的 settings.json;再否则来自桌面应用的数据目录。服务不会从其启动目录读取任何内容:在 6.2.5 之前,工作目录中或其旁边的 data/settings.json 或 data/4da.db 会被采用,因此克隆的仓库可能会将语义检索重定向到其选择的任意主机,或植入“决策”。
唯一例外是:如果你明确为语义检索配置了 OpenAI 嵌入提供方(
FOURDA_EMBED_PROVIDER=openai),你存储的决策/记忆文本会发送给 OpenAI 进行嵌入。默认情况下——不使用嵌入提供方,或使用本地 Ollama 提供方——所有内容都保留在你的设备上;无论如何,FOURDA_OFFLINE=true都会覆盖这些设置。
**支持的生态系统:**npm、crates.io(Rust)、PyPI(Python)、Go;vulnerability_scan 还会读取 RubyGems(Gemfile.lock)和 Packagist(composer.lock)。不会读取 Maven、Gradle 和 .NET,并将其列为不在覆盖范围内。upgrade_impact 会读取 npm、crates.io、PyPI 和 Go。PyPI:版本和日期来自 PyPI JSON API,变更日志来自该版本的 sdist;导入位置则根据发行包安装的模块进行匹配:优先从虚拟环境的元数据中读取(.venv、venv、env:top_level.txt 或 RECORD),其次使用一张常见差异表(PyYAML -> yaml、Pillow -> PIL),否则使用发行包名称,并在答案中将其标记为推测。Go:版本和日期来自 proxy.golang.org,变更日志来自模块 zip;如果主版本为 2 或更高,则会将其报告为模块路径的变化(github.com/jackc/pgx/v4 -> /v5),并列出导入旧路径的文件。dependency_check 也会读取上述四种生态系统;对于 PyPI 和 Go,由于注册表不提供发布者身份或安装钩子信息,这些信号会标注为“不适用”。
明确说明已知限制: 不带锁文件的 requirements.txt 只列出直接固定的依赖项,因此不会扫描它们的传递依赖(请使用 uv lock、poetry lock 或 pip-compile)。许多软件包在其注册表归档中不附带变更日志(fastembed、vite、zod 等就是如此);此时,upgrade_impact 会说明这一点,并提供发行说明 URL,而不是妄加猜测。系统会根据变更日志的标题和措辞标记破坏性变更,并为每条记录附上其所属标题(under)。在涵盖 npm、crates.io、PyPI 和 Go 的 40 次真实升级样本中进行测量(共 1,618 条记录,三位盲评者根据原文证据给出基准标注;样本和测量结果均在测试套件中):在规则制定期间未使用的 20 次升级中,被标记为破坏性变更的记录有 95% 确实属于破坏性变更(95% CI 89-98%),约 72% 的破坏性变更记录被标记出来;以散文形式撰写的 Go 发行说明效果最弱(召回率约为 54%)。请将这些标记视为预排序结果:重大版本升级的每条记录都要阅读。每个回答都会在 _meta.classification 中说明这一点。
你可以询问的内容
"What changes if I upgrade axum to 0.8?" -> upgrade_impact
"Check my dependency health" -> dependency_health
"Scan for vulnerabilities" -> vulnerability_scan
"Which deps should I upgrade first?" -> upgrade_planner
"Is it safe to bump axios to 1.14.1?" -> dependency_check
"Pin ws to a 7.x version" -> dependency_check (to: "7.x")
"I'm about to bump fastembed 5 -> 7" -> what_should_i_know
"What's happening in the ecosystem?" -> ecosystem_pulse
"What's my tech stack?" -> get_context
"Record a decision: we chose Postgres" -> decision_memory
"Does switching to MySQL align?" -> check_decision_alignment
"Remember: never use ORM for batch inserts" -> agent_memory
全部 16 个工具
依赖项安全
| 工具 | 功能 |
|---|---|
upgrade_impact | 查看某个依赖从已安装版本升级到目标版本会有哪些变化(npm、crates.io、PyPI、Go):中间发布的版本、按破坏性变更/弃用/安全问题分类的变更日志条目、会影响你代码的破坏性变更(你导入的符号,以及字符串字面量中的路由或模式语法,例如 axum 0.8 的 /:id -> /{id})、导入该依赖的文件,以及已修复的安全公告。 |
vulnerability_scan | 将每个锁文件中的所有已安装副本与 OSV.dev 匹配。按作用范围调整严重性;针对每个安全公告检查升级目标(针对单个公告的最高修复版本本身可能受另一个公告影响);列出每个版本的固定位置;扫描不完整时提供 coverage 块。默认输出简洁(每个易受攻击的包版本一行,列出严重性最高的 40 项;对于有 290 条安全公告的项目,约 4k 个 token);用 package 指定单个依赖;用 response_format: "detailed" 查看每条安全公告。 |
dependency_health | 查看每个依赖的版本新旧程度、当前使用版本的弃用情况,以及漏洞数量。 |
upgrade_planner | 为每个易受攻击的包确定不受任何安全公告影响的最低版本,并标记主版本升级(0.x 的次版本升级也算主版本升级)。直接依赖的步骤(upgrade_direct)会提供 upgradeCommands,即每个声明该依赖的项目目录对应的命令,同时保持依赖的声明方式(精确固定版本使用 npm install x@v --save-exact,npm install "x@^v"、pnpm up、yarn upgrade / yarn up、带 --dev / --build / --target / --rename 的 cargo add、go get;对于 >= / ` |
dependency_check | 在向清单文件写入任何依赖版本之前调用:新增、固定、升级、提高或降低版本均适用。to 是精确版本,或收到的版本约束("7.x"、"^1.20"、"~=3.1"、"v1"):随后 range_check 会列出其中不受任何已知安全公告影响的最低和最新版本,判定结果则针对它选出的版本。若某个精确版本受安全公告影响,则给出同一版本线上的安全版本。每项都会给出判定(proceed / wait / review / avoid / unknown)及其依据:目标版本上的安全公告、发布时长(发布不到 3 天的版本会被暂缓,除非它修复了你遇到的安全公告)、发布者信任度下降、新增安装脚本、全新的传递依赖、已撤回或已弃用的版本,以及会判定为 review 并指向 upgrade_impact 的破坏性版本范围(主版本或 0.x 的次版本)。适用于 npm、crates.io、PyPI 和 Go(发布者信任度、安装脚本和新增传递依赖是 npm/crates.io 的信号,在其他生态中标记为“不适用”)。 |
智能分析
| 工具 | 功能 |
|---|---|
what_should_i_know | 根据任务构建任务前简报:包含任务提及的依赖项(以及任务提及的依赖系列:“所有 tauri 插件”会加入项目中的 tauri-、tauri-plugin- 和 @tauri-apps/* 软件包;对于“最新”,会检查每个依赖项是否已是最新主版本)、依赖项版本和已确认的漏洞、跨越的主版本、你记录的决策,以及只有经确认的证据才能提升可信度的委派判定。 |
ecosystem_pulse | Hacker News 上提及你的依赖项的头条,然后是提及你使用的语言的头条(并标注语言)。仅在调用时获取。 |
get_context | 你的技术栈、已解析的依赖项版本、兴趣和检测到的话题。 |
get_relevant_content* | 通过桌面应用相关性评估器筛选的评分内容信息流。 |
get_actionable_signals* | 经评估器接受、由应用归类为安全公告或重大变更的信息流条目,以及你的实时漏洞。 |
knowledge_gaps* | 你尚未查看的、包含经评估器接受的安全公告或版本发布信息的依赖项。 |
record_feedback* | 保存或忽略条目;记录到应用自己的反馈表中,供其校准时读取。 |
决策与记忆
| 工具 | 功能 |
|---|---|
decision_memory | 跨会话记录、查询和管理架构决策。 |
check_decision_alignment | 验证拟议的技术变更是否符合已记录的决策。 |
agent_memory | 可跨会话、Agent 和编辑器保留的持久记忆。 |
身份
| 工具 | 功能 |
|---|---|
developer_dna* | 你的技术身份:主要技术栈、重要依赖项和认知盲区。 |
* 需使用 4DA 桌面应用 才能获取完整数据。
提示词:deps
由用户调用的工作流(支持 MCP 提示词的宿主会将其显示为斜杠命令)。它会指示 Agent 运行 upgrade_planner,用 dependency_check 检查每项拟议的升级;分小批次仅应用 proceed 项,并在每批之后运行项目自己的测试;停止处理并报告每项 review / avoid / wait / unknown 项及其证据;最后重新运行 vulnerability_scan。可选参数 scope(例如 security only)。
独立模式与完整模式
MCP 服务无需桌面应用即可运行。它会在用户数据文件夹(%LOCALAPPDATA%\4da-mcp、~/Library/Application Support/4da-mcp 或 ~/.local/share/4da-mcp,绝不会放在你的代码库内)中保留一个小型本地数据库,并在每次启动时扫描你的项目:
| 功能 | 独立模式 | 搭配 4DA Desktop |
|---|---|---|
| 升级影响(变更日志、重大变更、你的调用点) | 是 | 是 |
| 漏洞扫描(OSV.dev) | 是 | 是 |
| 依赖项健康状况(4 个注册表) | 是 | 是 |
| 升级规划器 | 是 | 是 |
| 安装前依赖项检查 | 是 | 是 |
| 生态系统新闻(Hacker News,按需获取) | 是 | 是 |
| 任务前智能简报 | 是 | 是 |
| 技术栈检测 + 已解析的版本 | 是 | 是 |
| 决策记忆 + 一致性检查 | 是 | 是 |
| Agent 记忆(跨会话) | 是 | 是 |
| 根据你的技术栈评估的开发者新闻(应用的信息流) | -- | 是 |
| 可执行信号 + 知识缺口 | -- | 是 |
| 分析层(信号链、知识缺口、时间分析) | -- | 是 |
下载 4DA,体验完整功能。
传输方式
stdio(默认)——适用于所有 MCP 主机:
npx @4da/mcp-server
Streamable HTTP——适用于远程或多客户端场景:
npx @4da/mcp-server --http --port 4840
HTTP 传输默认绑定到 127.0.0.1,并对每个请求应用 Host 标头 DNS 重绑定防护。若要将其暴露到本机之外,则需要共享密钥:
MCP_AUTH_SECRET=<same value as the relay's JWT_SECRET> \
MCP_ALLOWED_HOSTS=mcp.internal \
npx @4da/mcp-server --http --host 0.0.0.0
如果未设置 MCP_AUTH_SECRET,启动时会拒绝非环回绑定。设置后,每个请求都必须携带 Bearer 令牌,其 HMAC-SHA256 签名必须通过该密钥验证;令牌的角色也会针对每个工具进行强制执行(viewer 为只读;member 和 admin 可以写入)。请在其前方配置 TLS。
HTTP 模式为单租户。 系统会验证令牌的 team_id,但不会用它来隔离数据:所有通过身份验证的客户端共享同一个数据库、一份 Agent 记忆和一组决策,并且 project_path 允许任何通过身份验证的客户端扫描服务器可读取的任意目录。每个团队(或每个信任边界)运行一个服务,并且只允许你愿意授予此类访问权限的客户端连接。
CLI 参考
npx @4da/mcp-server # Start server (stdio)
npx @4da/mcp-server --http # Start server (Streamable HTTP)
npx @4da/mcp-server --setup # Auto-configure your editors
npx @4da/mcp-server --doctor # Verify installation health
npx @4da/mcp-server --version # Print version
环境变量
| 变量 | 说明 | 默认值 |
|---|---|---|
FOURDA_DB_PATH | 4DA 的 SQLite 数据库路径。使用现有文件。若相对路径(相对于工作目录解析)指向不存在的文件,则会拒绝使用。若绝对路径指向不存在的文件,且其目录存在,则会创建独立数据库(stderr 会输出一行提示,首个工具回答中的 _meta.database_note 也会说明);若目录不存在,则会拒绝使用。 | 桌面应用的数据库,否则为服务自身的数据库 |
FOURDA_SETTINGS_PATH | settings.json,其中包含用于语义回忆的可选 embedding 区块 | 与 FOURDA_DB_PATH 同目录,否则为桌面应用的数据目录 |
FOURDA_OFFLINE | 禁用所有网络调用 | false |
FOURDA_GITHUB_CHANGELOG | upgrade_impact:当注册表存档中没有对应范围的变更日志时,读取 GitHub 发布说明(true / 1 / yes / on) | 关闭 |
GITHUB_TOKEN | 仅与 FOURDA_GITHUB_CHANGELOG 配合使用:将 GitHub 的速率限制从每小时 60 次请求提高到 5,000 次 | 未设置 |
FOURDA_MCP_HOME | 服务写入文件(cache.db、standalone.db)的文件夹 | 用户数据文件夹 + 4da-mcp |
MCP_AUTH_SECRET | 用于在 --http 下验证 Bearer 令牌的共享密钥(HMAC-SHA256)。若未设置,则回退到 JWT_SECRET。未设置时不接受任何令牌。 | 未设置 |
MCP_AUTH_REQUIRED | 在环回 --http 绑定时要求身份验证。非环回绑定时始终要求身份验证。 | false |
MCP_ALLOWED_HOSTS | 允许出现在 Host/Origin 中的额外主机名,以逗号分隔(绑定到 0.0.0.0 时需要)。 | 仅 localhost |
常见问题
这会把我的代码发送到其他地方吗?
不会。该服务会向公共 API 发送包名称和版本(OSV.dev、npm registry、crates.io、PyPI、Go proxy),通过包自身的注册表下载目标版本的归档文件以执行 upgrade_impact(只有在设置 FOURDA_GITHUB_CHANGELOG=true 时才会读取 GitHub 发布说明),并且仅在调用 ecosystem_pulse 时,才会将少量依赖名称作为搜索词发送到 HN Algolia。不会发送源代码、文件路径或个人数据:调用点扫描在本地运行。设置 FOURDA_OFFLINE=true 可禁用所有网络调用。(唯一例外是选择启用的 OpenAI 嵌入向量,详见上文的网络说明。)
我需要安装 4DA 桌面应用吗? 不需要。11 个工具可独立运行:升级影响分析、安装前依赖检查、漏洞扫描、依赖健康度、升级规划、生态系统新闻、任务前简报、项目上下文、决策记忆、对齐检查和 Agent 记忆。桌面应用是日常运行同一引擎的地方:在这台机器上的所有项目间共享一个工作清单、了解技术栈变更的晨间简报,以及升级计划。安装后,你的 Agent 还能使用另外 5 个工具:信号、知识缺口、根据你的技术栈评估的开发者新闻、Developer DNA 和反馈。
它兼容哪些 AI 工具? 任何支持 MCP 的工具:Claude Code、Claude Desktop、Cursor、Windsurf、VS Code(Copilot)以及任何自定义 MCP 客户端。
从源代码构建
git clone https://github.com/4DA-Systems/4da-mcp-server.git
cd 4da-mcp-server
pnpm install
pnpm build
pnpm test # offline
许可证
Apache License 2.0(Apache-2.0)。请参阅 LICENSE。
由 4DA 构建
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。