Microsoft Office automation via COM/MCP (session-based, Word/Excel/PowerPoint) + HTML-first editable PPTX pipeline
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
No tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit ef03c52 · analyzer v30 · 3d ago
skills & prompt files 1
- agent-rules Zn070515-offipy-ef03c52/CLAUDE.md
danger signals1
- dynamic code execution __import__() Zn070515-offipy-ef03c52/tests/test_direct_contract.py :67
return __import__(name, *a, **k)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 253
filesystem 67
- fs (weak) Zn070515-offipy-ef03c52/scripts/bench/bench_deck.py :10
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/scripts/fetch_icons.py :22
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/scripts/gen_api_ref.py :10
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/scripts/gen_api_stub.py :17
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/scripts/install_smoke.py :40
import shutil - fs (weak) Zn070515-offipy-ef03c52/scripts/pypi_smoke.py :31
import shutil - fs (weak) Zn070515-offipy-ef03c52/scripts/verify_sdist.py :14
import shutil - fs (weak) Zn070515-offipy-ef03c52/scripts/verify_wheel.py :24
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/aesthetic.py :23
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/art/adapters.py :10
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/art/analyze.py :11
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/art/feedback.py :16
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/art/pixels.py :19
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/assets/manifest.py :15
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/assets/providers/icons.py :15
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/assets/render.py :18
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/audit/compare.py :19
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/audit/extract.py :25
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/audit/pptx.py :15
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/audit/rules.py :19
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/autopick.py :242
with open(html_path, encoding="utf-8") as f: - fs Zn070515-offipy-ef03c52/src/offipy/charts.py :364
with open(measurements_path, encoding="utf-8") as f: - fs Zn070515-offipy-ef03c52/src/offipy/cli.py :36
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/client.py :107
with _OPENER.open(f"{_base_url()}/ping", timeout=1): - fs Zn070515-offipy-ef03c52/src/offipy/deck.py :18
import shutil - fs Zn070515-offipy-ef03c52/src/offipy/envcheck.py :14
import shutil - fs Zn070515-offipy-ef03c52/src/offipy/feedback.py :18
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/icons.py :24
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/oplog.py :17
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/paths.py :12
from pathlib import Path - fs Zn070515-offipy-ef03c52/src/offipy/ppt.py :9
import shutil - fs (weak) Zn070515-offipy-ef03c52/tests/fixtures/audit/generate_audit_fixtures.py :18
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/fixtures/ppt/generate_minimal_text_shapes.py :23
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_api_stub.py :6
import shutil - fs (weak) Zn070515-offipy-ef03c52/tests/test_art_acceptance.py :1
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_art_adapters.py :3
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_art_analyze.py :3
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_art_deck.py :3
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_art_feedback.py :31
with path.open("a", encoding="utf-8") as fh: - fs (weak) Zn070515-offipy-ef03c52/tests/test_asset_deck_integration.py :11
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_asset_legacy_equivalence.py :30
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_assets_icons_provider.py :4
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_assets_license.py :4
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_audit_cli.py :5
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_audit_fixtures.py :12
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_audit_textfit.py :3
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_converter_workcopy_img.py :10
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_deck.py :8
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_deck_audit.py :10
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_deck_chart_preflight.py :11
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_deck_chart_target.py :12
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_deck_e2e.py :1
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_deck_icons.py :4
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_deck_render.py :1
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_gen_api_ref_en.py :9
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_golden/test_deck_golden.py :7
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_multi_doc.py :13
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_packaging.py :4
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_paths.py :5
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_ppt_export.py :2
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_ppt_export_slides_logic.py :3
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_ppt_fixture_structure.py :9
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_ppt_shape_edit_com.py :11
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_primitives_deck_integration.py :14
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_procedural_deck_integration.py :12
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_readme_links.py :10
from pathlib import Path - fs (weak) Zn070515-offipy-ef03c52/tests/test_usage_feedback_fixes.py :9
from pathlib import Path
shell / exec 19
- shell (weak) Zn070515-offipy-ef03c52/scripts/install_smoke.py :41
import subprocess - shell (weak) Zn070515-offipy-ef03c52/scripts/pypi_smoke.py :32
import subprocess - shell (weak) Zn070515-offipy-ef03c52/scripts/verify_sdist.py :15
import subprocess - shell Zn070515-offipy-ef03c52/src/offipy/client.py :7
import subprocess - shell Zn070515-offipy-ef03c52/src/offipy/core.py :15
import subprocess - shell Zn070515-offipy-ef03c52/src/offipy/deck.py :20
import subprocess - shell (weak) Zn070515-offipy-ef03c52/tests/test_api_stub.py :7
import subprocess - shell (weak) Zn070515-offipy-ef03c52/tests/test_art_acceptance.py :83
import subprocess - shell (weak) Zn070515-offipy-ef03c52/tests/test_asset_deck_integration.py :10
import subprocess as _sp - shell (weak) Zn070515-offipy-ef03c52/tests/test_assets_imports.py :4
import subprocess - shell (weak) Zn070515-offipy-ef03c52/tests/test_core_lazy.py :3
import subprocess - shell (weak) Zn070515-offipy-ef03c52/tests/test_deck_chart_preflight.py :10
import subprocess as _sp - shell (weak) Zn070515-offipy-ef03c52/tests/test_deck_chart_target.py :11
import subprocess as _sp - shell (weak) Zn070515-offipy-ef03c52/tests/test_deck_icons.py :3
import subprocess as _sp - shell (weak) Zn070515-offipy-ef03c52/tests/test_patterns_common.py :12
import subprocess - shell (weak) Zn070515-offipy-ef03c52/tests/test_ppt_shape_models.py :9
import subprocess - shell (weak) Zn070515-offipy-ef03c52/tests/test_primitives_deck_integration.py :13
import subprocess as _sp - shell (weak) Zn070515-offipy-ef03c52/tests/test_procedural_deck_integration.py :11
import subprocess as _sp - shell (weak) Zn070515-offipy-ef03c52/tests/test_pypi_smoke.py :4
import subprocess
network 10
- net (weak) Zn070515-offipy-ef03c52/scripts/fetch_icons.py :19
import urllib.error - net (weak) Zn070515-offipy-ef03c52/scripts/pypi_smoke.py :34
import urllib.error - net Zn070515-offipy-ef03c52/src/offipy/assets/uri.py :11
import urllib.parse - net Zn070515-offipy-ef03c52/src/offipy/client.py :10
import urllib.error - net Zn070515-offipy-ef03c52/src/offipy/deck.py :29
from urllib.parse import unquote - net (weak) Zn070515-offipy-ef03c52/tests/test_assets_procedural_negative.py :9
import socket - net (weak) Zn070515-offipy-ef03c52/tests/test_client.py :4
import urllib.error - net (weak) Zn070515-offipy-ef03c52/tests/test_error_codes.py :14
import urllib.error - net (weak) Zn070515-offipy-ef03c52/tests/test_pypi_smoke.py :5
import urllib.error - net (weak) Zn070515-offipy-ef03c52/tests/test_server_security.py :10
import socket
secrets 2
- secrets Zn070515-offipy-ef03c52/src/offipy/client.py :358
env = os.environ.get("OFFIPY_SERVER_TOKEN") - secrets Zn070515-offipy-ef03c52/src/offipy/server.py :168
env = os.environ.get("OFFIPY_SERVER_TOKEN")
declared dependencies 13
- mcp@>=2.0,<3.0
- tomli@>=2.0; python_version <
- pywin32@>=310; platform_system ==
- python-pptx@>=1.0.2,<2
- lxml@>=5.0
- fonttools@>=4.0
- playwright@>=1.40,<2
- Pillow@>=10.0
- offipy@*
- pytest@>=8.0
- pytest-cov@>=5.0
- ruff@>=0.6
- mypy@>=1.10