MCPs Stability, Better LSPs, and a Barrel o’ Fixes
This is another quality of life release around MCPs and bug fixes. Read on for details.
💘 Thanks for using Crush and for all your contributions!
MCP Stability
MCP servers are like people: sometimes reliable and sometimes not. Crush will now restart or reconnect to MCPs when necessary and eventually timeout. The default timeout is 15 seconds, but you can customize timeouts per MCP in the config:
"mcp": {
"example": {
"type": "http",
"url": "https://example.org/mcp/",
"timeout": 30
}
}
Restrict LSPs to Filetypes
Now you can restrict LSP servers to specific file types in your config for improved efficiency. Here's how:
"lsp": {
"Go": {
"command": "gopls",
"filetypes": [
"go",
"mod",
"sum",
"work"
]
}
}
“But shouldn't you restrict known language servers to certain filetypes by default, you ask?" Yes, as a matter of fact, we have filetype associations for the following:
bash-language-server
clangd
elixir-ls
gopls
jdtls
lua-language-server
pylsp
pyright
rust-analyzer
solargraph
typescript-language-server
vscode-css-languageserver
vscode-html-languageserver
vscode-json-languageserver
vtsls
yaml-language-server
zls
Don’t your fave LSP here (ahem haskell-language-server
)? Just send a PR.
Shredding bugs
This release also contains a barrel o’ bugs in this UI improving Gemini (thanks @samiulsami), LSPs (thanks @liznear), User interface, performance in the raw Linux console and more.
Changelog
New!
- 90097e9: feat(lsp): add filetypes configuration (#666) (@caarlos0)
- bc52493: feat(mcp): configurable MCP timeout (@caarlos0)
- 5af4d19: feat(mcp): ping and recreate mcp client if needed (#772) (@caarlos0)
Bug fixes and improvements
- 5ff0f32: fix(gemini): fix tool calls for google gemini (#779) (@samiulsami)
- 16f5400: fix(lint): check length before slicing to avoid a panic in list (@meowgorithm)
- 0f403fe: fix(llm): set request timeout (#736) (@caarlos0)
- f8da476: fix(lsp): return a copy of lsp diagnostics to avoid data race (#681) (@liznear)
- 57df1f9: fix(tui): underline quit dialog buttons (#548) (@aymanbagabas)
- dcca5ab: fix(tui): truncate long paths in compact header (#773) (@meowgorithm)
Other stuff
- eb3ef66: chore(deps): bump bubbletea for colorprofile update (@aymanbagabas)
- 64e8235: chore(deps): bump dependencies to fix linux console perf (@aymanbagabas)
Verifying the artifacts
First, download the checksums.txt
file, for example, with wget
:
wget 'https://github.com/charmbracelet/crush/releases/download/v0.6.1/checksums.txt'
Then, verify it using cosign
:
cosign verify-blob \
--certificate-identity 'https://github.com/charmbracelet/meta/.github/workflows/goreleaser.yml@refs/heads/main' \
--certificate-oidc-issuer 'https://token.actions.githubusercontent.com' \
--cert 'https://github.com/charmbracelet/crush/releases/download/v0.6.1/checksums.txt.pem' \
--signature 'https://github.com/charmbracelet/crush/releases/download/v0.6.1/checksums.txt.sig' \
./checksums.txt
If the output is Verified OK
, you can safely use it to verify the checksums of other artifacts you downloaded from the release using sha256sum
:
sha256sum --ignore-missing -c checksums.txt
Done! You artifacts are now verified!
Thoughts? Questions? We love hearing from you. Feel free to reach out on Twitter, Discord, Slack, The Fediverse.