imbi-mcp
MCP server for the Imbi DevOps service management platform. Exposes Imbi API functionality to AI agents via the Model Context Protocol.
How It Works
At startup the server fetches the OpenAPI spec from a running imbi-api instance and auto-generates MCP tools, resources, and resource templates using FastMCP.
Route mapping rules control what gets exposed:
- Excluded -- Auth, MFA, status, and thumbnail endpoints are hidden.
- Resources --
GETendpoints that return collections. - Resource templates --
GETendpoints with path parameters. - Tools -- Everything else (create, update, delete operations).
The caller's Authorization header is forwarded to the API so that
requests run with the caller's permissions.
Authentication
Two modes, which can be used together:
- Token (always on). The caller's
Authorizationheader — an Imbiik_API key or a JWT — is forwarded to the API, which authorizes the request. This works with no extra configuration. - OAuth (when configured). Set
--public-urland--auth-server-url(see below) to make the server an OAuth 2.0 Resource Server. It then verifies JWT access tokens locally, accepts-and-forwardsik_API keys, and publishes Protected Resource Metadata so MCP clients can discover the Imbi authorization server and run a browser login flow (authorization-code + PKCE, with Dynamic Client Registration). Local JWT verification uses the sharedIMBI_AUTH_JWT_SECRET.
FastMCP's DNS-rebinding Host/Origin guard is opt-in (disabled by default as of
fastmcp 3.4.4), so requests arriving through a reverse proxy are accepted
normally. To enable it, set FASTMCP_HTTP_HOST_ORIGIN_PROTECTION=true and list
the public host(s) in FASTMCP_HTTP_ALLOWED_HOSTS='["your-host"]'.
Requirements
- Python 3.12+
- A running imbi-api instance
Quick Start
# Install dependencies
moon run root:setup
# Run the server (imbi-api must be reachable)
uv run imbi-mcp serve
# Or with explicit options
uv run imbi-mcp serve --api-url http://localhost:8000 --transport streamable-http
CLI Options
imbi-mcp serve [OPTIONS]
| Option | Default | Env Var | Description |
|---|---|---|---|
--api-url |
http://localhost:8000 |
IMBI_INTERNAL_API_URL |
Base URL of the Imbi API |
--transport |
streamable-http |
MCP transport type | |
--host |
127.0.0.1 |
Host to bind to | |
--port |
8001 |
Port to bind to | |
--public-url |
(none) | IMBI_MCP_PUBLIC_URL |
Public base URL of the host fronting this server, WITHOUT the /mcp path (e.g. https://host); FastMCP appends its own /mcp mount path. Enables OAuth with --auth-server-url |
--auth-server-url |
(none) | IMBI_MCP_AUTH_SERVER_URL |
Imbi OAuth issuer URL (e.g. https://host); enables OAuth with --public-url |
Supported transports: stdio, http, sse, streamable-http
Docker
docker build -t imbi-mcp .
docker run -p 8001:8001 -e IMBI_INTERNAL_API_URL=http://imbi-api:8000 imbi-mcp
Development
moon run root:setup # Install deps and pre-commit hooks
moon run mcp:test # Run tests (90% coverage minimum)
moon run mcp:lint mcp:typecheck mcp:format # Run ruff + basedpyright + format check
uv run pre-commit run --all-files # Auto-format code
License
BSD-3-Clause
Release files for imbi-mcp 2.25.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 | |
|---|---|---|---|
| imbi_mcp-2.25.0.tar.gz | 10.1 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| imbi_mcp-2.25.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.0 kB
Release files / imbi_mcp-2.25.0.tar.gz
| Download URL | imbi_mcp-2.25.0.tar.gz |
|---|---|
| Size | 10.1 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fe6bd8015a21539b93f2ed3665eefe24711171e88a59c7e84de0e7c96131ef79
|
|
BLAKE2b-256 checksum How to use checksums |
e0f93cf25247238ba9126299a2dfd6cdf9ba147a07569c0cfaad943ae3462488
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 14, 2026.
Transparency logRelease files / imbi_mcp-2.25.0-py3-none-any.whl
| Download URL | imbi_mcp-2.25.0-py3-none-any.whl |
|---|---|
| Size | 8.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
00807a4c732c71ae43314dc02fbb182d47c8ad0f2b0c0f4140e8dd128661b444
|
|
BLAKE2b-256 checksum How to use checksums |
86391890f1159d2a286b45fa72b545652d0b14365f9104d4b4419c7ba96e3c70
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 14, 2026.
Transparency log