Skip to main content
Glama

KIMP MCP Server

by DrFirstLee
index.js8.43 kB
#!/usr/bin/env node /** * kimp-mcp: 김치 프리미엄 조회 MCP 서버 (Node.js) * Bithumb API와 Naver 환율 API를 사용하여 실시간 김프 계산 */ import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js'; import axios from 'axios'; /** * Bithumb에서 암호화폐 가격 조회 * @param {string} symbol - 암호화폐 심볼 (예: BTC, USDT, USDC) * @param {string} fiat - 법정화폐 (기본: KRW) * @returns {Promise<number>} 가격 */ async function bithumbPrice(symbol = 'BTC', fiat = 'KRW') { const pair = `${symbol.toUpperCase()}_${fiat.toUpperCase()}`; const url = `https://api.bithumb.com/public/ticker/${pair}`; try { const response = await axios.get(url, { timeout: 5000 }); const data = response.data; if (data.status !== '0000') { throw new Error(`Bithumb error: ${JSON.stringify(data)}`); } const price = data.data.closing_price; return parseFloat(price); } catch (error) { throw new Error(`Bithumb API 오류: ${error.message}`); } } /** * Naver에서 USD/KRW 환율 조회 * @returns {Promise<number>} 환율 */ async function getExchangeRate() { const url = 'https://m.search.naver.com/p/csearch/content/qapirender.nhn?key=calculator&pkid=141&q=%ED%99%98%EC%9C%A8&where=m&u1=keb&u6=standardUnit&u7=0&u3=USD&u4=KRW&u8=down&u2=1'; try { const response = await axios.get(url, { timeout: 5000 }); const data = response.data; // 환율 값 추출 (콤마 제거) const krwValue = parseFloat(data.country[1].value.replace(/,/g, '')); return krwValue; } catch (error) { throw new Error(`환율 API 오류: ${error.message}`); } } /** * 김치 프리미엄 계산 * @param {string} symbol - 암호화폐 심볼 (USDT, USDC, BTC 등) * @returns {Promise<Object>} 김프 정보 */ async function calculateKimp(symbol = 'USDT') { try { // 1. Bithumb에서 KRW 가격 조회 const krwPrice = await bithumbPrice(symbol, 'KRW'); // 2. 환율 조회 const exchangeRate = await getExchangeRate(); // 3. 달러 기준 가격 계산 (KRW 가격 / 환율) const usdPrice = krwPrice / exchangeRate; // 4. 김치 프리미엄 계산 // USDT/USDC는 1달러 기준, 다른 코인은 해외 거래소 가격 필요 let kimp, kimchiPremium; if (symbol.toUpperCase() === 'USDT' || symbol.toUpperCase() === 'USDC') { // 스테이블코인: 1달러 대비 프리미엄 kimp = ((usdPrice - 1) / 1) * 100; kimchiPremium = usdPrice - 1; } else { // 다른 코인: 해외 가격 정보 없이 환율 기준만 표시 kimp = null; kimchiPremium = null; } return { success: true, symbol: symbol.toUpperCase(), krwPrice: krwPrice, exchangeRate: exchangeRate, usdPrice: usdPrice, kimp: kimp, kimchiPremium: kimchiPremium, timestamp: new Date().toISOString(), }; } catch (error) { return { success: false, error: error.message, timestamp: new Date().toISOString(), }; } } /** * MCP 서버 초기화 및 실행 */ async function main() { const server = new Server( { name: 'kimp-server', version: '1.1.0', }, { capabilities: { tools: {}, }, } ); // 도구 목록 핸들러 server.setRequestHandler(ListToolsRequestSchema, async () => { return { tools: [ { name: 'get_kimp', description: '김치 프리미엄(KIMP)을 계산합니다. Bithumb의 KRW 가격과 Naver 환율 정보를 사용하여 실시간 김프를 계산합니다. USDT, USDC 같은 스테이블코인의 김프를 확인할 수 있습니다.', inputSchema: { type: 'object', properties: { symbol: { type: 'string', description: '암호화폐 심볼 (예: USDT, USDC, BTC, ETH)', default: 'USDT', }, }, required: [], }, }, { name: 'get_exchange_rate', description: 'Naver에서 현재 USD/KRW 환율을 조회합니다.', inputSchema: { type: 'object', properties: {}, }, }, { name: 'get_crypto_price', description: 'Bithumb에서 특정 암호화폐의 KRW 가격을 조회합니다.', inputSchema: { type: 'object', properties: { symbol: { type: 'string', description: '암호화폐 심볼 (예: BTC, ETH, USDT)', default: 'BTC', }, }, required: [], }, }, ], }; }); // 도구 실행 핸들러 server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; try { let result; switch (name) { case 'get_kimp': { const symbol = args?.symbol || 'USDT'; result = await calculateKimp(symbol); // 결과를 읽기 쉽게 포맷 let text = `📊 ${result.symbol} 김치 프리미엄 분석\n\n`; if (result.success) { text += `💰 Bithumb 가격: ${result.krwPrice.toLocaleString('ko-KR')} KRW\n`; text += `💱 현재 환율: ${result.exchangeRate.toLocaleString('ko-KR', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} KRW/USD\n`; text += `💵 달러 환산 가격: $${result.usdPrice.toFixed(4)}\n\n`; if (result.kimp !== null) { const kimpSign = result.kimp >= 0 ? '+' : ''; text += `🔥 김치 프리미엄: ${kimpSign}${result.kimp.toFixed(2)}%\n`; text += `📈 차익: ${kimpSign}$${result.kimchiPremium.toFixed(4)}\n`; } else { text += `ℹ️ ${result.symbol}의 정확한 김프 계산을 위해서는 해외 거래소 가격이 필요합니다.\n`; } text += `\n⏰ 조회 시간: ${new Date(result.timestamp).toLocaleString('ko-KR')}`; } else { text += `❌ 오류: ${result.error}`; } return { content: [ { type: 'text', text: text, }, ], }; } case 'get_exchange_rate': { const rate = await getExchangeRate(); result = { success: true, exchangeRate: rate, timestamp: new Date().toISOString(), }; return { content: [ { type: 'text', text: `💱 현재 USD/KRW 환율\n\n${rate.toLocaleString('ko-KR', { minimumFractionDigits: 2, maximumFractionDigits: 2 })} 원\n\n⏰ ${new Date().toLocaleString('ko-KR')}`, }, ], }; } case 'get_crypto_price': { const symbol = args?.symbol || 'BTC'; const price = await bithumbPrice(symbol, 'KRW'); result = { success: true, symbol: symbol.toUpperCase(), price: price, timestamp: new Date().toISOString(), }; return { content: [ { type: 'text', text: `💰 ${symbol.toUpperCase()} 가격 (Bithumb)\n\n${price.toLocaleString('ko-KR')} KRW\n\n⏰ ${new Date().toLocaleString('ko-KR')}`, }, ], }; } default: throw new Error(`Unknown tool: ${name}`); } } catch (error) { return { content: [ { type: 'text', text: `❌ 오류 발생: ${error.message}`, }, ], isError: true, }; } }); // Transport 생성 및 서버 연결 const transport = new StdioServerTransport(); await server.connect(transport); console.error('KIMP MCP Server running on stdio'); } // 에러 처리 및 실행 main().catch((error) => { console.error('Server error:', error); process.exit(1); });

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/DrFirstLee/kimp-mcp'

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