github Python analyzed · update queued ef03c52

Zn070515/office-kit

github

Microsoft Office automation via COM/MCP (session-based, Word/Excel/PowerPoint) + HTML-first editable PPTX pipeline

maintainer
Zn070515
license
MIT
first seen
2026-08-05
last seen
2026-08-05
releases · 30d
1
short id

Drift inferred · capture-to-capture

No drift recorded — single capability capture; advisories appear once its surface changes.

capabilities 0 tools
transport stdio counts 0 tools · 0 res · 0 prompts permission surface via code analysis

No tools enumerated yet for this server.

skills & danger signals github-tarball
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

danger signals1

code evidence vv0.1.0 · github-tarball
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