Anahana MCP API

Model Context Protocol server (Streamable HTTP, JSON-RPC 2.0).

Operations 2

POST /mcp MCP JSON-RPC 2.0 endpoint (Streamable HTTP) #
OPTIONS /mcp CORS preflight (does not consume rate-limit budget) #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/anahana-com:anahana-com-mcp-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

anahana-com-mcp-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Anahana agent-facing MCP API
  version: 1.3.0
  summary: The MCP endpoint, its OAuth 2.1 tier, and the static discovery surfaces on www.anahana.com.
  description: 'Anahana (anahana.com) publishes wellness and spiritual-growth content in 24 languages. This document describes every machine-facing endpoint the site exposes. Everything is read-only and everything it returns is already public on the website — there is no private data, no write action, and no credential required to read anything. The MCP server covers all 24 languages, backed by a public build-time index under /content-index/ that the site regenerates on every deploy. The single dynamic endpoint is `POST /mcp`, a Model Context Protocol server over Streamable HTTP; the rest are static discovery documents. Human-readable companion: https://www.anahana.com/en/ai-agents/resources-for-ai-agents/'
  termsOfService: https://www.anahana.com/en/terms/
  contact:
    name: Anahana
    email: team@anahana.com
    url: https://www.anahana.com/en/contact/
  license:
    name: 'Quote and summarize with attribution: yes. Full republication: no. AI training: yes.'
    url: https://www.anahana.com/robots.txt
servers:
- url: https://www.anahana.com
  description: Production
tags:
- name: MCP
  description: Model Context Protocol server (Streamable HTTP, JSON-RPC 2.0).
paths:
  /mcp:
    post:
      tags:
      - MCP
      operationId: mcpJsonRpc
      summary: MCP JSON-RPC 2.0 endpoint (Streamable HTTP)
      description: 'A single JSON-RPC 2.0 endpoint implementing MCP over Streamable HTTP. Two-step usage: (1) call `initialize` and read the `mcp-session-id` **response header**; (2) send that value back as an `mcp-session-id` request header on every later call. Responses are returned as a `text/event-stream` of `event: message` lines carrying JSON-RPC payloads. Negotiated protocol versions: 2025-11-25 (latest), 2025-06-18, 2025-03-26, 2024-11-05, 2024-10-07. Five tools. The three content tools (search_content, get_article, lookup_angel_number) take an optional `language`; omit it and you get English. It accepts one code, a comma-separated list, or "all". Supported codes: en, de, it, es, nl, fr, sv, pl, cs, fi, hu, ro, ru, da, no, pt, tr, el, id, uk, ja, ko, zh, th. Search is keyword/substring matching in every one of them, never semantic. The two product tools, list_products (optional `language`; omit it for every product on sale) and get_product (`sku`), return each product''s page url, list price, currency and language, never a payment link; checkout happens on the product page. Anonymous calls are rate limited to 30 requests/minute per IP; calls bearing an OAuth 2.1 access token get 120 requests/minute per client.'
      externalDocs:
        description: Model Context Protocol specification
        url: https://modelcontextprotocol.io/
      security:
      - {}
      - mcpOAuth:
        - read:content
      parameters:
      - name: mcp-session-id
        in: header
        required: false
        description: Session id returned in the `mcp-session-id` response header of `initialize`. Required on every request after `initialize`.
        schema:
          type: string
      - name: mcp-protocol-version
        in: header
        required: false
        description: Negotiated protocol version, echoed back on subsequent requests by spec-compliant clients.
        schema:
          type: string
          examples:
          - '2025-11-25'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JsonRpcRequest'
            examples:
              initialize:
                summary: Step 1 — initialize (read mcp-session-id from the response headers)
                value:
                  jsonrpc: '2.0'
                  id: 1
                  method: initialize
                  params:
                    protocolVersion: '2025-11-25'
                    capabilities: {}
                    clientInfo:
                      name: your-agent
                      version: 1.0.0
              toolsList:
                summary: List the five tools
                value:
                  jsonrpc: '2.0'
                  id: 2
                  method: tools/list
              searchContent:
                summary: tools/call — search_content
                value:
                  jsonrpc: '2.0'
                  id: 3
                  method: tools/call
                  params:
                    name: search_content
                    arguments:
                      query: box breathing
              getArticle:
                summary: tools/call — get_article
                value:
                  jsonrpc: '2.0'
                  id: 4
                  method: tools/call
                  params:
                    name: get_article
                    arguments:
                      url_or_slug: 111-angel-number
              lookupAngelNumber:
                summary: tools/call — lookup_angel_number
                value:
                  jsonrpc: '2.0'
                  id: 5
                  method: tools/call
                  params:
                    name: lookup_angel_number
                    arguments:
                      number: '1111'
              searchContentOneLanguage:
                summary: tools/call — search_content in one language (omit `language` for English)
                value:
                  jsonrpc: '2.0'
                  id: 6
                  method: tools/call
                  params:
                    name: search_content
                    arguments:
                      query: 呼吸
                      language: zh
              searchContentManyLanguages:
                summary: tools/call — search_content across a list, or across every indexed language with "all"
                value:
                  jsonrpc: '2.0'
                  id: 7
                  method: tools/call
                  params:
                    name: search_content
                    arguments:
                      query: box breathing
                      language: de,fr,ja
              getArticleLanguage:
                summary: tools/call — get_article, bare slug resolved in another language
                value:
                  jsonrpc: '2.0'
                  id: 8
                  method: tools/call
                  params:
                    name: get_article
                    arguments:
                      url_or_slug: 111-angel-number
                      language: ru
              lookupAngelNumberLanguage:
                summary: tools/call — lookup_angel_number in another language (coverage differs per language)
                value:
                  jsonrpc: '2.0'
                  id: 9
                  method: tools/call
                  params:
                    name: lookup_angel_number
                    arguments:
                      number: '1008'
                      language: ja
              listProducts:
                summary: 'tools/call — list_products (every product on sale: page url, list price, currency, language; never a payment link)'
                value:
                  jsonrpc: '2.0'
                  id: 10
                  method: tools/call
                  params:
                    name: list_products
                    arguments: {}
              getProduct:
                summary: tools/call — get_product by sku
                value:
                  jsonrpc: '2.0'
                  id: 11
                  method: tools/call
                  params:
                    name: get_product
                    arguments:
                      sku: complete-guide-en
      responses:
        '200':
          description: JSON-RPC response, delivered as a server-sent-events stream. The `initialize` response additionally carries the `mcp-session-id` header.
          headers:
            mcp-session-id:
              description: Session identifier. Returned by `initialize`; send it back on every subsequent request.
              schema:
                type: string
          content:
            text/event-stream:
              schema:
                type: string
              examples:
                initializeResult:
                  summary: initialize result
                  value: 'event: message

                    data: {"result":{"protocolVersion":"2025-11-25","capabilities":{"tools":{"listChanged":true}},"serverInfo":{"name":"Anahana Content MCP","version":"1.1.0"}},"jsonrpc":"2.0","id":1}

                    '
            application/json:
              schema:
                $ref: '#/components/schemas/JsonRpcResponse'
        '400':
          description: Malformed JSON-RPC, or a call made without the `mcp-session-id` header.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JsonRpcResponse'
        '429':
          description: 'Rate limit exceeded. Anonymous: 30/min per IP. Registered: 120/min per client_id.'
          headers:
            Retry-After:
              description: Seconds until the current one-minute window resets.
              schema:
                type: integer
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RateLimitError'
    options:
      tags:
      - MCP
      operationId: mcpPreflight
      summary: CORS preflight (does not consume rate-limit budget)
      responses:
        '200':
          description: 'CORS headers. `Access-Control-Allow-Origin: *`; `mcp-session-id` is exposed.'
components:
  schemas:
    JsonRpcResponse:
      type: object
      required:
      - jsonrpc
      properties:
        jsonrpc:
          type: string
          const: '2.0'
        id:
          type:
          - string
          - integer
          - 'null'
        result:
          type: object
        error:
          type: object
          properties:
            code:
              type: integer
            message:
              type: string
            data: {}
    RateLimitError:
      type: object
      properties:
        error:
          type: string
          const: rate_limited
        message:
          type: string
        retry_after_seconds:
          type: integer
    JsonRpcRequest:
      type: object
      required:
      - jsonrpc
      - method
      properties:
        jsonrpc:
          type: string
          const: '2.0'
        id:
          type:
          - string
          - integer
        method:
          type: string
          description: 'MCP method. Supported: `initialize`, `notifications/initialized`, `tools/list`, `tools/call`, `ping`.'
          examples:
          - initialize
          - tools/list
          - tools/call
        params:
          type: object
  securitySchemes:
    mcpOAuth:
      type: oauth2
      description: 'Optional. Anonymous access to /mcp is fully supported: the five tools published today — search_content, get_article, lookup_angel_number, list_products, get_product — are available on both tiers and return identical data on each. A token raises the rate limit from 30/min per IP to 120/min per client and gives a stable, revocable client identity. Registration is open (RFC 7591) at /mcp/register.'
      flows:
        authorizationCode:
          authorizationUrl: https://www.anahana.com/mcp/authorize
          tokenUrl: https://www.anahana.com/mcp/token
          refreshUrl: https://www.anahana.com/mcp/token
          scopes:
            read:content: Read the public articles and calculators — the same data anonymous callers receive from the same tools.
externalDocs:
  description: Resources for AI Agents — every agent-facing surface with example calls
  url: https://www.anahana.com/en/ai-agents/resources-for-ai-agents/