# Files and directories excluded from the `.mcpb` bundle.
#
# The MCPB CLI (`npx @anthropic-ai/mcpb@latest pack`) reads this file
# the same way `.gitignore` is read — anything matching is omitted
# from the zip archive. The goal is a lean bundle (~250 KB) containing
# ONLY what Claude Desktop needs to invoke the server:
#
#   * src/zscaler_mcp/    — the Python package (v2 src/ layout)
#   * pyproject.toml      — uv reads this at install time to resolve deps
#   * manifest.json       — the MCPB manifest. The committed copy lives at
#                           integrations/anthropic/manifest.json (auto-
#                           generated, do not edit). The build flow
#                           (scripts/build_mcpb.py) copies it to the repo
#                           root at pack time, since `mcpb pack` requires
#                           it there. That root copy is NOT committed.
#   * assets/icon.png     — directory listing icon
#   * README.md           — surfaced in the directory listing
#   * LICENSE             — required by the spec
#
# Everything else is build / test / docs / dev infrastructure and adds
# nothing to a Claude Desktop user's experience.
#
# NOTE: integrations/ is ignored wholesale below, so the canonical
# integrations/anthropic/manifest.json never ships inside the bundle —
# only the root copy the build script materialises does.

# Version control / CI
.git/
.github/
.releaserc.json
codecov.yml

# Python build + dev tooling
.venv/
.pytest_cache/
.ruff_cache/
__pycache__/
*.pyc
*.pyo
*.pyd
zscaler_mcp.egg-info/
build/
dist/
uv.lock
# uv resolves deps from pyproject.toml at install time; the pinned
# requirements.txt (generated by set-version.sh) isn't read at runtime.
requirements.txt

# Tests
tests/

# Documentation source — the rendered site is hosted on GitHub Pages
# already; we don't need tens of MB of Sphinx / Docusaurus assets
# (built HTML, doctrees, walkthrough screenshots) inside the bundle.
docs/
docs-site/
docsrc/

# Repo-root docs / image assets (~10 MB of PNGs for the docs site
# walkthroughs, which Claude Desktop has no use for). The MCPB icon
# lives under ``assets/`` too (to keep the repo root clean) so the
# un-ignore rule below pulls just that one file back in.
#
# IMPORTANT: glob is ``assets/**`` not ``assets/``. A trailing-slash
# directory pattern excludes the directory entry itself, after which
# gitignore-style un-ignores like ``!assets/icon.png`` can no longer
# match (a child of a pruned directory is never re-considered). The
# ``**`` form excludes every child file recursively while leaving the
# directory eligible for the un-ignore rule to apply.
assets/**
!assets/icon.png

# Examples + integrations + skills + plugin commands / rules (none of
# these are runtime deps; they're Cursor / Claude Code / Gemini plugin
# materials that ship via their own integrations, not via MCPB).
examples/
integrations/
skills/
commands/
rules/

# Top-level repo scripts (setup helpers, doc generators) are dev tools
scripts/
Makefile

# Container + cloud infrastructure
Dockerfile
.dockerignore
.devcontainer/
docker-compose*.yml

# AI-agent context files (these target tools that pack the repo, not
# the Claude Desktop runtime — they'd just confuse the directory)
.claude/
.cursor/
.claude-plugin/
.cursor-plugin/
.mcp.json
CLAUDE.md
GEMINI.md
AGENTS.md

# Local maintainer-only artifacts
local_dev/
notes/
.env
.env.*
.DS_Store

# Linter configs not needed at runtime
.pylintrc
.markdownlint.json
.markdownlintignore
.readthedocs.yaml

# Release artifacts
CHANGELOG.md

# Other registry / plugin metadata at the repo root (these belong to
# parallel distribution channels — GitHub MCP Registry, Gemini CLI
# extension — and aren't read by Claude Desktop at runtime).
server.json
gemini-extension.json
mcp.json

# Don't recursively include a previously-built bundle inside the new one
*.mcpb

# IDE workspace files
.vscode/
.idea/
*.swp
*.swo
