intro
Changelog
CHANGELOG.md
Changelog
All notable changes to gnosis-mcp are documented here.
Format follows Keep a Changelog. Versioning follows Semantic Versioning (pre-1.0).
[Unreleased]
Added
Changed
Fixed
Security
[0.11.0] - 2026-04-18
Changed
- Default chunk size lowered 4000 → 2000 chars (
GNOSIS_MCP_CHUNK_SIZE). Measured on a real 558-doc developer-docs corpus with 25 hand-written golden queries: 2000-char chunks sit on the peak nDCG@10 plateau (0.8702), up from 0.8416 at the old 4000-char default (+3 nDCG points, Hit@5 0.88 → 0.92). Existing corpora keep working; re-ingest with--wipeto regenerate at the new size. Full sweep indocs/bench-experiments-2026-04-18.md. - Documentation hardened on reranker guidance. The bundled
[reranking]cross-encoder remains off by default. New measurements on the same corpus: MiniLM rerank drops nDCG@10 by 27 points and adds 400× latency; BGE-reranker-v2-m3 drops nDCG@10 by 31 points and adds 2400× latency. Search skill now warns explicitly before enabling. Prose-trained rerankers fight reference-style docs; measure on your corpus before turning it on.
Added
- Release pipeline (
scripts/bump-version.sh,scripts/release.sh,docs/releasing.md). Single-command version bump acrosspyproject.toml,src/gnosis_mcp/__init__.py,server.json,marketplace.json,SECURITY.md,CHANGELOG.md, anduv.lock, followed by parity check, tests, annotated tag, and three-remote push guidance. Previously required hand-editing 6+ files. - Agents + skills refresh.
agents/corpus-sync.md(bulk ingest / prune / wipe / crawl / git-history lifecycle with playbooks), updatedagents/doc-keeper.md(single-file CRUD lane), and rewritten skills:skills/search/,skills/ingest/,skills/tune/,skills/manage/. Users can drop these straight into~/.claude/agents/and~/.claude/skills/. - Benchmark experiments log (
docs/bench-experiments-2026-04-18.md): full chunk-size sweep (1000 → 4000 chars), reranker comparison table (keyword, MiniLM, BGE-v2-m3, mxbai-large), hybrid-vs-keyword on vocabulary-matched corpora, with raw numbers and methodology. /evalshort-answer tooling exposed through thegnosis-mcp evalCLI and thetuneskill — measures Hit@K / MRR / Precision@K on a user's own corpus in under a second.- Docker image published to GHCR (
ghcr.io/nicholasglazer/gnosis-mcp), multi-arch (linux/amd64, linux/arm64), built by.github/workflows/docker.ymlon every tag push. - Landing site refresh at gnosismcp.com: honest feature copy, fact-checked benchmark card, graph visualization driven by live
documentation_linksdata,llms.txt+llms-full.txtserved at the root for AI-assistant ingestion.
Fixed
llms.txtandllms-full.txtnow reflect the actual test count (632) and the current SDK version.- CHANGELOG ordering:
[Unreleased]stays at the top;All notable changes…preamble moved out of the release block so it doesn't get rolled into a version section on the next bump.
[0.10.13] - 2026-04-17
Security
- Timing-safe Bearer token comparison in REST API auth (
secrets.compare_digest). - Webhook SSRF guard:
GNOSIS_MCP_WEBHOOK_URLnow refuses private, loopback, link-local, multicast, and reserved addresses unlessGNOSIS_MCP_WEBHOOK_ALLOW_PRIVATE=true. - HuggingFace model download: enforced
https://huggingface.co/origin assertion, SHA-256 checksum verification scaffolding for the bundled default model. - robots.txt cross-host redirect now treated as disallow (prevents redirect-based spoofing).
- Content size caps:
upsert_docrejects content overGNOSIS_MCP_MAX_DOC_BYTES(default 50 MB);search_docsrejects queries overGNOSIS_MCP_MAX_QUERY_CHARS(default 10 000). - Dependency upper bounds pinned on
mcp,aiosqlite,asyncpg,onnxruntime,tokenizers,numpy,sqlite-vec,httpx,trafilatura,docutils,pypdf— major-version bumps can no longer slip in.
Added
- Typed relations (
relations:frontmatter block): documents can now declare semantic edge types beyond the flatrelates_to:list. Supported types:related,prerequisite,depends_on,summarizes,summarized_by,extends,extended_by,replaces,replaced_by,audited_by,audits,implements,implemented_by,tests,tested_by,example_of,references. Unknown types warn and are skipped. Stored in the existingrelation_typecolumn; queryable viaget_related(relation_type=...)andget_graph_stats(). No schema migration needed —relation_typecolumn already existed. - CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md for OSS community hygiene.
- PR CI workflow (
.github/workflows/ci.yml): ruff + pytest on Python 3.11 & 3.12, SQLite backend green-gated, PostgreSQL backend + pgvector service container (allow-failure during backend parity ramp-up). - Version-parity CI gate (
scripts/check-versions.sh): fails the release workflow ifpyproject.toml/__init__.py/server.json/marketplace.jsondrift. - Tag-vs-pyproject assertion in
publish.yml— av*tag push whose name disagrees withpyproject.tomlfails early. - End-to-end MCP protocol tests (
tests/test_mcp_e2e.py): spawngnosis-mcpsubprocess, drive it through stdio MCP, assert 9 tools + 3 resources + write/read roundtrip +gnosis-mcp checkintegration. - Three benchmark suites in
tests/bench/:bench_search.py(speed),bench_rag.py(retrieval quality — Precision@K, MRR, Hit Rate, keyword vs hybrid),bench_mcp_e2e.py(protocol round-trip latency). gnosis-mcp evalCLI subcommand — runs the retrieval-quality harness and prints Hit@K / MRR / Precision@K in ~1 s. Short answer to "show me the numbers".gnosis-mcp prune <path>— deletes DB chunks whose source file no longer exists on disk. Scoped to the given root so crawled URLs are untouched by default (--include-crawledto also prune them).--dry-runpreviews.gnosis-mcp ingest --prune— after ingest, prune stale docs in the same pass.gnosis-mcp ingest --wipe— nuke every document before re-ingesting (nuclear reset for re-organized knowledge folders).[reranking]optional extra with ONNX cross-encoder reranker (onnx-community/ms-marco-MiniLM-L6-v2-ONNX, 22 M params, Apache 2.0). Off by default; enable viaGNOSIS_MCP_RERANK_ENABLED=trueor thererank=truetool parameter.GNOSIS_MCP_RRF_Kenv var to tune hybrid-search Reciprocal Rank Fusion (default 60, the canonical value)./healthREST endpoint now exposessearch_stats(total / misses / hybrid / keyword counters).- Benchmarks doc (
docs/benchmarks.md) with methodology, scale curve to 10 000 docs, RAG-native metrics, PostgreSQL reproduction steps, and regression gates. - Dependency floors bumped:
mcp>=1.27,aiosqlite>=0.22,asyncpg>=0.30,onnxruntime>=1.22,tokenizers>=0.22,numpy>=2.0,sqlite-vec>=0.1.6,httpx>=0.28,trafilatura>=2.0,docutils>=0.22,pypdf>=5.0. Upper bounds retained. - Pytest markers (
sqlite_only,postgres_only,eval,bench,e2e) registered inpyproject.toml. GNOSIS_MCP_CRAWL_EXTRACT_TIMEOUT_S(default 30 s) caps per-page trafilatura extraction.- First-run guidance:
gnosis-mcp searchagainst an empty database now hints to rungnosis-mcp ingest <path>first. - REST request logging middleware: method, path, status, duration_ms at INFO (skips
/health). - Windows install paths documented in
llms-install.md.
Changed
- MCP protocol round-trip latency improved ~35 % (13.3 ms → 8.7 ms mean, 24.4 ms → 13.0 ms p95) via
mcpSDK upgrade to 1.27. - Ingest format dispatch refactored to a registry (
_CONVERTERSiningest.py) — adding a new format is now a single map entry. - Duplicate search-result dict construction in
server.pyextracted to_format_search_result()helper. - Tests gate the publish workflow (
publish.yml): ruff check + pytest must pass before PyPI upload. - MCP Registry publish step now has explicit error handling, timeout, and binary integrity check.
- vec0 initialization failure is now fail-fast when
GNOSIS_MCP_EMBED_PROVIDERis configured (silent degradation hid hybrid-search breakage). - Resource error responses include exception type and a
hintto rungnosis-mcp check. _search_customPostgreSQL fallback narrowed toasyncpg.UndefinedFunctionError,AmbiguousFunctionError,InvalidParameterValueError(was catching every exception).
Fixed
/healthnow bypasses Bearer auth even whenGNOSIS_MCP_API_KEYis set — monitoring probes and load balancers were previously broken by returning 401. Regression test added intests/test_rest_auth.py.- Documentation claim alignment: corrected test count, format count, and tool count across README,
llms.txt,llms-full.txt, anddocs/show-hn.md. - README links to
llms-install.mdfrom the Quick Start section. .coverage,htmlcov/,coverage.xmladded to.gitignore.- Removed orphaned
demo.gif(not referenced) and straysqlite:/directory (CLI-misparse artefact).
[0.10.12] - 2026-04-07
Added
- Enriched
get_relatedtool: Multi-hop traversal (depth=1-3), relation type filtering, and optional title/category enrichment viainclude_titles. get_graph_statstool: Knowledge graph topology — orphans (disconnected docs), hubs (most connected), relation type distribution, edge/node counts.- Content link extraction:
ingestnow parses[text](path.md)markdown links and[[wikilinks]]from body content, stored ascontent_linkrelation type. GET /api/graph/statsREST endpoint: Same functionality as the MCP tool.gnosis-mcp fix-link-typesCLI command: Migrate existing git-history links from genericrelates_toto propergit_co_changeandgit_reftypes.
Changed
- Git history ingest now uses
git_co_change(cross-file) andgit_ref(source file) relation types instead of genericrelates_to.
[0.10.11] - 2026-04-07
Added
get_contexttool: Usage-weighted context loading — surfaces most-accessed documents for efficient session startup. Supports topic search enrichment, category filtering, and repository statistics.- Access tracking:
search_access_logtable automatically records document access fromsearch_docs(top 3 results) andget_doc. Fire-and-forget pattern, opt-out viaGNOSIS_MCP_ACCESS_LOG=false. GET /api/contextREST endpoint: Same functionality as the MCP tool, available when REST API is enabled.gnosis-mcp cleanupCLI command: Purge old access log entries (--days N, default 90).
[0.10.10] - 2026-04-07
Added
- Example agents for Claude Code: doc-explorer, doc-keeper, doc-reviewer, context-loader (
agents/directory) search_git_historysection in search skill with--gitflag- Git history and web crawl sections in setup skill
- All optional install extras documented in setup skill (
[embeddings],[web],[formats])
Fixed
- Skills: updated tool count from 6 to 7 across all skills (search_git_history was missing)
- Search skill: corrected hybrid search note — SQLite also supports hybrid via sqlite-vec RRF
- Manage skill: added missing
audienceparameter to upsert_doc and update_metadata examples - CLAUDE.md: corrected tool count from 6 to 7 in architecture diagram
Changed
- Updated deps: mcp 1.27.0, onnxruntime 1.24.4, numpy 2.4.4, ruff 0.15.9
[0.10.9] - 2026-04-07
Fixed
has_column()on PostgreSQL: switch frominformation_schema.columnstopg_catalog.pg_attribute— fixesupsert_docNotNullViolationError on Supabase and other PostgreSQL deployments where role permissions filter information_schema visibility. This was the actual root cause of the content_hash bug that v0.10.8 attempted to fix.
[0.10.8] - 2026-04-01
Fixed
upsert_docMCP tool: compute content_hash (SHA-256) on insert, fixing NotNullViolationError on PostgreSQL deployments with NOT NULL constraint on content_hash column- SQLite
upsert_doc: same content_hash fix, withhas_column()detection for backwards compatibility
[0.10.7] - 2026-03-24
Added
- Comparison table in README: gnosis-mcp vs Context7 vs Grounded Docs vs mcp-local-rag — feature-by-feature positioning
- Submitted to tolkonepiu/best-of-mcp-servers directory (knowledge-and-memory category)
[0.10.6] - 2026-03-23
Fixed
- MCP Registry publish pipeline:
server.jsontransport field was an array (invalid) — changed to single object per schema. This fixes 17 consecutive CI failures since v0.7.3 and restores registry updates.
[0.10.5] - 2026-03-23
Added
- Always-on
/healthendpoint for HTTP transports (streamable-http, sse) — no longer requires--restflag. Returns{"status": "ok", "version": "...", "transport": "..."}. Full REST API (/api/*) still requires--rest.
[0.10.4] - 2026-03-22
Added
- Transport guide in README: explains stdio vs HTTP tradeoffs, why stateful servers benefit from HTTP sharing, and how to configure multi-session setups
[0.10.3] - 2026-02-23
Fixed
- Custom search function disambiguation: add explicit
NULL::vectorcast forp_embeddingparameter when no query embedding is provided, fixingAmbiguousFunctionErrorwith PostgreSQL databases that have multiple overloaded search function signatures
[0.10.2] - 2026-02-23
Fixed
- CORS preflight now works when API key auth is enabled (middleware ordering fix: CORS outermost, auth innermost)
- Added test coverage for
/api/docs/{path}/relatedendpoint - Removed no-op
TYPE_CHECKINGblock fromrest.py --restwith stdio transport now logs a warning instead of silently ignoring
[0.10.1] - 2026-02-23
Changed
- Documentation: added REST API usage to README, llms.txt, llms-full.txt, CLAUDE.md
[0.10.0] - 2026-02-23
Added
- REST API: Native HTTP endpoints alongside MCP —
GET /api/search,/api/docs/{path},/api/docs/{path}/related,/api/categories,/health - Enable via
--restflag onserveorGNOSIS_MCP_REST=trueenv var - Optional CORS support via
GNOSIS_MCP_CORS_ORIGINS(comma-separated origins or*) - Optional API key auth via
GNOSIS_MCP_API_KEY(Bearer token in Authorization header) create_rest_app()factory for standalone REST appcreate_combined_app()factory for MCP + REST on same port- Hybrid search auto-embeds queries when local provider is configured
[0.9.13] - 2026-02-23
Added
- Search benchmark script:
tests/bench/bench_search.py— automated QPS, latency percentiles, hit rate measurement - Performance section in README: ~9,800 QPS (100 docs), ~3,500 QPS (500 docs), p50 under 0.25ms
- Performance data added to
llms.txtandllms-full.txt - Install size noted: ~23MB with
[embeddings], ~5MB base - Test count: 550+ tests, 10 eval cases (90% hit rate, 0.85 MRR)
[0.9.12] - 2026-02-23
Added
- Cross-file commit graph links: When a commit touches files A, B, C, their git-history docs now link to each other via
relates_to _build_cross_file_links()pure function for computing shared-commit relationships- Links created automatically after
ingest-gitcompletes, enrichingget_relatedresults
[0.9.11] - 2026-02-23
Added
- Git history eval cases: 5 new eval cases for commit messages, author emails, and file changes
- 4 sample git-history documents added to eval fixture (auth, db, tests, pyproject)
- Eval harness now covers 10 cases total: 90% hit rate, 0.85 MRR on sample corpus
[0.9.10] - 2026-02-23
Added
search_git_historyMCP tool: Dedicated tool for searching git commit history with post-filters- Scoped to
git-historycategory automatically — no need to passcategoryparameter - Filters:
author(name/email substring),since,until,file_path(path substring) - Over-fetches 3x then post-filters for accurate author/file matching
[0.9.9] - 2026-02-23
Added
--authorfilter foringest-git: Filter commits by author name or email (e.g.--author Alice)--untilfilter foringest-git: End date filter complementing existing--since(e.g.--until 2026-02-20)
[0.9.8] - 2026-02-23
Added
- Author email in git history:
git lognow captures%ae(author email) alongside%an(author name) - Rendered markdown includes
Author: Name <email>for better searchability GitCommitdataclass gainsauthor_emailfield
[0.9.7] - 2026-02-23
Fixed
- Empty query handling:
search()now validates input — empty/whitespace-only queries return empty list with warning log - File path search fallback: When FTS5 returns 0 results and query contains
/or., falls back tofile_path LIKEsearch search_docsMCP tool returns descriptive error for empty queries instead of silent empty result
[0.9.6] - 2026-02-23
Added
--forceflag foringest-git: Re-ingest all files ignoring content hash, matchingingest --forcebehavior
[0.9.5] - 2026-02-23
Fixed
- RST
includedirective crash:_convert_rst()now disablesfile_insertion_enabledandraw_enabledin docutils settings - RST files with
.. include::or.. raw::directives no longer crash ingestion - Added
except Exceptionfallback that returns raw text with warning log on any docutils failure
[0.9.4] - 2026-02-23
Changed
- Title boosting in FTS5:
bm25()now weights title column 10x over content column - Searches matching a document's title rank significantly higher than content-only matches
- SQLite backend only (PostgreSQL uses ts_rank with different weight mechanism)
[0.9.3] - 2026-02-23
Added
- Contextual chunk headers: Embedding text now includes
"Document: {path} | Section: {title}"prefix - Embeddings capture hierarchical document context, improving retrieval accuracy for ambiguous queries
contextual_header()pure function exported fromembed.pyget_pending_embeddings()now returnstitleandfile_pathalongsideidandcontent- Re-embed existing docs to benefit:
gnosis-mcp embed --provider local
[0.9.2] - 2026-02-23
Added
- Query logging: Every
search_docscall logs query, mode (keyword/hybrid), result count, top result path, score, and category - Search stats counters: In-memory
_search_statsdict tracks total searches, misses (zero results), and search mode breakdown - Enables search quality monitoring: watch for rising miss rate or declining scores
[0.9.1] - 2026-02-23
Added
- Search quality eval harness:
tests/eval/with Precision@K, MRR, and Hit Rate metrics - JSON-driven test cases (
tests/eval/cases.json) — add query-answer pairs to measure retrieval quality - Baseline eval: 5 cases, 100% hit rate on sample docs
- Runs as part of
pytest tests/eval/ -v— no extra dependencies
[0.9.0] - 2026-02-23
Added
- Git history ingestion:
gnosis-mcp ingest-git <repo-path>converts commit history into searchable markdown documents - Commit messages, authors, dates, and file associations parsed from
git logvia subprocess (zero new deps) - One markdown document per file, each commit as an H2 section — flows through existing chunk/embed/search pipeline
- Stored as
git-history/<file-path>with categorygit-historyfor scoped searches - Auto-linking to source file paths via
relates_tograph - Content hashing for incremental re-ingest (skips files with unchanged history)
- CLI flags:
--since,--max-commits,--include,--exclude,--dry-run,--embed,--merges - New
src/gnosis_mcp/parsers/package for non-file ingest sources - 48 new tests (pure function + integration with temp git repos)
[0.8.4] - 2026-02-22
Changed
- README restructure: funnel layout (hook → proof → features → install)
- Added before/after framing section ("Without a docs server" / "With Gnosis MCP")
- Replaced prose "Why use this" with scannable feature bullets
- Wrapped CLI reference, ingestion details, architecture in collapsible sections
- Added PyPI monthly downloads badge
- Improved tagline: "Turn your docs into a searchable knowledge base for AI agents"
- Trimmed visible content from 334 to 290 lines while preserving all information
[0.8.3] - 2026-02-22
Fixed
- README readability: rewrote intro sections, collapsed editor integrations
- Factual errors: transport values, DATABASE_URL naming, hybrid search scope
- llms.txt DATABASE_URL consistency
[0.8.2] - 2026-02-22
Fixed
- SECURITY: SSRF protection — blocks private/internal IPs (127.x, 10.x, 192.168.x, ::1, metadata endpoints) and checks redirect targets
- SECURITY: XML size limit (10 MB) in sitemap parser to prevent billion-laughs-style attacks
- SECURITY: Response size guard (50 MB) in
fetch_pageto prevent memory exhaustion - SECURITY: Cache file written with 0o600 permissions (owner-only read/write)
- BUG:
asyncio.CancelledErrorno longer swallowed in_crawl_single— properly re-raised (Python 3.11+ treats it asExceptionsubclass) - BUG:
save_cachemoved tofinallyblock — cache data preserved even on errors or cancellation - Atomic cache writes using
tempfile.mkstemp+os.replace— no corruption on crash asyncio.gatherusesreturn_exceptions=True— single task failure no longer aborts all tasks- robots.txt parsed once per crawl session (
RobotFileParserreused), not re-parsed per URL - Nested sitemap index fetches now run in parallel via
asyncio.gather - BFS discovery respects
max_urlscap on queue size (prevents unbounded memory growth) - Crawl depth clamped to max 10 in
CrawlConfig.__post_init__ - Debug log on robots.txt fetch failure (was silent
pass)
Added
CrawlActionStrEnum for type-safe action values (crawled,unchanged,skipped,error,blocked,dry-run)_is_private_host()SSRF protection function_parse_robots()for one-time robots.txt parsingTYPE_CHECKINGannotations forhttpx.AsyncClient,DocBackend,GnosisMcpConfigCounterusage in CLIcmd_crawlfor cleaner action counting- 30+ new tests: SSRF, CancelledError, depth clamping, atomic writes, cache permissions, BFS cap, StrEnum, oversized responses
[0.8.1] - 2026-02-22
Fixed
extract_content()now runs trafilatura in a thread pool (run_in_executor) to avoid blocking the event loop during CPU-bound HTML extraction- BFS discovery uses
collections.dequeinstead oflist.pop(0)— O(1) popleft vs O(n) shift - Nested sitemap index detection simplified from fragile double-negative to
len(nested) == len(all) - Silent
except: passon link insertion replaced withlog.debug()for troubleshootability
Added
--max-urlsflag (default: 5000) caps discovered URLs to prevent runaway memory on large sitemaps
[0.8.0] - 2026-02-22
Added
- Web crawl for documentation sites:
gnosis-mcp crawl <url>ingests docs from the web - Sitemap.xml discovery (
--sitemap) and BFS link crawling (--depth N) - robots.txt compliance — respects
Disallowrules automatically - ETag/Last-Modified HTTP caching for incremental re-crawl (304 Not Modified)
- URL path filtering with
--includeand--excludeglob patterns - Dry run mode (
--dry-run) to discover URLs without fetching - Force re-crawl (
--force) ignoring cache and content hashes - Post-crawl embedding (
--embed) for hybrid semantic search - Rate-limited concurrent fetching (5 concurrent, 0.2s delay by default)
- New optional dependency extra:
pip install gnosis-mcp[web](httpx + trafilatura) - Crawl cache at
~/.local/share/gnosis-mcp/crawl-cache.json - Crawled pages stored with URL as
file_path, hostname ascategory
[0.7.13] - 2026-02-20
Fixed
- PostgreSQL multi-word search now uses OR (was AND) — parity with SQLite v0.7.9 fix
- Added
content_hashcolumn to PostgreSQL DDL for new installations
Added
- E2E comparison test script for SQLite vs PostgreSQL backend parity
- 21 new unit tests:
ingest_path,diff_path, links, highlights, config defaults, PG OR query - Test suite now at 300+ tests
[0.7.12] - 2026-02-20
Added
- Optional RST support:
pip install gnosis-mcp[rst](docutils) - Optional PDF support:
pip install gnosis-mcp[pdf](pypdf) - Combined
[formats]extra:pip install gnosis-mcp[formats] - Dynamic extension detection:
.rstand.pdfauto-enabled when deps installed
[0.7.11] - 2026-02-20
Added
- GitHub Releases: CI now creates GitHub releases with auto-generated notes
- Ingest progress:
[1/N]counter in log output during file ingestion
[0.7.10] - 2026-02-20
Added
- CSV export format:
gnosis-mcp export -f csv gnosis-mcp diffcommand: show new/modified/deleted files vs database state
[0.7.9] - 2026-02-20
Changed
- FTS5 multi-word search now uses OR instead of implicit AND for broader matching
- BM25 ranking still puts multi-match results first
[0.7.8] - 2026-02-20
Fixed
GNOSIS_MCP_CHUNK_SIZEenv var now passed tochunk_by_headings()(was parsed but ignored)
Added
--forceflag forgnosis-mcp ingestto re-ingest unchanged files
[0.7.7] - 2026-02-20
Changed
- Replaced
huggingface-hubdependency with stdliburllib.request(~60 lines) - Fixed CI release pipeline: combined auto-tag + publish into single
publish.yml
Removed
huggingface-hubfrom[embeddings]extra (5 → 4 optional deps)
[0.7.6] - 2026-02-20
Added
- Multi-format ingestion:
.txt,.ipynb,.toml,.csv,.json(stdlib only, zero extra deps) - Each format auto-converted to markdown for chunking
[0.7.5] - 2026-02-20
Added
- Streamable HTTP transport (
--transport streamable-http) GNOSIS_MCP_HOSTandGNOSIS_MCP_PORTenv vars--hostand--portCLI flags forservecommand
[0.7.4] - 2026-02-20
Changed
- Smart recursive chunking: splits by H2 → H3 → H4 → paragraphs
- Never splits inside fenced code blocks or tables
[0.7.3] - 2026-02-20
Added
- Frontmatter
relates_tolink extraction (comma-separated and YAML list) - Links stored in
documentation_linkstable, queryable viaget_related
[0.7.2] - 2026-02-20
Added
- Search result highlighting:
<mark>tags in FTS5 snippets (SQLite),ts_headline(PostgreSQL)
[0.7.1] - 2026-02-20
Added
- File watcher:
--watchflag forgnosis-mcp serveauto-re-ingests on file changes - Auto-embed on file change when local provider configured
[0.7.0] - 2026-02-19
Added
- Local ONNX embeddings via
[embeddings]extra (onnxruntime + tokenizers + numpy) - sqlite-vec hybrid search with Reciprocal Rank Fusion (RRF)
gnosis-mcp embedCLI command for batch embedding backfill--embedflag oningestandsearchcommands- Auto-embed queries when local provider configured (MCP server)
[0.6.3] - 2026-02-18
Added
- VS Code Copilot and JetBrains editor setup docs
[0.6.2] - 2026-02-18
Added
- MCP Registry badge and automated registry publish in CI
[0.6.1] - 2026-02-18
Added
- MCP Registry verification tag and
server.json
[0.6.0] - 2026-02-17
Added
- SQLite as zero-config default backend (no PostgreSQL required)
- FTS5 full-text search with porter stemmer
- XDG-compliant default path (
~/.local/share/gnosis-mcp/docs.db) gnosis-mcp checkcommand for health verification
[0.5.0] - 2026-02-16
Added
- Embedding support: openai, ollama, custom providers
- Hybrid search (keyword + cosine similarity) on PostgreSQL
- Demo GIF in README
[0.4.0] - 2026-02-15
Changed
- Rebranded from stele-mcp to gnosis-mcp
- Published to PyPI
- Added configurable tuning knobs via env vars
[0.3.0] - 2026-02-14
Added
- Structured logging
get_docmax_length parameter- Safer frontmatter parsing
[0.2.0] - 2026-02-13
Added
- Resources (
gnosis://docs,gnosis://categories) - Write tools (upsert, delete, update_metadata)
- Multi-table support (PostgreSQL)
- Webhook notifications
[0.1.0] - 2026-02-12
Added
- Initial release: PostgreSQL backend, search_docs tool, ingest command