mirror of
https://github.com/open-webui/mcpo.git
synced 2026-11-05 01:27:39 +00:00
[GH-ISSUE #184] issue: ability to filter stream events on global MCP SDK issue #84
Labels
No labels
bug
can't reproduce
documentation
enhancement
good first issue
help wanted
invalid
pull-request
question
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
open-webui/mcpo#84
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @Fastidius-au on GitHub (Jun 26, 2025).
Original GitHub issue: https://github.com/open-webui/mcpo/issues/184
Check Existing Issues
mcpo Version
ghcr.io/open-webui/mcpo:main
Open WebUI Version (if applicable)
No response
Operating System
windows ubuntu.......its message filtering code..
Browser (if applicable)
No response
Confirmation
README.md.Expected Behavior
not sure if this is directly related but I feel it is as it events to sse
{"jsonrpc":"2.0","method":"sse/connection",…}
acuvity has a minibridge with security and can be treated a bit like docker so you can attach to it and see stdio etc. live debug for mcp and ability to treat a bit like docker without docker...
anyways it spits these out and I had to make a policy file for it. A
Package minibridge
By default, deny everything
default allow = false
Whitelist only these notifications:
allow = true if input.method == "notifications/message"
allow = true if input.method == "notifications/progress"
allow = true if input.method == "notifications/cancelled"
Actual Behavior
crashes on tool parsing because response is part tools and part stdio I guess
Steps to Reproduce
sse with http fallback required for acuvity minibridge with some wrapping, seems to output more than what you want and you choke on a bad message type. Just need to filter out the not mcp messages to stream relay. try block the message parser so if not match drop.
https://github.com/acuvity/minibridge
lookit up seems good concept
Logs & Screenshots
docker run -it --rm -p 7778:8000 -v "$(pwd)/mcpo-servers-config.json:/config/mcpo-servers-config.json:ro" ghcr.io/open-webui/mcpo:main --api-key "top-secret" --config /config/mcpo-servers-config.json
Starting MCP OpenAPI Proxy with config file: /config/mcpo-servers-config.json
2025-06-26 15:17:13,762 - INFO - Starting MCPO Server...
2025-06-26 15:17:13,762 - INFO - Name: MCP OpenAPI Proxy
2025-06-26 15:17:13,762 - INFO - Version: 1.0
2025-06-26 15:17:13,762 - INFO - Description: Automatically generated API from MCP Tool Schemas
2025-06-26 15:17:13,762 - INFO - Hostname: 8fd25e6b299d
2025-06-26 15:17:13,762 - INFO - Port: 8000
2025-06-26 15:17:13,762 - INFO - API Key: Provided
2025-06-26 15:17:13,762 - INFO - CORS Allowed Origins: ['*']
2025-06-26 15:17:13,762 - INFO - Path Prefix: /
2025-06-26 15:17:13,763 - INFO - Loading MCP server configurations from: /config/mcpo-servers-config.json
2025-06-26 15:17:13,763 - INFO - Configured MCP Servers:
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server '21st-dev-magic' with URL: http://192.168.0.110:9001/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'brave-search' with URL: http://192.168.0.110:9003/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'calculator' with URL: http://192.168.0.110:9004/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'httpx' with URL: http://192.168.0.110:9006/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'github' with URL: http://192.168.0.110:9007/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'playwright' with URL: http://192.168.0.110:9008/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'fetch' with URL: http://192.168.0.110:9009/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'chart' with URL: http://192.168.0.110:90/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'desktop-commander' with URL: http://192.168.0.110:9012/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'git' with URL: http://192.168.0.110:9013/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'gitlab' with URL: http://192.168.0.110:9014/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'microsoft-graph' with URL: http://192.168.0.110:9015/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'sequential-thinking' with URL: http://192.168.0.110:9016/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'neo4j-memory' with URL: http://192.168.0.110:9018/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'waybackurls' with URL: http://192.168.0.110:9019/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'nmap' with URL: http://192.168.0.110:9020/sse
2025-06-26 15:17:13,765 - INFO - Uvicorn server starting...
INFO: Started server process [1]
INFO: Waiting for application startup.
2025-06-26 15:17:13,878 - INFO - HTTP Request: GET http://192.168.0.110:9001/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:13,880 - INFO - HTTP Request: POST http://192.168.0.110:9001/message?sessionId=0197acd0-7c16-7f19-843a-0a7469aff035 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:13,980 - WARNING - Failed to validate notification: 13 validation errors for ServerNotification
CancelledNotification.method
Input should be 'notifications/cancelled' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
CancelledNotification.params.requestId
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver v0.0.46 (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ProgressNotification.method
Input should be 'notifications/progress' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
ProgressNotification.params.progressToken
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver v0.0.46 (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ProgressNotification.params.progress
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver v0.0.46 (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
LoggingMessageNotification.method
Input should be 'notifications/message' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
LoggingMessageNotification.params.level
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver v0.0.46 (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
LoggingMessageNotification.params.data
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver v0.0.46 (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ResourceUpdatedNotification.method
Input should be 'notifications/resources/updated' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
ResourceUpdatedNotification.params.uri
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver v0.0.46 (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ResourceListChangedNotification.method
Input should be 'notifications/resources/list_changed' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
ToolListChangedNotification.method
Input should be 'notifications/tools/list_changed' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
PromptListChangedNotification.method
Input should be 'notifications/prompts/list_changed' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error. Message was: method='window/logMessage' params={'type': 3, 'message': 'Starting server v0.0.46 (PID: 362)'} jsonrpc='2.0'
2025-06-26 15:17:13,980 - WARNING - Failed to validate notification: 13 validation errors for ServerNotification
CancelledNotification.method
Input should be 'notifications/cancelled' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
CancelledNotification.params.requestId
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver started (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ProgressNotification.method
Input should be 'notifications/progress' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
ProgressNotification.params.progressToken
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver started (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ProgressNotification.params.progress
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver started (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
LoggingMessageNotification.method
Input should be 'notifications/message' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
LoggingMessageNotification.params.level
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver started (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
LoggingMessageNotification.params.data
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver started (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ResourceUpdatedNotification.method
Input should be 'notifications/resources/updated' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
ResourceUpdatedNotification.params.uri
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver started (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ResourceListChangedNotification.method
Input should be 'notifications/resources/list_changed' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
ToolListChangedNotification.method
Input should be 'notifications/tools/list_changed' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
PromptListChangedNotification.method
Input should be 'notifications/prompts/list_changed' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error. Message was: method='window/logMessage' params={'type': 3, 'message': 'Server started (PID: 362)'} jsonrpc='2.0'
2025-06-26 15:17:13,986 - INFO - HTTP Request: POST http://192.168.0.110:9001/message?sessionId=0197acd0-7c16-7f19-843a-0a7469aff035 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:13,987 - INFO - HTTP Request: POST http://192.168.0.110:9001/message?sessionId=0197acd0-7c16-7f19-843a-0a7469aff035 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:14,020 - INFO - HTTP Request: GET http://192.168.0.110:9003/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:14,022 - INFO - HTTP Request: POST http://192.168.0.110:9003/message?sessionId=0197acd0-7ca4-7f51-9715-03111d8d66b2 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:14,076 - INFO - HTTP Request: POST http://192.168.0.110:9003/message?sessionId=0197acd0-7ca4-7f51-9715-03111d8d66b2 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:14,077 - INFO - HTTP Request: POST http://192.168.0.110:9003/message?sessionId=0197acd0-7ca4-7f51-9715-03111d8d66b2 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:14,105 - INFO - HTTP Request: GET http://192.168.0.110:9004/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:14,107 - INFO - HTTP Request: POST http://192.168.0.110:9004/message?sessionId=0197acd0-7cf9-7af1-aa56-2da1e1224a94 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,281 - INFO - HTTP Request: POST http://192.168.0.110:9004/message?sessionId=0197acd0-7cf9-7af1-aa56-2da1e1224a94 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,282 - INFO - HTTP Request: POST http://192.168.0.110:9004/message?sessionId=0197acd0-7cf9-7af1-aa56-2da1e1224a94 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,310 - INFO - HTTP Request: GET http://192.168.0.110:9006/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:15,312 - INFO - HTTP Request: POST http://192.168.0.110:9006/message?sessionId=0197acd0-81ae-7d4a-83cf-2284124b66ff "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,386 - INFO - HTTP Request: POST http://192.168.0.110:9006/message?sessionId=0197acd0-81ae-7d4a-83cf-2284124b66ff "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,387 - INFO - HTTP Request: POST http://192.168.0.110:9006/message?sessionId=0197acd0-81ae-7d4a-83cf-2284124b66ff "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,416 - INFO - HTTP Request: GET http://192.168.0.110:9007/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:15,418 - INFO - HTTP Request: POST http://192.168.0.110:9007/message?sessionId=0197acd0-8218-7225-9955-7743d86ac3d0 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,420 - INFO - HTTP Request: POST http://192.168.0.110:9007/message?sessionId=0197acd0-8218-7225-9955-7743d86ac3d0 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,421 - INFO - HTTP Request: POST http://192.168.0.110:9007/message?sessionId=0197acd0-8218-7225-9955-7743d86ac3d0 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,509 - INFO - HTTP Request: GET http://192.168.0.110:9008/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:15,511 - INFO - HTTP Request: POST http://192.168.0.110:9008/message?sessionId=0197acd0-8275-7cfb-a74c-4516ee0d6ed9 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,898 - INFO - HTTP Request: POST http://192.168.0.110:9008/message?sessionId=0197acd0-8275-7cfb-a74c-4516ee0d6ed9 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,899 - INFO - HTTP Request: POST http://192.168.0.110:9008/message?sessionId=0197acd0-8275-7cfb-a74c-4516ee0d6ed9 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,947 - INFO - HTTP Request: GET http://192.168.0.110:9009/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:15,949 - INFO - HTTP Request: POST http://192.168.0.110:9009/message?sessionId=0197acd0-842b-7075-b910-9bfdd11fce14 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:17,206 - INFO - HTTP Request: POST http://192.168.0.110:9009/message?sessionId=0197acd0-842b-7075-b910-9bfdd11fce14 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:17,207 - INFO - HTTP Request: POST http://192.168.0.110:9009/message?sessionId=0197acd0-842b-7075-b910-9bfdd11fce14 "HTTP/1.1 202 Accepted"
ERROR: + Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/starlette/routing.py", line 692, in lifespan
| async with self.lifespan_context(app) as maybe_state:
| File "/usr/lib/python3.11/contextlib.py", line 204, in aenter
| return await anext(self.gen)
| ^^^^^^^^^^^^^^^^^^^^^
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 99, in lifespan
| async with AsyncExitStack() as stack:
| File "/usr/lib/python3.11/contextlib.py", line 733, in aexit
| raise exc_details[1]
| File "/usr/lib/python3.11/contextlib.py", line 716, in aexit
| cb_suppress = await cb(*exc_details)
| ^^^^^^^^^^^^^^^^^^^^^^
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 121, in lifespan
| async with sse_client(
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 54, in sse_client
| async with anyio.create_task_group() as tg:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 155, in sse_client
| yield read_stream, write_stream
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 127, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 130, in lifespan
| yield
| File "/usr/lib/python3.11/contextlib.py", line 716, in aexit
| cb_suppress = await cb(*exc_details)
| ^^^^^^^^^^^^^^^^^^^^^^
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 121, in lifespan
| async with sse_client(
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 54, in sse_client
| async with anyio.create_task_group() as tg:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 155, in sse_client
| yield read_stream, write_stream
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 127, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 130, in lifespan
| yield
| File "/usr/lib/python3.11/contextlib.py", line 716, in aexit
| cb_suppress = await cb(*exc_details)
| ^^^^^^^^^^^^^^^^^^^^^^
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 121, in lifespan
| async with sse_client(
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 54, in sse_client
| async with anyio.create_task_group() as tg:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 155, in sse_client
| yield read_stream, write_stream
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 127, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 130, in lifespan
| yield
| File "/usr/lib/python3.11/contextlib.py", line 716, in aexit
| cb_suppress = await cb(*exc_details)
| ^^^^^^^^^^^^^^^^^^^^^^
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 121, in lifespan
| async with sse_client(
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 54, in sse_client
| async with anyio.create_task_group() as tg:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 155, in sse_client
| yield read_stream, write_stream
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 127, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 130, in lifespan
| yield
| File "/usr/lib/python3.11/contextlib.py", line 716, in aexit
| cb_suppress = await cb(*exc_details)
| ^^^^^^^^^^^^^^^^^^^^^^
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 121, in lifespan
| async with sse_client(
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 54, in sse_client
| async with anyio.create_task_group() as tg:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 155, in sse_client
| yield read_stream, write_stream
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 127, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| ... (max_group_depth is 10)
+------------------------------------
ERROR: Application startup failed. Exiting.
Additional Information
docker run -it --rm -p 7778:8000 -v "$(pwd)/mcpo-servers-config.json:/config/mcpo-servers-config.json:ro" ghcr.io/open-webui/mcpo:main --api-key "top-secret" --config /config/mcpo-servers-config.json
Starting MCP OpenAPI Proxy with config file: /config/mcpo-servers-config.json
2025-06-26 15:17:13,762 - INFO - Starting MCPO Server...
2025-06-26 15:17:13,762 - INFO - Name: MCP OpenAPI Proxy
2025-06-26 15:17:13,762 - INFO - Version: 1.0
2025-06-26 15:17:13,762 - INFO - Description: Automatically generated API from MCP Tool Schemas
2025-06-26 15:17:13,762 - INFO - Hostname: 8fd25e6b299d
2025-06-26 15:17:13,762 - INFO - Port: 8000
2025-06-26 15:17:13,762 - INFO - API Key: Provided
2025-06-26 15:17:13,762 - INFO - CORS Allowed Origins: ['*']
2025-06-26 15:17:13,762 - INFO - Path Prefix: /
2025-06-26 15:17:13,763 - INFO - Loading MCP server configurations from: /config/mcpo-servers-config.json
2025-06-26 15:17:13,763 - INFO - Configured MCP Servers:
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server '21st-dev-magic' with URL: http://192.168.0.110:9001/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'brave-search' with URL: http://192.168.0.110:9003/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'calculator' with URL: http://192.168.0.110:9004/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'httpx' with URL: http://192.168.0.110:9006/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'github' with URL: http://192.168.0.110:9007/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'playwright' with URL: http://192.168.0.110:9008/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'fetch' with URL: http://192.168.0.110:9009/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'chart' with URL: http://192.168.0.110:90/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'desktop-commander' with URL: http://192.168.0.110:9012/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'git' with URL: http://192.168.0.110:9013/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'gitlab' with URL: http://192.168.0.110:9014/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'microsoft-graph' with URL: http://192.168.0.110:9015/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'sequential-thinking' with URL: http://192.168.0.110:9016/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'neo4j-memory' with URL: http://192.168.0.110:9018/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'waybackurls' with URL: http://192.168.0.110:9019/sse
2025-06-26 15:17:13,763 - INFO - Configuring SSE MCP Server 'nmap' with URL: http://192.168.0.110:9020/sse
2025-06-26 15:17:13,765 - INFO - Uvicorn server starting...
INFO: Started server process [1]
INFO: Waiting for application startup.
2025-06-26 15:17:13,878 - INFO - HTTP Request: GET http://192.168.0.110:9001/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:13,880 - INFO - HTTP Request: POST http://192.168.0.110:9001/message?sessionId=0197acd0-7c16-7f19-843a-0a7469aff035 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:13,980 - WARNING - Failed to validate notification: 13 validation errors for ServerNotification
CancelledNotification.method
Input should be 'notifications/cancelled' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
CancelledNotification.params.requestId
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver v0.0.46 (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ProgressNotification.method
Input should be 'notifications/progress' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
ProgressNotification.params.progressToken
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver v0.0.46 (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ProgressNotification.params.progress
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver v0.0.46 (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
LoggingMessageNotification.method
Input should be 'notifications/message' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
LoggingMessageNotification.params.level
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver v0.0.46 (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
LoggingMessageNotification.params.data
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver v0.0.46 (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ResourceUpdatedNotification.method
Input should be 'notifications/resources/updated' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
ResourceUpdatedNotification.params.uri
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver v0.0.46 (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ResourceListChangedNotification.method
Input should be 'notifications/resources/list_changed' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
ToolListChangedNotification.method
Input should be 'notifications/tools/list_changed' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
PromptListChangedNotification.method
Input should be 'notifications/prompts/list_changed' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error. Message was: method='window/logMessage' params={'type': 3, 'message': 'Starting server v0.0.46 (PID: 362)'} jsonrpc='2.0'
2025-06-26 15:17:13,980 - WARNING - Failed to validate notification: 13 validation errors for ServerNotification
CancelledNotification.method
Input should be 'notifications/cancelled' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
CancelledNotification.params.requestId
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver started (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ProgressNotification.method
Input should be 'notifications/progress' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
ProgressNotification.params.progressToken
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver started (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ProgressNotification.params.progress
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver started (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
LoggingMessageNotification.method
Input should be 'notifications/message' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
LoggingMessageNotification.params.level
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver started (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
LoggingMessageNotification.params.data
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver started (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ResourceUpdatedNotification.method
Input should be 'notifications/resources/updated' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
ResourceUpdatedNotification.params.uri
Field required [type=missing, input_value={'type': 3, 'message': 'S...ver started (PID: 362)'}, input_type=dict]
For further information visit https://errors.pydantic.dev/2.11/v/missing
ResourceListChangedNotification.method
Input should be 'notifications/resources/list_changed' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
ToolListChangedNotification.method
Input should be 'notifications/tools/list_changed' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error
PromptListChangedNotification.method
Input should be 'notifications/prompts/list_changed' [type=literal_error, input_value='window/logMessage', input_type=str]
For further information visit https://errors.pydantic.dev/2.11/v/literal_error. Message was: method='window/logMessage' params={'type': 3, 'message': 'Server started (PID: 362)'} jsonrpc='2.0'
2025-06-26 15:17:13,986 - INFO - HTTP Request: POST http://192.168.0.110:9001/message?sessionId=0197acd0-7c16-7f19-843a-0a7469aff035 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:13,987 - INFO - HTTP Request: POST http://192.168.0.110:9001/message?sessionId=0197acd0-7c16-7f19-843a-0a7469aff035 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:14,020 - INFO - HTTP Request: GET http://192.168.0.110:9003/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:14,022 - INFO - HTTP Request: POST http://192.168.0.110:9003/message?sessionId=0197acd0-7ca4-7f51-9715-03111d8d66b2 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:14,076 - INFO - HTTP Request: POST http://192.168.0.110:9003/message?sessionId=0197acd0-7ca4-7f51-9715-03111d8d66b2 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:14,077 - INFO - HTTP Request: POST http://192.168.0.110:9003/message?sessionId=0197acd0-7ca4-7f51-9715-03111d8d66b2 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:14,105 - INFO - HTTP Request: GET http://192.168.0.110:9004/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:14,107 - INFO - HTTP Request: POST http://192.168.0.110:9004/message?sessionId=0197acd0-7cf9-7af1-aa56-2da1e1224a94 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,281 - INFO - HTTP Request: POST http://192.168.0.110:9004/message?sessionId=0197acd0-7cf9-7af1-aa56-2da1e1224a94 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,282 - INFO - HTTP Request: POST http://192.168.0.110:9004/message?sessionId=0197acd0-7cf9-7af1-aa56-2da1e1224a94 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,310 - INFO - HTTP Request: GET http://192.168.0.110:9006/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:15,312 - INFO - HTTP Request: POST http://192.168.0.110:9006/message?sessionId=0197acd0-81ae-7d4a-83cf-2284124b66ff "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,386 - INFO - HTTP Request: POST http://192.168.0.110:9006/message?sessionId=0197acd0-81ae-7d4a-83cf-2284124b66ff "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,387 - INFO - HTTP Request: POST http://192.168.0.110:9006/message?sessionId=0197acd0-81ae-7d4a-83cf-2284124b66ff "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,416 - INFO - HTTP Request: GET http://192.168.0.110:9007/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:15,418 - INFO - HTTP Request: POST http://192.168.0.110:9007/message?sessionId=0197acd0-8218-7225-9955-7743d86ac3d0 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,420 - INFO - HTTP Request: POST http://192.168.0.110:9007/message?sessionId=0197acd0-8218-7225-9955-7743d86ac3d0 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,421 - INFO - HTTP Request: POST http://192.168.0.110:9007/message?sessionId=0197acd0-8218-7225-9955-7743d86ac3d0 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,509 - INFO - HTTP Request: GET http://192.168.0.110:9008/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:15,511 - INFO - HTTP Request: POST http://192.168.0.110:9008/message?sessionId=0197acd0-8275-7cfb-a74c-4516ee0d6ed9 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,898 - INFO - HTTP Request: POST http://192.168.0.110:9008/message?sessionId=0197acd0-8275-7cfb-a74c-4516ee0d6ed9 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,899 - INFO - HTTP Request: POST http://192.168.0.110:9008/message?sessionId=0197acd0-8275-7cfb-a74c-4516ee0d6ed9 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:15,947 - INFO - HTTP Request: GET http://192.168.0.110:9009/sse "HTTP/1.1 200 OK"
2025-06-26 15:17:15,949 - INFO - HTTP Request: POST http://192.168.0.110:9009/message?sessionId=0197acd0-842b-7075-b910-9bfdd11fce14 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:17,206 - INFO - HTTP Request: POST http://192.168.0.110:9009/message?sessionId=0197acd0-842b-7075-b910-9bfdd11fce14 "HTTP/1.1 202 Accepted"
2025-06-26 15:17:17,207 - INFO - HTTP Request: POST http://192.168.0.110:9009/message?sessionId=0197acd0-842b-7075-b910-9bfdd11fce14 "HTTP/1.1 202 Accepted"
ERROR: + Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/starlette/routing.py", line 692, in lifespan
| async with self.lifespan_context(app) as maybe_state:
| File "/usr/lib/python3.11/contextlib.py", line 204, in aenter
| return await anext(self.gen)
| ^^^^^^^^^^^^^^^^^^^^^
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 99, in lifespan
| async with AsyncExitStack() as stack:
| File "/usr/lib/python3.11/contextlib.py", line 733, in aexit
| raise exc_details[1]
| File "/usr/lib/python3.11/contextlib.py", line 716, in aexit
| cb_suppress = await cb(*exc_details)
| ^^^^^^^^^^^^^^^^^^^^^^
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 121, in lifespan
| async with sse_client(
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 54, in sse_client
| async with anyio.create_task_group() as tg:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 155, in sse_client
| yield read_stream, write_stream
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 127, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 130, in lifespan
| yield
| File "/usr/lib/python3.11/contextlib.py", line 716, in aexit
| cb_suppress = await cb(*exc_details)
| ^^^^^^^^^^^^^^^^^^^^^^
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 121, in lifespan
| async with sse_client(
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 54, in sse_client
| async with anyio.create_task_group() as tg:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 155, in sse_client
| yield read_stream, write_stream
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 127, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 130, in lifespan
| yield
| File "/usr/lib/python3.11/contextlib.py", line 716, in aexit
| cb_suppress = await cb(*exc_details)
| ^^^^^^^^^^^^^^^^^^^^^^
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 121, in lifespan
| async with sse_client(
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 54, in sse_client
| async with anyio.create_task_group() as tg:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 155, in sse_client
| yield read_stream, write_stream
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 127, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 130, in lifespan
| yield
| File "/usr/lib/python3.11/contextlib.py", line 716, in aexit
| cb_suppress = await cb(*exc_details)
| ^^^^^^^^^^^^^^^^^^^^^^
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 121, in lifespan
| async with sse_client(
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 54, in sse_client
| async with anyio.create_task_group() as tg:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 155, in sse_client
| yield read_stream, write_stream
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 127, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 130, in lifespan
| yield
| File "/usr/lib/python3.11/contextlib.py", line 716, in aexit
| cb_suppress = await cb(*exc_details)
| ^^^^^^^^^^^^^^^^^^^^^^
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 121, in lifespan
| async with sse_client(
| File "/usr/lib/python3.11/contextlib.py", line 222, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 54, in sse_client
| async with anyio.create_task_group() as tg:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| Exception Group Traceback (most recent call last):
| File "/app/.venv/lib/python3.11/site-packages/mcp/client/sse.py", line 155, in sse_client
| yield read_stream, write_stream
| File "/app/.venv/lib/python3.11/site-packages/mcpo/main.py", line 127, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/app/.venv/lib/python3.11/site-packages/anyio/_backends/_asyncio.py", line 772, in aexit
| raise BaseExceptionGroup(
| ExceptionGroup: unhandled errors in a TaskGroup (1 sub-exception)
+-+---------------- 1 ----------------
| ... (max_group_depth is 10)
+------------------------------------
ERROR: Application startup failed. Exiting.