oraios/serena · error · ValueError

No language servers available in the manager

Error message

No language servers available in the manager

What it means

LanguageServerManager._default_language_server raises ValueError when the manager holds zero language servers but one is required (e.g. get_language_server falls back to the default). The default server property assumes at least one server was started at construction.

Source

Thrown at src/serena/ls_manager.py:96

        language_servers: dict[LanguageServerId, SolidLanguageServer],
        language_server_factory: LanguageServerFactory,
        project: "Project",
    ) -> None:
        """
        :param language_servers: a mapping from language to language server; the servers are assumed to be already started.
            The first server in the iteration order is used as the default server.
            All servers are assumed to serve the same project root.
        :param language_server_factory: factory for language server creation; if None, dynamic (re)creation of language servers
            is not supported
        """
        self._language_servers = language_servers
        self._language_server_factory = language_server_factory
        self._file_change_notifier = LanguageServerFileChangeNotifier(project, self)

    @property
    def _default_language_server(self) -> SolidLanguageServer:
        if len(self._language_servers) == 0:
            raise ValueError("No language servers available in the manager")
        return next(iter(self._language_servers.values()))

    @staticmethod
    def from_languages(languages: list[LanguageServerId], factory: LanguageServerFactory, project: "Project") -> "LanguageServerManager":
        """
        Creates a manager with language servers for the given languages using the given factory.
        The language servers are started in parallel threads.

        :param languages: the languages for which to spawn language servers
        :param factory: the factory for language server creation
        :param project: the project for which the language servers are created
        :return: the instance
        """

        class StartLSThread(threading.Thread):
            def __init__(self, ls_id: LanguageServerId):
                super().__init__(target=self._start_language_server, name="StartLS:" + ls_id.value)
                self.ls_id = ls_id

View on GitHub (pinned to 7fcbca7e62)

Solutions

  1. Create the manager via LanguageServerManager.from_languages with a non-empty language list
  2. Check get_active_language_server_ids() is non-empty before making requests
  3. Add a language server with add_language_server(LanguageServerId.PYTHON) for the target language
  4. Recreate the manager if all servers were removed

Example fix

// before
manager = LanguageServerManager({}, factory, project)
ls = manager.get_language_server("foo.py")  # ValueError
// after
manager = LanguageServerManager.from_languages(
    [LanguageServerId.PYTHON], factory, project)
ls = manager.get_language_server("foo.py")
Defensive patterns

Strategy: validation

Validate before calling

if not manager.get_active_language_server_ids():
    manager = LanguageServerManager.from_languages(
        [LanguageServerId.PYTHON], factory, project)

Type guard

def has_servers(manager: LanguageServerManager) -> bool:
    return len(manager.get_active_language_server_ids()) > 0

Try / catch

try:
    ls = manager.get_language_server(path)
except ValueError as e:
    if "No language servers available" in str(e):
        manager = LanguageServerManager.from_languages(config.languages, factory, project)
        ls = manager.get_language_server(path)
    else:
        raise

Prevention

When it happens

Trigger: Calling get_language_server(path) on a manager built with an empty language list; all language servers were removed via remove_language_server; LanguageServerManager was constructed directly with an empty dict instead of via from_languages.

Common situations: Project configured with no matching languages for the file being analyzed; a plugin/tool removed the only language server before further requests; manual instantiation of LanguageServerManager({}, factory, project).

Related errors


AI-assisted analysis of oraios/serena@7fcbca7e62 (2026-08-29). Data as JSON: /api/errors/194b046a22ddb057. Report an issue: GitHub.