docharvest 11.3.1__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 (185) hide show
  1. docharvest-11.3.1/LICENSE +21 -0
  2. docharvest-11.3.1/PKG-INFO +655 -0
  3. docharvest-11.3.1/README.md +605 -0
  4. docharvest-11.3.1/pyproject.toml +100 -0
  5. docharvest-11.3.1/setup.cfg +4 -0
  6. docharvest-11.3.1/src/docharvest/__init__.py +27 -0
  7. docharvest-11.3.1/src/docharvest/__main__.py +5 -0
  8. docharvest-11.3.1/src/docharvest/api.py +646 -0
  9. docharvest-11.3.1/src/docharvest/benchmark.py +163 -0
  10. docharvest-11.3.1/src/docharvest/brand_tokens.py +93 -0
  11. docharvest-11.3.1/src/docharvest/cli.py +845 -0
  12. docharvest-11.3.1/src/docharvest/engine.py +686 -0
  13. docharvest-11.3.1/src/docharvest/gui/__init__.py +9 -0
  14. docharvest-11.3.1/src/docharvest/gui/app.py +94 -0
  15. docharvest-11.3.1/src/docharvest/gui/bridge.py +849 -0
  16. docharvest-11.3.1/src/docharvest/gui/server.py +429 -0
  17. docharvest-11.3.1/src/docharvest/gui/web/assets/abnfDiagram-VCTEODGH-Bqs6pOf5.js +1 -0
  18. docharvest-11.3.1/src/docharvest/gui/web/assets/architectureDiagram-5GKGNRK7-BDlL3qWy.js +36 -0
  19. docharvest-11.3.1/src/docharvest/gui/web/assets/archivo-latin-ext-wght-normal-C4zznr8T.woff2 +0 -0
  20. docharvest-11.3.1/src/docharvest/gui/web/assets/archivo-latin-wght-normal-E0tuGl4L.woff2 +0 -0
  21. docharvest-11.3.1/src/docharvest/gui/web/assets/archivo-vietnamese-wght-normal-XAtsl5Q_.woff2 +0 -0
  22. docharvest-11.3.1/src/docharvest/gui/web/assets/blockDiagram-I7D4REHJ-DJw_1XjG.js +129 -0
  23. docharvest-11.3.1/src/docharvest/gui/web/assets/c4Diagram-7LVT6UL2-CcTweByc.js +38 -0
  24. docharvest-11.3.1/src/docharvest/gui/web/assets/classDiagram-ZZMXUADV-C7QYWN8n.js +1 -0
  25. docharvest-11.3.1/src/docharvest/gui/web/assets/classDiagram-v2-VYDZK3BY-C7QYWN8n.js +1 -0
  26. docharvest-11.3.1/src/docharvest/gui/web/assets/cynefinDiagram-5FMLGOSQ-Dz_-0qIr.js +62 -0
  27. docharvest-11.3.1/src/docharvest/gui/web/assets/ebnfDiagram-PWID7BFC-t6iMotuy.js +1 -0
  28. docharvest-11.3.1/src/docharvest/gui/web/assets/erDiagram-RLTQ6QDP-Drk1Xin2.js +99 -0
  29. docharvest-11.3.1/src/docharvest/gui/web/assets/ganttDiagram-EL5Y4UJY-BDX4z60x.js +292 -0
  30. docharvest-11.3.1/src/docharvest/gui/web/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2 +0 -0
  31. docharvest-11.3.1/src/docharvest/gui/web/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2 +0 -0
  32. docharvest-11.3.1/src/docharvest/gui/web/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2 +0 -0
  33. docharvest-11.3.1/src/docharvest/gui/web/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  34. docharvest-11.3.1/src/docharvest/gui/web/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2 +0 -0
  35. docharvest-11.3.1/src/docharvest/gui/web/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2 +0 -0
  36. docharvest-11.3.1/src/docharvest/gui/web/assets/gitGraphDiagram-WWUBYQGX-CZbPymnu.js +106 -0
  37. docharvest-11.3.1/src/docharvest/gui/web/assets/index-CS6CVteH.js +49 -0
  38. docharvest-11.3.1/src/docharvest/gui/web/assets/index-Cl4OLWTP.css +1 -0
  39. docharvest-11.3.1/src/docharvest/gui/web/assets/infoDiagram-27XIBGKW-BE7EBA6S.js +2 -0
  40. docharvest-11.3.1/src/docharvest/gui/web/assets/ishikawaDiagram-5VMMS53U-D30J8rTT.js +70 -0
  41. docharvest-11.3.1/src/docharvest/gui/web/assets/journeyDiagram-3NMN7TZE-DZlC27Co.js +139 -0
  42. docharvest-11.3.1/src/docharvest/gui/web/assets/kanban-definition-UXKFOSKX-DtgHliyS.js +89 -0
  43. docharvest-11.3.1/src/docharvest/gui/web/assets/mindmap-definition-YA3MSWOX-CI2LYYpK.js +96 -0
  44. docharvest-11.3.1/src/docharvest/gui/web/assets/pegDiagram-XKGWAZYB-Dd3dC22C.js +1 -0
  45. docharvest-11.3.1/src/docharvest/gui/web/assets/pieDiagram-E7YTZNPT-Ca-uN4WE.js +39 -0
  46. docharvest-11.3.1/src/docharvest/gui/web/assets/quadrantDiagram-AXDQQJYC-BfnqsMT1.js +7 -0
  47. docharvest-11.3.1/src/docharvest/gui/web/assets/railroadDiagram-O6MQD6OU-DetTaGUi.js +1 -0
  48. docharvest-11.3.1/src/docharvest/gui/web/assets/requirementDiagram-BXWQKSXE-CtodC4Ud.js +84 -0
  49. docharvest-11.3.1/src/docharvest/gui/web/assets/sankeyDiagram-P5KCCOFB-B9hxxnRL.js +40 -0
  50. docharvest-11.3.1/src/docharvest/gui/web/assets/sequenceDiagram-WJ2MYXX4-DdMUlS4G.js +162 -0
  51. docharvest-11.3.1/src/docharvest/gui/web/assets/stateDiagram-D77RDMKH-DZ8Q4IYW.js +1 -0
  52. docharvest-11.3.1/src/docharvest/gui/web/assets/stateDiagram-v2-MP3YSRHH-D0mkGssO.js +1 -0
  53. docharvest-11.3.1/src/docharvest/gui/web/assets/swimlanesDiagram-VR7AAH4N-C3fzcCh5.js +8 -0
  54. docharvest-11.3.1/src/docharvest/gui/web/assets/timeline-definition-24CTP7MA-B3UCKKDG.js +120 -0
  55. docharvest-11.3.1/src/docharvest/gui/web/assets/vendor-cytoscape-JY3pnI7i.js +331 -0
  56. docharvest-11.3.1/src/docharvest/gui/web/assets/vendor-d3-qm7pkI8x.js +1 -0
  57. docharvest-11.3.1/src/docharvest/gui/web/assets/vendor-icons-BPGUGpu5.js +331 -0
  58. docharvest-11.3.1/src/docharvest/gui/web/assets/vendor-katex-C5jXJg4s.js +257 -0
  59. docharvest-11.3.1/src/docharvest/gui/web/assets/vendor-mermaid-BBxeK1km.js +1312 -0
  60. docharvest-11.3.1/src/docharvest/gui/web/assets/vendor-radix-MN2F8k9H.js +46 -0
  61. docharvest-11.3.1/src/docharvest/gui/web/assets/vendor-react-CMN8Sm0c.js +40 -0
  62. docharvest-11.3.1/src/docharvest/gui/web/assets/vennDiagram-4TSXK5OY-C29ZpHjz.js +34 -0
  63. docharvest-11.3.1/src/docharvest/gui/web/assets/wardleyDiagram-VM6X3IG4-CadUFzGy.js +78 -0
  64. docharvest-11.3.1/src/docharvest/gui/web/assets/xychartDiagram-S5SC5T6Z-BqAFABfd.js +7 -0
  65. docharvest-11.3.1/src/docharvest/gui/web/index.html +31 -0
  66. docharvest-11.3.1/src/docharvest/installers.py +273 -0
  67. docharvest-11.3.1/src/docharvest/mcp/__init__.py +5 -0
  68. docharvest-11.3.1/src/docharvest/mcp/__main__.py +6 -0
  69. docharvest-11.3.1/src/docharvest/mcp/server.py +826 -0
  70. docharvest-11.3.1/src/docharvest/output_contract.py +422 -0
  71. docharvest-11.3.1/src/docharvest/paths.py +196 -0
  72. docharvest-11.3.1/src/docharvest/providers/__init__.py +91 -0
  73. docharvest-11.3.1/src/docharvest/providers/base.py +274 -0
  74. docharvest-11.3.1/src/docharvest/providers/docusaurus.py +164 -0
  75. docharvest-11.3.1/src/docharvest/providers/generic.py +150 -0
  76. docharvest-11.3.1/src/docharvest/providers/gitbook.py +189 -0
  77. docharvest-11.3.1/src/docharvest/providers/mintlify.py +177 -0
  78. docharvest-11.3.1/src/docharvest/providers/mkdocs.py +215 -0
  79. docharvest-11.3.1/src/docharvest/providers/nextra.py +188 -0
  80. docharvest-11.3.1/src/docharvest/providers/readme.py +197 -0
  81. docharvest-11.3.1/src/docharvest/providers/readthedocs.py +173 -0
  82. docharvest-11.3.1/src/docharvest/providers/vitepress.py +190 -0
  83. docharvest-11.3.1/src/docharvest/py.typed +0 -0
  84. docharvest-11.3.1/src/docharvest/search/__init__.py +6 -0
  85. docharvest-11.3.1/src/docharvest/search/graph.py +244 -0
  86. docharvest-11.3.1/src/docharvest/search/index.py +562 -0
  87. docharvest-11.3.1/src/docharvest/skills/__init__.py +93 -0
  88. docharvest-11.3.1/src/docharvest/skills/docharvest/SKILL.md +63 -0
  89. docharvest-11.3.1/src/docharvest/splitter.py +180 -0
  90. docharvest-11.3.1/src/docharvest/storage/__init__.py +6 -0
  91. docharvest-11.3.1/src/docharvest/storage/manager.py +814 -0
  92. docharvest-11.3.1/src/docharvest/storage/versioning.py +398 -0
  93. docharvest-11.3.1/src/docharvest/tool_profiles.py +54 -0
  94. docharvest-11.3.1/src/docharvest/tui/__init__.py +17 -0
  95. docharvest-11.3.1/src/docharvest/tui/__main__.py +6 -0
  96. docharvest-11.3.1/src/docharvest/tui/app.py +225 -0
  97. docharvest-11.3.1/src/docharvest/tui/engine_protocol.py +209 -0
  98. docharvest-11.3.1/src/docharvest/tui/real_engine.py +274 -0
  99. docharvest-11.3.1/src/docharvest/tui/screens/__init__.py +15 -0
  100. docharvest-11.3.1/src/docharvest/tui/screens/diagnostics.py +179 -0
  101. docharvest-11.3.1/src/docharvest/tui/screens/diff.py +204 -0
  102. docharvest-11.3.1/src/docharvest/tui/screens/library.py +202 -0
  103. docharvest-11.3.1/src/docharvest/tui/screens/search.py +183 -0
  104. docharvest-11.3.1/src/docharvest/tui/screens/wizard.py +553 -0
  105. docharvest-11.3.1/src/docharvest/tui/styles.tcss +257 -0
  106. docharvest-11.3.1/src/docharvest/tui/testing.py +255 -0
  107. docharvest-11.3.1/src/docharvest/tui/theme.py +182 -0
  108. docharvest-11.3.1/src/docharvest/tui/widgets.py +220 -0
  109. docharvest-11.3.1/src/docharvest/utils/__init__.py +13 -0
  110. docharvest-11.3.1/src/docharvest/utils/config.py +350 -0
  111. docharvest-11.3.1/src/docharvest/utils/discovery.py +298 -0
  112. docharvest-11.3.1/src/docharvest/utils/export.py +326 -0
  113. docharvest-11.3.1/src/docharvest/utils/renderer.py +95 -0
  114. docharvest-11.3.1/src/docharvest/utils/retry.py +100 -0
  115. docharvest-11.3.1/src/docharvest.egg-info/PKG-INFO +655 -0
  116. docharvest-11.3.1/src/docharvest.egg-info/SOURCES.txt +183 -0
  117. docharvest-11.3.1/src/docharvest.egg-info/dependency_links.txt +1 -0
  118. docharvest-11.3.1/src/docharvest.egg-info/entry_points.txt +3 -0
  119. docharvest-11.3.1/src/docharvest.egg-info/requires.txt +24 -0
  120. docharvest-11.3.1/src/docharvest.egg-info/top_level.txt +1 -0
  121. docharvest-11.3.1/tests/test_animation_contract.py +79 -0
  122. docharvest-11.3.1/tests/test_batch_run_button.py +51 -0
  123. docharvest-11.3.1/tests/test_benchmark.py +45 -0
  124. docharvest-11.3.1/tests/test_brand_assets.py +270 -0
  125. docharvest-11.3.1/tests/test_brand_tokens.py +387 -0
  126. docharvest-11.3.1/tests/test_bridge_contract.py +110 -0
  127. docharvest-11.3.1/tests/test_bridge_dead_alias.py +49 -0
  128. docharvest-11.3.1/tests/test_bridge_thread_safety.py +133 -0
  129. docharvest-11.3.1/tests/test_cli_banner.py +89 -0
  130. docharvest-11.3.1/tests/test_cli_init.py +37 -0
  131. docharvest-11.3.1/tests/test_cli_rag.py +170 -0
  132. docharvest-11.3.1/tests/test_cli_rag_pdf_paths.py +61 -0
  133. docharvest-11.3.1/tests/test_command_menu_shortcuts.py +51 -0
  134. docharvest-11.3.1/tests/test_diff_view_snapshots.py +72 -0
  135. docharvest-11.3.1/tests/test_doc_graph.py +67 -0
  136. docharvest-11.3.1/tests/test_doc_reader_toast.py +63 -0
  137. docharvest-11.3.1/tests/test_engine_discovery.py +104 -0
  138. docharvest-11.3.1/tests/test_engine_flow.py +355 -0
  139. docharvest-11.3.1/tests/test_engine_providers.py +155 -0
  140. docharvest-11.3.1/tests/test_engine_url_identity.py +45 -0
  141. docharvest-11.3.1/tests/test_export_formats.py +84 -0
  142. docharvest-11.3.1/tests/test_fast_ast_removed.py +42 -0
  143. docharvest-11.3.1/tests/test_full_manifest.py +59 -0
  144. docharvest-11.3.1/tests/test_growth_docs.py +31 -0
  145. docharvest-11.3.1/tests/test_gui_bridge.py +103 -0
  146. docharvest-11.3.1/tests/test_gui_bridge_safety.py +149 -0
  147. docharvest-11.3.1/tests/test_gui_server.py +126 -0
  148. docharvest-11.3.1/tests/test_imports.py +90 -0
  149. docharvest-11.3.1/tests/test_install_modal_opacity.py +51 -0
  150. docharvest-11.3.1/tests/test_installers.py +77 -0
  151. docharvest-11.3.1/tests/test_library_migration.py +182 -0
  152. docharvest-11.3.1/tests/test_mcp_advanced_tools.py +151 -0
  153. docharvest-11.3.1/tests/test_mcp_server.py +814 -0
  154. docharvest-11.3.1/tests/test_naming_drift.py +165 -0
  155. docharvest-11.3.1/tests/test_packaging.py +127 -0
  156. docharvest-11.3.1/tests/test_promotion_package.py +27 -0
  157. docharvest-11.3.1/tests/test_providers.py +481 -0
  158. docharvest-11.3.1/tests/test_providers_new.py +233 -0
  159. docharvest-11.3.1/tests/test_readme_contract.py +40 -0
  160. docharvest-11.3.1/tests/test_registry_manifest.py +119 -0
  161. docharvest-11.3.1/tests/test_release_notes.py +414 -0
  162. docharvest-11.3.1/tests/test_search.py +685 -0
  163. docharvest-11.3.1/tests/test_shell_api.py +380 -0
  164. docharvest-11.3.1/tests/test_shell_cli.py +329 -0
  165. docharvest-11.3.1/tests/test_shell_config.py +200 -0
  166. docharvest-11.3.1/tests/test_shell_output_contract.py +295 -0
  167. docharvest-11.3.1/tests/test_shell_storage.py +342 -0
  168. docharvest-11.3.1/tests/test_skills.py +168 -0
  169. docharvest-11.3.1/tests/test_splitter.py +318 -0
  170. docharvest-11.3.1/tests/test_stats_drift.py +290 -0
  171. docharvest-11.3.1/tests/test_storage.py +758 -0
  172. docharvest-11.3.1/tests/test_tool_profiles.py +54 -0
  173. docharvest-11.3.1/tests/test_tui_app.py +210 -0
  174. docharvest-11.3.1/tests/test_tui_contract.py +221 -0
  175. docharvest-11.3.1/tests/test_tui_diagnostics.py +158 -0
  176. docharvest-11.3.1/tests/test_tui_diff.py +156 -0
  177. docharvest-11.3.1/tests/test_tui_fake_engine.py +90 -0
  178. docharvest-11.3.1/tests/test_tui_library.py +146 -0
  179. docharvest-11.3.1/tests/test_tui_paste.py +60 -0
  180. docharvest-11.3.1/tests/test_tui_search.py +166 -0
  181. docharvest-11.3.1/tests/test_tui_wizard.py +282 -0
  182. docharvest-11.3.1/tests/test_typo_classes.py +94 -0
  183. docharvest-11.3.1/tests/test_utils.py +616 -0
  184. docharvest-11.3.1/tests/test_version_drift.py +235 -0
  185. docharvest-11.3.1/tests/test_visual_anchors.py +142 -0
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Rohan Shetty
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,655 @@
1
+ Metadata-Version: 2.4
2
+ Name: docharvest
3
+ Version: 11.3.1
4
+ Summary: DocHarvest โ€” Turn any documentation site into LLM-ready Markdown, vector RAG JSONL, llms.txt, and styled offline PDFs. Zero-config CLI, React desktop GUI & FastMCP server.
5
+ Author-email: Rohan Shetty <shettyrohan2@gmail.com>
6
+ License: MIT
7
+ Project-URL: Homepage, https://rohannshetty.github.io/DocHarvest/
8
+ Project-URL: Documentation, https://github.com/RohannShetty/DocHarvest#-quick-start
9
+ Project-URL: Repository, https://github.com/RohannShetty/DocHarvest
10
+ Project-URL: Source, https://github.com/RohannShetty/DocHarvest
11
+ Project-URL: Issues, https://github.com/RohannShetty/DocHarvest/issues
12
+ Project-URL: Changelog, https://github.com/RohannShetty/DocHarvest/blob/main/CHANGELOG.md
13
+ Keywords: docharvest,gitbook,documentation,markdown,downloader,ai,rag,llms-txt,mcp-server,vector-db,docusaurus,readthedocs,mintlify,offline-docs,pdf-generator,nextra,vitepress,mkdocs,readme-io
14
+ Classifier: Development Status :: 5 - Production/Stable
15
+ Classifier: Environment :: Console
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.11
21
+ Classifier: Programming Language :: Python :: 3.12
22
+ Classifier: Topic :: Internet :: WWW/HTTP
23
+ Classifier: Topic :: Software Development :: Documentation
24
+ Classifier: Topic :: Text Processing :: Markup
25
+ Classifier: Topic :: Utilities
26
+ Requires-Python: >=3.10
27
+ Description-Content-Type: text/markdown
28
+ License-File: LICENSE
29
+ Requires-Dist: requests>=2.28.0
30
+ Requires-Dist: beautifulsoup4>=4.11.0
31
+ Requires-Dist: markdownify>=0.11.0
32
+ Requires-Dist: lxml>=4.9.0
33
+ Requires-Dist: mcp>=1.2.0
34
+ Requires-Dist: textual>=0.60
35
+ Requires-Dist: pyperclip>=1.8.0
36
+ Requires-Dist: pywebview>=6.2.1
37
+ Requires-Dist: fpdf2>=2.8.8
38
+ Provides-Extra: mcp
39
+ Requires-Dist: mcp>=1.2.0; extra == "mcp"
40
+ Provides-Extra: render
41
+ Requires-Dist: playwright>=1.40.0; extra == "render"
42
+ Provides-Extra: js
43
+ Requires-Dist: playwright>=1.40.0; extra == "js"
44
+ Provides-Extra: dev
45
+ Requires-Dist: pytest>=8.0; extra == "dev"
46
+ Requires-Dist: pytest-timeout>=2.3; extra == "dev"
47
+ Requires-Dist: pytest-asyncio>=0.23; extra == "dev"
48
+ Requires-Dist: pytest-cov>=4.0; extra == "dev"
49
+ Dynamic: license-file
50
+
51
+ <div align="center">
52
+
53
+ <img src="assets/logo-icon.svg" alt="DocHarvest Logo" width="96" />
54
+
55
+ # DocHarvest
56
+
57
+ ### Compile any docs portal into context your agent can verify
58
+
59
+ **CLI + Universal Skill first.** MCP is optional when you need a live tool surface.
60
+
61
+ | `673 pages` | `18.2 s` | `~83% less boilerplate` |
62
+ |---:|---:|---:|
63
+ | reference capture | reference capture | reference measurement |
64
+
65
+ [![Version: 11.3.1](https://img.shields.io/badge/version-11.3.1-3f3f46?style=flat-square&labelColor=18181b)](CHANGELOG.md)
66
+ [![License: MIT](https://img.shields.io/badge/license-MIT-71717a?style=flat-square&labelColor=18181b)](LICENSE)
67
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10%2B-a1a1aa?style=flat-square&labelColor=18181b)](pyproject.toml)
68
+ [![Tests: 930 passing](https://img.shields.io/badge/tests-930%20passing%20(2026--10--14)-f59e0b?style=flat-square&labelColor=18181b)](docs/lib/stats.ts)
69
+
70
+ > Reference measurement, not a guarantee: 673 pages captured in 18.2 seconds with approximately 83% boilerplate-token reduction. Reproduce the local retrieval benchmark with `python benchmarks/run.py`; replace this capture reference only with a fresh end-to-end measurement.
71
+ ```bash
72
+ pip install docharvest && docharvest capture https://docs.example.com/
73
+ ```
74
+ <br />
75
+
76
+ <img src="assets/capture_studio.png" alt="DocHarvest Desktop GUI โ€” Capture Studio with shadcn/ui, 60fps motion progress, radial gauge, and live terminal logs" width="920" />
77
+
78
+ </div>
79
+
80
+ ---
81
+
82
+ ## โšก Overview
83
+
84
+ **Your coding agent doesn't read documentation โ€” it reads web pages.** Navbars, cookie banners, search modals, and footer scripts make up **80โ€“85% of a raw page's bytes** before a single API fact arrives. Chunks captured without source URLs make hallucinations unfalsifiable, and per-page cloud scraping API bills spike the moment you index a real documentation portal.
85
+
86
+ **DocHarvest** (package: `docharvest`) compiles any technical documentation site into a pristine, structured local knowledge base with verifiable SHA-256 provenance:
87
+
88
+ - โšก **Ultra-Fast Throughput**: Reference capture of **673 pages in 18.2 seconds** (~37 pages/sec) directly into SQLite FTS5 BM25 search and semantic graphs.
89
+ - ๐ŸŽฏ **~83% Token Reduction**: Eliminates boilerplate DOM trees, sidebars, anchor spam, and tracking wrappers, delivering high-density context directly to your LLMs.
90
+ - ๐Ÿ“ **OpenSpec SDD Native**: Integrated spec-driven development harnesses and prompt commands (`opsx-*`) across 14+ agent environments.
91
+ - ๐Ÿ–ฅ๏ธ **Universal Desktop & Browser GUI**: Seamless native window with zero-dependency standalone HTTP/SSE browser fallback across any default system browser.
92
+ - ๐Ÿง  **Universal Agent Skill (`SKILL.md`)**: Bundled, harness-neutral intelligence that equips 14+ coding agents (Cursor, Claude Code, Windsurf, Gemini CLI, Oh My Pi, Codex) with self-orchestrated harvesting and retrieval workflows via a single install command (`docharvest skill install docharvest -o <dir>`).
93
+ - ๐Ÿ”Œ **Native FastMCP v2 Server**: 12 zero-friction tools in an opt-in full profile, with a smaller default profile for lower schema cost; MCP Resources (`docs://{domain}/book`), and MCP Prompts over stdio.
94
+ - ๐Ÿ”’ **Deterministic SHA-256 Provenance**: Every page is stored with an exact SHA-256 content hash in YAML frontmatter for caching, version diffing, and citation verification.
95
+
96
+ Whether you are feeding 500-page API manuals to **Cursor / Claude Code**, building vector RAG pipelines with **LangChain & LlamaIndex**, reading offline on an airplane, or archiving technical libraries โ€” every capture ends in the same verifiable shape: clean markdown ready for your agent or your bookshelf.
97
+
98
+ ---
99
+
100
+ ## โฑ๏ธ 30-Second Start
101
+
102
+ ```bash
103
+ # 1. Install via pip (FastMCP v2 server & bundled skill included)
104
+ pip install docharvest
105
+
106
+ # 2. Capture a complete docs site with RAG JSONL and offline PDF
107
+ docharvest capture https://docs.openalgo.in/ --rag --pdf
108
+
109
+ # 3. Equip your AI agent with the Universal DocHarvest Skill
110
+ docharvest skill install docharvest -o .cursor/skills # or .claude/skills, .agents/skills...
111
+ ```
112
+
113
+ No API key. No account. No telemetry. When the command finishes you own a `book.md`, an `llms.txt`, an `llms-full.txt`, a RAG JSONL dataset, and a printable PDF โ€” all local, all MIT. Full install paths (standalone `.exe`, uvx, optional extras) are in [Quick Start](#-quick-start).
114
+
115
+ ---
116
+
117
+ ## ๐Ÿงฉ Supported Documentation Platforms (8 Real Providers)
118
+
119
+ DocHarvest features dedicated, priority-ordered parsers that extract clean article content and strip headers, footers, sidebars, anchor hashes, and cookie banners:
120
+
121
+ | Provider | Priority | Discovery Method | Clean Content Target |
122
+ | :--- | :---: | :--- | :--- |
123
+ | **GitBook** | `100` | `.md` endpoint probing, sitemap, space discovery | Native markdown or `.page-inner` / `article` |
124
+ | **Mintlify** | `90` | `mintlify.json`, OpenAPI specs, CDN asset anchors | `#content`, `#main-content`, `article` |
125
+ | **Docusaurus** | `80` | `sitemap.xml`, `docusaurus.config.js`, sidebars | `article`, `.markdown`, `main .theme-doc-markdown` |
126
+ | **Nextra** | `75` | `sitemap.xml`, Next.js app routes, nextra scripts | `main.nextra-content`, `article` |
127
+ | **VitePress** | `72` | Sitemap, VitePress theme anchors, route index | `div.vp-doc`, `div.VPContent`, `main.VPDoc` |
128
+ | **MkDocs** | `70` | `search/search_index.json`, sitemap | `article.md-content__inner`, `div.md-typeset` |
129
+ | **ReadMe.io** | `65` | `sitemap.xml`, `/llms.txt`, developer hub routes | `div.rm-Article`, `div.rm-Markdown`, `#content` |
130
+ | **ReadTheDocs** | `60` | Sphinx `sitemap.xml`, `div.sphinxsidebar` | `div.document[role="main"]`, `div.body` |
131
+ | **Generic HTML / SPA** | `0` | BFS link crawl, `llms.txt`, `sitemap.xml` | `main`, `article`, `[role="main"]`, `#content` |
132
+
133
+ > [!TIP]
134
+ > **Dynamic JavaScript SPAs**: If a site is rendered entirely client-side via JavaScript (such as `omp.sh/docs`), install the optional Playwright extra (`pip install "docharvest[render]" && playwright install chromium`) and run with `--render` to execute JavaScript before extracting markdown.
135
+
136
+ ---
137
+
138
+ ## ๐ŸŒŸ Key Capabilities
139
+
140
+ - ๐Ÿค– **Zero-Noise LLM Context**: Auto-detects 8 documentation frameworks, probes native `.md` endpoints, and cleans DOM trees โ€” measured at ~83% token reduction vs raw pages.
141
+ - ๐Ÿ“ฆ **Five-Part Output Contract**: Every capture yields a modular `pages/` tree with SHA-256 YAML frontmatter, a consolidated `book.md` with TOC, `llms.txt`, a full-content `llms-full.txt`, and search index records.
142
+ - ๐Ÿš€ **Export Studio & Local Search**: RAG JSONL for vector databases, pure-Python PDF handbooks (`fpdf2`, zero C-dependencies), and AST markdown chunks โ€” all indexed into embedded SQLite FTS5 BM25 search.
143
+ - ๐Ÿ”Œ **Native FastMCP v2 Server**: A minimal schema is the default; `docharvest mcp --profile full` exposes all 12 tools plus resources and prompts over stdio. Crash-safe atomic storage and semver snapshot diffing included.
144
+
145
+ ### What DocHarvest Is *Not* For
146
+
147
+ A tool that claims to do everything has earned none of your trust. Honest scope:
148
+
149
+ - **Not for login-walled, paywalled, or CAPTCHA-protected content.** DocHarvest is built for public technical documentation and will not bypass access controls.
150
+ - **Not for internet-scale crawling.** Millions of arbitrary URLs is Common Crawl / Scrapy territory; this is a documentation compiler, not a search-engine crawler.
151
+ - **Not for e-commerce or social feeds.** Product catalogs and social streams are out of scope by design.
152
+ - **Not a cloud service.** No dashboard, no subscription, no telemetry โ€” because nothing of yours ever leaves your machine.
153
+
154
+ ---
155
+
156
+ ## ๐Ÿ–ฅ๏ธ Desktop GUI: Document Library & Management
157
+
158
+ <div align="center">
159
+ <img src="assets/document_library.png" alt="DocHarvest Desktop GUI โ€” Document Library with search, rename, open folder, and multi-format exports" width="920" />
160
+ </div>
161
+
162
+ The desktop application includes a dedicated **Document Library** for managing all harvested technical docs:
163
+ - **Instant Search**: Real-time filtering across downloaded portals.
164
+ - **In-App Renaming**: Organize project labels without breaking file paths.
165
+ - **1-Click Export Studio**: Export selected docsets to Markdown, Vector JSONL, or PDF handbooks directly from the GUI.
166
+ - **Direct Finder/Explorer Integration**: Open raw markdown source folders with a single click.
167
+
168
+ ---
169
+
170
+ ## ๐Ÿ“‹ The Five-Part Output Contract
171
+
172
+ **What a generic crawler hands your LLM** (every page, every time):
173
+
174
+ ```html
175
+ <nav class="sidebar">โ€ฆ47 linksโ€ฆ</nav>
176
+ <div class="cookie-banner">We value your privacyโ€ฆ</div>
177
+ <main>
178
+ <h1>OAuth 2.0<a class="anchor" href="#oauth2">ยถ</a></h1>
179
+ <pre><code><span class="token-keyword">import</span> <span class="token-variable">requests</span>โ€ฆ</code></pre>
180
+ </main>
181
+ ```
182
+
183
+ **What DocHarvest delivers** โ€” the same page, with cryptographic provenance:
184
+
185
+ ````markdown
186
+ ---
187
+ source_url: https://docs.openalgo.in/v/v2.0/api-reference/oauth
188
+ title: "OAuth 2.0 Authentication"
189
+ content_hash: "sha256-2fa9ca2a57c4e974f1725657f88f757e25b90adee3e18ef809f65932d283746c"
190
+ ---
191
+
192
+ # OAuth 2.0 Authentication
193
+
194
+ ## Request Signature
195
+
196
+ ```python
197
+ import requests
198
+
199
+ response = requests.post(
200
+ "https://api.openalgo.in/oauth/token",
201
+ json={"client_id": "pk_live_..."},
202
+ )
203
+ ```
204
+ ````
205
+
206
+ The `content_hash` is the real SHA-256 of the markdown body shown above โ€” paste it into any SHA-256 tool and it verifies.
207
+
208
+ Every crawl produces the same standardized, deterministic directory structure:
209
+
210
+ ```
211
+ ~/.docharvest/docs/
212
+ โ””โ”€โ”€ docs.openalgo.in/
213
+ โ”œโ”€โ”€ pages/ # Modular individual markdown files
214
+ โ”‚ โ”œโ”€โ”€ 001_quickstart.md
215
+ โ”‚ โ””โ”€โ”€ 002_api_reference.md
216
+ โ”œโ”€โ”€ book.md # Consolidated single handbook with hierarchical TOC
217
+ โ”œโ”€โ”€ llms.txt # Standardized AI discovery manifest
218
+ โ”œโ”€โ”€ llms-full.txt # Full-content manifest with per-page hashes
219
+ โ”œโ”€โ”€ exports/
220
+ โ”‚ โ”œโ”€โ”€ openalgo_rag.jsonl # Tokenized vector chunks + metadata
221
+ โ”‚ โ””โ”€โ”€ openalgo_handbook.pdf # Publication-grade printable PDF (pure Python)
222
+ โ””โ”€โ”€ .manifest.json # Crawl metadata, engine version & cryptographic hashes
223
+ ```
224
+
225
+ ---
226
+
227
+ ## ๐Ÿš€ Quick Start
228
+
229
+ ### Option 1: Standalone Executable (Zero Setup)
230
+ Download **[`docharvest-windows-latest.exe`](https://github.com/RohannShetty/DocHarvest/releases/latest)** from the latest release:
231
+ - **Double-click** to launch the **Desktop GUI Application**.
232
+ - Or execute directly in your terminal:
233
+ ```powershell
234
+ .\docharvest-windows-latest.exe crawl https://docs.openalgo.in/ --rag --pdf
235
+ ```
236
+
237
+ ### Option 2: Install via pip / PyPI
238
+ ```bash
239
+ # Standard installation (100% local, zero C-dependencies)
240
+ pip install docharvest
241
+
242
+ # Optional headless browser rendering for dynamic JavaScript SPAs
243
+ pip install "docharvest[render]"
244
+ playwright install chromium
245
+
246
+ # MCP server: the FastMCP SDK ships in the base install โ€” nothing extra needed.
247
+ # (The [mcp] extra is a backward-compatibility no-op; this line still resolves.)
248
+ pip install "docharvest[mcp]"
249
+
250
+ # Launch desktop GUI:
251
+ docharvest --gui
252
+
253
+ # Or run a CLI crawl:
254
+ docharvest capture https://docs.openalgo.in/ --rag --pdf
255
+ ```
256
+
257
+ ### Option 3: Ultra-Fast One-Liner via uv / uvx
258
+ ```bash
259
+ # Launch GUI instantly without permanent installation:
260
+ uvx docharvest --gui
261
+
262
+ # Or install as a global CLI tool:
263
+ uv tool install docharvest
264
+ ```
265
+
266
+ ---
267
+
268
+ ## ๐Ÿ’ป CLI Command Reference
269
+
270
+ ```bash
271
+ # Basic Documentation Crawl (aliases: capture, dl, crawl)
272
+ # `docharvest capture` is the canonical verb; `crawl` remains as a documented alias.
273
+ docharvest capture https://docs.openalgo.in/
274
+
275
+ # Full Compilation (Markdown + RAG JSONL + llms.txt + PDF Handbook)
276
+ docharvest capture https://docs.openalgo.in/ --rag --pdf
277
+
278
+ # Crawl Dynamic Client-Rendered SPAs (Playwright Headless Browser)
279
+ docharvest capture https://omp.sh/docs --render
280
+
281
+ # Restrict Crawl to Specific Path Prefix & Limit Depth
282
+ docharvest capture https://docs.example.com/ --scope /api/ --max-pages 50
283
+
284
+ # Capture a Local Dev Docs Server (host:port domains are fully supported)
285
+ docharvest capture http://localhost:3000/docs --output library
286
+
287
+ # Full-Text BM25 Search across Harvested Docs
288
+ docharvest search "OAuth 2.0 authentication token"
289
+
290
+ # List Harvested Document Domains in Local Library
291
+ docharvest ls
292
+
293
+ # Show Snapshot History & Diff Versions
294
+ docharvest history docs.example.com
295
+ docharvest diff docs.example.com v1.0.0 v1.0.1
296
+
297
+ # Start the default minimal FastMCP profile over stdio
298
+ docharvest mcp
299
+
300
+ # Expose all 12 named tools explicitly
301
+ docharvest mcp --profile full
302
+
303
+ # List / Install the Bundled Agent Skill
304
+ docharvest skill list
305
+ docharvest skill install docharvest -o .claude/skills
306
+
307
+ # Launch Desktop GUI Application (native window or browser)
308
+ docharvest --gui
309
+ docharvest gui --browser zen
310
+ ```
311
+
312
+ ---
313
+
314
+ ## ๐Ÿง  Agent Skills: Universal MCP Skill for Every Agent Harness
315
+
316
+ The FastMCP server gives an agent **tools**; the bundled **docharvest** skill gives it **reasoning & workflow intelligence**. It teaches LLM agents when and how to call tools without redundant network crawls, how to bound context windows to avoid token bloat, and how to verify cryptographic SHA-256 provenance.
317
+
318
+ One skill, one `SKILL.md`: the matrix below describes **skill discovery directories**, not MCP server configuration. MCP registration paths are client-specific and are covered by `docharvest init --client <name>` where supported.
319
+
320
+ ### ๐ŸŒ Universal Skill Matrix (17 documented environments)
321
+
322
+ Install the bundled skill into any agent's discovery directory in a single command with `docharvest skill install docharvest -o <target_dir>`:
323
+
324
+ | Agent / Harness | Skill Target Directory | 1-Command Skill Installation | Trigger / Invocation | Status |
325
+ | :--- | :--- | :--- | :--- | :--- |
326
+ | **Cursor** | `.cursor/skills` | `docharvest skill install docharvest -o .cursor/skills` | Auto-invoked or `@docharvest` | Current |
327
+ | **Claude Code** | `.claude/skills` | `docharvest skill install docharvest -o .claude/skills` | `claude` prompt / `/skill:docharvest` | Current |
328
+ | **Claude Desktop** | `~/.claude/skills` | `docharvest skill install docharvest -o ~/.claude/skills` | Natural language queries | Current |
329
+ | **Devin Desktop / legacy Windsurf** | `devin/` or `.codeium/skills` | `docharvest skill install docharvest -o <target_dir>` | Client-specific | Verify per client |
330
+ | **Oh My Pi (OMP)** | `.omp/skills` | `docharvest skill install docharvest -o .omp/skills` | `/skill:docharvest <query>` | Current |
331
+ | **VS Code (Copilot/MCP)** | `.agents/skills` | `docharvest skill install docharvest -o .agents/skills` | Chat agent prompt | Current |
332
+ | **Antigravity / Gemini CLI** | `.gemini/skills` | `docharvest skill install docharvest -o .gemini/skills` | CLI skill invocation | Current |
333
+ | **GitHub Copilot Workspace** | `.github/skills` | `docharvest skill install docharvest -o .github/skills` | Workspace agent prompt | Unverified |
334
+ | **JetBrains AI Assistant** | `.agents/skills` | `docharvest skill install docharvest -o .agents/skills` | AI Assistant prompt | Current |
335
+ | **Junie** | `.agents/skills` | `docharvest skill install docharvest -o .agents/skills` | Junie CLI prompt | Current |
336
+ | **Zed** | `.agents/skills` | `docharvest skill install docharvest -o .agents/skills` | Context server prompt | Current |
337
+ | **Cline** | `.agents/skills` | `docharvest skill install docharvest -o .agents/skills` | Task auto-execution | Current |
338
+ | **Continue.dev** | `.agents/skills` | `docharvest skill install docharvest -o .agents/skills` | `@docs` context prompt | Legacy / winding down |
339
+ | **Kiro** | `.kiro/skills` | `docharvest skill install docharvest -o .kiro/skills` | Kiro agent runner | Current |
340
+ | **OpenCode** | `.opencode/skills` | `docharvest skill install docharvest -o .opencode/skills` | Agent command bar | Current |
341
+ | **OpenAI Codex CLI** | `.agents/skills` | `docharvest skill install docharvest -o .agents/skills` | CLI assistant prompt | Current |
342
+ | **Universal / Standard Agents** | `.agents/skills` | `docharvest skill install docharvest -o .agents/skills` | Standard discovery loader | Current |
343
+
344
+ ### What the Skill Encodes:
345
+
346
+ - **Autonomous Two-Stage Lookup**: Instructs the agent to check `list_domains` and `find_docs` first, reusing local cached libraries before triggering network crawls.
347
+ - **AST-Aware Token Slicing**: Employs `read_doc(domain, topic=..., max_tokens=4000)` to pull precise sub-headings without splitting code blocks or tables.
348
+ - **Topological Traversal**: Uses `query_doc_graph` and `get_related_concepts` to navigate prerequisite concepts and API references across complex documentation hierarchies.
349
+ - **Automated Version Audits**: Executes `list_versions`, `diff_versions`, and `get_changelog` to analyze documentation drifts and API updates over time.
350
+ - **Graceful CLI Seam**: Transparently falls back to `docharvest capture` and `docharvest search` when running in environments without active MCP server connections.
351
+
352
+ ```bash
353
+ # Inspect all bundled skills:
354
+ docharvest skill list
355
+
356
+ # Install into your current workspace root:
357
+ docharvest skill install docharvest -o .agents/skills
358
+ ```
359
+
360
+ ---
361
+
362
+ ## ๐Ÿ”Œ AI Agent Integration: Native FastMCP v2 Server
363
+
364
+ DocHarvest includes a native **FastMCP (Model Context Protocol v2)** server over standard input/output (`stdio`). The default `minimal` profile exposes the capture and retrieval path with a smaller schema; `docharvest mcp --profile full` exposes all 12 high-level tools, **MCP Resources**, and **MCP Prompts**. It is compatible with `mcp<2` and `mcp>=2.1`.
365
+
366
+ > **Zero-Dependency SDK**: The `mcp` SDK ships directly inside the base package. `pip install docharvest` or `uvx docharvest mcp` works out of the box with no extra steps.
367
+
368
+ Tool profiles are documented in [`docs/TOOL_PROFILES.md`](docs/TOOL_PROFILES.md). Use `full` when an existing workflow needs versioning, exports, changelogs, or graph tools.
369
+
370
+ **MCP Registry id:** `io.github.RohannShetty/docharvest`
371
+
372
+ <!-- mcp-name: io.github.RohannShetty/docharvest โ€” ownership token the official MCP registry checks in this README to
373
+ verify ownership of the PyPI package `docharvest`. Do not remove or
374
+ reformat: publishing via mcp-publisher fails without it. -->
375
+
376
+ ### All 12 Native MCP Tools
377
+
378
+ 1. `download_docs(url, max_pages=None, workers=8, path_scope=[], exclude_paths=[], site_versions=None, output_mode="both")`
379
+ Captures any documentation URL into Markdown, `book.md`, `llms.txt`, and `llms-full.txt`.
380
+ 2. `search_docs(query, domain=None, limit=10, max_tokens=2000)`
381
+ Full-text search across downloaded documentation via SQLite FTS5 BM25; `max_tokens` bounds total returned snippets.
382
+ 3. `find_docs(query, limit=10)`
383
+ Resolves library/framework names ("react", "nextjs") to indexed domains in the local library.
384
+ 4. `read_doc(domain, path=None, topic=None, max_tokens=4000, version=None)`
385
+ Reads a specific page or topic section with AST-safe token bounding โ€” code blocks and tables are never split.
386
+ 5. `get_doc(domain, version=None)`
387
+ Retrieves the compiled documentation content or preview for a domain.
388
+ 6. `list_domains()`
389
+ Returns metadata for all harvested documentation portals in local storage.
390
+ 7. `query_doc_graph(domain, query, limit=10)`
391
+ Queries the semantic entity & concept graph to discover connected API endpoints and sections without reading full files.
392
+ 8. `get_related_concepts(domain, concept)`
393
+ Returns 1-hop and 2-hop connected concepts and prerequisite sections.
394
+ 9. `diff_versions(domain, v1, v2)`
395
+ Computes unified diffs and line change statistics between two snapshots.
396
+ 10. `list_versions(domain)`
397
+ Lists available captured snapshots and timestamps for a domain.
398
+ 11. `export_docs(domain, format="markdown")`
399
+ Exports documentation into `"markdown"`, `"jsonl"`, or `"rag"` metadata formats.
400
+ 12. `get_changelog(domain)`
401
+ Auto-generates version changelogs across captured snapshot iterations.
402
+
403
+ ### MCP v2 Resources & Prompts
404
+ - **Resources**: `docs://{domain}/book` (full handbook) and `docs://{domain}/manifest` (`llms.txt` index). The same library root also contains `llms-full.txt` for full-content ingestion.
405
+ - **Prompts**: `prompt://search-docset` (guided docset synthesis), `prompt://summarize-library` (library overview).
406
+
407
+ ---
408
+
409
+ ### Zero-Setup MCP Configuration Snippets (14 Clients)
410
+
411
+ #### 1. Claude Code
412
+ ```bash
413
+ claude mcp add docharvest docharvest mcp
414
+ ```
415
+ Or in `~/.claude.json`:
416
+ ```json
417
+ {
418
+ "mcpServers": {
419
+ "docharvest": {
420
+ "command": "docharvest",
421
+ "args": ["mcp"]
422
+ }
423
+ }
424
+ }
425
+ ```
426
+
427
+ #### 2. Claude Desktop (`claude_desktop_config.json`)
428
+ ```json
429
+ {
430
+ "mcpServers": {
431
+ "docharvest": {
432
+ "command": "uvx",
433
+ "args": ["docharvest", "mcp"]
434
+ }
435
+ }
436
+ }
437
+ ```
438
+
439
+ #### 3. Cursor (`.cursor/mcp.json`)
440
+ ```json
441
+ {
442
+ "mcpServers": {
443
+ "docharvest": {
444
+ "command": "python",
445
+ "args": ["-m", "docharvest.mcp"]
446
+ }
447
+ }
448
+ }
449
+ ```
450
+
451
+ <details>
452
+ <summary><strong>11 more client configs โ€” Windsurf ยท VS Code ยท JetBrains ยท Zed ยท Cline ยท Continue ยท Kiro ยท OpenCode ยท Oh My Pi ยท Gemini CLI ยท Codex CLI</strong></summary>
453
+
454
+ #### 4. Windsurf (`~/.codeium/windsurf/mcp_config.json`)
455
+ ```json
456
+ {
457
+ "mcpServers": {
458
+ "docharvest": {
459
+ "command": "docharvest",
460
+ "args": ["mcp"]
461
+ }
462
+ }
463
+ }
464
+ ```
465
+
466
+ #### 5. VS Code (`.vscode/mcp.json`)
467
+ ```json
468
+ {
469
+ "servers": {
470
+ "docharvest": {
471
+ "type": "stdio",
472
+ "command": "docharvest",
473
+ "args": ["mcp"]
474
+ }
475
+ }
476
+ }
477
+ ```
478
+
479
+ #### 6. JetBrains AI Assistant / PyCharm / IntelliJ
480
+ Configure via **Settings โ†’ Tools โ†’ Model Context Protocol (MCP)**:
481
+ - **Server Name**: `docharvest`
482
+ - **Command**: `docharvest`
483
+ - **Arguments**: `mcp`
484
+
485
+ #### 7. Zed (`settings.json`)
486
+ ```json
487
+ {
488
+ "context_servers": {
489
+ "docharvest": {
490
+ "command": "docharvest",
491
+ "args": ["mcp"]
492
+ }
493
+ }
494
+ }
495
+ ```
496
+
497
+ #### 8. Cline (`cline_mcp_settings.json`)
498
+ ```json
499
+ {
500
+ "mcpServers": {
501
+ "docharvest": {
502
+ "command": "docharvest",
503
+ "args": ["mcp"],
504
+ "disabled": false,
505
+ "autoApprove": ["search_docs", "get_doc", "list_domains", "query_doc_graph"]
506
+ }
507
+ }
508
+ }
509
+ ```
510
+
511
+ #### 9. Continue.dev (`config.json`)
512
+ ```json
513
+ {
514
+ "experimental": {
515
+ "modelContextProtocolServers": [
516
+ {
517
+ "transport": {
518
+ "type": "stdio",
519
+ "command": "docharvest",
520
+ "args": ["mcp"]
521
+ }
522
+ }
523
+ ]
524
+ }
525
+ }
526
+ ```
527
+
528
+ #### 10. Kiro (`.kiro/settings/mcp.json`)
529
+ ```json
530
+ {
531
+ "mcp": {
532
+ "servers": {
533
+ "docharvest": {
534
+ "command": "docharvest",
535
+ "args": ["mcp"]
536
+ }
537
+ }
538
+ }
539
+ }
540
+ ```
541
+
542
+ #### 11. OpenCode (`opencode.json`)
543
+ ```json
544
+ {
545
+ "mcp": {
546
+ "docharvest": {
547
+ "command": "docharvest",
548
+ "args": ["mcp"]
549
+ }
550
+ }
551
+ }
552
+ ```
553
+
554
+ #### 12. Oh My Pi (`omp.sh`) (`.omp/mcp.json` project ยท `~/.omp/agent/mcp.json` user)
555
+ ```json
556
+ {
557
+ "$schema": "https://raw.githubusercontent.com/can1357/oh-my-pi/main/packages/coding-agent/src/config/mcp-schema.json",
558
+ "mcpServers": {
559
+ "docharvest": {
560
+ "type": "stdio",
561
+ "command": "uvx",
562
+ "args": ["docharvest", "mcp"],
563
+ "timeout": 0
564
+ }
565
+ }
566
+ }
567
+ ```
568
+
569
+ `timeout: 0` disables the client-side request timeout. DocHarvest crawls a
570
+ documented site at roughly 0.075 s/page, so a full-site capture can exceed a
571
+ client's default timeout (OMP defaults to 30 s) and be aborted mid-crawl; set a
572
+ positive millisecond value instead if you prefer a hard ceiling, and use
573
+ `max_pages` to bound very large sites.
574
+
575
+ > **Not for Pi (`pi.dev`)**: Pi keeps its MCP configuration elsewhere, which is
576
+ > outside OMP's discovery list โ€” use Pi's own configuration file.
577
+
578
+ #### 13. Antigravity / Gemini CLI (`mcp/docharvest.json`)
579
+ ```json
580
+ {
581
+ "name": "docharvest",
582
+ "command": "docharvest",
583
+ "args": ["mcp"]
584
+ }
585
+ ```
586
+
587
+ #### 14. OpenAI Codex CLI (`codex_config.json`)
588
+ ```json
589
+ {
590
+ "mcp_servers": {
591
+ "docharvest": {
592
+ "command": "docharvest",
593
+ "args": ["mcp"]
594
+ }
595
+ }
596
+ }
597
+ ```
598
+
599
+ </details>
600
+
601
+ ---
602
+
603
+ ## ๐Ÿ Python SDK Example
604
+
605
+ ```python
606
+ from docharvest.api import capture, CaptureOptions
607
+
608
+ # Configure capture options
609
+ options = CaptureOptions(
610
+ workers=8,
611
+ output_mode="both", # "both", "library", or "local"
612
+ render=False, # set True for dynamic JavaScript SPAs
613
+ )
614
+
615
+ # Execute deterministic capture
616
+ result = capture("https://docs.openalgo.in/", options=options)
617
+
618
+ print(f"Captured {result.pages_captured} pages using provider: {result.provider}")
619
+ print(f"Book file: {result.book_file}")
620
+ print(f"Manifest: {result.manifest_file}")
621
+ ```
622
+
623
+ ---
624
+
625
+ ## ๐Ÿงช Test Suite & Quality Benchmarks
626
+
627
+ DocHarvest is continuously tested across Windows, Linux, and macOS:
628
+
629
+ - **The full suite is green** (badge above, dated): engine discovery, BFS crawling, provider extraction, storage safety, DocGraph semantic search, MCP v2 tools, the desktop GUI bridge, and the showcase's own content contracts. Reproduce with `uv run pytest`.
630
+ - **Numbers nobody regenerates go stale, so these are generated.** `docs/lib/stats.ts` feeds the showcase, and `node docs/scripts/sync-stats.mjs --run` is the only supported way to change them โ€” the site, this file and the real suite are kept in step, and a run with failures is published as failures rather than rounded away.
631
+ - **Coverage**: `uv run pytest --cov=docharvest` (see the CI job for the current figure).
632
+ - **Windows CRLF Safe**: All link and boilerplate stripping routines are cross-platform normalized against Windows CRLF and Unix LF linebreaks.
633
+
634
+ To run the test suite locally:
635
+ ```bash
636
+ uv run pytest --cov=docharvest
637
+ ```
638
+
639
+ ---
640
+
641
+ ## ๐Ÿ‘จโ€๐Ÿ’ป Author & Connect
642
+
643
+ Created with โค๏ธ by **Rohan Shetty**.
644
+
645
+ - ๐ŸŒ **Website**: [rohannshetty.github.io/DocHarvest](https://rohannshetty.github.io/DocHarvest/)
646
+ - ๐Ÿ™ **GitHub**: [@RohannShetty](https://github.com/RohannShetty)
647
+ - ๐Ÿ’ผ **LinkedIn**: [linkedin.com/in/rohan-shettyy](https://www.linkedin.com/in/rohan-shettyy/)
648
+ - ๐Ÿฆ **X (Twitter)**: [@rohan__shetty](https://x.com/rohan__shetty)
649
+ - ๐Ÿ“ง **Email**: [shettyrohan2@gmail.com](mailto:shettyrohan2@gmail.com)
650
+
651
+ ---
652
+
653
+ ## ๐Ÿ“„ License
654
+
655
+ This project is licensed under the [MIT License](LICENSE).