jw-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@jw-mcpShow me the Watchtower article for this week."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
jw-mcp
JW.org 공개 자료(성경·파수대·집회 워크북·영상 자막·교과)를 Claude 에서 대화로 쓰기 위한 원격 MCP 서버. 자체 OAuth 2.1 인증(다중 사용자)을 갖추고 hosub 홈서버에서 독립 프로세스로 돈다.
상류 advenimus/jw-mcp 의 도구 구현을 이어받되,
Smithery 호스팅 전제를 걷어내고 자체 호스팅 + 인증 + 운영 관측을 붙였다.
특징
도구 11종 — 성경 구절·연구 노트, 파수대, 집회 워크북, 영상 자막, 교과
자체 OAuth 2.1 — hosub 의 인증과 코드·DB·issuer 를 전혀 공유하지 않는다
다중 사용자 — 가입 → 관리자 승인 → 커넥터 연결. 계정을 끄면 토큰이 즉시 죽는다
경로 분리 배치 —
hosub.duckdns.org/jw하나로 기존 서비스와 도메인을 공유대시보드 API — hosub 대시보드가 그대로 그릴 수 있는 형태로 지표를 내보낸다
이중 진입점 — 원격(HTTP+OAuth)과 로컬(stdio, 인증 없음)을 같은 도구 목록으로
Related MCP server: JW MCP Server
도구
도구 | 설명 |
| 성경 책 이름 검색 (한/영) |
| 구절 본문 조회 |
| 구절 + 연구 노트 + 상호 참조 |
| jw.org finder 링크 생성 |
| 연구용 파수대 기사 목록 (현재 호 자동 계산) |
| 파수대 기사 본문 (RTF → 평문) |
| 집회 워크북 주차 목록 |
| 워크북 주차 본문 (RTF → 평문) |
| 교과 과 목록 |
| 교과 본문 |
| 영상 자막 (ID 또는 URL) |
성경 책 번호는 1–39(구약) / 40–66(신약). 파수대는 현재 월 −2개월이 연구용 호다
(2026년 7월 → 2026년 5월호). 언어는 langwritten 으로 바꾼다(E 기본, K 한국어).
아키텍처
[claude.ai / 모바일 앱]
│ Custom Connector (OAuth 2.1 + PKCE)
▼
[Caddy · hosub.duckdns.org]
├─ /jw/* ──▶ jw-mcp 127.0.0.1:8604 ← 이 저장소
├─ /.well-known/oauth-*/jw... ──▶ jw-mcp 127.0.0.1:8604
├─ / · /api/* · /static/* ──▶ hosub 대시보드 :8701
└─ (그 외) ──▶ hosub MCP :8700
[hosub 대시보드 :8701] ──▶ http://127.0.0.1:8604/api/dash/* (Caddy 미라우팅 = 비공개)jw-mcp 는 hosub 과 호스트만 공유한다. 프로세스·저장소·DB·OAuth issuer·실행 계정이 전부 분리되어 있어, 한쪽을 배포하거나 껐다 켜도 다른 쪽 세션이 끊기지 않는다.
인증 경계
경계 | 자격증명 | 쓰이는 곳 |
MCP 도구 호출 | OAuth 2.1 Bearer (사용자 계정에 바인딩) |
|
브라우저 로그인 | 서명 세션 쿠키 ( | 계정·관리자 화면 |
대시보드 조회 |
|
|
셋은 서로를 대신하지 못한다. 특히 세션 쿠키로는 /jw/mcp 에 접근할 수 없다.
다중 사용자 정책
가입 → status=pending → 관리자 승인 → active → 커넥터 연결 가능최초 가입자는 자동으로 관리자 겸 활성 사용자가 된다(그러지 않으면 아무도 아무를 승인할 수 없다).
JW_ADMIN_EMAILS로 추가 관리자를 지정할 수 있다.JW_INVITE_CODE를 설정하면 코드를 아는 사람은 승인 없이 바로 쓴다.계정을
disabled로 바꾸면 이미 발급된 토큰이 그 즉시 전부 무효가 된다 (Bearer 검증이 매 요청 계정 상태를 확인한다). 리프레시로도 되살아나지 않는다.마지막 활성 관리자는 비활성화할 수 없다 — 자기 자신을 잠그는 사고 방지.
설치
서버 설치 절차는 docs/SETUP.md 를 따른다. 요약:
sudo git clone https://github.com/teenfo/JW-MCP.git /opt/jw-mcp
sudo bash /opt/jw-mcp/deploy/bootstrap.sh # 유저·의존성·.env·systemd 자동 준비
# 출력되는 안내대로 Caddy 스니펫 반영 → /jw/signup 에서 첫 계정 생성main 에 머지하면 jw-mcp-update.timer 가 5분 내 자동 배포한다(pull 기반).
로컬 개발
npm install
npm test # 도구 레지스트리 단위 테스트 (네트워크 불필요)
npm run test:oauth # OAuth 전 구간 통합 테스트 (서버를 직접 띄운다)
JW_SESSION_SECRET=$(openssl rand -hex 32) \
JW_INTERNAL_TOKEN=$(openssl rand -hex 32) \
JW_SECURE_COOKIES=false \
npm run start:http # http://127.0.0.1:8604/jw/signup로컬 Claude Desktop 은 인증 없이 stdio 로 붙일 수 있다:
{ "mcpServers": { "jw": { "command": "node", "args": ["/path/to/JW-MCP/src/index.js"] } } }도구를 추가할 때
src/tools/registry.js 한 곳만 고치면 stdio·HTTP 양쪽에 동시에 반영된다.
상류처럼 진입점마다 배열을 따로 들고 있지 않으므로 한쪽만 고쳐 누락되는 일이 없다.
src/tools/<이름>.js에 도구 정의 + 구현 + 핸들러(자기 도구가 아니면null반환)src/tools/registry.js의allTools와toolHandlers에 추가tests/registry.test.js의 도구 개수 갱신
문서
docs/SETUP.md— 서버 설치·Caddy 반영·대시보드 연동 런북docs/DASHBOARD-API.md— 대시보드 연동 API 스펙 (소비자 구현용 계약)docs/UPSTREAM-README.md— 상류 저장소 원문 (도구 상세)CLAUDE.md— Claude Code 용 저장소 안내
라이선스
MIT. JW.org 공개 자료를 조회할 뿐이며 어떤 콘텐츠도 재배포하지 않는다. 이 저장소는 Watch Tower Bible and Tract Society 와 무관한 비공식 프로젝트다.
Available Tools
11 toolsget_bible_verseA
Get plain Bible verse text (New World Translation, Study Edition) from wol.jw.org. Returns the COMPLETE verse — poetic books such as Psalms and Proverbs are stored as separate lines on WOL and are joined here, so contrast verses come back whole. For study notes and cross-references use get_verse_with_study instead.
| Name | Required | Description | Default |
|---|---|---|---|
| book | Yes | Bible book number (1-66). Examples: Genesis=1, Matthew=40, John=43, Revelation=66. Use search_bible_books to find book numbers. | |
| verse | Yes | Verse number within the chapter | |
| chapter | Yes | Chapter number within the book | |
| langwritten | No | Language code for the content (default "E" = English). Supported: E, KO, S, F, X, T, J, I, U, TG, IN. Use "KO" for Korean (한국어 신세계역). Same values as the langwritten parameter on the Watchtower/Workbook tools. | E |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses an important and non-obvious behavior: poetic books are stored as separate lines and are joined here, ensuring complete verses. It also specifies the translation and source. It does not mention return format or error conditions, but the core behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, each earning its place: purpose, a specific behavioral nuance, and an alternative-tool pointer. It is front-loaded with the primary action and avoids any filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the rich schema coverage, and no output schema, the description is complete. It covers the source, translation, the special line-joining behavior, and the alternative for study notes. There are no significant gaps that would impair an agent's ability to select and invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage of all four parameters, including descriptions and examples for book numbers and language codes. The tool description does not add extra parameter semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function: retrieving plain Bible verse text from a specific source (wol.jw.org, NWT Study Edition). It distinguishes itself from sibling get_verse_with_study by explicitly stating it returns plain text, not study notes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit guidance: use this tool for plain verse text, and use get_verse_with_study for study notes and cross-references. This directly addresses when to use the tool versus its main alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_bible_verse_urlA
Get the jw.org URL for a Bible verse or range of verses. Returns a direct link to view the scripture on jw.org. Supports single verses (e.g., verse: "18"), verse ranges (e.g., verse: "14-16"), and comma-separated verses (e.g., verse: "1,3,5" - will convert to range if contiguous). Use search_bible_books to find book numbers. Perfect for adding clickable scripture links to markdown documents.
| Name | Required | Description | Default |
|---|---|---|---|
| book | Yes | Bible book number (1-66). Examples: Genesis=1, Psalms=19, Isaiah=23, Matthew=40, Revelation=66. Use search_bible_books to find book numbers. | |
| verse | No | Optional verse reference. Can be: single verse ("18"), verse range ("14-16"), or comma-separated verses ("1,3,5"). If omitted, returns URL for the entire chapter. | |
| chapter | Yes | Chapter number within the book | |
| langwritten | No | Language code for the content (default "E" = English). Supported: E, KO, S, F, X, T, J, I, U, TG, IN. Use "KO" for Korean (한국어 신세계역). Same values as the langwritten parameter on the Watchtower/Workbook tools. | E |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits on its own. It does so by explaining that omitted verse returns the entire chapter, and that comma-separated verses 'will convert to range if contiguous.' This adds meaningful insight into tool behavior. It does not cover failure modes or edge cases, but for a simple URL generator, the disclosed behavior is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, opening with the core purpose, then detailing supported verse formats and implementation notes. Every sentence adds information: the return type, the verse handling rules, the book number lookup reference, and the markdown use case. No fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (4 flat parameters, no output schema), the description covers all essential aspects: input formats, default behavior, and common use cases. It references search_bible_books for book numbers and aligns langwritten with sibling tools. It misses explicit differentiation from get_bible_verse (content vs. URL), but the purpose and use case already imply this distinction.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already has 100% coverage of all parameters with descriptions, so the baseline is 3. The description does add some interpretive value by explaining the comma-separated conversion and default language, but this largely repeats what the schema states. It also adds a pointer to search_bible_books, which is helpful but not a major semantic enhancement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get the jw.org URL for a Bible verse or range of verses.' It specifies the output (direct link) and distinguishes from sibling content tools like get_bible_verse that likely return scripture text. The examples and use case ('adding clickable scripture links') reinforce its unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides practical guidance on when to use the tool, such as 'Perfect for adding clickable scripture links to markdown documents.' It also directs users to search_bible_books for book numbers and notes the langwritten parameter matches other tools. However, it does not explicitly state when NOT to use this tool versus alternatives like get_bible_verse, leaving some room for ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_jw_captionsA
Fetches video captions from JW.org by video ID or URL. Accepts either a direct video ID (e.g., "pub-jwbvod25_17_VIDEO") or a JW.org URL (e.g., "https://www.jw.org/finder?srcid=jwlshare&wtlocale=E&lank=pub-jwbvod25_17_VIDEO")
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes | The JW.org video ID or a JW.org URL containing the video ID. If a URL is provided, the video ID will be automatically extracted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It does disclose a key behavior: auto-extraction of video ID from a URL. However, it doesn't mention whether the operation is read-only, what happens on invalid inputs, or any rate limits/auth requirements. The word 'fetches' implies a read operation, but this is implicit rather than explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two sentences. The first sentence states the primary function and input options, while the second provides illustrative examples. No unnecessary words or repetition, making it an exemplar of efficient description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema, the description covers the essential aspects: purpose, accepted inputs, and extraction behavior. It doesn't detail the exact return format (e.g., plain text vs. structured captions), but this is a minor gap given the tool's simplicity and clear primary function.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description for the single parameter already covers the core semantics (video ID or URL, auto-extraction). The tool description adds valuable concrete examples (e.g., 'pub-jwbvod25_17_VIDEO' and a full URL) that go beyond the schema, helping the agent understand the accepted formats. This exceeds the baseline of 3 set by high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool 'Fetches video captions from JW.org' with a specific verb and resource. It further specifies the input types (video ID or URL) and includes concrete examples, which fully distinguishes it from sibling tools that handle workbook, watchtower, or Bible content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use this tool: fetching captions for videos on JW.org. It doesn't explicitly exclude alternatives, but the siblings are all for distinct content types (links, content, Bible verses, lessons), making the intended use unmistakable. A slight deduction for not stating 'when not to use' or explicitly naming alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lesson_contentB
「하느님의 교훈이 담긴 성경 이야기 (훈)」 특정 과의 내용을 가져옵니다. 1-116과까지 지원합니다.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | 언어 코드 (기본값: ko) | ko |
| lesson_number | Yes | 과 번호 (1-116) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It discloses only the supported lesson range (1-116) but omits behavior for invalid inputs, language selection defaults, authentication needs, or return format. Minimal disclosure for a read operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is direct and front-loaded with the resource name and action. No filler or redundant explanation, every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple content retrieval tool with full schema parameter coverage and no output schema, the description provides essential context: resource name, scope, and valid range. Missing details like error cases or response language are not critical given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover both parameters fully (language enum with default ko, lesson_number with min/max). The tool description restates the range in prose but adds no additional semantic meaning beyond what the schema already provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses specific verb '가져옵니다' (fetches) and names the exact resource '「하느님의 교훈이 담긴 성경 이야기 (훈)」' with scope '특정 과' (specific lesson) and range 1-116. This clearly distinguishes it from sibling tools like get_lesson_list or getWorkbookContent.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives such as get_lesson_list for listing lessons or get_bible_verse for scripture. The description only implies it is for specific lesson content; no exclusions or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_lesson_listB
「하느님의 교훈이 담긴 성경 이야기 (훈)」 전체 목록을 가져옵니다.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | 끝 과 번호 (기본값: 116) | |
| start | No | 시작 과 번호 (기본값: 1) | |
| language | No | 언어 코드 (기본값: ko) | ko |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description bears full responsibility for behavioral disclosure. It only says 'entire list' but does not explain that start/end parameters allow subsetting, what the list items contain, or how language affects output. The term '전체 목록' also slightly conflicts with the ability to specify a range via the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately conveys the tool's core function. It is appropriately concise for a simple list-fetching operation with no unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and annotations, the description should explain the return format and parameter behavior, but it only states that it fetches the entire list. It does not mention that start/end control the range, the meaning of '언어 코드', or that the response is a list of lesson titles. This is a notable gap for a tool with three configurable parameters.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have schema descriptions with defaults and ranges (start, end, language), so schema coverage is 100%. The tool description adds no additional parameter semantics beyond what the schema already provides, maintaining the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states '「하느님의 교훈이 담긴 성경 이야기 (훈)」 전체 목록을 가져옵니다' which clearly identifies the resource and the action (fetching the full list). This distinguishes it from sibling tools like get_lesson_content, which fetches the actual lesson content. The specific publication name and verb '가져옵니다' make the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided; the description neither explains when to prefer this tool over get_lesson_content nor when a range parameter would be appropriate. It simply states what it does without any contextual instructions. This leaves the agent to infer the tool's positioning from its name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_verse_with_studyA
Get Bible verse(s) with comprehensive study content from wol.jw.org. Supports single verses or ranges (e.g., "14-16"). Returns verse text, study notes, cross-references, research articles from the Research Guide, and chapter outlines. Field selection allows you to customize what content is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| book | Yes | Bible book number (1-66). Use search_bible_books to find book numbers. | |
| fetch | No | Force fresh data from wol.jw.org (useful when content appears to be missing). Default: false | |
| limit | No | Maximum number of items for list-type fields. Applies to study_articles AND chapter_level.study_articles (the chapter index can be 50+ entries). Default: 5. | |
| verse | Yes | Single verse number (e.g., "14") or verse range (e.g., "14-16") | |
| fields | No | Content fields to include. Options: "verses" (verse text), "study_notes" (verse-specific notes), "study_articles" (research guide articles), "cross_references" (related scriptures), "chapter_level" (outline and chapter content), "combined_text" (all verses as single text). Default: ["verses", "study_notes"] | |
| chapter | Yes | Chapter number within the book | |
| langwritten | No | Language code for the content (default "E" = English). Supported: E, KO, S, F, X, T, J, I, U, TG, IN. Use "KO" for Korean (한국어 신세계역). Same values as the langwritten parameter on the Watchtower/Workbook tools. | E |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It describes what the tool returns and its source (wol.jw.org), which is helpful. However, it omits behavioral traits such as caching behavior (the 'fetch' parameter forces fresh data) and default field selection, which are important for setting user expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that front-load the purpose and clearly list the returned content. Every word earns its place, with no redundant information or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no output schema, the description provides a solid high-level overview, including the types of returned content and the ability to customize fields. However, it does not address important operational details like the default fields, the limit parameter's effect on list fields, or the meaning of fetch, though these are covered in the schema. It is adequate but not exhaustive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema itself provides detailed parameter descriptions. The tool description adds a verse range example and mentions field selection, which supplements but does not significantly exceed schema information. This aligns with the baseline score of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Get Bible verse(s) with comprehensive study content', listing specific content types (verse text, study notes, cross-references, research articles, chapter outlines). This differentiates it from the simpler sibling tool get_bible_verse, which likely returns only verse text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives like get_bible_verse. It implies use when comprehensive study content is needed, but lacks direct guidance such as 'for plain verse text, use get_bible_verse instead.' The usage context is implied through the feature list, not stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getWatchtowerContentA
STEP 2: Get the actual Watchtower article content after the user chooses an article. Takes the RTF URL from getWatchtowerLinks, downloads and converts it to clean plain text (parsedText), and additionally returns a structured object that recovers the article's shape: paragraph numbers with their questions, section headings and the paragraphs they cover, theme scripture, key-point box, opening/closing songs, read-aloud scriptures, footnotes and the review box. Use structured to build study notes; fall back to parsedText when you need the raw wording.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The RTF file URL from getWatchtowerLinks results (e.g. "https://cfp2.jw-cdn.org/a/...") | |
| title | No | Optional article title from getWatchtowerLinks. Improves weekRange detection in `structured`; inferred from the content when omitted. | |
| structured | No | Include the `structured` breakdown (paragraphs, questions, sections, songs, footnotes). Set false to save tokens when you only need the plain text. Default: true | |
| langwritten | No | Language code of the article. Inferred from the URL when omitted. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description details the download-convert process and enumerates the structured object's components, giving transparency about output. No annotations exist, so this description carries the burden, and it sufficiently explains behavior without side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured, starting with a clear step label and a concise summary, then providing necessary detail about the structured object. No unnecessary repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description adequately describes both return formats and their fields, enabling the agent to know what to expect. It also hints at token-saving via the structured parameter, though that's in schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions cover all four parameters with examples and default behavior. The tool description reinforces the URL source but doesn't add significant new meaning beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves Watchtower article content, converting an RTF URL to plain text and structured data. It distinguishes itself from getWatchtowerLinks by referencing it as the source and marking this as STEP 2.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says to use the RTF URL from getWatchtowerLinks and provides guidance on choosing between `structured` and `parsedText`, indicating appropriate usage contexts. It does not explicitly state when not to use the tool, but the sequential reference implies its role.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getWatchtowerLinksA
STEP 1: Get JW.org Watchtower study articles. When a user asks for current/this week's Watchtower content, use this tool FIRST without any parameters — it automatically picks the right issue (Watchtower study articles are published 2 months ahead, so July 2026 studies come from the May 2026 issue). Each article includes machine-readable weekStart/weekEnd (ISO dates) and isCurrentWeek, so you never have to parse the date out of the title, plus wolUrl — a human-readable wol.jw.org link for the current week's article.
| Name | Required | Description | Default |
|---|---|---|---|
| pub | No | Publication code: "w" for Watchtower (Study edition) | w |
| issue | No | Issue in YYYYMM00 format. Leave empty for the current study articles (the server calculates it — Watchtower studies run 2 months after the issue date) | |
| fileformat | No | File format: "RTF" for Rich Text Format | RTF |
| langwritten | No | Language code: "E" English, "KO" Korean, "S" Spanish, etc. | E |
| includeWolUrl | No | Resolve wolUrl (a readable wol.jw.org link) for the current week's article. Costs one extra request. Default: true |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool auto-picks the issue, returns machine-readable dates and isCurrentWeek, and that wolUrl resolution costs an extra request. It does not disclose the exact return format (e.g., array vs object) but provides sufficient behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and then provides necessary context about publication timing and output fields. While slightly verbose (around 100 words), every sentence adds useful information; the example about July 2026/May 2026 is helpful, not fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the key output (weekStart/weekEnd, isCurrentWeek, wolUrl) and the automatic issue selection, which is essential for correct use. It does not fully detail the return structure or error/edge cases, but given the tool's simplicity and no output schema, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds minimal parameter semantics beyond the schema—it emphasizes that no parameters are needed for the current week and explains the issue date offset, which is already in the schema. No additional value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'STEP 1: Get JW.org Watchtower study articles,' which clearly states the verb (get), resource (Watchtower study articles), and scope (JW.org). It distinguishes this tool from siblings like getWatchtowerContent by focusing on articles and their associated links/metadata, not content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says to use this tool FIRST for current/this week's Watchtower content and without parameters, explaining the auto-selection logic. However, it does not explicitly mention alternatives or when-not-to-use cases, though the sibling names imply content retrieval would follow this step.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getWorkbookContentA
STEP 2: Get the actual CLM workbook content after user chooses a week. Use this tool AFTER getWorkbookLinks when user specifies which week they want (e.g., "May 5-11" or "June 30-July 6"). Takes the RTF URL from Step 1 results, downloads the RTF file, parses it to clean plain text, and returns the formatted workbook content with proper line breaks and structure.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | The RTF file URL from getWorkbookLinks results (e.g., "https://cfp2.jw-cdn.org/a/...") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It transparently explains the tool's process: takes the RTF URL, downloads the RTF file, parses it to plain text, and returns formatted workbook content. This goes beyond a simple 'get' and reveals the underlying workflow. It does not mention error handling or side effects, but for a read-only parse operation, this level of detail is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: the first sentence states the purpose, the second provides usage sequencing and process details. It is front-loaded with the action ('Get'), includes a step indicator, and avoids unnecessary fluff. Every sentence contributes to understanding the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a single parameter, no annotations, and no output schema, so the description must cover purpose, usage, process, and return value. It does all of this: it explains the inputs (RTF URL from getWorkbookLinks), the process (download, parse), and the output (formatted workbook content with line breaks). The flow context is also provided, making it complete for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage for the 'url' parameter is 100%, already explaining that it is the RTF file URL from getWorkbookLinks results. The tool description reinforces this by stating it takes the RTF URL from Step 1, adding context about the source and format. This achieves the baseline of 3 and earns an extra point for reinforcing the parameter's provenance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get the actual CLM workbook content' after the user chooses a week. It specifies the resource (CLM workbook), the verb (get), and distinguishes from sibling tools like getWatchtowerContent by explicitly referencing getWorkbookLinks as the source. The step numbering and mention of RTF parsing make the function unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Use this tool AFTER getWorkbookLinks when user specifies which week they want.' It even gives example week formats. This clearly sequences the tool relative to its sibling and explains the prerequisite, leaving no ambiguity about when to select it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
getWorkbookLinksA
STEP 1: Get JW.org "Our Christian Life and Ministry" (CLM) meeting workbook weeks. When a user asks for CLM workbook content, use this tool FIRST to show them available weeks. Returns weekly titles like "May 5-11 (Proverbs 12)" with their RTF download URLs. Automatically uses current month/year for the issue.
| Name | Required | Description | Default |
|---|---|---|---|
| pub | No | Publication code: "mwb" for Meeting Workbook (CLM workbook) | mwb |
| issue | No | Issue in YYYYMM00 format. Leave empty to use current month/year automatically (e.g., "20250500" for May 2025) | |
| fileformat | No | File format: "RTF" for Rich Text Format | RTF |
| langwritten | No | Language code: "E" for English, "S" for Spanish, etc. | E |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the return format (weekly titles with RTF URLs) and the automatic month/year behavior. However, it does not describe pagination, limit of results, error handling, or indicate that this is a non-destructive read operation. The extra context about STEP 1 adds workflow transparency but not deep behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with 'STEP 1' and a gerund phrase that immediately states the action. Every sentence contributes: purpose, usage timing, return value and default behavior. No filler or redundant information. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 4 optional parameters and no output schema, the description covers the essential return value (weekly titles with URLs) and the default behavior (current month/year). It does not explain how the URLs might be used downstream or what happens with no results, but the focus on listing available weeks is sufficient for its simple role. The missing details are minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds minimal semantic value: it mentions automatic use of current month/year (already in the 'issue' parameter) and RTF URLs (already in 'fileformat'). No new parameter nuances are introduced. The schema already handles parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the tool's function: getting JW.org CLM meeting workbook weeks, returning weekly titles with RTF download URLs. It distinguishes itself from siblings like getWorkbookContent by positioning itself as the first step. The verb 'Get' and specific resource 'JW.org CLM workbook weeks' make the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'When a user asks for CLM workbook content, use this tool FIRST.' It also explains the automatic fallback to current month/year. While it doesn't explicitly list alternatives or exclusions, the 'FIRST' directive implies a workflow priority over content tools. This is clear context with a strong usage hint, but lacks direct comparison to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_bible_booksA
Search for Bible books by name or abbreviation and get their book number (1-66), which the other scripture tools require. Searches English names/abbreviations and, when langwritten is set, that language's names and abbreviations too. Examples: "matt" -> Matthew (40), "잠언" or "잠" (with langwritten "KO") -> 잠언 (20), "1 john" -> 1 John (62).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return (default: 10) | |
| query | Yes | Search query - can be book name, abbreviation, or number. Examples: "matthew", "matt", "mt", "40", "1 john" | |
| langwritten | No | Language code for the content (default "E" = English). Supported: E, KO, S, F, X, T, J, I, U, TG, IN. Use "KO" for Korean (한국어 신세계역). Same values as the langwritten parameter on the Watchtower/Workbook tools. | E |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It explains that it searches English names/abbreviations and, with langwritten set, other languages' names/abbreviations. Examples show input/output behavior. It doesn't discuss ordering, limit, or error cases, but for a simple search tool this is reasonably transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single paragraph with 4 sentences. It front-loads the purpose, then provides language details and examples. Every sentence earns its place with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool with no output schema, the description covers what it does, why it's needed, and gives examples. It could be more explicit about the exact return format (book name and number) and edge cases, but it is adequate for an agent to select and use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description adds value by providing concrete query examples ('matt', '잠언') and clarifying the langwritten effect. It does not add detail about limit, but the schema already describes it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Search for Bible books by name or abbreviation and get their book number (1-66)'. It also differentiates from siblings by noting that other scripture tools require the book number. Examples reinforce the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'which the other scripture tools require' gives strong context for when to use this tool: as a lookup step before using other scripture tools. Examples show usage patterns, but it doesn't explicitly name alternatives or state when not to use it, so not a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
v2.0.0- First observed
get_bible_verse - First observed
get_bible_verse_url - First observed
get_jw_captions - First observed
get_lesson_content - First observed
get_lesson_list - First observed
get_verse_with_study - First observed
getWatchtowerContent - First observed
getWatchtowerLinks - First observed
getWorkbookContent - First observed
getWorkbookLinks - First observed
search_bible_books
TDQS
Scored across 11 tools
Each tool targets a distinct resource or step in a workflow. The workbook and Watchtower tools are explicitly paired by step and publication, while Bible tools clearly separate book search, plain text, study content, and URL generation. No two tools appear to do the same thing.
The tool names mix camelCase (getWorkbookLinks) and snake_case (search_bible_books) conventions, and use both 'get' and 'search' as verbs. The pattern is evident but not uniformly applied, making it a mixed convention that remains readable.
With 11 tools, the set is well-scoped for the server's purpose of accessing JW.org resources. Each tool covers a distinct function within the overall workflow, and the count feels appropriate without being excessive or too thin.
The server covers the primary workflows: retrieving CLM workbook weeks and content, Watchtower articles and detailed content, Bible book lookup, plain and study-enhanced verses, verse URLs, lesson lists/content, and video captions. No obvious gaps hamper the intended use cases.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Scripture-cited answers to any Bible question, plus verse text and study pages, for AI agents.
Search, browse & read 340+ Claude Code marketing & SEO skills from any MCP client.
Give Claude only the Google Drive files you choose. Every action logged.
Source discipline for Torah study in Claude: read the real texts, quote exactly, never fabricate
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceProvides read-only access to the Watchtower Online Library (WOL) with advanced search capabilities, document retrieval, and multilingual support. Enables users to search and browse Jehovah's Witnesses publications through natural language interactions.5MIT
- AlicenseAqualityAmaintenanceProvides access to JW.org content including Christian Life and Ministry workbook materials, Watchtower study articles, and video captions with subtitles across multiple languages.93038MIT
- FlicenseAqualityDmaintenanceEnables Claude Desktop to search the CanLII Canadian legal database and retrieve the full text of matching legal documents.1-
- FlicenseAqualityDmaintenanceProvides controlled, verifiable access to jw.org content for AI applications, enabling search, article retrieval, and scripture lookup while preventing hallucinations.4-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/teenfo/JW-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server