🚀 最佳实践MCP服务器
这是一个模型上下文协议(MCP)服务器,它能让AI代理访问多种编程语言和框架的开发最佳实践、安全指南和编码标准。
🚀 快速开始
安装
- 克隆仓库:
git clone https://github.com/abderrahimghazali/bestpractices_mcp.git
cd bestpractices_mcp
- 创建并激活虚拟环境:
python -m venv venv
source venv/bin/activate
- 安装依赖:
pip install -r requirements.txt
- 复制环境配置文件:
cp .env.example .env
运行服务器
独立可执行文件方式
./bestpractices-server
通过Python模块方式
source venv/bin/activate
python -m src.server
测试
运行测试套件:
python -m pytest tests/ -v
✨ 主要特性
- 插件架构:可扩展系统,便于添加新的语言和框架。
- 内存存储:快速的内存数据存储,支持即时查询。
- 动态CSV加载:自动从插件数据目录加载所有CSV文件。
- 284+条编码标准:全面涵盖安全、可访问性、性能和最佳实践等方面。
- MCP工具:四个用于查询标准的工具:
get_standards
:按类别、子类别和严重程度过滤。
search_standards
:对所有标准进行全文搜索。
get_categories
:列出所有可用的类别。
get_standard_by_id
:获取特定标准的详细信息。
📦 安装指南
安装步骤
- 克隆仓库:
git clone https://github.com/abderrahimghazali/bestpractices_mcp.git
cd bestpractices_mcp
- 创建并激活虚拟环境:
python -m venv venv
source venv/bin/activate
- 安装依赖:
pip install -r requirements.txt
- 复制环境配置文件:
cp .env.example .env
💻 使用示例
基础用法
import subprocess
import json
proc = subprocess.Popen(
["/path/to/bestpractices_mcp/bestpractices-server"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
text=True
)
request = {
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "get_standards",
"arguments": {
"category": "drupal_security",
"severity": "critical"
}
},
"id": 1
}
proc.stdin.write(json.dumps(request) + "\n")
proc.stdin.flush()
response = json.loads(proc.stdout.readline())
print(response)
高级用法
可以根据不同的需求,灵活组合MCP工具的参数进行查询。例如,使用search_standards
工具进行全文搜索时,可以指定搜索的类别和标签:
import subprocess
import json
proc = subprocess.Popen(
["/path/to/bestpractices_mcp/bestpractices-server"],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
text=True
)
request = {
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "search_standards",
"arguments": {
"query": "SQL injection",
"categories": ["drupal_security"],
"tags": ["security"]
}
},
"id": 1
}
proc.stdin.write(json.dumps(request) + "\n")
proc.stdin.flush()
response = json.loads(proc.stdout.readline())
print(response)
📚 详细文档
包含的标准
服务器目前包含284+条跨多个类别的编码标准:
Drupal标准(263条标准)
- 编码标准(130+条标准):PHP标准、PSR - 4合规性、命名约定、代码组织、文档。
- 安全(70条标准):SQL注入、XSS、CSRF、访问控制、文件上传、身份验证、输入验证。
- 最佳实践(16条标准):字段API、依赖注入、配置管理、实体处理。
- 前端(11条标准):主题开发、响应式设计、CSS/JS聚合、Twig模板。
- 可访问性(8条标准):WCAG合规性、ARIA属性、语义HTML、键盘导航。
- 测试(7条标准):PHPUnit、Behat、功能测试、测试覆盖率、模拟。
- 文档(7条标准):代码注释、README文件、API文档、DocBlocks。
- API(6条标准):REST、JSON:API、GraphQL最佳实践、HTTP方法。
- 构建(6条标准):构建过程、优化、资产管理。
- DevOps(6条标准):CI/CD、部署、环境管理、GitHub Actions。
- 数据库(5条标准):模式设计、迁移、查询优化、数据库API。
- 集成(5条标准):第三方集成、外部服务、API。
- Git(4条标准):Git工作流、提交消息、分支策略。
- JavaScript(3条标准):Drupal行为、现代JS模式、优化。
- 配置(1条标准):配置管理。
- 表单(1条标准):表单API和处理。
- 钩子(1条标准):钩子实现。
- Twig(1条标准):模板最佳实践。
OWASP标准(20条标准)
- OWASP Top 10 2021:关键安全漏洞,包括访问控制破坏、加密失败、注入攻击、不安全设计、安全配置错误、易受攻击的组件、身份验证失败、软件完整性失败、日志记录失败和服务器端请求伪造。
项目结构
bestpractices_mcp/
├── src/
│ ├── server.py # MCP服务器实现
│ ├── config.py # 配置管理
│ ├── plugins/ # 插件系统
│ │ ├── base.py # 基础插件类
│ │ ├── manager.py # 插件管理器
│ │ └── drupal.py # Drupal标准插件
│ └── data/ # 数据存储层
│ ├── database.py # 兼容性包装器
│ └── memory_store.py # 内存数据存储
├── data/ # 标准数据文件
│ ├── drupal/
│ │ └── drupal_standards.csv
│ └── owasp/
│ ├── owasp_top10_2021.csv
│ └── OWASP_RESOURCES.md
├── tests/ # 测试套件
├── requirements.txt # Python依赖项
└── README.md # 本文件
添加新的标准
1. 添加到现有插件
在插件的数据目录(data/{plugin_name}/*.csv
)中创建或编辑任何CSV文件。插件将自动加载所有CSV文件:
id,category,subcategory,title,description,severity,examples,references,tags,rationale,fix_guidance
NEW001,drupal_security,new_issue,New Security Issue,Description here,high,"{""good"": ""example"", ""bad"": ""example""}","[""https://example.com""]",security|new,Why this matters,How to fix it
注意:Drupal插件会动态加载data/drupal/
中的所有CSV文件,因此你可以将标准组织到多个文件中(例如,security_standards.csv
、performance_standards.csv
等)。
2. 创建新插件
- 在
src/plugins/
中创建一个新的插件文件:
from .base import StandardsPlugin, Standard
class MyPlugin(StandardsPlugin):
@property
def name(self) -> str:
return "myplugin"
- 创建数据目录和CSV文件:
mkdir data/myplugin
MCP客户端配置
Claude桌面版
在你的Claude桌面版配置文件(在macOS上为~/Library/Application Support/Claude/claude_desktop_config.json
)中添加以下内容:
{
"mcpServers": {
"bestpractices": {
"command": "/path/to/bestpractices_mcp/bestpractices-server"
}
}
}
添加配置后,重启Claude桌面版。
带有Continue.dev的VSCode
Continue.dev是一个支持MCP服务器的VSCode AI编码助手。
- 在VSCode中安装Continue扩展。
- 打开Continue的配置文件(
~/.continue/config.json
)。
- 添加MCP服务器配置:
{
"models": [...],
"mcpServers": {
"bestpractices": {
"command": "/path/to/bestpractices_mcp/bestpractices-server"
}
}
}
Cursor编辑器
Cursor通过其AI配置支持MCP服务器:
- 打开Cursor设置(在macOS上按Cmd + ,)。
- 导航到“AI” → “模型上下文协议”。
- 添加服务器配置:
{
"bestpractices": {
"command": "/path/to/bestpractices_mcp/bestpractices-server",
"description": "Drupal编码标准和最佳实践"
}
}
Zed编辑器
对于具有AI助手功能的Zed编辑器:
- 打开Zed设置(
~/.config/zed/settings.json
)。
- 添加到助手配置中:
{
"assistant": {
"mcp_servers": {
"bestpractices": {
"command": "/path/to/bestpractices_mcp/bestpractices-server"
}
}
}
}
通用MCP客户端配置
对于任何与MCP兼容的客户端,使用以下设置:
- 命令:
/path/to/bestpractices_mcp/bestpractices-server
- 协议:stdio(标准输入/输出)
- 传输:通过stdio的JSON - RPC
- 初始化:不需要特殊参数
可用的MCP工具
1. get_standards
使用过滤器查询编码标准:
- category:按类别过滤(例如,“drupal_security”,“drupal_performance”)。
- subcategory:按子类别过滤(例如,“sql_injection”,“xss”)。
- severity:按严重程度级别过滤(“critical”,“high”,“medium”,“low”,“info”)。
- limit:最大结果数(默认:50)。
示例查询:“给我展示所有Drupal的关键安全标准”
2. search_standards
对所有标准进行全文搜索:
- query:搜索文本(必需)。
- categories:要搜索的类别列表(可选)。
- tags:要过滤的标签列表(可选)。
- limit:最大结果数(默认:50)。
示例查询:“搜索关于SQL注入的标准”
3. get_categories
列出所有可用的类别及其描述和数量。
示例查询:“有哪些类别的标准可用?”
4. get_standard_by_id
获取特定标准的详细信息:
- standard_id:唯一标识符(例如,“DS001”,“SEC001”)。
示例查询:“给我展示标准DS001的详细信息”
AI助手的示例提示
使用此服务器的MCP客户端时,你可以询问:
- “我在Drupal开发中应该遵循哪些关键安全标准?”
- “给我展示Drupal表单的最佳实践”
- “搜索关于缓存和性能的标准”
- “我应该如何处理用户输入以防止XSS攻击?”
- “使用Drupal数据库API的正确方法是什么?”
- “列出所有可访问性标准”
- “给我展示SQL查询的好坏代码示例”
- “OWASP Top 10 2021漏洞有哪些以及如何预防?”
- “给我展示所有类别的关键安全标准”
- “搜索关于访问控制破坏的标准”
贡献
- 分叉仓库。
- 创建一个功能分支。
- 添加你的更改。
- 编写测试。
- 提交拉取请求。
🔧 技术细节
插件架构
采用可扩展的插件架构,便于添加新的语言和框架。插件系统通过动态加载CSV文件来管理编码标准。
内存存储
使用快速的内存数据存储,实现即时查询。数据存储在内存中,提高了查询效率。
动态CSV加载
插件会自动加载数据目录中的所有CSV文件,方便管理和更新编码标准。
📄 许可证
本项目采用MIT许可证,详情请参阅LICENSE文件。