{
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-09-29/server.schema.json",
  "name": "xyz.tantrafiles/satsang",
  "title": "Satsang: an open directory of the wisdom traditions",
  "version": "0.2.0",
  "description": "Open, read-only directory of the world’s wisdom traditions: traditions, teachers and lineages, places to practise with published contacts, free texts, practices and talks. Every record has a canonical URL, source_url, verified_on and confidence.",
  "websiteUrl": "https://tantrafiles.xyz/agents",
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://mcp.tantrafiles.xyz/mcp"
    },
    {
      "type": "sse",
      "url": "https://mcp.tantrafiles.xyz/sse"
    }
  ],
  "authentication": {
    "required": false
  },
  "protocolVersions": [
    "2025-06-18",
    "2025-03-26",
    "2024-11-05"
  ],
  "capabilities": {
    "tools": {
      "listChanged": false
    },
    "resources": {}
  },
  "tools": [
    {
      "name": "search",
      "title": "Search Satsang",
      "description": "Search the Satsang directory: teachers, scholars and figures, traditions and schools, topics, practices, texts and books, collections, places to practise and talks. Returns {results:[{id,title,url}]}; pass an id to fetch (or to the get_* tools) for the full record with source_url, verified_on and confidence.",
      "readOnly": true
    },
    {
      "name": "get_topic",
      "title": "Topic hub",
      "description": "A topic seen across traditions: intro, sub-questions, one-line takes per tradition, the best talks chosen for diversity across traditions (MMR), practices, texts, teachers and related topics.",
      "readOnly": true
    },
    {
      "name": "get_teacher",
      "title": "Teacher, scholar or figure",
      "description": "A person profile: bio, years, traditions, works, their best talks, talks about them, lineage neighbours and places tied to them.",
      "readOnly": true
    },
    {
      "name": "get_lineage",
      "title": "Lineage",
      "description": "Walk teacher-student (dharma) and/or academic lineage edges up and down from a person or tradition. Every edge carries its confidence.",
      "readOnly": true
    },
    {
      "name": "list_practices",
      "title": "Practices",
      "description": "Practices (meditation, visualisation, enquiry, chant, ritual, movement) with steps in plain words, sources and cautions. Filter by tradition, kind or topic.",
      "readOnly": true
    },
    {
      "name": "get_collection",
      "title": "Collection",
      "description": "A curated set, journey, meditation series, visualisation cycle or syllabus with its ordered units and items. Omit id to list collections.",
      "readOnly": true
    },
    {
      "name": "list_courses",
      "title": "Series (mini-courses)",
      "description": "Series (called mini-courses before 2026-10-25): short editorial series of sessions inside a topic: gold talks in a teaching order, practices (with cautions; orientation-only ones say so), free readings, an optional complete Dharma Seed retreat to go deeper, and places. Filter by topic or tradition. Returns {series:[...], courses:[...same...]}; pass an id to get_series (or get_course) for the sessions.",
      "readOnly": true
    },
    {
      "name": "get_course",
      "title": "Series (mini-course)",
      "description": "One series (mini-course) session by session: each session with its one-line purpose and items resolved (talk with YouTube link, length and why it is worth it; practice with steps or the orientation-only note and its cautions; reading with its free link), the complete retreat to go deeper (linked whole, credited) and places.",
      "readOnly": true
    },
    {
      "name": "list_series",
      "title": "Series",
      "description": "Series (called mini-courses before 2026-10-25): short editorial series of sessions inside a topic: gold talks in a teaching order, practices (with cautions; orientation-only ones say so), free readings, an optional complete Dharma Seed retreat to go deeper, and places. Filter by topic or tradition. Returns {series:[...], courses:[...same...]}; pass an id to get_series (or get_course) for the sessions.",
      "readOnly": true
    },
    {
      "name": "get_series",
      "title": "Series",
      "description": "One series (mini-course) session by session: each session with its one-line purpose and items resolved (talk with YouTube link, length and why it is worth it; practice with steps or the orientation-only note and its cautions; reading with its free link), the complete retreat to go deeper (linked whole, credited) and places.",
      "readOnly": true
    },
    {
      "name": "recommend",
      "title": "Recommend",
      "description": "Stateless recommendations. Give ids the listener liked (clip ids, person/<id>, topic/<id>, tradition/<id>) and optionally disliked; returns diverse talks (taste x quality, MMR across traditions) and next topics to explore (graph neighbours + information gain). With no likes it returns a cold-start spread.",
      "readOnly": true
    },
    {
      "name": "fetch",
      "title": "Fetch a record",
      "description": "Fetch one Satsang record by the id returned from search (e.g. \"person/ajahn-chah\", \"place/tassajara\", \"resource/the-truth-of-rebirth-...\", \"topic/rebirth\") or its tantrafiles.xyz URL. Returns {id, title, text, url, metadata}; text is a readable summary, metadata carries kind, source_url, verified_on, confidence and licence.",
      "readOnly": true
    },
    {
      "name": "find_places",
      "title": "Find places to practise",
      "description": "Monasteries, retreat centres, ashrams, temples, study centres and sacred sites. Filter by tradition (includes its schools), school (exact), country (ISO code or name), region, type, status (active or heritage), living_teacher, and offers (e.g. \"residential\", \"10-day\", \"ordination\", \"online\", \"sanskrit\"; all must match). Every result carries source_url, verified_on and confidence.",
      "readOnly": true
    },
    {
      "name": "get_place",
      "title": "Place details",
      "description": "One place with contacts exactly as the place publishes them (each with its source page and check date), programmes with an as-of date and schedule links, founders/tied teachers, sister monasteries, events, free resources, coordinates, website, source_url, verified_on, confidence and the canonical tantrafiles.xyz URL.",
      "readOnly": true
    },
    {
      "name": "search_places",
      "title": "Search places (all filters)",
      "description": "The full place search: free-text query plus tradition (includes its schools), school (exact), country, near {lat, lng, km} (results carry distance_km, nearest first), residential (can stay: residential programmes, retreats or a monastery/ashram), online (online or hybrid programmes or events), language (code or name, e.g. \"en\", \"de\", \"Thai\"), has_upcoming_events (dated events in the next 90 days read from the place’s own iCal/JSON-LD feed), has_email (an email the place publishes) and limit. Each result: card with canonical url, source_url, verified_on, confidence, plus languages, residential/online flags, next event and upcoming-event count. Use get_place for contacts and list_events for dates.",
      "readOnly": true
    },
    {
      "name": "list_events",
      "title": "Upcoming events at places",
      "description": "Dated upcoming events (next 90 days) read weekly from each place’s own public iCal feed or schema.org Event markup (no aggregator, no LLM). Filter by place id, tradition (includes schools), country, from/to dates (YYYY-MM-DD), online, query. Each event: name, start, end, timezone, url, source (the feed or page read), source_type (ical | jsonld), fetched_at and stale (not re-read for 14 days), plus its place with canonical url. Dates are the organiser’s: tell users to confirm on the source page.",
      "readOnly": true
    },
    {
      "name": "find_teachers",
      "title": "Find teachers, scholars and figures",
      "description": "People in Satsang filtered by tradition (includes schools), school (exact), living (true = living or likely living; status and its basis are returned), country/region (via places they founded or are tied to), role (teacher, scholar, figure) and on_video. Sorted by depth of talks on Satsang.",
      "readOnly": true
    },
    {
      "name": "get_resources",
      "title": "Texts and books",
      "description": "Texts, books and libraries per tradition, person or topic. access = free (publisher’s own free edition, linked never rehosted), paid-or-unknown (published works not known to be free), or no-link. Filter free=true for free reading only.",
      "readOnly": true
    },
    {
      "name": "get_lineage_path",
      "title": "Lineage path between two people",
      "description": "Shortest documented chain between two people (or traditions) over teacher-student, ordination, transmission, academic supervision and influence edges. Each step says who taught/influenced whom, with confidence and a source link where recorded.",
      "readOnly": true
    },
    {
      "name": "what_to_study",
      "title": "Study path for a tradition",
      "description": "A study path for one tradition or school: orientation, then free online resources (texts, practices with cautions, journeys, best talks), then teachers (living first), then places to go (active, residential first, with verified contacts first). Every item carries source_url, verified_on, confidence and a canonical URL.",
      "readOnly": true
    },
    {
      "name": "guide_me",
      "title": "Guided path: teacher, method, contact",
      "description": "Walk the golden path for a tradition or a teacher: living teachers, each one’s methods (practices with cautions and needsTeacher; never initiated detail), the syllabuses that contain them, and the places tied to them with contacts exactly as published. For a historical figure or a text it returns the study path (works, free texts, syllabuses, living students) instead of a contact. Start here for \"how do I learn X\" or \"who teaches Y\".",
      "readOnly": true
    },
    {
      "name": "find_retreats",
      "title": "Find retreats",
      "description": "Retreats and courses by country, tradition, length or format: the recurring programmes places publish (name, typical length, format, cost model, recurrence) with the official schedule link and the date Satsang last confirmed it. Satsang holds no dated instances: dates always come from the official schedule page, and anything not confirmed in the last 14 days says so.",
      "readOnly": true
    },
    {
      "name": "get_schedule",
      "title": "Place schedule",
      "description": "One place’s schedule: its recurring programmes, its yearly events (usual month), and the official schedule page, which is canonical for dates (always cite it). Each part carries the date Satsang last checked it, so callers can show staleness honestly.",
      "readOnly": true
    },
    {
      "name": "plan_retreat",
      "title": "Plan a retreat",
      "description": "Plan a personal (home) retreat from an intent: topic, days, strictness (gentle | standard | strict), optional tradition or teacher. Returns one full talk per day (whole talks only, matched across traditions), a daily timetable scaled by strictness, the rules overlay, and places that run real retreats of this kind. Nothing is booked or started; it is orientation scaffolding, not transmission. Says plainly when the container is too thin to be a retreat.",
      "readOnly": true
    },
    {
      "name": "compose_booking",
      "title": "Draft a booking enquiry",
      "description": "Draft a booking or enquiry email to a place for a programme and dates, using only the contacts and booking route the place publishes. Returns text for the user to send themselves: it never sends, never books, never holds payment. If the place publishes no email, it points to the official contact or schedule page instead.",
      "readOnly": true
    },
    {
      "name": "site_health",
      "title": "Site health",
      "description": "Satsang’s own health from its keeper (GitHub Actions checks): uptime over 30 days per probe (site, API, MCP, sitemap, llms.txt, openapi), what is down now, open maintenance findings by severity and check, dead clips/links, and the re-verify queue size.",
      "readOnly": true
    },
    {
      "name": "list_findings",
      "title": "Maintenance findings",
      "description": "Open keeper findings (broken links, dead YouTube embeds, sitemap/JSON-LD problems, stale or unsourced records, data conflicts, leak guards), highest priority first. Filter by severity (error, warn, info), check (uptime, sitemap, links, linkrot, oembed, jsonld, provenance, integrity, leaks, robots, bundle, perf) or status.",
      "readOnly": true
    },
    {
      "name": "next_maintenance_task",
      "title": "Next maintenance task",
      "description": "The highest-priority unclaimed keeper finding with how to fix it and how to claim it (keeper/claims.json in a PR to github.com/prx0r/satsang). For agents that help maintain Satsang; read-only here, fixes go through pull requests.",
      "readOnly": true
    }
  ],
  "openapi": "https://mcp.tantrafiles.xyz/openapi.json",
  "llms": "https://tantrafiles.xyz/llms.txt",
  "data": "https://tantrafiles.xyz/data/index.json",
  "license": {
    "data": "CC-BY-4.0",
    "code": "MIT",
    "attribution": "Satsang (tantrafiles.xyz)"
  },
  "updated": "2026-10-24"
}