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);
}