Skip to main content
Glama
setup.jsโ€ข3.06 kB
#!/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);

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SunWooBang/jira-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server