{"adoption": {"forks": 487, "observed_at": "2026-08-28T04:08:46.459016+00:00", "stars": 4357}, "canonical_url": "https://ross.abutalabs.com/products/mcpo", "card": {"archived": false, "artifact_type": "service", "description": "A simple, secure MCP-to-OpenAPI proxy server", "domain": ["large-language-models", "apis", "developer-tools"], "enriched": true, "function": ["mcp", "http-server", "api-gateway", "auth"], "health_score": 87, "homepage": "https://docs.openwebui.com/features/plugin/tools/openapi-servers/mcp", "language": "Python", "license": "MIT", "license_family": "permissive", "maturity": "active", "member_repos": ["open-webui/mcpo"], "name": "open-webui/mcpo", "platform": ["python", "self-hosted", "cli", "cross-platform"], "pushed_at": "2026-05-17T20:40:30+00:00", "repo": "open-webui/mcpo", "stars": 4357, "tags": ["mcp-proxy", "openapi", "model-context-protocol", "rest-api", "tool-server", "stdio", "sse", "open-webui", "auto-generated-docs", "ai-agents", "docker"], "topics": ["mcp", "mcp-server", "open-webui", "openapi", "mcp-to-openapi"], "urls": [], "use_cases": ["expose an mcp server as a rest api", "convert mcp tools to openapi endpoints", "use mcp servers with openapi clients and sdks", "connect mcp tools to open webui", "add auth and docs to a stdio mcp server", "serve multiple mcp tools behind one proxy with a config file", "run an mcp server in docker as an http service"], "what_it_is": "mcpo is a lightweight Python proxy that takes any MCP (Model Context Protocol) server command and exposes its tools as a standard OpenAPI-compatible REST HTTP server. It auto-generates interactive API docs, adds API-key auth, and supports stdio, SSE, and Streamable HTTP MCP server types, including multi-tool configs via a single file.", "when_to_avoid": ["Your clients already speak native MCP directly over stdio, SSE, or Streamable HTTP and don't need an OpenAPI façade", "You need full MCP protocol features such as streaming or bidirectional sessions that a REST mapping does not preserve", "You are looking for an MCP client or multi-server aggregator rather than a protocol-translating proxy"], "when_to_choose": ["Your apps, UIs, or SDKs only speak OpenAPI/REST but the tools you need are MCP servers", "You want Swagger-style interactive docs, API-key auth, and standard HTTP error handling around MCP tools with zero glue code", "You want to run many MCP tools behind one gateway, optionally under a reverse-proxy subpath"]}, "data_as_of": "2026-08-30T08:39:29.467469+00:00", "members": [{"path": "/products/mcpo", "repo": "open-webui/mcpo", "role": "main", "score": 70}], "provenance": {"archived": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.459016+00:00", "source": "github"}, "artifact_type": {"confidence": null, "enriched_at": "2026-08-29T18:21:29.439116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f425c489c858c9eb80bae750b9c560fe5323f756b7a9144b2c311431174b0068", "fetched_at": "2026-08-28T04:08:46.459016+00:00", "kind": "readme", "missing": false, "url": "https://github.com/open-webui/mcpo"}], "taxonomy_version": 1}, "description": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.459016+00:00", "source": "github"}, "domain": {"confidence": null, "enriched_at": "2026-08-29T18:21:29.439116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f425c489c858c9eb80bae750b9c560fe5323f756b7a9144b2c311431174b0068", "fetched_at": "2026-08-28T04:08:46.459016+00:00", "kind": "readme", "missing": false, "url": "https://github.com/open-webui/mcpo"}], "taxonomy_version": 1}, "enriched": {"inputs": [], "kind": "computed", "method": "enrichment_status"}, "function": {"confidence": null, "enriched_at": "2026-08-29T18:21:29.439116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f425c489c858c9eb80bae750b9c560fe5323f756b7a9144b2c311431174b0068", "fetched_at": "2026-08-28T04:08:46.459016+00:00", "kind": "readme", "missing": false, "url": "https://github.com/open-webui/mcpo"}], "taxonomy_version": 1}, "health_score": {"inputs": ["days_since_push", "days_since_release", "archived"], "kind": "computed", "method": "health_v1"}, "homepage": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.459016+00:00", "source": "github"}, "language": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.459016+00:00", "source": "github"}, "license": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.459016+00:00", "source": "github"}, "license_family": {"inputs": ["license"], "kind": "computed", "method": "license_family"}, "maturity": {"confidence": null, "enriched_at": "2026-08-29T18:21:29.439116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f425c489c858c9eb80bae750b9c560fe5323f756b7a9144b2c311431174b0068", "fetched_at": "2026-08-28T04:08:46.459016+00:00", "kind": "readme", "missing": false, "url": "https://github.com/open-webui/mcpo"}], "taxonomy_version": 1}, "member_repos": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.459016+00:00", "source": "github"}, "name": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.459016+00:00", "source": "github"}, "platform": {"confidence": null, "enriched_at": "2026-08-29T18:21:29.439116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f425c489c858c9eb80bae750b9c560fe5323f756b7a9144b2c311431174b0068", "fetched_at": "2026-08-28T04:08:46.459016+00:00", "kind": "readme", "missing": false, "url": "https://github.com/open-webui/mcpo"}], "taxonomy_version": 1}, "pushed_at": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.459016+00:00", "source": "github"}, "repo": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.459016+00:00", "source": "github"}, "stars": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.459016+00:00", "source": "github"}, "tags": {"confidence": null, "enriched_at": "2026-08-29T18:21:29.439116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f425c489c858c9eb80bae750b9c560fe5323f756b7a9144b2c311431174b0068", "fetched_at": "2026-08-28T04:08:46.459016+00:00", "kind": "readme", "missing": false, "url": "https://github.com/open-webui/mcpo"}], "taxonomy_version": 1}, "topics": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.459016+00:00", "source": "github"}, "urls": {"kind": "observed", "observed_at": "2026-08-28T04:08:46.459016+00:00", "source": "github"}, "use_cases": {"confidence": null, "enriched_at": "2026-08-29T18:21:29.439116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f425c489c858c9eb80bae750b9c560fe5323f756b7a9144b2c311431174b0068", "fetched_at": "2026-08-28T04:08:46.459016+00:00", "kind": "readme", "missing": false, "url": "https://github.com/open-webui/mcpo"}], "taxonomy_version": 1}, "what_it_is": {"confidence": null, "enriched_at": "2026-08-29T18:21:29.439116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f425c489c858c9eb80bae750b9c560fe5323f756b7a9144b2c311431174b0068", "fetched_at": "2026-08-28T04:08:46.459016+00:00", "kind": "readme", "missing": false, "url": "https://github.com/open-webui/mcpo"}], "taxonomy_version": 1}, "when_to_avoid": {"confidence": null, "enriched_at": "2026-08-29T18:21:29.439116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f425c489c858c9eb80bae750b9c560fe5323f756b7a9144b2c311431174b0068", "fetched_at": "2026-08-28T04:08:46.459016+00:00", "kind": "readme", "missing": false, "url": "https://github.com/open-webui/mcpo"}], "taxonomy_version": 1}, "when_to_choose": {"confidence": null, "enriched_at": "2026-08-29T18:21:29.439116+00:00", "kind": "inferred", "prompt_version": 1, "sources": [{"content_hash": "f425c489c858c9eb80bae750b9c560fe5323f756b7a9144b2c311431174b0068", "fetched_at": "2026-08-28T04:08:46.459016+00:00", "kind": "readme", "missing": false, "url": "https://github.com/open-webui/mcpo"}], "taxonomy_version": 1}}, "score": {"components": {"activity": 82, "longevity": 37, "rhythm": 72}, "computed_at": "2026-09-03T02:20:16.233290+00:00", "flags": [], "formula": "round(0.45*activity + 0.35*rhythm + 0.20*longevity); archived -> min(score, 10)", "inputs": {"age_days": 521, "days_push": 108, "days_rel": 187, "gap_med": 6.5, "n_releases_24m": 15}, "score": 70, "version": 2}, "staleness": {"enrichment_outdated": false, "low_confidence": false, "scrape_days": 9, "stale_scrape": false}}