Newer
Older
TelosDB / scripts / install-mcp.js
import fs from 'fs';
import os from 'os';
import path from 'path';

/**
 * LM Studio 用の MCP プラグインをインストール/セットアップするスクリプト
 * 1. プラグインディレクトリの作成
 * 2. 必要なアダプターファイルのコピー
 * 3. 対応する設定ファイルの作成 (相対パス使用)
 */

const PLUGIN_NAME = 'sqlite-vector';
const PLUGIN_DIR = path.join(os.homedir(), '.lmstudio', 'extensions', 'plugins', 'mcp', PLUGIN_NAME);
const BIN_DIR = path.join(PLUGIN_DIR, 'bin');

console.log(`🔧 Setting up LM Studio extension: ${PLUGIN_NAME}...`);

try {
    // 1. ディレクトリ作成
    if (!fs.existsSync(BIN_DIR)) {
        fs.mkdirSync(BIN_DIR, { recursive: true });
        console.log(`✅ Created directory: ${BIN_DIR}`);
    }

    // 2. アダプターのコピー
    const sourceAdapter = path.join(process.cwd(), 'bin', 'mcp-stdio-adapter.cjs');
    const targetAdapter = path.join(BIN_DIR, 'mcp-stdio-adapter.cjs');

    fs.copyFileSync(sourceAdapter, targetAdapter);
    console.log(`✅ Copied adapter to: ${targetAdapter}`);

    // 3. manifest.json の作成/更新
    const manifest = {
        "type": "plugin",
        "runner": "mcpBridge",
        "owner": "mcp",
        "name": PLUGIN_NAME
    };
    fs.writeFileSync(path.join(PLUGIN_DIR, 'manifest.json'), JSON.stringify(manifest, null, 2));
    console.log('✅ Created manifest.json');

    // 4. mcp-bridge-config.json の作成 (相対パスを使用しポータブルにする)
    const bridgeConfig = {
        "command": "node",
        "args": ["./bin/mcp-stdio-adapter.cjs"]
    };
    fs.writeFileSync(path.join(PLUGIN_DIR, 'mcp-bridge-config.json'), JSON.stringify(bridgeConfig, null, 2));
    console.log('✅ Created mcp-bridge-config.json (using relative path)');

    console.log(`\n✨ Successfully installed LM Studio extension!`);
    console.log(`Please restart LM Studio or reload the plugin.`);

} catch (err) {
    console.error('❌ Failed to install extension:', err.message);
    process.exit(1);
}