chunksilo 2.3.4__tar.gz → 3.0.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. chunksilo-3.0.0/PKG-INFO +174 -0
  2. chunksilo-3.0.0/README.md +132 -0
  3. {chunksilo-2.3.4 → chunksilo-3.0.0}/pyproject.toml +6 -3
  4. {chunksilo-2.3.4 → chunksilo-3.0.0}/requirements.txt +3 -1
  5. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo/__init__.py +1 -1
  6. chunksilo-3.0.0/src/chunksilo/cfgload.py +350 -0
  7. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo/cli.py +37 -3
  8. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo/docx_utils.py +46 -12
  9. chunksilo-3.0.0/src/chunksilo/filecheck.py +461 -0
  10. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo/index.py +579 -172
  11. chunksilo-3.0.0/src/chunksilo/revisions.py +233 -0
  12. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo/search.py +352 -95
  13. chunksilo-3.0.0/src/chunksilo/server.py +308 -0
  14. chunksilo-3.0.0/src/chunksilo/shareuri.py +109 -0
  15. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo/ui.py +1 -3
  16. chunksilo-3.0.0/src/chunksilo.egg-info/PKG-INFO +174 -0
  17. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo.egg-info/SOURCES.txt +11 -0
  18. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo.egg-info/requires.txt +3 -3
  19. chunksilo-3.0.0/test/test_cfgload.py +129 -0
  20. chunksilo-3.0.0/test/test_check_files.py +558 -0
  21. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_chunk_location.py +116 -30
  22. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_docx_utils.py +88 -10
  23. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_error_handling.py +16 -0
  24. chunksilo-3.0.0/test/test_incremental_ingest.py +399 -0
  25. chunksilo-3.0.0/test/test_never_mutates.py +154 -0
  26. chunksilo-3.0.0/test/test_revision_indexing.py +294 -0
  27. chunksilo-3.0.0/test/test_revisions.py +277 -0
  28. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_scan_timeouts.py +7 -5
  29. chunksilo-3.0.0/test/test_search_concurrency.py +169 -0
  30. chunksilo-3.0.0/test/test_search_diversity.py +296 -0
  31. chunksilo-3.0.0/test/test_server.py +348 -0
  32. chunksilo-3.0.0/test/test_share_uri.py +132 -0
  33. chunksilo-2.3.4/PKG-INFO +0 -430
  34. chunksilo-2.3.4/README.md +0 -388
  35. chunksilo-2.3.4/src/chunksilo/cfgload.py +0 -241
  36. chunksilo-2.3.4/src/chunksilo/server.py +0 -110
  37. chunksilo-2.3.4/src/chunksilo.egg-info/PKG-INFO +0 -430
  38. chunksilo-2.3.4/test/test_incremental_ingest.py +0 -128
  39. chunksilo-2.3.4/test/test_server.py +0 -107
  40. {chunksilo-2.3.4 → chunksilo-3.0.0}/LICENSE +0 -0
  41. {chunksilo-2.3.4 → chunksilo-3.0.0}/NOTICE +0 -0
  42. {chunksilo-2.3.4 → chunksilo-3.0.0}/setup.cfg +0 -0
  43. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo/__main__.py +0 -0
  44. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo/confluence_html_formatter.py +0 -0
  45. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo/models.py +0 -0
  46. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo.egg-info/dependency_links.txt +0 -0
  47. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo.egg-info/entry_points.txt +0 -0
  48. {chunksilo-2.3.4 → chunksilo-3.0.0}/src/chunksilo.egg-info/top_level.txt +0 -0
  49. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_cli.py +0 -0
  50. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_confluence_html_formatter.py +0 -0
  51. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_heading_path_integration.py +0 -0
  52. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_indexing_benchmark.py +0 -0
  53. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_indexing_ui.py +0 -0
  54. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_jira_integration.py +0 -0
  55. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_quoted_phrases.py +0 -0
  56. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_rag_metrics.py +0 -0
  57. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_retrieval_only.py +0 -0
  58. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_system.py +0 -0
  59. {chunksilo-2.3.4 → chunksilo-3.0.0}/test/test_utils.py +0 -0
@@ -0,0 +1,174 @@
1
+ Metadata-Version: 2.4
2
+ Name: chunksilo
3
+ Version: 3.0.0
4
+ Summary: Local RAG-based semantic document search with MCP server interface
5
+ Author: Fredrik Reveny
6
+ License-Expression: Apache-2.0
7
+ Project-URL: Repository, https://github.com/Chetic/chunksilo
8
+ Project-URL: Issues, https://github.com/Chetic/chunksilo/issues
9
+ Keywords: rag,mcp,semantic-search,document-search,llm
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Programming Language :: Python :: 3
12
+ Classifier: Programming Language :: Python :: 3.11
13
+ Classifier: Programming Language :: Python :: 3.12
14
+ Classifier: Programming Language :: Python :: 3.13
15
+ Classifier: Topic :: Text Processing :: Indexing
16
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
17
+ Requires-Python: >=3.11
18
+ Description-Content-Type: text/markdown
19
+ License-File: LICENSE
20
+ License-File: NOTICE
21
+ Requires-Dist: llama-index<1,>=0.10.0
22
+ Requires-Dist: llama-index-readers-file<1,>=0.1.0
23
+ Requires-Dist: llama-index-embeddings-fastembed<1,>=0.5.0
24
+ Requires-Dist: llama-index-retrievers-bm25<1,>=0.1.0
25
+ Requires-Dist: pillow<11,>=10.3.0
26
+ Requires-Dist: pypdf<7,>=5.1.0
27
+ Requires-Dist: python-docx<2,>=1.1.0
28
+ Requires-Dist: mcp<2,>=1.10.0
29
+ Requires-Dist: huggingface-hub<2,>=0.22.0
30
+ Requires-Dist: flashrank<1,>=0.1.0
31
+ Requires-Dist: fastembed<1,>=0.5.0
32
+ Requires-Dist: pyyaml<7,>=6.0
33
+ Requires-Dist: llama-index-readers-confluence<1,>=0.6.0
34
+ Requires-Dist: jira<4,>=3.5.0
35
+ Provides-Extra: confluence
36
+ Provides-Extra: jira
37
+ Provides-Extra: test
38
+ Requires-Dist: pytest<9,>=7.4.0; extra == "test"
39
+ Requires-Dist: pytest-cov>=4.0; extra == "test"
40
+ Requires-Dist: requests<3,>=2.31.0; extra == "test"
41
+ Dynamic: license-file
42
+
43
+ <p align="center">
44
+ <img src="https://raw.githubusercontent.com/Chetic/chunksilo/main/chunksilo.png" alt="ChunkSilo Logo" width="500">
45
+ </p>
46
+
47
+ <p align="center">
48
+ <img src="demo/demo.gif" alt="ChunkSilo terminal demo" width="720">
49
+ </p>
50
+
51
+ # ChunkSilo MCP Server
52
+
53
+ ChunkSilo is like a local Google for your documents. It uses semantic search — matching by meaning rather than exact keywords — so your LLM can find relevant information across all your files even when the wording differs from your query. Point it at your PDFs, Word docs, Markdown, and text files, and it builds a fully searchable index locally on your machine.
54
+
55
+ - Runs entirely on your machine — no servers, no infrastructure
56
+ - Semantic search + keyword filename matching across PDF, DOCX, DOC, Markdown, and TXT
57
+ - Incremental indexing — only reprocesses new or changed files, and never writes inside an indexed directory
58
+ - Revision-aware indexing — files that are revisions of one document (`Spec_v2.pdf`, `.../Rev B/Spec.docx`) are grouped and only the newest is indexed; review-comment copies are skipped
59
+ - Heading-aware results with source links back to the original file, spread across documents instead of one document's every chunk
60
+ - Date filtering and recency boosting
61
+ - Files indexed from a mounted network share can be presented at the share's own location (an `smb://` URI plus the Windows UNC path)
62
+ - Serves MCP over stdio to a local client, or over streamable-http behind a reverse proxy of your own (oauth2-proxy + KeyCloak walkthrough included)
63
+ - Optional Confluence and Jira integrations (supports Cloud and Server/Data Center)
64
+
65
+ ## Installation
66
+
67
+ ### Option A: Install from PyPI (Recommended)
68
+
69
+ Requires Python 3.11 or later. Models are downloaded automatically on first run (~250MB). The first run may appear to pause while models download — this is normal.
70
+
71
+ ```bash
72
+ pip install chunksilo
73
+ ```
74
+
75
+ Confluence and Jira support is included by default — just provide a config file
76
+ to enable them. (`pip install chunksilo[confluence,jira]` still works as an alias
77
+ for backward compatibility.)
78
+
79
+ Then:
80
+ 1. **Create** a config file at `~/.config/chunksilo/config.yaml` (see [Configuration](#configuration))
81
+ 2. **Build** the index: `chunksilo --build-index`
82
+ 3. **Configure** your MCP client (see [docs/mcp-clients.md](docs/mcp-clients.md))
83
+
84
+ ### Option B: Offline Bundle
85
+
86
+ A self-contained package with pre-downloaded models, ideal for air-gapped environments or systems without Python installed.
87
+
88
+ Download from the [Releases page](https://github.com/Chetic/chunksilo/releases):
89
+
90
+ 1. **Download** the `chunksilo-vX.Y.Z-manylinux_2_34_x86_64.tar.gz` file
91
+ 2. **Extract** and install:
92
+
93
+ ```bash
94
+ tar -xzf chunksilo-vX.Y.Z-manylinux_2_34_x86_64.tar.gz
95
+ cd chunksilo
96
+ ./setup.sh
97
+ ```
98
+
99
+ 3. **Edit** `config.yaml` to set your document directories
100
+ 4. **Build** the index: `./venv/bin/chunksilo --build-index`
101
+ 5. **Configure** your MCP client (see [docs/mcp-clients.md](docs/mcp-clients.md))
102
+
103
+ ## Configuration
104
+
105
+ ChunkSilo reads one file, `config.yaml`, taken from `--config`, else the
106
+ `CHUNKSILO_CONFIG` environment variable, else `./config.yaml`, else
107
+ `~/.config/chunksilo/config.yaml`. Every setting is optional and
108
+ `chunksilo --dump-defaults` prints them all with their defaults.
109
+
110
+ ```yaml
111
+ indexing:
112
+ directories:
113
+ - "./data"
114
+ - "/mnt/docs"
115
+
116
+ retrieval:
117
+ rerank_top_k: 5
118
+
119
+ storage:
120
+ storage_dir: "./storage"
121
+ model_cache_dir: "./models"
122
+ ```
123
+
124
+ The full reference — per-directory filters, revision handling, retrieval
125
+ tuning, Confluence and Jira, share locations, the HTTP transport, and what
126
+ changed for users upgrading from 2.x — is in
127
+ [docs/configuration.md](docs/configuration.md).
128
+
129
+ ## The `search_docs` tool
130
+
131
+ `search_docs` answers with the files whose names matched and the individual
132
+ chunks that carry the answer, each located by a URI, the page or line it came
133
+ from, and its heading path:
134
+
135
+ ```json
136
+ {
137
+ "matched_files": [
138
+ { "uri": "file:///docs/database-configuration.docx", "unc": null, "score": 0.8432 }
139
+ ],
140
+ "num_matched_files": 1,
141
+ "chunks": [
142
+ {
143
+ "text": "To configure the database connection, set the DATABASE_URL environment variable...",
144
+ "score": 0.912,
145
+ "location": {
146
+ "uri": "file:///docs/setup-guide.pdf",
147
+ "unc": null,
148
+ "page": 12,
149
+ "line": null,
150
+ "heading_path": ["Getting Started", "Configuration", "Database"]
151
+ }
152
+ }
153
+ ],
154
+ "num_chunks": 1,
155
+ "query": "how to configure the database",
156
+ "retrieval_time": "0.42s"
157
+ }
158
+ ```
159
+
160
+ See [docs/tools.md](docs/tools.md) for every field, including how files on a
161
+ mounted network share are presented.
162
+
163
+ ## Documentation
164
+
165
+ - [docs/configuration.md](docs/configuration.md) — the config file, where it is discovered, and a reference for every setting.
166
+ - [docs/cli.md](docs/cli.md) — `chunksilo` and `chunksilo-mcp` options, including `--check-files` for explaining why a file is or is not indexed.
167
+ - [docs/tools.md](docs/tools.md) — the `search_docs` result shape.
168
+ - [docs/mcp-clients.md](docs/mcp-clients.md) — client setup for Claude Code, Claude Desktop, Cline, Roo Code and opencode, over stdio or HTTP.
169
+ - [docs/reverse-proxy.md](docs/reverse-proxy.md) — sharing an instance behind an authenticating reverse proxy, with oauth2-proxy and KeyCloak group-based access.
170
+ - [docs/troubleshooting.md](docs/troubleshooting.md) — indexing surprises, network mounts, offline mode and more.
171
+
172
+ ## License
173
+
174
+ Apache-2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE).
@@ -0,0 +1,132 @@
1
+ <p align="center">
2
+ <img src="https://raw.githubusercontent.com/Chetic/chunksilo/main/chunksilo.png" alt="ChunkSilo Logo" width="500">
3
+ </p>
4
+
5
+ <p align="center">
6
+ <img src="demo/demo.gif" alt="ChunkSilo terminal demo" width="720">
7
+ </p>
8
+
9
+ # ChunkSilo MCP Server
10
+
11
+ ChunkSilo is like a local Google for your documents. It uses semantic search — matching by meaning rather than exact keywords — so your LLM can find relevant information across all your files even when the wording differs from your query. Point it at your PDFs, Word docs, Markdown, and text files, and it builds a fully searchable index locally on your machine.
12
+
13
+ - Runs entirely on your machine — no servers, no infrastructure
14
+ - Semantic search + keyword filename matching across PDF, DOCX, DOC, Markdown, and TXT
15
+ - Incremental indexing — only reprocesses new or changed files, and never writes inside an indexed directory
16
+ - Revision-aware indexing — files that are revisions of one document (`Spec_v2.pdf`, `.../Rev B/Spec.docx`) are grouped and only the newest is indexed; review-comment copies are skipped
17
+ - Heading-aware results with source links back to the original file, spread across documents instead of one document's every chunk
18
+ - Date filtering and recency boosting
19
+ - Files indexed from a mounted network share can be presented at the share's own location (an `smb://` URI plus the Windows UNC path)
20
+ - Serves MCP over stdio to a local client, or over streamable-http behind a reverse proxy of your own (oauth2-proxy + KeyCloak walkthrough included)
21
+ - Optional Confluence and Jira integrations (supports Cloud and Server/Data Center)
22
+
23
+ ## Installation
24
+
25
+ ### Option A: Install from PyPI (Recommended)
26
+
27
+ Requires Python 3.11 or later. Models are downloaded automatically on first run (~250MB). The first run may appear to pause while models download — this is normal.
28
+
29
+ ```bash
30
+ pip install chunksilo
31
+ ```
32
+
33
+ Confluence and Jira support is included by default — just provide a config file
34
+ to enable them. (`pip install chunksilo[confluence,jira]` still works as an alias
35
+ for backward compatibility.)
36
+
37
+ Then:
38
+ 1. **Create** a config file at `~/.config/chunksilo/config.yaml` (see [Configuration](#configuration))
39
+ 2. **Build** the index: `chunksilo --build-index`
40
+ 3. **Configure** your MCP client (see [docs/mcp-clients.md](docs/mcp-clients.md))
41
+
42
+ ### Option B: Offline Bundle
43
+
44
+ A self-contained package with pre-downloaded models, ideal for air-gapped environments or systems without Python installed.
45
+
46
+ Download from the [Releases page](https://github.com/Chetic/chunksilo/releases):
47
+
48
+ 1. **Download** the `chunksilo-vX.Y.Z-manylinux_2_34_x86_64.tar.gz` file
49
+ 2. **Extract** and install:
50
+
51
+ ```bash
52
+ tar -xzf chunksilo-vX.Y.Z-manylinux_2_34_x86_64.tar.gz
53
+ cd chunksilo
54
+ ./setup.sh
55
+ ```
56
+
57
+ 3. **Edit** `config.yaml` to set your document directories
58
+ 4. **Build** the index: `./venv/bin/chunksilo --build-index`
59
+ 5. **Configure** your MCP client (see [docs/mcp-clients.md](docs/mcp-clients.md))
60
+
61
+ ## Configuration
62
+
63
+ ChunkSilo reads one file, `config.yaml`, taken from `--config`, else the
64
+ `CHUNKSILO_CONFIG` environment variable, else `./config.yaml`, else
65
+ `~/.config/chunksilo/config.yaml`. Every setting is optional and
66
+ `chunksilo --dump-defaults` prints them all with their defaults.
67
+
68
+ ```yaml
69
+ indexing:
70
+ directories:
71
+ - "./data"
72
+ - "/mnt/docs"
73
+
74
+ retrieval:
75
+ rerank_top_k: 5
76
+
77
+ storage:
78
+ storage_dir: "./storage"
79
+ model_cache_dir: "./models"
80
+ ```
81
+
82
+ The full reference — per-directory filters, revision handling, retrieval
83
+ tuning, Confluence and Jira, share locations, the HTTP transport, and what
84
+ changed for users upgrading from 2.x — is in
85
+ [docs/configuration.md](docs/configuration.md).
86
+
87
+ ## The `search_docs` tool
88
+
89
+ `search_docs` answers with the files whose names matched and the individual
90
+ chunks that carry the answer, each located by a URI, the page or line it came
91
+ from, and its heading path:
92
+
93
+ ```json
94
+ {
95
+ "matched_files": [
96
+ { "uri": "file:///docs/database-configuration.docx", "unc": null, "score": 0.8432 }
97
+ ],
98
+ "num_matched_files": 1,
99
+ "chunks": [
100
+ {
101
+ "text": "To configure the database connection, set the DATABASE_URL environment variable...",
102
+ "score": 0.912,
103
+ "location": {
104
+ "uri": "file:///docs/setup-guide.pdf",
105
+ "unc": null,
106
+ "page": 12,
107
+ "line": null,
108
+ "heading_path": ["Getting Started", "Configuration", "Database"]
109
+ }
110
+ }
111
+ ],
112
+ "num_chunks": 1,
113
+ "query": "how to configure the database",
114
+ "retrieval_time": "0.42s"
115
+ }
116
+ ```
117
+
118
+ See [docs/tools.md](docs/tools.md) for every field, including how files on a
119
+ mounted network share are presented.
120
+
121
+ ## Documentation
122
+
123
+ - [docs/configuration.md](docs/configuration.md) — the config file, where it is discovered, and a reference for every setting.
124
+ - [docs/cli.md](docs/cli.md) — `chunksilo` and `chunksilo-mcp` options, including `--check-files` for explaining why a file is or is not indexed.
125
+ - [docs/tools.md](docs/tools.md) — the `search_docs` result shape.
126
+ - [docs/mcp-clients.md](docs/mcp-clients.md) — client setup for Claude Code, Claude Desktop, Cline, Roo Code and opencode, over stdio or HTTP.
127
+ - [docs/reverse-proxy.md](docs/reverse-proxy.md) — sharing an instance behind an authenticating reverse proxy, with oauth2-proxy and KeyCloak group-based access.
128
+ - [docs/troubleshooting.md](docs/troubleshooting.md) — indexing surprises, network mounts, offline mode and more.
129
+
130
+ ## License
131
+
132
+ Apache-2.0. See [LICENSE](LICENSE) and [NOTICE](NOTICE).
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "chunksilo"
7
- version = "2.3.4"
7
+ version = "3.0.0"
8
8
  description = "Local RAG-based semantic document search with MCP server interface"
9
9
  license = "Apache-2.0"
10
10
  requires-python = ">=3.11"
@@ -25,8 +25,11 @@ classifiers = [
25
25
  dynamic = ["dependencies"]
26
26
 
27
27
  [project.optional-dependencies]
28
- confluence = ["llama-index-readers-confluence>=0.6.0,<1"]
29
- jira = ["jira>=3.5.0,<4"]
28
+ # Confluence and Jira support is now installed by default (see requirements.txt).
29
+ # These extras are kept as empty aliases so existing `pip install chunksilo[confluence,jira]`
30
+ # commands keep working without a warning.
31
+ confluence = []
32
+ jira = []
30
33
  test = ["pytest>=7.4.0,<9", "pytest-cov>=4.0", "requests>=2.31.0,<3"]
31
34
 
32
35
  [project.scripts]
@@ -5,8 +5,10 @@ llama-index-retrievers-bm25>=0.1.0,<1
5
5
  pillow>=10.3.0,<11
6
6
  pypdf>=5.1.0,<7
7
7
  python-docx>=1.1.0,<2
8
- mcp>=1.0.0,<2
8
+ mcp>=1.10.0,<2
9
9
  huggingface-hub>=0.22.0,<2
10
10
  flashrank>=0.1.0,<1
11
11
  fastembed>=0.5.0,<1
12
12
  pyyaml>=6.0,<7
13
+ llama-index-readers-confluence>=0.6.0,<1
14
+ jira>=3.5.0,<4
@@ -1,4 +1,4 @@
1
1
  # SPDX-License-Identifier: Apache-2.0
2
2
  """ChunkSilo - Local RAG-based semantic document search."""
3
3
 
4
- __version__ = "2.3.4"
4
+ __version__ = "3.0.0"