Metadata-Version: 2.5
Name: outerspace-apizr
Version: 0.4.6
Summary: Compile Python codebases into discoverable, typed and governable capabilities.
Project-URL: Repository, https://github.com/Alien6-Studio/outerspace-apizr
Project-URL: Documentation, https://apizr.outerspace.sh/
Project-URL: Issues, https://github.com/Alien6-Studio/outerspace-apizr/issues
Project-URL: Releases, https://github.com/Alien6-Studio/outerspace-apizr/releases
Author-email: Ludovic FERNANDEZ <ludovic.fernandez@alien6.com>, Oussama HADJ AISSA <oussama.h.aissa@alien6.com>
License-Expression: GPL-3.0-or-later
License-File: LICENSE
Keywords: capabilities,mcp,python,rest,static-analysis
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: 3.15
Classifier: Topic :: Software Development :: Code Generators
Requires-Python: <3.16,>=3.11
Requires-Dist: pydantic<3,>=2.12
Provides-Extra: clients
Requires-Dist: pyyaml<7,>=6.0.2; extra == 'clients'
Provides-Extra: http
Requires-Dist: fastapi<1,>=0.141; extra == 'http'
Requires-Dist: httptools<1,>=0.9; extra == 'http'
Requires-Dist: python-multipart<1,>=0.0.31; extra == 'http'
Requires-Dist: starlette>=1.3.1; extra == 'http'
Requires-Dist: uvicorn<1,>=0.30; extra == 'http'
Requires-Dist: uvloop<1,>=0.23; (sys_platform != 'win32' and sys_platform != 'cygwin' and platform_python_implementation == 'CPython') and extra == 'http'
Requires-Dist: websockets<18,>=17; extra == 'http'
Provides-Extra: mcp
Requires-Dist: httptools<1,>=0.9; extra == 'mcp'
Requires-Dist: mcp<3,>=2.2; extra == 'mcp'
Requires-Dist: starlette>=1.3.1; extra == 'mcp'
Requires-Dist: uvicorn<1,>=0.30; extra == 'mcp'
Requires-Dist: uvloop<1,>=0.23; (sys_platform != 'win32' and sys_platform != 'cygwin' and platform_python_implementation == 'CPython') and extra == 'mcp'
Requires-Dist: websockets<18,>=17; extra == 'mcp'
Provides-Extra: notebook
Requires-Dist: black<27,>=26.3.1; extra == 'notebook'
Requires-Dist: ipython<10,>=9; extra == 'notebook'
Requires-Dist: nbconvert<8,>=7.17.1; extra == 'notebook'
Provides-Extra: preparation
Requires-Dist: packaging<27,>=26.3; extra == 'preparation'
Description-Content-Type: text/markdown

# OuterSpace Apizr

Turn existing Python functions into REST APIs or MCP tools. Inspect training
scripts and notebooks, record experiments, and compare their results.

Apizr **0.4.6** supports Python **3.11–3.15** on macOS and Linux.

[![PyPI](https://img.shields.io/pypi/v/outerspace-apizr.svg)](https://pypi.org/project/outerspace-apizr/)
[![CI](https://github.com/Alien6-Studio/outerspace-apizr/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/Alien6-Studio/outerspace-apizr/actions/workflows/ci.yml?query=branch%3Amaster)
[![Documentation](https://github.com/Alien6-Studio/outerspace-apizr/actions/workflows/site.yml/badge.svg?branch=gh-pages)](https://apizr.outerspace.sh/)
[![License](https://img.shields.io/badge/license-GPL--3.0--or--later-blue.svg)](https://apizr.outerspace.sh/about/LICENSE/)

## Install

With [uv](https://docs.astral.sh/uv/getting-started/installation/):

```sh
uv tool install outerspace-apizr==0.4.6
apizr --version
```

![Install Apizr 0.4.6 with uv](https://apizr.outerspace.sh/assets/videos/uv-install-0.4.6.gif)

Prefer pip or Homebrew? Follow the [installation guide](https://apizr.outerspace.sh/getting-started/install/).

## Try it

Save this as `pricing.py`:

```python
def total(quantity: int, unit_price: float) -> float:
    return round(quantity * unit_price, 2)
```

Inspect the function, then generate its MCP server:

```sh
apizr inspect pricing.py
apizr generate mcp pricing.py --select total --output-dir dist/mcp
```

Apizr reads the function without running it. You choose which functions to expose.
The generated server runs them when a client calls them.

Follow the [Quickstart](https://apizr.outerspace.sh/getting-started/quickstart/)
to start a server and make your first REST or MCP calls. The
[full walkthrough](https://apizr.outerspace.sh/getting-started/introduction/)
explains how this works across a project.

## Work with experiments

Start with a training script or notebook you want to understand:

<!-- experiment-inspection:readme -->
```sh
apizr experiment inspect train.py
```

The report shows the data, parameters and calculations found in the source.
It does not train a model or invent scores.

You can then run trusted code, keep its history, compare results and share a
selected prediction function. Start with the
[Data Scientist quickstart](https://apizr.outerspace.sh/getting-started/data-science/),
or follow the [Academy](https://apizr.outerspace.sh/academy/).

## Go further

- [Track Python calls and Jupyter cells](https://apizr.outerspace.sh/getting-started/tracking/).
- [Review experiments in VS Code](https://apizr.outerspace.sh/academy/vscode/).
- [Analyze a project from an MCP client](https://apizr.outerspace.sh/reference/apizr-mcp-server/).
- [Build a service image](https://apizr.outerspace.sh/reference/oci-service-plugin/)
  or [deliver it with Attest](https://apizr.outerspace.sh/reference/attest-delivery-plugin/).

The core handles inspection and generation. Plugins are optional. Run generated
services and experiments only with code and dependencies you trust.

[Documentation](https://apizr.outerspace.sh/) ·
[Release notes](https://github.com/Alien6-Studio/outerspace-apizr/releases) ·
[Contributing](https://apizr.outerspace.sh/about/CONTRIBUTING/) ·
[Report an issue](https://github.com/Alien6-Studio/outerspace-apizr/issues)
