Token导航 LogoToken导航TokenDH.com
Vba Lint MCP logo
AI代理stdio官方级别未说明来源级核验

Vba Lint MCP

MCP Server

vitest

一个基于MCP协议的VBA静态代码分析工具,提供65种代码检查功能,适用于VBA开发者进行代码质量检查和自动化分析。

工具数

4

提示词数

0

GitHub Stars

1

资源数

0
TypeScriptClaude代码质量Claude

安装说明

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

作者 / 组织

devinmlowe

提供方

devinmlowe

最后核验

2026/5/17 20:20

运行时

Node.js

快速接入

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

命令预览

npx vitest run <path> # Specific test

详细介绍

vba-lint mcp

![License: GPL-3.0](https://www.gnu.org/licenses/gpl-3.0) ](https://nodejs.org/) ![MCP](https://modelcontextprotocol.io/)

提供VBA代码检查、linting和解析树分析的MCP服务器——从Rubberduck VBA移植的65个检查。

概述

vba-lint-mcp 通过以下方式公开VBA静态分析功能 模型上下文协议,使AI助手(Claude Code等)和MCP兼容工具能够对VBA源文件执行代码质量检查。

检查逻辑源自 橡胶鸭VBA 项目——一个开源的VBIDE插件,为VBA开发人员提供代码检查、重构、导航和单元测试。该项目将Rubberduck经过验证的C#检查模式转换为TypeScript,并通过MCP访问它们。

这是给谁的?

  • VBA开发人员使用Claude Code或其他MCP客户端提供代码帮助
  • 需要自动代码质量检查的维护Excel/Access VBA项目的团队
  • 任何构建包含VBA支持的基于MCP的开发工具链的人

快速开始

安装

git clone git@github.com:devinmlowe/vba-lint-mcp.git
cd vba-lint-mcp
npm install
npm run generate-parser   # Requires Java 17+ (JRE)
npm run build

在Claude代码中配置

添加到MCP设置(.claude/settings.json 或项目设置):

{
  "mcpServers": {
    "vba-lint": {
      "command": "node",
      "args": ["/path/to/vba-lint-mcp/dist/server.js"],
      "env": {
        "VBA_LINT_LOG_LEVEL": "warn"
      }
    }
  }
}

第一次检查

配置后,Claude Code可以直接检查VBA代码:

> Inspect this VBA code for issues:
>
> Sub Example()
>     Dim x
>     Let y = 10
>     If True Then
>     End If
> End Sub

服务器将返回缺失的诊断信息 Option Explicit,隐式变量类型,已过时 Let 关键字和空 If 块。

工具

vba/inspect

对VBA代码字符串运行检查。

参数类型默认值说明
codestring(必需)要检查的VBA源代码
hostLibrariesstring\[\]["excel"]可用的主机库(例如。, ["excel", "access"])
severitystring(all)最小严重性: "error", "warning", "suggestion", "hint"
categoriesstring\[\](all)按类别筛选(例如。, ["CodeQuality", "Excel"])

输出示例:

{
  "results": [
    {
      "inspection": "EmptyIfBlock",
      "description": "If block is empty and should either contain code or be removed.",
      "severity": "warning",
      "category": "CodeQuality",
      "tier": "A",
      "location": { "startLine": 3, "startColumn": 4, "endLine": 4, "endColumn": 10 },
      "quickFix": { "description": "Remove the empty If block" },
      "suppressed": false
    }
  ],
  "errors": [],
  "skippedInspections": [],
  "parseErrors": [],
  "engineVersion": "0.1.0"
}

vba/inspect-workspace

扫描VBA文件(.bas、.cls、.frm)的目录树,并返回聚合结果。

参数类型默认值说明
pathstring(必填)要扫描的目录路径
hostLibrariesstring\[\]["excel"]主机库可用
severitystring(all)最小严重性筛选器
categoriesstring\[\](all)类别筛选器
limitnumber100返回的最大结果数
detailedbooleanfalse返回完整结果而不是摘要

在摘要模式(默认)下,按文件和检查返回计数。在详细模式下,为每个发现返回完整的结果对象。

vba/list-inspections

列出所有可用的检查及其元数据。

参数类型默认值说明
hostLibrariesstring\[\](all)按主机库筛选
categorystring(all)按类别筛选
tierstring(all)按层筛选: "A""B"

vba/parse

解析VBA源代码并返回AST。

参数类型默认值说明
codestring(必需)要解析的VBA源代码
depthnumber3要返回的最大AST深度(1-10)

有助于理解代码结构。这 depth 参数限制了大型模块的序列化大小。

检验目录

在2个级别和8个类别中进行了65次检查。

A级:解析树检查(43)

这些检查直接分析ANTLR4解析树,不需要符号解析。它们在两个内联代码上运行(vba/inspect)以及工作空间扫描。

ID类别严重性描述
EmptyIfBlockCodeQuality警告如果块为空,应包含代码或被删除。
EmptyElseBlockCodeQuality警告否则块为空,应包含代码或被删除。
EmptyCaseBlockCodeQuality警告大小写块为空,应包含代码或删除。
EmptyForLoopBlockCodeQuality警告适用。..下一个循环是空的,应该包含代码或被删除。
EmptyForEachBlockCodeQuality警告每个。..下一个循环是空的,应该包含代码或被删除。
EmptyWhileWendBlock代码质量警告同时。..Wend循环为空,应包含代码或删除。
EmptyDoWhileBlockCodeQualitywarningDo…循环块为空,应包含代码或被删除。
EmptyMethodCodeQuality建议方法体为空,应包含代码或删除。
EmptyModuleCodeQuality提示模块不包含任何声明或过程,可能是不必要的。
ObsoleteLetStatementObsoleteSyntax建议Let关键字已过时,应从值赋值中删除。
ObsoleteCallStatement过时语法建议Call关键字已过时。不使用它直接调用程序
ObsoleteGlobal过时语法建议Global关键字已过时。改用Public。
ObsoleteWhileWendStatement过时的语法建议虽然。Wend已经过时了。使用Do While。..改为循环,以获得更好的控制流。
ObsoleteCommentSyntax过时语法建议注释的Rem关键字已过时。请改用单引号(')语法。
ObsoleteTypeHint过时语法建议类型提示字符已过时。请改用显式的As Type声明。
StopKeywordCodeQualitywarningStop语句像断点一样停止执行,应将其从生产代码中删除。
EndKeywordCodeQualitywarningStandalone End语句突然终止程序而不进行清理。
DefTypeStatement过时语法建议DefType语句(DefBool、DefInt等)隐式类型变量,应替换为显式声明。
OptionExplicitCodeQuality警告模块缺少Option Explicit。变量应该显式声明。
OptionBaseZeroOrOneCodeQuality提示选项库更改了默认数组下限,可能会造成混淆。
MultipleDeclarationsCodeQuality建议在一行中声明多个变量。按自己的行声明。
ImplicitByRefModifierCodeQuality建议参数由ByRef隐式传递。明确指定ByRef或ByVal。
ImplicitPublicMemberCodeQuality建议成员隐式为公共。明确指定公共或私有。
ImplicitVariantReturnTypeCodeQuality建议函数/属性Get隐式返回变量。指定显式返回类型。
RedundantByRefModifierCodeQualityhintByRef是默认的参数传递机制,指定时是冗余的。
BooleanAssignedInIfElseCodeQuality建议If/Else块将True/False分配给同一变量。简化为直接分配。
SelfAssignedDeclarationCodeQuality建议变量使用As New,它可以自动实例化并屏蔽Nothing检查。
UnreachableCodeCodeQuality警告退出子功能、结束或转到后的代码无法访问。
LineContinuationBetweenKeywordsCodeQuality警告行连续字符拆分复合关键字,降低可读性。
OnLocalErrorCodeQuality建议本地错误在功能上与错误相同。Local关键字是多余的。
StepNotSpecifiedCodeQualityhintFor循环未指定步骤。考虑添加一个显式的Step子句。
StepOneIsRedundantCodeQuality提示步骤1是for循环的默认值,并且是冗余的。
UnhandledOnErrorResumeNextErrorHandlingwarningOn Error Resume Next在没有相应的On Error GoTo 0的情况下用于重置错误处理。
OnErrorGoToMinusOneErrorHandlingwarningOn Error GoTo-1清除当前错误对象。确保这是故意的。
EmptyStringLiteral性能提示使用vbNullString而不是“”以获得更好的性能。
IsMissingOnInappropriateArgumentCodeQualityhintIsMissing仅适用于Optional Variant参数。验证参数类型。
IsMissingWithNonArgumentParameter使用非参数参数调用CodeQualitywarningIsMissing。IsMissing仅适用于程序参数。
ImplicitActiveSheetReferenceExcel建议未限定的区域/单元格/行/列隐式引用了ActiveSheet。
ImplicitActiveWorkbookReferenceExcel建议不合格的工作表/工作表/名称隐式引用ActiveWorkbook。
SheetAccessedUsingStringExcel建议按字符串名称访问工作表很脆弱。请改用工作表代号属性。
ApplicationWorksheetFunctionExcel提示应用程序。工作表功能冗余。直接使用工作表功能。
ExcelMemberMayReturnNothingExcel警告查找/FindNext/FindPrevious可能会返回“无”。使用前检查结果
ExcelUdfNameIsValidCellReferenceExcel警告函数名看起来像单元格引用(例如A1、B2),不能用作Excel公式中的UDF。

B级:符号感知检查(22)

这些检查需要符号解析(声明收集+参考解析)。它们在内联代码和工作区扫描上运行,工作区扫描提供跨模块解析。

ID类别严重性描述
VariableNotUsedCodeQuality警告变量已声明但从未被引用。
ParameterNotUsedCodeQuality建议参数已声明,但从未在过程体中引用。
NonReturningFunctionCodeQuality警告函数或属性Get从不分配返回值。
ConstantNotUsedCodeQuality警告常量已声明但从未被引用。
ProcedureNotUsedCodeQuality建议从不调用私有过程。
LineLabelNotUsedCodeQuality建议行标签已声明,但从未被GoTo或GoSub引用。
VariableNotAssignedCodeQuality警告变量被引用,但从未被赋值。
HungarianNotation命名建议变量名称使用匈牙利符号前缀。
UseMeaningfulName命名建议变量名太短,没有意义。
UnderscoreInPublicClassModuleMember命名警告公共成员名称包含下划线,这可能与VBA接口分派冲突。
ObjectVariableNotSetCodeQuality错误分配给不带Set关键字的对象变量。
IntegerDataTypeLanguageOpportunities建议使用整数类型——现代VBA中首选Long。
VariableTypeNotDeclaredLanguageOpportunities建议变量声明时没有显式类型(隐式变量)。
ModuleScopeDimKeywordCodeQuality建议模块级变量使用Dim而不是Private。
EncapsulatePublicFieldCodeQuality建议类模块中的公共变量应使用Property过程。
MoveFieldCloserToUsageCodeQuality建议模块级变量仅在一个过程中使用--可以是本地变量。
FunctionReturnValueNotUsedCodeQuality建议函数返回值总是被调用者丢弃。
FunctionReturnValueAlwaysDiscardedCodeQuality建议函数返回值从不在任何调用站点使用——考虑转换为Sub
ProcedureCanBeWrittenAsFunctionLanguageOpportunities建议将子赋值给ByRef参数--可以改为Function。
ExcessiveParametersCodeQuality建议过程参数太多。
ParameterCanBeByValCodeQuality建议ByRef参数从未分配给--可能是ByVal。
UnassignedVariableUsageCodeQuality警告变量在赋值之前已被使用。

配置

主机库

hostLibraries 参数控制运行哪些特定于主机的检查。默认值为 ["excel"].Excel特定检查(ImplicitActiveSheetReference等)仅在以下情况下运行 "excel" 包括在内。

.vbalintignore

对于工作区扫描,创建 .vbalintignore 使用glob模式排除文件的文件:

# Ignore generated code
generated/**
*.generated.bas

# Ignore test fixtures
test/**

计划功能

设计了以下功能,但 尚未实现:

.vbalintrc.json (计划中)

用于自定义严重性覆盖和默认主机库的项目级配置文件:

{
  "hostLibraries": ["excel"],
  "severity": {
    "EmptyIfBlock": "error",
    "StepNotSpecified": "off"
  }
}

@Ignore 注释抑制(计划中)

使用VBA注释注释内联抑制特定检查:

'@Ignore EmptyIfBlock
If condition Then
End If

'@Ignore EmptyIfBlock, ObsoleteLetStatement

码头工人

构建

docker build -t vba-lint-mcp .

使用Docker Compose运行

docker compose build
docker compose run --rm vba-lint

MCP服务器使用stdio传输(stdin/stdout JSON-RPC),因此必须以交互方式运行(docker compose run),未分离(docker compose up).

装载VBA文件以进行工作区扫描

编辑 docker-compose.yml 要装载VBA项目目录,请执行以下操作:

services:
  vba-lint:
    build: .
    stdin_open: true
    volumes:
      - ./my-vba-project:/data:ro

然后使用 vba/inspect-workspace 工具与 path: "/data".

图像大小

运行时映像使用 node:22-alpine 非root用户。包含源文件以符合GPL-3.0标准。

发展

设置

npm install
npm run generate-parser   # Requires Java 17+
npm run build

测试

npm test                  # All tests
npm run test:watch        # Watch mode
npx vitest run 
     # Specific test

添加检查

贡献.md 获取添加新检查的分步指南。

项目结构

src/
  server.ts              # MCP server entry point
  inspections/
    base.ts              # Inspection contracts
    registry.ts          # Master registration
    runner.ts            # Tiered execution engine
    parse-tree/          # Tier A inspections (by category)
    declaration/         # Tier B inspections
  parser/                # ANTLR4 parser facade
  symbols/               # Symbol resolution (Tier B)
  annotations/           # @Ignore annotation parsing
grammar/
  VBALexer.g4            # ANTLR4 lexer grammar (from Rubberduck)
  VBAParser.g4           # ANTLR4 parser grammar (from Rubberduck)

已知限制

  • 条件编译 (#If, #Const, #Else)未进行预处理。所有分支都被解析为活动代码,这可能会在使用条件编译的模块中产生误报。
  • C级检查 (COM类型库依赖、Rubberduck注释系统、VBE运行时)超出范围。看 计划.md 查看完整列表。

归因

这个项目是 橡胶鸭VBAVBA语法和检查逻辑是从Rubberduck的C#代码库翻译而来的。

版权所有(C)Rubberduck贡献者 --根据GPL-3.0获得许可。

属性.md 完整的归因、衍生作品表和贡献者确认。

许可证

该项目根据 GNU通用公共许可证v3.0。参见 许可证 全文。

根据GPL-3.0:

  • 所有派生检查逻辑都保留了Rubberduck VBA的属性
  • 每个派生文件都包含一个每个文件的版权标头
  • Docker镜像包含完整的源代码(GPL-3.0第6节)
  • 本项目的消费者必须遵守GPL-3.0条款

目录标签

目录标签

TypeScriptClaude代码质量VBA本地部署代码检查静态分析MCP协议

支持客户端

Claude

接入字段

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

stdio

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

none

运行时(runtime,运行环境)

Node.js

来源包(packageName,安装包名)

vitest

工具数量(toolCount,工具数)

4

资源数量(resourceCount,资源数)

0

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

0

权限和风险

stdionone部署方式未说明

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

安装前确认

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

来源信息

继续浏览同类 MCP