Immutable
release. Only release title and notes can be modified.
🌍 Multiple LLM providers via any-llm
This is the biggest release in a long time. The headline: ollmcp is no longer Ollama-only. The client now talks to multiple LLM providers through the any-llm SDK — while keeping Ollama as the default and the full TUI experience unchanged.
Alongside the provider work, this release adds a new flicker-free answer renderer, reasoning-effort control, smarter agent-loop handling, and first-class Windows support.
✨ Highlights
- 🌍 Multiple LLM providers — Use Ollama (default) or any OpenAI-compatible provider (OpenAI, OpenRouter, DeepSeek, Perplexity, etc.). Pick one with
--provider/-p, point it at an endpoint with--host/-H, and authenticate with--api-key/-kor the provider-agnostic$OLLMCP_API_KEYenv var. - 🗂️ Per-provider profiles — Model, host, and API key are remembered per provider, so switching never reuses another provider's settings. A
defaultProvideris tracked so plainollmcpresumes wherever you left off. Legacy single-provider configs are migrated automatically. - 🔑 Safer API-key handling — Clear precedence (
--api-key→$OLLMCP_API_KEY→ saved config → provider-native env var). Only keys passed with--api-keyare written to disk; env-var keys are never persisted. Missing-key and 401 auth errors are now handled gracefully. - 🖼️ Provider-agnostic vision & metrics — Images are converted to the OpenAI content-array format so vision works across providers, and token-usage metrics replace the Ollama-specific ones.
- 📝 New "Markdown (blocks)" answer display mode — An append-only renderer that prints each completed markdown block once, fixing the duplicated-lines / flicker issue in the live "Markdown only" mode (especially with wide glyphs/emojis or terminal resizes). The default display mode is now the safer "both".
- 💪 Reasoning effort levels — New
/reasoning-effort(/re) command to control how much reasoning effort a model applies when thinking mode is on:auto,minimal,low,medium(default),high, orxhigh. Some providers/models may ignore the setting. - 🔁 Interactive agent loop-limit choices — When the agent loop limit is reached, the client now presents an interactive prompt instead of silently stopping. You can continue with more iterations, go unlimited, ask the model to wrap up with a final answer, or abort the turn entirely.
- 🪟 Windows support — Fixed a startup crash on Windows caused by unconditional POSIX-only
tty/termiosimports. Windows now usesmsvcrtfor keyboard input; Linux/macOS behavior is unchanged. A dedicated Windows smoke-test CI job verifies CLI startup on every run.
⚠️ Breaking change
- Minimum Python is now 3.11 (was 3.10).
any-llm-sdkonly publishes wheels for Python >=3.11. This applies to both themcp-client-for-ollamaandollmcppackages, the CI/publish workflows, and the docs.
📌 Notes & current limitations
- Non-Ollama providers are experimental and still being stabilized — not everything may work yet.
- OpenAI-compatible only for now. Providers any-llm exposes that are not OpenAI-compatible (e.g.
anthropic,gemini,mistral,groq,cohere) are not supported yet. - Capability detection limitation: real per-model capabilities (
tools,vision,thinking) are only read from Ollama. For every other provider all three are assumed available, so a model may be shown as supporting a capability it doesn't actually have (the provider's API will error when you try to use it).
What's Changed
- chore(deps): bump pydantic-settings from 2.14.1 to 2.14.2 in the uv group across 1 directory by @dependabot[bot] in #243
- feat(any-llm): refactor MCP client to support multiple LLM providers by @jonigl in #246
- fix(build): require Python >=3.11 for any-llm-sdk compatibility by @jonigl in #248
- chore(client): add spacing before user input prompt by @jonigl in #249
- docs: add troubleshooting section and update installation instructions by @jonigl in #250
- feat(streaming): add append-only "Markdown (blocks)" answer display mode by @jonigl in #251
- fix: update upgrade instructions and command name in output by @jonigl in #252
- fix(windows): fix crash caused by unconditional tty/termios imports by @Jeevaom in #244
- feat(agent): add interactive choices when the loop limit is reached by @jonigl in #256
- chore(ci): use release drafts and add a Windows smoke-test workflow by @jonigl in #257
- fix(ci): correct Windows smoke-test package install and command execution by @jonigl in #258
- feat: add reasoning effort levels and the
/reasoning-effortcommand by @jonigl in #259 - docs: refine README table of contents and enhance MCP sections by @jonigl in #260
- chore(ci): bump dependency-review and checkout GitHub actions by @jonigl in #261
- chore(release): bump version to 0.31.0 by @jonigl in #262
New Contributors
- @Jeevan-Gharate made their first contribution in https://github.com/jonigl/mc
Full Changelog: v0.30.0...v0.31.0