get-chapter
Retrieve all verses from a specific Bible chapter in Korean translations. Users can specify the book, chapter number, and preferred Korean Bible version to access complete chapter content.
Instructions
Get all verses from a specific chapter of the Korean Bible
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| book | Yes | Book name (English or Korean) or code (e.g., 'Genesis', '창세기', 'gen') | |
| chapter | Yes | Chapter number | |
| version | No | Bible translation version (default: GAE) | GAE |
Implementation Reference
- src/index.ts:386-417 (handler)Handler logic for the 'get-chapter' tool: resolves book name to code, fetches chapter verses from Bible website, formats as Markdown.case "get-chapter": { const { book, chapter, version = "GAE" } = args as { book: string; chapter: number; version?: string; }; const bookCode = findBookCode(book); if (!bookCode) { return { content: [ { type: "text", text: `Error: Book '${book}' not found. Use list-books to see available books.`, }, ], }; } const chapterData = await fetchChapter(bookCode, chapter, version); let result = `# ${chapterData.book} (${chapterData.bookKorean}) ${chapterData.chapter}\n`; result += `**Translation:** ${chapterData.versionName}\n\n`; for (const verse of chapterData.verses) { result += `**${verse.number}.** ${verse.text}\n\n`; } return { content: [{ type: "text", text: result }], }; }
- src/index.ts:259-278 (schema)Input schema definition for the 'get-chapter' tool, specifying parameters: book (string), chapter (number), version (string enum, optional).inputSchema: { type: "object", properties: { book: { type: "string", description: "Book name (English or Korean) or code (e.g., 'Genesis', '창세기', 'gen')", }, chapter: { type: "number", description: "Chapter number", }, version: { type: "string", description: "Bible translation version (default: GAE)", enum: ["GAE", "GAE1", "NIR", "KOR", "CEV"], default: "GAE", }, }, required: ["book", "chapter"], },
- src/index.ts:256-279 (registration)Tool registration object including name, description, and inputSchema, added to the tools list returned by listTools handler.{ name: "get-chapter", description: "Get all verses from a specific chapter of the Korean Bible", inputSchema: { type: "object", properties: { book: { type: "string", description: "Book name (English or Korean) or code (e.g., 'Genesis', '창세기', 'gen')", }, chapter: { type: "number", description: "Chapter number", }, version: { type: "string", description: "Bible translation version (default: GAE)", enum: ["GAE", "GAE1", "NIR", "KOR", "CEV"], default: "GAE", }, }, required: ["book", "chapter"], }, },
- src/index.ts:143-194 (helper)Helper function that fetches HTML from Bible site, parses verses using Cheerio, and returns structured Chapter data used by get-chapter.async function fetchChapter( bookCode: string, chapter: number, version: string = "GAE" ): Promise<Chapter> { const url = `https://www.bskorea.or.kr/bible/korbibReadpage.php?version=${version}&book=${bookCode}&chap=${chapter}`; const response = await fetch(url); const html = await response.text(); const $ = cheerio.load(html); const verses: Verse[] = []; // Parse verses from span elements // The website uses span elements where verse text starts with verse number $("span").each((i, elem) => { const text = $(elem).text().trim(); // Look for pattern: number followed by spaces and text const match = text.match(/^(\d+)\s+(.+)$/s); if (match) { const verseNum = parseInt(match[1]); let verseText = match[2]; // Remove footnote markers (like 1), 2), etc.) verseText = verseText.replace(/\d+\)/g, "").trim(); // Remove explanatory text that comes after line breaks (like "또는 ...") const lines = verseText.split("\n"); verseText = lines[0].trim(); // Avoid duplicate verses (website has multiple spans per verse) if (!verses.find((v) => v.number === verseNum)) { verses.push({ number: verseNum, text: verseText, }); } } }); const bookInfo = getBookInfo(bookCode); return { book: bookInfo?.name || bookCode, bookKorean: bookInfo?.korean || "", chapter, version, versionName: TRANSLATIONS[version] || version, verses, }; }
- src/index.ts:109-130 (helper)Helper function to resolve book name (English, Korean, or code) to the standard book code using BIBLE_BOOKS mapping.function findBookCode(bookName: string): string | null { const normalized = bookName.toLowerCase().trim(); // Try direct match for (const [name, info] of Object.entries(BIBLE_BOOKS)) { if (name.toLowerCase() === normalized || info.korean === bookName || info.code === normalized) { return info.code; } } // Try partial match for (const [name, info] of Object.entries(BIBLE_BOOKS)) { if (name.toLowerCase().includes(normalized) || info.korean.includes(bookName)) { return info.code; } } return null; }