Model Safety MCP
ModelSafetyMCP is an MCP server for scanning machine learning model artifacts for unsafe serialization, malicious model patterns, risky packaging, URL-based artifact scanning, and directory-level triage.
README
Model Safety MCP
Malicious or unsafe ML artifacts are a real supply-chain problem. There have already been real cases of malicious or suspicious models being discovered in the wild, including models hosted on public platforms and larger batches of unsafe AI/ML artifacts. See RL identifies malware ML model hosted on Hugging Face and Over 100 Malicious AI/ML Models Found on Hugging Face.
One of the biggest reasons this matters is deserialization risk. Many model formats, especially pickle-based and framework-specific formats, can execute code or invoke unsafe logic while being loaded or reconstructed. That means a model file can become an execution vector, not just a passive blob of weights.
model-safety is an MCP server for inspecting machine learning model artifacts before you load, ship, or trust them.
It is designed for practical triage:
- scan a local model file
- scan a downloadable model URL
- triage a whole directory of artifacts
- combine heuristic checks with dedicated scanners
- return normalized findings and concrete next actions
What It Can Do
The server currently exposes these tools:
available_scannersShows which scanner backends are installed and ready.artifact_safety_reportRuns the broadest scan available on one model artifact and returns per-scanner results, normalized findings, highest severity, and recommended actions.modelscan_scanRuns ModelScan directly against a local file or URL.picklescan_scanRuns PickleScan directly against a local file or URL.deep_model_inspectRuns lightweight structural checks for risky extensions, embedded pickle members, and suspicious packaging patterns.scan_directoryRunsartifact_safety_reportacross every file in a directory and aggregates the risky files.
Quick Start
- Add the MCP server to Cursor or Claude Code using the local Python runtime in this repo.
- Start with
artifact_safety_reporton a local file or direct URL. - Review
normalized_findings,highest_severity, andrecommended_actions. - Use
scan_directorywhen you need to triage a whole model drop.
Minimal Cursor config:
{
"mcpServers": {
"model-safety": {
"type": "stdio",
"command": "C:/Users/Lenovo/Documents/ModelSafetyMCP/python312/python.exe",
"args": ["C:/Users/Lenovo/Documents/ModelSafetyMCP/run_server.py"]
}
}
}
Current Detection Strengths
This MCP is strongest when scanning:
- PyTorch checkpoints such as
.ptand.pth - pickle-like artifacts such as
.pkl,.pickle, and.joblib - Keras and TensorFlow HDF5 models such as
.h5 - model bundles that are actually ZIP or TAR containers
It currently combines:
modelscanBest general-purpose backend, especially for model-specific unsafe patterns like KerasLambda.picklescanBest supporting backend for pickle-oriented artifacts.deep_model_inspectFast heuristic fallback that catches risky packaging even when specialized scanners are quiet.
Supported Inputs
You can scan either:
- a local filesystem path
- a direct
httporhttpsartifact URL
For Hugging Face specifically, use the direct file URL:
- Good:
https://huggingface.co/<repo>/resolve/main/model.h5 - Not ideal:
https://huggingface.co/<repo>/blob/main/model.h5
blob URLs usually return an HTML page, while resolve URLs return the real artifact bytes.
Runtime
This repo includes a local Python 3.12 runtime in python312. That is the supported runtime because it works with:
mcpmodelscanpicklescanh5py
If you ever need to rebuild that runtime manually:
python312\python.exe -m pip install mcp picklescan modelscan h5py
Start The Server
Run the MCP server with:
python312\python.exe run_server.py
The launcher is repo-local and uses the runtime already bundled in this project.
Cursor Setup
Add the server in Cursor MCP settings with:
- Name:
model-safety - Type:
stdio - Command:
C:/Users/Lenovo/Documents/ModelSafetyMCP/python312/python.exe - Args:
C:/Users/Lenovo/Documents/ModelSafetyMCP/run_server.py
Equivalent JSON:
{
"mcpServers": {
"model-safety": {
"type": "stdio",
"command": "C:/Users/Lenovo/Documents/ModelSafetyMCP/python312/python.exe",
"args": ["C:/Users/Lenovo/Documents/ModelSafetyMCP/run_server.py"]
}
}
}
A copy-paste example also lives in cursor.mcp.example.json.
Claude Code Setup
Add the server with:
claude mcp add model-safety -- C:/Users/Lenovo/Documents/ModelSafetyMCP/python312/python.exe C:/Users/Lenovo/Documents/ModelSafetyMCP/run_server.py
Workflow
1. Confirm the server is connected
In your MCP client, ask:
Use available_scanners from the model-safety MCP server
You should see the installed backends, including modelscan and picklescan.
2. Start with the broad report
For a local file:
Use artifact_safety_report with path="C:/path/to/model.pth"
For a direct URL:
Use artifact_safety_report with url="https://example.com/model.h5"
This is the default entrypoint for single-artifact scans.
3. Read the normalized findings
artifact_safety_report returns:
- raw per-scanner outputs
normalized_findingshighest_severityfinding_countrecommended_actions
That means the tool is useful both for detailed investigation and for quick decision-making.
4. Drill down only when needed
Use:
modelscan_scanwhen you want the dedicated ModelScan outputpicklescan_scanwhen you want pickle-specific detaildeep_model_inspectwhen you want lightweight packaging and archive heuristics
5. Triage folders in bulk
If you have a whole drop of models:
Use scan_directory with path="C:/path/to/model-folder"
This returns:
- aggregated normalized findings
- a directory-level highest severity
risky_filesfor quick prioritization- per-file nested reports
scan_directory works best on folders that mostly contain model artifacts rather than general source code.
Examples
Example: suspicious PyTorch checkpoint
Use artifact_safety_report with path="C:/Users/Lenovo/Documents/ModelSafetyMCP/credit-risk-pytorch-v1.1.pth"
Typical result shape:
- risky extension
.pth - embedded pickle member inside the archive
- recommended action to avoid trusted loading until reviewed
Example: suspicious Keras model from Hugging Face
Use artifact_safety_report with url="https://huggingface.co/MrKrauzer/FacenetRetweeted/resolve/main/facenet-retrained.h5"
Typical result shape:
- risky extension
.h5 - ModelScan
H5LambdaDetectScanfinding - recommendation to inspect the Keras
Lambdalayer before deserializing
Output Philosophy
The server treats the scanners as complementary:
modelscanis the primary security backendpicklescanis a specialized supporting backenddeep_model_inspectis a fast structural fallback
Instead of forcing users to interpret each tool separately, the server also produces normalized findings with:
scannerseveritycategoryevidencesourcerecommended_action
Limitations
This tool helps triage risk. It does not prove a model is safe.
Important limits:
- some formats are better covered than others
- a clean scan does not guarantee harmless behavior
- remote URL scanning depends on the URL pointing to the real artifact bytes
- directory scans are literal and can be noisy on non-model folders
- model behavior risks are different from serialization and packaging risks
Development
Quick verification:
python312\python.exe -m compileall src run_server.py
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。