DLL检查器MCP服务器
版本2.1.0 -改进了参数默认值处理
用于分析的模型上下文协议(MCP)服务器。NET程序集DLL,并将元数据存储在SQLite数据库中,以实现高效查询。最初设计用于探索Autodesk Civil 3D和AutoCAD API,现在支持单个数据库中的多个软件产品。
概述
此MCP服务器为探索提供了一个全面的数据库驱动解决方案。NET API。它不是每次查询DLL时都加载DLL,而是分析程序集一次,并将所有元数据(类型、方法、属性、参数等)存储在SQLite数据库中,以实现快速、强大的查询。
主要特点
- 软件差异化 (v2.0中的新功能):按软件产品(Civil 3D、Revit、Dynamo等)组织DLL
- 过滤查询 (v2.0中的新功能):仅查询特定软件中的DLL,而不搜索整个数据库
- 自动迁移:从v1模式无缝升级到v2模式
- 一次性分析:分析DLL一次,重复查询数据库,无需重新加载
- 综合元数据:捕获类型、方法、属性、字段、事件、参数、继承、接口等
- 智能更新:基于哈希的更改检测仅在DLL更改时重新分析
- 强大的查询功能:按名称、命名空间、返回类型、继承、接口实现进行搜索
- 全文搜索:通过文档和描述查找成员
- 跨平台:自动处理Windows路径到WSL路径的转换
MCP工具
数据库管理
analyze_dll
分析a。NET DLL,并将所有元数据存储在数据库中。
参数:
dllPath(必填):DLL文件的路径(Windows或WSL格式)forceReAnalyze(可选):即使已在数据库中,也强制重新分析(默认值:false)softwareName(可选,v2.0中的新功能):与此DLL关联的软件名称(例如,“AutoCAD Civil 3D 2024”)softwareVersion(可选,v2.0中的新功能):软件版本
例子:
dllPath: "C:\Program Files\Autodesk\AutoCAD 2024\C3D\AeccDbMgd.dll"
softwareName: "AutoCAD Civil 3D"
softwareVersion: "2024"list_assemblies
列出数据库中当前包含统计信息的所有程序集。
参数:
softwareName(可选,v2.0中的新功能):按软件名称筛选程序集
退货: 程序集名称、版本、软件关联、分析日期、命名空间计数和类型计数
list_software (v2.0中的新功能)
列出数据库中具有程序集计数的所有软件产品。
退货: 软件名称、版本、描述和相关程序集的数量
associate_assembly_with_software (v2.0中的新功能)
将现有程序集与软件产品相关联。
参数:
assemblyName(必填):程序集名称softwareName(必填):软件名称
例子:
assemblyName: "AeccDbMgd"
softwareName: "AutoCAD Civil 3D"类型发现
list_namespaces
列出数据库中的所有命名空间。
参数:
assemblyName(可选):按特定程序集名称筛选
例子:
assemblyName: "AeccDbMgd"search_types
按名称模式搜索类型。支持SQL通配符(%)。
参数:
searchPattern(必填):搜索模式(例如,“对齐”、“管道百分比”、“表面百分比”)namespaceName(可选):按命名空间筛选typeKind(可选):按类型类型筛选(类、接口、枚举、结构)
示例:
searchPattern: "%Alignment%"
namespaceName: "Autodesk.Civil.DatabaseServices"searchPattern: "Pressure%"
typeKind: "Class"get_type_details
获取有关特定类型(包括所有成员)的全面信息。
参数:
typeName(必填):完整类型名称
例子:
typeName: "Autodesk.Civil.DatabaseServices.Alignment"退货: 类型信息、基类、接口、构造函数、属性、方法、字段、具有完整签名的事件
方法发现
search_methods
在所有类型中按名称模式搜索方法。
参数:
searchPattern(必填):方法名称模式(例如,“%Station%”、“Get%”)returnType(可选):按返回类型筛选
示例:
searchPattern: "%Station%"searchPattern: "Get%"
returnType: "%Surface%"高级查询
search_documentation
在所有类型和成员文档中进行全文搜索。
参数:
searchTerms(必填):在文档中查找搜索词
例子:
searchTerms: "corridor surface"get_inheritance_tree
显示类型的继承层次结构(基类和派生类)。
参数:
typeName(必填):完整类型名称
例子:
typeName: "Autodesk.Civil.DatabaseServices.Alignment"find_implementations
查找实现特定接口的所有类型。
参数:
interfaceName(必填):完整接口名称
例子:
interfaceName: "System.IDisposable"安装
先决条件
- .NET 9.0 SDK
- WSL2(如果在Windows上运行)
构建
cd /mnt/c/Users/jjhaddad/Documents/Work/zeroTouch/dll-inspector-mcp
dotnet build构建的可执行文件将位于:
bin/Debug/net9.0/DllInspectorMcp.dllClaude代码的配置
将此服务器添加到您的Claude Code MCP设置文件中。
设置文件的位置:
- 窗户:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
配置示例:
{
"mcpServers": {
"civil3d-inspector": {
"command": "dotnet",
"args": [
"exec",
"/mnt/c/Users/jjhaddad/Documents/Work/zeroTouch/dll-inspector-mcp/bin/Debug/net9.0/DllInspectorMcp.dll"
]
}
}
}注: 调整路径以匹配您的安装位置。
使用工作流程
1.分析DLL(使用软件关联)
首先,分析要探索的程序集。 v2.0中的新功能:您现在可以将DLL与软件产品相关联:
analyze_dll
dllPath: "C:\Program Files\Autodesk\AutoCAD 2024\C3D\AeccDbMgd.dll"
softwareName: "AutoCAD Civil 3D"
softwareVersion: "2024"您可以在同一数据库中分析多个软件产品:
analyze_dll
dllPath: "C:\Program Files\Autodesk\Revit 2024\RevitAPI.dll"
softwareName: "Revit"
softwareVersion: "2024"analyze_dll
dllPath: "C:\Program Files\Dynamo\DynamoCore.dll"
softwareName: "Dynamo"
softwareVersion: "2.x"第一次分析需要时间,但后续查询将是即时的!
提示: 软件关联是可选的。如果不指定,DLL仍将被分析并可用于查询。
2.探索API
v2.0中的新功能:查看所有软件产品并按软件筛选:
list_software列出特定软件的程序集:
list_assemblies
softwareName: "AutoCAD Civil 3D"列出可用命名空间:
list_namespaces
assemblyName: "AeccDbMgd"查找与路线相关的类型:
search_types
searchPattern: "%Alignment%"
namespaceName: "Autodesk.Civil.DatabaseServices"获取特定类型的完整详细信息:
get_type_details
typeName: "Autodesk.Civil.DatabaseServices.Alignment"搜索方法:
search_methods
searchPattern: "%Station%"查找继承关系:
get_inheritance_tree
typeName: "Autodesk.Civil.DatabaseServices.Corridor"3.更新
如果更新Civil3D或DLL更改,只需重新分析:
analyze_dll
dllPath: "C:\Program Files\Autodesk\AutoCAD 2024\C3D\AeccDbMgd.dll"
forceReAnalyze: true数据库位置
SQLite数据库创建于:
bin/Debug/net9.0/civil3d_api.db您可以使用任何SQLite客户端直接检查或查询它。
数据库模式
数据库包括以下表:
- 软件 (v2.0中的新功能):软件产品信息
- 装配件:DLL元数据和版本(现在有可选的SoftwareId)
- 命名空间:命名空间组织
- 类型:类、接口、枚举、结构
- 成员:方法、属性、字段、事件、构造函数
- 参数:方法和构造函数参数
- TypeInterfaces:接口实现
- 枚举值:枚举值
- 属性访问者:属性获取器/设置器信息
- 会员搜索:全文搜索索引
看 DatabaseSchema.sql 对于完整的v1模式,或 DatabaseSchema_v2.sql 对于v2模式。 看 MIGRATION_V2.md 有关迁移的详细信息。
建筑
组件
- 数据库管理器cs:SQLite数据库操作和管理
- DllAnalyzer.cs:从中提取元数据。NET程序集使用MetadataLoadContext
- DatabaseQueryTools.cs:用于查询数据库的MCP工具
- DllLoader.cs:通过依赖解析和路径转换加载程序集
- DatabaseSchema.sql:完整的数据库架构,包括索引和视图
关键技术
- SQLite:轻量级、基于文件的数据库
- MetadataLoadContext:仅反射程序集加载
- FTS5:SQLite文档全文搜索
- 模型上下文协议:与Claude Code集成
路径处理
在WSL中运行时,服务器会自动将Windows路径转换为WSL路径:
C:\path\to\file.dll→/mnt/c/path/to/file.dll- 适用于所有驱动器号(C:、D:等)
调用工具时,您可以使用任何一种格式。
演出
- 分析:对于像AeccDbMgd.dll这样的大型dll,可能需要30-60秒
- 后续查询:毫秒(数据库查找)
- 重新分析:仅当DLL文件哈希值更改时
- 数据库大小:每个分析的程序集约10-50MB
故障排除
错误:“路径不是绝对路径”
- 确保DLL路径正确
- 尝试使用完整的WSL路径格式:
/mnt/c/...
错误:“无法加载文件或程序集”
- DLL可能在同一目录中具有依赖关系
- 服务器尝试从DLL的目录自动加载依赖项
找不到数据库或数据库为空
- 数据库在首次使用时自动创建
- 使用
analyze_dll用DLL填充它
查询速度慢
- 启动服务器后的第一个查询可以初始化数据库
- 后续查询应该非常快
- 如果您怀疑数据损坏,请考虑重新分析
文档
- 更改日志.md:版本历史和更改
- 特色_苏美.md:v2.0软件差异化功能概述
- MIGRATION_V2.md:从v1到v2的数据库迁移指南
- 土建工程3D_API_STRUCTURE.mod:Civil3D API结构的综合文档
- 项目状态.md:项目开发状态和路线图
- DatabaseSchema.sql:使用注释完成v1数据库架构
- 数据库模式_v2.sql:使用软件表完成v2数据库架构
依赖项
- .NET 9.0
- 微软。数据。Sqlite(9.0.0)
- 微软。扩展。主机(10.0.0)
- 模型上下文协议(0.4.0-preview.3)
- 系统。反思。MetadataLoadContext(9.0.0)
发展
构建
dotnet build跑
dotnet run清理数据库
要重新开始,请删除数据库文件:
rm bin/Debug/net9.0/civil3d_api.db参考文献
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
版权所有(c)2025 Jad Haddad
