A standalone HTTP ToolServer for the OmniBioAI ecosystem.
This service implements the REST contract expected by
omnibioai-tes (Tool Execution Service, legacy package name: omnibioai-tes) HttpToolServerAdapter`, enabling secure, validated, and reproducible execution of REST-backed bioinformatics tools (e.g. Enrichr, annotation services, external APIs).
It is designed to run independently and be registered as a remote execution server in OmniBioAI TES.
The ToolServer exposes the following endpoints:
-
GET /capabilitiesAdvertise supported tools, engines, resources, and runtime policies. -
POST /validateValidate tool inputs and resource requests. -
POST /runsSubmit a tool execution request. -
GET /runs/{id}Retrieve run state (QUEUED,RUNNING,COMPLETED,FAILED). -
GET /runs/{id}/logsRetrieve execution logs. -
GET /runs/{id}/resultsRetrieve structured tool results once the run is completed.
This contract matches the expectations of
omnibioai-tes → HttpToolServerAdapter.
-
Engine:
http_toolserver -
Tools:
enrichr_pathway— Pathway enrichment via Enrichr (REST, multipart-safe)
-
Execution model:
- Stateless REST calls
- Structured validation
- Run lifecycle tracking
-
Designed for:
- OmniBioAI agents
- TES-controlled execution
- Future multi-tool expansion (OMIM, GO, UniProt, etc.)
- Python ≥ 3.11
pip install -r requirements.txtuvicorn toolserver_app:create_app --factory --host 0.0.0.0 --port 9090curl http://127.0.0.1:9090/capabilities | python -m json.toolRegister this service as a server in omnibioai-tes:
- server_id: enrichment_remote
display_name: Enrichment ToolServer
adapter_type: http_toolserver
config:
base_url: "http://127.0.0.1:9090"Then submit runs through TES:
POST /api/runs/submitThe ToolServer is never called directly by the browser or LLM—all execution is mediated by TES.
- Create a new handler:
toolserver/tools/<new_tool>.py
Implement:
def _validate(inputs, resources) -> {
"ok": bool,
"errors": [],
"warnings": []
}
def _run(inputs, resources, log) -> Dict[str, Any]- Register the tool in:
toolserver/tools/__init__.py
registry.register(ToolHandler(...))- Restart the server.
The tool will be automatically advertised via /capabilities.
No changes are required in TES beyond refreshing server capabilities.
-
LLMs never execute tools directly
-
All execution is validated and audited
-
Strict separation between:
- intent (agents / UI)
- orchestration (TES)
- execution (ToolServer)
-
REST-first, container-friendly, and infrastructure-agnostic
- Frozen initial release
- Enrichr pathway enrichment working end-to-end with TES
- Stable API contract