pyobfus-mcp

io.github.zhurong2020由 GitHub 账号 zhurong2020 发布v0.3.17更新于 Oct 30, 2026

9 local Python protection tools, delivery checks and traceback reverse mapping. No telemetry.

已验证STDIO仅桌面开发者工具安全与监控

概览

AI 生成的概览

本地 MCP 服务器,让 AI 编程助手用 pyobfus 扫描、混淆并验证 Python 项目,检查交付产物,并还原混淆后的堆栈跟踪。

可以做什么
  • 扫描 Python 项目中的混淆风险、识别框架并给出建议预设
  • 生成 pyobfus.yaml 配置,或一键执行混淆、字节编译与导入冒烟测试的完整流程
  • 列出并解释各预设,推荐社区版或 Pro 版本并给出下一步命令
  • 发布前检查输出目录或 wheel 中是否混入映射文件、私钥或原始源码
  • 借助已保存的映射文件还原堆栈跟踪中的混淆标识符
  • 返回启动 Pro 试用的结构化指引
适用场景
适合需要发布 Python 代码、希望由助手准备并执行混淆、确认受保护构建仍可导入,并通过还原生产堆栈继续排错的场景。也适合在发布前确认交付产物中没有泄漏映射文件或密钥。
运行要求
以 PyPI 包 pyobfus-mcp 形式通过 stdio 在本地运行,可用 uvx 免安装启动或用 pip 安装,会自动拉取 pyobfus 与 MCP Python SDK。无需 API 密钥或环境变量。默认不访问外网,仅在主动开启依赖校验时联网。交付检查需要 pyobfus 0.7.1 或更高版本。
安装前请注意
protect_project 会写出混淆产物,并在产物旁(而非其中)写入私有的反混淆映射;generate_pyobfus_config 仅在 write 为真时写入 pyobfus.yaml。verify_cmd 会执行任意命令,需通过 PYOBFUS_MCP_ALLOW_VERIFY_CMD 开启。试用工具只返回指引,不会启动试用或购买;Pro 预设会提及结账链接与价格。verified 仅代表编译与导入冒烟测试通过,不代表应用行为已被测试。

安装

在 SourceWeft 中

  1. 打开 控制台中的 pyobfus-mcp,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

pyobfus-mcp — Model Context Protocol server for pyobfus

pyobfus-mcp exposes pyobfus — the Python obfuscator — to any MCP-capable AI coding agent: Claude Desktop, Claude Code, Cursor, GitHub Copilot, Windsurf, Zed, Codex, CodeBuddy, and anything else that speaks the Model Context Protocol.

Once configured, you can say:

"Check if this FastAPI project is safe to obfuscate, then generate a pyobfus.yaml for it."

and the agent will autonomously call check_obfuscation_risks and generate_pyobfus_config — no copy/paste of CLI commands, no manual config editing.

Tools exposed

Version 0.3.17 exposes 9 tools: 7 Community tools and 2 tier/trial guidance tools.

ToolWhat it does
protect_project(path, output_dir?, preset?, verify?, verify_cmd?, save_mapping?)One-call, self-verifying pipeline. Scans risks, picks a framework-aware preset, obfuscates, then byte-compiles and import-smoke-tests the output in isolated subprocesses and returns verified: true/false (+ confidence). verified covers compilation and an import smoke test, plus verify_cmd if you pass one; it does not mean your application's behaviour was tested. Writes a private de-obfuscation mapping alongside (never inside) the output. Reach for this when the user wants to "protect/obfuscate before shipping" and expects a green check, not just a transform.
check_obfuscation_risks(path, verify_dependencies_online=false, use_project_config=true)Config-aware pre-flight scan for eval/exec, dynamic attribute access, and framework reflection. Set use_project_config=false for the legacy config-free scan. Opt into public-PyPI dependency-name verification with verify_dependencies_online=true; outbound network access remains off by default. Returns severity counts, detected frameworks, and a suggested preset.
generate_pyobfus_config(path, preset_override?, write?)Auto-detect framework → generate pyobfus.yaml. Returns the YAML text without writing by default; write=True persists to disk.
unmap_stack_trace(trace, mapping_path)Reverse obfuscated identifiers in a production stack trace using a mapping.json.
check_delivery(path, build_report?, provenance_manifest?)Before shipping, check an output directory or .whl for a mapping file, a private key or an original source, and for files the build did not produce. Read-only; requires pyobfus >=0.7.1; older Core returns FeatureUnavailable.
list_presets()Enumerate every preset (community / framework-aware / Pro).
explain_preset(name)Describe what a named preset changes: exclusions, docstring handling, parameter preservation.
recommend_tier(path)Analyze a project and recommend community vs Pro, with reasoning and concrete next-step commands.
start_pro_trial()Return structured guidance for starting the 5-day Pro trial.

All tools return dicts with a status field, a free-text ai_hint, and a machine-readable next_tool field ({tool, reason, args}) so an agent can chain steps deterministically. verify_cmd in protect_project runs an arbitrary command and is therefore opt-in behind PYOBFUS_MCP_ALLOW_VERIFY_CMD=1.

Install

Zero-install (recommended)

If you have uv, no separate install step is needed — point your client at uvx and it fetches pyobfus-mcp (plus pyobfus and the MCP SDK) into an ephemeral environment on first run. No API key required.

json
{  "mcpServers": {    "pyobfus": {      "command": "uvx",      "args": ["pyobfus-mcp"]    }  }}

Or install with pip

bash
pip install pyobfus-mcp

This pulls pyobfus and the MCP Python SDK automatically. Then use "command": "pyobfus-mcp" in the per-client configs below.

Configure

Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

json
{  "mcpServers": {    "pyobfus": {      "command": "pyobfus-mcp"    }  }}

Restart Claude Desktop. The pyobfus tools appear in the tool list.

Cursor

Edit ~/.cursor/mcp.json:

json
{  "mcpServers": {    "pyobfus": {      "command": "pyobfus-mcp"    }  }}

Windsurf

Edit ~/.codeium/windsurf/mcp_config.json:

json
{  "mcpServers": {    "pyobfus": {      "command": "pyobfus-mcp"    }  }}

Zed

In ~/.config/zed/settings.json:

json
{  "context_servers": {    "pyobfus": {      "command": {        "path": "pyobfus-mcp",        "args": []      }    }  }}

Claude Code

bash
claude mcp add pyobfus pyobfus-mcp

Example session

User:  Can you check whether this Python project is safe to obfuscate?       Path: /Users/me/code/my-api
Agent: [invokes check_obfuscation_risks("/Users/me/code/my-api")]       I found 2 high-severity and 3 medium-severity patterns. FastAPI is       detected, so I'd suggest the `fastapi` preset. Want me to generate       the config?
User:  Yes please, write it.
Agent: [invokes generate_pyobfus_config("/Users/me/code/my-api",         preset_override="fastapi", write=True)]       Wrote pyobfus.yaml. Next: pyobfus /Users/me/code/my-api -o dist/       -c pyobfus.yaml

Debugging obfuscated code with your AI assistant

The killer feature: keep AI-assisted debugging even after you obfuscate.

User:  Here's a crash from prod. Can you help?       [pastes traceback full of I0, I1, I2...]
Agent: [invokes unmap_stack_trace(trace, "path/to/mapping.json")]       Reversed. The crash is in Calculator.add() called from       main() — 'Calculator' object has no attribute 'add_x'. Looks like       a typo in the method call site…

Verifying tool integrity

Tool poisoning / "rug-pulls" — a server's tool descriptions silently changing after you've reviewed and trusted them — are the #1 threat in the 2026 MCP security baseline. pyobfus-mcp-verify checks the currently-installed package's tool descriptions/schemas against a manifest frozen at release time:

bash
pyobfus-mcp-verify# OK: tool descriptions match the shipped manifest (digest 5cf4c902d460...).

A mismatch (exit code 1) means the installed tools differ from what the release shipped — worth investigating before trusting the server. This is a self-consistency digest, not a cryptographic signature: it proves the package matches its own shipped manifest, not that a specific party signed it. For stronger assurance, compare the printed digest against the one published in the GitHub Release notes for the version you installed.

Independent security scan

The published PyPI package (not a local build) has been scanned with Cisco's open-source mcp-scanner — a live initialize → tools/list handshake followed by YARA malware-signature and dependency-vulnerability analysis against the eight tools exposed at that time. Result as of pyobfus-mcp 0.3.6 (2026-08-20): 8/8 tools SAFE, 0 findings. Full reproducible command, raw output, and an honest statement of what this scan does and doesn't cover: docs/MCP_SECURITY_SCAN.md.

License

Apache-2.0. Same as the main pyobfus package. The server exposes Community tools and tier/trial guidance; Pro build features remain licence-gated.

Links

来源:pyobfus_mcp/README.md,提交 ed5b28c

工具

9

protect_project

One call to protect a Python project end-to-end AND verify it still works: scans risks, picks a framework-aware preset, obfuscates, then byte-compiles + import-smoke-tests the output in isolated subprocesses and returns verified:true/false. Writes a private de-obfuscation mapping alongside (not inside) the output. Use this when the user wants to 'protect/obfuscate before shipping' and expects a green check, not just a transform.

输入参数path必填presetverifytimeoutoutput_dirverify_cmdsave_mappingtrace_marker

check_obfuscation_risks

Scan a Python project for patterns that may break obfuscation (eval/exec, dynamic attribute access, framework reflection, unsafe model loading). Returns severity counts, detected frameworks (FastAPI/Django/Flask/Pydantic/Click/SQLAlchemy/ML), and a suggested preset. Also locates requirements*.txt / pyproject.toml and, only if verify_dependencies_online=true, checks each declared dependency against public PyPI to flag AI-hallucinated ('slopsquatting') package names -- off by default, this tool makes no outbound network calls unless you opt in. By default the scan honors the project's pyobfus config; set use_project_config=false for the legacy config-free scan.

输入参数path必填use_project_configverify_dependencies_online

generate_pyobfus_config

Generate a pyobfus.yaml for a Python project. Auto-detects frameworks and applies the matching preset. By default returns the YAML text without writing to disk; set write=true to persist.

输入参数path必填writepreset_override

unmap_stack_trace

Reverse obfuscated identifiers in a stack trace using a pyobfus mapping.json. Accepts the trace as plain text and the path to a mapping file produced by --save-mapping.

输入参数trace必填mapping_path必填

check_delivery

Check an output directory or .whl right before shipping: fails on a pyobfus mapping file, a private key or an original source file inside it, and warns about Python files the build did not produce or Pro options the build skipped. Pass the build's --build-report and --provenance-manifest JSON for the full check. Read-only: files are hashed, never imported or executed, and contents are not returned.

输入参数path必填build_reportprovenance_manifest

list_presets

List every pyobfus preset available, grouped by tier (community / framework-aware / Pro).

无需输入参数。

explain_preset

Describe what a named preset changes: exclude names count, exclude patterns, preserve_param_names, docstring handling. For Pro presets, returns full pro_unlock metadata (trial command, checkout URL, price, money-back guarantee).

输入参数name必填

recommend_tier

Analyze a Python project and recommend pyobfus tier (community vs Pro) with reasons. Combines a preflight scan with a sensitive-string-literal heuristic. Returns free_action and pro_action with concrete next-step commands.

输入参数path必填

start_pro_trial

Return structured guidance for starting the 5-day pyobfus Pro trial. Does NOT invoke the side effect — the user runs `pyobfus-trial start` in their shell. Detects whether a trial is already active and surfaces the appropriate next step plus post-trial purchase URL.

无需输入参数。

版本历史

6
  1. v0.3.17最新Oct 30, 2026
  2. v0.3.16Oct 26, 2026
  3. v0.3.15Oct 23, 2026
  4. v0.3.14Oct 20, 2026
  5. v0.3.13Oct 14, 2026
  6. v0.3.12Sep 16, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分