Releases: qualixar/slm-mcp-hub
Release list
v0.2.3 — meta-tool rename, per-call timeout, bug fixes
v0.2.3 — 2026-06-07
Added
- Per-call timeout for tool invocations (
DEFAULT_TOOL_TIMEOUT_S = 120): Tool calls now have a 2-minute default timeout. Quick searches fail fast instead of hanging for an hour. - Backward-compatible
_META_TOOL_ALIASES— servers using oldhub__call_tool/hub__search_tools/hub__list_serversnames continue to work.
Fixed
- Meta-tool rename from
hub__*to bare names: Fixes Grok CLI compatibility. Tool names are nowsearch_tools,call_tool,list_servers. slm-hub toolsCLI was returning empty output — now uses REST endpoint.call_toolmeta-tool now routes meta-tool names locally (e.g.,call_tool(tool="list_servers")works).- 654 tests passing.
Full diff
v0.2.1 — gamma federates through hub (X-API-KEY)
Patch release: documents that MCP servers offering an X-API-KEY header in addition to OAuth Bearer (e.g. Gamma's official MCP) can be federated through the hub today using the existing per-server headers config — no new hub code needed.
Wire gamma into the hub
```bash
In ~/.slm-mcp-hub/config.json:
"gamma": {
"enabled": true,
"type": "http",
"url": "https://mcp.gamma.app/mcp",
"headers": {"X-API-KEY": "<your-key-from-gamma.app-dashboard>"}
}
Then hot-add via v0.2.0 lifecycle (no hub restart):
slm-hub server reload
```
Fixed
- Minor: cosmetic cleanups in connection error messages.
Coming in v0.3.0
Full OAuth-DCR federation (RFC 9728 protected-resource metadata, RFC 7591 dynamic client registration, OAuth 2.1 PKCE flow with loopback callback) for MCPs that only support OAuth Bearer with no API-key bypass.
654 tests pass. Backward compatible.
v0.2.0 — Lifecycle & Transport
The first MCP gateway that learns, hot-reloads, and serves both stdio + HTTP natively.
Highlights
Zero-restart hot-reload
Add, remove, and modify federated MCP servers at runtime — no hub restart required.
```bash
slm-hub server add github --command npx --arg @modelcontextprotocol/server-github
slm-hub server remove old-server
slm-hub server modify github --env GITHUB_TOKEN=...
slm-hub server reload # re-read config.json from disk
slm-hub server list --show-tools
```
Connected MCP clients receive `notifications/tools/list_changed` within ≤1s of any registry change (debounced). Existing connections to unchanged servers (e.g. kite SSE / OAuth sessions) keep their state — only the changed server's connection is drained and replaced.
Native stdio transport
`slm-hub mcp` serves MCP JSON-RPC over stdin/stdout using NDJSON framing, matching the official MCP Python SDK. Enables native Claude Desktop integration without a Node bridge — same federation, just stdin/stdout instead of HTTP.
```bash
slm-hub setup register --client claude-desktop
```
Polished observability
- `slm-hub status --verbose` shows per-server connected/disabled/failed state with last-error message including stderr tail and exit code.
- Cold start fast-retry schedule (0.5s, 1.5s, 4.5s) for transient connection failures.
Fixed
- `notifications/tools/list_changed` is now actually emitted (previously advertised in `initialize` but never sent).
- `disconnect()` no longer raises `ProcessLookupError` when terminating an already-exited child process.
- Reader EOF fails pending futures with a rich diagnostic (exit code + command + stderr tail), instead of hanging forever.
- Child stderr drained to prevent pipe-buffer deadlock under verbose MCPs.
- `asyncio.Lock` added around all `ConnectionManager` mutations.
Backward compatibility
`slm-hub start` HTTP transport continues to work identically. No config schema changes. All v0.1.x clients continue to work without modification.
Install
```bash
pip install --upgrade slm-mcp-hub # Python
npm install -g slm-mcp-hub # Node bin wrapper
```
654 tests pass. AI Reliability Engineering, shipping.