Control-Anything
Analyze anything, control anything — strongest unofficial way to hand any software surface to an LLM. Define once, ship as Python API / CLI / MCP server / REST / Web UI / OpenCLI spec — pick which channels to enable per deployment.
Rename history:
api-anything 0.1.0-0.3.2→invoco 0.1.0-0.3.1→control-anything 0.1.0+(this series, 2026-04-20). Semantic intent: reflect the real product — controlling anything via LLM, not just "call" (invoco) or "REST API" (api-anything). SeeCHANGELOG.mdfull rename note.
The idea: SSMCE
Single Source, Multi-Channel Emission. You write the
function once; control-anything is the upstream orchestrator that hands it to
Typer, FastAPI, FastMCP, Gradio, and OpenCLI spec emitters so every consumer
(humans, agents, remote systems, beginners) gets the shape they need.
from control_anything import expose
@expose(channels=["api", "cli", "mcp", "ui"])
def blender_add_cube(x: float = 0, y: float = 0, z: float = 0) -> str:
"""Add a cube to the scene."""
import bpy # Blender official Python API (Tier 1 upstream)
bpy.ops.mesh.primitive_cube_add(location=(x, y, z))
return f"cube@({x},{y},{z})"
The same function becomes:
| Channel | Surface | Consumer |
|---|---|---|
api |
from control_anything_blender import add_cube |
engineers |
cli |
control-anything-blender add-cube 1 2 3 |
shell / agents / interactive humans |
mcp |
FastMCP server over stdio | Claude Code / Cursor / any MCP client |
rest |
POST /blender/add_cube |
remote agents / web backends |
ui |
localhost:7860 auto-form |
beginners, visual exploration |
opencli |
OpenCLI spec JSON + AGENT.md | ecosystem discovery |
0.1.0 (first release under the new name) ships the full SSMCE surface:
expose() decorator, registry, ChannelArtifact + build_channel() +
emit(), and control-anything serve --channels a,b,c parallel serve — all
preserved feature-complete from the previous invoco 0.3.1.
Install
pip install control-anything
No mandatory dependencies. Add channel support as needed:
pip install 'control-anything[cli]' # Typer
pip install 'control-anything[mcp]' # FastMCP
pip install 'control-anything[rest]' # FastAPI + Uvicorn
pip install 'control-anything[ui]' # Gradio
pip install 'control-anything[all]' # everything
0.1.0 quick tour
invoco --version
invoco info --json
invoco list # lists exposed functions in the current interpreter
from invoco import expose, registry
@expose
def greet(name: str) -> str:
"""Say hi."""
return f"hello {name}"
print(registry()["greet"].channels) # ['api', 'cli'] — default channels
Positioning
- Upstream ecosystems we stand on, not compete with: CLI-Anything (HKUDS), OpenCLI spec, Python bindings (
bpy,cv2,qgis), vendor SDKs (anthropic,openai,boto3). - Our layer: tier detection + routing + multi-channel emit. Invoco decides how a function reaches every audience, not whether the audience exists.
- Two audiences, one source: power users
import/ agents call MCP or CLI / beginners open the auto-generated UI. Nobody writes the function twice.
Roadmap
- 0.1.0 —
expose()decorator + registry + CLI skeleton. ✅ shipped. - 0.2 — channel emitters: Typer CLI, FastMCP, FastAPI, Gradio UI.
- 0.3 — OpenCLI spec emit + AGENT.md generation + tier-detection port from upstream api-anything lineage.
- 0.4 — CLI-Anything bridge (wrap HKUDS generated CLIs as typed Python APIs).
- 0.5+ — UIA generator for closed-source Windows apps (Tier 3A exclusive).
History
Invoco 0.1.0 supersedes the api-anything preview line (last published 0.3.1, will be deprecated once the channel emitters ship). Core tier-detection and UIA code from api-anything will be rewired under Invoco's SSMCE model in 0.3+.
License
Apache-2.0.
Metadata
Release files for control-anything 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| control_anything-0.1.0.tar.gz | 45.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| control_anything-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 79.2 kB
Release files / control_anything-0.1.0.tar.gz
| Download URL | control_anything-0.1.0.tar.gz |
|---|---|
| Size | 45.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e5f1617a42722d08ef35e0e3d3ebd3852cdd64c52740ec26ce8a883ba6136353
|
|
BLAKE2b-256 checksum How to use checksums |
585fb24f82bf0e1f47e1090d8057b9a46a5c569933f9fb8fc08f80fdfa894dee
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / control_anything-0.1.0-py3-none-any.whl
| Download URL | control_anything-0.1.0-py3-none-any.whl |
|---|---|
| Size | 33.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cdfb711a4a44db954fee25a7921c0178aab27b5bfaf9816faa1230474d3aae5b
|
|
BLAKE2b-256 checksum How to use checksums |
0b24dbd6d090d293276e7c4b6bb0ae1c48ed2cc49eae1b42c814b02f3f25784a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|