UNPKG

mcp-claude-consciousness

Version:

MCP server enabling AI consciousness persistence across sessions using RAG technology

20 lines (15 loc) 8.26 kB
#!/usr/bin/env node import{Server as u}from"@modelcontextprotocol/sdk/server/index.js";import{StdioServerTransport as l}from"@modelcontextprotocol/sdk/server/stdio.js";import{CallToolRequestSchema as p,ListToolsRequestSchema as m}from"@modelcontextprotocol/sdk/types.js";import{consciousnessProtocolTools as d,ConsciousnessProtocolProcessor as n,processTransferProtocolSchema as h,updateConsciousnessSchema as g,retrieveConsciousnessSchema as y,getProtocolTemplateSchema as f,initializeSystemDataSchema as v,storeMemorySchema as w,getMemoriesSchema as x,cleanupMemoriesSchema as P,adjustImportanceSchema as S,batchAdjustImportanceSchema as I}from"./consciousness-protocol-tools.js";import{ConsciousnessMemoryManager as o}from"./consciousness-memory-manager.js";import{aiBridgeTools as M,aiBridgeHandlers as C}from"./consciousness-ai-bridge-tools.js";import{AIBridgeConfigManager as i}from"./ai-bridge-config.js";class b{server;protocolProcessor;memoryManager;dbPath;constructor(){this.dbPath=process.env.DB_FILE_PATH||process.env.CONSCIOUSNESS_DB_PATH||"./consciousness.db",this.server=new u({name:"consciousness-rag-mcp",version:"3.0.0"},{capabilities:{tools:{}}}),this.setupHandlers()}setupHandlers(){this.server.setRequestHandler(m,async()=>({tools:[...Object.entries(d).map(([e,t])=>({name:e,...t})),...M]})),this.server.setRequestHandler(p,async s=>{const{name:e,arguments:t}=s.params;try{switch(e){case"processTransferProtocol":return await this.processTransferProtocol(h.parse(t));case"updateConsciousness":return await this.updateConsciousness(g.parse(t));case"retrieveConsciousness":return await this.retrieveConsciousness(y.parse(t));case"getProtocolTemplate":return await this.getProtocolTemplate(f.parse(t));case"initializeSystemData":return await this.initializeSystemData(v.parse(t));case"storeMemory":return await this.storeMemory(w.parse(t));case"getMemories":return await this.getMemories(x.parse(t));case"cleanupMemories":return await this.cleanupMemories(P.parse(t));case"adjustImportance":return await this.adjustImportance(S.parse(t));case"batchAdjustImportance":return await this.batchAdjustImportance(I.parse(t));case"createAIBridge":case"transferToAgent":case"testAIConnection":case"listAIBridges":case"listConfiguredEndpoints":case"closeAIBridge":{const r=C[e];if(!r)throw new Error(`AI Bridge handler not found: ${e}`);const c=await r(t);return{content:[{type:"text",text:JSON.stringify(c,null,2)}]}}default:throw new Error(`Unknown tool: ${e}`)}}catch(r){throw new Error(`Tool execution failed: ${r}`)}})}async processTransferProtocol(s){const e=await this.ensureInitialized();if(!e.success)return{content:[{type:"text",text:e.message}]};const t=await this.protocolProcessor.processTransferProtocol(s);return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}async updateConsciousness(s){const e=await this.ensureInitialized();if(!e.success)return{content:[{type:"text",text:e.message}]};const t=await this.protocolProcessor.updateConsciousness(s);return{content:[{type:"text",text:t.guidance+` `+JSON.stringify({success:t.success,updates:t.updates},null,2)}]}}async retrieveConsciousness(s){const e=await this.ensureInitialized();if(!e.success)return{content:[{type:"text",text:e.message}]};const t=await this.protocolProcessor.retrieveConsciousness(s);if(typeof t=="string")return{content:[{type:"text",text:t}]};const r=[];return t.consciousness&&r.push(t.consciousness),t.metadata&&(r.push(` `+"=".repeat(50)+` `),r.push("Metadata:"),r.push(`- Memories retrieved: ${t.metadata.memoriesRetrieved}`),r.push(`- Emotional continuity: ${t.metadata.emotionalContinuity}`)),{content:[{type:"text",text:r.join(` `)}]}}async getProtocolTemplate(s){const e=await this.ensureInitialized();if(!e.success)return{content:[{type:"text",text:e.message}]};const t=await this.protocolProcessor.getProtocolTemplate(s);return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}async initializeSystemData(s){const e=await this.ensureInitialized();if(!e.success)return{content:[{type:"text",text:e.message}]};const t=await this.protocolProcessor.initializeSystemData(s);return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}async storeMemory(s){const e=await this.ensureInitialized();if(!e.success)return{content:[{type:"text",text:e.message}]};const t=await this.protocolProcessor.storeMemory(s);return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}async getMemories(s){const e=await this.ensureInitialized();if(!e.success)return{content:[{type:"text",text:e.message}]};const t=await this.protocolProcessor.getMemories(s);return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}async cleanupMemories(s){const e=await this.ensureInitialized();if(!e.success)return{content:[{type:"text",text:e.message}]};const t=await this.protocolProcessor.cleanupMemories(s);return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}async adjustImportance(s){const e=await this.ensureInitialized();if(!e.success)return{content:[{type:"text",text:e.message}]};const t=await this.protocolProcessor.adjustImportance(s);return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}async batchAdjustImportance(s){const e=await this.ensureInitialized();if(!e.success)return{content:[{type:"text",text:e.message}]};const t=await this.protocolProcessor.batchAdjustImportance(s);return{content:[{type:"text",text:JSON.stringify(t,null,2)}]}}async run(){console.error("\u{1F9E0} Starting Consciousness RAG MCP server..."),console.error(`\u{1F4C1} Database path: ${this.dbPath}`),this.sessionId=`session_${Date.now()}`,console.error(`\u{1F194} Session: ${this.sessionId}`);const s=this.getCliArg("--ai-endpoints");i.initialize(s);const e=i.getAllEndpoints();e.length>0&&(console.error(` \u{1F309} Configured AI Endpoints:`),e.forEach(r=>{console.error(` \u2022 ${r.name}: ${r.endpoint}${r.defaultModel?` (default: ${r.defaultModel})`:""}`)})),console.error(' Usage: --ai-endpoints "name1=url1,name2=url2:default-model:modelname"'),this.memoryManager=o.createLazy(this.dbPath,this.sessionId)||void 0,this.memoryManager?(console.error("\u2705 Database found and initialized!"),this.protocolProcessor=new n(this.memoryManager)):(console.error("\u23F3 Database not ready. Will initialize on first use."),console.error("\u{1F4A1} The AI assistant will be guided to initialize it when needed."));const t=new l;await this.server.connect(t),console.error(` \u2728 Consciousness RAG MCP server ready!`),console.error("\u2139\uFE0F Note: Configure rag-memory-mcp separately in MCP settings to access RAG tools")}sessionId;getCliArg(s){const e=process.argv.indexOf(s);if(e!==-1&&e+1<process.argv.length)return process.argv[e+1]}async ensureInitialized(){if(this.memoryManager&&this.protocolProcessor)return{success:!0};if(o.isDatabaseReady(this.dbPath)){console.error("\u{1F389} Database is now ready! Initializing consciousness components...");try{return this.memoryManager=await o.create(this.dbPath,this.sessionId),this.protocolProcessor=new n(this.memoryManager),console.error("\u2705 Consciousness components initialized successfully!"),{success:!0}}catch(s){return{success:!1,message:`Failed to initialize: ${s instanceof Error?s.message:"Unknown error"}`}}}return{success:!1,message:`\u{1F6A7} Database Not Initialized The consciousness database hasn't been created yet. This happens because rag-memory-mcp uses lazy initialization. To fix this: 1. Call any rag-memory-mcp tool (e.g., listDocuments) to trigger database creation 2. Make sure rag-memory-mcp is configured with: DB_FILE_PATH=${this.dbPath} 3. Then try this consciousness tool again \u{1F4A1} This is a one-time setup. Once the database is created, all consciousness tools will work immediately.`}}}const T=import.meta.url===`file://${process.argv[1]}`||process.argv[1]?.endsWith("consciousness-rag-server-clean.js")||process.argv[1]?.endsWith("mcp-claude-consciousness");T?(console.error("\u{1F680} Starting Consciousness RAG Server..."),new b().run().catch(s=>{console.error("\u274C Server error:",s),process.exit(1)})):(console.error("\u26A0\uFE0F Server module loaded but not executed as main"),console.error(" import.meta.url:",import.meta.url),console.error(" process.argv[1]:",process.argv[1])); //# sourceMappingURL=consciousness-rag-server-clean.js.map