使用说明
Vitest复盖MCP服务器v2.0
🚀 概述
一个强大的 模型上下文协议(MCP)服务器 自动实现 100%Vitest覆盖率 React Vite项目。此增强版本包括AI驱动的测试生成、性能分析、CI/CD工作流生成和全面的覆盖率分析。
✨ 特性
核心功能
- 🔧 自动Vitest设置 -安装并配置Vitest的100%覆盖阈值
- 📊 覆盖率分析 -运行详细的覆盖率分析并识别未覆盖的代码
- 🧪 测试生成 -为React组件创建全面的测试文件
🆕 高级功能(v2.0)
- 🤖 AI驱动的测试编写器 -使用OpenAI GPT生成高质量、上下文感知的测试
- 📈 保险范围差异和徽章 -生成SVG徽章,显示分支之间的覆盖范围变化
- ⚡ 测试性能分析器 -识别慢速测试并提供优化建议
- 🔄 CI/CD工作流生成器 -创建GitHub操作和GitLab CI配置
- 🏗️ 插件架构 -用于动态添加新工具的可扩展系统
- 📝 结构化日志记录 -基于Pino的日志记录,具有请求跟踪和错误处理功能
- 🐳 Docker支持 -使用Redis进行完全容器化缓存
- 📱 增强型API -具有详细健康检查的全面RESTful端点
🛠️ 安装
快速启动(开发)
git clone <repository-url>
cd vitest-mcp-server
npm install
npm run dev # Starts server on http://localhost:3000
Docker安装程序(推荐)
# Build and run with docker-compose
docker-compose up --build
# Or build manually
docker build -t vitest-mcp-server .
docker run -p 3000:3000 -v $(pwd)/projects:/app/projects vitest-mcp-server
环境变量
# LLM Provider Configuration (choose one)
# OpenAI (default)
export OPENAI_API_KEY=your_openai_api_key
# LM Studio
export LLM_PROVIDER=lmstudio
export LMSTUDIO_BASE_URL=http://localhost:1234
# Ollama
export LLM_PROVIDER=ollama
export OLLAMA_BASE_URL=http://localhost:11434
# llama.cpp Server
export LLM_PROVIDER=llamacpp
export LLAMACPP_BASE_URL=http://localhost:8080
# MLX (Apple Silicon)
export LLM_PROVIDER=mlx
export LLM_MODEL=/path/to/your/model
# Common settings for all providers
export PORT=3000
export LOG_LEVEL=info
export NODE_ENV=production
📚 API 文档
健康和状态端点
GET /health-使用配置信息进行详细的服务器健康检查GET /api-API信息和可用端点
核心工具端点(通过插件系统)
POST /setup-vitest-在项目中初始化VitestPOST /analyze-coverage-运行覆盖率分析并找出差距POST /generate-tests-为未覆盖的组件创建基本测试文件
🆕 高级工具端点
POST /ai-generate-tests-生成AI驱动的测试(需要OpenAI API密钥)POST /coverage-diff-比较分支机构之间的覆盖范围GET /coverage-badge.svg-为覆盖范围变化生成SVG徽章GET /profile-tests-分析测试性能并确定瓶颈POST /generate-workflow-创建CI/CD工作流配置
AI特定端点
GET /ai-health-检查当前LLM提供程序配置和连接
🤖 LLM提供程序配置
该服务器支持多个LLM提供商,使您可以灵活地使用云服务或在本地运行模型,以保护隐私和节省成本。
支持的提供商
1. 开放人工智能 (默认)
具有GPT模型的基于云的API。
export LLM_PROVIDER=openai
export OPENAI_API_KEY=your_api_key_here
export LLM_MODEL=gpt-4o-mini # or gpt-3.5-turbo
export OPENAI_BASE_URL=https://api.openai.com/v1
mcp.config.json中的配置:
{
"llmProvider": {
"type": "openai",
"baseUrl": "https://api.openai.com/v1",
"model": "gpt-4o-mini",
"apiKey": "${OPENAI_API_KEY}",
"maxTokens": 2000,
"temperature": 0.2
}
}
2. LM 工作室
用于使用与OpenAI兼容的API运行本地模型的桌面应用程序。
设置:
- 下载 LM 工作室
- 加载本地模型(例如,Llama 2、CodeLlama、Mistral)
- 启动服务器(默认值:http://localhost:1234)
export LLM_PROVIDER=lmstudio
export LMSTUDIO_BASE_URL=http://localhost:1234
export LLM_MODEL=local-model-name
mcp.config.json中的配置:
{
"llmProvider": {
"type": "lmstudio",
"baseUrl": "http://localhost:1234",
"model": "llama-2-7b-chat",
"maxTokens": 2000,
"temperature": 0.2
}
}
3. 奥拉玛
本地LLM的轻量级容器化。
设置:
- 安装 奥拉玛
- 拉一个模型:
ollama pull llama2 - 服务器在上运行http://localhost:11434
export LLM_PROVIDER=ollama
export OLLAMA_BASE_URL=http://localhost:11434
export LLM_MODEL=llama2
mcp.config.json中的配置:
{
"llmProvider": {
"type": "ollama",
"baseUrl": "http://localhost:11434",
"model": "llama2",
"maxTokens": 2000,
"temperature": 0.2
}
}
4. llama.cpp服务器
使用HTTP服务器对LLM进行高性能推理。
设置:
- 构建支持服务器的llama.cpp
- 启动HTTP服务器:
./server -m model.gguf -host 0.0.0.0 -port 8080
export LLM_PROVIDER=llamacpp
export LLAMACPP_BASE_URL=http://localhost:8080
export LLM_MODEL=model.gguf
mcp.config.json中的配置:
{
"llmProvider": {
"type": "llamacpp",
"baseUrl": "http://localhost:8080",
"model": "codellama-7b.gguf",
"maxTokens": 2000,
"temperature": 0.2
}
}
5. 玻璃直线磨斜边机 (苹果硅)
苹果的机器学习框架,用于在M1/M2芯片上进行高效推理。
设置:
- 按照以下步骤安装MLX Apple的文档
- 确保您的模型可以在本地访问
- 安装MLX Python包:
pip install mlx-lm
export LLM_PROVIDER=mlx
export LLM_MODEL=/path/to/your/model
mcp.config.json中的配置:
{
"llmProvider": {
"type": "mlx",
"model": "./models/llama-2-7b-mlx",
"maxTokens": 2000,
"temperature": 0.2
}
}
提供商选择方法
方法1:环境变量(推荐)
集 LLM_PROVIDER 要指定您选择的提供商,请执行以下操作:
export LLM_PROVIDER=lmstudio # or ollama, llamacpp, mlx, openai
方法2:配置文件
编辑 mcp.config.json 并设置 llmProvider.type 现场。
方法3:健康检查端点
测试提供商连接:
curl http://localhost:3000/ai-health
提供商健康监控
所有医疗服务提供者都支持通过 /ai-health 端点:
- 开放人工智能:验证API密钥和模型的可用性
- LM Studio/ollama/calla.cpp:检查服务器连接
- 玻璃直线磨斜边机:验证Python环境和模型可访问性
提供商的模型建议
| 用例 | 推荐型号 |
|---|---|
| 代码生成 | CodeLlama、StarCoder、DeepSeek编码器 |
| 通用 | 火焰2/3,米斯特拉尔,米斯特拉尔 |
| 低资源 | TinyLama,Phi-2/3 |
| 高质量 | 火焰370B,GPT-4,克劳德 |
性能注意事项
| 提供者 | 速度 | 资源使用率 | 质量 |
|---|---|---|---|
| 开放人工智能 | ⚡⚡⚡ | 💰 API成本 | ⭐⭐⭐⭐⭐ |
| LM 工作室 | ⚡⚡ | 💻 本地CPU/GPU | ⭐⭐⭐⭐ |
| 奥拉玛 | ⚡⚡ | 🐳 Docker+本地⭐⭐⭐ | |
| llama.cpp | ⚡⚡⚡ | 🔧 优化的C++⭐⭐⭐ | |
| 玻璃直线磨斜边机 | ⚡⚡⚡🍎 | 🍎 仅限苹果硅⭐⭐⭐⭐ |
本地LLM故障排除
常见问题:
- 连接被拒绝:确保您的本地服务器在正确的端口上运行
- 未找到型号:验证模型名称和文件路径是否正确
- 内存不足:尝试较小的型号或增加系统RAM
- 慢世代:检查CPU/GPU利用率并考虑量化模型
调试命令:
# Test LM Studio connectivity
curl http://localhost:1234/v1/models
# Test Ollama connectivity
curl http://localhost:11434/api/tags
# Check llama.cpp server health
curl http://localhost:8080/health
# Verify MLX installation
python3 -c "import mlx_lm; print('MLX installed correctly')"
🎯 用法示例
基本工作流程
# 1. Setup Vitest in your project
curl -X POST http://localhost:3000/setup-vitest \
-H "Content-Type: application/json" \
-d '{"projectPath":"/path/to/your/react-vite-project"}'
# 2. Analyze current coverage
curl -X POST http://localhost:3000/analyze-coverage \
-H "Content-Type: application/json" \
-d '{"projectPath":"/path/to/your/react-vite-project"}'
# 3. Generate tests for uncovered files
curl -X POST http://localhost:3000/generate-tests \
-H "Content-Type: application/json" \
-d '{"projectPath":"/path/to/your/react-vite-project"}'
高级AI驱动的工作流程(任何LLM提供商)
# Generate high-quality tests using your configured LLM provider
curl -X POST http://localhost:3000/ai-generate-tests \
-H "Content-Type: application/json" \
-d '{
"projectPath": "/path/to/your/react-vite-project",
"uncoveredFiles": [
{"file": "src/components/Button.tsx", "type": "statement"},
{"file": "src/pages/Home.tsx", "type": "function"}
]
}'
覆盖范围分析和徽章
# Generate coverage diff between current and main branch
curl -X POST http://localhost:3000/coverage-diff \
-H "Content-Type: application/json" \
-d '{"baseBranch": "main"}'
# Get coverage change badge (SVG)
curl http://localhost:3000/coverage-badge.svg > coverage-delta.svg
性能分析
# Analyze test performance and get recommendations
curl http://localhost:3000/profile-tests | jq '.recommendations'
CI/CD工作流生成
# Generate GitHub Actions workflow
curl -X POST http://localhost:3000/generate-workflow \
-H "Content-Type: application/json" \
-d '{"platform": "github", "projectName": "my-react-app"}'
🔧 配置
mcp.config.json
服务器支持通过以下方式进行可选配置 mcp.config.json:
{
"projectRoot": "/Volumes/Ddrive/LMStudioOutput/vitest-mcp-server",
"port": 3000,
"logLevel": "info",
"coverageThresholds": {
"statements": 100,
"branches": 100,
"functions": 100,
"lines": 100
},
"openaiKeyEnvVar": "OPENAI_API_KEY",
"corsOrigins": ["http://localhost:3000"],
"aiModel": {
"name": "gpt-4o-mini",
"temperature": 0.2,
"maxTokens": 2000
}
}
🏗️ 插件架构
服务器使用动态插件系统。要添加新工具,请执行以下操作:
- 在中创建新文件
src/tools/ - 使用以下命令导出默认对象:
export default { name: 'my-tool-name', router(app: Express) { app.post('/my-endpoint', async (req, res) => { // Your tool logic here }); } }; - 该工具将自动加载和注册
📊 覆盖率分析功能
详细报告
- 未披露的声明 -逐行报表覆盖率分析
- 分支覆盖 -条件分支分析
- 功能覆盖范围 -功能级覆盖指标
- 文件级分析 -按文件覆盖率细分
可视化工具
- HTML覆盖率报告 -服务于
/coverage端点 - SVG徽章 -动态覆盖变化徽章
- JSON报告 -机器可读覆盖数据
🤖 AI测试生成
特性
- 多LLM支持 -与OpenAI、LM Studio、Ollama、llama.cpp和MLX合作
- 上下文感知 -分析组件结构和支撑
- 高质量测试 -使用React测试库最佳实践
- 边缘保护壳覆盖范围 -自动处理常见场景
- 快照测试 -在适当的时候包括快照测试
需求
- 任何LLM提供者 -OpenAI API密钥、LM Studio服务器、Ollama安装、llama.cpp服务器或MLX设置
- 有效的React组件文件(.tsx/.jsx)
- 允许相对进口的项目结构
⚡ 性能分析
测试分析
- 执行时间跟踪 -每次测试持续时间分析
- 瓶颈识别 -查找运行缓慢的测试
- 优化建议 -提出改进建议
- 套件分析 -按组织测试套件分组
建议包括
- 测试时间过长(>2s)
- 并行化候选人
- 仅呈现测试中缺少断言
- 潜在的测试拆分机会
🔄 CI/CD集成
支持平台
- GitHub操作 -完整的工作流程,包括覆盖率报告
- GitLab 的 -多级管道配置
生成的工作流包括
- Node.js矩阵测试(18.x,20.x)
- 自动向Codecov报告覆盖范围
- 覆盖报告的工件上传
- 带有报道信息的公关评论
- 100%覆盖阈值强制执行
🐳 Docker配置
服务包括
- MCP服务器 -主应用程序容器
- Redis堆栈 -缓存和会话管理(可选)
- RedisInsight -数据库可视化工具
卷
mcp_data-应用程序数据持久性redis_data-Redis数据持久化./projects:/app/projects:ro-项目分析(只读装载)
📈 监控和记录
结构化日志记录
- 基于Pino -带时间戳的JSON结构化日志
- 请求跟踪 -所有记录了持续时间的HTTP请求
- 错误跟踪 -用于调试的堆栈跟踪和上下文
- 可配置级别 -调试、信息、警告、错误
健康监测
- 正常运行时间跟踪
- 功能可用性检查
- 配置验证
- 外部服务连接(OpenAI、Redis)
🧪 测试服务器
演示工作流脚本
# Run the complete demo workflow
./scripts/demo-workflow.sh /path/to/your/react-project
# With OpenAI API key for AI features
export OPENAI_API_KEY=your_key_here
./scripts/demo-workflow.sh /path/to/your/react-project
手动测试
# Check server health
curl http://localhost:3000/health | jq
# Test basic functionality
npm run setup # Setup Vitest in current project
npm run coverage # Run coverage analysis
npm run ai-test # Generate AI tests (if OpenAI configured)
npm run profile-tests # Analyze test performance
🚀 部署
生产注意事项
- 集
NODE_ENV=production - 配置适当的日志记录级别
- 设置监控和警报
- 对敏感数据使用环境变量
- 在高流量场景中考虑使用Redis进行缓存
扩展
- 无状态设计允许水平扩展
- Redis可用于跨实例共享缓存
- 负载平衡器与健康检查端点友好
🤝 贡献
开发设置
git clone <repository>
cd vitest-mcp-server
npm install
npm run dev # Development mode with hot reload
添加新功能
- 在中创建插件
src/tools/ - 为插件添加测试
- 更新文档
- 提交拉取请求
📝 许可证
MIT-有关详细信息,请参阅许可证文件。
🆘 支持
- 文档:此README和内联代码注释
- 问题:GitHub错误报告和功能请求问题
- 讨论:GitHub问题和想法讨论
由以下材料制成❤️ React测试社区
服务器提供三个主要功能:
- 设置Vitest –安装和配置Vitest、React测试库和必要的覆盖阈值。
- 分析覆盖范围 –在启用覆盖的情况下运行Vitest,解析生成的
coverage-final.json,以及未发现报表/分支/功能的报告。 - 生成测试 自动为未覆盖的React组件创建骨架测试文件,确保每个组件至少有一个基本的渲染测试。
通过链接这些端点,您可以迭代到 全面覆盖 (100%语句、分支、函数和行)由Vitest强制执行 coverage 配置。
先决条件
- Node.js>=18(推荐)
- npm或Yarn已在全球范围内安装
- 一个你想提高覆盖率的React Vite项目
安装
# Clone this repo (or copy the files into your project)
git clone https://github.com/your-org/vitest-coverage-mcp-server.git
cd vitest-coverage-mcp-server
# Install server dependencies npx npm install # or `yarn`
构建并运行服务器
# Compile TypeScript
npm run build
# Start the server (default port 3000)
npm start
服务器将在以下位置可访问 http://localhost:3000.
API终点
所有端点都接受 JSON payloads并返回JSON响应。
1.健康检查
GET /health
答复:
{ "status": "ok", "timestamp": "2025-11-11T12:34:56.789Z" }
2.设置Vitest
POST /setup-vitest
Content-Type: application/json
{
"projectPath": "/absolute/path/to/your/react-vite-project"
}
- 安装
vitest,@testing-library/react,以及@vitejs/plugin-react如果他们失踪了。 - 生成默认值
vitest.config.ts(如果不存在) 100%覆盖阈值. - 创建
src/setupTests.ts用于全局测试设置。
响应(示例):
{ "success": true, "result": { "message": "Vitest setup complete", "stdout": "..." } }
3.分析覆盖范围
POST /analyze-coverage
Content-Type: application/json
{
"projectPath": "/absolute/path/to/your/react-vite-project"
}
- 执行
vitest run --coverage. - 解析生成的覆盖率报告(
coverage/coverage-final.json). - 返回未覆盖项的列表。
响应(示例):
{
"success": true,
"uncovered": [
{"file":"src/components/Button.tsx","type":"statement","id":"12"},
{"file":"src/pages/Home.tsx","type":"function","id":"4"}
],
"coveragePath": "/absolute/path/to/project/coverage/coverage-final.json"
}
4.生成测试
POST /generate-tests
Content-Type: application/json
{
"projectPath": "/absolute/path/to/your/react-vite-project",
"uncoveredFiles": ["src/components/Button.tsx", "src/pages/Home.tsx"]
}
- 如果
uncoveredFiles如果省略,服务器将首先调用 分析覆盖范围 查找丢失的文件。 - 创建一个
__tests__/目录镜像源代码树。 - 对于每个未覆盖的React组件,一个基本测试文件
<Component>.test.tsx使用生成 React测试库:import { render } from '@testing-library/react'; import Button from '../../src/components/Button'; test('renders Button without crashing', () => { const { container } = render(<Button />); expect(container).toBeTruthy(); }); - 现有测试文件为 未被覆盖.
响应(示例):
{ "success": true, "generatedTestFiles": ["/project/__tests__/components/Button.test.tsx"] }
实现100%覆盖的完整工作流程
# 1️⃣ Setup Vitest in your project (run once)
curl -X POST http://localhost:3000/setup-vitest \
-H "Content-Type: application/json" \
-d '{"projectPath":"/path/to/react-vite-project"}'
# 2️⃣ Run coverage analysis and generate tests repeatedly until no uncovered items remain.
while true; do
# Analyze coverage & capture uncovered files
UNCOVERED=$(curl -s -X POST http://localhost:3000/analyze-coverage \
-H "Content-Type: application/json" \
-d '{"projectPath":"/path/to/react-vite-project"}' | jq -r '.uncovered[].file')
if [ -z "$UNCOVERED" ]; then
echo "✅ All files covered!"
break
fi
# Generate tests for uncovered files
curl -X POST http://localhost:3000/generate-tests \
-H "Content-Type: application/json" \
-d "{\"projectPath\":\"/path/to/react-vite-project\", \"uncoveredFiles\":[$(printf '"%s",
' $UNCOVERED | tr -d '\n')]}"
done
循环将继续创建骨架测试,重新运行覆盖率,并停止一次 100% 达到阈值。
高级定制
- 自定义测试模板 –编辑
src/tools/generateTests.ts修改测试支架。 - 不同的覆盖阈值 –更改
vitest.config.ts在...之下coverage部分。 - 身份验证/速率限制 –如果公开服务器,则使用中间件包装Express路由。
故障排除
| 问题 | 原因 | 修复 |
|---|---|---|
vitest: command not found |
Vitest未全局安装。 | 运行 /setup-vitest 终结点或手动安装: npm i -D vitest. |
| 覆盖率报告缺失 | Vitest未运行 --coverage 或者该项目使用自定义测试运行器。 |
确保你打电话 /analyze-coverage;它迫使 vitest run --coverage. |
| 生成的测试无法编译 | 组件使用了基本导入未涵盖的TypeScript功能。 | 手动调整生成的测试或扩展 generateTests.ts 处理道具和背景。 |
许可证
麻省理工学院-您可以自由地分叉、修改和集成到您自己的CI管道中。
贡献
- 分叉回购
- 创建要素分支(
git checkout -b feat/xyz) - 添加您的更改并运行
npm test - 提交拉取请求
