nixbot

builds

failed mcptoon-0.7.22 checks.aarch64-linux.pkgs-mcptoon · build #5505 · raw

1elastic-arm-b09d7fda: building 3i5sv8bq23v0nlmc3alpa3j6v51nn4m8-mcptoon-0.7.22.drv2Sourcing python-remove-tests-dir-hook3Sourcing python-catch-conflicts-hook.sh4Sourcing python-remove-bin-bytecode-hook.sh5Sourcing pypa-build-hook6Using pypaBuildPhase7Sourcing python-runtime-deps-check-hook8Using pythonRuntimeDepsCheckHook9Sourcing pypa-install-hook10Using pypaInstallPhase11Sourcing python-imports-check-hook.sh12Using pythonImportsCheckPhase13Sourcing python-namespaces-hook14Sourcing python-catch-conflicts-hook.sh15Sourcing pytest-check-hook16Using pytestCheckPhase
unpackPhase
17unpacking source archive /nix/store/gyc4j4ir5ssmqclfbg1rn4p62a9dd9a3-source18source root is source19setting SOURCE_DATE_EPOCH to timestamp 315619200 of file "source/tests/test_watch.py"
configurePhase
20no configure script, doing nothing
buildPhase
21Executing pypaBuildPhase22Creating a wheel...23pypa build flags: --no-isolation --outdir dist/ --wheel24* Getting build dependencies for wheel...25/nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated26!!2728 ********************************************************************************29 Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0).3031 By 2027-Feb-18, you need to update your project and remove deprecated calls32 or your builds will no longer be supported.3334 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.35 ********************************************************************************3637!!38 corresp(dist, value, root_dir)39/nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated.40!!4142 ********************************************************************************43 Please consider removing the following classifiers in favor of a SPDX license expression:4445 License :: OSI Approved :: Apache Software License4647 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.48 ********************************************************************************4950!!51 dist._finalize_license_expression()52/nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated.53!!5455 ********************************************************************************56 Please consider removing the following classifiers in favor of a SPDX license expression:5758 License :: OSI Approved :: Apache Software License5960 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.61 ********************************************************************************6263!!64 self._finalize_license_expression()65running egg_info66creating src/mcptoon.egg-info67writing src/mcptoon.egg-info/PKG-INFO68writing dependency_links to src/mcptoon.egg-info/dependency_links.txt69writing entry points to src/mcptoon.egg-info/entry_points.txt70writing requirements to src/mcptoon.egg-info/requires.txt71writing top-level names to src/mcptoon.egg-info/top_level.txt72writing manifest file 'src/mcptoon.egg-info/SOURCES.txt'73reading manifest file 'src/mcptoon.egg-info/SOURCES.txt'74adding license file 'LICENSE'75adding license file 'NOTICE'76writing manifest file 'src/mcptoon.egg-info/SOURCES.txt'77* Building wheel...78/nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated79!!8081 ********************************************************************************82 Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0).8384 By 2027-Feb-18, you need to update your project and remove deprecated calls85 or your builds will no longer be supported.8687 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.88 ********************************************************************************8990!!91 corresp(dist, value, root_dir)92/nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/config/_apply_pyprojecttoml.py:61: SetuptoolsDeprecationWarning: License classifiers are deprecated.93!!9495 ********************************************************************************96 Please consider removing the following classifiers in favor of a SPDX license expression:9798 License :: OSI Approved :: Apache Software License99100 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.101 ********************************************************************************102103!!104 dist._finalize_license_expression()105/nix/store/idlwgfiz0sx90mimq3jjxl7vyi4pqspy-python3.14-setuptools-83.0.0/lib/python3.14/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated.106!!107108 ********************************************************************************109 Please consider removing the following classifiers in favor of a SPDX license expression:110111 License :: OSI Approved :: Apache Software License112113 See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.114 ********************************************************************************115116!!117 self._finalize_license_expression()118running bdist_wheel119running build120running build_py121creating build/lib/mcptoon122copying src/mcptoon/demo_server.py -> build/lib/mcptoon123copying src/mcptoon/router.py -> build/lib/mcptoon124copying src/mcptoon/cache.py -> build/lib/mcptoon125copying src/mcptoon/bench.py -> build/lib/mcptoon126copying src/mcptoon/output.py -> build/lib/mcptoon127copying src/mcptoon/toon_vendored.py -> build/lib/mcptoon128copying src/mcptoon/packs.py -> build/lib/mcptoon129copying src/mcptoon/__main__.py -> build/lib/mcptoon130copying src/mcptoon/manifest.py -> build/lib/mcptoon131copying src/mcptoon/discover.py -> build/lib/mcptoon132copying src/mcptoon/__init__.py -> build/lib/mcptoon133copying src/mcptoon/skills.py -> build/lib/mcptoon134copying src/mcptoon/installer.py -> build/lib/mcptoon135copying src/mcptoon/schema_simplifier.py -> build/lib/mcptoon136copying src/mcptoon/native_tools.py -> build/lib/mcptoon137copying src/mcptoon/welcome.py -> build/lib/mcptoon138copying src/mcptoon/footer.py -> build/lib/mcptoon139copying src/mcptoon/config.py -> build/lib/mcptoon140copying src/mcptoon/serve.py -> build/lib/mcptoon141copying src/mcptoon/plugin.py -> build/lib/mcptoon142copying src/mcptoon/errors.py -> build/lib/mcptoon143copying src/mcptoon/cli.py -> build/lib/mcptoon144copying src/mcptoon/demo.py -> build/lib/mcptoon145copying src/mcptoon/sync.py -> build/lib/mcptoon146copying src/mcptoon/usage.py -> build/lib/mcptoon147copying src/mcptoon/watch.py -> build/lib/mcptoon148copying src/mcptoon/client.py -> build/lib/mcptoon149copying src/mcptoon/health.py -> build/lib/mcptoon150running egg_info151writing src/mcptoon.egg-info/PKG-INFO152writing dependency_links to src/mcptoon.egg-info/dependency_links.txt153writing entry points to src/mcptoon.egg-info/entry_points.txt154writing requirements to src/mcptoon.egg-info/requires.txt155writing top-level names to src/mcptoon.egg-info/top_level.txt156reading manifest file 'src/mcptoon.egg-info/SOURCES.txt'157adding license file 'LICENSE'158adding license file 'NOTICE'159writing manifest file 'src/mcptoon.egg-info/SOURCES.txt'160copying src/mcptoon/packs.json -> build/lib/mcptoon161installing to build/bdist.linux-aarch64/wheel162running install163running install_lib164creating build/bdist.linux-aarch64/wheel165creating build/bdist.linux-aarch64/wheel/mcptoon166copying build/lib/mcptoon/demo_server.py -> build/bdist.linux-aarch64/wheel/./mcptoon167copying build/lib/mcptoon/router.py -> build/bdist.linux-aarch64/wheel/./mcptoon168copying build/lib/mcptoon/cache.py -> build/bdist.linux-aarch64/wheel/./mcptoon169copying build/lib/mcptoon/bench.py -> build/bdist.linux-aarch64/wheel/./mcptoon170copying build/lib/mcptoon/output.py -> build/bdist.linux-aarch64/wheel/./mcptoon171copying build/lib/mcptoon/toon_vendored.py -> build/bdist.linux-aarch64/wheel/./mcptoon172copying build/lib/mcptoon/packs.py -> build/bdist.linux-aarch64/wheel/./mcptoon173copying build/lib/mcptoon/__main__.py -> build/bdist.linux-aarch64/wheel/./mcptoon174copying build/lib/mcptoon/manifest.py -> build/bdist.linux-aarch64/wheel/./mcptoon175copying build/lib/mcptoon/discover.py -> build/bdist.linux-aarch64/wheel/./mcptoon176copying build/lib/mcptoon/__init__.py -> build/bdist.linux-aarch64/wheel/./mcptoon177copying build/lib/mcptoon/skills.py -> build/bdist.linux-aarch64/wheel/./mcptoon178copying build/lib/mcptoon/installer.py -> build/bdist.linux-aarch64/wheel/./mcptoon179copying build/lib/mcptoon/schema_simplifier.py -> build/bdist.linux-aarch64/wheel/./mcptoon180copying build/lib/mcptoon/native_tools.py -> build/bdist.linux-aarch64/wheel/./mcptoon181copying build/lib/mcptoon/welcome.py -> build/bdist.linux-aarch64/wheel/./mcptoon182copying build/lib/mcptoon/footer.py -> build/bdist.linux-aarch64/wheel/./mcptoon183copying build/lib/mcptoon/config.py -> build/bdist.linux-aarch64/wheel/./mcptoon184copying build/lib/mcptoon/serve.py -> build/bdist.linux-aarch64/wheel/./mcptoon185copying build/lib/mcptoon/packs.json -> build/bdist.linux-aarch64/wheel/./mcptoon186copying build/lib/mcptoon/plugin.py -> build/bdist.linux-aarch64/wheel/./mcptoon187copying build/lib/mcptoon/errors.py -> build/bdist.linux-aarch64/wheel/./mcptoon188copying build/lib/mcptoon/cli.py -> build/bdist.linux-aarch64/wheel/./mcptoon189copying build/lib/mcptoon/demo.py -> build/bdist.linux-aarch64/wheel/./mcptoon190copying build/lib/mcptoon/sync.py -> build/bdist.linux-aarch64/wheel/./mcptoon191copying build/lib/mcptoon/usage.py -> build/bdist.linux-aarch64/wheel/./mcptoon192copying build/lib/mcptoon/watch.py -> build/bdist.linux-aarch64/wheel/./mcptoon193copying build/lib/mcptoon/client.py -> build/bdist.linux-aarch64/wheel/./mcptoon194copying build/lib/mcptoon/health.py -> build/bdist.linux-aarch64/wheel/./mcptoon195running install_egg_info196Copying src/mcptoon.egg-info to build/bdist.linux-aarch64/wheel/./mcptoon-0.7.22-py3.14.egg-info197running install_scripts198creating build/bdist.linux-aarch64/wheel/mcptoon-0.7.22.dist-info/WHEEL199creating '/build/source/dist/.tmp-i536u9f9/mcptoon-0.7.22-py3-none-any.whl' and adding 'build/bdist.linux-aarch64/wheel' to it200adding 'mcptoon/__init__.py'201adding 'mcptoon/__main__.py'202adding 'mcptoon/bench.py'203adding 'mcptoon/cache.py'204adding 'mcptoon/cli.py'205adding 'mcptoon/client.py'206adding 'mcptoon/config.py'207adding 'mcptoon/demo.py'208adding 'mcptoon/demo_server.py'209adding 'mcptoon/discover.py'210adding 'mcptoon/errors.py'211adding 'mcptoon/footer.py'212adding 'mcptoon/health.py'213adding 'mcptoon/installer.py'214adding 'mcptoon/manifest.py'215adding 'mcptoon/native_tools.py'216adding 'mcptoon/output.py'217adding 'mcptoon/packs.json'218adding 'mcptoon/packs.py'219adding 'mcptoon/plugin.py'220adding 'mcptoon/router.py'221adding 'mcptoon/schema_simplifier.py'222adding 'mcptoon/serve.py'223adding 'mcptoon/skills.py'224adding 'mcptoon/sync.py'225adding 'mcptoon/toon_vendored.py'226adding 'mcptoon/usage.py'227adding 'mcptoon/watch.py'228adding 'mcptoon/welcome.py'229adding 'mcptoon-0.7.22.dist-info/licenses/LICENSE'230adding 'mcptoon-0.7.22.dist-info/licenses/NOTICE'231adding 'mcptoon-0.7.22.dist-info/METADATA'232adding 'mcptoon-0.7.22.dist-info/WHEEL'233adding 'mcptoon-0.7.22.dist-info/entry_points.txt'234adding 'mcptoon-0.7.22.dist-info/top_level.txt'235adding 'mcptoon-0.7.22.dist-info/RECORD'236removing build/bdist.linux-aarch64/wheel237Successfully built mcptoon-0.7.22-py3-none-any.whl238Finished creating a wheel...239Finished executing pypaBuildPhase
pythonRuntimeDepsCheckHook
240Executing pythonRuntimeDepsCheck241Checking runtime dependencies for mcptoon-0.7.22-py3-none-any.whl242Finished executing pythonRuntimeDepsCheck
installPhase
243Executing pypaInstallPhase244Successfully installed mcptoon-0.7.22-py3-none-any.whl245Finished executing pypaInstallPhase
pythonOutputDistPhase
246Executing pythonOutputDistPhase247Finished executing pythonOutputDistPhase
fixupPhase
248shrinking RPATHs of ELF executables and libraries in /nix/store/snz88dv9gs8x2fmvzfjgqzj6rsdvn4k9-mcptoon-0.7.22249checking for references to /build/ in /nix/store/snz88dv9gs8x2fmvzfjgqzj6rsdvn4k9-mcptoon-0.7.22...250patching script interpreter paths in /nix/store/snz88dv9gs8x2fmvzfjgqzj6rsdvn4k9-mcptoon-0.7.22251stripping (with command strip and flags -S -p) in /nix/store/snz88dv9gs8x2fmvzfjgqzj6rsdvn4k9-mcptoon-0.7.22/lib /nix/store/snz88dv9gs8x2fmvzfjgqzj6rsdvn4k9-mcptoon-0.7.22/bin252shrinking RPATHs of ELF executables and libraries in /nix/store/zx2kggki5bq7vznw5flqn41szac501rj-mcptoon-0.7.22-dist253checking for references to /build/ in /nix/store/zx2kggki5bq7vznw5flqn41szac501rj-mcptoon-0.7.22-dist...254patching script interpreter paths in /nix/store/zx2kggki5bq7vznw5flqn41szac501rj-mcptoon-0.7.22-dist255Rewriting #!/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/bin/python3.14 to #!/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7256wrapping `/nix/store/snz88dv9gs8x2fmvzfjgqzj6rsdvn4k9-mcptoon-0.7.22/bin/mcptoon'...257Executing pythonRemoveTestsDir258Finished executing pythonRemoveTestsDir
installCheckPhase
259no Makefile or custom installCheckPhase, doing nothing
pythonImportsCheckPhase
260Executing pythonImportsCheckPhase261Check whether the following modules can be imported: mcptoon
pytestCheckPhase
262Executing pytestCheckPhase263pytest flags: -m pytest264============================= test session starts ==============================265platform linux -- Python 3.14.7, pytest-9.1.1, pluggy-1.6.0266rootdir: /build/source267configfile: pyproject.toml268testpaths: tests269collected 1327 items 270271tests/test_bench.py ............. [ 0%]272tests/test_cache.py .... [ 1%]273tests/test_calculator.py .......................... [ 3%]274tests/test_claude_plugin_package.py ............. [ 4%]275tests/test_cli_flags.py ........... [ 5%]276tests/test_client.py .............................. [ 7%]277tests/test_command_coverage.py ......... [ 7%]278tests/test_completion.py ........ [ 8%]279tests/test_config.py ......... [ 9%]280tests/test_dead_server_diagnostics.py ... [ 9%]281tests/test_demo.py ..................... [ 11%]282tests/test_demo_dead_package.py ........ [ 11%]283tests/test_demo_server.py .............................................. [ 15%]284..... [ 15%]285tests/test_discover.py .................................... [ 18%]286tests/test_doctor_star_hint.py ..... [ 18%]287tests/test_envelope.py ........ [ 19%]288tests/test_fallback_json.py ...... [ 19%]289tests/test_footprint_claims.py ............ [ 20%]290tests/test_gemini_manifest.py ...... [ 21%]291tests/test_health.py ............. [ 22%]292tests/test_help_shortcircuit.py ......... [ 22%]293tests/test_http_user_agent.py ......... [ 23%]294tests/test_installer_registry.py ............................ [ 25%]295tests/test_lang.py .......................... [ 27%]296tests/test_llms_txt.py ...... [ 27%]297tests/test_native_tools.py ................................. [ 30%]298tests/test_output.py ................................................... [ 34%]299........................................................................ [ 39%]300................ [ 40%]301tests/test_plugin_install.py .......... [ 41%]302tests/test_plugin_scan.py ............................... [ 43%]303tests/test_policy_overrides.py ................ [ 45%]304tests/test_presence.py .............................................. [ 48%]305tests/test_readme_links.py ... [ 48%]306tests/test_registry_sync.py ............ [ 49%]307tests/test_reversible.py ............................................... [ 53%]308................. [ 54%]309tests/test_router.py .............................................. [ 58%]310tests/test_search.py ................................ [ 60%]311tests/test_serve.py .................................................... [ 64%]312FFF [ 64%]313tests/test_serve_perf.py .......... [ 65%]314tests/test_serve_prompts.py ........ [ 65%]315tests/test_skill_packs.py ............... [ 67%]316tests/test_skill_search.py .......... [ 67%]317tests/test_skills.py ................................................... [ 71%]318........................................................................ [ 77%]319.............. [ 78%]320tests/test_stats_toggle.py ......... [ 78%]321tests/test_stderr_pipe_deadlock.py .... [ 79%]322tests/test_sync.py ................ [ 80%]323tests/test_tier_claims_consistent.py .... [ 80%]324tests/test_toml_config.py .......................... [ 82%]325tests/test_toon_cross_validate.py ............................... [ 84%]326tests/test_uninstall_end_to_end.py .......... [ 85%]327tests/test_v02_features.py .................................... [ 88%]328tests/test_v04_features.py ................ [ 89%]329tests/test_v05_features.py ...................... [ 91%]330tests/test_v072_delight.py .............s.. [ 92%]331tests/test_v073_http_security.py .............................. [ 94%]332tests/test_v074_stdio_timeout.py ............ [ 95%]333tests/test_v076_stateless_serve.py ................... [ 97%]334tests/test_v07_spec2026.py ..................... [ 98%]335tests/test_watch.py .................. [100%]336337=================================== FAILURES ===================================338_____________ TestInstallByName.test_search_registry_returns_list ______________339340self = <tests.test_serve.TestInstallByName object at 0xfffff486ec10>341342 def test_search_registry_returns_list(self):343 """search_registry returns a list (even on network error)."""344 from mcptoon.installer import search_registry345> result = search_registry("nonexistent_test_keyword_xyz123")346 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^347348tests/test_serve.py:633: 349_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 350351keyword = 'nonexistent_test_keyword_xyz123', limit = 10, strict = False352353 def search_registry(keyword, limit=10, strict=False):354 """Search MCP registries for available servers.355 356 Queries both sources and merges them, best matches first — Smithery holds the357 hosted half, the official registry the installable-package half, and a query358 like "filesystem" has good answers in both.359 360 Returns:361 list: [{name, description, command, args, env, source, url}, ...]362 363 Raises:364 RegistryError: only when *every* source failed at the network level365 (DNS, TLS, timeout, 5xx). A genuine "no matches" still returns [].366 The distinction matters: the old code returned [] for both, so a dead367 registry was indistinguishable from an empty result.368 """369 errors = []370 merged, seen = [], set()371 372 for label, fn in (("smithery", _search_smithery),373 ("registry", _search_mcp_registry)):374 try:375 results = fn(keyword, limit)376 except Exception as e:377 errors.append(f"{label}: {type(e).__name__}: {str(e)[:120]}")378 continue379 for r in results:380 key = (r.get("name") or "").lower()381 if not key or key in seen or not _relevant(keyword, r):382 continue383 seen.add(key)384 merged.append(r)385 386 if merged:387 merged.sort(key=lambda r: _relevance_score(keyword, r), reverse=True)388 return merged[:limit]389 390 # Nothing relevant. If some source was reachable, this is a real empty result;391 # if none was, the network is the problem and we say so.392 if len(errors) == 2:393> raise RegistryError(394 "No MCP registry reachable (" + "; ".join(errors) + "). "395 "Check your connection, or install directly with "396 "`mcptoon install <name> --npm <pkg>`."397 )398E mcptoon.installer.RegistryError: No MCP registry reachable (smithery: URLError: <urlopen error [Errno -3] Temporary failure in name resolution>; registry: URLError: <urlopen error [Errno -3] Temporary failure in name resolution>). Check your connection, or install directly with `mcptoon install <name> --npm <pkg>`.399400src/mcptoon/installer.py:171: RegistryError401_____________ TestInstallByName.test_search_smithery_returns_list ______________402403self = <urllib.request.HTTPSHandler object at 0xfffff4ba7390>404http_class = <class 'http.client.HTTPSConnection'>405req = <urllib.request.Request object at 0xfffff496acf0>406http_conn_args = {'context': <ssl.SSLContext object at 0xfffff4b9b2b0>}407408 def do_open(self, http_class, req, **http_conn_args):409 """Return an HTTPResponse object for the request, using http_class.410 411 http_class must implement the HTTPConnection API from http.client.412 """413 host = req.host414 if not host:415 raise URLError('no host given')416 417 # will parse host:port418 h = http_class(host, timeout=req.timeout, **http_conn_args)419 h.set_debuglevel(self._debuglevel)420 421 headers = dict(req.unredirected_hdrs)422 headers.update(req.headers)423 424 # TODO(jhylton): Should this be redesigned to handle425 # persistent connections?426 427 # We want to make an HTTP/1.1 request, but the addinfourl428 # class isn't prepared to deal with a persistent connection.429 # It will try to read all remaining data from the socket,430 # which will block while the server waits for the next request.431 # So make sure the connection gets closed after the (only)432 # request.433 headers["Connection"] = "close"434 headers = {name.title(): val for name, val in headers.items()}435 436 if req._tunnel_host:437 tunnel_headers = {}438 proxy_auth_hdr = "Proxy-Authorization"439 if proxy_auth_hdr in headers:440 tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr]441 # Proxy-Authorization should not be sent to origin442 # server.443 del headers[proxy_auth_hdr]444 h.set_tunnel(req._tunnel_host, headers=tunnel_headers)445 446 try:447 try:448> h.request(req.get_method(), req.selector, req.data, headers,449 encode_chunked=req.has_header('Transfer-encoding'))450451/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:1320: 452_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 453/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1386: in request454 self._send_request(method, url, body, headers, encode_chunked)455/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1432: in _send_request456 self.endheaders(body, encode_chunked=encode_chunked)457/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1381: in endheaders458 self._send_output(message_body, encode_chunked=encode_chunked)459/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1141: in _send_output460 self.send(msg)461/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1085: in send462 self.connect()463/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1520: in connect464 super().connect()465/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1051: in connect466 self.sock = self._create_connection(467/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/socket.py:850: in create_connection468 for res in getaddrinfo(host, port, 0, SOCK_STREAM):469 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^470_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 471472host = 'registry.smithery.ai', port = 443, family = 0473type = <SocketKind.SOCK_STREAM: 1>, proto = 0, flags = 0474475 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):476 """Resolve host and port into list of address info entries.477 478 Translate the host/port argument into a sequence of 5-tuples that contain479 all the necessary arguments for creating a socket connected to that service.480 host is a domain name, a string representation of an IPv4/v6 address or481 None. port is a string service name such as 'http', a numeric port number or482 None. By passing None as the value of host and port, you can pass NULL to483 the underlying C API.484 485 The family, type and proto arguments can be optionally specified in order to486 narrow the list of addresses returned. Passing zero as a value for each of487 these arguments selects the full range of results.488 """489 # We override this function since we want to translate the numeric family490 # and socket type values to enum constants.491 addrlist = []492> for res in _socket.getaddrinfo(host, port, family, type, proto, flags):493 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^494E socket.gaierror: [Errno -3] Temporary failure in name resolution495496/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/socket.py:989: gaierror497498During handling of the above exception, another exception occurred:499500self = <tests.test_serve.TestInstallByName object at 0xfffff4843bb0>501502 def test_search_smithery_returns_list(self):503 """_search_smithery returns a list."""504 from mcptoon.installer import _search_smithery505> result = _search_smithery("test")506 ^^^^^^^^^^^^^^^^^^^^^^^^507508tests/test_serve.py:639: 509_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 510src/mcptoon/installer.py:194: in _search_smithery511 data = _fetch_json(f"{SMITHERY_API_URL}/servers?{params}")512 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^513src/mcptoon/installer.py:186: in _fetch_json514 with urllib.request.urlopen(req, timeout=timeout) as resp:515 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^516/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:187: in urlopen517 return opener.open(url, data, timeout)518 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^519/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:487: in open520 response = self._open(req, data)521 ^^^^^^^^^^^^^^^^^^^^^522/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:504: in _open523 result = self._call_chain(self.handle_open, protocol, protocol +524/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:464: in _call_chain525 result = func(*args)526 ^^^^^^^^^^^527/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:1368: in https_open528 return self.do_open(http.client.HTTPSConnection, req,529_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 530531self = <urllib.request.HTTPSHandler object at 0xfffff4ba7390>532http_class = <class 'http.client.HTTPSConnection'>533req = <urllib.request.Request object at 0xfffff496acf0>534http_conn_args = {'context': <ssl.SSLContext object at 0xfffff4b9b2b0>}535536 def do_open(self, http_class, req, **http_conn_args):537 """Return an HTTPResponse object for the request, using http_class.538 539 http_class must implement the HTTPConnection API from http.client.540 """541 host = req.host542 if not host:543 raise URLError('no host given')544 545 # will parse host:port546 h = http_class(host, timeout=req.timeout, **http_conn_args)547 h.set_debuglevel(self._debuglevel)548 549 headers = dict(req.unredirected_hdrs)550 headers.update(req.headers)551 552 # TODO(jhylton): Should this be redesigned to handle553 # persistent connections?554 555 # We want to make an HTTP/1.1 request, but the addinfourl556 # class isn't prepared to deal with a persistent connection.557 # It will try to read all remaining data from the socket,558 # which will block while the server waits for the next request.559 # So make sure the connection gets closed after the (only)560 # request.561 headers["Connection"] = "close"562 headers = {name.title(): val for name, val in headers.items()}563 564 if req._tunnel_host:565 tunnel_headers = {}566 proxy_auth_hdr = "Proxy-Authorization"567 if proxy_auth_hdr in headers:568 tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr]569 # Proxy-Authorization should not be sent to origin570 # server.571 del headers[proxy_auth_hdr]572 h.set_tunnel(req._tunnel_host, headers=tunnel_headers)573 574 try:575 try:576 h.request(req.get_method(), req.selector, req.data, headers,577 encode_chunked=req.has_header('Transfer-encoding'))578 except OSError as err: # timeout error579> raise URLError(err)580E urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in name resolution>581582/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:1323: URLError583___________ TestInstallByName.test_search_mcp_registry_returns_list ____________584585self = <urllib.request.HTTPSHandler object at 0xfffff4ba7390>586http_class = <class 'http.client.HTTPSConnection'>587req = <urllib.request.Request object at 0xfffff3164e20>588http_conn_args = {'context': <ssl.SSLContext object at 0xfffff4b9b2b0>}589590 def do_open(self, http_class, req, **http_conn_args):591 """Return an HTTPResponse object for the request, using http_class.592 593 http_class must implement the HTTPConnection API from http.client.594 """595 host = req.host596 if not host:597 raise URLError('no host given')598 599 # will parse host:port600 h = http_class(host, timeout=req.timeout, **http_conn_args)601 h.set_debuglevel(self._debuglevel)602 603 headers = dict(req.unredirected_hdrs)604 headers.update(req.headers)605 606 # TODO(jhylton): Should this be redesigned to handle607 # persistent connections?608 609 # We want to make an HTTP/1.1 request, but the addinfourl610 # class isn't prepared to deal with a persistent connection.611 # It will try to read all remaining data from the socket,612 # which will block while the server waits for the next request.613 # So make sure the connection gets closed after the (only)614 # request.615 headers["Connection"] = "close"616 headers = {name.title(): val for name, val in headers.items()}617 618 if req._tunnel_host:619 tunnel_headers = {}620 proxy_auth_hdr = "Proxy-Authorization"621 if proxy_auth_hdr in headers:622 tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr]623 # Proxy-Authorization should not be sent to origin624 # server.625 del headers[proxy_auth_hdr]626 h.set_tunnel(req._tunnel_host, headers=tunnel_headers)627 628 try:629 try:630> h.request(req.get_method(), req.selector, req.data, headers,631 encode_chunked=req.has_header('Transfer-encoding'))632633/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:1320: 634_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 635/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1386: in request636 self._send_request(method, url, body, headers, encode_chunked)637/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1432: in _send_request638 self.endheaders(body, encode_chunked=encode_chunked)639/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1381: in endheaders640 self._send_output(message_body, encode_chunked=encode_chunked)641/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1141: in _send_output642 self.send(msg)643/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1085: in send644 self.connect()645/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1520: in connect646 super().connect()647/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/http/client.py:1051: in connect648 self.sock = self._create_connection(649/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/socket.py:850: in create_connection650 for res in getaddrinfo(host, port, 0, SOCK_STREAM):651 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^652_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 653654host = 'registry.modelcontextprotocol.io', port = 443, family = 0655type = <SocketKind.SOCK_STREAM: 1>, proto = 0, flags = 0656657 def getaddrinfo(host, port, family=0, type=0, proto=0, flags=0):658 """Resolve host and port into list of address info entries.659 660 Translate the host/port argument into a sequence of 5-tuples that contain661 all the necessary arguments for creating a socket connected to that service.662 host is a domain name, a string representation of an IPv4/v6 address or663 None. port is a string service name such as 'http', a numeric port number or664 None. By passing None as the value of host and port, you can pass NULL to665 the underlying C API.666 667 The family, type and proto arguments can be optionally specified in order to668 narrow the list of addresses returned. Passing zero as a value for each of669 these arguments selects the full range of results.670 """671 # We override this function since we want to translate the numeric family672 # and socket type values to enum constants.673 addrlist = []674> for res in _socket.getaddrinfo(host, port, family, type, proto, flags):675 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^676E socket.gaierror: [Errno -3] Temporary failure in name resolution677678/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/socket.py:989: gaierror679680During handling of the above exception, another exception occurred:681682self = <tests.test_serve.TestInstallByName object at 0xfffff4843ce0>683684 def test_search_mcp_registry_returns_list(self):685 """_search_mcp_registry returns a list."""686 from mcptoon.installer import _search_mcp_registry687> result = _search_mcp_registry("test")688 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^689690tests/test_serve.py:645: 691_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 692src/mcptoon/installer.py:235: in _search_mcp_registry693 data = _fetch_json(f"{MCP_REGISTRY_URL}/servers?{params}")694 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^695src/mcptoon/installer.py:186: in _fetch_json696 with urllib.request.urlopen(req, timeout=timeout) as resp:697 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^698/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:187: in urlopen699 return opener.open(url, data, timeout)700 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^701/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:487: in open702 response = self._open(req, data)703 ^^^^^^^^^^^^^^^^^^^^^704/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:504: in _open705 result = self._call_chain(self.handle_open, protocol, protocol +706/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:464: in _call_chain707 result = func(*args)708 ^^^^^^^^^^^709/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:1368: in https_open710 return self.do_open(http.client.HTTPSConnection, req,711_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 712713self = <urllib.request.HTTPSHandler object at 0xfffff4ba7390>714http_class = <class 'http.client.HTTPSConnection'>715req = <urllib.request.Request object at 0xfffff3164e20>716http_conn_args = {'context': <ssl.SSLContext object at 0xfffff4b9b2b0>}717718 def do_open(self, http_class, req, **http_conn_args):719 """Return an HTTPResponse object for the request, using http_class.720 721 http_class must implement the HTTPConnection API from http.client.722 """723 host = req.host724 if not host:725 raise URLError('no host given')726 727 # will parse host:port728 h = http_class(host, timeout=req.timeout, **http_conn_args)729 h.set_debuglevel(self._debuglevel)730 731 headers = dict(req.unredirected_hdrs)732 headers.update(req.headers)733 734 # TODO(jhylton): Should this be redesigned to handle735 # persistent connections?736 737 # We want to make an HTTP/1.1 request, but the addinfourl738 # class isn't prepared to deal with a persistent connection.739 # It will try to read all remaining data from the socket,740 # which will block while the server waits for the next request.741 # So make sure the connection gets closed after the (only)742 # request.743 headers["Connection"] = "close"744 headers = {name.title(): val for name, val in headers.items()}745 746 if req._tunnel_host:747 tunnel_headers = {}748 proxy_auth_hdr = "Proxy-Authorization"749 if proxy_auth_hdr in headers:750 tunnel_headers[proxy_auth_hdr] = headers[proxy_auth_hdr]751 # Proxy-Authorization should not be sent to origin752 # server.753 del headers[proxy_auth_hdr]754 h.set_tunnel(req._tunnel_host, headers=tunnel_headers)755 756 try:757 try:758 h.request(req.get_method(), req.selector, req.data, headers,759 encode_chunked=req.has_header('Transfer-encoding'))760 except OSError as err: # timeout error761> raise URLError(err)762E urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in name resolution>763764/nix/store/3fl7bdkdxk2k4nssy1d1161isbzn6bsr-python3-3.14.7/lib/python3.14/urllib/request.py:1323: URLError765=========================== short test summary info ============================766FAILED tests/test_serve.py::TestInstallByName::test_search_registry_returns_list - mcptoon.installer.RegistryError: No MCP registry reachable (smithery: URLEr...767FAILED tests/test_serve.py::TestInstallByName::test_search_smithery_returns_list - urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in name ...768FAILED tests/test_serve.py::TestInstallByName::test_search_mcp_registry_returns_list - urllib.error.URLError: <urlopen error [Errno -3] Temporary failure in name ...769============= 3 failed, 1323 passed, 1 skipped in 72.15s (0:01:12) =============