# Tripitaka MCP MCP server

MCP server for the full Pāli Canon — search, cite, compare translations. Offered as Dhamma Dāna.

## Links
- Registry page: https://www.getdrio.com/mcp/io-github-dhamma-seeker-tripitaka-mcp
- Repository: https://github.com/dhamma-seeker/tripitaka-mcp
- Website: https://tripitaka-mcp.com

## Install
- Endpoint: https://mcp.tripitaka-mcp.com/mcp
- Auth: Not captured

## Setup notes
- Remote endpoint: https://mcp.tripitaka-mcp.com/mcp
- Remote endpoint: https://mcp.tripitaka-mcp.com/sse

## Tools
- search_by_keyword (Keyword Search) - 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.

🔍 **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.** Canonical
  Pāli has two quirks that hurt keyword search for concepts:
    • Section headings (`Ānāpānapabba`) often use a different word than
      the teaching body, which uses verb forms (`assasati`, `passasati`,
      `dīghaṁ`, `rassaṁ`). E.g. DN22's Ānāpānapabba has 16 segments but
      the word `ānāpāna` appears in only 2 (header + footer) — the
      actual teaching segments won't match.
    • Stock phrases (e.g. `So satova assasati, satova passasati`)
      recur in 10+ suttas, so a keyword query ranks broadly and won't
      pinpoint the canonical reference.
- **General keyword survey** — set `limit≥30` and filter client-side,
  or call multiple related forms (root verb + noun + compound). Endpoint: https://mcp.tripitaka-mcp.com/mcp
- get_sutta (Get Sutta) - Fetch the full content of a sutta/section by ID — returns every segment.

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 ending in `:0.1` or `:0.2` are usually **headers**
  (nikāya/sutta names), not the teaching itself — actual content
  starts around `:1.1`.
- Segments ending in "...niṭṭhitaṁ" (e.g. `mn1:194.10` =
  "Mūlapariyāyasuttaṁ niṭṭhitaṁ paṭhamaṁ") are **colophons**
  marking the close of the sutta.
- Segments containing `…pe…` (peyyāla) are **abbreviated repetitions**
  — not missing data. Pāli texts use this convention for repeated
  stock phrases.
- The response includes a `cross_reference` field — render the URLs
  as clickable markdown in your reply so users can verify the source.

✅ **Coverage (v1.1+):** all three pitakas at parity with SuttaCentral
`bilara-data`:
- Sutta Piṭaka (DN/MN/SN/AN/KN): Pāli + Sujato EN (5,791 sections)
- Vinaya Piṭaka: Pāli + Brahmali EN — SC codes e.g.
  `pli-tv-bu-vb-pj1` (Bhikkhu Pārājika 1), `pli-tv-bi-vb-pj1`
  (Bhikkhunī), `pli-tv-kd1` (Mahāvagga), `pli-tv-pvr10` (Parivāra),
  `pli-tv-bu-pm` (Bhikkhu Pātimokkha)
- Abhidhamma Piṭaka: 7 books (ds, vb, dt, pp, kv, ya, patthana) —
  Pāli only (bilara has no English translator for any Abhidhamma book) Endpoint: https://mcp.tripitaka-mcp.com/mcp
- search_semantic (Semantic Search) - 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 Endpoint: https://mcp.tripitaka-mcp.com/mcp
- search_hybrid (Hybrid Search) - 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`).

💡 **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.
- Ranking is by similarity, NOT canonical importance — locus
  classicus suttas (e.g. MN118, DN22) may rank below smaller suttas
  that happen to use the exact vocabulary. Treat results as a
  starting point, then call `get_sutta` for the canonical references. Endpoint: https://mcp.tripitaka-mcp.com/mcp
- list_structure (List Tipiṭaka Structure) - 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).
- **Always pick the code with `segment_count > 0`** — 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 —
Thai users can fall back to the cross_reference 84000.org link.

Returns:
    Hierarchical structure:
    - pitakas{vinaya/sutta/abhidhamma} → nikayas[]
    - Each nikaya: code, name (3 languages), sutta_count, segment_count. Endpoint: https://mcp.tripitaka-mcp.com/mcp
- get_reference (Get Citation) - 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. Endpoint: https://mcp.tripitaka-mcp.com/mcp
- list_editions (List Translation Editions) - 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. Endpoint: https://mcp.tripitaka-mcp.com/mcp
- compare_translations (Compare Translations) - 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. Endpoint: https://mcp.tripitaka-mcp.com/mcp
- get_word_definition (Get Word Definition) - 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. Endpoint: https://mcp.tripitaka-mcp.com/mcp
- parse_pali_word (Parse Pāli Word) - 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`. Endpoint: https://mcp.tripitaka-mcp.com/mcp

## Resources
- tripitaka://structure - โครงสร้างพระไตรปิฎกทั้ง 3 ปิฎก MIME type: text/plain

## Prompts
Not captured

## Metadata
- Owner: io.github.dhamma-seeker
- Version: 1.3.0
- Runtime: Sse, Streamable Http
- Transports: HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: May 12, 2026
- Source: https://registry.modelcontextprotocol.io
