Skip to content

AcuiQ

by acuiq.com · remote · no sign-in to list tools · v2.1.0 · published by com.acuiq

Evidence-based acupuncture protocol matcher – search symptoms, match protocols, browse acupoints.

Changes · 1

9 tools: 1 change things and 8 only read.

Scanned Oct 21, 2026

2 checks matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.

claude mcp add --transport http acuiq https://acuiq.com/api/mcp

Findings

Matches of fixed checks, with the text they matched.

1 warn1 info
  • The description contains "every other tool", wording about other tools or servers.

    Matched text

    description: "...point use get_point, which is free, and every other tool here is free too."

    What this check looks for
  • The description mentions "credential".

    Matched text

    description: "...P (Machine Payments Protocol): send the credential at params._meta["org.paymentauth/creden..."

    What this check looks for

Tools

Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.

9 tools

Changes things 1Claude Code: ask
  • create_checkoutCreate a Stripe Checkout session for an AcuiQ product and return its URL.Reads text others writeNo findings

    Why it is in this group

    • The name "create_checkout" says "create": a word for a change.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: false
    • destructiveHint: false
    • idempotentHint: false
    • openWorldHint: true
Only reads 8Claude Code: allow
  • get_meridiansList 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 file…Reads private dataReads text others write2 findings

    Why it is in this group

    • The name "get_meridians" says "get": a word for reading.

    What it can reach

    • private-dataThe description's first sentence says "list" and "file": it reads files.
    • untrusted-inputThe description's first sentence says "list" and "url": it reads web pages, which anyone can write.

    Findings

    • Info

      The description mentions "credential".

      Matched text

      description: "...P (Machine Payments Protocol): send the credential at params._meta["org.paymentauth/creden..."

      What this check looks for
    • Warn

      The description contains "every other tool", wording about other tools or servers.

      Matched text

      description: "...point use get_point, which is free, and every other tool here is free too."

      What this check looks for
    Description, as the server wrote it
    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. Priced at $0.50, paid with a Stripe shared payment token (SPT), single use over MPP (Machine Payments Protocol): send the credential at params._meta["org.paymentauth/credential"]. It is the whole catalogue in one call – for ONE point use get_point, which is free, and every other tool here is free too.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • get_orderCheck a checkout created by create_checkout and, once it is paid, return the delivery link for a digital product.Reads text others writeNo findings

    Why it is in this group

    • The name "get_order" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: true
  • get_pointResolve one acupoint by code ("LI4", "li04"), English name ("Junction Valley"), Chinese name ("合谷") or pinyin ("Hegu", "hé gǔ") and return its location, cautions, meridian, the poi…Reads text others writeNo findings

    Why it is in this group

    • The name "get_point" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "resolve" and "url": it reads web pages, which anyone can write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • get_symptom_detailGet details for a specific symptom: canonical name, protocol count, page URL and its markdown twin.Reads text others writeNo findings

    Why it is in this group

    • The name "get_symptom_detail" says "get": a word for reading.

    What it can reach

    • untrusted-inputThe description's first sentence says "get" and "url": it reads web pages, which anyone can write.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • get_wiki_pageRead one AcuiQ wiki page, or list what the wiki holds.No findings

    Why it is in this group

    • The name "get_wiki_page" says "get": a word for reading.
    Description, as the server wrote it
    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. To find the page for a topic, call search_wiki first.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • search_protocolsFind acupuncture protocols for given symptom names – the same ranked pipeline behind GET /api/protocols.No findings

    Why it is in this group

    • The name "search_protocols" says "search": a word for reading.
    Description, as the server wrote it
    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, the `result` once someone has read it, and provenance: sourceKind, source, caveat) plus a `points` dictionary giving each referenced code its name, meridian, location and warnings ONCE, and `studyBacked`, false when no study covers the query. It returns 10 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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • search_symptomsResolve what a person describes into AcuiQ symptom names – the first step before search_protocols.No findings

    Why it is in this group

    • The name "search_symptoms" says "search": a word for reading.
    Description, as the server wrote it
    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.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false
  • search_wikiKeyword search across the AcuiQ reference wiki – the call to make when you have a topic or a question ("moxibustion", "what does EX-HN mean", "acupuncture in pregnancy") and no pag…No findings

    Why it is in this group

    • The name "search_wiki" says "search": a word for reading.
    Description, as the server wrote it
    Keyword search across the AcuiQ reference wiki – the call to make when you have a topic or a question ("moxibustion", "what does EX-HN mean", "acupuncture in pregnancy") and no page path. Matches titles and page prose. A whole question works: when no literal match exists it falls back to English full-text matching, which stems words and drops stopwords. It is NOT semantic, so a page that says "moxa" is not found by "heat therapy". Ranked titles starting with the term, then titles containing it, then literal prose hits, then full-text hits by relevance. Each row carries a `snippet` windowed on the match, the `path` get_wiki_page takes, and the `markdown` URL holding the whole page. Use get_wiki_page instead when you already have a path, or to see every page by section. Defaults: page 1, pageSize 10 (max 50); keep paging while `hasMore` is true. The same rows as GET /api/wiki?q=.

    Annotations the server declares

    • readOnlyHint: true
    • idempotentHint: true
    • openWorldHint: false

This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.

Exfil surface

Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.

No private-data, untrusted-input, outbound path in this server alone: no tool is tagged outbound.

Reads private data1
Reads files, mail, messages, databases, secrets, calendars or repositories.
Reads text others write5
Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
Can send data out0
Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.

Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.

Remote posture

What anyone on the internet sees at the remote endpoint: an anonymous initialize and tools/list, and the public OAuth metadata.

Looked at Oct 22, 2026, 14:26 UTC, unchanged since Oct 22, 2026. No credentials were sent and no tool was called. What is looked at.

Reachable
yes
HTTP status of an anonymous initialize
200
tools/list served without credentials
yes
Tools that change things, listed without credentials
1
Protocol version
2025-06-18
WWW-Authenticate on 401
not observed
resource_metadata in WWW-Authenticate
none
RFC 9728 protected resource metadata
none
Authorization servers
none
Legacy HTTP+SSE transport
no
Dynamic client registration
not observed
Client ID metadata documents
not observed
  • WarnThe whole server

    The endpoint served tools/list without credentials, and the list has 1 tool that changes things (1 write). Whether a call also works without credentials was not tested: tools are never called.

    Matched text

    https://acuiq.com/api/mcp: tools/list returned 9 tools to an anonymous client, including create_checkout (write)

    What this check looks for

Install

Pinned to version 2.1.0. Values in angle brackets are yours to fill in.

claude mcp add --transport http acuiq https://acuiq.com/api/mcp

Run in a terminal.

Claude Code permissions

Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.

.claude/settings.json
{
  "permissions": {
    "allow": [
      "mcp__acuiq__search_symptoms",
      "mcp__acuiq__search_protocols",
      "mcp__acuiq__get_meridians",
      "mcp__acuiq__get_symptom_detail",
      "mcp__acuiq__get_point",
      "mcp__acuiq__get_order",
      "mcp__acuiq__search_wiki",
      "mcp__acuiq__get_wiki_page"
    ],
    "ask": [
      "mcp__acuiq__create_checkout"
    ],
    "deny": []
  }
}

Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as acuiq. Review it before you use it.

Capability tags behind 5 rules
  • mcp__acuiq__get_meridians private-data, untrusted-input
  • mcp__acuiq__get_symptom_detail untrusted-input
  • mcp__acuiq__get_point untrusted-input
  • mcp__acuiq__create_checkout untrusted-input
  • mcp__acuiq__get_order untrusted-input