[GH-ISSUE #199] issue: #91

Closed
opened 2026-10-18 21:11:38 +00:00 by bsakaguchi · 1 comment
Owner

Originally created by @yohei1126 on GitHub (Jul 14, 2025).
Original GitHub issue: https://github.com/open-webui/mcpo/issues/199

Check Existing Issues

  • I have searched the existing issues and discussions.
  • I am using the latest version of mcpo.

mcpo Version

0.0.16

Open WebUI Version (if applicable)

No response

Operating System

macOS

Browser (if applicable)

No response

Confirmation

  • I have read and followed all instructions in README.md.
  • I am using the latest version of both MCPO and Open WebUI.
  • I have included the browser console logs.
  • I have included the Docker container logs.
  • I have listed steps to reproduce the bug in detail.

Expected Behavior

$ cat ~/work/config.json
{
"mcpServers": {
"time": {
"command": "uvx",
"args": ["mcp-server-time", "--local-timezone=America/New_York"]
},
"neo4j-cypher": {
"command": "uvx",
"args": [
"mcp-neo4j-cypher",
"--db-url", "bolt://localhost:7687",
"--username", "neo4j",
"--password", "password123",
"--namespace", "lineage"
]
}
}
}
$ uv run mcpo --config ~/work/config.json
Starting MCP OpenAPI Proxy with config file: /xxx/work/config.json
2025-07-14 15:30:52,537 - INFO - Starting MCPO Server...
2025-07-14 15:30:52,538 - INFO - Name: MCP OpenAPI Proxy
2025-07-14 15:30:52,538 - INFO - Version: 1.0
2025-07-14 15:30:52,538 - INFO - Description: Automatically generated API from MCP Tool Schemas
2025-07-14 15:30:52,538 - INFO - Hostname: XP43WG00FM
2025-07-14 15:30:52,538 - INFO - Port: 8000
2025-07-14 15:30:52,538 - INFO - API Key: Not Provided
2025-07-14 15:30:52,538 - INFO - CORS Allowed Origins: ['*']
2025-07-14 15:30:52,538 - INFO - Path Prefix: /
2025-07-14 15:30:52,539 - INFO - Loading MCP server configurations from: /Users/yohei.onishi/work/config.json
2025-07-14 15:30:52,539 - INFO - Configured MCP Servers:
2025-07-14 15:30:52,539 - INFO - Configuring Stdio MCP Server 'time' with command: uvx with args: ['mcp-server-time', '--local-timezone=America/New_York']
2025-07-14 15:30:52,540 - INFO - Configuring Stdio MCP Server 'neo4j-cypher' with command: uvx with args: ['mcp-neo4j-cypher', '--db-url', 'bolt://localhost:7687', '--username', 'neo4j', '--password', 'password123', '--namespace', 'lineage']
2025-07-14 15:30:52,540 - INFO - Uvicorn server starting...
INFO: Started server process [53131]
INFO: Waiting for application startup.
[07/14/25 15:30:57] INFO Running Neo4j Cypher MCP Server with server.py:170
stdio transport...
INFO Processing request of type server.py:625
ListToolsRequest
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)

Actual Behavior

$ mcpo --config config.json
Starting MCP OpenAPI Proxy with config file: config.json
2025-07-14 15:10:15,420 - INFO - Starting MCPO Server...
2025-07-14 15:10:15,420 - INFO - Name: MCP OpenAPI Proxy
2025-07-14 15:10:15,420 - INFO - Version: 1.0
2025-07-14 15:10:15,420 - INFO - Description: Automatically generated API from MCP Tool Schemas
2025-07-14 15:10:15,420 - INFO - Hostname: XP43WG00FM
2025-07-14 15:10:15,420 - INFO - Port: 8000
2025-07-14 15:10:15,420 - INFO - API Key: Not Provided
2025-07-14 15:10:15,420 - INFO - CORS Allowed Origins: ['*']
2025-07-14 15:10:15,420 - INFO - Path Prefix: /
2025-07-14 15:10:15,420 - INFO - Loading MCP server configurations from: config.json
2025-07-14 15:10:15,422 - INFO - Configured MCP Servers:
2025-07-14 15:10:15,422 - INFO - Configuring Stdio MCP Server 'time' with command: uvx with args: ['mcp-server-time', '--local-timezone=America/New_York']
2025-07-14 15:10:15,422 - INFO - Configuring Stdio MCP Server 'neo4j-cypher' with command: uvx with args: ['mcp-neo4j-cypher', '--db-url', 'bolt://localhost:7687', '--username', 'neo4j', '--password', 'password123', '--namespace', 'lineage']
2025-07-14 15:10:15,422 - INFO - Uvicorn server starting...
INFO: Started server process [45290]
INFO: Waiting for application startup.
[07/14/25 15:10:19] INFO Running Neo4j Cypher MCP Server with stdio transport... server.py:170
INFO Processing request of type ListToolsRequest server.py:625
ERROR: + Exception Group Traceback (most recent call last):
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/starlette/routing.py", line 694, in lifespan
| async with self.lifespan_context(app) as maybe_state:
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 210, in aenter
| return await anext(self.gen)
| ^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 98, in lifespan
| async with AsyncExitStack() as stack:
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 745, in aexit
| raise exc_details[1]
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 728, in aexit
| cb_suppress = await cb(*exc_details)
| ^^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 231, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 113, in lifespan
| async with stdio_client(server_params) as (reader, writer):
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 231, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/init.py", line 180, in stdio_client
| async with (
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/init.py", line 187, in stdio_client
| yield read_stream, write_stream
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 114, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 117, in lifespan
| yield
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 101, in lifespan
| await stack.enter_async_context(
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 650, in enter_async_context
| result = await _enter(cm)
| ^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 210, in aenter
| return await anext(self.gen)
| ^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 113, in lifespan
| async with stdio_client(server_params) as (reader, writer):
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 231, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/init.py", line 180, in stdio_client
| async with (
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/init.py", line 187, in stdio_client
| yield read_stream, write_stream
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 114, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 ----------------
| Traceback (most recent call last):
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 116, in lifespan
| await create_dynamic_endpoints(app, api_dependency=api_dependency)
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 61, in create_dynamic_endpoints
| response_model_fields = get_model_fields(
| ^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 236, in get_model_fields
| python_type_hint, pydantic_field_info = _process_schema_property(
| ^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 204, in _process_schema_property
| item_type_hint, _ = _process_schema_property(
| ^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 166, in _process_schema_property
| nested_type_hint, nested_pydantic_field = _process_schema_property(
| ^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 126, in _process_schema_property
| type_hint, _ = _process_schema_property(
| ^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 112, in _process_schema_property
| assert ref in schema_defs, "Custom field not found"
| ^^^^^^^^^^^^^^^^^^
| TypeError: argument of type 'NoneType' is not iterable
+------------------------------------

ERROR: Application startup failed. Exiting.

Steps to Reproduce

  1. create config.json
    {
    "mcpServers": {
    "time": {
    "command": "uvx",
    "args": ["mcp-server-time", "--local-timezone=America/New_York"]
    },
    "neo4j-cypher": {
    "command": "uvx",
    "args": [
    "mcp-neo4j-cypher",
    "--db-url", "bolt://localhost:7687",
    "--username", "neo4j",
    "--password", "password123",
    "--namespace", "lineage"
    ]
    }
    }
    }
  2. run uv run mcpo --config ./config.json

Logs & Screenshots

$ mcpo --config config.json
Starting MCP OpenAPI Proxy with config file: config.json
2025-07-14 15:10:15,420 - INFO - Starting MCPO Server...
2025-07-14 15:10:15,420 - INFO - Name: MCP OpenAPI Proxy
2025-07-14 15:10:15,420 - INFO - Version: 1.0
2025-07-14 15:10:15,420 - INFO - Description: Automatically generated API from MCP Tool Schemas
2025-07-14 15:10:15,420 - INFO - Hostname: XP43WG00FM
2025-07-14 15:10:15,420 - INFO - Port: 8000
2025-07-14 15:10:15,420 - INFO - API Key: Not Provided
2025-07-14 15:10:15,420 - INFO - CORS Allowed Origins: ['*']
2025-07-14 15:10:15,420 - INFO - Path Prefix: /
2025-07-14 15:10:15,420 - INFO - Loading MCP server configurations from: config.json
2025-07-14 15:10:15,422 - INFO - Configured MCP Servers:
2025-07-14 15:10:15,422 - INFO - Configuring Stdio MCP Server 'time' with command: uvx with args: ['mcp-server-time', '--local-timezone=America/New_York']
2025-07-14 15:10:15,422 - INFO - Configuring Stdio MCP Server 'neo4j-cypher' with command: uvx with args: ['mcp-neo4j-cypher', '--db-url', 'bolt://localhost:7687', '--username', 'neo4j', '--password', 'password123', '--namespace', 'lineage']
2025-07-14 15:10:15,422 - INFO - Uvicorn server starting...
INFO: Started server process [45290]
INFO: Waiting for application startup.
[07/14/25 15:10:19] INFO Running Neo4j Cypher MCP Server with stdio transport... server.py:170
INFO Processing request of type ListToolsRequest server.py:625
ERROR: + Exception Group Traceback (most recent call last):
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/starlette/routing.py", line 694, in lifespan
| async with self.lifespan_context(app) as maybe_state:
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 210, in aenter
| return await anext(self.gen)
| ^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 98, in lifespan
| async with AsyncExitStack() as stack:
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 745, in aexit
| raise exc_details[1]
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 728, in aexit
| cb_suppress = await cb(*exc_details)
| ^^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 231, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 113, in lifespan
| async with stdio_client(server_params) as (reader, writer):
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 231, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/init.py", line 180, in stdio_client
| async with (
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/init.py", line 187, in stdio_client
| yield read_stream, write_stream
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 114, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 117, in lifespan
| yield
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 101, in lifespan
| await stack.enter_async_context(
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 650, in enter_async_context
| result = await _enter(cm)
| ^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 210, in aenter
| return await anext(self.gen)
| ^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 113, in lifespan
| async with stdio_client(server_params) as (reader, writer):
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 231, in aexit
| await self.gen.athrow(typ, value, traceback)
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/init.py", line 180, in stdio_client
| async with (
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/init.py", line 187, in stdio_client
| yield read_stream, write_stream
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 114, in lifespan
| async with ClientSession(reader, writer) as session:
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 ----------------
| Traceback (most recent call last):
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 116, in lifespan
| await create_dynamic_endpoints(app, api_dependency=api_dependency)
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 61, in create_dynamic_endpoints
| response_model_fields = get_model_fields(
| ^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 236, in get_model_fields
| python_type_hint, pydantic_field_info = _process_schema_property(
| ^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 204, in _process_schema_property
| item_type_hint, _ = _process_schema_property(
| ^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 166, in _process_schema_property
| nested_type_hint, nested_pydantic_field = _process_schema_property(
| ^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 126, in _process_schema_property
| type_hint, _ = _process_schema_property(
| ^^^^^^^^^^^^^^^^^^^^^^^^^
| File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 112, in _process_schema_property
| assert ref in schema_defs, "Custom field not found"
| ^^^^^^^^^^^^^^^^^^
| TypeError: argument of type 'NoneType' is not iterable
+------------------------------------

ERROR: Application startup failed. Exiting.

Additional Information

No response

Originally created by @yohei1126 on GitHub (Jul 14, 2025). Original GitHub issue: https://github.com/open-webui/mcpo/issues/199 ### Check Existing Issues - [x] I have searched the existing issues and discussions. - [x] I am using the latest version of mcpo. ### mcpo Version 0.0.16 ### Open WebUI Version (if applicable) _No response_ ### Operating System macOS ### Browser (if applicable) _No response_ ### Confirmation - [x] I have read and followed all instructions in `README.md`. - [x] I am using the latest version of **both** MCPO and Open WebUI. - [x] I have included the browser console logs. - [x] I have included the Docker container logs. - [x] I have listed steps to reproduce the bug in detail. ### Expected Behavior $ cat ~/work/config.json { "mcpServers": { "time": { "command": "uvx", "args": ["mcp-server-time", "--local-timezone=America/New_York"] }, "neo4j-cypher": { "command": "uvx", "args": [ "mcp-neo4j-cypher", "--db-url", "bolt://localhost:7687", "--username", "neo4j", "--password", "password123", "--namespace", "lineage" ] } } } $ uv run mcpo --config ~/work/config.json Starting MCP OpenAPI Proxy with config file: /xxx/work/config.json 2025-07-14 15:30:52,537 - INFO - Starting MCPO Server... 2025-07-14 15:30:52,538 - INFO - Name: MCP OpenAPI Proxy 2025-07-14 15:30:52,538 - INFO - Version: 1.0 2025-07-14 15:30:52,538 - INFO - Description: Automatically generated API from MCP Tool Schemas 2025-07-14 15:30:52,538 - INFO - Hostname: XP43WG00FM 2025-07-14 15:30:52,538 - INFO - Port: 8000 2025-07-14 15:30:52,538 - INFO - API Key: Not Provided 2025-07-14 15:30:52,538 - INFO - CORS Allowed Origins: ['*'] 2025-07-14 15:30:52,538 - INFO - Path Prefix: / 2025-07-14 15:30:52,539 - INFO - Loading MCP server configurations from: /Users/yohei.onishi/work/config.json 2025-07-14 15:30:52,539 - INFO - Configured MCP Servers: 2025-07-14 15:30:52,539 - INFO - Configuring Stdio MCP Server 'time' with command: uvx with args: ['mcp-server-time', '--local-timezone=America/New_York'] 2025-07-14 15:30:52,540 - INFO - Configuring Stdio MCP Server 'neo4j-cypher' with command: uvx with args: ['mcp-neo4j-cypher', '--db-url', 'bolt://localhost:7687', '--username', 'neo4j', '--password', 'password123', '--namespace', 'lineage'] 2025-07-14 15:30:52,540 - INFO - Uvicorn server starting... INFO: Started server process [53131] INFO: Waiting for application startup. [07/14/25 15:30:57] INFO Running Neo4j Cypher MCP Server with server.py:170 stdio transport... INFO Processing request of type server.py:625 ListToolsRequest INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit) ### Actual Behavior $ mcpo --config config.json Starting MCP OpenAPI Proxy with config file: config.json 2025-07-14 15:10:15,420 - INFO - Starting MCPO Server... 2025-07-14 15:10:15,420 - INFO - Name: MCP OpenAPI Proxy 2025-07-14 15:10:15,420 - INFO - Version: 1.0 2025-07-14 15:10:15,420 - INFO - Description: Automatically generated API from MCP Tool Schemas 2025-07-14 15:10:15,420 - INFO - Hostname: XP43WG00FM 2025-07-14 15:10:15,420 - INFO - Port: 8000 2025-07-14 15:10:15,420 - INFO - API Key: Not Provided 2025-07-14 15:10:15,420 - INFO - CORS Allowed Origins: ['*'] 2025-07-14 15:10:15,420 - INFO - Path Prefix: / 2025-07-14 15:10:15,420 - INFO - Loading MCP server configurations from: config.json 2025-07-14 15:10:15,422 - INFO - Configured MCP Servers: 2025-07-14 15:10:15,422 - INFO - Configuring Stdio MCP Server 'time' with command: uvx with args: ['mcp-server-time', '--local-timezone=America/New_York'] 2025-07-14 15:10:15,422 - INFO - Configuring Stdio MCP Server 'neo4j-cypher' with command: uvx with args: ['mcp-neo4j-cypher', '--db-url', 'bolt://localhost:7687', '--username', 'neo4j', '--password', 'password123', '--namespace', 'lineage'] 2025-07-14 15:10:15,422 - INFO - Uvicorn server starting... INFO: Started server process [45290] INFO: Waiting for application startup. [07/14/25 15:10:19] INFO Running Neo4j Cypher MCP Server with stdio transport... server.py:170 INFO Processing request of type ListToolsRequest server.py:625 ERROR: + Exception Group Traceback (most recent call last): | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/starlette/routing.py", line 694, in lifespan | async with self.lifespan_context(app) as maybe_state: | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 210, in __aenter__ | return await anext(self.gen) | ^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 98, in lifespan | async with AsyncExitStack() as stack: | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 745, in __aexit__ | raise exc_details[1] | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 728, in __aexit__ | cb_suppress = await cb(*exc_details) | ^^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 231, in __aexit__ | await self.gen.athrow(typ, value, traceback) | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 113, in lifespan | async with stdio_client(server_params) as (reader, writer): | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 231, in __aexit__ | await self.gen.athrow(typ, value, traceback) | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/__init__.py", line 180, in stdio_client | async with ( | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/__init__.py", line 187, in stdio_client | yield read_stream, write_stream | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 114, in lifespan | async with ClientSession(reader, writer) as session: | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 117, in lifespan | yield | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 101, in lifespan | await stack.enter_async_context( | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 650, in enter_async_context | result = await _enter(cm) | ^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 210, in __aenter__ | return await anext(self.gen) | ^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 113, in lifespan | async with stdio_client(server_params) as (reader, writer): | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 231, in __aexit__ | await self.gen.athrow(typ, value, traceback) | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/__init__.py", line 180, in stdio_client | async with ( | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/__init__.py", line 187, in stdio_client | yield read_stream, write_stream | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 114, in lifespan | async with ClientSession(reader, writer) as session: | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 ---------------- | Traceback (most recent call last): | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 116, in lifespan | await create_dynamic_endpoints(app, api_dependency=api_dependency) | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 61, in create_dynamic_endpoints | response_model_fields = get_model_fields( | ^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 236, in get_model_fields | python_type_hint, pydantic_field_info = _process_schema_property( | ^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 204, in _process_schema_property | item_type_hint, _ = _process_schema_property( | ^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 166, in _process_schema_property | nested_type_hint, nested_pydantic_field = _process_schema_property( | ^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 126, in _process_schema_property | type_hint, _ = _process_schema_property( | ^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 112, in _process_schema_property | assert ref in schema_defs, "Custom field not found" | ^^^^^^^^^^^^^^^^^^ | TypeError: argument of type 'NoneType' is not iterable +------------------------------------ ERROR: Application startup failed. Exiting. ### Steps to Reproduce 1. create config.json { "mcpServers": { "time": { "command": "uvx", "args": ["mcp-server-time", "--local-timezone=America/New_York"] }, "neo4j-cypher": { "command": "uvx", "args": [ "mcp-neo4j-cypher", "--db-url", "bolt://localhost:7687", "--username", "neo4j", "--password", "password123", "--namespace", "lineage" ] } } } 2. run uv run mcpo --config ./config.json ### Logs & Screenshots $ mcpo --config config.json Starting MCP OpenAPI Proxy with config file: config.json 2025-07-14 15:10:15,420 - INFO - Starting MCPO Server... 2025-07-14 15:10:15,420 - INFO - Name: MCP OpenAPI Proxy 2025-07-14 15:10:15,420 - INFO - Version: 1.0 2025-07-14 15:10:15,420 - INFO - Description: Automatically generated API from MCP Tool Schemas 2025-07-14 15:10:15,420 - INFO - Hostname: XP43WG00FM 2025-07-14 15:10:15,420 - INFO - Port: 8000 2025-07-14 15:10:15,420 - INFO - API Key: Not Provided 2025-07-14 15:10:15,420 - INFO - CORS Allowed Origins: ['*'] 2025-07-14 15:10:15,420 - INFO - Path Prefix: / 2025-07-14 15:10:15,420 - INFO - Loading MCP server configurations from: config.json 2025-07-14 15:10:15,422 - INFO - Configured MCP Servers: 2025-07-14 15:10:15,422 - INFO - Configuring Stdio MCP Server 'time' with command: uvx with args: ['mcp-server-time', '--local-timezone=America/New_York'] 2025-07-14 15:10:15,422 - INFO - Configuring Stdio MCP Server 'neo4j-cypher' with command: uvx with args: ['mcp-neo4j-cypher', '--db-url', 'bolt://localhost:7687', '--username', 'neo4j', '--password', 'password123', '--namespace', 'lineage'] 2025-07-14 15:10:15,422 - INFO - Uvicorn server starting... INFO: Started server process [45290] INFO: Waiting for application startup. [07/14/25 15:10:19] INFO Running Neo4j Cypher MCP Server with stdio transport... server.py:170 INFO Processing request of type ListToolsRequest server.py:625 ERROR: + Exception Group Traceback (most recent call last): | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/starlette/routing.py", line 694, in lifespan | async with self.lifespan_context(app) as maybe_state: | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 210, in __aenter__ | return await anext(self.gen) | ^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 98, in lifespan | async with AsyncExitStack() as stack: | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 745, in __aexit__ | raise exc_details[1] | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 728, in __aexit__ | cb_suppress = await cb(*exc_details) | ^^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 231, in __aexit__ | await self.gen.athrow(typ, value, traceback) | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 113, in lifespan | async with stdio_client(server_params) as (reader, writer): | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 231, in __aexit__ | await self.gen.athrow(typ, value, traceback) | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/__init__.py", line 180, in stdio_client | async with ( | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/__init__.py", line 187, in stdio_client | yield read_stream, write_stream | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 114, in lifespan | async with ClientSession(reader, writer) as session: | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 117, in lifespan | yield | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 101, in lifespan | await stack.enter_async_context( | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 650, in enter_async_context | result = await _enter(cm) | ^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 210, in __aenter__ | return await anext(self.gen) | ^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 113, in lifespan | async with stdio_client(server_params) as (reader, writer): | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/contextlib.py", line 231, in __aexit__ | await self.gen.athrow(typ, value, traceback) | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/__init__.py", line 180, in stdio_client | async with ( | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcp/client/stdio/__init__.py", line 187, in stdio_client | yield read_stream, write_stream | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 114, in lifespan | async with ClientSession(reader, writer) as session: | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/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 ---------------- | Traceback (most recent call last): | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 116, in lifespan | await create_dynamic_endpoints(app, api_dependency=api_dependency) | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/main.py", line 61, in create_dynamic_endpoints | response_model_fields = get_model_fields( | ^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 236, in get_model_fields | python_type_hint, pydantic_field_info = _process_schema_property( | ^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 204, in _process_schema_property | item_type_hint, _ = _process_schema_property( | ^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 166, in _process_schema_property | nested_type_hint, nested_pydantic_field = _process_schema_property( | ^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 126, in _process_schema_property | type_hint, _ = _process_schema_property( | ^^^^^^^^^^^^^^^^^^^^^^^^^ | File "/Users/yohei.onishi/.local/share/mise/installs/python/3.11.9/lib/python3.11/site-packages/mcpo/utils/main.py", line 112, in _process_schema_property | assert ref in schema_defs, "Custom field not found" | ^^^^^^^^^^^^^^^^^^ | TypeError: argument of type 'NoneType' is not iterable +------------------------------------ ERROR: Application startup failed. Exiting. ### Additional Information _No response_
bsakaguchi 2026-10-18 21:11:38 +00:00
  • closed this issue
  • added the
    bug
    label
Author
Owner

@yohei1126 commented on GitHub (Jul 14, 2025):

duplicated

<!-- gh-comment-id:3068156091 --> @yohei1126 commented on GitHub (Jul 14, 2025): duplicated
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#91
No description provided.