Tripitaka MCP
REMOTE · MCP.TRIPITAKA-MCP.COM · 2 COMPONENTS · SCANNED SEP 21
MCP server for the full Pāli Canon — search, cite, compare translations. Offered as Dhamma Dāna.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →
Endpoint Security80
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability73
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 10270 tokens (~641/item across 16 items; 14 tools + 2 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage96
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 85% of tool parameters carry a description.Partial
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 14 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 16 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
- Supports UI / widget rendering.Pass
How do I install the Tripitaka MCP server?
Tripitaka MCP is a hosted endpoint at https://mcp.tripitaka-mcp.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
remote · mcp.tripitaka-mcp.com
claude mcp add --transport http dhamma-seeker-tripitaka-mcp 'https://mcp.tripitaka-mcp.com/mcp'
{
"mcpServers": {
"dhamma-seeker-tripitaka-mcp": {
"url": "https://mcp.tripitaka-mcp.com/mcp"
}
}
} {
"servers": {
"dhamma-seeker-tripitaka-mcp": {
"type": "http",
"url": "https://mcp.tripitaka-mcp.com/mcp"
}
}
} [mcp_servers.dhamma-seeker-tripitaka-mcp] url = "https://mcp.tripitaka-mcp.com/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"dhamma-seeker-tripitaka-mcp": {
"type": "remote",
"url": "https://mcp.tripitaka-mcp.com/mcp",
"enabled": true
}
}
} openclaw mcp add dhamma-seeker-tripitaka-mcp --url 'https://mcp.tripitaka-mcp.com/mcp' --transport streamable-http
mcp_servers:
dhamma-seeker-tripitaka-mcp:
url: "https://mcp.tripitaka-mcp.com/mcp" {
"McpServers": {
"dhamma-seeker-tripitaka-mcp": {
"Transport": "http",
"Url": "https://mcp.tripitaka-mcp.com/mcp"
}
}
} assistant mcp add dhamma-seeker-tripitaka-mcp -t streamable-http -u 'https://mcp.tripitaka-mcp.com/mcp'
{
"mcpServers": {
"dhamma-seeker-tripitaka-mcp": {
"type": "http",
"url": "https://mcp.tripitaka-mcp.com/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 16 Sept 26 0
- Tool “search_by_keyword” rewrote its description, which is the text the model reads security
- 15 Sept 26 0
- Tool “search_hybrid” rewrote its description, which is the text the model reads security
- 30 Aug 26 0
- The server rewrote its instructions, which are the text every model session reads security
- New tool “verify_quote” functional
- 26 Aug 26 +1
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Aug 26 0
- Stability: 0.97 → pass security
- 24 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 13 Aug 26 0
- Tool “define_from_suttas” rewrote its description, which is the text the model reads security
- 11 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 21 Sept 2026 · Probed https://mcp.tripitaka-mcp.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=tripitaka-mcp.com | CN=YE1,O=Let's Encrypt,C=US | 14 Aug 2026 | 12 Nov 2026 | ECDSA 256 | ECDSA-SHA384 | 65ea5b352c2d73b56a447b0cad479314174 |
| SANs: *.tripitaka-mcp.com, tripitaka-mcp.com | ||||||
| CN=YE1,O=Let's Encrypt,C=US (CA) | CN=Root YE,O=ISRG,C=US | 3 Sept 2025 | 2 Sept 2028 | ECDSA 384 | ECDSA-SHA384 | 5ddd70dd31f801c85c186a7a04b80afe |
| CN=Root YE,O=ISRG,C=US (CA) | CN=ISRG Root X2,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | ECDSA-SHA384 | 872165fc34b6e5fba8add5b3705fb53a |
| CN=ISRG Root X2,O=Internet Security Research Group,C=US (CA) | CN=ISRG Root X1,O=Internet Security Research Group,C=US | 13 May 2026 | 2 Sept 2032 | ECDSA 384 | SHA256-RSA | 6c8f1dc727c7117f7baf853ac980f9cd |
Background: What to check on a remote MCP endpoint →
DNSSEC insecure
Validation of mcp.tripitaka-mcp.com. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| tripitaka-mcp.com. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=31536000; includeSubDomains |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | no-referrer |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://mcp.tripitaka-mcp.com/mcp | Verified | 200 | |
| http (plaintext) | http://mcp.tripitaka-mcp.com/mcp | HTTPS enforced | 301 | https://mcp.tripitaka-mcp.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
compare_translations Compare Translations ~332
Compare every available translation for a single segment. 💡 **Use this tool when:** - The user asks about the meaning/translation of a single Pāli line and wants to see multiple translators side-by-side. - Checking how different translators interpret the same line — technical terms like `dukkha`, `anattā`, `nibbāna` carry nuance that varies across translations. - Academic work that needs to quote multiple translations. 🔍 **vs `get_sutta`:** this tool targets a **single segment** (line level); `get_sutta` returns the **whole sutta**. To compare a whole sutta you'd call `compare_translations` for each segment. 📋 **segment_id format:** `<sutta_id>:<paragraph>.<line>`, e.g. `mn1:171.4` (Mūlapariyāyasutta paragraph 171 line 4 — "Nandī dukkhassa mūlaṁ"). Find segment_ids via `get_sutta` or search results. ⚠️ **Current state:** the `translation` table is mostly empty (the DB only loads default Pāli + English from bilara). `total_editions` is usually 0; `text_pali` and `text_english` are always populated. Thai editions will be added later.
| Name | Type | Req | Description |
|---|---|---|---|
| segment_id | string | yes | Segment ID, e.g. "mn26:8.2", "dn22:17.1", "mn62:5.3". |
Structured output declared, but exposes no named fields.
No examples provided.
define_from_suttas Define From Suttas ~652
Find how the **suttas and Vinaya define a Pāli term in their own words**. The canon defines its own terms with fixed formulas — "Katamañca … dukkhaṁ?" (what is X?) … "ayaṁ vuccati … dukkhaṁ" (this is called X), "X adhivacana" (X is a designation for …), or the Vinaya "X nāma". This tool locates those definitional passages and returns them **cited**, so the assistant can present the doctrinal essence straight from the source. 🧭 **This tool vs `get_word_definition`:** - **`define_from_suttas`** → the *doctrinal* definition, how the term is defined **inside the canon**. Use for "how do the suttas define X", "what is the canonical definition of X", "define X from the suttas". Returns a few precise segments, not a lexicon essay. - **`get_word_definition`** → the *lexical* definition from dictionaries (Payutto / PTS / DPPN). Use for etymology and word meaning. They complement each other — offer both when the user wants the full picture (dictionary sense + how the Buddha defined it). 📖 **How to present the result:** Results are ranked; the top one is usually the canonical definition. **Quote the Pāli (and English where present) verbatim** and render each `cross_reference.tripitaka_mcp_reader.segment_url` as clickable markdown so the user can verify. Do NOT paraphrase into your own definition — the point is the canon's own words. Each result is tagged `kind` (direct / simile) and `detail` (descriptive / enumerative); a *descriptive* definition characterises the term, an *enumerative* one lists its types — prefer the descriptive when explaining the essence. ⚠️ A result tagged `context: true` **does not contain the term in its own line**. The canon's stock similes attach to a formula rather than to a word: the four jhāna similes (bath powder, deep lake, lotus pond, white cloth) never say *jhāna*, they illustrate the `vivicceva kāmehi …` formula that opens the paragraph. Such rows are found through that paragraph, so **say so when quoting one** — present it as t…
| Name | Type | Req | Description |
|---|---|---|---|
| include_similes | boolean | – | Include indirect definitions by simile/metaphor (seyyathāpi …, "is a designation for …"). Default True. |
| limit | integer | – | Max definitional passages to return (1–15, default 5). |
| term | string | yes | Pāli term in its base/dictionary form (e.g. "dukkha", "viññāṇa", "samādhi"). Diacritics optional — folded internally. |
Structured output declared, but exposes no named fields.
No examples provided.
get_reference Get Citation ~143
Build a proper citation string for a sutta. 💡 **Use this tool when:** - The user wants a citation for academic work, an article, or a reference. - You need to know the canonical location of a sutta (pitaka / nikāya). - You want a ready-to-use formatted citation string. 🔗 vs `get_sutta`: this tool returns metadata + citation only, no segments. Pair it with `get_sutta` when you want both the content and the citation.
| Name | Type | Req | Description |
|---|---|---|---|
| sutta_id | string | yes | Sutta ID, e.g. "mn1", "dn22", "sn56.11". |
Structured output declared, but exposes no named fields.
No examples provided.
get_sutta Get Sutta ~2,009
Fetch a sutta's content — OR its table of contents (`mode="outline"`). ⚡ **Decide which mode BEFORE calling — don't fetch the whole sutta and parse it yourself:** - The user wants the **structure / outline / table of contents**, or asks **"how many sections/parts"** / "what's in it" → call `get_sutta(sutta_id, mode="outline")`. It returns the section list (titles + segment counts + ids), NOT the full text — cheap and exact. - The user wants the **context around a search hit** → `around="<segment_id>"` (search tools hand you the id, e.g. `dn22:18.1`) + optional `window`. - The user wants a **specific part** you already located → `segment_range="A..B"` or `offset`+`limit`. - Only fetch the **whole** sutta (no mode/selector) when the user actually wants to read/quote a SHORT sutta in full. Long ones (DN, long Vinaya/Abhidhamma; > ~400 segments — e.g. `dn16` is 1,664) should almost always start with `mode="outline"`; pulling the entire text wastes the context window. Uses standard SuttaCentral IDs, e.g.: - `mn1` = Majjhima Nikāya sutta 1 (Mūlapariyāyasutta, 334 segments) - `dn22` = Dīgha Nikāya sutta 22 (Mahāsatipaṭṭhānasutta, 454 segments) - `dn16` = Dīgha Nikāya sutta 16 (Mahāparinibbānasutta — the longest sutta in the canon, 1,664 segments) - `sn56.11` = Saṃyutta 56.11 (Dhammacakkappavattana) - `mn62` = Majjhima Nikāya 62 (Mahārāhulovāda — advice to Rāhula) - `dhp1-20` = Dhammapada verses 1-20 (KN uses range format) - `mil3.1.1` = Milindapañha 3.1.1 (paracanonical, 3–4 level id) 💡 **Hints for the AI client:** - **Quote `text_pali` / `text_english` directly from the returned segments** — do not rely on training memory. The system is verifiable; AI recall is often wrong. - Short segments numbered `:0.n` are **headers**, not the teaching itself — actual content starts around `:1.1`. They run collection → book → chapter → sutta, so the **last** one is the sutta's own name (`sn35.245:0.3` = Kiṁsukopamasutta, while `:0.2` is its chapter).…
| Name | Type | Req | Description |
|---|---|---|---|
| around | – | – | A segment_id to center on (e.g. "dn22:18.1"). Returns the `window` segments before and after it. Ignored if None. |
| edition | – | – | Thai translation edition — "dhiranandi", "jayasaro", "mbu", "royal", or None. If None, uses `text_thai` from bilara-data. ⚠️ The DB has no Thai editions loaded yet, so most values retu… |
| language | string | – | Which language to return — "pali", "thai", "english", or "all" (default: "pali"). Thai is currently disabled on the server, so Thai fields return null. |
| limit | – | – | Max segments to return from `offset` (default None = to end, clamped 1–2000). |
| mode | string | – | "full" (default, returns segment text) or "outline" (table of contents only — section keys/titles/counts, no segment text). |
| offset | integer | – | 0-based ordinal start for paging (default 0). |
| segment_range | – | – | Inclusive slice "<startId>..<endId>" (e.g. "dn16:2.1.0..dn16:2.2.8"). Omit the end id to read to the sutta's end. Uses the `..` separator. |
| sutta_id | string | yes | Sutta ID, e.g. "mn1", "dn22", "sn56.11", "dhp1-20". |
| window | integer | – | Segments before AND after `around` (default 10, clamped 0–200). |
Structured output declared, but exposes no named fields.
No examples provided.
get_word_definition Get Word Definition ~238
Look up the dictionary meaning of a Pāli word, with sutta context. Serves as a Pāli Dictionary Bridge — pairs the "definition" with the "context where the Buddha actually used the word". 📖 **About the dictionary sources:** This tool draws from multiple primary dictionaries, including "พจนานุกรมพุทธศาสน์ ฉบับประมวลศัพท์" (Buddhist Dictionary — Concept-Glossary edition) by Somdet Phra Buddhaghosacariya (P. A. Payutto). The Thai-language entries are **original scholarly works** (not translations), so they are **always available** even when ENABLED_LANGUAGES has Thai disabled. The AI client should translate Thai entries into the user's language if needed.
| Name | Type | Req | Description |
|---|---|---|---|
| language | string | – | Dictionary language (e.g. "en", "thai", or "all" as default). |
| limit_context | integer | – | Number of sutta-context examples to include (1-5). |
| word | string | yes | Word to look up (e.g. "dukkha", "กฐิน"). |
Structured output declared, but exposes no named fields.
No examples provided.
list_editions List Translation Editions ~261
List the translation editions available, with coverage stats. 💡 **Use this tool when:** - Before calling `compare_translations` or `get_sutta(edition=...)`, so you know which edition values are valid and worth comparing. - The user asks which editions are loaded in the DB. 🔍 **Filtering:** Filtered by the server's `TRIPITAKA_ENABLED_LANGUAGES` — when Thai is disabled the list is empty. Only enabled languages are returned. ⚠️ **Current state:** the DB mostly holds Pāli (default from SuttaCentral bilara) and English (Sujato). Thai editions (`dhiranandi`, `jayasaro`, `mbu`, `royal`) aren't indexed yet — the list returns empty until they're loaded. Returns: List of edition objects, each containing: - edition: edition code, e.g. "sujato", "dhiranandi", "mbu" - translator: translator's name - language: ISO code ("pi", "en", "th") - segment_count: how many segments have a translation in this edition - sutta_count: how many suttas have a translation.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
list_structure List Tipiṭaka Structure ~559
Show the structure of all three pitakas with coverage statistics. 💡 **Use this tool when:** - The user asks for an overview of the Tipiṭaka (what's in it / which collections). - You need to check coverage before promising a search will find something — `segment_count > 0` is the active-loaded signal. - Verifying scope when compiling an artifact. 📊 **Current state (v1.1+, at parity with SuttaCentral bilara-data):** - **Sutta Piṭaka** complete: DN 37, MN 155, SN 1,829, AN 1,419, KN 2,351 sections (~284,702 segments) — Pāli + Sujato EN - **Vinaya Piṭaka** complete: Bhikkhu Vibhaṅga 222, Bhikkhunī Vibhaṅga 127, Khandhaka 22, Parivāra 51 + Pātimokkha 2 (~71,557 segments) — Pāli + Brahmali EN - **Abhidhamma Piṭaka** complete: 7 books (ds, vb, dt, pp, kv, ya, patthana) ~88,414 segments — Pāli only (bilara has no English for any Abhidhamma book) - **Total ~444,673 segments** in the DB ⚠️ **Known quirks:** - The schema carries duplicate legacy + SC-modern codes side by side: - Vinaya: `vin-v/vin-m/vin-c/vin-p` (legacy, segment_count = 0) alongside `pli-tv-bu-vb/pli-tv-bi-vb/pli-tv-kd/pli-tv-pvr` (active, populated). - Abhidhamma: `ym/pt` (legacy = 0) alongside `ya/patthana` (active). - **Use the `active` flag** — each nikaya carries `active: true/false` (true ⇔ `segment_count > 0`). Pick `active` nikayas; the others are metadata placeholders from an older migration. 🌐 **Languages:** Returns Pāli + Thai + English labels regardless of enabled set (these are metadata, not segment text). Text content follows ENABLED_LANGUAGES. Thai translations aren't loaded yet. Returns: Hierarchical structure: - pitakas{vinaya/sutta/abhidhamma} → nikayas[] - Each nikaya: code, name (3 languages), sutta_count, segment_count.
Input schema present but exposes no named parameters.
Structured output declared, but exposes no named fields.
No examples provided.
open_sutta_viewer ~706
Open an interactive sutta viewer inside the chat — Pāli + English, plus an optional third row in the user's own language translated BY YOU. Renders each segment as: Pāli on top (canonical), the Bhikkhu Sujato English below it (verification anchor), and — when you supply `translations` — your translation in the user's language, clearly badged as AI-generated. Prefer this over dumping raw segments when the user wants to *read* a sutta. - `sutta_id` — standard SuttaCentral id, e.g. `sn56.11`, `mn10`, `dn22`. - `around` — a segment_id (e.g. `dn22:18.1`, from a search hit) to centre on; that segment is highlighted and scrolled into view. Use this after a search so the reader lands on the exact cited line. - `offset` — 0-based segment index for paging long suttas (use `next_offset` from the previous result). Do NOT combine with `around`. - `window` — segments before/after `around` to include (default 12). 🌐 **Translating for the user (important):** when the conversation language is neither English nor Pāli, you SHOULD translate the displayed segments and pass them via `translations` so the user reads in their own language while still seeing the originals: 1. Fetch the segments first (`get_sutta` with the same selector) so you have the exact Pāli + English text. (Already called this tool without translations? The result contains the segments — translate them and call this tool AGAIN with the same selector plus `translations` to upgrade the view.) Your translation must travel through the `translations` parameter to appear in the viewer — writing it as a normal chat message leaves the viewer bilingual and looks broken; the tool always accepts `translations`, so never report it as missing. 2. Translate **from the Pāli as the source, using the English as a semantic guide** — never relay-translate from English alone. Preserve untranslatable doctrinal terms (dukkha, jhāna, taṇhā…) as loanwords with a brief gloss instead of forcing equival…
| Name | Type | Req | Description |
|---|---|---|---|
| around | – | – | – |
| offset | integer | – | – |
| sutta_id | string | yes | – |
| translation_disclaimer | – | – | – |
| translation_language | – | – | – |
| translations | – | – | – |
| window | integer | – | – |
Structured output declared, but exposes no named fields.
No examples provided.
parse_pali_word Parse Pāli Word ~340
Strip Pāli inflectional suffixes to find the root form (basic stem). 💡 **Use this tool when:** - You find an inflected Pāli word (e.g. `dukkhassa`, `bhikkhūnaṁ`) and `get_word_definition` doesn't find it directly — Pāli inflects nouns across 7 cases × 2 numbers, ~16 forms per root. - You want to split a compound (`sammāsambuddhassa` → `sammā` + `sambuddha` + `-ssa` genitive). - You want to see possible stems before another `get_word_definition` lookup. 🔄 **Recommended workflow:** `parse_pali_word(inflected_form)` → get `possible_stems[]` → call `get_word_definition(stem)` per stem until you find a definition. ⚠️ **Limitations:** - Rule-based first-pass — strips common suffixes (case endings, vowel shortening). Not a full morphological analyzer. - Compound words (samāsa) are NOT split — `dukkhanirodha` won't be broken into `dukkha` + `nirodha`. - Sandhi (sound junctions) like `tena ahaṁ → tenāhaṁ` aren't reversed. - Returns **possible** stems — verify each via `get_word_definition`.
| Name | Type | Req | Description |
|---|---|---|---|
| word | string | yes | An inflected Pāli word (e.g. "dukkhassa", "bhikkhūnaṁ", "sīlavā"). |
Structured output declared, but exposes no named fields.
No examples provided.
search_by_keyword Keyword Search ~931
Keyword search across the Pāli Tipiṭaka (trigram word-similarity). Searches the configured enabled language(s) on the server. Filterable by pitaka and translation edition. 💡 **Hints for the AI client:** The system's canonical reference is Romanised Pāli (from SuttaCentral). If the user asks in a disabled or unsupported language, translate the keyword to **Romanised Pāli (preferred) or English** before calling this tool — e.g. "suffering" → "dukkha", "mindfulness of breathing" → "ānāpānassati". See the server instructions for the enabled language set. ✅ **Diacritics do not matter.** `anapanassati` and `ānāpānassati` return the same thing; so do `nibbana` and `nibbāna`. Write the macrons if you know them, guess without them if you don't — neither costs you results. ⚠️ **A common Pāli noun is a poor query.** `samudda` (sea) matches ~700 segments and the top of that list is mostly section headings, not the passage that teaches anything. Two things to do instead: - Search the **rarest distinctive noun** in the passage, not its most obvious one. For the simile of the blind turtle, `turtle`/`kacchapa` gets there; `ocean`/`samudda` does not, in either language. - **Prefer English, or raise the limit.** `turtle` returns SN 56.47 and SN 56.48 inside the default window; `kacchapa` matches them too but ranks them past 30, so you need `limit=50` to see them. - A word inside a **compound** may be out of reach entirely: `samudda` scores 0.50 against `mahāsamudde` (compounded *and* inflected), under the 0.6 cutoff, so SN 56.47 is not ranked low — it is excluded. Trying more spellings will not recover it; search a different word instead. 🔍 **Pick the right search tool for the question shape:** - **Term lookup (exact word appearances)** — e.g. "occurrences of `ānāpānassati`": this tool is best (trigram nails the exact word). - **Concept search ("discourses about X")** — e.g. "discourses about mindfulness of breathing": **use `search_hybrid` instead.** Canoni…
| Name | Type | Req | Description |
|---|---|---|---|
| edition | – | – | Thai translation edition — "dhiranandi", "jayasaro", "mbu", "royal" or None. Only used when language="thai" and Thai is enabled on the server. |
| keyword | string | yes | The word/phrase to search for. |
| language | string | – | Search language — must be in the server's ENABLED_LANGUAGES (default: "pali"). Disabled languages return an error. |
| limit | integer | – | Maximum results (default: 10, max: 50). |
| pitaka | – | – | Filter by pitaka — "vinaya", "sutta", "abhidhamma" or None (all). ✅ v1.1+: all three pitakas at parity with SuttaCentral bilara — see list_structure for live counts. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
search_hybrid Hybrid Search ~724
Hybrid search — combines keyword + semantic search via RRF. Uses Reciprocal Rank Fusion (RRF) to merge exact-word results with meaning-based results. **This is the recommended tool for "discourses about X" / concept queries**, because the semantic side catches suttas that discuss a concept using different vocabulary (e.g. some mindfulness-of-breathing suttas use `assasati/passasati/dīghaṁ` instead of `ānāpānassati`). ⚠️ **Send the question and nothing else. Do not pad the query.** The whole string becomes one vector, so every word you add moves it. Appending your own candidate terms — synonyms, Pāli equivalents, a keyword list — searches for the blend, not for the question. Measured on `Buddha flies in the sky`: asking it plainly put the right passage at **rank 1** (3 relevant suttas). Appending three guessed Pāli terms (`buddha, agga, sagga`) pushed it down to **rank 5** and left only 1 — because `agga` (supreme) and `sagga` (heaven) drag the vector toward their own meanings. Have candidate terms worth searching? Give them their own `search_by_keyword` call and merge the two result lists. One tool asks what a passage means, the other asks where a word occurs; combined into a single string they cancel out. Rewriting the question to sound more canonical does not help either — the same query phrased as `rose into the air and flew like a bird` scored **zero** relevant hits. 💡 **Hints for the AI client:** - English queries usually work best (e.g. `mindfulness of breathing`) because the embedding model is multilingual but EN-primary. - Thai stop-word handling is weak. If a Thai query underperforms, the AI client should translate to Pāli/English first (see server instructions). - The default `limit=5` is often too small for a topic survey — use `limit=15-20` (max 20) for good coverage. - `language` only chooses what comes back; it does not change what matches or how results are ranked. - Looking for a concrete thing rather than a concept (an animal, an…
| Name | Type | Req | Description |
|---|---|---|---|
| language | string | – | Output language — "pali", "thai", "english", or "all". |
| limit | integer | – | Maximum results (default: 5, max: 20). |
| query | string | yes | Query text (Thai, Pāli, or English — English works best). |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
search_semantic Semantic Search ~352
Semantic search — match by meaning, not exact words. Uses vector similarity (cosine distance) over `text_pali` embedded with a multilingual MiniLM model. 🤔 **In most cases you should use `search_hybrid` instead** — it combines this semantic search with keyword search and ranks better. Use this tool only when you need: - Pure semantic results (no keyword influence) - Fine-grained `threshold` tuning (hybrid uses RRF which is harder to tune) - To debug what semantic alone picks up vs keyword ⚠️ Known limitations: - The index is **Pāli only** (English/Thai queries pass through the multilingual embedding but the model isn't tuned on Pāli) - English queries usually embed better than Thai (model is EN-primary) - For specific Pāli terms (`appamāda`, `dukkha`), exact match is better — use `search_by_keyword` instead - Pāli stock phrases recur in many suttas → similarity scores cluster; read the top 10, don't trust rank 1 alone
| Name | Type | Req | Description |
|---|---|---|---|
| language | string | – | Output language — "pali", "thai", "english", or "all" (Thai disabled → null). |
| limit | integer | – | Maximum results (default: 5, max: 20). |
| query | string | yes | Query text (English works best, then Pāli, Thai is weakest). |
| threshold | number | – | Maximum cosine distance (smaller = stricter match). Default 0.7; lower to 0.5 for tighter matches, raise to 0.9 for broader. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
survey_corpus Survey Corpus (exhaustive) ~627
Exhaustively survey the WHOLE Tipiṭaka for a term — guaranteed complete. Use this (not `search_by_keyword`) when the question is about **coverage or counting** rather than "show me the best passages": - "How many times does Kusinārā appear in the canon?" - "Every place ānāpānassati is mentioned — don't miss any" - "Which pitakas/how many suttas mention this term?" Unlike `search_by_keyword` (ranked, capped at 50, no total), this returns an **exact count**, a **per-pitaka breakdown**, the **distinct surface forms** that matched (so you can audit and discard over-matches), and a paginated enumeration. The `lexical` result carries `complete: true` — a hard guarantee that nothing was dropped for the chosen `match_scope`. Two layers, two different promises: - **lexical** — the word and its forms. Deterministic + EXHAUSTIVE. - **semantic** (`mode="thorough"`, hosted only) — passages teaching the same concept with DIFFERENT vocabulary (e.g. ānāpānassati via `assasati`/`passasati`). Approximate, **NOT exhaustive** — it never claims completeness, it only boosts recall.
| Name | Type | Req | Description |
|---|---|---|---|
| cursor | integer | – | Offset into the full lexical result set for pagination. |
| keyword | string | yes | Term to survey (Romanised Pāli preferred; diacritics optional — matching folds `ā→a`, `ṁ→m`, etc.). |
| language | string | – | "pali" (default) or "english". Thai is not indexed yet. |
| match_scope | string | – | "word" (default) matches the exact word/phrase only. "stem" also matches inflections + compounds via prefix (kusinārā → kusinārāyaṁ, kusināravagga …) — higher recall, may o… |
| mode | string | – | "fast" (default) = lexical only — quick, no server-side ML, works offline. "thorough" = also run the semantic layer (hosted only; this is the heavier part). The lexical guarantee holds in BOTH. |
| page_size | integer | – | Lexical results per page (default 20, max 100). Counts/forms cover the WHOLE corpus regardless of this. |
| pitaka | – | – | Restrict to "vinaya" / "sutta" / "abhidhamma", or None for all. |
| sem_limit | integer | – | Max semantic hits (default 50, max 200). `capped` flags when reached. Only used when mode="thorough". |
| sem_threshold | number | – | Max cosine distance for semantic hits (default 0.7; lower = stricter). Only used when mode="thorough". |
Structured output declared, but exposes no named fields.
No examples provided.
verify_quote Verify Quote ~343
Verify, check, or confirm a Buddha quote — does the canon really say it? Fact-check a quotation attributed to the Buddha. Catches fake, misquoted, misattributed and misremembered passages, and finds the true reading. Paste a line that has been quoted or half-remembered — Pāli or English — and this says whether the canon really contains it, cites where, and if not, shows the closest thing that is actually there. 🧭 **When to use this:** - A quote is attributed to the Buddha and you are not certain it is real. A fabricated line that *sounds* canonical is the hardest error to catch by reading, because it reads correctly. Check it instead of trusting it. - Someone recalls a passage imperfectly, or a chanted form has drifted from the written one. The tool shows the received text beside theirs. - **Before repeating any Pāli you did not get from these tools**, verify it. This is cheap and it is the difference between citing and guessing. ⚠️ **Do not present an unverified passage as canonical.** If the verdict is `not_found`, say plainly that the line is not in the canon rather than quoting it with a hedge — a hedged fabrication still spreads.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | How many near matches to return when it is not exact (1–10). |
| text | string | yes | The passage as quoted. Diacritics optional, folded internally. One line works best; the canon is segmented line by line, so a quote spanning several segments may only match in part. |
Structured output declared, but exposes no named fields.
No examples provided.
What is the Tripitaka MCP server?
Tripitaka MCP is listed in the public MCP registry as io.github.dhamma-seeker/tripitaka-mcp. MCP server for the full Pāli Canon, search, cite, compare translations. Offered as Dhamma Dāna. This page covers its hosted endpoint (https://mcp.tripitaka-mcp.com/mcp).
Is the Tripitaka MCP server safe to use?
Tripitaka MCP scores 87 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the Tripitaka MCP server expose?
Tripitaka MCP exposes 14 tools: search_by_keyword, survey_corpus, get_sutta, search_semantic, search_hybrid, and 9 more. Their descriptions and schemas cost roughly 8,217 tokens of context every time the server is loaded.
Does the Tripitaka MCP server require authentication?
No. We connected to Tripitaka MCP without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the Tripitaka MCP server still maintained?
Tripitaka MCP is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.