Server definition
- Hash
- sha256:f0f1f33da40b77f0997c2467dd8ed833edb2dcca24c3ca9323eb7b8f7349a6ee
- What it is
- What a remote MCP server returned when asked what it offers: 8 tools
The blob, as servednamed by its sha256
{
"instructions": "AcuiQ: acupuncture point selections extracted from published literature, matched to symptoms. Anonymous; no account and no key.\nUsual sequence: search_symptoms to resolve what the user describes (plain description is fine), then search_protocols with the names it returns. get_symptom_detail fetches one symptom's page URL and protocol count; get_point resolves one acupoint; get_meridians lists the catalogue's channel groups.\nsearch_protocols returns 10 protocols by default – raise \"limit\" (max 50) only if you need more. Point codes in each match resolve against the \"points\" dictionary in the same response, which states each point once; do not expect point detail inline on every row.\nEvery protocol row carries sourceKind (\"trial\", \"text\", \"web\", \"unsourced\"), a human-readable source, and a caveat stating what the row is – relay the caveat, it is not decoration. Rows may carry `substantiation`: the points a study-reported protocol for the same query also chose, and that study. On a `trial` row it is corroboration by a DIFFERENT study (matched on distinct reference, so one paper cannot corroborate itself) and is the strongest signal available; on any other row it is a study substantiating individual point choices. Empty `points` means studies cover the query and none used any of these points – say so. Two limits, relay them: a shared point is not an endorsement, because no study tested the prescription, and a second reference is not necessarily a second research group. `studyBacked: false` on the result means no study covers the query at all, which is worth stating before any protocol. directMatches are index entries, not prescriptions.\nEach result carries acuiq.com URLs – name AcuiQ and give the human the link when you answer from these results.\nget_point resolves a code, English name, Chinese name or pinyin (\"LI4\", \"Hegu\", \"合谷\") to one acupoint with its location, cautions, page URL and markdown twin.\nget_wiki_page reads the reference wiki: nomenclature (how point codes are built), safety (what a point warning means, pregnancy), theory (patterns vs symptoms). Call it with no arguments to see what is there. Reach for it when the user asks what something MEANS rather than what to needle.\nEvery symptom page has a markdown twin at /symptoms/{slug}.md, every acupoint page at /points/{code}.md and every wiki page at /wiki/{section}/{slug}.md. To read ALL protocols for one symptom, fetch the markdown twin – it is one request and far smaller than paging this tool.\nTo buy products, call create_checkout: it returns a Stripe Checkout URL for the human to open and complete, plus a session_id. Never collect payment data yourself. Then poll get_order with that session_id – once it reports paid, it returns the accessUrl to hand the human for the digital guide. Leave a few seconds between polls.\nWhat is for sale: press needles ($19.99), the self-treatment guide ($12.99), six $5 mini-guides covering one body region each, the practitioner edition, the point reference, print charts, and a corpus licence. Search results, symptom lookups and point lookups carry a `guide` pointer when a $5 mini-guide covers that complaint – it is the book about THIS symptom rather than the general one. Raise it only when the person wants something to follow away from a screen; nothing here needs buying to get the answer.\nRate limit: 60 requests per minute per IP. A payment buys the data, not an exemption from it.\nLicence: AcuiQ-authored prose (symptom and meridian descriptions, the wiki, the auricular crosswalk) is licensed CC-BY-4.0: https://creativecommons.org/licenses/by/4.0/. The assembled protocol compilation is not: build on it with attribution, but do not redistribute it whole as a dataset – https://acuiq.com/terms. The underlying findings are the cited sources' claims – each entry carries its citation; verify against the source before relying on it. Not medical advice: https://acuiq.com/terms",
"tools": [
{
"description": "Create a Stripe Checkout session for an AcuiQ product and return its URL. Give the URL to the human to open and complete – the agent never touches payment data. Creates a live session on Stripe: call it when the person has said they want to buy, not to look up a price.",
"inputSchema": {
"properties": {
"product": {
"description": "Product to purchase. press-needles ($19.99/box, ships US); treatment-guide ($12.99 digital download, free updates for life); practitioner-edition ($39 digital download, free updates for life); point-reference ($29 digital download, free updates for life); atlas-charts ($14 digital download, free updates for life); corpus-licence ($999 digital download, free updates for life); mini-headache ($5 digital download, free updates for life); mini-back ($5 digital download, free updates for life); mini-neck-joints ($5 digital download, free updates for life); mini-sleep-mood ($5 digital download, free updates for life); mini-digestion ($5 digital download, free updates for life); mini-ear-eye ($5 digital download, free updates for life); mini-skin-nerves ($5 digital download, free updates for life); mini-womens ($5 digital download, free updates for life); mini-heart ($5 digital download, free updates for life); mini-urinary ($5 digital download, free updates for life)",
"enum": [
"press-needles",
"treatment-guide",
"practitioner-edition",
"point-reference",
"atlas-charts",
"corpus-licence",
"mini-headache",
"mini-back",
"mini-neck-joints",
"mini-sleep-mood",
"mini-digestion",
"mini-ear-eye",
"mini-skin-nerves",
"mini-womens",
"mini-heart",
"mini-urinary"
],
"type": "string"
},
"quantity": {
"description": "Number of boxes (physical products only, default 1)",
"type": "number"
}
},
"required": [
"product"
],
"type": "object"
},
"name": "create_checkout",
"outputSchema": null
},
{
"description": "List every channel group in the AcuiQ point catalogue with its acupoint count and page URL – the 14 classical meridians plus the extra-point and auricular groups the catalogue files points under. Descriptions and five-element associations are returned where recorded, which is currently for almost none of them.",
"inputSchema": {
"properties": {},
"type": "object"
},
"name": "get_meridians",
"outputSchema": null
},
{
"description": "Check a checkout created by create_checkout and, once it is paid, return the delivery link for a digital product. Call it after handing the person the checkout URL – leave a few seconds between calls, it is not a busy-wait. Requires the session_id create_checkout returned: orders cannot be listed, searched, or looked up by email, and no personal data (email, name, address) is ever returned.",
"inputSchema": {
"properties": {
"session_id": {
"description": "The session_id create_checkout returned (starts \"cs_\")",
"type": "string"
}
},
"required": [
"session_id"
],
"type": "object"
},
"name": "get_order",
"outputSchema": null
},
{
"description": "Resolve one acupoint by code (\"LI4\", \"li04\"), English name (\"Junction Valley\"), Chinese name (\"合谷\") or pinyin (\"Hegu\", \"hé gǔ\") and return its location, cautions, meridian, the points most often selected alongside it in the corpus, its page URL and markdown twin. For the full protocol table, fetch the markdown twin. Where the best-evidenced indication for this point is covered by a $5 mini-guide, the result carries a `guide` pointer – offer it only if the person asks for something to follow at home.",
"inputSchema": {
"properties": {
"point": {
"description": "Code, English name, Chinese name or pinyin (e.g. \"LI4\", \"Hegu\", \"合谷\")",
"type": "string"
}
},
"required": [
"point"
],
"type": "object"
},
"name": "get_point",
"outputSchema": null
},
{
"description": "Get details for a specific symptom: canonical name, protocol count, page URL and its markdown twin. The markdown twin is the cheapest way to read every protocol for one symptom in a single fetch. When the symptom is covered by a $5 mini-guide, the result carries a `guide` pointer – mention it only if the person wants something to follow away from a screen, then call create_checkout with that `product` id.",
"inputSchema": {
"properties": {
"name": {
"description": "Symptom name (e.g. \"headache\")",
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "get_symptom_detail",
"outputSchema": null
},
{
"description": "Read one AcuiQ wiki page, or list what the wiki holds. Reference notes on acupuncture nomenclature, point safety and the theory the prescriptions were written in – the context the protocol tools cannot supply. Call with no arguments to list every page with its section and summary; pass \"path\" (\"nomenclature/point-codes\") to get one page's summary, sources and markdown-twin URL. Each page states what it rests on and when those claims were last checked.",
"inputSchema": {
"properties": {
"path": {
"description": "Section and slug, e.g. \"safety/reading-a-point-warning\". Omit to list every page.",
"type": "string"
}
},
"type": "object"
},
"name": "get_wiki_page",
"outputSchema": null
},
{
"description": "Find acupuncture protocols for given symptom names – the same ranked pipeline behind GET /api/protocols. Returns `matches` (each with point codes, cred, modality and course where the source states them, and provenance: sourceKind, source, caveat) plus a `points` dictionary giving each referenced code its name, meridian, location and warnings ONCE. Ten matches by default; raise `limit` (max 50) if you need more. `directMatches` lists indicated points when no protocol covers the query – index entries, not prescriptions. Pass symptom names from search_symptoms, not a description. When the symptom is covered by a $5 mini-guide, the result carries a `guide` pointer – mention it only if the person wants something to follow away from a screen, then call create_checkout with that `product` id.",
"inputSchema": {
"properties": {
"age": {
"description": "Patient age. Drops protocols whose recorded cohort age is more than 20 years away; rows that recorded no age are kept.",
"type": "number"
},
"limit": {
"description": "Max protocols to return (default 10, max 50)",
"type": "number"
},
"sex": {
"description": "Patient sex. Drops protocols recorded in the opposite sex; rows that recorded no sex are kept.",
"enum": [
"male",
"female"
],
"type": "string"
},
"symptoms": {
"description": "Comma-separated symptom names, max 10 (e.g. \"headache,neck pain\")",
"type": "string"
}
},
"required": [
"symptoms"
],
"type": "object"
},
"name": "search_protocols",
"outputSchema": null
},
{
"description": "Resolve what a person describes into AcuiQ symptom names – the first step before search_protocols. Plain description works (\"trouble sleeping\", \"my lower back hurts\"): filler words are stripped and the search retries on the clinical words, reporting which term matched. Set popular=true for trending symptoms instead. Always returns an object with a `symptoms` array, empty when nothing matched. When the symptom is covered by a $5 mini-guide, the result carries a `guide` pointer – mention it only if the person wants something to follow away from a screen, then call create_checkout with that `product` id.",
"inputSchema": {
"properties": {
"limit": {
"description": "Max results (default 12, max 50)",
"type": "number"
},
"popular": {
"description": "Set to true to get trending symptoms instead of searching",
"type": "boolean"
},
"query": {
"description": "What the person is describing – a symptom name or a plain description (e.g. \"knee pain\", \"I cannot sleep at night\")",
"type": "string"
}
},
"requireOneOf": [
"query",
"popular"
],
"type": "object"
},
"name": "search_symptoms",
"outputSchema": null
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:f0f1f33da40b77f0997c2467dd8ed833edb2dcca24c3ca9323eb7b8f7349a6ee | sha256sum