[GH-ISSUE #257] feat: SSE/Streamable Hybrid Mode #117

Closed
opened 2026-10-18 21:11:55 +00:00 by bsakaguchi · 3 comments
Owner

Originally created by @daryltucker on GitHub (Sep 30, 2025).
Original GitHub issue: https://github.com/open-webui/mcpo/issues/257

Check Existing Issues

  • I have searched the existing issues and discussions.

Problem Description

I thought mcpo was going to save us all from MCP configuration hell. I still have to set up sixteen different MCP servers because I still can't set one up, and have it run stdio, sse, http and streamable-http.

Desired Solution you'd like

I'd love to see something like this:

command: ["mcpo", "--config", "/mcp-config.json", "--sse-port", "8001", "streamable-http-port", "8002"]

If you'd prefer to do it with endpoints /sse, /streamable-http, that's cool too.

Alternatives Considered

Wrapping clients in mcp-remote.
Now I have to wrap mcp-remote in mcp-proxy!?

Additional Context

I want to use mcpo and only mcpo. There are a lot of tools out there trying to do the whole "MCP Server" from scratch, but you have an opportunity to take that heavy lifting off of a lot of projects, and for us to all set up mcpo servers, and configure out clients to use it.

Currently, I set up mcpo with the thought that I'd plug my tools into it. Well, I can't really just do that, because they all want to run "npx" or "uvx" or whatever and do things themselves.

Some clients allow for 'type', just like mcpo, and that is wonderful. Many clients are still on SSE.

I wrote a tool that hits the root /openapi.json and generates a wrapper for clients that don't support this simple 'proxy' style configuration, using mcp-remote to handle the proxying. However, it won't work if this client over here uses SSE and this other client uses HTTP.

Now I have to wrap all my wraps up with another wrap of mcp-proxy... and.. yeah I know I'm not the only person and I know that if we could do something like this, it could really show people why they should be using mcpo and how you don't need anything other than mcpo to have a great MCP experience.

Originally created by @daryltucker on GitHub (Sep 30, 2025). Original GitHub issue: https://github.com/open-webui/mcpo/issues/257 ### Check Existing Issues - [x] I have searched the existing issues and discussions. ### Problem Description I thought `mcpo` was going to save us all from MCP configuration hell. I still have to set up sixteen different MCP servers because I still can't set one up, and have it run `stdio`, `sse`, `http` and `streamable-http`. ### Desired Solution you'd like I'd love to see something like this: ``` command: ["mcpo", "--config", "/mcp-config.json", "--sse-port", "8001", "streamable-http-port", "8002"] ``` If you'd prefer to do it with endpoints `/sse`, `/streamable-http`, that's cool too. ### Alternatives Considered Wrapping clients in `mcp-remote`. Now I have to wrap `mcp-remote` in `mcp-proxy`!? ### Additional Context I want to use `mcpo` and only `mcpo`. There are a lot of tools out there trying to do the whole "MCP Server" from scratch, but you have an opportunity to take that heavy lifting off of a lot of projects, and for us to all set up `mcpo` servers, and configure out clients to use it. Currently, I set up `mcpo` with the thought that I'd plug my tools into it. Well, I can't really just do that, because they all want to run "npx" or "uvx" or whatever and do things themselves. Some clients allow for 'type', just like `mcpo`, and that is wonderful. Many clients are still on SSE. I wrote a tool that hits the root `/openapi.json` and generates a wrapper for clients that don't support this simple 'proxy' style configuration, using `mcp-remote` to handle the proxying. However, it won't work if this client over here uses SSE and this other client uses HTTP. Now I have to wrap all my wraps up with another wrap of `mcp-proxy`... and.. yeah I know I'm not the only person and I know that if we could do something like this, it could really show people why they should be using `mcpo` and how you don't need anything other than `mcpo` to have a great MCP experience.
Author
Owner

@daryltucker commented on GitHub (Sep 30, 2025):

name: mcp
services:
  mcpo-stream:
    image: ghcr.io/open-webui/mcpo:main
    ports:
      - "8000:8000"
    volumes:
      - ./mcpo-compose.yml-config.json:/mcp-config.json:ro
    environment:
      - MCPO_API_KEY=${MCPO_AUTH_TOKEN:-OH_NOES_INSECURE}
      - MCPO_CONFIG=/mcp-config.json
    command: ["mcpo", "--config", "/mcp-config.json", "--server-type", "streamable-http"]
  mcpo-sse:
    image: ghcr.io/open-webui/mcpo:main
    ports:
      - "8001:8000"
    volumes:
      - ./mcpo-compose.yml-config.json:/mcp-config.json:ro
    environment:
      - MCPO_API_KEY=${MCPO_AUTH_TOKEN:-OH_NOES_INSECURE}
      - MCPO_CONFIG=/mcp-config.json
    command: ["mcpo", "--config", "/mcp-config.json", "--server-type", "sse"]
  mcpo-http:
    image: ghcr.io/open-webui/mcpo:main
    ports:
      - "8002:8000"
    volumes:
      - ./mcpo-compose.yml-config.json:/mcp-config.json:ro
    environment:
      - MCPO_API_KEY=${MCPO_AUTH_TOKEN:-OH_NOES_INSECURE}
      - MCPO_CONFIG=/mcp-config.json
    command: ["mcpo", "--config", "/mcp-config.json"]

networks:
    ollama-net:
        external: true

I suppose I'll just go this route for now.

<!-- gh-comment-id:3353017515 --> @daryltucker commented on GitHub (Sep 30, 2025): ```yaml name: mcp services: mcpo-stream: image: ghcr.io/open-webui/mcpo:main ports: - "8000:8000" volumes: - ./mcpo-compose.yml-config.json:/mcp-config.json:ro environment: - MCPO_API_KEY=${MCPO_AUTH_TOKEN:-OH_NOES_INSECURE} - MCPO_CONFIG=/mcp-config.json command: ["mcpo", "--config", "/mcp-config.json", "--server-type", "streamable-http"] mcpo-sse: image: ghcr.io/open-webui/mcpo:main ports: - "8001:8000" volumes: - ./mcpo-compose.yml-config.json:/mcp-config.json:ro environment: - MCPO_API_KEY=${MCPO_AUTH_TOKEN:-OH_NOES_INSECURE} - MCPO_CONFIG=/mcp-config.json command: ["mcpo", "--config", "/mcp-config.json", "--server-type", "sse"] mcpo-http: image: ghcr.io/open-webui/mcpo:main ports: - "8002:8000" volumes: - ./mcpo-compose.yml-config.json:/mcp-config.json:ro environment: - MCPO_API_KEY=${MCPO_AUTH_TOKEN:-OH_NOES_INSECURE} - MCPO_CONFIG=/mcp-config.json command: ["mcpo", "--config", "/mcp-config.json"] networks: ollama-net: external: true ``` I suppose I'll just go this route for now.
Author
Owner

@daryltucker commented on GitHub (Sep 30, 2025):

Oh, I had a pretty fundamental misunderstanding here. Big oof.

<!-- gh-comment-id:3353187422 --> @daryltucker commented on GitHub (Sep 30, 2025): Oh, I had a pretty fundamental misunderstanding here. Big oof.
Author
Owner

@rasodu commented on GitHub (Feb 25, 2026):

Same here. I thought I can use this project to expose SSE and steamable endpoints along with OpenAPI compatible interface for MCP. Well 😞

<!-- gh-comment-id:3961683111 --> @rasodu commented on GitHub (Feb 25, 2026): Same here. I thought I can use this project to expose SSE and steamable endpoints along with OpenAPI compatible interface for MCP. Well 😞
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
open-webui/mcpo#117
No description provided.