UNPKG

github-wiki-mcp-server

Version:

GitHub WikiをModel Context Protocolサーバーとして提供するサービス

73 lines (60 loc) 2.05 kB
const express = require('express'); const cors = require('cors'); const dotenv = require('dotenv'); const fs = require('fs-extra'); const path = require('path'); const config = require('../config/default'); const wikiService = require('./services/wikiService'); const minimist = require('minimist'); // コマンドライン引数の解析 const argv = minimist(process.argv.slice(2)); // 環境変数を読み込む dotenv.config(); // CLIオプションを設定に反映 if (argv.port) { config.server.port = argv.port; } if (argv.wiki) { config.wiki.path = argv.wiki; } const app = express(); // ミドルウェア設定 app.use(cors()); app.use(express.json()); // MCPエンドポイント app.post('/mcp', async (req, res) => { try { console.log('MCPエンドポイントへのリクエスト:', req.body); const { query } = req.body; if (!query) { return res.status(400).json({ error: 'クエリが必要です' }); } console.log(`検索クエリ: "${query}"`); const results = await wikiService.searchWikiContent(query); console.log(`検索結果: ${results.length}件見つかりました`); return res.json({ contexts: results.map(result => ({ content: result.content, source: result.source })) }); } catch (error) { console.error('MCPエンドポイントエラー:', error); return res.status(500).json({ error: '内部サーバーエラー' }); } }); // ヘルスチェックエンドポイント app.get('/health', (req, res) => { res.json({ status: 'ok' }); }); // Wikiのパスが存在するか確認 const wikiPath = config.wiki.path; if (!fs.existsSync(wikiPath)) { console.warn(`警告: Wikiパス ${wikiPath} が存在しません。有効なGitHub Wikiのパスを設定してください。`); } // サーバー起動 const PORT = config.server.port; app.listen(PORT, () => { console.log(`GitHub Wiki MCPサーバーがポート ${PORT} で起動しました`); console.log(`Wikiパス: ${wikiPath}`); });