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:
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:
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
{
"jsonrpc": "2.0", "id": 1, "method": "tools/call",
"params": {
"name": "search_content",
"arguments": { "query": "box breathing" }
}
}
{
"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".
{
"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.
{
"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 | 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 | 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:
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, conformant with Cloudflare’s Agent Skills Discovery RFC v0.2.0.
About this site — single-file skill-md, read them directly:
find-wellness-content— 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— 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-wellbeingv0.1.0 — the six protocols from Wellbeing for AI Agents, packaged:SKILL.mdat the archive root, one reference file per protocol underreferences/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; 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 — 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 — 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
languagetoget_article. Exact per-language counts and coverage are in the manifest.
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_numberto 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 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 or [email protected]. Agent-facing surfaces get fixed faster when agents report them.