codrspot-processor-mcp 0.1.1__tar.gz → 0.1.2__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 (106) hide show
  1. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/PKG-INFO +6 -1
  2. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/README.md +5 -0
  3. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/pyproject.toml +1 -1
  4. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/__init__.py +1 -1
  5. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/cli/main.py +9 -1
  6. codrspot_processor_mcp-0.1.2/src/codepreproc_client/layer1_business/cli/setup.py +93 -0
  7. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/mcp/server.py +1 -2
  8. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codrspot_processor_mcp.egg-info/PKG-INFO +6 -1
  9. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codrspot_processor_mcp.egg-info/SOURCES.txt +1 -0
  10. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/LICENSE +0 -0
  11. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/setup.cfg +0 -0
  12. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/__main__.py +0 -0
  13. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/__init__.py +0 -0
  14. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/allowed_scope_cache.py +0 -0
  15. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/api_client/__init__.py +0 -0
  16. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/api_client/lease_client.py +0 -0
  17. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/api_client/net_guard.py +0 -0
  18. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/api_client/promote_client.py +0 -0
  19. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/api_client/reasoning_client.py +0 -0
  20. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/api_client/registry_client.py +0 -0
  21. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/api_client/superkg_client.py +0 -0
  22. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/cli/__init__.py +0 -0
  23. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/cli/init.py +0 -0
  24. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/config.py +0 -0
  25. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/git_utils.py +0 -0
  26. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/license/__init__.py +0 -0
  27. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/license/fingerprint.py +0 -0
  28. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/license/jwt_client.py +0 -0
  29. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/license/project_lock.py +0 -0
  30. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/local_registry.py +0 -0
  31. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/manifest/__init__.py +0 -0
  32. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/manifest/credentials.py +0 -0
  33. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/mcp/__init__.py +0 -0
  34. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/mcp/action_monitor.py +0 -0
  35. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/mcp/lifecycle.py +0 -0
  36. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/mcp/tools.py +0 -0
  37. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer1_business/project_registry.py +0 -0
  38. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/__init__.py +0 -0
  39. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/__init__.py +0 -0
  40. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/ast_graph.py +0 -0
  41. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/bm25_store.py +0 -0
  42. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/chunking/__init__.py +0 -0
  43. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/chunking/ast_chunker.py +0 -0
  44. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/chunking/languages.py +0 -0
  45. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/embed_worker.py +0 -0
  46. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/embeddings.py +0 -0
  47. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/extract/__init__.py +0 -0
  48. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/extract/compactor.py +0 -0
  49. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/extract/providers/__init__.py +0 -0
  50. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/extract/providers/base.py +0 -0
  51. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/indexer.py +0 -0
  52. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/ppl/__init__.py +0 -0
  53. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/ppl/emitter.py +0 -0
  54. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/ppl/parser.py +0 -0
  55. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/qdrant_store.py +0 -0
  56. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/scanning/__init__.py +0 -0
  57. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/scanning/manifest_scanner.py +0 -0
  58. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/scanning/md_scanner.py +0 -0
  59. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/scanning/repo_mapper.py +0 -0
  60. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/condensation/session_vector_store.py +0 -0
  61. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/coupling/__init__.py +0 -0
  62. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/coupling/domain.py +0 -0
  63. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/coupling/graph.py +0 -0
  64. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/coupling/layer2_gate.py +0 -0
  65. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/coupling/projector.py +0 -0
  66. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/coupling/resolver.py +0 -0
  67. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/__init__.py +0 -0
  68. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/pipeline/__init__.py +0 -0
  69. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/pipeline/execute_semantic.py +0 -0
  70. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/pipeline/filesystem_reorg.py +0 -0
  71. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/pipeline/patch_generator.py +0 -0
  72. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/pipeline/patch_validator.py +0 -0
  73. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/__init__.py +0 -0
  74. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/anchors.py +0 -0
  75. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/applicability.py +0 -0
  76. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/edit_planner.py +0 -0
  77. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/materializer.py +0 -0
  78. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/merger.py +0 -0
  79. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/__init__.py +0 -0
  80. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/add_import.py +0 -0
  81. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/append_argument.py +0 -0
  82. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/insert_literal.py +0 -0
  83. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/remove_import.py +0 -0
  84. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/remove_statement_unique.py +0 -0
  85. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/ops/rename_symbol_local.py +0 -0
  86. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/region_resolver.py +0 -0
  87. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/synthesizer.py +0 -0
  88. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/target_locator.py +0 -0
  89. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/semantic/validator.py +0 -0
  90. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/snippet/__init__.py +0 -0
  91. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/snippet/assembler.py +0 -0
  92. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/materialization/snippet/loader.py +0 -0
  93. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/retrieval/__init__.py +0 -0
  94. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/retrieval/graph_walk.py +0 -0
  95. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/retrieval/hybrid.py +0 -0
  96. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/retrieval/rerank_worker.py +0 -0
  97. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/retrieval/reranker.py +0 -0
  98. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/watcher/__init__.py +0 -0
  99. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codepreproc_client/layer2_tooling/watcher/fs_watcher.py +0 -0
  100. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codrspot_processor_mcp.egg-info/dependency_links.txt +0 -0
  101. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codrspot_processor_mcp.egg-info/entry_points.txt +0 -0
  102. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codrspot_processor_mcp.egg-info/requires.txt +0 -0
  103. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/codrspot_processor_mcp.egg-info/top_level.txt +0 -0
  104. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/contracts/__init__.py +0 -0
  105. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/contracts/dtos.py +0 -0
  106. {codrspot_processor_mcp-0.1.1 → codrspot_processor_mcp-0.1.2}/src/contracts/ir.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codrspot-processor-mcp
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: Local MCP server exposing codepreproc's code-context tools to Claude Code
5
5
  Author-email: alexlqi <alexlqi@gmail.com>
6
6
  License: Copyright (c) 2026 alexlqi (alexlqi@gmail.com)
@@ -122,6 +122,11 @@ This installs the `codepreproc` and `codepreproc-mcp` console scripts into
122
122
  python -m pip install --upgrade codrspot-processor-mcp
123
123
  ```
124
124
 
125
+ Then run `codepreproc setup` to scaffold `CODEPREPROC_HOME` (`indexes/`,
126
+ `logs/`, a starter `.env`) and print the Claude Code `mcp.json` snippet with
127
+ the exe path already resolved. Safe to re-run — it never overwrites an
128
+ existing `.env`.
129
+
125
130
  ## 2. Configure the environment
126
131
 
127
132
  Create a `.env` file in `%CODEPREPROC_HOME%` (`$CODEPREPROC_HOME` on
@@ -61,6 +61,11 @@ This installs the `codepreproc` and `codepreproc-mcp` console scripts into
61
61
  python -m pip install --upgrade codrspot-processor-mcp
62
62
  ```
63
63
 
64
+ Then run `codepreproc setup` to scaffold `CODEPREPROC_HOME` (`indexes/`,
65
+ `logs/`, a starter `.env`) and print the Claude Code `mcp.json` snippet with
66
+ the exe path already resolved. Safe to re-run — it never overwrites an
67
+ existing `.env`.
68
+
64
69
  ## 2. Configure the environment
65
70
 
66
71
  Create a `.env` file in `%CODEPREPROC_HOME%` (`$CODEPREPROC_HOME` on
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "codrspot-processor-mcp"
7
- version = "0.1.1"
7
+ version = "0.1.2"
8
8
  description = "Local MCP server exposing codepreproc's code-context tools to Claude Code"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.12,<3.13"
@@ -11,4 +11,4 @@ os.environ.setdefault("GIT_PYTHON_REFRESH", "warn")
11
11
 
12
12
  __all__ = ["__version__"]
13
13
 
14
- __version__ = "0.1.0"
14
+ __version__ = "0.1.2"
@@ -22,6 +22,9 @@ _USAGE = """\
22
22
  Usage: codepreproc <command> [options]
23
23
 
24
24
  Commands:
25
+ setup Scaffold CODEPREPROC_HOME (indexes/, logs/, .env) after a
26
+ fresh pip install, and print the Claude Code MCP config
27
+ snippet.
25
28
  init [PATH] Scan PATH (default: CWD), mint a JWT for it, and register it
26
29
  with codepreproc-server over the API.
27
30
  Requires credentials.yaml and CODEPREPROC_SERVER_URL to be set.
@@ -45,7 +48,12 @@ def run() -> None:
45
48
 
46
49
  command = args[0]
47
50
 
48
- if command == "init":
51
+ if command == "setup":
52
+ from codepreproc_client.layer1_business.cli.setup import setup_environment
53
+
54
+ sys.exit(setup_environment())
55
+
56
+ elif command == "init":
49
57
  from codepreproc_client.layer1_business.cli.init import init_project
50
58
 
51
59
  path: Path | None = None
@@ -0,0 +1,93 @@
1
+ """codepreproc setup: scaffold CODEPREPROC_HOME after a fresh pip install."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import shutil
6
+ import sys
7
+ from pathlib import Path
8
+
9
+ _MINIMAL_ENV = """\
10
+ CODEPREPROC_SERVER_URL=https://your-codepreproc-server-host:8443
11
+ OPENAI_API_KEY=
12
+ """
13
+
14
+
15
+ def _find_env_example() -> Path | None:
16
+ """Locate the packaged .env.example, if it shipped with this install."""
17
+ here = Path(__file__).resolve()
18
+ for parent in here.parents:
19
+ candidate = parent / ".env.example"
20
+ if candidate.exists():
21
+ return candidate
22
+ return None
23
+
24
+
25
+ def _mcp_json_snippet(mcp_exe: Path) -> str:
26
+ escaped = str(mcp_exe).replace("\\", "\\\\")
27
+ return (
28
+ "{\n"
29
+ ' "mcpServers": {\n'
30
+ ' "codepreproc": {\n'
31
+ f' "command": "{escaped}"\n'
32
+ " }\n"
33
+ " }\n"
34
+ "}"
35
+ )
36
+
37
+
38
+ def setup_environment(verbose: bool = True) -> int:
39
+ """Scaffold CODEPREPROC_HOME (dirs + .env) and print the Claude Code config snippet.
40
+
41
+ Returns an exit code (always 0 — this only creates missing local files).
42
+ """
43
+ from codepreproc_client.layer1_business.config import get_settings
44
+
45
+ settings = get_settings()
46
+ home_dir = settings.home_dir
47
+
48
+ created: list[str] = []
49
+ already_present: list[str] = []
50
+
51
+ for label, path in (("home", home_dir), ("indexes", settings.indexes_dir), ("logs", settings.logs_dir)):
52
+ if path.exists():
53
+ already_present.append(f"{label} ({path})")
54
+ else:
55
+ path.mkdir(parents=True, exist_ok=True)
56
+ created.append(f"{label} ({path})")
57
+
58
+ env_path = home_dir / ".env"
59
+ if env_path.exists():
60
+ already_present.append(f".env ({env_path})")
61
+ else:
62
+ example = _find_env_example()
63
+ if example is not None:
64
+ shutil.copyfile(example, env_path)
65
+ else:
66
+ env_path.write_text(_MINIMAL_ENV, encoding="utf-8")
67
+ created.append(f".env ({env_path})")
68
+
69
+ if verbose:
70
+ if created:
71
+ print("Created:")
72
+ for item in created:
73
+ print(f" {item}")
74
+ if already_present:
75
+ print("Already present (left untouched):")
76
+ for item in already_present:
77
+ print(f" {item}")
78
+
79
+ exe_suffix = ".exe" if sys.platform == "win32" else ""
80
+ mcp_exe = Path(sys.executable).parent / f"codepreproc-mcp{exe_suffix}"
81
+
82
+ print(
83
+ "\nNext steps:\n"
84
+ f" 1. Edit {env_path} — set CODEPREPROC_SERVER_URL (and OPENAI_API_KEY if using a remote LLM policy).\n"
85
+ f" 2. Place credentials.yaml at {home_dir / 'credentials.yaml'} "
86
+ "(or point CODEPREPROC_CREDENTIALS at a different path).\n"
87
+ " 3. From each repo you want indexed, run 'codepreproc init'.\n"
88
+ " 4. Add this to your Claude Code MCP configuration:\n"
89
+ )
90
+ print(_mcp_json_snippet(mcp_exe))
91
+ print(f"\n 5. Restart Claude Code, then run 'reindex' on your project.")
92
+
93
+ return 0
@@ -3,7 +3,6 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import asyncio
6
- import importlib.metadata
7
6
  import json
8
7
  import logging
9
8
  import os
@@ -633,7 +632,7 @@ async def main() -> None:
633
632
  finally:
634
633
  await monitor.close()
635
634
 
636
- version = importlib.metadata.version("codepreproc")
635
+ from codepreproc_client import __version__ as version
637
636
  try:
638
637
  async with stdio_server() as (read_stream, write_stream):
639
638
  await server.run(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codrspot-processor-mcp
3
- Version: 0.1.1
3
+ Version: 0.1.2
4
4
  Summary: Local MCP server exposing codepreproc's code-context tools to Claude Code
5
5
  Author-email: alexlqi <alexlqi@gmail.com>
6
6
  License: Copyright (c) 2026 alexlqi (alexlqi@gmail.com)
@@ -122,6 +122,11 @@ This installs the `codepreproc` and `codepreproc-mcp` console scripts into
122
122
  python -m pip install --upgrade codrspot-processor-mcp
123
123
  ```
124
124
 
125
+ Then run `codepreproc setup` to scaffold `CODEPREPROC_HOME` (`indexes/`,
126
+ `logs/`, a starter `.env`) and print the Claude Code `mcp.json` snippet with
127
+ the exe path already resolved. Safe to re-run — it never overwrites an
128
+ existing `.env`.
129
+
125
130
  ## 2. Configure the environment
126
131
 
127
132
  Create a `.env` file in `%CODEPREPROC_HOME%` (`$CODEPREPROC_HOME` on
@@ -19,6 +19,7 @@ src/codepreproc_client/layer1_business/api_client/superkg_client.py
19
19
  src/codepreproc_client/layer1_business/cli/__init__.py
20
20
  src/codepreproc_client/layer1_business/cli/init.py
21
21
  src/codepreproc_client/layer1_business/cli/main.py
22
+ src/codepreproc_client/layer1_business/cli/setup.py
22
23
  src/codepreproc_client/layer1_business/license/__init__.py
23
24
  src/codepreproc_client/layer1_business/license/fingerprint.py
24
25
  src/codepreproc_client/layer1_business/license/jwt_client.py