VTK API通过MCP验证
使用模型上下文协议(MCP)对VTK Python代码进行生成后验证。
概述
该模块提供生成的VTK代码的自动验证,以捕捉API幻觉:
- ✅ 直接API查找 -无向量搜索开销,精确的类/方法验证
- ✅ 方法存在性验证 -检测LLM何时发明不存在的方法
- ✅ 导入验证 -验证VTK类是否从正确的模块导入
- ✅ 快速内存索引 -启动时加载约2900个VTK类
- ✅ 结构化错误报告 -清除带有建议的错误消息
______________________________________________________________________
快速开始
1.安装软件包
PyPI(发布后推荐):
pip install vtkapi-mcp对于地方发展,我们标准化 紫外线 要管理virtualenv和附加功能:
uv venv .venv
source .venv/bin/activate
uv sync --extra dev # runtime + pytest + ruff注: 64 MBdata/vtk-python-docs.jsonl文件在运行时是必需的,但未捆绑在控制盘中。把它放在下面data/(或通行证--api-docs /path/to/file)在启动MCP服务器之前。
更喜欢自动化? ./setup.sh 现在包装相同的uv工作流程并接受 --dev 包括测试工具链。
2.测试MCP集成(可选)
uv run python demo_mcp_integration.py这运行了一个完整的演示,展示了如何将vtkapi-mcp用作mcp服务器(而不是独立的Python库)。它演示了所有18个MCP工具和错误检测。
3.开发人员工作流程(uv原生)
| 任务 | 命令 |
|---|---|
| 运行单元+集成测试 | uv run pytest |
| 使用覆盖率报告运行测试 | uv run pytest --cov=vtkapi_mcp --cov-report=term-missing |
| 运行Ruff-lint和格式检查 | uv run ruff check / uv run ruff format --check |
这些命令会自动重用.venv通过创建uv venv/uv sync。不需要手动激活。
3.配置MCP客户端
添加到您的MCP设置中(例如,Claude Desktop配置):
{
"mcpServers": {
"vtk-api": {
"command": "python",
"args": [
"-m",
"vtkapi_mcp",
"--api-docs",
"/absolute/path/to/vtkapi-mcp/data/vtk-python-docs.jsonl"
]
}
}
}4.使用VTK工具
MCP服务器为VTK API验证和查找提供了18个工具。看 MCP工具 在......下面
______________________________________________________________________
项目结构
包装组织
vtkapi_mcp/
├── core/ # API indexing and data loading
│ └── api_index.py
├── validation/ # Code validation logic
│ ├── models.py
│ ├── validator.py
│ ├── import_validator.py
│ ├── class_validator.py
│ └── method_validator.py
├── server/ # MCP server implementation
│ ├── mcp_server.py
│ └── tools.py
└── utils/ # Utilities for parsing and search
├── extraction.py
└── search.py支持文件
| 文件 | 目的 |
|---|---|
demo_mcp_integration.py | 演示显示正确的MCP集成(非独立) |
pyproject.toml | Python包配置和依赖关系 |
README.md | 此文件 |
数据
| 文件 | 用途 | 大小 |
|---|---|---|
data/vtk-python-docs.jsonl | VTK API文档(约2900个类) | 约64 MB |
______________________________________________________________________
建筑
VTKAPIIndex(vtkapi_mcp/core/api_index.py)
所有VTK类和方法的快速内存索引:
VTKAPIIndex
├── Classes Dict: {class_name → {module, methods, docs}}
├── Modules Dict: {module_name → [class_names]}
└── Load Time: <1 second for ~2,900 classes关键方法:
get_class_info(class_name)-获取模块和文档search_classes(query)-按名称或关键字搜索get_module_classes(module)-列出模块中的类class_exists(class_name)-检查类是否存在
VTKCodeValidator(vtkapi_mcp/验证/验证器.py)
基于AST的生成Python代码验证:
VTKCodeValidator
├── Parse Code: Uses Python's ast module
├── Extract VTK Usage:
│ ├── Import statements
│ ├── Class instantiations
│ └── Method calls
├── Validate Against Index:
│ ├── Check classes exist
│ ├── Check imports correct
│ └── Check methods exist
└── Generate Error Report验证类型:
- 导入验证 -验证模块路径
- 类验证 -检查类是否存在
- 方法验证 -检测幻觉方法
______________________________________________________________________
提供的MCP工具
当作为MCP服务器运行时,提供以下18个工具:
1. vtk_get_class_info
获取有关VTK类的完整信息。
输入:
{
"class_name": "vtkPolyDataMapper"
}输出:
{
"class_name": "vtkPolyDataMapper",
"module": "vtkmodules.vtkRenderingCore",
"content_preview": "vtkPolyDataMapper - map vtkPolyData to graphics primitives..."
}2. vtk_search_classes
按名称或关键字搜索VTK类。
输入:
{
"query": "reader",
"limit": 5
}输出:
[
{
"class_name": "vtkSTLReader",
"module": "vtkmodules.vtkIOGeometry",
"description": "Read ASCII or binary stereo lithography files."
}
]5. vtk_validate_import
验证并更正VTK导入语句。
输入:
{
"import_statement": "from vtkmodules.vtkCommonDataModel import vtkPolyDataMapper"
}输出:
{
"valid": false,
"message": "Incorrect module. 'vtkPolyDataMapper' is in 'vtkmodules.vtkRenderingCore'",
"suggested": "from vtkmodules.vtkRenderingCore import vtkPolyDataMapper"
}6. vtk_get_method_info
获取有关特定方法的完整信息,包括节上下文。
输入:
{
"class_name": "vtkPolyDataMapper",
"method_name": "SetInputData"
}输出:
{
"class_name": "vtkPolyDataMapper",
"method_name": "SetInputData",
"content": "SetInputData(vtkDataObject) - Set the input data...",
"section": "Methods defined here"
}7. vtk_get_method_doc
只获取特定方法的docstring。
输入:
{
"class_name": "vtkPolyDataMapper",
"method_name": "SetInputData"
}输出:
{
"class_name": "vtkPolyDataMapper",
"method_name": "SetInputData",
"docstring": "SetInputData(vtkDataObject) - Set the input data...",
"found": true
}8. vtk_get_class_doc
获取类文档字符串。
输入:
{
"class_name": "vtkPolyDataMapper"
}输出:
{
"class_name": "vtkPolyDataMapper",
"class_doc": "vtkPolyDataMapper - map vtkPolyData to graphics primitives. Superclass: vtkMapper",
"found": true
}9. vtk_get_class_synopsis
获取一个类所做工作的简要概述/摘要。
输入:
{
"class_name": "vtkPolyDataMapper"
}输出:
{
"class_name": "vtkPolyDataMapper",
"synopsis": "Maps polygonal data (vtkPolyData) to graphics primitives for rendering.",
"found": true
}10. vtk_get_class_action_phrase
获取描述类功能的动作短语。
输入:
{
"class_name": "vtkPolyDataMapper"
}输出:
{
"class_name": "vtkPolyDataMapper",
"action_phrase": "polygon mapping",
"found": true
}11. vtk_get_class_role
获取类的功能角色/类别。
输入:
{
"class_name": "vtkPolyDataMapper"
}输出:
{
"class_name": "vtkPolyDataMapper",
"role": "rendering",
"found": true
}12. vtk_get_class_visibility
获取一个类的可见性/暴露水平。
输入:
{
"class_name": "vtkPolyDataMapper"
}输出:
{
"class_name": "vtkPolyDataMapper",
"visibility": "likely",
"found": true
}13. vtk_get_module_classes
列出特定模块中的所有类。
输入:
{
"module": "vtkmodules.vtkRenderingCore"
}输出:
{
"module": "vtkmodules.vtkRenderingCore",
"classes": ["vtkActor", "vtkPolyDataMapper", ...],
"count": 42
}14. vtk_get_class_module
返回给定VTK类的vtkmodules.\*导入路径。
输入:
{
"class_name": "vtkPolyDataMapper"
}输出:
{
"class_name": "vtkPolyDataMapper",
"module": "vtkmodules.vtkRenderingCore",
"found": true
}15. vtk_get_class_input_datatype
获取VTK类的输入数据类型。
输入:
{
"class_name": "vtkPolyDataMapper"
}输出:
{
"class_name": "vtkPolyDataMapper",
"input_datatype": "vtkPolyData",
"found": true
}16. vtk_get_class_output_datatype
获取VTK类的输出数据类型。
输入:
{
"class_name": "vtkContourFilter"
}输出:
{
"class_name": "vtkContourFilter",
"output_datatype": "vtkPolyData",
"found": true
}17. vtk_get_class_semantic_methods
获取VTK类的语义标记方法(输入setter、输出getter、配置方法)。
输入:
{
"class_name": "vtkContourFilter"
}输出:
{
"class_name": "vtkContourFilter",
"semantic_methods": {
"input_setters": ["SetInputData", "SetInputConnection"],
"output_getters": ["GetOutput", "GetOutputPort"],
"configuration": ["SetValue", "SetNumberOfContours"]
},
"found": true
}18. vtk_is_a_class
检查给定名称是否是有效的VTK类。
输入:
{
"class_name": "vtkPolyDataMapper"
}输出:
{
"class_name": "vtkPolyDataMapper",
"is_vtk_class": true
}______________________________________________________________________
与RAG检索相比的优势
| 方面 | RAG检索 | MCP验证 |
|---|---|---|
| 速度 | 矢量搜索+重新排序 | 直接哈希查找(即时) |
| 准确度 | 语义相似性(可以漂移) | API精确匹配(100%) |
| 覆盖 | 仅Top-K(约10个结果) | 共有约2900个课程可供选择 |
| 代币 | 消耗提示令牌 | 工具调用(最低成本) |
| 错误 | 无声的幻觉 | 明确的错误信息 |
______________________________________________________________________
验证示例
示例1:方法幻觉(CAUGHT✅)
生成代码:
stencil = vtkImageStencilToImage()
stencil.SetOutputWholeExtent([0, 10, 0, 10, 0, 10]) # ❌ Doesn't exist!验证错误:
UNKNOWN_METHOD: Method 'SetOutputWholeExtent' not found on class 'vtkImageStencilToImage'
Suggestion: Did you mean SetOutputOrigin or SetOutputSpacing?示例2:导入模块错误(小心✅)
生成代码:
from vtkmodules.vtkCommonDataModel import vtkPolyDataMapper # ❌ Wrong module!验证错误:
IMPORT_ERROR: 'vtkPolyDataMapper' is not in module 'vtkmodules.vtkCommonDataModel'
Correct import: from vtkmodules.vtkRenderingCore import vtkPolyDataMapper示例3:不存在的类(CAUGHT✅)
生成代码:
converter = vtkImageDataToPolyDataConverter() # ❌ Class doesn't exist!验证错误:
UNKNOWN_CLASS: Class 'vtkImageDataToPolyDataConverter' not found in VTK
Suggestion: Did you mean vtkImageDataGeometryFilter?______________________________________________________________________
数据源
输入: data/vtk-python-docs.jsonl
每一行都是JSON格式的VTK类文档:
{
"class_name": "vtkPolyDataMapper",
"module_name": "vtkmodules.vtkRenderingCore",
"class_doc": "vtkPolyDataMapper - map vtkPolyData to graphics primitives. Superclass: vtkMapper",
"synopsis": "Maps polygonal data (vtkPolyData) to graphics primitives for rendering.",
"action_phrase": "polygon mapping",
"role": "rendering",
"visibility_score": "likely",
"input_datatype": "vtkPolyData",
"output_datatype": "",
"semantic_methods": { "input_setters": [...], "output_getters": [...] },
"structured_docs": { "sections": { ... } }
}新闻报道: VTK Python API中的约2900个VTK类
______________________________________________________________________
未来的增强功能
- \[ \] 方法签名验证 -检查参数类型和计数
- \[ \] 弃用警告 -标记已弃用的VTK方法
- \[ \] 管道验证 -验证数据流兼容性
- \[ \] 自动修复建议 -自动生成更正代码
- \[ \] 性能评测 -跟踪验证开销
- \[ \] 缓存层 -缓存频繁查找以提高速度
______________________________________________________________________
许可证
这是一个独立的MCP服务器,用于VTK API验证。摘录自 vtk抹布 项目。
______________________________________________________________________
状态: 生产就绪的MCP服务器,用于VTK API验证。
