[build-system] requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" [project] name = "pyobfus-mcp" version = "0.3.12" description = "Model Context Protocol server for pyobfus — the Python obfuscator. Lets Claude Desktop, Claude Code, Cursor, GitHub Copilot, Windsurf, Zed, Codex, and CodeBuddy call pyobfus tools (preflight risk check, zero-config init, reverse stack-trace mapping) directly from an agent conversation. PyArmor alternative with first-class AI-debug story." readme = {file = "README.md", content-type = "text/markdown"} requires-python = ">=3.10" license = {text = "Apache-2.0"} authors = [ {name = "Rong Zhu", email = "zhurong0525@gmail.com"} ] keywords = [ "mcp", "mcp-server", "model-context-protocol", "pyobfus", "python-obfuscator", "code-obfuscator", "pyarmor-alternative", "claude-code", "claude-desktop", "cursor", "windsurf", "zed", "codex", "llm-tools", "ai-agent", "anthropic", "code-protection", "obfuscation", "security", "reverse-mapping", "github-copilot", "codebuddy", "ai-native", ] classifiers = [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Programming Language :: Python :: 3.14", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Security", ] dependencies = [ # >=0.5.1: the pro-funnel copy references the v0.5 Pro mechanisms and their # composable flags (Selective Opacity / watermarking / Vault / # --scrub-traceback / @seal_code), which land in pyobfus 0.5.1. Publish # pyobfus 0.5.1 before this MCP release. "pyobfus>=0.5.18", # Pin to mcp >=1.27 because that's the SDK we develop and test against # (the same version that surfaced the 0.1.1 FastMCP API drift). The 1.27 # API has the `meta=` kwarg on @app.tool() that we use for tool versioning # and tier metadata. Cap at <2.0 to keep the next major version from # silently re-introducing a breaking change. "mcp>=1.27.0,<2.0.0", ] [project.optional-dependencies] dev = [ "pytest>=7.0", "pytest-cov>=4.0", ] # OpenTelemetry instrumentation is opt-in via `pip install pyobfus-mcp[otel]`. # The secure_tool decorator soft-imports `opentelemetry`; if it's installed # AND `OTEL_EXPORTER_OTLP_ENDPOINT` is set in the environment, every tool # invocation emits a span with attributes (tool.name, tool.status, # tool.duration_ms). Without this extra, tool invocations work normally # with zero OTel overhead. otel = [ "opentelemetry-api>=1.20.0", "opentelemetry-sdk>=1.20.0", "opentelemetry-exporter-otlp>=1.20.0", ] [project.urls] Homepage = "https://github.com/zhurong2020/pyobfus" Repository = "https://github.com/zhurong2020/pyobfus" "Main Package" = "https://pypi.org/project/pyobfus/" "AI Integration Guide" = "https://github.com/zhurong2020/pyobfus/blob/main/docs/AI_INTEGRATION_STRATEGY.md" "MCP Registry" = "https://registry.modelcontextprotocol.io/v0/servers?search=pyobfus" "Citation" = "https://doi.org/10.5281/zenodo.20846053" [project.scripts] pyobfus-mcp = "pyobfus_mcp.server:main" pyobfus-mcp-verify = "pyobfus_mcp.tool_manifest:main" [tool.setuptools.packages.find] where = ["."] include = ["pyobfus_mcp*"] exclude = ["tests*"] [tool.setuptools.package-data] pyobfus_mcp = ["tool_manifest.json"]