kg-mcp 0.1.8__py3-none-any.whl → 0.1.10__py3-none-any.whl

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.
kg_mcp/cli/setup.py CHANGED
@@ -691,6 +691,27 @@ Andiamo.
691
691
  console.print("[red]✗ Docker daemon non in esecuzione. Avvia Docker Desktop e rilancia.[/]")
692
692
  return
693
693
 
694
+ # ALWAYS check for existing volumes first (regardless of port status)
695
+ # This prevents password mismatch when user re-runs setup
696
+ existing_volumes = self._check_neo4j_volumes()
697
+ if existing_volumes:
698
+ console.print("[yellow]![/] Trovati volumi Neo4j esistenti da setup precedente.")
699
+ console.print(f"[dim]Volumi: {', '.join(existing_volumes)}[/]")
700
+ console.print("[dim]Una nuova password è stata generata - i volumi vecchi vanno rimossi.[/]")
701
+ if Confirm.ask("Rimuovo i volumi esistenti? (i dati verranno persi)", default=True):
702
+ # First stop any running containers
703
+ for c in self._find_neo4j_containers():
704
+ run_cmd(["docker", "stop", c], timeout=30)
705
+ run_cmd(["docker", "rm", "-v", c], timeout=10)
706
+ # Then remove volumes
707
+ for vol in existing_volumes:
708
+ run_cmd(["docker", "volume", "rm", "-f", vol], timeout=10)
709
+ console.print("[green]✓[/] Volumi e container rimossi.")
710
+ time.sleep(1)
711
+ else:
712
+ console.print("[yellow]![/] Mantengo i volumi esistenti.")
713
+ console.print("[dim]Nota: se la password nel .env è diversa da quella nel volume, Neo4j non partirà.[/]")
714
+
694
715
  # Check for port conflicts and offer to cleanup
695
716
  if self._check_port_conflict(7687) or self._check_port_conflict(7474):
696
717
  console.print("[yellow]![/] Le porte Neo4j (7474/7687) sono già in uso.")
@@ -700,11 +721,18 @@ Andiamo.
700
721
  console.print(f"[dim]Container esistenti: {', '.join(conflicting)}[/]")
701
722
  console.print("[dim]Nota: verranno rimossi anche i volumi per evitare conflitti password.[/]")
702
723
  if Confirm.ask("Fermo e rimuovo i container esistenti (e i volumi)?", default=True):
724
+ # Use docker compose down -v if compose file exists (most reliable)
725
+ compose_path = self.project_root / "docker-compose.yml"
726
+ if compose_path.exists():
727
+ run_cmd(["docker", "compose", "down", "-v"], cwd=self.project_root, timeout=60)
728
+ # Also stop/remove any containers by name
703
729
  for c in conflicting:
704
730
  run_cmd(["docker", "stop", c], timeout=30)
705
- run_cmd(["docker", "rm", "-v", c], timeout=10) # -v removes volumes too
706
- # Also try to remove named volumes from our compose
707
- run_cmd(["docker", "volume", "rm", "kg-mcp_neo4j_data", "kg-mcp_neo4j_logs"], timeout=10)
731
+ run_cmd(["docker", "rm", "-v", c], timeout=10)
732
+ # Force remove any lingering volumes by name pattern
733
+ for vol in ["kg-mcp_neo4j_data", "kg-mcp_neo4j_logs",
734
+ "mcp-kg-memory_neo4j_data", "mcp-kg-memory_neo4j_logs"]:
735
+ run_cmd(["docker", "volume", "rm", "-f", vol], timeout=10)
708
736
  console.print("[green]✓[/] Container e volumi rimossi.")
709
737
  time.sleep(2)
710
738
  else:
@@ -938,11 +966,17 @@ volumes:
938
966
  if r.returncode == 0:
939
967
  console.print("[green]✓[/] Schema applicato.")
940
968
  else:
941
- console.print("[yellow]![/] apply_schema ha restituito errori (potrebbe non essere presente nel progetto):")
942
- console.print((r.stderr or r.stdout)[:500])
969
+ console.print("[yellow]![/] apply_schema ha restituito errori:")
970
+ # Show complete stderr/stdout for debugging
971
+ error_output = r.stderr or r.stdout or ""
972
+ console.print(f"[dim]{error_output}[/]")
973
+ # Show connection info for debugging
974
+ pwd_debug = env.get('NEO4J_PASSWORD', '')[:4] + '***' if env.get('NEO4J_PASSWORD') else 'NOT SET'
975
+ console.print(f"\n[dim]Debug: NEO4J_URI={env.get('NEO4J_URI')}, NEO4J_USER={env.get('NEO4J_USER')}, NEO4J_PASSWORD={pwd_debug}[/]")
976
+ console.print(f"[dim]Debug: Password in config: {'YES' if 'NEO4J_PASSWORD' in self.config else 'NO'}[/]")
943
977
  except Exception as e:
944
978
  console.print("[yellow]![/] Impossibile eseguire apply_schema (modulo mancante o errore runtime).")
945
- console.print(str(e)[:300])
979
+ console.print(str(e))
946
980
 
947
981
  console.print()
948
982
 
@@ -1067,7 +1101,7 @@ volumes:
1067
1101
  f"[bold]User:[/] neo4j\n"
1068
1102
  f"[bold]Password:[/] {neo4j_pass}\n\n"
1069
1103
  "[bold]Query per vedere il grafo:[/]\n"
1070
- "[cyan]MATCH (n)-[r]->(m) RETURN n, r, m LIMIT 100[/]\n\n"
1104
+ "[cyan]MATCH (n)-\[r]->(m) RETURN n, r, m LIMIT 100[/]\n\n"
1071
1105
  "[dim]Copia la query sopra nel Neo4j Browser per visualizzare tutti i nodi e relazioni![/]",
1072
1106
  title="🔗 Quick Start",
1073
1107
  border_style="cyan"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: kg-mcp
3
- Version: 0.1.8
3
+ Version: 0.1.10
4
4
  Summary: Memory/Knowledge Graph MCP Server for IDE Assistants - Persistent context and knowledge for AI coding agents
5
5
  Project-URL: Homepage, https://github.com/Hexecu/mcp-neuralmemory
6
6
  Project-URL: Documentation, https://github.com/Hexecu/mcp-neuralmemory#readme
@@ -4,7 +4,7 @@ kg_mcp/config.py,sha256=9ryFQLG28B_v-PGv-D_2ojm5oU2EhNFxbq4qAv_hOyM,3479
4
4
  kg_mcp/main.py,sha256=oprRN_yyZ5QIHOivYr923xl-_BWzizKvXEAOgtin-hg,5614
5
5
  kg_mcp/utils.py,sha256=_4DlV2PtftJjR5Ak4lFzxdNuIrbyczIVenWhqKkX5zk,2810
6
6
  kg_mcp/cli/__init__.py,sha256=-i85AHO1gqjeqEYqIkSjfW9Ik0LWbhrTPuhUCIk7eD4,60
7
- kg_mcp/cli/setup.py,sha256=1d4jmR6Tuaf9kGNQWOcmrCoIMqeH3rMYZGDdBLdH39s,44376
7
+ kg_mcp/cli/setup.py,sha256=0us_U2gj69ZnNKtZfwy70JNSRFIa0ciZht2bwykjiwQ,46716
8
8
  kg_mcp/cli/status.py,sha256=0-_CiISA5maBgliQXl6S7B5WfpEc8nUuQI6S1QE_mLk,12651
9
9
  kg_mcp/codegraph/__init__.py,sha256=Erh3mMg5FlbN0kzMJAzCpizcrjrNX0LuZHawKOECskE,68
10
10
  kg_mcp/codegraph/indexer.py,sha256=H-QTMmrLsgzL4jXzhgLUagFGUyDfkm9cX-B-9ip_7TA,9130
@@ -30,7 +30,7 @@ kg_mcp/mcp/tools.py,sha256=8CpBsO-_y7rW6wRb00NQJ73ENqgj7rUwzi76QGmKqZA,20172
30
30
  kg_mcp/security/__init__.py,sha256=zvxT3XvZQLqMaj1IiKOYXlQDmQrolXpEErn8-LSe-a8,65
31
31
  kg_mcp/security/auth.py,sha256=4GLUguNnlvwA8G1cAjbQlMvndyJYxecEv1REQFnhk4s,3218
32
32
  kg_mcp/security/origin.py,sha256=fRm-w_URkT7sF0D8aRnt3xXXXkfYREBAydHKdrTrbtg,3068
33
- kg_mcp-0.1.8.dist-info/METADATA,sha256=Wkbq5TbXdVmHxZn81I0FfK3ddpxminN0RMMxZAY3E7o,3026
34
- kg_mcp-0.1.8.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
35
- kg_mcp-0.1.8.dist-info/entry_points.txt,sha256=rWKJ-LdGRIRnTAALNI0ZJ7H1Nclnn8C76OLwt3QjUiE,120
36
- kg_mcp-0.1.8.dist-info/RECORD,,
33
+ kg_mcp-0.1.10.dist-info/METADATA,sha256=94_YyUc3GuwQYHpedKfk8PIp4sk-jBLa3IcbjmBKWsY,3027
34
+ kg_mcp-0.1.10.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
35
+ kg_mcp-0.1.10.dist-info/entry_points.txt,sha256=rWKJ-LdGRIRnTAALNI0ZJ7H1Nclnn8C76OLwt3QjUiE,120
36
+ kg_mcp-0.1.10.dist-info/RECORD,,