mcp-sqlite-memory-bank 1.6.0__py3-none-any.whl → 1.6.2__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.
- mcp_sqlite_memory_bank/__init__.py +2 -2
- mcp_sqlite_memory_bank/__main__.py +4 -12
- mcp_sqlite_memory_bank/database.py +25 -73
- mcp_sqlite_memory_bank/prompts.py +12 -20
- mcp_sqlite_memory_bank/resources.py +13 -39
- mcp_sqlite_memory_bank/semantic.py +10 -31
- mcp_sqlite_memory_bank/server.py +27 -57
- mcp_sqlite_memory_bank/tools/analytics.py +18 -55
- mcp_sqlite_memory_bank/tools/basic.py +23 -20
- mcp_sqlite_memory_bank/tools/discovery.py +34 -97
- mcp_sqlite_memory_bank/tools/search.py +6 -17
- mcp_sqlite_memory_bank/utils.py +4 -13
- {mcp_sqlite_memory_bank-1.6.0.dist-info → mcp_sqlite_memory_bank-1.6.2.dist-info}/METADATA +1 -1
- mcp_sqlite_memory_bank-1.6.2.dist-info/RECORD +21 -0
- mcp_sqlite_memory_bank-1.6.0.dist-info/RECORD +0 -21
- {mcp_sqlite_memory_bank-1.6.0.dist-info → mcp_sqlite_memory_bank-1.6.2.dist-info}/WHEEL +0 -0
- {mcp_sqlite_memory_bank-1.6.0.dist-info → mcp_sqlite_memory_bank-1.6.2.dist-info}/entry_points.txt +0 -0
- {mcp_sqlite_memory_bank-1.6.0.dist-info → mcp_sqlite_memory_bank-1.6.2.dist-info}/licenses/LICENSE +0 -0
- {mcp_sqlite_memory_bank-1.6.0.dist-info → mcp_sqlite_memory_bank-1.6.2.dist-info}/top_level.txt +0 -0
@@ -9,8 +9,7 @@ discovery processes.
|
|
9
9
|
Author: Robert Meisner
|
10
10
|
"""
|
11
11
|
|
12
|
-
import
|
13
|
-
from typing import Any, Dict, List, Optional, cast, Union
|
12
|
+
from typing import Any, Dict, List, Optional, cast
|
14
13
|
from datetime import datetime
|
15
14
|
|
16
15
|
from ..database import get_database
|
@@ -112,17 +111,13 @@ def intelligent_discovery(
|
|
112
111
|
# Step 2: Content analysis based on goal
|
113
112
|
if discovery_goal in ["understand_content", "find_patterns", "assess_quality"]:
|
114
113
|
discovery_session["steps_completed"].append("content_analysis")
|
115
|
-
content_analysis = _analyze_content_for_discovery(
|
116
|
-
db, tables, focus_area, depth
|
117
|
-
)
|
114
|
+
content_analysis = _analyze_content_for_discovery(db, tables, focus_area, depth)
|
118
115
|
overview.update(content_analysis)
|
119
116
|
|
120
117
|
# Step 3: Schema analysis for structure exploration
|
121
118
|
if discovery_goal in ["explore_structure", "understand_content"]:
|
122
119
|
discovery_session["steps_completed"].append("schema_analysis")
|
123
|
-
schema_analysis = _analyze_schema_for_discovery(
|
124
|
-
db, tables, focus_area, depth
|
125
|
-
)
|
120
|
+
schema_analysis = _analyze_schema_for_discovery(db, tables, focus_area, depth)
|
126
121
|
overview.update(schema_analysis)
|
127
122
|
|
128
123
|
# Step 4: Quality assessment
|
@@ -164,9 +159,7 @@ def intelligent_discovery(
|
|
164
159
|
},
|
165
160
|
"next_steps": next_steps,
|
166
161
|
"discovery_session": discovery_session,
|
167
|
-
"quick_actions": _generate_quick_actions(
|
168
|
-
discovery_goal, overview, focus_area
|
169
|
-
),
|
162
|
+
"quick_actions": _generate_quick_actions(discovery_goal, overview, focus_area),
|
170
163
|
},
|
171
164
|
)
|
172
165
|
|
@@ -612,10 +605,7 @@ def discover_relationships(
|
|
612
605
|
)
|
613
606
|
|
614
607
|
# Discover semantic similarity relationships
|
615
|
-
if (
|
616
|
-
"semantic_similarity" in relationship_types
|
617
|
-
and is_semantic_search_available()
|
618
|
-
):
|
608
|
+
if "semantic_similarity" in relationship_types and is_semantic_search_available():
|
619
609
|
semantic_relationships = _discover_semantic_relationships(
|
620
610
|
db, target_table, all_tables, similarity_threshold
|
621
611
|
)
|
@@ -638,9 +628,7 @@ def discover_relationships(
|
|
638
628
|
|
639
629
|
# Discover naming pattern relationships
|
640
630
|
if "naming_patterns" in relationship_types:
|
641
|
-
naming_relationships = _discover_naming_relationships(
|
642
|
-
target_table, all_tables
|
643
|
-
)
|
631
|
+
naming_relationships = _discover_naming_relationships(target_table, all_tables)
|
644
632
|
table_relationships["naming_related"] = naming_relationships
|
645
633
|
if naming_relationships:
|
646
634
|
insights.append(
|
@@ -676,13 +664,9 @@ def discover_relationships(
|
|
676
664
|
"relationship_summary": {
|
677
665
|
"total_relationships": total_relationships,
|
678
666
|
"tables_analyzed": len(relationships),
|
679
|
-
"strongest_connections": _identify_strongest_connections(
|
680
|
-
relationships
|
681
|
-
),
|
667
|
+
"strongest_connections": _identify_strongest_connections(relationships),
|
682
668
|
},
|
683
|
-
"recommendations": _generate_relationship_recommendations(
|
684
|
-
relationships, insights
|
685
|
-
),
|
669
|
+
"recommendations": _generate_relationship_recommendations(relationships, insights),
|
686
670
|
},
|
687
671
|
)
|
688
672
|
|
@@ -777,16 +761,12 @@ def _analyze_schema_for_discovery(
|
|
777
761
|
schema_analysis["total_columns"] += len(columns)
|
778
762
|
|
779
763
|
# Find text columns
|
780
|
-
text_columns = [
|
781
|
-
col for col in columns if "TEXT" in col.get("type", "").upper()
|
782
|
-
]
|
764
|
+
text_columns = [col for col in columns if "TEXT" in col.get("type", "").upper()]
|
783
765
|
schema_analysis["text_columns_by_table"][table_name] = len(text_columns)
|
784
766
|
|
785
767
|
# Check for well-structured tables
|
786
768
|
has_id = any(col.get("name") == "id" for col in columns)
|
787
|
-
has_timestamp = any(
|
788
|
-
"timestamp" in col.get("name", "").lower() for col in columns
|
789
|
-
)
|
769
|
+
has_timestamp = any("timestamp" in col.get("name", "").lower() for col in columns)
|
790
770
|
has_text_content = len(text_columns) > 0
|
791
771
|
|
792
772
|
if has_id and has_timestamp and has_text_content:
|
@@ -798,9 +778,7 @@ def _analyze_schema_for_discovery(
|
|
798
778
|
f"Table '{table_name}' has very few columns"
|
799
779
|
)
|
800
780
|
if not has_id:
|
801
|
-
schema_analysis["schema_issues"].append(
|
802
|
-
f"Table '{table_name}' lacks ID column"
|
803
|
-
)
|
781
|
+
schema_analysis["schema_issues"].append(f"Table '{table_name}' lacks ID column")
|
804
782
|
|
805
783
|
except Exception:
|
806
784
|
continue
|
@@ -846,9 +824,7 @@ def _assess_content_quality(
|
|
846
824
|
non_null_fields = sum(
|
847
825
|
1 for v in row.values() if v is not None and str(v).strip()
|
848
826
|
)
|
849
|
-
total_content_length = sum(
|
850
|
-
len(str(v)) for v in row.values() if v is not None
|
851
|
-
)
|
827
|
+
total_content_length = sum(len(str(v)) for v in row.values() if v is not None)
|
852
828
|
|
853
829
|
# Score based on completeness and content richness
|
854
830
|
if non_null_fields > 2:
|
@@ -860,9 +836,7 @@ def _assess_content_quality(
|
|
860
836
|
|
861
837
|
content_scores.append(min(10, row_score))
|
862
838
|
|
863
|
-
table_quality = (
|
864
|
-
sum(content_scores) / len(content_scores) if content_scores else 0
|
865
|
-
)
|
839
|
+
table_quality = sum(content_scores) / len(content_scores) if content_scores else 0
|
866
840
|
quality_analysis["quality_scores"][table_name] = round(table_quality, 1)
|
867
841
|
|
868
842
|
# Categorize quality
|
@@ -889,9 +863,7 @@ def _assess_content_quality(
|
|
889
863
|
return quality_analysis
|
890
864
|
|
891
865
|
|
892
|
-
def _analyze_search_readiness(
|
893
|
-
db, tables: List[str], focus_area: Optional[str]
|
894
|
-
) -> Dict[str, Any]:
|
866
|
+
def _analyze_search_readiness(db, tables: List[str], focus_area: Optional[str]) -> Dict[str, Any]:
|
895
867
|
"""Analyze readiness for effective searching."""
|
896
868
|
search_analysis = {
|
897
869
|
"semantic_ready_tables": [],
|
@@ -908,9 +880,7 @@ def _analyze_search_readiness(
|
|
908
880
|
schema_result = db.describe_table(table_name)
|
909
881
|
if schema_result.get("success"):
|
910
882
|
columns = schema_result.get("columns", [])
|
911
|
-
text_columns = [
|
912
|
-
col for col in columns if "TEXT" in col.get("type", "").upper()
|
913
|
-
]
|
883
|
+
text_columns = [col for col in columns if "TEXT" in col.get("type", "").upper()]
|
914
884
|
|
915
885
|
if text_columns:
|
916
886
|
search_analysis["text_searchable_tables"].append(table_name)
|
@@ -923,13 +893,9 @@ def _analyze_search_readiness(
|
|
923
893
|
search_analysis["embedding_coverage"][table_name] = coverage
|
924
894
|
|
925
895
|
if coverage > 80:
|
926
|
-
search_analysis["semantic_ready_tables"].append(
|
927
|
-
table_name
|
928
|
-
)
|
896
|
+
search_analysis["semantic_ready_tables"].append(table_name)
|
929
897
|
elif len(text_columns) > 0:
|
930
|
-
search_analysis["search_optimization_needed"].append(
|
931
|
-
table_name
|
932
|
-
)
|
898
|
+
search_analysis["search_optimization_needed"].append(table_name)
|
933
899
|
|
934
900
|
except Exception:
|
935
901
|
continue
|
@@ -950,15 +916,11 @@ def _generate_discovery_insights(
|
|
950
916
|
|
951
917
|
# Goal-specific insights
|
952
918
|
if discovery_goal == "understand_content":
|
953
|
-
insights.append(
|
954
|
-
f"Memory bank contains {total_tables} tables with {total_rows} total rows"
|
955
|
-
)
|
919
|
+
insights.append(f"Memory bank contains {total_tables} tables with {total_rows} total rows")
|
956
920
|
|
957
921
|
high_value_tables = overview.get("high_value_tables", [])
|
958
922
|
if high_value_tables:
|
959
|
-
insights.append(
|
960
|
-
f"High-value content found in: {', '.join(high_value_tables[:3])}"
|
961
|
-
)
|
923
|
+
insights.append(f"High-value content found in: {', '.join(high_value_tables[:3])}")
|
962
924
|
recommendations.append(
|
963
925
|
f"Focus search efforts on high-value tables: {', '.join(high_value_tables)}"
|
964
926
|
)
|
@@ -974,9 +936,7 @@ def _generate_discovery_insights(
|
|
974
936
|
elif discovery_goal == "find_patterns":
|
975
937
|
text_rich_tables = overview.get("text_rich_tables", [])
|
976
938
|
if text_rich_tables:
|
977
|
-
insights.append(
|
978
|
-
f"Text-rich content found in {len(text_rich_tables)} tables"
|
979
|
-
)
|
939
|
+
insights.append(f"Text-rich content found in {len(text_rich_tables)} tables")
|
980
940
|
next_steps.append("Use semantic search to find content patterns")
|
981
941
|
|
982
942
|
quality_scores = overview.get("quality_scores", {})
|
@@ -1010,20 +970,14 @@ def _generate_discovery_insights(
|
|
1010
970
|
next_steps.append("Use auto_semantic_search() for conceptual queries")
|
1011
971
|
|
1012
972
|
if optimization_needed:
|
1013
|
-
insights.append(
|
1014
|
-
|
1015
|
-
)
|
1016
|
-
next_steps.append(
|
1017
|
-
f"Set up embeddings for: {', '.join(optimization_needed[:2])}"
|
1018
|
-
)
|
973
|
+
insights.append(f"Search optimization needed for {len(optimization_needed)} tables")
|
974
|
+
next_steps.append(f"Set up embeddings for: {', '.join(optimization_needed[:2])}")
|
1019
975
|
|
1020
976
|
# Universal recommendations
|
1021
977
|
if overview.get("semantic_search_available"):
|
1022
978
|
recommendations.append("Use auto_smart_search() for best search results")
|
1023
979
|
else:
|
1024
|
-
recommendations.append(
|
1025
|
-
"Install sentence-transformers for semantic search capabilities"
|
1026
|
-
)
|
980
|
+
recommendations.append("Install sentence-transformers for semantic search capabilities")
|
1027
981
|
|
1028
982
|
if not next_steps:
|
1029
983
|
next_steps.append("Use explore_tables() for detailed content examination")
|
@@ -1077,9 +1031,7 @@ def _store_discovery_pattern(db, discovery_session: Dict[str, Any]) -> None:
|
|
1077
1031
|
try:
|
1078
1032
|
# Check if discovery_patterns table exists
|
1079
1033
|
tables_result = db.list_tables()
|
1080
|
-
if tables_result.get("success") and "discovery_patterns" in tables_result.get(
|
1081
|
-
"tables", []
|
1082
|
-
):
|
1034
|
+
if tables_result.get("success") and "discovery_patterns" in tables_result.get("tables", []):
|
1083
1035
|
# Store the discovery session
|
1084
1036
|
db.insert_row(
|
1085
1037
|
"discovery_patterns",
|
@@ -1088,9 +1040,7 @@ def _store_discovery_pattern(db, discovery_session: Dict[str, Any]) -> None:
|
|
1088
1040
|
"goal": discovery_session.get("goal"),
|
1089
1041
|
"focus_area": discovery_session.get("focus_area"),
|
1090
1042
|
"depth": discovery_session.get("depth"),
|
1091
|
-
"steps_completed": str(
|
1092
|
-
discovery_session.get("steps_completed", [])
|
1093
|
-
),
|
1043
|
+
"steps_completed": str(discovery_session.get("steps_completed", [])),
|
1094
1044
|
"success": True,
|
1095
1045
|
"timestamp": discovery_session.get("timestamp"),
|
1096
1046
|
},
|
@@ -1156,20 +1106,13 @@ def _discover_foreign_keys(db, target_table: str, all_tables: List[str]) -> List
|
|
1156
1106
|
col_name = col.get("name", "")
|
1157
1107
|
# Look for naming patterns that suggest foreign keys
|
1158
1108
|
if col_name.endswith("_id") or col_name.endswith("Id"):
|
1159
|
-
potential_ref = col_name.replace("_id", "").replace(
|
1160
|
-
|
1161
|
-
)
|
1162
|
-
if (
|
1163
|
-
potential_ref == target_table
|
1164
|
-
or f"{potential_ref}s" == target_table
|
1165
|
-
):
|
1109
|
+
potential_ref = col_name.replace("_id", "").replace("Id", "")
|
1110
|
+
if potential_ref == target_table or f"{potential_ref}s" == target_table:
|
1166
1111
|
relationships.append(f"{other_table}.{col_name}")
|
1167
1112
|
|
1168
1113
|
# Look for exact column name matches (potential shared keys)
|
1169
1114
|
if col_name in target_col_names and col_name != "id":
|
1170
|
-
relationships.append(
|
1171
|
-
f"{other_table}.{col_name} (shared key)"
|
1172
|
-
)
|
1115
|
+
relationships.append(f"{other_table}.{col_name} (shared key)")
|
1173
1116
|
|
1174
1117
|
except Exception:
|
1175
1118
|
continue
|
@@ -1197,9 +1140,7 @@ def _discover_semantic_relationships(
|
|
1197
1140
|
|
1198
1141
|
# Create a sample query from target table content
|
1199
1142
|
sample_row = target_rows["rows"][0]
|
1200
|
-
sample_text = " ".join(str(v) for v in sample_row.values() if v is not None)[
|
1201
|
-
:200
|
1202
|
-
]
|
1143
|
+
sample_text = " ".join(str(v) for v in sample_row.values() if v is not None)[:200]
|
1203
1144
|
|
1204
1145
|
if len(sample_text.strip()) < 10:
|
1205
1146
|
return relationships
|
@@ -1223,9 +1164,9 @@ def _discover_semantic_relationships(
|
|
1223
1164
|
|
1224
1165
|
if search_result.get("success") and search_result.get("results"):
|
1225
1166
|
results = search_result["results"]
|
1226
|
-
avg_similarity = sum(
|
1227
|
-
|
1228
|
-
)
|
1167
|
+
avg_similarity = sum(r.get("similarity_score", 0) for r in results) / len(
|
1168
|
+
results
|
1169
|
+
)
|
1229
1170
|
|
1230
1171
|
if avg_similarity >= threshold:
|
1231
1172
|
relationships.append(
|
@@ -1245,9 +1186,7 @@ def _discover_semantic_relationships(
|
|
1245
1186
|
return relationships
|
1246
1187
|
|
1247
1188
|
|
1248
|
-
def _discover_temporal_relationships(
|
1249
|
-
db, target_table: str, all_tables: List[str]
|
1250
|
-
) -> List[str]:
|
1189
|
+
def _discover_temporal_relationships(db, target_table: str, all_tables: List[str]) -> List[str]:
|
1251
1190
|
"""Discover temporal pattern relationships."""
|
1252
1191
|
relationships = []
|
1253
1192
|
|
@@ -1296,9 +1235,7 @@ def _discover_temporal_relationships(
|
|
1296
1235
|
return relationships
|
1297
1236
|
|
1298
1237
|
|
1299
|
-
def _discover_naming_relationships(
|
1300
|
-
target_table: str, all_tables: List[str]
|
1301
|
-
) -> List[str]:
|
1238
|
+
def _discover_naming_relationships(target_table: str, all_tables: List[str]) -> List[str]:
|
1302
1239
|
"""Discover relationships based on naming conventions."""
|
1303
1240
|
relationships = []
|
1304
1241
|
|
@@ -7,12 +7,11 @@ semantic search, embedding management, and intelligent search capabilities.
|
|
7
7
|
|
8
8
|
import logging
|
9
9
|
import traceback
|
10
|
-
from typing import
|
10
|
+
from typing import List, Optional, cast
|
11
11
|
|
12
12
|
from ..database import get_database
|
13
|
-
from ..types import
|
13
|
+
from ..types import ToolResponse
|
14
14
|
from ..utils import catch_errors
|
15
|
-
from ..semantic import is_semantic_search_available
|
16
15
|
|
17
16
|
|
18
17
|
@catch_errors
|
@@ -24,9 +23,7 @@ def search_content(
|
|
24
23
|
"""Perform full-text search across table content using natural language queries."""
|
25
24
|
from .. import server
|
26
25
|
|
27
|
-
return cast(
|
28
|
-
ToolResponse, get_database(server.DB_PATH).search_content(query, tables, limit)
|
29
|
-
)
|
26
|
+
return cast(ToolResponse, get_database(server.DB_PATH).search_content(query, tables, limit))
|
30
27
|
|
31
28
|
|
32
29
|
@catch_errors
|
@@ -228,10 +225,7 @@ def auto_semantic_search(
|
|
228
225
|
columns = schema_result.get("columns", [])
|
229
226
|
if isinstance(columns, list):
|
230
227
|
for col in columns:
|
231
|
-
if (
|
232
|
-
isinstance(col, dict)
|
233
|
-
and "TEXT" in col.get("type", "").upper()
|
234
|
-
):
|
228
|
+
if isinstance(col, dict) and "TEXT" in col.get("type", "").upper():
|
235
229
|
text_columns.append(col["name"])
|
236
230
|
|
237
231
|
# Auto-embed text columns
|
@@ -365,10 +359,7 @@ def auto_smart_search(
|
|
365
359
|
columns = schema_result.get("columns", [])
|
366
360
|
if isinstance(columns, list):
|
367
361
|
for col in columns:
|
368
|
-
if (
|
369
|
-
isinstance(col, dict)
|
370
|
-
and "TEXT" in col.get("type", "").upper()
|
371
|
-
):
|
362
|
+
if isinstance(col, dict) and "TEXT" in col.get("type", "").upper():
|
372
363
|
text_columns.append(col["name"])
|
373
364
|
|
374
365
|
# Auto-embed text columns
|
@@ -397,9 +388,7 @@ def auto_smart_search(
|
|
397
388
|
)
|
398
389
|
except Exception as search_error:
|
399
390
|
# If hybrid search fails, fall back to regular content search
|
400
|
-
logging.warning(
|
401
|
-
f"Hybrid search failed, falling back to content search: {search_error}"
|
402
|
-
)
|
391
|
+
logging.warning(f"Hybrid search failed, falling back to content search: {search_error}")
|
403
392
|
try:
|
404
393
|
fallback_result = get_database(server.DB_PATH).search_content(
|
405
394
|
query, search_tables, limit
|
mcp_sqlite_memory_bank/utils.py
CHANGED
@@ -110,9 +110,7 @@ def get_table_columns(conn: sqlite3.Connection, table_name: str) -> List[str]:
|
|
110
110
|
cur.execute(f"PRAGMA table_info({table_name})")
|
111
111
|
columns = [row[1] for row in cur.fetchall()]
|
112
112
|
if not columns:
|
113
|
-
raise SchemaError(
|
114
|
-
f"Table does not exist: {table_name}", {"table_name": table_name}
|
115
|
-
)
|
113
|
+
raise SchemaError(f"Table does not exist: {table_name}", {"table_name": table_name})
|
116
114
|
return columns
|
117
115
|
|
118
116
|
|
@@ -164,13 +162,9 @@ def validate_table_exists(conn: sqlite3.Connection, table_name: str) -> None:
|
|
164
162
|
table_name: Name of table to check
|
165
163
|
"""
|
166
164
|
cur = conn.cursor()
|
167
|
-
cur.execute(
|
168
|
-
"SELECT name FROM sqlite_master WHERE type='table' AND name=?", (table_name,)
|
169
|
-
)
|
165
|
+
cur.execute("SELECT name FROM sqlite_master WHERE type='table' AND name=?", (table_name,))
|
170
166
|
if not cur.fetchone():
|
171
|
-
raise SchemaError(
|
172
|
-
f"Table does not exist: {table_name}", {"table_name": table_name}
|
173
|
-
)
|
167
|
+
raise SchemaError(f"Table does not exist: {table_name}", {"table_name": table_name})
|
174
168
|
|
175
169
|
|
176
170
|
def build_where_clause(
|
@@ -229,7 +223,6 @@ def suggest_recovery(error: Exception, function_name: str) -> Dict[str, Any]:
|
|
229
223
|
}
|
230
224
|
|
231
225
|
error_str = str(error).lower()
|
232
|
-
error_type = type(error).__name__
|
233
226
|
|
234
227
|
# Dependency-related errors
|
235
228
|
if "sentence-transformers" in error_str or "transformers" in error_str:
|
@@ -382,9 +375,7 @@ def enhanced_catch_errors(
|
|
382
375
|
|
383
376
|
# Determine error category
|
384
377
|
if isinstance(e, MemoryBankError):
|
385
|
-
category = (
|
386
|
-
e.category.name if hasattr(e, "category") else "MEMORY_BANK"
|
387
|
-
)
|
378
|
+
category = e.category.name if hasattr(e, "category") else "MEMORY_BANK"
|
388
379
|
return cast(
|
389
380
|
ToolResponse,
|
390
381
|
{
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: mcp_sqlite_memory_bank
|
3
|
-
Version: 1.6.
|
3
|
+
Version: 1.6.2
|
4
4
|
Summary: A dynamic, agent/LLM-friendly SQLite memory bank for MCP servers with semantic search capabilities.
|
5
5
|
Author-email: Robert Meisner <robert@catchit.pl>
|
6
6
|
License-Expression: MIT
|
@@ -0,0 +1,21 @@
|
|
1
|
+
mcp_sqlite_memory_bank/__init__.py,sha256=nM63WzpIHto4Xc5pEMVW0xuJ4g5K1Y76M2mnPupV0x0,2795
|
2
|
+
mcp_sqlite_memory_bank/__main__.py,sha256=tPbJP9vC6V_2lLOGiiHof-katnc0FXcRqcRWk4SstZ0,2014
|
3
|
+
mcp_sqlite_memory_bank/database.py,sha256=pxnhtjglDXOHy-DVpzjgsYTRGjHlJ3V3I7MBNrMULfs,49277
|
4
|
+
mcp_sqlite_memory_bank/prompts.py,sha256=cZixeyqSirMwCKBfTHJMfYEFh4xzEf6V_M3QFSuTWdM,11769
|
5
|
+
mcp_sqlite_memory_bank/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
|
+
mcp_sqlite_memory_bank/resources.py,sha256=6rZfpPtS5gEu2WIaQJUxgxFsDqgQYcNtkv3kVxFX4jA,22972
|
7
|
+
mcp_sqlite_memory_bank/semantic.py,sha256=W71SHC44qpptcCYklR8T2shChtdTHrDb8VlIxMu4PLc,15650
|
8
|
+
mcp_sqlite_memory_bank/server.py,sha256=tY_7Uam30NUo-I5VT2LQ-XK3N6JVkAnoIZ5vxvTBxWM,49423
|
9
|
+
mcp_sqlite_memory_bank/types.py,sha256=kK8HUz3szwiV9cUJkO56RpnosXEssQT1t0w_166ik5k,6756
|
10
|
+
mcp_sqlite_memory_bank/utils.py,sha256=rTJ1PI2uBQw9h7RT4EAcRLYV2HQIuaxFGmqAd1CKRig,15064
|
11
|
+
mcp_sqlite_memory_bank/tools/__init__.py,sha256=00TDY78qXLdeaXxcK53xFKlEiY9flHQCuIGnEh5rghg,1786
|
12
|
+
mcp_sqlite_memory_bank/tools/analytics.py,sha256=lGvXZbmPR26l96iRibAeZ--O9ykxs05XZZRXefe8MKk,19583
|
13
|
+
mcp_sqlite_memory_bank/tools/basic.py,sha256=k_ypt1qfcbekz829uvegydTr9ZkEiuSgwCZUjKRMzs4,19082
|
14
|
+
mcp_sqlite_memory_bank/tools/discovery.py,sha256=_Y9dHKSA00qLUodcb80Cm1mmCM5Uh3C-4MCzD_rEoYI,56059
|
15
|
+
mcp_sqlite_memory_bank/tools/search.py,sha256=NXBrKsOJD3vaWM0jAc7M9DnI--IveCNEnq-DnfphVhA,16993
|
16
|
+
mcp_sqlite_memory_bank-1.6.2.dist-info/licenses/LICENSE,sha256=KPr7eFgCJqQIjeSAcwRafbjcgm-10zkrJ7MFoTOGJQg,1092
|
17
|
+
mcp_sqlite_memory_bank-1.6.2.dist-info/METADATA,sha256=X_OWksy928VPc5SmQlXTv3MGpgqrqkxSdD20iwYQX4s,35536
|
18
|
+
mcp_sqlite_memory_bank-1.6.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
19
|
+
mcp_sqlite_memory_bank-1.6.2.dist-info/entry_points.txt,sha256=S9yGWiCe8f_rgcGCgbwEAX2FfJ9jXWxcc4K4Jenbcn8,150
|
20
|
+
mcp_sqlite_memory_bank-1.6.2.dist-info/top_level.txt,sha256=xQ8MTGECpWMR-9DV4H8mMqaSoZqE-C8EvpOg9E2U1wM,23
|
21
|
+
mcp_sqlite_memory_bank-1.6.2.dist-info/RECORD,,
|
@@ -1,21 +0,0 @@
|
|
1
|
-
mcp_sqlite_memory_bank/__init__.py,sha256=watSgbtYk6AHB57GzJ09w_KXSPMqnyKFRk6cnQ5hCF0,2795
|
2
|
-
mcp_sqlite_memory_bank/__main__.py,sha256=AZ6JPKw1C2hM2MdB6opAysXFFGaO5aXcLbkMVNlxzxU,2110
|
3
|
-
mcp_sqlite_memory_bank/database.py,sha256=NadWM9QB_5TOVmtKBHwZSJjIdg4KD0TiTBn9oU4tjyw,50489
|
4
|
-
mcp_sqlite_memory_bank/prompts.py,sha256=x9EfzAaWPXlpblM2cDyPV5xuG0Q3pjXmT64g1TVQ5RM,11901
|
5
|
-
mcp_sqlite_memory_bank/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
6
|
-
mcp_sqlite_memory_bank/resources.py,sha256=GF_Lqr-Of6e0R2ZauCASdlfafQxZUzCHKrIU6aLkmyI,23720
|
7
|
-
mcp_sqlite_memory_bank/semantic.py,sha256=ZxYmZetn_bvqE-bW6Sy_MMpsKhXnO4KgplgVO5CvHNQ,16021
|
8
|
-
mcp_sqlite_memory_bank/server.py,sha256=V3dLdsKSJcQCWWSN_VFchHeDmxF3xfW2aA0VI8k3qps,49694
|
9
|
-
mcp_sqlite_memory_bank/types.py,sha256=kK8HUz3szwiV9cUJkO56RpnosXEssQT1t0w_166ik5k,6756
|
10
|
-
mcp_sqlite_memory_bank/utils.py,sha256=08sdnEBLFhaGg3zrqOFPkLdv2ZnTZ8ggWe-ILysNlDk,15217
|
11
|
-
mcp_sqlite_memory_bank/tools/__init__.py,sha256=00TDY78qXLdeaXxcK53xFKlEiY9flHQCuIGnEh5rghg,1786
|
12
|
-
mcp_sqlite_memory_bank/tools/analytics.py,sha256=B7Rc1t6Imf7cC4NRgjGETYdSrfMt5wqE7plr-UpaC-k,20530
|
13
|
-
mcp_sqlite_memory_bank/tools/basic.py,sha256=TSoleUkDwizaE2A4r3G2g92rNTOImXV5inhy8sBfnFQ,18414
|
14
|
-
mcp_sqlite_memory_bank/tools/discovery.py,sha256=NIYY-UX5OfzE0pLGToHF9j9KvBPzWOPM3DR3J-afWzo,57290
|
15
|
-
mcp_sqlite_memory_bank/tools/search.py,sha256=5Nek8xWPtlcBlVcHM4tDeZ1wiUxX_ispwaDOB5k6sAo,17311
|
16
|
-
mcp_sqlite_memory_bank-1.6.0.dist-info/licenses/LICENSE,sha256=KPr7eFgCJqQIjeSAcwRafbjcgm-10zkrJ7MFoTOGJQg,1092
|
17
|
-
mcp_sqlite_memory_bank-1.6.0.dist-info/METADATA,sha256=wbjNDb6LCETv8OqYiowtKObEzskMl1k6WwG87vPO8Q4,35536
|
18
|
-
mcp_sqlite_memory_bank-1.6.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
19
|
-
mcp_sqlite_memory_bank-1.6.0.dist-info/entry_points.txt,sha256=S9yGWiCe8f_rgcGCgbwEAX2FfJ9jXWxcc4K4Jenbcn8,150
|
20
|
-
mcp_sqlite_memory_bank-1.6.0.dist-info/top_level.txt,sha256=xQ8MTGECpWMR-9DV4H8mMqaSoZqE-C8EvpOg9E2U1wM,23
|
21
|
-
mcp_sqlite_memory_bank-1.6.0.dist-info/RECORD,,
|
File without changes
|
{mcp_sqlite_memory_bank-1.6.0.dist-info → mcp_sqlite_memory_bank-1.6.2.dist-info}/entry_points.txt
RENAMED
File without changes
|
{mcp_sqlite_memory_bank-1.6.0.dist-info → mcp_sqlite_memory_bank-1.6.2.dist-info}/licenses/LICENSE
RENAMED
File without changes
|
{mcp_sqlite_memory_bank-1.6.0.dist-info → mcp_sqlite_memory_bank-1.6.2.dist-info}/top_level.txt
RENAMED
File without changes
|