feat: Connector to access MCP servers without inbound network connections #74

Closed
opened 2026-02-15 20:17:50 -05:00 by yindo · 1 comment
Owner

Originally created by @JRomainG on GitHub (May 29, 2025).

Check Existing Issues

  • I have searched the existing issues and discussions.

Problem Description

Users who wish to run MCP servers on their own computer (e.g. to access local files or applications) might not be able to expose an interface reachable from mcpo, limiting its potential.

When hosting every component locally, the integration works great:

flowchart LR
    open-webui["Open WebUI (127.0.0.1:8080)"] -- OpenAPI --> mcpo["mcpo (127.0.0.1:8081)"] -- stdin/SSE/HTTP --> mcp["MCP Server"]

However, this does not work if Open WebUI is running in the cloud and a user is running an MCP server locally on their home computer (which is typically not reachable from a cloud server due to NAT / firewall rules):

flowchart LR
    subgraph cloud
    open-webui["Open WebUI (server:8080)"]
    end

    subgraph home
    mcpo["mcpo (computer:8081)"]
    mcp["MCP Server"]
    open-webui -- OpenAPI --x mcpo -- stdin/SSE/HTTP --> mcp
    end

Desired Solution you'd like

It would be nice to have a feature like the Claude Desktop app, which could look like this:

flowchart LR
    subgraph cloud
    open-webui["Open WebUI"] -- OpenAPI --> connector["MCP Connector"]
    end

    subgraph home
    mcpo["mcpo"]
    mcp["MCP Server"]
    mcpo -- stdin/SSE/HTTP --> mcp
    connector <-- Websocket --> mcpo
    end

That way, the user could use mcpo for their local MCP servers and access them from a remote Open WebUI server. The flow could look something like this:

sequenceDiagram
    actor user
    box home
    participant mcp
    participant mcpo
    end
    box cloud
    participant connector
    participant open-webui
    end

    mcpo ->> mcp: Connect (stdin / SSE / HTTP)
    mcpo ->> connector: Register
    activate connector
    connector -->> mcpo: Unique endpoint
    mcpo -->> user: Unique endpoint

    user ->> open-webui: Configure tool server with unique endpoint
    open-webui ->> connector: Fetch tool server information
    connector ->> mcpo: Forward request
    mcpo ->> mcp: Convert and forward request
    mcp -->> mcpo: Reponse
    mcpo -->> connector: Convert and forward response
    connector --> open-webui: Forward response

    Note over mcp,open-webui: MCP server is now usable via tool calls
    deactivate connector

Or, perhaps better integrated:

sequenceDiagram
    actor user
    box home
    participant mcp
    participant mcpo
    end
    box cloud
    participant connector
    participant open-webui
    end

    user ->> open-webui: Create API key
    open-webui -->> user: API key
    user ->> mcpo: Configure API key

    mcpo ->> mcp: Connect (stdin / SSE / HTTP)
    mcpo ->> connector: Register using API key
    activate connector
    connector ->> open-webui: Register tool server using API key
    open-webui ->> connector: Fetch tool server information
    connector ->> mcpo: Forward request
    mcpo ->> mcp: Convert and forward request
    mcp -->> mcpo: Reponse
    mcpo -->> connector: Convert and forward response
    connector --> open-webui: Forward response

    Note over mcp,open-webui: MCP server is now usable via tool calls
    deactivate connector

Alternatives Considered

No response

Additional Context

No response

Originally created by @JRomainG on GitHub (May 29, 2025). ### Check Existing Issues - [x] I have searched the existing issues and discussions. ### Problem Description Users who wish to run MCP servers on their own computer (e.g. to access local files or applications) might not be able to expose an interface reachable from mcpo, limiting its potential. When hosting every component locally, the integration works great: ```mermaid flowchart LR open-webui["Open WebUI (127.0.0.1:8080)"] -- OpenAPI --> mcpo["mcpo (127.0.0.1:8081)"] -- stdin/SSE/HTTP --> mcp["MCP Server"] ``` However, this does not work if Open WebUI is running in the cloud and a user is running an MCP server locally on their home computer (which is typically not reachable from a cloud server due to NAT / firewall rules): ```mermaid flowchart LR subgraph cloud open-webui["Open WebUI (server:8080)"] end subgraph home mcpo["mcpo (computer:8081)"] mcp["MCP Server"] open-webui -- OpenAPI --x mcpo -- stdin/SSE/HTTP --> mcp end ``` ### Desired Solution you'd like It would be nice to have a feature like the Claude Desktop app, which could look like this: ```mermaid flowchart LR subgraph cloud open-webui["Open WebUI"] -- OpenAPI --> connector["MCP Connector"] end subgraph home mcpo["mcpo"] mcp["MCP Server"] mcpo -- stdin/SSE/HTTP --> mcp connector <-- Websocket --> mcpo end ``` That way, the user could use mcpo for their local MCP servers and access them from a remote Open WebUI server. The flow could look something like this: ```mermaid sequenceDiagram actor user box home participant mcp participant mcpo end box cloud participant connector participant open-webui end mcpo ->> mcp: Connect (stdin / SSE / HTTP) mcpo ->> connector: Register activate connector connector -->> mcpo: Unique endpoint mcpo -->> user: Unique endpoint user ->> open-webui: Configure tool server with unique endpoint open-webui ->> connector: Fetch tool server information connector ->> mcpo: Forward request mcpo ->> mcp: Convert and forward request mcp -->> mcpo: Reponse mcpo -->> connector: Convert and forward response connector --> open-webui: Forward response Note over mcp,open-webui: MCP server is now usable via tool calls deactivate connector ``` Or, perhaps better integrated: ```mermaid sequenceDiagram actor user box home participant mcp participant mcpo end box cloud participant connector participant open-webui end user ->> open-webui: Create API key open-webui -->> user: API key user ->> mcpo: Configure API key mcpo ->> mcp: Connect (stdin / SSE / HTTP) mcpo ->> connector: Register using API key activate connector connector ->> open-webui: Register tool server using API key open-webui ->> connector: Fetch tool server information connector ->> mcpo: Forward request mcpo ->> mcp: Convert and forward request mcp -->> mcpo: Reponse mcpo -->> connector: Convert and forward response connector --> open-webui: Forward response Note over mcp,open-webui: MCP server is now usable via tool calls deactivate connector ``` ### Alternatives Considered _No response_ ### Additional Context _No response_
yindo closed this issue 2026-02-15 20:17:50 -05:00
Author
Owner

@JRomainG commented on GitHub (May 31, 2025):

This was a misunderstand on my part, the OpenAPI request is performed by the user's browser, not the server hosting the Open WebUI interface. As such, as long as the user's browser can reach mcpo (which is the case if it's running locally and the tool server is configured as http://127.0.0.1:8000), everything works

@JRomainG commented on GitHub (May 31, 2025): This was a misunderstand on my part, the OpenAPI request is performed by the user's browser, not the server hosting the Open WebUI interface. As such, as long as the user's browser can reach `mcpo` (which is the case if it's running locally and the tool server is configured as `http://127.0.0.1:8000`), everything works
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: open-webui/mcpo#74