Repository navigation
Releases: mshadmanrahman/root-kg
Release list
v2.1.0
Install: pip install root-kg (https://pypi.org/project/root-kg/2.1.0/)
Changed
root-serverruns on the mcp 2.x SDK. Tool handlers are passed to theServerconstructor ason_list_tools/on_call_tooland returnListToolsResult/CallToolResult; the 18 tool definitions and the dispatcher are unchanged (#10).mcpdependency is>=2,<3. The<2pin from 2.0.0 is gone.- 2.x
stdio_serverpoints fd 0 at the null device and fd 1 at stderr while serving, so stray prints from torch or sentence-transformers can no longer corrupt the JSON-RPC stream.
Added
tests/test_server_tools.pylists the tools through the 2.x handler and checks the unknown-tool path, so a schema or dispatch regression fails CI.
v2.0.0
Install: pip install root-kg (https://pypi.org/project/root-kg/2.0.0/)
Added
- Published on PyPI as
root-kg, sopip install root-kgreplaces the clone-and-venv path for people who want the tool rather than the code (#2). .github/workflows/release.yml: pushing av*tag builds the sdist and wheel, checks the tag againstpyproject.toml, and publishes through PyPI trusted publishing. No API token in the repo.tests/test_paths.pycovers the three ways the home directory resolves, andtests/test_server_import.pyimports the MCP server against the pinned SDK.
Changed
- All modules now live in one
root_kg/package (root_kg/adapters/,root_kg/tools/). Console scripts (root-kg,root-index,root-server) are unchanged. Anything that ranpython indexer.pyorpython server.pydirectly must switch toroot-index/root-serverorpython -m root_kg.indexer. - Config, database and logs resolve through
root_kg/paths.py:ROOT_KG_HOMEwhen set, else the checkout root whenpyproject.tomlsits next to the package, else~/.root-kg.root-kg initcreates that directory and prints it. config.example.yamland.env.examplemoved intoroot_kg/and ship inside the wheel, soroot-kg initcan copy them after a PyPI install.mcpis pinned to>=1.0.0,<2. The 2.x SDK removed the low-levelServer.list_tools/call_tooldecorators the server is built on, and a fresh install was pulling 2.2.0 and crashing on start. Migrating to the 2.x API is a separate change.root-kg initprints theclaude mcp addline with the real path toroot-server, found on PATH or next to the running interpreter.- Chunk size is read from config as
embeddings.max_chunk_chars(default 4000). The oldmax_chunk_tokensandsplit_on_headingskeys were never read and are gone from the example config. - Default synthesis model is
claude-sonnet-5.
Removed
[tool.setuptools] py-moduleslist; setuptools finds the package on its own.
v1.1.0 — Daemon, health monitoring, and multi-backend LLM
What's new in v1.1.0
ROOT as a background service
ROOT can now run as a persistent warm daemon, not just a script you call on demand.
New in this release:
-
** — Warm daemon**: Keeps the DB and embedder loaded in memory. Exposes and on localhost so other agents and scripts can query ROOT with no cold-start penalty and zero LLM calls on the hot path.
-
** — Agent-callable CLI**: Any shell script, cron job, or external AI agent can now invoke the full ROOT tool surface (
search,open_loops,themes,weekly_digest,decision_trail,project_pulse,blind_spots) without standing up the MCP server. -
health-check.py— Operational monitoring: Validates indexer freshness, database state, cron health, and MCP reachability. Run it daily to catch silent failures early. -
skill-audit.py— Tool usage analytics: Surfaces which MCP tools are actually being called, so you can tune extraction priorities based on real query patterns. -
slack-alert.py— Webhook alerts: Pairs withhealth-check.pyto push operational summaries to Slack without polling logs. -
run-indexer.sh— Shell wrapper: Drop-in launchd/cron-compatible indexer runner. Handles venv activation and structured logging.
LLM backend improvements
llm.py rebuilt as a proper multi-backend client. Anthropic and OpenRouter are now feature-equivalent: both support extraction and synthesis independently. Nested Claude environment variables are stripped before subprocess calls (prevents token leakage in agentic setups). OpenRouter's OpenAI-compatible tool schema is fully supported.
indexer.py has an LLM pause guard: drop a .llm-paused file in the project root to skip entity extraction gracefully without interrupting indexing. Useful for rate-limit management in automated deployments.
Other changes
embeddings.py: model loading errors surface earlier with a clearer messageserver.py: tool handler errors caught at the transport layer, returned as structured responses instead of crashing the processdb.py: schema query optimizations and defensive write-path checks
Full changelog: CHANGELOG.md