Skip to main content
Glama
hjsh200219

Saju Fortune-Telling MCP Server

by hjsh200219

convert_calendar

Convert dates between solar and lunar calendars for Korean Saju fortune-telling analysis. Specify input date, source calendar, and target calendar.

Instructions

양력↔음력 변환

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateYesYYYY-MM-DD
fromCalendarYes
toCalendarYes
isLeapMonthNo

Implementation Reference

  • The main tool handler for 'convert_calendar' that validates input, performs conversion, and returns formatted JSON response.
    export function handleConvertCalendar(args: ConvertCalendarArgs): string { // 입력 검증 if (!isValidDate(args.date)) { throw new Error(`유효하지 않은 날짜 형식입니다: ${args.date}. YYYY-MM-DD 형식을 사용하세요.`); } if (args.fromCalendar === args.toCalendar) { return JSON.stringify( { success: true, message: '동일한 달력 체계입니다.', data: { originalDate: args.date, convertedDate: args.date, }, }, null, 2 ); } // 달력 변환 (로컬 테이블 사용) const result = convertCalendar(args.date, args.fromCalendar, args.toCalendar); const formatted = ` 📅 음양력 변환 결과 ${getCalendarKorean(args.fromCalendar)} → ${getCalendarKorean(args.toCalendar)} 입력: ${result.originalDate} (${getCalendarKorean(result.originalCalendar)}) 결과: ${result.convertedDate} (${getCalendarKorean(result.convertedCalendar)}) ${result.isLeapMonth ? '⚠️ 윤달입니다' : ''} ${result.solarTerm ? `절기: ${result.solarTerm}` : ''} `.trim(); return JSON.stringify( { success: true, data: result, formatted, }, null, 2 ); }
  • Core implementation of calendar conversion logic between solar and lunar calendars using local data tables.
    export function convertCalendar( date: string, fromCalendar: CalendarType, toCalendar: CalendarType ): CalendarConversion { const inputDate = new Date(date); if (fromCalendar === toCalendar) { return { originalDate: date, originalCalendar: fromCalendar, convertedDate: date, convertedCalendar: toCalendar, solarTerm: getCurrentSolarTerm(inputDate), }; } // 양력 → 음력 if (fromCalendar === 'solar' && toCalendar === 'lunar') { const result = solarToLunarLocal( inputDate.getFullYear(), inputDate.getMonth() + 1, inputDate.getDate() ); if (!result) { throw new Error( `지원하지 않는 연도입니다: ${inputDate.getFullYear()} (1900-2200만 지원)` ); } const dateString = `${result.year}-${String(result.month).padStart(2, '0')}-${String(result.day).padStart(2, '0')}`; return { originalDate: date, originalCalendar: 'solar', convertedDate: dateString, convertedCalendar: 'lunar', isLeapMonth: result.isLeapMonth, solarTerm: getCurrentSolarTerm(inputDate), }; } // 음력 → 양력 if (fromCalendar === 'lunar' && toCalendar === 'solar') { const result = lunarToSolarLocal( inputDate.getFullYear(), inputDate.getMonth() + 1, inputDate.getDate(), false // 기본적으로 평달로 가정 ); if (!result) { throw new Error( `지원하지 않는 연도입니다: ${inputDate.getFullYear()} (1900-2200만 지원)` ); } const dateString = `${result.year}-${String(result.month).padStart(2, '0')}-${String(result.day).padStart(2, '0')}`; const solarDate = new Date(dateString); return { originalDate: date, originalCalendar: 'lunar', convertedDate: dateString, convertedCalendar: 'solar', solarTerm: getCurrentSolarTerm(solarDate), }; } throw new Error('유효하지 않은 달력 변환입니다'); }
  • Registration of the 'convert_calendar' tool schema factory in the MCP tool definitions.
    convert_calendar: () => ({ name: 'convert_calendar', description: '양력↔음력 변환', inputSchema: { type: 'object', properties: { date: { type: 'string', description: 'YYYY-MM-DD' }, fromCalendar: { type: 'string', enum: ['solar', 'lunar'] }, toCalendar: { type: 'string', enum: ['solar', 'lunar'] }, isLeapMonth: { type: 'boolean', default: false }, }, required: ['date', 'fromCalendar', 'toCalendar'], }, }),
  • Zod schema definition for input validation of the 'convert_calendar' tool.
    export const ConvertCalendarSchema = z.object({ date: DateSchema.describe('변환할 날짜 (YYYY-MM-DD)'), fromCalendar: CalendarTypeSchema.describe('입력 달력 타입'), toCalendar: CalendarTypeSchema.describe('출력 달력 타입'), isLeapMonth: z.boolean().default(false).describe('음력 윤달 여부 (음력 입력 시)') });
  • Dispatch case in central tool handler that routes 'convert_calendar' calls to the specific handler.
    case 'convert_calendar': return handleConvertCalendar(args as Parameters<typeof handleConvertCalendar>[0]);

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/hjsh200219/fortuneteller'

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