apron-tools
Agent-ready provider API wrappers with typed schemas, OAuth scope mappings, and LLM function-calling definitions.
What is apron-tools?
Provider SDKs are designed for human developers — they expose hundreds or thousands of operations per provider. apron-tools adds what agents need:
- LLM function-calling schemas — structured tool definitions generated from Pydantic models.
- Curation — a selected subset of operations useful for agents, not the entire API surface.
- Tool-to-scope mappings — which OAuth scopes each tool requires.
- Provider quirk handling — surfaced and handled, not buried in SDK internals.
apron-tools defines tools, not transport. The same definitions can be served as MCP, OpenAPI, GraphQL, or plain Python callables. Tool definitions are more durable than wire protocols.
Installation
# Core only (tool definitions and schemas, no provider SDK dependencies).
# via uv
uv add apron-tools
# via pip
pip install apron-tools
# With specific provider extras (installs provider SDK dependencies).
# via uv
uv add apron-tools --extra slack --extra google
# via pip
pip install apron-tools[slack,google]
# All providers.
# via uv
uv add apron-tools --extra all
# via pip
pip install apron-tools[all]
Usage
Discover available tools
from apron_tools import discover_tools, get_tools_for_provider
# Discover tools across all installed providers.
# Only providers whose dependencies are installed will be found.
tools = discover_tools()
# Tools for a specific provider.
typeform_tools = get_tools_for_provider("typeform")
for td in typeform_tools:
print(f"{td.name}: {td.description}")
print(f" scopes: {td.scopes}")
print(f" docs: {td.api_docs_url}")
Call a tool
from apron_tools.providers.typeform.tools import list_forms
from apron_tools.providers.typeform.types import ListFormsParams
result = await list_forms(ListFormsParams(page_size=10), token="your-typeform-token")
# Typed attribute access.
for form in result.items:
print(f"{form.title} ({form.id})")
# LLM-readable string.
print(str(result))
# Dict or JSON.
result.model_dump()
result.model_dump_json()
Access tool metadata
Every tool function decorated with @tool has a _tool_definition attribute containing its metadata:
from apron_tools.providers.typeform.tools import list_forms
td = list_forms._tool_definition
td.name # "list_forms"
td.provider # "typeform"
td.scopes # ["forms:read"]
td.input_schema # JSON Schema from the Pydantic input model
td.output_schema # JSON Schema from the Pydantic output model
td.api_docs_url # "https://www.typeform.com/developers/create/reference/retrieve-forms/"
Adding a provider
Each provider is a directory under src/apron_tools/providers/:
src/apron_tools/providers/yourprovider/
├── __init__.py # Export tool functions
├── types.py # Pydantic input/output models
├── tools.py # Async tool functions with @tool decorator
└── scopes.py # OAuth scope enum and mappings
See src/apron_tools/providers/typeform/ for the reference implementation.
Provider PR checklist
- Create provider directory with
types.py,tools.py,scopes.py,__init__.py. - Add API docs URLs in
@tooldecorator and provider__init__.pydocstring. - Capture real API response snapshots in
tests/providers/yourprovider/testdata/. - Write tests — model validation, tool function tests (mocked HTTP), contract snapshots.
- Optionally add integration tests in
test_integration.py.
Development
Requires uv.
make setup # Install uv, create venv, sync deps, install pre-commit hooks
make test # Run unit tests (integration tests skipped by default)
make lint # Run pre-commit hooks (ruff, ty, detect-secrets)
make test-integration # Run integration tests (requires provider tokens)
Or using uv directly:
uv sync --group dev # Sync all dev dependencies
uv run pytest tests # Run tests
uv run pre-commit run --all-files # Run linters
Integration tests
Integration tests call real provider APIs and are skipped by default. To run them:
APRON_TOOLS_INTEGRATION_TESTS=1 TYPEFORM_TOKEN=xxx make test-integration
Each provider has its own token env var. Only providers with credentials set will run; the rest skip cleanly:
# Run just Slack integration tests.
APRON_TOOLS_INTEGRATION_TESTS=1 SLACK_TOKEN=xoxb-... make test-integration
# Run Google + Notion integration tests.
APRON_TOOLS_INTEGRATION_TESTS=1 GOOGLE_TOKEN=... NOTION_TOKEN=... make test-integration
License
Metadata
Release files for apron-tools 0.4.6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| apron_tools-0.4.6.tar.gz | 517.8 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| apron_tools-0.4.6-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 732.0 kB
Release files / apron_tools-0.4.6.tar.gz
| Download URL | apron_tools-0.4.6.tar.gz |
|---|---|
| Size | 517.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
ec3cf7955e96835c5ddb093baeb7dab5e4d9609ba06431e3512fbcc8a1b639bd
|
|
BLAKE2b-256 checksum How to use checksums |
56316e6076c987c4c4db49b0f457cd3e745f042919fca1c5f49fd88be3856901
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency logRelease files / apron_tools-0.4.6-py3-none-any.whl
| Download URL | apron_tools-0.4.6-py3-none-any.whl |
|---|---|
| Size | 214.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2976b23c9727e37beaa0fd63bee54a6d271a754e210c4f1fa56eb763f144e8a1
|
|
BLAKE2b-256 checksum How to use checksums |
917498e0c1bb3cd59432213303c3b4e726d26006d297a53addf80c9a204455e2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency logSecurity for apron-tools 0.4.6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for apron_tools-0.4.6.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 1, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.