Skip to main content

Discovers Claude Code capabilities — skills, agents, plugins, MCP servers, hooks — into typed catalogs and an environment report.

Project description

capdisc

PyPI Python versions CI codecov License: MIT

Discovers Claude Code capabilities — skills, agents, plugins, MCP servers, hooks — into typed Pydantic catalogs and an environment report.

Install

uv add claude-code-capabilities
# or
pip install claude-code-capabilities

CLI

capdisc            # scan this machine, write discovery-report.json + .html
capdisc --oauth     # also allow the interactive OAuth flow for HTTP MCP servers
                    # with a pre-registered client (forces a fresh MCP harvest)

Both files are written to ~/.claude/capdisc/ by default. Configure paths and MCP auth via env vars (CAPDISC_ prefix), a .env file, or ~/.claude/capdisc/config.json/config.yaml — see DiscoverySettings in settings.py for every field.

Library

Scan the machine into a typed catalog:

from pathlib import Path
from capdisc.discovery import scan_environment
from capdisc.scope import ScopeRoots

roots = ScopeRoots.discover(start=Path.cwd(), home_dir=Path.home())
catalog = scan_environment(roots)
for entry in catalog.entries:
    ...  # CatalogSkill | CatalogTool | CatalogMcpServer | CatalogPlugin

Build and persist the full environment report (what the CLI does):

from capdisc.report import build_report, write_report

report = build_report(oauth=False)
write_report(report)  # -> ~/.claude/capdisc/discovery-report.{json,html}

Inspect the on-disk scope inventory directly — every skill/agent/command/hook found, its precedence, and which ones actually win a collision:

from capdisc.scope import ScopeInventory, ScopeRoots

inventory = ScopeInventory.scan(ScopeRoots.discover(start=Path.cwd(), home_dir=Path.home()))
print(len(inventory.artifacts), "captured,", len(inventory.effective), "in effect")
for hooks in inventory.hook_configs:
    ...  # HookConfig, unified from settings.json and component frontmatter

MCP servers

Read the last harvested tool inventory (fast, no network — served from a 12h cache):

from capdisc.mcp_harvest import read_mcp_cache, cache_is_stale

servers = read_mcp_cache()  # [] if there's no cache yet
if cache_is_stale():
    ...  # trigger a refresh (below) before trusting this

Force a fresh harvest — connects to every configured server concurrently (bounded) and lists their real tool schemas:

from capdisc.mcp_harvest import refresh_mcp_cache

servers = refresh_mcp_cache(oauth=False)  # also (re)writes the cache
for server in servers:
    print(server.ref, [t.name for t in server.tools])

Bearer/OAuth auth for HTTP servers is opt-in via settings, bound to an exact hostname so a same-named server elsewhere can never receive a credential meant for another:

export CAPDISC_MCP_BEARER_ENV='{"github": {"env": "GH_TOKEN", "host": "api.githubcopilot.com"}}'

report.EnvironmentReport captures the full discovery harvest (scan roots, on-disk inventory, skills, builtin tools, plugins with per-component token cost, MCP servers). mcp_harvest and mcp_catalog enumerate connected MCP servers; plugin_catalog reads installed plugins; scope resolves which roots to scan.

The package ships py.typed.

Tests

uv run pytest
uv run mypy src
uv run ruff check .

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

claude_code_capabilities-0.1.3.tar.gz (162.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

claude_code_capabilities-0.1.3-py3-none-any.whl (74.7 kB view details)

Uploaded Python 3

File details

Details for the file claude_code_capabilities-0.1.3.tar.gz.

File metadata

  • Download URL: claude_code_capabilities-0.1.3.tar.gz
  • Upload date:
  • Size: 162.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for claude_code_capabilities-0.1.3.tar.gz
Algorithm Hash digest
SHA256 6ee1ff1b1b8d184f6bf400ac45369452899ccd5c649cd786b4f1f0da1bcaac33
MD5 1691cf1c957e3615684acba0a3717dea
BLAKE2b-256 e6f01311616643f3189e0bf1b2bf8a07eb288f936f25a9323d1949819c26e13a

See more details on using hashes here.

Provenance

The following attestation bundles were made for claude_code_capabilities-0.1.3.tar.gz:

Publisher: publish.yml on Magic-Man-us/claude-code-capabilities

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file claude_code_capabilities-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for claude_code_capabilities-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 c451bbbc78a80c91c7c9d4575b933d01fbaf32234f21d6e5cf09334202a23006
MD5 22f4a28f0f0da45ba39cb5827b5e2a32
BLAKE2b-256 44ddda4e3160d97fa4f23296ce5ca0a96d81efd3f2f787e1ec8045de05791fd3

See more details on using hashes here.

Provenance

The following attestation bundles were made for claude_code_capabilities-0.1.3-py3-none-any.whl:

Publisher: publish.yml on Magic-Man-us/claude-code-capabilities

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page