Aquifer MCP

Aquifer MCP

Thin Cloudflare Workers MCP server for navigating Bible Aquifer content, enabling Bible verse retrieval, content search, and entity profiling through MCP tools.

Category
访问服务器

README

Aquifer MCP

Thin Cloudflare Workers MCP server for navigating Bible Aquifer content.

Deploy: Cloudflare dashboard Git integration builds and deploys this repo when you push (see DEPLOY-SETUP.md). GitHub Actions here only runs tests, not deploy.

Most users should use the deployed endpoint directly. Running locally is primarily for agentic contributors developing this server.


A First-Person Build Account

This MCP server was built by AI coding agents with Klappy.

Klappy gave one clear direction: do not build a heavy platform, build a thin navigable layer.

Oddkit provides epistemic posture, prior MCP work provides implementation shape, and Rick Brannan's Aquifer docs and repos provide source truth. The server is a Cloudflare Worker that indexes metadata, retrieves content on demand, and exposes predictable MCP tools for agents and apps.

Capabilities include: explicit catalog browsing via browse, content-addressed SHA-keyed caching where freshness comes from observed repo state instead of TTL assumptions, in-band README access through the readme tool, dynamic resource discovery from the BibleAquifer GitHub org so new resources appear automatically with zero code changes, deterministic Bible verse retrieval via the scripture tool, and named entity profiling via the entity tool.

The Aquifer Window uses this server as its content backend. The Window and agent clients are two interfaces over the same corpus and the same MCP endpoint.

Production URLs:

  • Aquifer MCP: https://aquifer.klappy.dev/mcp
  • Aquifer Window: https://aquifer-window.klappy.dev

Staging preview (git branch staging): https://staging-aquifer-mcp.klappy.workers.dev (/health, /mcp — same as production). Other branches: https://<branch-slug>-aquifer-mcp.klappy.workers.dev (slug matches branch name; check Cloudflare if a branch has an odd slug).

Two slices of one pie:

  • Aquifer Window = human exploration
  • Aquifer MCP (this) = agent navigation

What It Exposes

Aquifer MCP provides ten tools:

  • readme - fetch this README as markdown through MCP
  • telemetry_policy - fetch telemetry-sharing policy and client integration guidance
  • telemetry_public - fetch public telemetry snapshot and consumer/tool leaderboards
  • list - list resources and metadata summary
  • search - search by passage, ACAI entity, or title keyword
  • get - fetch full article content by compound key
  • related - follow passage/resource/entity associations
  • browse - paginate through full article catalogs for a resource
  • scripture - fetch Bible verse text by reference (e.g. "Rom 3:23-25") across all translations
  • entity - profile a named entity by ACAI ID (e.g. "person:David") showing all associated articles

Health endpoint:

  • GET /health

MCP endpoint:

  • POST /mcp

Aquifer Window Uses This Same Server

The Aquifer Window does not use a separate backend for content. It uses this exact MCP server as its content interface.

Live Window URL: https://aquifer-window.klappy.dev

Window behavior maps directly to these tool calls:

  • resource discovery -> list
  • passage/topic/entity discovery -> search
  • article reading -> get
  • related-content exploration -> related
  • paginated catalog browsing (especially media/image repos) -> browse
  • Bible verse reading -> scripture
  • entity profiling -> entity

Both the agent experience and the Aquifer Window experience resolve through the same endpoint and the same retrieval path.


Two Paths

Path 1: Use it (recommended, most users)

Use the deployed endpoint directly:

  • MCP URL: https://aquifer.klappy.dev/mcp
  • Health: https://aquifer.klappy.dev/health

Cursor config:

{
  "mcpServers": {
    "aquifer-mcp": {
      "url": "https://aquifer.klappy.dev/mcp"
    }
  }
}

Path 2: Run locally (development only)

Clone this repo and run local Worker dev if you are changing server code.


Local Development

Install

npm install

Run locally

npm run dev

Check health

curl http://127.0.0.1:8787/health

Build and tests

npm run build
npm run test

Deploy

npm run deploy

Branch strategy and preview URLs (staginghttps://staging-aquifer-mcp.klappy.workers.dev) are in docs/branch-and-deployment-strategy.md and DEPLOY-SETUP.md.

Deploy path: push your branch → Cloudflare builds → use the preview or production URL the dashboard shows. No GitHub secrets required for deploy in this repo.

  • CLI fallback (emergency): npm run deploy — logged-in Wrangler (deploy:staging is for local Wrangler [env.staging], not the Git preview hostname)

GitHub Actions: build + test only (.github/workflows/ci.yml on PRs).


Cursor MCP Config

Default (deployed):

{
  "mcpServers": {
    "aquifer-mcp": {
      "url": "https://aquifer.klappy.dev/mcp"
    }
  }
}

Local override for development:

  • http://127.0.0.1:8787/mcp

Tool Usage (JSON-RPC Examples)

These examples target the deployed endpoint, since that is the normal usage path.

Initialize

curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":1,
    "method":"initialize",
    "params":{}
  }'

List tools

curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":2,
    "method":"tools/list",
    "params":{}
  }'

readme

curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":9,
    "method":"tools/call",
    "params":{
      "name":"readme",
      "arguments":{"refresh":false}
    }
  }'

telemetry_policy

curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":10,
    "method":"tools/call",
    "params":{
      "name":"telemetry_policy",
      "arguments":{"surface":"mcp-client"}
    }
  }'

telemetry_public

curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":11,
    "method":"tools/call",
    "params":{
      "name":"telemetry_public",
      "arguments":{"limit":10}
    }
  }'

list

curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":3,
    "method":"tools/call",
    "params":{
      "name":"list",
      "arguments":{"type":"StudyNotes","language":"eng"}
    }
  }'

search

curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":4,
    "method":"tools/call",
    "params":{
      "name":"search",
      "arguments":{"query":"Romans 3:24"}
    }
  }'
curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":5,
    "method":"tools/call",
    "params":{
      "name":"search",
      "arguments":{"query":"keyterm:Justification"}
    }
  }'

get

curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":6,
    "method":"tools/call",
    "params":{
      "name":"get",
      "arguments":{
        "resource_code":"BiblicaStudyNotes",
        "language":"eng",
        "content_id":"43895"
      }
    }
  }'

related

curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":7,
    "method":"tools/call",
    "params":{
      "name":"related",
      "arguments":{
        "resource_code":"BiblicaStudyNotes",
        "language":"eng",
        "content_id":"43895"
      }
    }
  }'

browse

curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":8,
    "method":"tools/call",
    "params":{
      "name":"browse",
      "arguments":{
        "resource_code":"FIAMaps",
        "language":"eng",
        "page":1,
        "page_size":25
      }
    }
  }'

browse defaults:

  • language: eng
  • page: 1
  • page_size: 50
  • page_size max: 100

scripture

curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":12,
    "method":"tools/call",
    "params":{
      "name":"scripture",
      "arguments":{"reference":"Rom 3:23-25"}
    }
  }'
curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":13,
    "method":"tools/call",
    "params":{
      "name":"scripture",
      "arguments":{"reference":"John 3:16","resource_code":"BereanStandardBible"}
    }
  }'

entity

curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":14,
    "method":"tools/call",
    "params":{
      "name":"entity",
      "arguments":{"id":"person:David"}
    }
  }'
curl -X POST https://aquifer.klappy.dev/mcp \
  -H "Content-Type: application/json" \
  -d '{
    "jsonrpc":"2.0",
    "id":15,
    "method":"tools/call",
    "params":{
      "name":"entity",
      "arguments":{"id":"keyterm:Justification"}
    }
  }'

Architecture Summary

Runtime surface

  • Cloudflare Worker entrypoint in src/index.ts
  • MCP server created with @modelcontextprotocol/sdk and agents/mcp
  • tools wired directly to handlers in src/tools.ts

Resource discovery

Resources are discovered dynamically from the BibleAquifer GitHub organization — no hardcoded list. On each index build the server queries the org API (ETag-cached), fetches eng/metadata.json from every repo, and includes any repo that has valid resource_metadata. New resources Rick adds appear automatically; repos without metadata are silently excluded.

Retrieval model

  1. Discover repos from GitHub org, build/load navigability index from metadata
  2. Resolve references from index for list, search, and entity
  3. Fetch content files on demand for get, related, browse, and scripture
  4. Return text content payloads in MCP responses

Caching

  • Workers KV binding: AQUIFER_CACHE
  • cache keys are content-addressed by Git commit SHA (not time-window keys)
  • repo SHAs are checked against GitHub (ETag-aware) before cache reuse
  • KV TTL (GC_TTL) is 30 days for garbage collection, not freshness truth

Telemetry And Sharing Policy

Aquifer MCP aims to maximize operational visibility while preserving user anonymity by default.

Telemetry should measure system behavior, not people:

  • Collect aggregate operational counters (JSON-RPC method counts, tool-call totals, tool leaderboards, consumer-label leaderboards, label-source counts)
  • Track all tools/call usage automatically at the server transport layer (no client opt-in required)
  • Treat consumer labels as transparent self-declarations (for openness/gamification), not identity proof unless allowlisted as verified
  • Apply weighted leaderboard scoring where verified clients are worth 10x per tool call
  • Incentivize richer self-report metadata through a public transparency leaderboard and badge system
  • Do not collect user-identifying or content-bearing data by default
  • Do not collect raw prompts, raw query text, article content, model responses, names, emails, IP addresses, or fingerprint data

For in-band client guidance, call the telemetry_policy tool from your client integration. For aggregate transparency and gamified usage visibility, call telemetry_public. For a single-page governance reference, see docs/telemetry-governance-snapshot.md.

Supported surface values:

  • mcp-client
  • aquifer-window

If no surface is provided, telemetry_policy returns the base policy.

telemetry_public returns:

  • aggregate request and tool-call totals
  • top calling consumer labels
  • weighted consumer leaderboard (verified clients score 10x)
  • transparency leaderboard (self-report completeness + badges)
  • top-used MCP tools
  • method counts, consumer-label source counts, verification-class counts, and self-report field coverage counts
  • explicit tracked/excluded field lists
  • last telemetry update timestamp

Optional env var for weighted verification:

  • TELEMETRY_VERIFIED_CLIENTS - comma-separated consumer labels treated as verified for the 10x weighted leaderboard (example: Cursor,ClaudeDesktop,AquiferWindow)

Recommended self-report headers (honor-system unless verified):

  • x-aquifer-client
  • x-aquifer-client-version
  • x-aquifer-agent-name
  • x-aquifer-agent-version
  • x-aquifer-surface
  • x-aquifer-contact-url
  • x-aquifer-policy-url
  • x-aquifer-capabilities

Data Assumptions

  • Article key is always resource_code + language + content_id
  • Passage references use BBCCCVVV format
  • Passage range matching uses start-end BBCCCVVV strings
  • Metadata source is /{language}/metadata.json
  • Content source is /{language}/json/*.content.json

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选