🌟 OpenAPI Tool Servers
This repository provides reference OpenAPI Tool Server implementations making it easy and secure for developers to integrate external tooling and data sources into LLM agents and workflows. Designed for maximum ease of use and minimal learning curve, these implementations utilize the widely adopted OpenAPI specification as the standard protocol.
By leveraging OpenAPI, we eliminate the need for a proprietary or unfamiliar communication protocol, ensuring you can quickly and confidently build or integrate servers. This means less time spent figuring out custom interfaces and more time building powerful tools that enhance your AI applications.
☝️ Why OpenAPI?
-
Established Standard: OpenAPI is a widely used, production-proven API standard backed by thousands of tools, companies, and communities.
-
No Reinventing the Wheel: No additional documentation or proprietary spec confusion. If you build REST APIs or use OpenAPI today, you're already set.
-
Easy Integration & Hosting: Deploy your tool servers externally or locally without vendor lock-in or complex configurations.
-
Strong Security Focus: Built around HTTP/REST APIs, OpenAPI inherently supports widely used, secure communication methods including HTTPS and well-proven authentication standards (OAuth, JWT, API Keys).
-
Future-Friendly & Stable: OpenAPI benefits from broad adoption, long-term community support, and a well-defined evolution process.
⚠️ Limitations
While OpenAPI tools are powerful for extending Open WebUI with external services, they have some constraints compared to native Python tools:
- One-way events only: OpenAPI tools can emit status updates, notifications, and other one-way events via the REST endpoint. Open WebUI passes
X-Open-WebUI-Chat-IdandX-Open-WebUI-Message-Idheaders to enable this. However, interactive events (user input prompts, confirmations) are only available for native Python tools. - No streaming output: Tool responses are returned as complete results, not streamed token-by-token.
If you need interactive UI feedback (confirmations, user input prompts), consider implementing your tool as a native Python Tool instead.
✅ Supported Spec Shapes
Open WebUI parses tool-server specs against the OpenAPI 3.x path-item model. The parser:
- Recognizes only the eight standard HTTP method keys (
get,put,post,delete,options,head,patch,trace) as operations. Any other key under a path — including extension keys (x-codeSamples,x-internal, etc.),summary,description,servers, andparameters— is skipped during operation discovery so it never causes a parse error. - Honors path-level
parameters: parameters declared once at the path level apply to every operation under that path. Operation-level parameters with the same(name, in)pair override path-level parameters, matching the OpenAPI specification. - URL-encodes path parameter values (
{id}substitution) and query parameter values, so values containing spaces,/,&,?, or other reserved characters are transmitted correctly. - Falls back gracefully between JSON and YAML when fetching the spec —
.yaml/.ymlURLs are parsed as YAML; everything else is tried as JSON first and as YAML on failure.
Specs that put parameters at the path level, expose extension keys, or rely on path-item metadata fields work without changes.
🚀 Quickstart
Get started quickly with our reference FastAPI-based implementations provided in the servers/ directory. (You can adapt these examples into your preferred stack as needed, such as using FastAPI, FastOpenAPI or any other OpenAPI-compatible library):
git clone https://github.com/open-webui/openapi-servers
cd openapi-serversWith Bash
# Example: Installing dependencies for a specific server 'filesystem'
cd servers/filesystem
pip install -r requirements.txt
uvicorn main:app --host 0.0.0.0 --reloadThe filesystem server should be reachable from: http://localhost:8000
The documentation path will be: http://localhost:8000
With Docker
If you have docker compose installed, bring the servers up with:
docker compose upThe services will be reachable from:
Now, simply point your OpenAPI-compatible clients or AI agents to your local or publicly deployed URL—no configuration headaches, no complicated transports.
🌱 Open WebUI Community
- For general discussions, technical exchange, and announcements, visit our Community Discussions page.
- Have ideas or feedback? Please open an issue!