diff --git a/README.md b/README.md index 75fd25cc..5ca87ea5 100644 --- a/README.md +++ b/README.md @@ -936,6 +936,7 @@ A growing set of community-developed and maintained servers demonstrates various - **[MCP Create](https://github.com/tesla0225/mcp-create)** - A dynamic MCP server management service that creates, runs, and manages Model Context Protocol servers on-the-fly. - **[MCP Documentation Server](https://github.com/andrea9293/mcp-documentation-server)** - Server that provides local-first document management and semantic search via embeddings or Gemini AI (recommended). Optimized for performance with disk persistence, an in-memory index, and caching. - **[MCP Installer](https://github.com/anaisbetts/mcp-installer)** - This server is a server that installs other MCP servers for you. +- **[MCP on Android TV](https://github.com/MiddlePoint-Solutions/mcp-on-android-tv)** - A Model Context Protocol (MCP) server running directly on your Android TV with bundeld access to ADB on-device. - **[MCP ProjectManage OpenProject](https://github.com/boma086/mcp-projectmanage-openproject)** - This server provides the MCP service for project weekly reports, with project management information supplied by OpenProject. - **[MCP Proxy Server](https://github.com/TBXark/mcp-proxy)** - An MCP proxy server that aggregates and serves multiple MCP resource servers through a single HTTP server. - **[MCP Server Creator](https://github.com/GongRzhe/MCP-Server-Creator)** - A powerful Model Context Protocol (MCP) server that creates other MCP servers! This meta-server provides tools for dynamically generating FastMCP server configurations and Python code. diff --git a/src/memory/README.md b/src/memory/README.md index 3fd59bbd..f6e0bb89 100644 --- a/src/memory/README.md +++ b/src/memory/README.md @@ -173,14 +173,14 @@ The server can be configured using the following environment variables: "@modelcontextprotocol/server-memory" ], "env": { - "MEMORY_FILE_PATH": "/path/to/custom/memory.json" + "MEMORY_FILE_PATH": "/path/to/custom/memory.jsonl" } } } } ``` -- `MEMORY_FILE_PATH`: Path to the memory storage JSON file (default: `memory.json` in the server directory) +- `MEMORY_FILE_PATH`: Path to the memory storage JSONL file (default: `memory.jsonl` in the server directory) # VS Code Installation Instructions diff --git a/src/memory/index.ts b/src/memory/index.ts index 982c617b..204968f5 100644 --- a/src/memory/index.ts +++ b/src/memory/index.ts @@ -11,14 +11,43 @@ import path from 'path'; import { fileURLToPath } from 'url'; // Define memory file path using environment variable with fallback -const defaultMemoryPath = path.join(path.dirname(fileURLToPath(import.meta.url)), 'memory.json'); +const defaultMemoryPath = path.join(path.dirname(fileURLToPath(import.meta.url)), 'memory.jsonl'); -// If MEMORY_FILE_PATH is just a filename, put it in the same directory as the script -const MEMORY_FILE_PATH = process.env.MEMORY_FILE_PATH - ? path.isAbsolute(process.env.MEMORY_FILE_PATH) - ? process.env.MEMORY_FILE_PATH - : path.join(path.dirname(fileURLToPath(import.meta.url)), process.env.MEMORY_FILE_PATH) - : defaultMemoryPath; +// Handle backward compatibility: migrate memory.json to memory.jsonl if needed +async function ensureMemoryFilePath(): Promise { + if (process.env.MEMORY_FILE_PATH) { + // Custom path provided, use it as-is (with absolute path resolution) + return path.isAbsolute(process.env.MEMORY_FILE_PATH) + ? process.env.MEMORY_FILE_PATH + : path.join(path.dirname(fileURLToPath(import.meta.url)), process.env.MEMORY_FILE_PATH); + } + + // No custom path set, check for backward compatibility migration + const oldMemoryPath = path.join(path.dirname(fileURLToPath(import.meta.url)), 'memory.json'); + const newMemoryPath = defaultMemoryPath; + + try { + // Check if old file exists and new file doesn't + await fs.access(oldMemoryPath); + try { + await fs.access(newMemoryPath); + // Both files exist, use new one (no migration needed) + return newMemoryPath; + } catch { + // Old file exists, new file doesn't - migrate + console.error('DETECTED: Found legacy memory.json file, migrating to memory.jsonl for JSONL format compatibility'); + await fs.rename(oldMemoryPath, newMemoryPath); + console.error('COMPLETED: Successfully migrated memory.json to memory.jsonl'); + return newMemoryPath; + } + } catch { + // Old file doesn't exist, use new path + return newMemoryPath; + } +} + +// Initialize memory file path (will be set during startup) +let MEMORY_FILE_PATH: string; // We are storing our memory using entities, relations, and observations in a graph structure interface Entity { @@ -434,6 +463,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => { }); async function main() { + // Initialize memory file path with backward compatibility + MEMORY_FILE_PATH = await ensureMemoryFilePath(); + const transport = new StdioServerTransport(); await server.connect(transport); console.error("Knowledge Graph MCP Server running on stdio");