return {
  {
    "williamboman/mason.nvim",
    lazy = false,
    config = function()
      require("mason").setup()
    end,
  },
  {
    "williamboman/mason-lspconfig.nvim",
    lazy = false,
    opts = {
      auto_install = true,
    },
  },
  {
    "neovim/nvim-lspconfig",
    lazy = false,
    dependencies = {
      "SmiteshP/nvim-navic", -- Add this dependency
    },
    config = function()
      local capabilities = require('cmp_nvim_lsp').default_capabilities()
      local navic = require("nvim-navic")
      
      -- Define server configurations
      local servers = {
        ts_ls = {},
        solargraph = {},
        html = {},
        lua_ls = {
          settings = {
            Lua = {
              diagnostics = {
                globals = { "vim" },
              },
              workspace = {
                checkThirdParty = false,
              },
              telemetry = {
                enable = false,
              },
            },
          },
        },
        pyright = {},
      }

      -- Setup each server with the new API
      for server, config in pairs(servers) do
        config.capabilities = capabilities
        
        -- Add navic on_attach for breadcrumbs
        config.on_attach = function(client, bufnr)
          if client.server_capabilities.documentSymbolProvider then
            navic.attach(client, bufnr)
          end
        end
        
        vim.lsp.config[server] = config
        vim.lsp.enable(server)
      end

      -- LSP keymaps
      vim.keymap.set("n", "K", vim.lsp.buf.hover, {})
      vim.keymap.set("n", "<leader>gd", vim.lsp.buf.definition, {})
      vim.keymap.set("n", "<leader>gr", vim.lsp.buf.references, {})
      vim.keymap.set("n", "<leader>ca", vim.lsp.buf.code_action, {})
    end,
  },
}
