Skip to main content

agent-plugins

agent-plugins packages Agent Skills, Model Context Protocol configuration, and client extension files with a Python distribution. Each installed wheel carries the agent files that match its code version.

The package implements the portable Agent Plugins directory format and supports Python 3.10 through 3.14.

Ship an Agent Plugin

Keep one Agent Plugin tree beside the code it documents:

my-project/
├── plugin.json
├── skills/
│   └── use-my-package/
│       ├── SKILL.md
│       ├── agents/
│       ├── references/
│       └── scripts/
├── mcp.json
└── packages/
    └── python/
        └── pyproject.toml

skills/ contains Agent Skills. mcp.json contains Model Context Protocol server configuration when the plugin provides MCP servers.

Create plugin.json at the plugin root:

{
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
  "name": "my-project"
}

Configure the Python package to wrap uv_build:

[build-system]
requires = ["agent-plugins==0.1.1", "uv_build==0.12.2"]
build-backend = "agent_plugins.build.uv_build"

[tool.agent-plugins]
root = "../.."

root is relative to pyproject.toml. The build selects plugin.json, the complete skills/ tree, and mcp.json when present.

Build, install, and locate the packaged plugin:

uv build packages/python --out-dir dist
python -m pip install "agent-plugins==0.1.1" dist/my_package-*.whl
agent-plugins locate my-package
/.../site-packages/my_package-1.2.3.agent-plugin

The wheel contains the plugin directory and an agent_plugins.json marker in the distribution metadata. A source distribution stages the same files for a reproducible wheel rebuild. An editable install points the marker at the authored plugin tree.

Use Hatchling

Keep the plugin settings and select the Hatchling adapter:

[build-system]
requires = ["agent-plugins==0.1.1", "hatchling==1.31.0"]
build-backend = "agent_plugins.build.hatchling"

[tool.agent-plugins]
root = "../.."

Include other plugin files

Add root-relative patterns for executables or client extensions:

[tool.agent-plugins]
root = "../.."
include = ["bin/**", "com.example.client/**"]

Each pattern must stay within the plugin root and match at least one file.

Inspect an installed plugin

Add agent-plugins to the runtime dependencies of Python code that calls the inspection API:

[project]
dependencies = ["agent-plugins==0.1.1"]
import agent_plugins as ap

plugin = ap.locate("my-package")

print(plugin.manifest.name)
print(plugin.manifest.path)

for skill in plugin.skills:
    print(skill.path)
    print(skill / "SKILL.md")

if mcp := plugin.mcp:
    for name, server in mcp.servers.items():
        print(name, server)

ap.locate() accepts the distribution name used by pip. ap.installed() returns every discovered Agent Plugin keyed by distribution name.

Object Access
plugin.path Absolute plugin root
plugin.manifest Lazy plugin.json document
plugin.skills ap.Skill objects rooted under skills/
plugin.mcp Lazy mcp.json document, when present
plugin.files Files selected by the package build
plugin.tree() Bounded ASCII tree of the installed plugin
skill.frontmatter Source text between the --- delimiters
skill.body Markdown after the frontmatter
skill.files Files selected below the skill root

Manifest, MCP, and skill documents load on first parsed-field access and cache their result. Call ap.locate() again to read a fresh snapshot. Invalid documents raise ap.ValidationError.

MCP servers are frozen ap.StdioServer, ap.StreamableHTTPServer, or ap.SSEServer values. Their fields preserve placeholders such as ${PLUGIN_ROOT} for the agent client to resolve.

Inspect a build plan

Preview the files selected by [tool.agent-plugins] before building:

agent-plugins plan packages/python

Use --json for machine-readable output. Python build integrations can consume the same plan:

import agent_plugins as ap

plan = ap.build_plan("packages/python")
for file in plan.files:
    print(file.source, "->", file.target)

List every plugin visible in the current environment:

agent-plugins list --json

Develop and release

From a repository checkout, install the locked development environment and run the local checks:

uv sync --locked
uv run ruff format --check src tests
uv run ruff check src tests
uv run ty check
uv run pyrefly check
uv run pytest -q
./scripts/build-dist.sh

Prepare the version and lockfile in a release pull request:

uv version --bump patch

After the release commit reaches main and its push CI passes, update the local branch and start the tag-driven release:

git pull --ff-only origin main
./scripts/release.sh --dry-run
./scripts/release.sh

Before the first tag, configure PyPI to trust .github/workflows/publish.yml through the repository's pypi environment. PyPI documents the setup in Adding a Trusted Publisher.

Metadata

Release files for agent-plugins 0.1.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for agent-plugins 0.1.1
File Size Uploaded
agent_plugins-0.1.1.tar.gz 26.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for agent-plugins 0.1.1
File Interpreter ABI Platform
agent_plugins-0.1.1-py3-none-any.whl Python 3 none any Details

Total release size: 68.1 kB

Release files / agent_plugins-0.1.1.tar.gz

Download URL agent_plugins-0.1.1.tar.gz
Size 26.9 kB
Tags Source
SHA-256 checksum
How to use checksums
803a4ddf26f5d4eb50101c408296d3e09020dee7e3d2990396659c6da55cb84a
BLAKE2b-256 checksum
How to use checksums
5089aee7155b3abe61d3a30175613ef24fc7a93cfe0f69ac64a8b61ff6783f7e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / agent_plugins-0.1.1-py3-none-any.whl

Download URL agent_plugins-0.1.1-py3-none-any.whl
Size 41.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
30a4129ba7c8bdebb24fbf15a3ddbea346dc13c1ec5dcc69df0c9a48c091f67a
BLAKE2b-256 checksum
How to use checksums
d1213ebab3b138cf09e262321b4faa17a6e94fb23148d5be755f393c8e3869ea
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.12.7 {"installer":{"name":"uv","version":"0.12.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release history Release notifications | RSS feed

0.2.4

2 release files

0.2.3

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

This release

0.1.1 This release

2 release files

0.1.0

2 release files

0.0.1

2 release files

0.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page