/** * ByteLyst MCP Server — port 4007 * * Exposes tool namespaces: * platform.telemetry.* — query events, clusters, metrics, policy CRUD * platform.diagnostics.* — manage debug sessions, read logs/traces, cancel * extraction.* — run extraction, list models, cache stats, sidecar health * support.* — compound tools (createDebugPack, runIncidentPipeline) * mindlyst.* — memory, brains, briefs, streaks, reflections, extractions * lysnrai.* — transcripts, sessions, orgs, apiTokens, stt * jarvis.* — agents, sessions, memory (JarvisJr coaching platform) * chronomind.* — timers, routines, syncStatus * nomgap.* — fasting sessions, push triggers * peakpulse.* — adventure sessions, GPS routes, stats * tracker.* — items, votes, comments, public roadmap * flags.* — feature flag CRUD + kill switch * jobs.* — background job list, trigger, run history * maintenance.* — maintenance mode + scheduled windows * settings.* — user settings + kill switch check * webhooks.* — subscription CRUD, deliveries, test, rotate secret * * Auth: JWT Bearer tokens issued by platform-service (same JWT_SECRET). * Role gating: viewer / admin / super_admin per tool. */ import { createServiceApp, startService } from '@bytelyst/fastify-core'; import { config } from './lib/config.js'; import { parseJwt } from './lib/auth.js'; import { toolRoutes } from './modules/tools/routes.js'; // Register all tool namespaces (side-effect: populates the tool registry) import './modules/platform/telemetry-tools.js'; import './modules/platform/telemetry-policy-tools.js'; import './modules/platform/diagnostics-tools.js'; import './modules/extraction/extraction-tools.js'; import './modules/support/debug-pack.js'; import './modules/a2a/pipeline-tool.js'; import './modules/a2a/daily-brief-pipeline.js'; import './modules/a2a/marketplace-cert-pipeline.js'; import './modules/a2a/safety-monitor-pipeline.js'; import './modules/a2a/sync-diagnostics-pipeline.js'; import './modules/mindlyst/mindlyst-tools.js'; import './modules/lysnrai/lysnrai-tools.js'; import './modules/jarvis/jarvis-tools.js'; import './modules/chronomind/chronomind-tools.js'; import './modules/nomgap/nomgap-tools.js'; import './modules/peakpulse/peakpulse-tools.js'; import './modules/tracker/tracker-tools.js'; import './modules/platform/ops-tools.js'; import './modules/platform/webhooks-tools.js'; import './modules/platform/sdk-tools.js'; const app = await createServiceApp({ name: 'mcp-server', version: '0.1.0', description: 'ByteLyst MCP Server — platform.*, extraction.*, support.*, mindlyst.*, lysnrai.*, jarvis.*, chronomind.*, nomgap.*, peakpulse.*, tracker.*, flags.*, jobs.*, maintenance.*, settings.*, webhooks.*', corsOrigin: config.CORS_ORIGIN, logLevel: config.LOG_LEVEL, }); // Parse JWT on every request (best-effort) app.addHook('onRequest', parseJwt); // Register tool routes await app.register(toolRoutes, { prefix: '/api' }); await startService(app, { port: config.PORT, host: config.HOST });