Skip to main content
Glama
cpp_style_server.py8.41 kB
""" C++ 编码规范 MCP 服务器 提供 C++ 代码规范检查、最佳实践建议和代码审查支持。 """ from mcp.server.fastmcp import FastMCP # 导入工具模块 from cpp_style.tools.naming_checker import get_checker as get_naming_checker from cpp_style.tools.include_guard_checker import get_checker as get_include_guard_checker from cpp_style.tools.memory_safety import get_analyzer as get_memory_analyzer from cpp_style.tools.modern_cpp import get_suggester as get_modern_cpp_suggester from cpp_style.tools.const_checker import get_checker as get_const_checker # 导入资源模块 from cpp_style.resources.naming_rules import get_resource as get_naming_resource from cpp_style.resources.best_practices import get_resource as get_practices_resource from cpp_style.resources.cpp_standards import get_resource as get_standards_resource from cpp_style.resources.design_patterns import get_resource as get_patterns_resource # 导入提示模块 from cpp_style.prompts.code_review import get_prompt as get_code_review_prompt from cpp_style.prompts.refactor_suggestion import get_prompt as get_refactor_prompt # 创建 MCP 服务器实例 mcp = FastMCP("C++ Style Guide Server") # ==================== Tools ==================== @mcp.tool() def check_naming(identifier: str, category: str) -> str: """ 检查 C++ 标识符命名是否符合规范 参数: identifier: 要检查的标识符名称 category: 标识符类别,可选值: - variable: 变量 - constant: 常量 - function: 函数 - class: 类 - namespace: 命名空间 - member_variable: 成员变量 - template_parameter: 模板参数 - file_naming: 文件命名 返回: 检查结果,包含是否符合规范、详细说明和建议 """ checker = get_naming_checker() is_valid, details, suggestions = checker.check_naming(identifier, category) result = details if suggestions: result += f"\n推荐使用:\n" for sug in suggestions: result += f" • {sug}\n" return result @mcp.tool() def check_include_guard(code: str, file_path: str = "") -> str: """ 检查 C++ 头文件的包含保护是否正确 参数: code: 头文件的完整代码 file_path: 可选的文件路径,用于生成建议的保护宏名 返回: 检查结果,包含是否符合规范、详细说明和建议 """ checker = get_include_guard_checker() file_path_param = file_path if file_path else None is_valid, details, suggestions = checker.check_include_guard(code, file_path_param) result = details if suggestions and not is_valid: result += f"\n建议的保护宏名:\n" for sug in suggestions: result += f" • {sug}\n" return result @mcp.tool() def analyze_memory_safety(code: str) -> str: """ 分析 C++ 代码中的内存安全问题 参数: code: 要分析的 C++ 代码 返回: 内存安全分析报告,包括潜在的内存泄漏、悬空指针、不安全操作等 """ analyzer = get_memory_analyzer() issues, report = analyzer.analyze_memory_safety(code) return report @mcp.tool() def suggest_modern_cpp(code: str, target_standard: str = "cpp17") -> str: """ 建议将代码升级为现代 C++ 写法 参数: code: 要分析的 C++ 代码 target_standard: 目标 C++ 标准,可选值: - cpp11: C++11 - cpp14: C++14 - cpp17: C++17 (默认) - cpp20: C++20 - cpp23: C++23 返回: 现代化建议报告,包括可以使用的新特性和重写示例 """ suggester = get_modern_cpp_suggester() suggestions, report = suggester.suggest_modern_cpp(code, target_standard) return report @mcp.tool() def check_const_correctness(code: str) -> str: """ 检查 C++ 代码中的 const 正确性 参数: code: 要检查的 C++ 代码 返回: const 正确性检查报告,包括缺少 const 的地方和改进建议 """ checker = get_const_checker() issues, report = checker.check_const_correctness(code) return report # ==================== Resources ==================== @mcp.resource("cpp-style://naming/{category}") def get_naming_convention(category: str) -> str: """ 获取 C++ 命名规范文档 可用的类别: - variable: 变量命名 - constant: 常量命名 - function: 函数命名 - class: 类命名 - namespace: 命名空间命名 - member_variable: 成员变量命名 - template_parameter: 模板参数命名 - file_naming: 文件命名 - all: 查看所有类别 """ resource = get_naming_resource() if category == "all": return resource.get_all_categories() return resource.get_naming_rule(category) @mcp.resource("cpp-style://best-practices/{topic}") def get_best_practice(topic: str) -> str: """ 获取 C++ 最佳实践指南 可用的主题: - memory: 内存管理 - exceptions: 异常处理 - templates: 模板编程 - concurrency: 并发编程 - performance: 性能优化 - modern_cpp: 现代 C++ 特性 - all: 查看所有主题 """ resource = get_practices_resource() if topic == "all": return resource.get_all_topics() return resource.get_best_practice(topic) @mcp.resource("cpp-style://standard/{version}") def get_cpp_standard(version: str) -> str: """ 获取 C++ 标准特性文档 可用的版本: - cpp11: C++11 特性 - cpp14: C++14 特性 - cpp17: C++17 特性 - cpp20: C++20 特性 - cpp23: C++23 特性 - all: 查看所有标准概览 """ resource = get_standards_resource() if version == "all": return resource.get_all_standards() return resource.get_standard_features(version) @mcp.resource("cpp-style://examples/{pattern}") def get_design_pattern(pattern: str) -> str: """ 获取 C++ 设计模式示例 可用的模式: - singleton: 单例模式 - factory: 工厂模式 - observer: 观察者模式 - raii: RAII 惯用法 - pimpl: Pimpl 惯用法 - strategy: 策略模式 - all: 查看所有模式 """ resource = get_patterns_resource() if pattern == "all": return resource.get_all_patterns() return resource.get_pattern_example(pattern) # ==================== Prompts ==================== @mcp.prompt() def code_review(focus: str = "general") -> str: """ 生成 C++ 代码审查提示模板 参数: focus: 审查重点,可选值: - general: 综合审查(默认) - performance: 性能优化 - safety: 内存和类型安全 - readability: 可读性和维护性 - modern: 现代 C++ 特性使用 """ prompt_generator = get_code_review_prompt() return prompt_generator.generate(focus) @mcp.prompt() def refactor_suggestion(target_standard: str = "cpp17") -> str: """ 生成代码重构建议提示模板 参数: target_standard: 目标 C++ 标准 - cpp11: C++11 - cpp14: C++14 - cpp17: C++17 - cpp20: C++20 - cpp23: C++23 """ prompt_generator = get_refactor_prompt() return prompt_generator.generate(target_standard) # 启动服务器(仅在直接运行时) if __name__ == "__main__": import os # 从环境变量检测运行模式,默认为 stdio # Smithery 部署时使用 streamable-http,本地开发使用 stdio transport = os.environ.get("MCP_TRANSPORT", "stdio") if transport == "streamable-http": # HTTP 模式:使用 uvicorn 手动启动以支持 PORT 环境变量 import uvicorn port = int(os.environ.get("PORT", "8000")) # 获取 FastMCP 的 streamable HTTP 应用 app = mcp.streamable_http_app # 启动服务器 uvicorn.run(app, host="0.0.0.0", port=port) else: # stdio 模式:使用标准方式启动 mcp.run(transport=transport)

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SongJiangzhou/cpp_guidelines_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server