claude-conversation-memory-mcp 0.1.0 → 0.2.1
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.
- package/README.md +88 -0
- package/dist/cli/commands.d.ts +9 -0
- package/dist/cli/commands.d.ts.map +1 -0
- package/dist/cli/commands.js +572 -0
- package/dist/cli/commands.js.map +1 -0
- package/dist/cli/help.d.ts +16 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +255 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/index.d.ts +30 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +111 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/embeddings/ConfigManager.d.ts +46 -0
- package/dist/embeddings/ConfigManager.d.ts.map +1 -0
- package/dist/embeddings/ConfigManager.js +177 -0
- package/dist/embeddings/ConfigManager.js.map +1 -0
- package/dist/embeddings/providers/OpenAIEmbeddings.d.ts.map +1 -1
- package/dist/embeddings/providers/OpenAIEmbeddings.js +1 -2
- package/dist/embeddings/providers/OpenAIEmbeddings.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +49 -115
- package/dist/index.js.map +1 -1
- package/dist/mcp-server.d.ts +22 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +120 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/parsers/ConversationParser.d.ts.map +1 -1
- package/dist/parsers/ConversationParser.js +25 -2
- package/dist/parsers/ConversationParser.js.map +1 -1
- package/package.json +7 -2
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration Manager for CLI
|
|
3
|
+
* Handles reading and writing embedding configuration
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, writeFileSync, existsSync } from "fs";
|
|
6
|
+
import { join } from "path";
|
|
7
|
+
import { homedir } from "os";
|
|
8
|
+
import { ConfigLoader } from "./EmbeddingConfig.js";
|
|
9
|
+
export class ConfigManager {
|
|
10
|
+
static CONFIG_FILENAME = ".claude-memory-config.json";
|
|
11
|
+
/**
|
|
12
|
+
* Get current effective configuration (after all precedence rules)
|
|
13
|
+
*/
|
|
14
|
+
static getCurrentConfig() {
|
|
15
|
+
return ConfigLoader.load();
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Get configuration sources breakdown
|
|
19
|
+
*/
|
|
20
|
+
static getConfigSources() {
|
|
21
|
+
const homeConfigPath = join(homedir(), this.CONFIG_FILENAME);
|
|
22
|
+
const projectConfigPath = join(process.cwd(), this.CONFIG_FILENAME);
|
|
23
|
+
const homeConfig = existsSync(homeConfigPath)
|
|
24
|
+
? this.loadConfigFile(homeConfigPath)?.embedding || null
|
|
25
|
+
: null;
|
|
26
|
+
const projectConfig = existsSync(projectConfigPath)
|
|
27
|
+
? this.loadConfigFile(projectConfigPath)?.embedding || null
|
|
28
|
+
: null;
|
|
29
|
+
const envConfig = {};
|
|
30
|
+
if (process.env.EMBEDDING_PROVIDER) {
|
|
31
|
+
envConfig.provider = process.env.EMBEDDING_PROVIDER;
|
|
32
|
+
}
|
|
33
|
+
if (process.env.EMBEDDING_MODEL) {
|
|
34
|
+
envConfig.model = process.env.EMBEDDING_MODEL;
|
|
35
|
+
}
|
|
36
|
+
if (process.env.EMBEDDING_DIMENSIONS) {
|
|
37
|
+
envConfig.dimensions = parseInt(process.env.EMBEDDING_DIMENSIONS, 10);
|
|
38
|
+
}
|
|
39
|
+
if (process.env.EMBEDDING_BASE_URL) {
|
|
40
|
+
envConfig.baseUrl = process.env.EMBEDDING_BASE_URL;
|
|
41
|
+
}
|
|
42
|
+
if (process.env.OPENAI_API_KEY) {
|
|
43
|
+
envConfig.apiKey = process.env.OPENAI_API_KEY;
|
|
44
|
+
}
|
|
45
|
+
return {
|
|
46
|
+
home: homeConfig,
|
|
47
|
+
project: projectConfig,
|
|
48
|
+
env: envConfig,
|
|
49
|
+
effective: ConfigLoader.load(),
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get a specific config value
|
|
54
|
+
*/
|
|
55
|
+
static getConfigValue(key) {
|
|
56
|
+
const config = this.getCurrentConfig();
|
|
57
|
+
switch (key) {
|
|
58
|
+
case "provider":
|
|
59
|
+
return config.provider;
|
|
60
|
+
case "model":
|
|
61
|
+
return config.model;
|
|
62
|
+
case "dimensions":
|
|
63
|
+
return config.dimensions;
|
|
64
|
+
case "baseUrl":
|
|
65
|
+
case "base_url":
|
|
66
|
+
return config.baseUrl;
|
|
67
|
+
case "apiKey":
|
|
68
|
+
case "api_key":
|
|
69
|
+
return config.apiKey;
|
|
70
|
+
default:
|
|
71
|
+
throw new Error(`Unknown config key: ${key}. Valid keys: provider, model, dimensions, baseUrl, apiKey`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Set a config value (writes to home config file)
|
|
76
|
+
*/
|
|
77
|
+
static setConfigValue(key, value) {
|
|
78
|
+
const homeConfigPath = join(homedir(), this.CONFIG_FILENAME);
|
|
79
|
+
// Load existing config or create new one
|
|
80
|
+
let config = { embedding: {} };
|
|
81
|
+
if (existsSync(homeConfigPath)) {
|
|
82
|
+
const existing = this.loadConfigFile(homeConfigPath);
|
|
83
|
+
if (existing && existing.embedding) {
|
|
84
|
+
config = { embedding: existing.embedding };
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
// Ensure embedding object exists
|
|
88
|
+
if (!config.embedding) {
|
|
89
|
+
config.embedding = {};
|
|
90
|
+
}
|
|
91
|
+
// Set the value with type conversion
|
|
92
|
+
switch (key) {
|
|
93
|
+
case "provider":
|
|
94
|
+
if (!["ollama", "transformers", "openai"].includes(value)) {
|
|
95
|
+
throw new Error(`Invalid provider: ${value}. Must be 'ollama', 'transformers', or 'openai'`);
|
|
96
|
+
}
|
|
97
|
+
config.embedding.provider = value;
|
|
98
|
+
break;
|
|
99
|
+
case "model":
|
|
100
|
+
if (!value || value.trim() === "") {
|
|
101
|
+
throw new Error("Model name cannot be empty");
|
|
102
|
+
}
|
|
103
|
+
config.embedding.model = value;
|
|
104
|
+
break;
|
|
105
|
+
case "dimensions": {
|
|
106
|
+
const dims = parseInt(value, 10);
|
|
107
|
+
if (isNaN(dims) || dims < 1 || dims > 10000) {
|
|
108
|
+
throw new Error("Dimensions must be a number between 1 and 10000");
|
|
109
|
+
}
|
|
110
|
+
config.embedding.dimensions = dims;
|
|
111
|
+
break;
|
|
112
|
+
}
|
|
113
|
+
case "baseUrl":
|
|
114
|
+
case "base_url":
|
|
115
|
+
config.embedding.baseUrl = value;
|
|
116
|
+
break;
|
|
117
|
+
case "apiKey":
|
|
118
|
+
case "api_key":
|
|
119
|
+
config.embedding.apiKey = value;
|
|
120
|
+
break;
|
|
121
|
+
default:
|
|
122
|
+
throw new Error(`Unknown config key: ${key}. Valid keys: provider, model, dimensions, baseUrl, apiKey`);
|
|
123
|
+
}
|
|
124
|
+
// Write config file
|
|
125
|
+
try {
|
|
126
|
+
writeFileSync(homeConfigPath, JSON.stringify(config, null, 2), "utf-8");
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
throw new Error(`Failed to write config file: ${error.message}`);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Get config file path (home directory)
|
|
134
|
+
*/
|
|
135
|
+
static getConfigPath() {
|
|
136
|
+
return join(homedir(), this.CONFIG_FILENAME);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Check if config file exists
|
|
140
|
+
*/
|
|
141
|
+
static configExists() {
|
|
142
|
+
return existsSync(this.getConfigPath());
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Load config file
|
|
146
|
+
*/
|
|
147
|
+
static loadConfigFile(path) {
|
|
148
|
+
try {
|
|
149
|
+
const content = readFileSync(path, "utf-8");
|
|
150
|
+
return JSON.parse(content);
|
|
151
|
+
}
|
|
152
|
+
catch (_error) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Get known model dimensions for common models
|
|
158
|
+
*/
|
|
159
|
+
static getKnownModelDimensions(model) {
|
|
160
|
+
const knownDimensions = {
|
|
161
|
+
// Ollama models
|
|
162
|
+
"mxbai-embed-large": 1024,
|
|
163
|
+
"nomic-embed-text": 768,
|
|
164
|
+
"all-minilm": 384,
|
|
165
|
+
"snowflake-arctic-embed": 1024,
|
|
166
|
+
// OpenAI models
|
|
167
|
+
"text-embedding-3-small": 1536,
|
|
168
|
+
"text-embedding-3-large": 3072,
|
|
169
|
+
"text-embedding-ada-002": 1536,
|
|
170
|
+
// Transformers models
|
|
171
|
+
"Xenova/all-MiniLM-L6-v2": 384,
|
|
172
|
+
"Xenova/all-mpnet-base-v2": 768,
|
|
173
|
+
};
|
|
174
|
+
return knownDimensions[model] || null;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=ConfigManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ConfigManager.js","sourceRoot":"","sources":["../../src/embeddings/ConfigManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAIEmbeddings.d.ts","sourceRoot":"","sources":["../../../src/embeddings/providers/OpenAIEmbeddings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAc5E,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,mBAAmB,CAAsB;gBAErC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAiC,EAAE,UAAU,CAAC,EAAE,MAAM;IAMzF;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"OpenAIEmbeddings.d.ts","sourceRoot":"","sources":["../../../src/embeddings/providers/OpenAIEmbeddings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AAc5E,qBAAa,gBAAiB,YAAW,iBAAiB;IACxD,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,mBAAmB,CAAsB;gBAErC,MAAM,EAAE,MAAM,EAAE,KAAK,GAAE,MAAiC,EAAE,UAAU,CAAC,EAAE,MAAM;IAMzF;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAiCjC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,KAAK,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC;IAoBhD;;;OAGG;IACG,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,GAAE,MAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoCnF;;OAEG;IACH,YAAY,IAAI,SAAS;IASzB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAS7B"}
|
|
@@ -23,8 +23,7 @@ export class OpenAIEmbeddings {
|
|
|
23
23
|
throw new Error("OpenAI API key required. Set OPENAI_API_KEY environment variable.");
|
|
24
24
|
}
|
|
25
25
|
// Dynamic import of OpenAI SDK (optional dependency)
|
|
26
|
-
|
|
27
|
-
const OpenAI = (await import("openai")).default;
|
|
26
|
+
const { default: OpenAI } = await import("openai");
|
|
28
27
|
this.client = new OpenAI({
|
|
29
28
|
apiKey: this.apiKey,
|
|
30
29
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"OpenAIEmbeddings.js","sourceRoot":"","sources":["../../../src/embeddings/providers/OpenAIEmbeddings.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAgBH,MAAM,OAAO,gBAAgB;IACnB,MAAM,GAAwB,IAAI,CAAC;IACnC,KAAK,CAAS;IACd,UAAU,CAAS;IACnB,MAAM,CAAS;IACf,SAAS,GAAY,KAAK,CAAC;IAC3B,mBAAmB,GAAiB,IAAI,CAAC;IAEjD,YAAY,MAAc,EAAE,QAAgB,wBAAwB,EAAE,UAAmB;QACvF,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,UAAU,GAAG,UAAU,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACnE,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC;YACH,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,mEAAmE,CAAC,CAAC;YACvF,CAAC;YAED,qDAAqD;YACrD,
|
|
1
|
+
{"version":3,"file":"OpenAIEmbeddings.js","sourceRoot":"","sources":["../../../src/embeddings/providers/OpenAIEmbeddings.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Claude Conversation Memory -
|
|
4
|
-
*
|
|
3
|
+
* Claude Conversation Memory - Main Entry Point
|
|
4
|
+
* Supports both MCP server mode and interactive CLI mode
|
|
5
5
|
*/
|
|
6
6
|
export {};
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js
CHANGED
|
@@ -1,127 +1,61 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
/**
|
|
3
|
-
* Claude Conversation Memory -
|
|
4
|
-
*
|
|
3
|
+
* Claude Conversation Memory - Main Entry Point
|
|
4
|
+
* Supports both MCP server mode and interactive CLI mode
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
9
|
-
import { ConversationMemory } from "./ConversationMemory.js";
|
|
10
|
-
import { ToolHandlers } from "./tools/ToolHandlers.js";
|
|
11
|
-
import { TOOLS } from "./tools/ToolDefinitions.js";
|
|
12
|
-
import { getSQLiteManager } from "./storage/SQLiteManager.js";
|
|
6
|
+
import { ConversationMemoryServer } from "./mcp-server.js";
|
|
7
|
+
import { ConversationMemoryCLI } from "./cli/index.js";
|
|
13
8
|
/**
|
|
14
|
-
*
|
|
9
|
+
* Detect mode based on arguments and environment
|
|
15
10
|
*/
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
this.server = new Server({
|
|
22
|
-
name: "claude-conversation-memory",
|
|
23
|
-
version: "0.1.0",
|
|
24
|
-
}, {
|
|
25
|
-
capabilities: {
|
|
26
|
-
tools: {},
|
|
27
|
-
},
|
|
28
|
-
});
|
|
29
|
-
this.memory = new ConversationMemory();
|
|
30
|
-
this.handlers = new ToolHandlers(this.memory, getSQLiteManager());
|
|
31
|
-
this.setupHandlers();
|
|
11
|
+
function detectMode() {
|
|
12
|
+
const args = process.argv.slice(2);
|
|
13
|
+
// If --server flag is present, run MCP server mode
|
|
14
|
+
if (args.includes("--server")) {
|
|
15
|
+
return "mcp";
|
|
32
16
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
setupHandlers() {
|
|
37
|
-
// List available tools
|
|
38
|
-
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
39
|
-
return {
|
|
40
|
-
tools: Object.values(TOOLS),
|
|
41
|
-
};
|
|
42
|
-
});
|
|
43
|
-
// Handle tool execution
|
|
44
|
-
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
45
|
-
const { name, arguments: args } = request.params;
|
|
46
|
-
try {
|
|
47
|
-
console.error(`[MCP] Executing tool: ${name}`);
|
|
48
|
-
let result;
|
|
49
|
-
switch (name) {
|
|
50
|
-
case "index_conversations":
|
|
51
|
-
result = await this.handlers.indexConversations(args);
|
|
52
|
-
break;
|
|
53
|
-
case "search_conversations":
|
|
54
|
-
result = await this.handlers.searchConversations(args);
|
|
55
|
-
break;
|
|
56
|
-
case "get_decisions":
|
|
57
|
-
result = await this.handlers.getDecisions(args);
|
|
58
|
-
break;
|
|
59
|
-
case "check_before_modify":
|
|
60
|
-
result = await this.handlers.checkBeforeModify(args);
|
|
61
|
-
break;
|
|
62
|
-
case "get_file_evolution":
|
|
63
|
-
result = await this.handlers.getFileEvolution(args);
|
|
64
|
-
break;
|
|
65
|
-
case "link_commits_to_conversations":
|
|
66
|
-
result = await this.handlers.linkCommitsToConversations(args);
|
|
67
|
-
break;
|
|
68
|
-
case "search_mistakes":
|
|
69
|
-
result = await this.handlers.searchMistakes(args);
|
|
70
|
-
break;
|
|
71
|
-
case "get_requirements":
|
|
72
|
-
result = await this.handlers.getRequirements(args);
|
|
73
|
-
break;
|
|
74
|
-
case "get_tool_history":
|
|
75
|
-
result = await this.handlers.getToolHistory(args);
|
|
76
|
-
break;
|
|
77
|
-
case "find_similar_sessions":
|
|
78
|
-
result = await this.handlers.findSimilarSessions(args);
|
|
79
|
-
break;
|
|
80
|
-
case "generate_documentation":
|
|
81
|
-
result = await this.handlers.generateDocumentation(args);
|
|
82
|
-
break;
|
|
83
|
-
default:
|
|
84
|
-
throw new Error(`Unknown tool: ${name}`);
|
|
85
|
-
}
|
|
86
|
-
return {
|
|
87
|
-
content: [
|
|
88
|
-
{
|
|
89
|
-
type: "text",
|
|
90
|
-
text: JSON.stringify(result, null, 2),
|
|
91
|
-
},
|
|
92
|
-
],
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
catch (error) {
|
|
96
|
-
const err = error;
|
|
97
|
-
console.error(`[MCP] Error executing tool ${name}:`, err);
|
|
98
|
-
return {
|
|
99
|
-
content: [
|
|
100
|
-
{
|
|
101
|
-
type: "text",
|
|
102
|
-
text: `Error: ${err.message}\n\nStack: ${err.stack}`,
|
|
103
|
-
},
|
|
104
|
-
],
|
|
105
|
-
isError: true,
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
});
|
|
17
|
+
// If command arguments are present (excluding --server), run single command mode
|
|
18
|
+
if (args.length > 0) {
|
|
19
|
+
return "single-command";
|
|
109
20
|
}
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
async start() {
|
|
114
|
-
const transport = new StdioServerTransport();
|
|
115
|
-
console.error("[MCP] Claude Conversation Memory Server starting...");
|
|
116
|
-
console.error(`[MCP] Database: ${getSQLiteManager().getStats().dbPath}`);
|
|
117
|
-
await this.server.connect(transport);
|
|
118
|
-
console.error("[MCP] Server ready - listening on stdio");
|
|
21
|
+
// If not a TTY (running via stdio), run MCP server mode
|
|
22
|
+
if (!process.stdin.isTTY) {
|
|
23
|
+
return "mcp";
|
|
119
24
|
}
|
|
25
|
+
// Otherwise, run interactive CLI mode
|
|
26
|
+
return "cli";
|
|
120
27
|
}
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
28
|
+
/**
|
|
29
|
+
* Main entry point
|
|
30
|
+
*/
|
|
31
|
+
async function main() {
|
|
32
|
+
const mode = detectMode();
|
|
33
|
+
const args = process.argv.slice(2).filter((arg) => arg !== "--server");
|
|
34
|
+
switch (mode) {
|
|
35
|
+
case "mcp": {
|
|
36
|
+
// MCP Server Mode (for Claude Code CLI integration)
|
|
37
|
+
const mcpServer = new ConversationMemoryServer();
|
|
38
|
+
await mcpServer.start();
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
case "single-command": {
|
|
42
|
+
// Single Command Mode
|
|
43
|
+
const singleCLI = new ConversationMemoryCLI();
|
|
44
|
+
await singleCLI.runSingleCommand(args.join(" "));
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
case "cli":
|
|
48
|
+
default: {
|
|
49
|
+
// Interactive REPL Mode
|
|
50
|
+
const repl = new ConversationMemoryCLI();
|
|
51
|
+
await repl.start();
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
// Run main
|
|
57
|
+
main().catch((error) => {
|
|
58
|
+
console.error("Fatal error:", error);
|
|
125
59
|
process.exit(1);
|
|
126
60
|
});
|
|
127
61
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;GAGG;AAEH,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD;;GAEG;AACH,SAAS,UAAU;IACjB,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAEnC,mDAAmD;IACnD,IAAI,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,iFAAiF;IACjF,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpB,OAAO,gBAAgB,CAAC;IAC1B,CAAC;IAED,wDAAwD;IACxD,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,sCAAsC;IACtC,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,IAAI;IACjB,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC;IAEvE,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,oDAAoD;YACpD,MAAM,SAAS,GAAG,IAAI,wBAAwB,EAAE,CAAC;YACjD,MAAM,SAAS,CAAC,KAAK,EAAE,CAAC;YACxB,MAAM;QACR,CAAC;QAED,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,sBAAsB;YACtB,MAAM,SAAS,GAAG,IAAI,qBAAqB,EAAE,CAAC;YAC9C,MAAM,SAAS,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;YACjD,MAAM;QACR,CAAC;QAED,KAAK,KAAK,CAAC;QACX,OAAO,CAAC,CAAC,CAAC;YACR,wBAAwB;YACxB,MAAM,IAAI,GAAG,IAAI,qBAAqB,EAAE,CAAC;YACzC,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;YACnB,MAAM;QACR,CAAC;IACH,CAAC;AACH,CAAC;AAED,WAAW;AACX,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAO,CAAC,KAAK,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Conversation Memory - MCP Server
|
|
3
|
+
* MCP server implementation with stdio transport
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Main MCP Server
|
|
7
|
+
*/
|
|
8
|
+
export declare class ConversationMemoryServer {
|
|
9
|
+
private server;
|
|
10
|
+
private memory;
|
|
11
|
+
private handlers;
|
|
12
|
+
constructor();
|
|
13
|
+
/**
|
|
14
|
+
* Setup MCP request handlers
|
|
15
|
+
*/
|
|
16
|
+
private setupHandlers;
|
|
17
|
+
/**
|
|
18
|
+
* Start the server
|
|
19
|
+
*/
|
|
20
|
+
start(): Promise<void>;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=mcp-server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.d.ts","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAcH;;GAEG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,QAAQ,CAAe;;IAqB/B;;OAEG;IACH,OAAO,CAAC,aAAa;IA2FrB;;OAEG;IACG,KAAK;CAUZ"}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Conversation Memory - MCP Server
|
|
3
|
+
* MCP server implementation with stdio transport
|
|
4
|
+
*/
|
|
5
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
6
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
7
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from "@modelcontextprotocol/sdk/types.js";
|
|
8
|
+
import { ConversationMemory } from "./ConversationMemory.js";
|
|
9
|
+
import { ToolHandlers } from "./tools/ToolHandlers.js";
|
|
10
|
+
import { TOOLS } from "./tools/ToolDefinitions.js";
|
|
11
|
+
import { getSQLiteManager } from "./storage/SQLiteManager.js";
|
|
12
|
+
/**
|
|
13
|
+
* Main MCP Server
|
|
14
|
+
*/
|
|
15
|
+
export class ConversationMemoryServer {
|
|
16
|
+
server;
|
|
17
|
+
memory;
|
|
18
|
+
handlers;
|
|
19
|
+
constructor() {
|
|
20
|
+
this.server = new Server({
|
|
21
|
+
name: "claude-conversation-memory",
|
|
22
|
+
version: "0.2.0",
|
|
23
|
+
}, {
|
|
24
|
+
capabilities: {
|
|
25
|
+
tools: {},
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
this.memory = new ConversationMemory();
|
|
29
|
+
this.handlers = new ToolHandlers(this.memory, getSQLiteManager());
|
|
30
|
+
this.setupHandlers();
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Setup MCP request handlers
|
|
34
|
+
*/
|
|
35
|
+
setupHandlers() {
|
|
36
|
+
// List available tools
|
|
37
|
+
this.server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
38
|
+
return {
|
|
39
|
+
tools: Object.values(TOOLS),
|
|
40
|
+
};
|
|
41
|
+
});
|
|
42
|
+
// Handle tool execution
|
|
43
|
+
this.server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
44
|
+
const { name, arguments: args } = request.params;
|
|
45
|
+
try {
|
|
46
|
+
console.error(`[MCP] Executing tool: ${name}`);
|
|
47
|
+
let result;
|
|
48
|
+
switch (name) {
|
|
49
|
+
case "index_conversations":
|
|
50
|
+
result = await this.handlers.indexConversations(args);
|
|
51
|
+
break;
|
|
52
|
+
case "search_conversations":
|
|
53
|
+
result = await this.handlers.searchConversations(args);
|
|
54
|
+
break;
|
|
55
|
+
case "get_decisions":
|
|
56
|
+
result = await this.handlers.getDecisions(args);
|
|
57
|
+
break;
|
|
58
|
+
case "check_before_modify":
|
|
59
|
+
result = await this.handlers.checkBeforeModify(args);
|
|
60
|
+
break;
|
|
61
|
+
case "get_file_evolution":
|
|
62
|
+
result = await this.handlers.getFileEvolution(args);
|
|
63
|
+
break;
|
|
64
|
+
case "link_commits_to_conversations":
|
|
65
|
+
result = await this.handlers.linkCommitsToConversations(args);
|
|
66
|
+
break;
|
|
67
|
+
case "search_mistakes":
|
|
68
|
+
result = await this.handlers.searchMistakes(args);
|
|
69
|
+
break;
|
|
70
|
+
case "get_requirements":
|
|
71
|
+
result = await this.handlers.getRequirements(args);
|
|
72
|
+
break;
|
|
73
|
+
case "get_tool_history":
|
|
74
|
+
result = await this.handlers.getToolHistory(args);
|
|
75
|
+
break;
|
|
76
|
+
case "find_similar_sessions":
|
|
77
|
+
result = await this.handlers.findSimilarSessions(args);
|
|
78
|
+
break;
|
|
79
|
+
case "generate_documentation":
|
|
80
|
+
result = await this.handlers.generateDocumentation(args);
|
|
81
|
+
break;
|
|
82
|
+
default:
|
|
83
|
+
throw new Error(`Unknown tool: ${name}`);
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
content: [
|
|
87
|
+
{
|
|
88
|
+
type: "text",
|
|
89
|
+
text: JSON.stringify(result, null, 2),
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
const err = error;
|
|
96
|
+
console.error(`[MCP] Error executing tool ${name}:`, err);
|
|
97
|
+
return {
|
|
98
|
+
content: [
|
|
99
|
+
{
|
|
100
|
+
type: "text",
|
|
101
|
+
text: `Error: ${err.message}\n\nStack: ${err.stack}`,
|
|
102
|
+
},
|
|
103
|
+
],
|
|
104
|
+
isError: true,
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Start the server
|
|
111
|
+
*/
|
|
112
|
+
async start() {
|
|
113
|
+
const transport = new StdioServerTransport();
|
|
114
|
+
console.error("[MCP] Claude Conversation Memory Server starting...");
|
|
115
|
+
console.error(`[MCP] Database: ${getSQLiteManager().getStats().dbPath}`);
|
|
116
|
+
await this.server.connect(transport);
|
|
117
|
+
console.error("[MCP] Server ready - listening on stdio");
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=mcp-server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../src/mcp-server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAE9D;;GAEG;AACH,MAAM,OAAO,wBAAwB;IAC3B,MAAM,CAAS;IACf,MAAM,CAAqB;IAC3B,QAAQ,CAAe;IAE/B;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,MAAM,CACtB;YACE,IAAI,EAAE,4BAA4B;YAClC,OAAO,EAAE,OAAO;SACjB,EACD;YACE,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE;aACV;SACF,CACF,CAAC;QAEF,IAAI,CAAC,MAAM,GAAG,IAAI,kBAAkB,EAAE,CAAC;QACvC,IAAI,CAAC,QAAQ,GAAG,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,EAAE,CAAC,CAAC;QAElE,IAAI,CAAC,aAAa,EAAE,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,uBAAuB;QACvB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE;YAC/D,OAAO;gBACL,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;aAC5B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,wBAAwB;QACxB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YAEjD,IAAI,CAAC;gBACH,OAAO,CAAC,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;gBAE/C,IAAI,MAAe,CAAC;gBAEpB,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,qBAAqB;wBACxB,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,kBAAkB,CAAC,IAA+B,CAAC,CAAC;wBACjF,MAAM;oBAER,KAAK,sBAAsB;wBACzB,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAA+B,CAAC,CAAC;wBAClF,MAAM;oBAER,KAAK,eAAe;wBAClB,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,YAAY,CAAC,IAA+B,CAAC,CAAC;wBAC3E,MAAM;oBAER,KAAK,qBAAqB;wBACxB,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAA+B,CAAC,CAAC;wBAChF,MAAM;oBAER,KAAK,oBAAoB;wBACvB,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAA+B,CAAC,CAAC;wBAC/E,MAAM;oBAER,KAAK,+BAA+B;wBAClC,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,0BAA0B,CAAC,IAA+B,CAAC,CAAC;wBACzF,MAAM;oBAER,KAAK,iBAAiB;wBACpB,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAA+B,CAAC,CAAC;wBAC7E,MAAM;oBAER,KAAK,kBAAkB;wBACrB,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAA+B,CAAC,CAAC;wBAC9E,MAAM;oBAER,KAAK,kBAAkB;wBACrB,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAA+B,CAAC,CAAC;wBAC7E,MAAM;oBAER,KAAK,uBAAuB;wBAC1B,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAA+B,CAAC,CAAC;wBAClF,MAAM;oBAER,KAAK,wBAAwB;wBAC3B,MAAM,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,qBAAqB,CAAC,IAA+B,CAAC,CAAC;wBACpF,MAAM;oBAER;wBACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;gBAC7C,CAAC;gBAED,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;yBACtC;qBACF;iBACF,CAAC;YACJ,CAAC;YAAC,OAAO,KAAc,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,KAAc,CAAC;gBAC3B,OAAO,CAAC,KAAK,CAAC,8BAA8B,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;gBAE1D,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,UAAU,GAAG,CAAC,OAAO,cAAc,GAAG,CAAC,KAAK,EAAE;yBACrD;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,KAAK;QACT,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;QAE7C,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACrE,OAAO,CAAC,KAAK,CAAC,mBAAmB,gBAAgB,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QAEzE,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAErC,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC3D,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConversationParser.d.ts","sourceRoot":"","sources":["../../src/parsers/ConversationParser.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ConversationParser.d.ts","sourceRoot":"","sources":["../../src/parsers/ConversationParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Multi-pass JSONL Conversation Parser
|
|
3
3
|
* Parses Claude Code conversation history from ~/.claude/projects
|
|
4
4
|
*/
|
|
5
|
-
import { readFileSync, readdirSync } from "fs";
|
|
5
|
+
import { readFileSync, readdirSync, existsSync } from "fs";
|
|
6
6
|
import { join } from "path";
|
|
7
7
|
import { nanoid } from "nanoid";
|
|
8
8
|
import { pathToProjectFolderName } from "../utils/sanitization.js";
|
|
@@ -17,8 +17,31 @@ export class ConversationParser {
|
|
|
17
17
|
}
|
|
18
18
|
// Convert project path to Claude projects directory name
|
|
19
19
|
const projectDirName = pathToProjectFolderName(projectPath);
|
|
20
|
-
const
|
|
20
|
+
const homeDir = process.env.HOME || process.env.USERPROFILE || "";
|
|
21
|
+
// Try current naming convention first
|
|
22
|
+
let conversationDir = join(homeDir, ".claude", "projects", projectDirName);
|
|
23
|
+
// If not found, try legacy naming (dots replaced with dashes)
|
|
24
|
+
if (!existsSync(conversationDir)) {
|
|
25
|
+
const legacyDirName = projectDirName.replace(/\./g, '-');
|
|
26
|
+
const legacyDir = join(homeDir, ".claude", "projects", legacyDirName);
|
|
27
|
+
if (existsSync(legacyDir)) {
|
|
28
|
+
console.log(`Using legacy folder naming: ${legacyDirName}`);
|
|
29
|
+
conversationDir = legacyDir;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
21
32
|
console.log(`Looking in: ${conversationDir}`);
|
|
33
|
+
// Check if directory exists
|
|
34
|
+
if (!existsSync(conversationDir)) {
|
|
35
|
+
console.warn(`⚠️ Conversation directory not found: ${conversationDir}`);
|
|
36
|
+
return {
|
|
37
|
+
conversations: [],
|
|
38
|
+
messages: [],
|
|
39
|
+
tool_uses: [],
|
|
40
|
+
tool_results: [],
|
|
41
|
+
file_edits: [],
|
|
42
|
+
thinking_blocks: [],
|
|
43
|
+
};
|
|
44
|
+
}
|
|
22
45
|
// Read all .jsonl files, optionally filtering by session_id
|
|
23
46
|
let files = readdirSync(conversationDir).filter((f) => f.endsWith(".jsonl"));
|
|
24
47
|
// If session_id provided, filter to only that session file
|