Atlas / MCP servers / advenimus / JW

JWBLOCK

mcp/advenimus/jw

MCP Tools for Jehovah's Witnesses

Verdict
BLOCK
Grade
D
Trust score
69 /100
Exposed tools
9 9r · 0w · 0d
Transport
stdio · streamable-http
License
—
Stars
41
01

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 like https://host:18443/mcp can work in Grok and still fail in Claude. The server logs a warning at startup when MCP_BASE_URL has a port.
  1. Copy .env.example to .env.
  2. Set MCP_BASE_URL to your public origin, with no path and no port. Example: https://jw-mcp.example.com.
  3. Set MCP_AUTH_SECRET to a long access key (at least 16 characters).
  4. Keep MCP_AUTH=true. HTTP mode with auth off is loopback-only. Do not disable auth in Doc
Read from source at commit 1f3dc5fe1731OBSERVED · 2026-10-08
Advertisement
02

Connect

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-code
claude mcp add jw-mcp --env MCP_AUTH_SECRET=${MCP_AUTH_SECRET} -- npx -y [email protected]
claude-desktop
{
  "mcpServers": {
    "jw-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "[email protected]"
      ],
      "env": {
        "MCP_AUTH_SECRET": "${MCP_AUTH_SECRET}"
      }
    }
  }
}
03

Exposed tools (9)

9 read · 0 write · 0 destructive.

ToolRiskDescription
getWatchtowerContentreadSTEP 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.,
getWatchtowerLinksreadSTEP 1: Get JW.org Watchtower study articles. When a user asks for current/this week\
getWorkbookContentreadSTEP 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.,
getWorkbookLinksreadSTEP 1: Get JW.org
get_bible_versereadGet 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_urlreadGet 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_captionsreadFetches video captions from JW.org by video ID or URL. Accepts either a direct video ID (e.g.,
get_verse_with_studyreadGet Bible verse(s) with comprehensive study content from wol.jw.org. Supports single verses or ranges (e.g.,
search_bible_booksreadSearch 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:
04

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.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfacePASS
L4Behavioural (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)

HIGHNetwork egress · net.metadata_ip · CWE-200, CWE-319
src/auth/cimd.js:245
|| host === 'metadata.google.internal'
Why it matters. cloud metadata endpoint: the classic SSRF credential grab
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
Dockerfile:26
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))"
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
src/http-server.js:436
console.error(`JW MCP server listening on http://0.0.0.0:${port}`);
MEDIUMNetwork egress · net.raw_ip · CWE-200, CWE-319
src/http-server.js:437
console.error(`Health: http://0.0.0.0:${port}/health`);
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mcpbignore
.mcpbignore
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.no_license · CWE-1104
Why it matters. no LICENSE file and no repo licence
Fix. add a licence
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/auth/cimd.test.js:8
} from '../../src/auth/cimd.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/auth/cimd.test.js:9
import { McpOAuthProvider } from '../../src/auth.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/auth/csp.test.js:6
} from '../../src/auth/csp.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/auth/provider.test.js:7
import { McpOAuthProvider } from '../../src/auth.js';
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
tests/auth/urls.test.js:9
} from '../../src/auth/urls.js';
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/auth/cimd.test.js:34
['http://localhost/callback', 'http://127.0.0.1/callback'],
LOWNetwork egress · net.raw_ip · CWE-200, CWE-319
tests/auth/cimd.test.js:41
['http://127.0.0.1/callback'],
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@modelcontextprotocol/sdk, cheerio, cors, express, express-rate-limit, node-fetch, undici, @types/node
Why it matters. 9 dependency range(s) float
Fix. pin exact versions or ship a lockfile
INFOInventory / provenance · inv.oversize · CWE-1104
assets/images/get-clm-workbook-info.png
assets/images/get-clm-workbook-info.png
Why it matters. 1688559 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
assets/images/get-verse-url.png
assets/images/get-verse-url.png
Why it matters. 1807342 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
assets/images/get-video-captions.png
assets/images/get-video-captions.png
Why it matters. 1803606 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
assets/images/get-wt-info.png
assets/images/get-wt-info.png
Why it matters. 1667655 bytes not read
INFOInventory / provenance · inv.oversize · CWE-1104
assets/images/scripture-tools-demo.png
assets/images/scripture-tools-demo.png
Why it matters. 1993476 bytes not read

Gates applied: no_behavioural_pass, no_license.

Audited 2026-10-08 · audit v0.4.1 · source sha 1f3dc5fe1731full audit observations/trust-audit/mcp-server/advenimus__jw.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-081f3dc5fe1731BLOCKD69first audit
06

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.

Advertisement