Bug 2485863 - FTBFS, F45FailsToInstall: python3-fastmcp+openai, python3-fastmcp [NEEDINFO]
Summary: FTBFS, F45FailsToInstall: python3-fastmcp+openai, python3-fastmcp
Keywords:
Status: CLOSED WONTFIX
Alias: None
Product: Fedora
Classification: Fedora
Component: python-fastmcp
Version: 45
Hardware: Unspecified
OS: Unspecified
unspecified
unspecified
Target Milestone: ---
Assignee: Peter Lemenkov
QA Contact:
URL:
Whiteboard:
Depends On: 2423878 2485862 2485894 2485926 2485928
Blocks: PYTHON3.15 F45FailsToInstall F46FailsToInstall, RAWHIDEFailsToInstall
TreeView+ depends on / blocked
 
Reported: 2026-06-06 17:51 UTC by Fedora Fails To Install
Modified: 2026-08-18 13:43 UTC (History)
3 users (show)

Fixed In Version:
Clone Of:
Environment:
Last Closed: 2026-08-18 13:43:22 UTC
Type: ---
Embargoed:
fti-bugs: needinfo? (lemenkov)


Attachments (Terms of Use)

Description Fedora Fails To Install 2026-06-06 17:51:23 UTC
Hello,

Please note that this comment was generated automatically by https://forge.fedoraproject.org/releng/tooling/src/branch/main/release-process/bug-filing/follow-policy/follow_policy.py
If you feel that this output has mistakes, please open an issue at https://forge.fedoraproject.org/releng/tickets/issues

Your package (python-fastmcp) Fails To Install in Fedora 45:

can't install python3-fastmcp+openai:
  - nothing provides python(abi) = 3.14 needed by python3-fastmcp+openai-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(openai) >= 1.102 needed by python3-fastmcp+openai-2.14.7-2.fc45.noarch
  
can't install python3-fastmcp:
  - nothing provides python(abi) = 3.14 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(packaging) >= 20 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(httpx) >= 0.28.1 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(rich) >= 13.9.4 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides (python3.14dist(authlib) < 1.6.5~~ with python3.14dist(authlib) >= 1.4) needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides (python3.14dist(mcp) < 2~~ with python3.14dist(mcp) >= 1.24) needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides (python3.14dist(pyperclip) < 1.9~~ with python3.14dist(pyperclip) >= 1.8.2) needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(cyclopts) >= 4 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(jsonref) >= 1.1 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(jsonschema-path) >= 0.3.4 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(openapi-pydantic) >= 0.5.1 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(platformdirs) >= 4 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(pydantic) >= 2.11.7 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(pydantic[email]) >= 2.11.7 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(python-dotenv) >= 1.1 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(uvicorn) >= 0.35 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  - nothing provides python3.14dist(websockets) >= 15.0.1 needed by python3-fastmcp-2.14.7-2.fc45.noarch
  
If you know about this problem and are planning on fixing it, please acknowledge so by setting the bug status to ASSIGNED. If you don't have time to maintain this package, consider orphaning it, so maintainers of dependent packages realize the problem.


If you don't react accordingly to the policy for FTBFS/FTI bugs (https://docs.fedoraproject.org/en-US/fesco/Fails_to_build_from_source_Fails_to_install/), your package may be orphaned in 8+ weeks.


P.S. The data was generated solely from koji buildroot, so it might be newer than the latest compose or the content on mirrors. To reproduce, use the koji/local repo only, e.g. in mock:

    $ mock -r fedora-45-x86_64 --config-opts mirrored=False install python3-fastmcp+openai python3-fastmcp


P.P.S. If this bug has been reported in the middle of upgrading multiple dependent packages, please consider using side tags: https://docs.fedoraproject.org/en-US/fesco/Updates_Policy/#updating-inter-dependent-packages

Thanks!

Comment 1 Fedora Fails To Install 2026-06-14 09:05:06 UTC
Hello,

Please note that this comment was generated automatically by https://forge.fedoraproject.org/releng/tooling/src/branch/main/release-process/bug-filing/follow-policy/follow_policy.py
If you feel that this output has mistakes, please open an issue at https://forge.fedoraproject.org/releng/tickets/issues

This package fails to install and maintainers are advised to take one of the following actions:

 - Fix this bug and close this bugzilla once the update makes it to the repository.
   (The same script that posted this comment will eventually close this bugzilla
   when the fixed package reaches the repository, so you don't have to worry about it.)

or

 - Move this bug to ASSIGNED if you plan on fixing this, but simply haven't done so yet.

or

 - Orphan the package if you no longer plan to maintain it.


If you do not take one of these actions, the process at https://docs.fedoraproject.org/en-US/fesco/Fails_to_build_from_source_Fails_to_install/#_package_removal_for_long_standing_ftbfs_and_fti_bugs will continue.
This package may be orphaned in 7+ weeks.
This is the first reminder (step 3) from the policy.

Don't hesitate to ask for help on https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/ if you are unsure how to fix this bug.

Comment 2 Miro Hrončok 2026-06-23 14:02:02 UTC
=================================== FAILURES ===================================
________ TestStatefulProxyClient.test_concurrent_log_requests_no_mixing ________
self = <tests.server.proxy.test_stateful_proxy_client.TestStatefulProxyClient object at 0xffffa9b62c10>
stateful_proxy_server = FastMCPProxy('FastMCPProxy-3e04')
    async def test_concurrent_log_requests_no_mixing(
        self, stateful_proxy_server: FastMCP
    ):
        """Test that concurrent log requests don't mix handlers (fixes #1068)."""
        results: dict[str, LogMessage] = {}
    
        async def log_handler_a(message: LogMessage) -> None:
            results["logger_a"] = message
    
        async def log_handler_b(message: LogMessage) -> None:
            results["logger_b"] = message
    
        async with (
>           Client(stateful_proxy_server, log_handler=log_handler_a) as client_a,
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            Client(stateful_proxy_server, log_handler=log_handler_b) as client_b,
        ):
tests/server/proxy/test_stateful_proxy_client.py:84: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:503: in __aexit__
    await self._disconnect()
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:630: in _disconnect
    await self._session_state.session_task
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:648: in _session_runner
    async with AsyncExitStack() as stack:
               ^^^^^^^^^^^^^^^^
/usr/lib64/python3.15/contextlib.py:813: in __aexit__
    raise exc
/usr/lib64/python3.15/contextlib.py:796: in __aexit__
    cb_suppress = await cb(*exc_details)
                  ^^^^^^^^^^^^^^^^^^^^^^
/usr/lib64/python3.15/contextlib.py:283: in __aexit__
    await anext(self.gen)
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:425: in _context_manager
    with catch(get_catch_handlers()):
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3.15/site-packages/exceptiongroup/_catch.py:39: in __exit__
    raise unhandled from exc.__cause__
/usr/lib/python3.15/site-packages/exceptiongroup/_catch.py:65: in handle_exception
    result = handler(matched)
             ^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/utilities/exceptions.py:29: in _exception_handler
    raise leaf
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <anyio._backends._asyncio.CancelScope object at 0xffffa54dd4f0>
exc_type = <class 'asyncio.exceptions.CancelledError'>
exc_val = CancelledError("Cancelled via cancel scope ffffa54def30 by <Task pending name='Task-9347' coro=<Client._session_runner...astmcp-2.14.7-build/BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:648> cb=[Task.task_wakeup()]>")
    def __exit__(
        self,
        exc_type: type[BaseException] | None,
        exc_val: BaseException | None,
        exc_tb: TracebackType | None,
    ) -> bool:
        del exc_tb
    
        if not self._active:
            raise RuntimeError("This cancel scope is not active")
        if current_task() is not self._host_task:
            raise RuntimeError(
                "Attempted to exit cancel scope in a different task than it was "
                "entered in"
            )
    
        assert self._host_task is not None
        host_task_state = _task_states.get(self._host_task)
        if host_task_state is None or host_task_state.cancel_scope is not self:
>           raise RuntimeError(
                "Attempted to exit a cancel scope that isn't the current tasks's "
                "current cancel scope"
            )
E           RuntimeError: Attempted to exit a cancel scope that isn't the current tasks's current cancel scope
/usr/lib/python3.15/site-packages/anyio/_backends/_asyncio.py:472: RuntimeError
----------------------------- Captured stderr call -----------------------------
[06/23/26 13:59:41] DEBUG    Sending INFO to client (b): Hello,  context.py:1044
                             world!                                             
                    DEBUG    Sending INFO to client (a): Hello,  context.py:1044
                             world!                                             
                    DEBUG    Sending INFO to client (b): Hello,  context.py:1044
                             world!                                             
                    DEBUG    Sending INFO to client (a): Hello,  context.py:1044
                             world!                                             
_________________ TestStatefulProxyClient.test_stateful_proxy __________________
self = <tests.server.proxy.test_stateful_proxy_client.TestStatefulProxyClient object at 0xffffa9b62d50>
stateful_proxy_server = FastMCPProxy('FastMCPProxy-1ccb')
    async def test_stateful_proxy(self, stateful_proxy_server: FastMCP):
        """Test that the state shared across multiple calls for the same client (fixes #959)."""
>       async with Client(stateful_proxy_server) as client:
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests/server/proxy/test_stateful_proxy_client.py:104: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:503: in __aexit__
    await self._disconnect()
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:630: in _disconnect
    await self._session_state.session_task
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:648: in _session_runner
    async with AsyncExitStack() as stack:
               ^^^^^^^^^^^^^^^^
/usr/lib64/python3.15/contextlib.py:813: in __aexit__
    raise exc
/usr/lib64/python3.15/contextlib.py:796: in __aexit__
    cb_suppress = await cb(*exc_details)
                  ^^^^^^^^^^^^^^^^^^^^^^
/usr/lib64/python3.15/contextlib.py:283: in __aexit__
    await anext(self.gen)
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:425: in _context_manager
    with catch(get_catch_handlers()):
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3.15/site-packages/exceptiongroup/_catch.py:39: in __exit__
    raise unhandled from exc.__cause__
/usr/lib/python3.15/site-packages/exceptiongroup/_catch.py:65: in handle_exception
    result = handler(matched)
             ^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/utilities/exceptions.py:29: in _exception_handler
    raise leaf
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <anyio._backends._asyncio.CancelScope object at 0xffffa552d590>
exc_type = <class 'asyncio.exceptions.CancelledError'>
exc_val = CancelledError("Cancelled via cancel scope ffffa552c910 by <Task pending name='Task-9379' coro=<Client._session_runner...astmcp-2.14.7-build/BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:648> cb=[Task.task_wakeup()]>")
    def __exit__(
        self,
        exc_type: type[BaseException] | None,
        exc_val: BaseException | None,
        exc_tb: TracebackType | None,
    ) -> bool:
        del exc_tb
    
        if not self._active:
            raise RuntimeError("This cancel scope is not active")
        if current_task() is not self._host_task:
            raise RuntimeError(
                "Attempted to exit cancel scope in a different task than it was "
                "entered in"
            )
    
        assert self._host_task is not None
        host_task_state = _task_states.get(self._host_task)
        if host_task_state is None or host_task_state.cancel_scope is not self:
>           raise RuntimeError(
                "Attempted to exit a cancel scope that isn't the current tasks's "
                "current cancel scope"
            )
E           RuntimeError: Attempted to exit a cancel scope that isn't the current tasks's current cancel scope
/usr/lib/python3.15/site-packages/anyio/_backends/_asyncio.py:472: RuntimeError
_____________ TestStatefulProxyClient.test_multi_proxies_no_mixing _____________
self = <tests.server.proxy.test_stateful_proxy_client.TestStatefulProxyClient object at 0xffffa9330180>
    async def test_multi_proxies_no_mixing(self):
        """Test that the stateful proxy client won't be mixed in multi-proxies sessions."""
        mcp_a, mcp_b = FastMCP(), FastMCP()
    
        @mcp_a.tool
        def tool_a() -> str:
            return "a"
    
        @mcp_b.tool
        def tool_b() -> str:
            return "b"
    
        proxy_mcp_a = FastMCPProxy(
            client_factory=StatefulProxyClient(mcp_a).new_stateful
        )
        proxy_mcp_b = FastMCPProxy(
            client_factory=StatefulProxyClient(mcp_b).new_stateful
        )
        multi_proxy_mcp = FastMCP()
        multi_proxy_mcp.mount(proxy_mcp_a, prefix="a")
        multi_proxy_mcp.mount(proxy_mcp_b, prefix="b")
    
>       async with Client(multi_proxy_mcp) as client:
                   ^^^^^^^^^^^^^^^^^^^^^^^
tests/server/proxy/test_stateful_proxy_client.py:143: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:503: in __aexit__
    await self._disconnect()
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:630: in _disconnect
    await self._session_state.session_task
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:648: in _session_runner
    async with AsyncExitStack() as stack:
               ^^^^^^^^^^^^^^^^
/usr/lib64/python3.15/contextlib.py:813: in __aexit__
    raise exc
/usr/lib64/python3.15/contextlib.py:796: in __aexit__
    cb_suppress = await cb(*exc_details)
                  ^^^^^^^^^^^^^^^^^^^^^^
/usr/lib64/python3.15/contextlib.py:283: in __aexit__
    await anext(self.gen)
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:425: in _context_manager
    with catch(get_catch_handlers()):
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^
/usr/lib/python3.15/site-packages/exceptiongroup/_catch.py:39: in __exit__
    raise unhandled from exc.__cause__
/usr/lib/python3.15/site-packages/exceptiongroup/_catch.py:65: in handle_exception
    result = handler(matched)
             ^^^^^^^^^^^^^^^^
../BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/utilities/exceptions.py:29: in _exception_handler
    raise leaf
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
self = <anyio._backends._asyncio.CancelScope object at 0xffffa54df2f0>
exc_type = <class 'asyncio.exceptions.CancelledError'>
exc_val = CancelledError("Cancelled via cancel scope ffffa54dead0 by <Task pending name='Task-9482' coro=<Client._session_runner...astmcp-2.14.7-build/BUILDROOT/usr/lib/python3.15/site-packages/fastmcp/client/client.py:648> cb=[Task.task_wakeup()]>")
    def __exit__(
        self,
        exc_type: type[BaseException] | None,
        exc_val: BaseException | None,
        exc_tb: TracebackType | None,
    ) -> bool:
        del exc_tb
    
        if not self._active:
            raise RuntimeError("This cancel scope is not active")
        if current_task() is not self._host_task:
            raise RuntimeError(
                "Attempted to exit cancel scope in a different task than it was "
                "entered in"
            )
    
        assert self._host_task is not None
        host_task_state = _task_states.get(self._host_task)
        if host_task_state is None or host_task_state.cancel_scope is not self:
>           raise RuntimeError(
                "Attempted to exit a cancel scope that isn't the current tasks's "
                "current cancel scope"
            )
E           RuntimeError: Attempted to exit a cancel scope that isn't the current tasks's current cancel scope
/usr/lib/python3.15/site-packages/anyio/_backends/_asyncio.py:472: RuntimeError

Comment 3 Fedora Fails To Install 2026-07-05 20:34:35 UTC
Hello,

Please note that this comment was generated automatically by https://forge.fedoraproject.org/releng/tooling/src/branch/main/release-process/bug-filing/follow-policy/follow_policy.py
If you feel that this output has mistakes, please open an issue at https://forge.fedoraproject.org/releng/tickets/issues

This package fails to install and maintainers are advised to take one of the following actions:

 - Fix this bug and close this bugzilla once the update makes it to the repository.
   (The same script that posted this comment will eventually close this bugzilla
   when the fixed package reaches the repository, so you don't have to worry about it.)

or

 - Move this bug to ASSIGNED if you plan on fixing this, but simply haven't done so yet.

or

 - Orphan the package if you no longer plan to maintain it.


If you do not take one of these actions, the process at https://docs.fedoraproject.org/en-US/fesco/Fails_to_build_from_source_Fails_to_install/#_package_removal_for_long_standing_ftbfs_and_fti_bugs will continue.
This package may be orphaned in 4+ weeks.
This is the second reminder (step 4) from the policy.

Don't hesitate to ask for help on https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/ if you are unsure how to fix this bug.

Comment 4 Fedora Fails To Install 2026-08-04 12:51:52 UTC
This package has been orphaned.

You can pick it up at https://src.fedoraproject.org/rpms/python-fastmcp by clicking button "Take". If nobody picks it up, it will be retired and removed from a distribution.

Comment 5 Fedora Admin user for bugzilla script actions 2026-08-05 22:29:30 UTC
This package has changed maintainer in Fedora. Reassigning to the new maintainer of this component.

Comment 6 Fedora Admin user for bugzilla script actions 2026-08-10 22:26:36 UTC
This package has changed maintainer in Fedora. Reassigning to the new maintainer of this component.

Comment 7 Fedora Fails To Install 2026-08-11 12:24:02 UTC
Hello,

Please note that this comment was generated automatically by https://forge.fedoraproject.org/releng/tooling/src/branch/main/release-process/bug-filing/follow-policy/follow_policy.py
If you feel that this output has mistakes, please open an issue at https://forge.fedoraproject.org/releng/tickets/issues

This package fails to install and maintainers are advised to take one of the following actions:

 - Fix this bug and close this bugzilla once the update makes it to the repository.
   (The same script that posted this comment will eventually close this bugzilla
   when the fixed package reaches the repository, so you don't have to worry about it.)

or

 - Move this bug to ASSIGNED if you plan on fixing this, but simply haven't done so yet.

or

 - Orphan the package if you no longer plan to maintain it.


If you do not take one of these actions, the process at https://docs.fedoraproject.org/en-US/fesco/Fails_to_build_from_source_Fails_to_install/#_package_removal_for_long_standing_ftbfs_and_fti_bugs will continue.
This package may be orphaned in 7+ weeks.
This is the first reminder (step 3) from the policy.

Don't hesitate to ask for help on https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/ if you are unsure how to fix this bug.

Comment 8 Aoife Moloney 2026-08-17 14:46:27 UTC
This bug appears to have been reported against 'rawhide' during the Fedora Linux 45 development cycle.
Changing version to 45.

Comment 9 Miro Hrončok 2026-08-18 13:43:22 UTC
Automation has figured out the package is retired in Fedora 45.

If you like it to be unretired, please open a ticket at https://forge.fedoraproject.org/releng/tickets/issues/new?template=.forgejo%2fISSUE_TEMPLATE%2funretire-package.md


Note You need to log in before you can comment on or make changes to this bug.