JWBLOCK
MCP Tools for Jehovah's Witnesses
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://www.npmjs.com/package/jw-mcp) [](https://github.com/advenimus/jw-mcp/releases)
An MCP server for working with JW.org content — Bible scripture lookup with study notes, workbook materials, Watchtower articles, and video captions.
Quick Start
Claude Code (Recommended)
claude mcp add jw-mcp -- npx -y jw-mcp
Claude Desktop
Download the latest jw-mcp.mcpb from Releases and open it — Claude Desktop will install it automatically.
Or add manually to your config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS, %APPDATA%\Claude\claude_desktop_config.json on Windows):
{
"mcpServers": {
"jw-mcp": {
"command": "npx",
"args": ["-y", "jw-mcp"]
}
}
}Other MCP Clients (Cursor, Windsurf, etc.)
npx -y jw-mcp
Docker (self-hosted)
Run this server on a machine with a public HTTPS URL, then paste that URL into Grok, Claude.ai, or ChatGPT as a custom connector.
Compose binds the container to loopback only (127.0.0.1:8080). Do not publish port 8080 on the public internet. Put a reverse proxy on the host, terminate TLS there, and proxy to 127.0.0.1:8080.
Use port 443. Claude.ai never connects to a custom connector on any other port. It only says "Couldn't reach the MCP server". Grok accepts other ports, so a URL likehttps://host:18443/mcpcan work in Grok and still fail in Claude. The server logs a warning at startup whenMCP_BASE_URLhas a port.
- Copy
.env.exampleto.env. - Set
MCP_BASE_URLto your public origin, with no path and no port. Example:https://jw-mcp.example.com. - Set
MCP_AUTH_SECRETto a long access key (at least 16 characters). - Keep
MCP_AUTH=true. HTTP mode with auth off is loopback-only. Do not disable auth in Doc
1f3dc5fe1731OBSERVED · 2026-10-08Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.
claude mcp add jw-mcp --env MCP_AUTH_SECRET=${MCP_AUTH_SECRET} -- npx -y [email protected]{
"mcpServers": {
"jw-mcp": {
"command": "npx",
"args": [
"-y",
"[email protected]"
],
"env": {
"MCP_AUTH_SECRET": "${MCP_AUTH_SECRET}"
}
}
}
}Exposed tools (9)
9 read · 0 write · 0 destructive.
| Tool | Risk | Description |
|---|---|---|
getWatchtowerContent | read | STEP 2: Get the actual Watchtower article content after user chooses an article. Use this tool AFTER getWatchtowerLinks when user specifies which article they want (e.g., |
getWatchtowerLinks | read | STEP 1: Get JW.org Watchtower study articles. When a user asks for current/this week\ |
getWorkbookContent | read | 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., |
getWorkbookLinks | read | STEP 1: Get JW.org |
get_bible_verse | read | Get plain Bible verse text from wol.jw.org. Returns just the verse text without study notes or additional content. For comprehensive study content including notes and cross-references, use get_verse_with_study instead. |
get_bible_verse_url | read | 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: |
get_jw_captions | read | Fetches video captions from JW.org by video ID or URL. Accepts either a direct video ID (e.g., |
get_verse_with_study | read | Get Bible verse(s) with comprehensive study content from wol.jw.org. Supports single verses or ranges (e.g., |
search_bible_books | read | Search for Bible books by name or abbreviation. Returns book numbers (1-66) and names. Useful for finding the correct book number for other scripture tools. Examples: |
Trust audit
BLOCKgrade D · trust 69/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | PASS |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- none-observed
- Network
- declared (6 observation(s))
- Shell
- none-observed
- Dependencies
- not all pinned
- Secrets in source
- none-found
Findings (19)
|| host === 'metadata.google.internal'
CMD node --input-type=module -e "fetch('http://127.0.0.1:8080/health').then((r)=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"console.error(`JW MCP server listening on http://0.0.0.0:${port}`);console.error(`Health: http://0.0.0.0:${port}/health`);.mcpbignore
} from '../../src/auth/cimd.js';
import { McpOAuthProvider } from '../../src/auth.js';} from '../../src/auth/csp.js';
import { McpOAuthProvider } from '../../src/auth.js';} from '../../src/auth/urls.js';
['http://localhost/callback', 'http://127.0.0.1/callback'],
['http://127.0.0.1/callback'],
@modelcontextprotocol/sdk, cheerio, cors, express, express-rate-limit, node-fetch, undici, @types/node
assets/images/get-clm-workbook-info.png
assets/images/get-verse-url.png
assets/images/get-video-captions.png
assets/images/get-wt-info.png
assets/images/scripture-tools-demo.png
Gates applied: no_behavioural_pass, no_license.
1f3dc5fe1731full audit observations/trust-audit/mcp-server/advenimus__jw.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-08 | 1f3dc5fe1731 | BLOCK | D | 69 | first audit |
Questions
What is the JW MCP server?
MCP Tools for Jehovah's Witnesses
What tools does JW expose?
9 in total: 9 read-only, 0 that write, and 0 that can delete or overwrite. Every one is listed on this page with its risk.
Is JW safe to connect to an agent?
No — not without reading the findings first. The audit graded it D (69/100) and found 1 critical or high issue in the source. Each one is listed on this page with the file and line it is on.
What credentials does JW need?
It reads MCP_AUTH_SECRET from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.
How does JW run?
It speaks stdio and streamable-http, so it runs as a local process your client starts. It is published on npm as jw-mcp at 1.3.3.
How current is this page?
The grade is for one exact copy of the source (1f3dc5fe1731), read on 2026-10-08. The repository is watched and re-audited when it changes.