diff --git a/README.md b/README.md index eb99d55..b394608 100755 --- a/README.md +++ b/README.md @@ -159,7 +159,7 @@ Jobs run automatically at the interval you configure (see Starting with **V20**, Fredy ships with a built-in **MCP Server **. This allows you to connect Fredy to LLMs (like Claude, ChatGPT, or local models via LM Studio) and query your real estate data using natural language. The local LLM can even enrich existing listings by checking the listing online. -For more information on how to set it up and use it, please refer to the [MCP Readme](mcp/README.md). +For more information on how to set it up and use it, please refer to the [MCP Readme](lib/mcp/README.md). ------------------------------------------------------------------------ diff --git a/lib/api/api.js b/lib/api/api.js index d3660bd..f299ff8 100644 --- a/lib/api/api.js +++ b/lib/api/api.js @@ -24,7 +24,7 @@ import { getSettings } from '../services/storage/settingsStorage.js'; import { dashboardRouter } from './routes/dashboardRouter.js'; import { backupRouter } from './routes/backupRouter.js'; import { trackingRouter } from './routes/trackingRoute.js'; -import { registerMcpRoutes } from '../../mcp/mcpHttpRoute.js'; +import { registerMcpRoutes } from '../mcp/mcpHttpRoute.js'; const service = restana(); const staticService = files(path.join(getDirName(), '../ui/public')); const PORT = (await getSettings()).port || 9998; diff --git a/mcp/README.md b/lib/mcp/README.md similarity index 100% rename from mcp/README.md rename to lib/mcp/README.md diff --git a/mcp/mcpAdapter.js b/lib/mcp/mcpAdapter.js similarity index 98% rename from mcp/mcpAdapter.js rename to lib/mcp/mcpAdapter.js index 8f3d429..9d9601e 100644 --- a/mcp/mcpAdapter.js +++ b/lib/mcp/mcpAdapter.js @@ -9,8 +9,8 @@ */ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { z } from 'zod'; -import { queryJobs, getJob } from '../lib/services/storage/jobStorage.js'; -import { queryListings, getListingById } from '../lib/services/storage/listingsStorage.js'; +import { queryJobs, getJob } from '../services/storage/jobStorage.js'; +import { queryListings, getListingById } from '../services/storage/listingsStorage.js'; import { authenticateToolCall, checkJobAccess } from './mcpAuthentication.js'; import { normalizeListJobs, diff --git a/mcp/mcpAuthentication.js b/lib/mcp/mcpAuthentication.js similarity index 96% rename from mcp/mcpAuthentication.js rename to lib/mcp/mcpAuthentication.js index defe774..92f5d52 100644 --- a/mcp/mcpAuthentication.js +++ b/lib/mcp/mcpAuthentication.js @@ -10,7 +10,7 @@ * and HTTP requests. Ensures consistent access control across all transports. */ -import { getUser, validateMcpToken } from '../lib/services/storage/userStorage.js'; +import { getUser, validateMcpToken } from '../services/storage/userStorage.js'; /** * Authenticate an MCP tool call by extracting and validating the user from authInfo. diff --git a/mcp/mcpHttpRoute.js b/lib/mcp/mcpHttpRoute.js similarity index 98% rename from mcp/mcpHttpRoute.js rename to lib/mcp/mcpHttpRoute.js index 2d3bb8d..3115f8a 100644 --- a/mcp/mcpHttpRoute.js +++ b/lib/mcp/mcpHttpRoute.js @@ -10,7 +10,7 @@ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js'; import { createMcpServer } from './mcpAdapter.js'; import { authenticateRequest } from './mcpAuthentication.js'; -import logger from '../lib/services/logger.js'; +import logger from '../services/logger.js'; import crypto from 'crypto'; /** diff --git a/mcp/mcpNormalizer.js b/lib/mcp/mcpNormalizer.js similarity index 100% rename from mcp/mcpNormalizer.js rename to lib/mcp/mcpNormalizer.js diff --git a/mcp/stdio.js b/lib/mcp/stdio.js similarity index 91% rename from mcp/stdio.js rename to lib/mcp/stdio.js index e9e7ae5..d7d424e 100644 --- a/mcp/stdio.js +++ b/lib/mcp/stdio.js @@ -22,10 +22,10 @@ import { fileURLToPath } from 'url'; import path from 'path'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; -import SqliteConnection from '../lib/services/storage/SqliteConnection.js'; -import { runMigrations } from '../lib/services/storage/migrations/migrate.js'; +import SqliteConnection from '../services/storage/SqliteConnection.js'; +import { runMigrations } from '../services/storage/migrations/migrate.js'; import { createMcpServer } from './mcpAdapter.js'; -import { validateMcpToken } from '../lib/services/storage/userStorage.js'; +import { validateMcpToken } from '../services/storage/userStorage.js'; // Ensure cwd is the project root so that relative DB/config paths resolve correctly // (LM Studio and other MCP hosts may spawn this process from an arbitrary directory) diff --git a/package.json b/package.json index f0f8e79..d1f7a44 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "fredy", - "version": "20.0.0", + "version": "20.0.1", "description": "[F]ind [R]eal [E]states [d]amn eas[y].", "scripts": { "prepare": "husky", @@ -14,7 +14,7 @@ "test": "node --import ./test/esmock-loader.mjs ./node_modules/mocha/bin/mocha.js --timeout 60000 test/**/*.test.js", "testGH": "node --import ./test/esmock-loader.mjs ./node_modules/mocha/bin/mocha.js --timeout 60000 --exclude test/provider/immonet.test.js --exclude test/provider/immobilienDe.test.js --exclude test/provider/immowelt.test.js test/**/*.test.js", "lint": "eslint .", - "mcp:stdio": "node mcp/stdio.js", + "mcp:stdio": "node lib/mcp/stdio.js", "lint:fix": "yarn lint --fix", "migratedb": "node lib/services/storage/migrations/migrate.js", "migratedb:overwrite": "x-var MIGRATION_ALLOW_CHECKSUM_UPDATE=true node lib/services/storage/migrations/migrate.js",