#!/usr/bin/env node
const fs = require('fs');
const path = require('path');
const readline = require('readline');
const rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
function question(prompt) {
return new Promise((resolve) => {
rl.question(prompt, resolve);
});
}
async function setup() {
console.log('๐ Jira MCP Server ์ค์ ์ ์์ํฉ๋๋ค.\n');
const jiraUrl = await question('Jira URL (์: https://your-domain.atlassian.net): ');
const jiraUsername = await question('Jira ์ฌ์ฉ์ ์ด๋ฉ์ผ: ');
const jiraApiToken = await question('Jira API ํ ํฐ: ');
const defaultProject = await question('๊ธฐ๋ณธ ํ๋ก์ ํธ ํค (์ ํ์ฌํญ): ');
// config ํด๋๊ฐ ์์ผ๋ฉด ์์ฑ
const configDir = path.join(process.cwd(), 'config');
if (!fs.existsSync(configDir)) {
fs.mkdirSync(configDir, { recursive: true });
console.log('๐ config ํด๋๊ฐ ์์ฑ๋์์ต๋๋ค.');
}
// .env ํ์ผ์ config ํด๋์ ์์ฑ
const envContent = `# Jira Configuration
JIRA_URL=${jiraUrl}
JIRA_USERNAME=${jiraUsername}
JIRA_API_TOKEN=${jiraApiToken}
${defaultProject ? `DEFAULT_PROJECT_KEY=${defaultProject}` : '# DEFAULT_PROJECT_KEY=PROJ'}
`;
const envPath = path.join(configDir, '.env');
fs.writeFileSync(envPath, envContent);
console.log('โ
config/.env ํ์ผ์ด ์์ฑ๋์์ต๋๋ค.');
// Claude Desktop ์ค์ ํ์ผ์ config ํด๋์ ์์ฑ
const isWindows = process.platform === 'win32';
const currentDir = process.cwd();
const indexPath = path.join(currentDir, 'server', 'index.js');
const claudeConfig = {
mcpServers: {
jira: {
command: 'node',
args: [indexPath],
env: {
JIRA_URL: jiraUrl,
JIRA_USERNAME: jiraUsername,
JIRA_API_TOKEN: jiraApiToken,
...(defaultProject && { DEFAULT_PROJECT_KEY: defaultProject })
}
}
}
};
const configFileName = 'claude_desktop_config.json';
const claudeConfigPath = path.join(configDir, configFileName);
fs.writeFileSync(claudeConfigPath, JSON.stringify(claudeConfig, null, 2));
console.log(`โ
config/${configFileName} ํ์ผ์ด ์์ฑ๋์์ต๋๋ค.`);
if (isWindows) {
console.log('\n๐ Windows์์ Claude Desktop ์ค์ :');
console.log(`1. %APPDATA%\\Claude\\claude_desktop_config.json ํ์ผ์ ์ด์ด์ฃผ์ธ์.`);
console.log(`2. ์์ฑ๋ config/${configFileName} ํ์ผ์ ๋ด์ฉ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ด์ฃผ์ธ์.`);
} else {
console.log('\n๐ macOS์์ Claude Desktop ์ค์ :');
console.log(`1. ~/Library/Application Support/Claude/claude_desktop_config.json ํ์ผ์ ์ด์ด์ฃผ์ธ์.`);
console.log(`2. ์์ฑ๋ config/${configFileName} ํ์ผ์ ๋ด์ฉ์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ด์ฃผ์ธ์.`);
}
console.log('\n๐ง ์ค์ ์๋ฃ ํ Claude Desktop์ ์ฌ์์ํด์ฃผ์ธ์.');
console.log('\n๐ ์ค์ ์ด ์๋ฃ๋์์ต๋๋ค! ์ด์ Claude์์ Jira๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.');
rl.close();
}
setup().catch(console.error);