@labforadvanced.study/lotto-mcp-server
Version:
MCP Server for automated lotto purchase and checking with npx support
153 lines β’ 6.58 kB
JavaScript
import { createInterface } from 'readline';
import { encryptCredentials, encodeCredentialsSimple } from './crypto-utils.js';
const rl = createInterface({
input: process.stdin,
output: process.stdout
});
function question(prompt) {
return new Promise((resolve) => {
rl.question(prompt, resolve);
});
}
function questionHidden(prompt) {
return new Promise((resolve) => {
process.stdout.write(prompt);
process.stdin.setRawMode(true);
process.stdin.resume();
let input = '';
const handler = (data) => {
const char = data.toString();
switch (char) {
case '\n':
case '\r':
case '\u0004': // Ctrl+D
process.stdin.setRawMode(false);
process.stdin.pause();
process.stdin.removeListener('data', handler);
process.stdout.write('\n');
resolve(input);
break;
case '\u0003': // Ctrl+C
process.exit();
break;
case '\u007f': // Backspace
if (input.length > 0) {
input = input.slice(0, -1);
process.stdout.write('\b \b');
}
break;
default:
input += char;
process.stdout.write('*');
}
};
process.stdin.on('data', handler);
});
}
async function getCredentials() {
console.log('π λ‘λ κ³μ μ 보 μΈμ½λ© λꡬ');
console.log('================================\n');
const id = await question('λνλ³΅κΆ ID: ');
const password = await questionHidden('λνλ³΅κΆ ν¨μ€μλ: ');
console.log('\nπ μΈμ½λ© λ°©μμ μ ννμΈμ:');
console.log('1. κ°λ¨ λͺ¨λ (Base64) - μΆμ²');
console.log('2. κ³ κΈ λͺ¨λ (AES μνΈν)');
const modeAnswer = await question('\nμ ν (1/2): ');
const useSimpleMode = modeAnswer === '1' || modeAnswer === '';
let useCustomSecret = false;
let customSecret;
if (!useSimpleMode) {
const useCustomSecretAnswer = await question('μ¬μ©μ μ μ μνΈν ν€λ₯Ό μ¬μ©νμκ² μ΅λκΉ? (y/N): ');
useCustomSecret = useCustomSecretAnswer.toLowerCase() === 'y' || useCustomSecretAnswer.toLowerCase() === 'yes';
if (useCustomSecret) {
customSecret = await questionHidden('μνΈν ν€ μ
λ ₯ (32μ μ΄μ κΆμ₯): ');
if (customSecret.length < 8) {
console.log('\nβ οΈ κ²½κ³ : μνΈν ν€κ° λ무 μ§§μ΅λλ€. 보μμ μν΄ μ΅μ 8μ μ΄μ μ
λ ₯ν΄μ£ΌμΈμ.');
customSecret = await questionHidden('μνΈν ν€ μ¬μ
λ ₯: ');
}
}
}
return { id, password, useSimpleMode, useCustomSecret, customSecret };
}
function generateSimpleMCPConfig(encodedCredentials) {
const config = {
mcpServers: {
lotto: {
command: "node",
args: ["path/to/lotto-mcp-server/dist/index.js"],
env: {
LOTTO_CREDENTIALS: encodedCredentials
}
}
}
};
return JSON.stringify(config, null, 2);
}
function generateAdvancedMCPConfig(encryptedId, encryptedPassword, secretKey) {
const config = {
mcpServers: {
lotto: {
command: "node",
args: ["path/to/lotto-mcp-server/dist/index.js"],
env: {
LOTTO_ENCRYPTED_ID: encryptedId,
LOTTO_ENCRYPTED_PASSWORD: encryptedPassword,
...(secretKey && { LOTTO_SECRET_KEY: secretKey })
}
}
}
};
return JSON.stringify(config, null, 2);
}
async function main() {
try {
const credentials = await getCredentials();
console.log('\nβ
μΈμ½λ© μλ£!\n');
if (credentials.useSimpleMode) {
// κ°λ¨ λͺ¨λ (Base64)
const encoded = encodeCredentialsSimple(credentials.id, credentials.password);
console.log('π Base64 μΈμ½λ©λ κ³μ μ 보:');
console.log('================================');
console.log(`μΈμ½λ©λ κ³μ : ${encoded}`);
console.log('\nπ‘ ν°λ―Έλμμ μ§μ μμ±νλ λ°©λ²:');
console.log('================================');
console.log(`echo "${credentials.id},${credentials.password}" | base64`);
console.log('\nπ Claude Desktop μ€μ νμΌ (claude_desktop_config.json):');
console.log('================================');
console.log(generateSimpleMCPConfig(encoded));
}
else {
// κ³ κΈ λͺ¨λ (AES μνΈν)
let secretKey;
if (credentials.useCustomSecret) {
secretKey = credentials.customSecret;
}
const encrypted = encryptCredentials(credentials.id, credentials.password, secretKey);
console.log('π AES μνΈνλ κ³μ μ 보:');
console.log('================================');
console.log(`μνΈνλ ID: ${encrypted.encryptedId}`);
console.log(`μνΈνλ ν¨μ€μλ: ${encrypted.encryptedPassword}`);
if (credentials.useCustomSecret && credentials.customSecret) {
console.log(`μ¬μ©μ μ μ ν€: ${credentials.customSecret}`);
}
console.log('\nπ Claude Desktop μ€μ νμΌ (claude_desktop_config.json):');
console.log('================================');
console.log(generateAdvancedMCPConfig(encrypted.encryptedId, encrypted.encryptedPassword, credentials.customSecret));
}
console.log('\nπ μ¬μ©λ²:');
console.log('1. μμ μ€μ μ claude_desktop_config.jsonμ 볡μ¬νμΈμ');
console.log('2. "path/to/lotto-mcp-server/dist/index.js"λ₯Ό μ€μ κ²½λ‘λ‘ λ³κ²½νμΈμ');
console.log('3. Claude Desktopμ μ¬μμνμΈμ');
console.log('4. μ΄μ ID/ν¨μ€μλ μμ΄ "λ‘λ 3κ²μ ꡬ맀ν΄μ€"λΌκ³ λ§νλ©΄ λ©λλ€!');
}
catch (error) {
console.error('\nβ μ€λ₯ λ°μ:', error instanceof Error ? error.message : 'μ μ μλ μ€λ₯');
process.exit(1);
}
finally {
rl.close();
}
}
main();
//# sourceMappingURL=encrypt-credentials.js.map