pyobfus-mcp

Registre officiel Autres

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

Que pouvez-vous faire avec pyobfus-mcp ?

  • Protection strength: AES encryption, control-flow flattening, dead-code
  • Protected assets: import strings, embedded data, Runtime String Vault and
  • Distribution control: device, expiry, run-count, platform and
  • Accountability: forensic watermarking and buyer-specific builds.

Installation

Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).

PYPI package pyobfus-mcp
Claude Code
claude mcp add pyobfus-mcp -- uvx pyobfus-mcp==0.3.16
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "pyobfus-mcp": {
            "command": "uvx",
            "args": [
                "pyobfus-mcp==0.3.16"
            ]
        }
    }
}

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. pyobfus: the Python obfuscator
  2. Why pyobfus
  3. Quick start
  4. Minimal example
  5. Features at a glance
  6. 🔌 Companion MCP server: pyobfus-mcp
  7. Configuration
  8. How do I debug an obfuscated crash with an AI assistant?
  9. Purchase Professional Edition
  10. Security and limitations
  11. Comparison and deployment guides
  12. Architecture and development
  13. Community and citation

pyobfus: the Python obfuscator

Obfuscate Python before you ship it—and still debug what you shipped.

简体中文 · Product · Documentation · PyPI

-blue.svg)

pyobfus is a local-first, AST-based Python obfuscator for Python 3.9–3.15. It obfuscates multi-file projects and packages as a whole: names are renamed consistently across modules and imports are rewritten to match, so Community output is still ordinary .py that runs without pyobfus installed. Keep the mapping file from the build private, and pyobfus --unmap turns a production traceback back into your original names, for you or an AI coding agent. Community is Apache-2.0, has no file or line limits, and requires no trial.

v0.9.1: --unmap --trace-encoding reads tracebacks saved in legacy encodings such as cp1252 and reports undecodable input with exit 2 instead of crashing; piped stdin now defaults to UTF-8.

What's new in v0.9.0: --unmap now works for independent directory builds (--no-cross-file). The mapping records names per file, so two files that reuse the same short name restore to the right originals, frame by frame. Older mappings keep working; older pyobfus versions reject the new mapping format instead of guessing. See the debugging guide and the changelog.

Why pyobfus

AdvantageWhat it means in practice
Complete Community editionObfuscate real projects without a file/line cap or trial clock. Optional limits are your CI safety rails, not an upgrade gate.
Diagnosable protectionKeep the private mapping and restore identifiers in production tracebacks without giving customers the original source.
Evidence, not a black boxScan, preview, verify syntax, retain provenance and compare reproducible build reports.
Portable and local-firstSource stays local and there is no telemetry (what goes over the network); Community emits ordinary cross-platform Python without a native build matrix.
Explicit security claimsTested, verified-once and advisory-only claims are separated; deterrents are not presented as irreversible security.

Quick start

pip install pyobfus

# Check compatibility, preview, then build
pyobfus --check src/
pyobfus src/ -o dist/ --dry-run --json
pyobfus src/ -o dist/ --save-mapping mapping.json --verify-syntax
# --verify-syntax only compiles the output; run your own tests against dist/

# Restore names when a production traceback arrives
pyobfus --unmap --trace error.log --mapping mapping.json

In the next release, independent-file directory builds (--no-cross-file) also support --save-mapping. Their version-2 mapping resolves each traceback frame against its own file; names in excerpts and unframed logs stay unchanged. Use the new reader for these mappings; existing single-file and cross-file builds keep version 1. See the debugging guide.

Since 0.7.1, add opt-in --verify-names to check newly unbound globals without execution. Success JSON reports partial coverage explicitly; see name verification for usage and limits. Check the final directory or wheel with pyobfus --check-delivery dist/ --json before shipping.

For framework presets, configuration discovery, packaging and verification, start at the task-oriented documentation.

Minimal example

Input:

def greet(name):
    message = f"Hello, {name}!"
    return message

print(greet("world"))

Run pyobfus input.py -o output.py. Representative Community output:

def I0(I1):
    I2 = f"Hello, {I1}!"
    return I2

print(I0("world"))

Both print Hello, world!. Generated identifiers can differ with input and configuration; verify the exact output with your own tests. Keep a mapping when you need to restore names from a shipped traceback.

Parameter names are preserved by default in every preset. Explicit --no-preserve-param-names or YAML preserve_param_names: false keeps legacy renaming with a warning: keyword calls may raise TypeError or silently bind incorrectly. Rebuild from original source and keep the new mapping with the new artifact; mapping numbers can change and old mappings cannot decode rebuilt output. Cross-file directory builds (the default) still preserve parameters; legacy --no-cross-file directory builds follow the option.

Features at a glance

Community includes name mangling with import rewriting across a project (directories also rename function locals; parameters and methods remain unchanged there; single files also rename methods and preserve parameters by default, see the guide), string and numeric transforms, framework-aware presets, config-aware pre-flight scanning (including coarse hardcoded-secret screening without displaying values), SARIF, structured dry-run, reverse traceback mapping, syntax verification, provenance, reproducible output and verifiable build reports.

Professional adds four kinds of commercial value:

  • Protection strength: AES encryption, control-flow flattening, dead-code injection, anti-debugging, Selective Opacity and sealing.
  • Protected assets: import strings, embedded data, Runtime String Vault and protected tracebacks.
  • Distribution control: device, expiry, run-count, platform and application-supplied-key policies.
  • Accountability: forensic watermarking and buyer-specific builds.

The durable classification rule is documented in the Community / Pro boundary policy.

🔌 Companion MCP server: pyobfus-mcp

Install the MCP server with no API key and no source upload:

uvx pyobfus-mcp
# or: pip install pyobfus-mcp

It exposes structured tools for scanning, configuration, protection, verification, preset explanation, tier recommendations and traceback mapping. See the MCP package guide and its registration in the official MCP Registry.

Agent and editor integrations
  • pyobfus-review and pyobfus-protect skills separate read-only review from build-producing work. See skills.
  • The VS Code extension provides inline risk diagnostics and traceback reversal; it is also on Open VSX.
  • zhurong2020/pyobfus-action@v1 runs scans or verified builds in GitHub Actions with SARIF support.
  • The stable JSON CLI includes reason codes and an ai_hint next action.
  • Agent-readable project facts are published in llms.txt, while contributor instructions live in AGENTS.md.

All Agent guidance is public and human-auditable. pyobfus does not serve hidden instructions or different facts based on User-Agent.

Configuration

Generate a starting configuration or use a named preset:

pyobfus --init src/
pyobfus src/ -o dist/ --preset django
pyobfus --list-presets

Community presets include safe, balanced, aggressive, fastapi, django, flask, pydantic, click, sqlalchemy and ml. See the documentation home and pyobfus --help for current options. Optional max_files and max_total_loc values are user-selected safety limits at every tier.

How do I debug an obfuscated crash with an AI assistant?

Build with --save-mapping mapping.json, keep that file private, then run:

pyobfus --unmap --trace error.log --mapping mapping.json

The restored identifiers can be read by you or an AI assistant without giving the customer your mapping or original source. --trace-marker can also stamp generated files with the exact recovery command.

Purchase Professional Edition

Professional Edition is $45 USD, one time—not a subscription. A five-day trial requires no registration or card:

pyobfus-trial start

The trial is an honor-system convenience control, not a security boundary. Visit the product and purchase page for current payment methods, refund terms and purchase steps. After purchase, use the license activation guide.

Runtime-backed Pro artifacts depend on the separately redistributable, pure-Python pyobfus-runtime package. Target machines do not need the complete proprietary builder or a licence key.

Security and limitations

Obfuscation raises the cost of inspection; it does not make client-side Python irreversible. Runtime-decrypted material can be observed by a determined attacker. Keep credentials and authorization decisions behind environment, secret-manager or server boundaries.

Comparison and deployment guides

Architecture and development

The product line separates the Apache-2.0 Core, proprietary Pro builder, redistributable runtime, MCP package, editor extension and GitHub Action. See:

Community and citation

Use GitHub Issues for bugs and Discussions for questions and ideas. Citation metadata is in CITATION.cff, with archival DOI 10.5281/zenodo.20846053.

Core is Apache-2.0; Professional implementation is proprietary. See LICENSE-NOTICE.md.

Questions fréquentes

Qu'est-ce que pyobfus-mcp ?

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

Comment installer pyobfus-mcp ?

Il s'exécute sur votre machine. Dans Claude Code : claude mcp add pyobfus-mcp -- uvx pyobfus-mcp==0.3.16. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.

Faut-il une clé API pour pyobfus-mcp ?

Son entrée au registre n'indique aucune clé ni secret obligatoire. Certaines fonctions peuvent tout de même demander un compte auprès du service auquel il se connecte.

pyobfus-mcp est-il open source ?

Oui. Son code est sur GitHub sous licence Apache-2.0.

Qui maintient pyobfus-mcp ?

Il est publié par zhurong2020. AI.tn le référence sans le maintenir ni le recommander.

Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.