Control-Anything — analyze anything, control anything via LLM. SSMCE agent tool generator: one function, multi-channel emission (API/CLI/MCP/REST/UI/OpenCLI) + plugin discovery + parallel serve. Formerly api-anything / invoco.
Project description
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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file control_anything-0.1.0.tar.gz.
File metadata
- Download URL: control_anything-0.1.0.tar.gz
- Upload date:
- Size: 45.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e5f1617a42722d08ef35e0e3d3ebd3852cdd64c52740ec26ce8a883ba6136353
|
|
| MD5 |
40c2c93e0a2ff5390092ee7db2fdcf14
|
|
| BLAKE2b-256 |
585fb24f82bf0e1f47e1090d8057b9a46a5c569933f9fb8fc08f80fdfa894dee
|
File details
Details for the file control_anything-0.1.0-py3-none-any.whl.
File metadata
- Download URL: control_anything-0.1.0-py3-none-any.whl
- Upload date:
- Size: 33.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cdfb711a4a44db954fee25a7921c0178aab27b5bfaf9816faa1230474d3aae5b
|
|
| MD5 |
3453a65e1737eab4a51cdeaf95774fe7
|
|
| BLAKE2b-256 |
0b24dbd6d090d293276e7c4b6bb0ae1c48ed2cc49eae1b42c814b02f3f25784a
|