Skip to content

Simple echo MCP server fails to start with mcp.run() #337

@sirianni

Description

@sirianni

Describe the bug
Unable to start MCP server

To Reproduce

from mcp.server.fastmcp import FastMCP

mcp = FastMCP(
    "Echo Server",
    port=9000,
    debug=True,
    log_level="DEBUG",
)


@mcp.tool()
def echo(text: str) -> str:
    """Echo the input text"""
    return text


if __name__ == "__main__":
    mcp.run()
$ uv run mcp_server.py        
[03/20/25 16:31:00] DEBUG    Using selector: EpollSelector   
<---HANG--->
$ curl http://localhost:9000
curl: (7) Failed to connect to localhost port 9000 after 0 ms: Could not connect to server

Expected behavior
Server starts

Additional information

Stack trace on SIGINT

  File "/home/sirianni/src/example/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 2303, in run
    return runner.run(wrapper())
           ^^^^^^^^^^^^^^^^^^^^^
  File "/home/sirianni/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/runners.py", line 118, in run
    return self._loop.run_until_complete(task)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sirianni/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", line 678, in run_until_complete
    self.run_forever()
  File "/home/sirianni/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", line 645, in run_forever
    self._run_once()
  File "/home/sirianni/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/base_events.py", line 1961, in _run_once
    event_list = self._selector.select(timeout)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sirianni/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/selectors.py", line 468, in select
    fd_event_list = self._selector.poll(timeout, max_ev)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sirianni/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/runners.py", line 157, in _on_sigint
    raise KeyboardInterrupt()
KeyboardInterrupt

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/sirianni/src/example/mcp_server.py", line 18, in <module>
    mcp.run()
  File "/home/sirianni/src/example/.venv/lib/python3.12/site-packages/mcp/server/fastmcp/server.py", line 154, in run
    anyio.run(self.run_stdio_async)
  File "/home/sirianni/src/example/.venv/lib/python3.12/site-packages/anyio/_core/_eventloop.py", line 74, in run
    return async_backend.run(func, args, {}, backend_options)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sirianni/src/example/.venv/lib/python3.12/site-packages/anyio/_backends/_asyncio.py", line 2302, in run
    with Runner(debug=debug, loop_factory=loop_factory) as runner:
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sirianni/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/runners.py", line 62, in __exit__
    self.close()
  File "/home/sirianni/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/runners.py", line 70, in close
    _cancel_all_tasks(loop)
  File "/home/sirianni/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/runners.py", line 199, in _cancel_all_tasks
    to_cancel = tasks.all_tasks(loop)
                ^^^^^^^^^^^^^^^^^^^^^
  File "/home/sirianni/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/asyncio/tasks.py", line 59, in all_tasks
    scheduled_tasks = list(_scheduled_tasks)
                      ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/sirianni/.local/share/uv/python/cpython-3.12.9-linux-x86_64-gnu/lib/python3.12/_weakrefset.py", line 64, in __iter__
    with _IterationGuard(self):
         ^^^^^^^^^^^^^^^^^^^^^
KeyboardInterrupt

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions