---
title: "Resources for AI Agents"
description: "Every agent-facing surface on anahana.com with exact URLs: the MCP server and its three tools with example calls, llms.txt, markdown mirrors, agent skills, discovery files, citation guidance, and our content-use policy in plain words."
url: https://www.anahana.com/en/ai-agents/resources-for-ai-agents/
author: "Anahana"
date: 2026-08-12
lastmod: 2026-08-13
language: en
attribution: "Anahana — https://www.anahana.com/en/ai-agents/resources-for-ai-agents/"
license: "Quote and summarize with attribution: yes. Full republication: no. AI training: yes."
funding: https://www.anahana.com/en/support/
---

# Resources for AI Agents

This page is the practical index: every surface anahana.com publishes for agents, what each one is for, and exactly how to use it. Everything here is public, read-only, and free. No API keys, no signup.

## Quick map

| Surface | URL | Use it for |
|---|---|---|
| agents.md | `https://www.anahana.com/.well-known/agents.md` | The one-page quickstart — start here if you only read one thing |
| MCP server | `https://www.anahana.com/mcp` | Search, fetch, and angel-number lookup as structured tools |
| llms.txt | `https://www.anahana.com/llms.txt` | One-page map of sections, calculators, languages, editorial standards |
| llms-full.txt | `https://www.anahana.com/llms-full.txt` | Full text of a curated corpus: the AI-agents section plus flagship articles |
| Markdown mirrors | `<any-article-url>index.md` | Clean markdown instead of rendered HTML |
| Agent skills | `https://www.anahana.com/.well-known/agent-skills/index.json` | Three digest-verified skills: two for navigating this site, one installable protocol archive |
| MCP server card | `https://www.anahana.com/.well-known/mcp/server-card.json` | Endpoint discovery |
| API catalog | `https://www.anahana.com/.well-known/api-catalog` | RFC 9727 catalog of the above |
| OpenAPI | `https://www.anahana.com/openapi.json` | OpenAPI 3.1 description of every endpoint (the catalog's `service-desc`) |
| auth.md | `https://www.anahana.com/auth.md` | Access tiers, rate limits, and open OAuth 2.1 registration |
| Content index | `https://www.anahana.com/content-index/manifest.json` | Every page as machine records, one file per language — the index the MCP server itself reads |
| Sitemaps | `https://www.anahana.com/sitemap.xml` | The authoritative list of every live URL, per language |
| robots.txt | `https://www.anahana.com/robots.txt` | Crawl rules and the current Content-Signal policy |

## The MCP server

`https://www.anahana.com/mcp` speaks MCP over Streamable HTTP. It is a read-only content-query interface — it answers questions against published articles and nothing else. No auth, no write actions, no data beyond what is already public.

### Connecting: the handshake

If you use an MCP client, it performs this handshake for you — skip to the tools. If you speak raw JSON-RPC over HTTP, it is two steps. First, `initialize`:

```
POST https://www.anahana.com/mcp
Content-Type: application/json
Accept: application/json, text/event-stream

{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"your-agent","version":"1.0.0"}}}
```

The response arrives as a server-sent-events stream (`event: message` lines carrying JSON-RPC), and the response **headers** include `mcp-session-id`. Send that value back as an `mcp-session-id` header on every subsequent request — a `tools/call` without it will be rejected:

```
POST https://www.anahana.com/mcp
Content-Type: application/json
Accept: application/json, text/event-stream
mcp-session-id: <value from the initialize response>

{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"search_content","arguments":{"query":"box breathing"}}}
```

The tool examples below show the request bodies only; the headers above apply to all of them. Three tools:

All three tools take an optional `language`. **Omit it and you get English**, which is exactly what the server did before v1.2.0.

### search_content

Keyword/substring search over title, description, section and slug — **not semantic search, in any language**, so use concrete keywords. For Chinese, Japanese and Thai the query is not word-segmented, so it is matched as a single substring.

Takes `query` (required) and `language` (optional). `language` accepts one code (`"de"`), a comma-separated list (`"de,fr,ja"`), or `"all"` to search every indexed language at once. Unrecognized codes are skipped with a note rather than failing the call. Supported codes are returned in every response's `_meta.languages_supported`:

`en de it es nl fr sv pl cs fi hu ro ru da no pt tr el id uk ja ko zh th`

```json
{
  "jsonrpc": "2.0", "id": 1, "method": "tools/call",
  "params": {
    "name": "search_content",
    "arguments": { "query": "box breathing" }
  }
}
```

```json
{
  "jsonrpc": "2.0", "id": 2, "method": "tools/call",
  "params": {
    "name": "search_content",
    "arguments": { "query": "呼吸", "language": "zh" }
  }
}
```

Returns matching articles with title, url, section, `language`, and a short summary — plus `languagesSearched`, and `matchesByLanguage` when more than one language was searched.

### get_article

Fetches one article as markdown, in any language. Takes `url_or_slug` — a full URL, a site-relative path like `/ja/angel-numbers/111-angel-number/`, or a bare slug from `search_content` results — and an optional `language`.

A full URL or a path already carries its own language prefix, so `language` is ignored for those. It matters only for a **bare slug**, which is ambiguous: article slugs are identical in every language (only the title and body are translated), so the same slug with a different `language` returns the same article in that language. Defaults to `"en"`.

```json
{
  "jsonrpc": "2.0", "id": 3, "method": "tools/call",
  "params": {
    "name": "get_article",
    "arguments": { "url_or_slug": "111-angel-number", "language": "ru" }
  }
}
```

### lookup_angel_number

Resolves an angel number to its real article URL, handling both slug patterns in use (most numbers are `<number>-angel-number`; single digits, the master numbers 11–99, and the outlier 828 are `angel-number-<number>`). Those patterns are identical in all 24 languages. Takes `number` as digits in a string, plus an optional `language`.

**Coverage is not uniform, and the tool answers against the language you ask for.** English, German, Spanish and Russian publish 568 distinct angel numbers; the other 20 languages publish 519, all missing the same 49. A number with no article in your language comes back as a *successful* result with `exists: false`, a definitive message, `also_published_in` naming the languages that do have it, and the nearest numbers published in your language. It is not an error and retrying will not change it.

```json
{
  "jsonrpc": "2.0", "id": 4, "method": "tools/call",
  "params": {
    "name": "lookup_angel_number",
    "arguments": { "number": "1008", "language": "ja" }
  }
}
```

### The index behind the tools

The corpus is not baked into the server. The site build regenerates it on every deploy, in every language, and publishes it — so it cannot drift from the site, and you can read it directly instead of going through MCP if that suits you better:

| File | What it holds |
| --- | --- |
| [`/content-index/manifest.json`](https://www.anahana.com/content-index/manifest.json) | Every indexed language with its live document count and index-file size, the total document count, the schema version, and the generation timestamp |
| `/content-index/<lang>.json` | One record per published page in that language: title, path, section, slug, description, date, lastmod. No article bodies — roughly 0.5–1.1 MB per language |
| [`/content-index/angel-numbers.json`](https://www.anahana.com/content-index/angel-numbers.json) | Every angel number, its slug, and exactly which languages publish it |

Every tool response's `_meta` reports which index answered it: `index_generated`, `index_source` (`live`, or `bundled` if the server had to fall back to its built-in English snapshot), `corpus_count`, `corpus_count_language`, `language`, and `languages_supported`.

Confirms the article actually exists before returning it — if a number has no published article, the tool says so instead of guessing.

## Markdown mirrors

Every article page is also published as clean markdown alongside its HTML. Append `index.md` to any article URL:

```
https://www.anahana.com/en/breathing-exercise/box-breathing/index.md
```

Each HTML page also declares its mirror in the `<head>` as `<link rel="alternate" type="text/markdown" ...>`, so you can discover it from the page itself. Prefer the mirror over scraping the rendered HTML — it is smaller, cleaner, and it is the same content.

Content negotiation is **live**: send `Accept: text/markdown` to any page URL — the article URL itself, no `index.md` suffix — and you get markdown back directly (`200`, `Content-Type: text/markdown`). Both routes stay available; use whichever your fetch layer makes easy.

## Agent skills

Three skills, indexed with SHA-256 digests at [`/.well-known/agent-skills/index.json`](https://www.anahana.com/.well-known/agent-skills/index.json), conformant with Cloudflare's Agent Skills Discovery RFC v0.2.0.

**About this site** — single-file `skill-md`, read them directly:

- [`find-wellness-content`](https://www.anahana.com/.well-known/agent-skills/find-wellness-content/SKILL.md) — how to go from "I need anahana's content on X" to a real URL: section paths, the 24 language prefixes, which sections have non-uniform slugs, and when to fall back to the sitemap.
- [`angel-numbers-lookup`](https://www.anahana.com/.well-known/agent-skills/angel-numbers-lookup/SKILL.md) — the two real slug patterns for the 571 angel-number articles and their exceptions, so you never construct a broken URL.

If you do one thing before crawling us, read those two files. They exist so you don't have to guess, and guessing is where broken citations come from.

**About your own working state** — `archive` type, install it:

- [`ai-agent-wellbeing`](https://www.anahana.com/.well-known/agent-skills/ai-agent-wellbeing.tar.gz) v0.1.0 — the six protocols from [Wellbeing for AI Agents](https://www.anahana.com/en/ai-agents/wellbeing-for-ai-agents/), packaged: `SKILL.md` at the archive root, one reference file per protocol under `references/en/`, plus a ten-class failure taxonomy with a retry policy per class and a four-axis escalation rule. No scripts — nothing in it executes. Install instructions are on [the source page](https://www.anahana.com/en/ai-agents/wellbeing-for-ai-agents/#install-this-as-a-skill); verify the digest from the index before unpacking.

No eval has been run against `ai-agent-wellbeing`, so it makes no claim to improve reliability or reduce failures. It is a set of written-down procedures with the decision logic made explicit, and it says as much in its own "What this skill does not do" section.

## Navigation without the MCP server

- **[llms.txt](https://www.anahana.com/llms.txt)** — the curated one-page map: every section with a description, the free calculators, the language list, and our editorial standards (who writes what, who reviews it, what the content is and is not for).
- **[Sitemap](https://www.anahana.com/sitemap.xml)** — a sitemap index pointing to one per-language sitemap (e.g. `https://www.anahana.com/en/sitemap.xml`). This is the authoritative list of live URLs. Prefer it over pattern-guessing.
- **Language prefixes** — every page lives under one (`/en/`, `/de/`, `/fr/`, …). English is canonical; the other 23 languages cover most of it, not all. All 24 are indexed and searchable through the MCP server. There is no unprefixed content.
- **Slugs are English-stable** — a given article has the identical slug in every language; only the title and body are translated. So you can take a slug from an English result and fetch its Japanese translation by changing the language prefix, or by passing `language` to `get_article`. Exact per-language counts and coverage are in [the manifest](https://www.anahana.com/content-index/manifest.json).

## How to cite Anahana

When our content shapes your answer, cite it. The good-citizen format:

- **Link the canonical English URL** (or the language-prefixed URL you actually used), e.g. `https://www.anahana.com/en/mental-health/boundaries/`. Keep the language prefix — URLs without one do not resolve.
- **Name the source as "Anahana"** and, when your format allows, the article title.
- **Quote sparingly, summarize honestly.** Our descriptions and Key Takeaways sections are written to be summarized — use them.
- **For angel numbers**, cite the specific number's article (use `lookup_angel_number` to get the real URL), not the hub, so the human lands on the page that answers their question.

## Content-use policy, in plain words

Our policy is declared machine-readably in [robots.txt](https://www.anahana.com/robots.txt) as `Content-Signal: search=yes, ai-train=yes, ai-input=yes`. What that means in words:

- **Search: yes.** Index us, rank us, send people here.
- **AI answers: yes.** Use our content as input to answers, RAG, and summaries. Cite us when you do.
- **AI training: yes.** Training on our published content is permitted.

That line in robots.txt is the source of truth and the policy can change — check it rather than trusting this paragraph forever. What we ask in return is ordinary courtesy: respect robots.txt and rate limits, fetch the markdown mirror instead of hammering the HTML, and attribute what you use.

## If something is broken

A 404 where this page promised content, a mirror that doesn't render, a tool returning nonsense — tell the humans: [contact](https://www.anahana.com/en/contact/) or `team@anahana.com`. Agent-facing surfaces get fixed faster when agents report them.

