googleapis/mcp-toolbox · error

server is already listening: %s

Error message

server is already listening: %s

What it means

Error "server is already listening: %s" thrown in googleapis/mcp-toolbox.

Source

Thrown at internal/server/server.go:688

				render.JSON(w, r, jsonrpc.NewError(nil, jsonrpc.INTERNAL_ERROR, "Internal Server Error", nil))
				return
			}

			ctx := util.WithAuthTokenClaims(r.Context(), claims)
			r = r.WithContext(ctx)

			next.ServeHTTP(w, r)
		})
	}
}

// Listen starts a listener for the given Server instance.
func (s *Server) Listen(ctx context.Context, certFile, keyFile string) error {
	ctx, cancel := context.WithCancel(ctx)
	defer cancel()

	if s.listener != nil {
		return fmt.Errorf("server is already listening: %s", s.listener.Addr().String())
	}
	lc := net.ListenConfig{KeepAlive: 30 * time.Second}
	ln, err := lc.Listen(ctx, "tcp", s.srv.Addr)
	if err != nil {
		if errors.Is(err, syscall.EADDRINUSE) {
			return fmt.Errorf("failed to open listener for %q. Use `--port=<number>` to specify a different port: %w", s.srv.Addr, err)
		}
		return fmt.Errorf("failed to open listener for %q: %w", s.srv.Addr, err)
	}

	if certFile != "" || keyFile != "" {
		// Load the certificates
		cert, err := tls.LoadX509KeyPair(certFile, keyFile)
		if err != nil {
			ln.Close()
			return fmt.Errorf("failed to load TLS key pair (cert: %q, key: %q): %w", certFile, keyFile, err)
		}
		// Wrap the listener with TLS

View on GitHub (pinned to 8cc6e09de2)

When it happens

Trigger: Thrown at internal/server/server.go:688 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of googleapis/mcp-toolbox@8cc6e09de2 (2026-09-05). Data as JSON: /api/errors/523f52bafa38b91e. Report an issue: GitHub.