Skip to main content

EasyPlugins 1.0.0

Memorable Python syntax for building portable ChatGPT/Codex Agent Plugin files. This is a third-party authoring helper, not an OpenAI SDK. It generates packages; it does not publish, install, host, authenticate, or grant account access.

Install (Python 3.10 or newer)

Extract this ZIP, open a terminal in the extracted folder containing pyproject.toml:

python -m pip install .

There is no published PyPI release from this project. Install the provided folder or included wheel. For local Python MCP tools, additionally install:

python -m pip install "mcp>=1.12,<2"

Your first plugin

Save this as my_plugin.py:

from easyplugins import Plugin_info, Plugin_Adon, Plugin_create_file

@Plugin_info(
    title="Writing Helper",
    description="Help people write clear messages.",
    author="Your name",
)
class MyPlugin:
    pass

@Plugin_Adon(MyPlugin)
def improve_writing():
    """Use when someone asks to improve a draft."""
    return "Ask who the audience is. Improve clarity while preserving the meaning."

if __name__ == "__main__":
    Plugin_create_file(MyPlugin)

Run python my_plugin.py. You get:

  • dist/writing-helper/plugin.json (title, author, version and listing metadata)
  • dist/writing-helper/skills/improve-writing/SKILL.md
  • dist/writing-helper.zip

Plugin_create_file is an ordinary function because building is an action. Use your decorated class (MyPlugin) as its argument, not the Plugin_info function. The directory is a lowercase slug; the display title keeps your capitalization.

No class required

plugin = Plugin_info("Writing Helper", "Help people write clear messages.")
Plugin_Adon(plugin, name="writing", description="Use for writing tasks.",
            instructions="Ask about audience and write a clear draft.")
Plugin_create_file(plugin, output="my-output")

Real Python tools

from easyplugins import Plugin_tool

@Plugin_tool(MyPlugin)
def add(a: int, b: int) -> int:
    """Add two integers."""
    return a + b

Add tools before the main build call. The full examples/my_plugin.py demonstrates this. All tools and metadata must live in one saved Python file. Type annotations are required for parameters. Async functions are supported by FastMCP.

The build copies that entire source file as plugin_source.py and generates server.py, requirements.txt and a stdio MCP entry in mcp.json. Keep file creation, prints, and other execution under if __name__ == "__main__": because the server loads the source module. Tool helpers in the same file work. External local modules/assets are not automatically bundled; install third-party dependencies in the server environment. Never put secrets in the source file: it is copied.

Install this package and MCP in the Python environment used by the host's python command. Generated requirements.txt identifies dependencies, but this unpublished package must first be installed from the provided wheel or source. A local stdio server requires a host that can launch local processes; a ZIP alone does not make Python tools run in ChatGPT web/mobile. Host connection, trust, and installation are separate steps.

Connect an existing remote MCP server

Plugin_Adon(MyPlugin, name="my-service", url="https://your-real-service.example/mcp")

Replace the example with a real endpoint you operate or are authorized to use. This writes streamable-http configuration; it does not verify the endpoint or configure its authentication. Skill-only plugins need no running Python server.

API reference

Helper Purpose
Plugin_info(title, description, author, version, name=..., short_description=...) Metadata object or class/function decorator
Plugin_Adon(plugin, name=..., description=...) Decorate a zero-argument function returning skill instructions
Plugin_Adon(plugin, instructions=...) Add instructions directly
Plugin_Adon(plugin, url=...) Add a remote HTTPS MCP connection
Plugin_Addon Correctly spelled alias for Plugin_Adon
Plugin_tool(plugin, name=..., description=...) Register a typed function as a tool
Plugin_create_file(plugin, output="dist", archive=True) Build a new folder and ZIP; return folder Path
Plugin_build Alias for Plugin_create_file

Existing output folders/archives are refused. Choose another output directory or remove an old build yourself. Names, metadata, duplicate registrations, URLs, tool parameters and empty plugins are validated. This is not a full JSON Schema or host compatibility validator. Python decorators execute real Python, so only run authoring files you trust.

Verification

python -m unittest discover -s tests -v
python examples/my_plugin.py

Package install, metadata/skill output, archive contents, duplicate-output protection and validation are tested. Generated MCP source is checked with a protocol smoke test using a stub if MCP is not available. Live MCP/ChatGPT host integration is not certified by these tests.

Format reference: https://developers.openai.com/plugins/build/plugins

License

MIT. See LICENSE.

Metadata

Release files for laurento-plugin-kit 1.0.0

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

Source distribution (sdist)

Source distribution for laurento-plugin-kit 1.0.0
File Size Uploaded
laurento_plugin_kit-1.0.0.tar.gz 8.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for laurento-plugin-kit 1.0.0
File Interpreter ABI Platform
laurento_plugin_kit-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 15.7 kB

Release files / laurento_plugin_kit-1.0.0.tar.gz

Download URL laurento_plugin_kit-1.0.0.tar.gz
Size 8.2 kB
Tags Source
SHA-256 checksum
How to use checksums
da383f9208a0a62080f610fea3ba540e7906886dffeb655eab0a514d728edd8e
BLAKE2b-256 checksum
How to use checksums
367270ed84ef74ee62475b07ec512d96941f6a35197e210e9bc915bf92484aac
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / laurento_plugin_kit-1.0.0-py3-none-any.whl

Download URL laurento_plugin_kit-1.0.0-py3-none-any.whl
Size 7.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
a5a0a1952afead146c71e6dc2265c2e654026abde3a53f100d5f1194111581eb
BLAKE2b-256 checksum
How to use checksums
225821c439175a03b2fb6a32dbfa7eb69175c234d4b2ccf826a33924237570c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

This release

1.0.0 This release

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