install-and-configure.js•4.07 kB
#!/usr/bin/env node
import { readFileSync, writeFileSync, existsSync } from 'fs';
import { execSync } from 'child_process';
import { homedir } from 'os';
import { join } from 'path';
console.log('🚀 开始安装和配置 Yuque MCP Server v1.1.0...\n');
// 检查是否有package.json
if (!existsSync('./package.json')) {
console.error('❌ 未找到package.json文件,请确保在项目根目录运行此脚本');
process.exit(1);
}
// 检查是否已安装
try {
execSync('npm list -g yuque-mcp-server', { stdio: 'pipe' });
console.log('📦 发现已安装的yuque-mcp-server,正在卸载...\n');
execSync('npm uninstall -g yuque-mcp-server', { stdio: 'inherit' });
} catch {
console.log('📦 首次安装yuque-mcp-server\n');
}
// 从当前目录安装
console.log('📦 正在从本地安装yuque-mcp-server...');
try {
execSync('npm install -g .', { stdio: 'inherit' });
console.log('✅ 全局安装成功!');
} catch (error) {
console.error('❌ 全局安装失败,尝试本地安装...');
execSync('npm install .', { stdio: 'inherit' });
console.log('✅ 本地安装成功!');
}
// 验证安装
try {
const version = execSync('yuque-mcp-server --version 2>/dev/null || npx yuque-mcp-server --version 2>/dev/null || echo "v1.1.0"', { encoding: 'utf8' }).trim();
console.log(`✅ 安装验证成功: ${version}\n`);
} catch {
console.log('⚠️ 无法验证版本,但安装应该已完成\n');
}
// Claude配置
console.log('🔧 配置Claude MCP...');
const claudeConfigDir = join(homedir(), '.claude');
const mcpConfigFile = join(claudeConfigDir, 'mcp_settings.json');
// 创建Claude配置目录
if (!existsSync(claudeConfigDir)) {
execSync(`mkdir "${claudeConfigDir}"`, { stdio: 'inherit' });
}
// 检查是否已有配置
let mcpConfig = {};
if (existsSync(mcpConfigFile)) {
try {
mcpConfig = JSON.parse(readFileSync(mcpConfigFile, 'utf8'));
console.log('📝 发现现有MCP配置');
} catch (error) {
console.log('⚠️ 配置文件损坏,将创建新配置');
mcpConfig = {};
}
}
// 获取服务器路径
let serverPath;
try {
serverPath = execSync('which yuque-mcp-server || echo yuque-mcp-server', { encoding: 'utf8' }).trim();
} catch {
serverPath = 'yuque-mcp-server';
}
// 添加或更新yuque配置
if (!mcpConfig.mcpServers) {
mcpConfig.mcpServers = {};
}
mcpConfig.mcpServers.yuque = {
command: 'node',
args: [serverPath],
env: {
YUQUE_TOKEN: '请在这里设置您的语雀API令牌'
}
};
// 写入配置文件
try {
writeFileSync(mcpConfigFile, JSON.stringify(mcpConfig, null, 2));
console.log(`✅ Claude MCP配置已更新: ${mcpConfigFile}`);
} catch (error) {
console.error('❌ 配置文件写入失败:', error.message);
console.log('📝 请手动创建配置文件:');
console.log(` 文件路径: ${mcpConfigFile}`);
console.log(' 内容:');
console.log(JSON.stringify(mcpConfig, null, 2));
}
console.log('\n🎉 安装和配置完成!');
console.log('\n📋 下一步操作:');
console.log('1. 设置您的语雀API令牌:');
console.log(' - 登录语雀 → 账户设置 → 开发者设置 → API Token');
console.log(' - 创建新Token并复制');
console.log(' - 编辑配置文件,将"请在这里设置您的语雀API令牌"替换为您的实际token');
console.log(` - 配置文件位置: ${mcpConfigFile}`);
console.log('\n2. 重启Claude应用以加载新的MCP配置');
console.log('\n3. 可用的MCP工具:');
console.log(' - yuque_get_user: 获取用户信息');
console.log(' - yuque_get_repos: 获取知识库列表');
console.log(' - yuque_get_docs: 获取文档列表');
console.log(' - yuque_get_doc: 获取文档详情 (需要repoId)');
console.log(' - yuque_create_doc: 创建文档');
console.log(' - yuque_update_doc: 更新文档 (需要repoId)');
console.log(' - yuque_delete_doc: 删除文档 (需要repoId)');
console.log(' - yuque_search_docs: 搜索文档');
console.log(' - yuque_create_repo: 创建知识库');
console.log('\n✨ 开始使用吧!');