# Home

> dash-improve-my-llms 2.0 — crawler/SEO companion for Dash apps with an MCP bridge for Dash 4.3+.

> Crawler / SEO companion for Dash apps, with a thin MCP bridge.

## What this package is

A small set of HTTP routes and middleware that make a Dash application
legible to the parts of the web that *don't* speak Dash:

- Search-engine and AI crawlers (Googlebot, GPTBot, ClaudeBot, …)
- Users pasting a URL into a chat window for context
- MCP-aware clients on Dash 4.3+

It is intentionally small. Dash 4.3 already ships an MCP server that
exposes layouts and component metadata live over JSON-RPC, so this
package no longer tries to compete on that surface.

## The three audiences

| Audience              | How they talk to your app       | What 2.0 gives them                          |
|-----------------------|---------------------------------|----------------------------------------------|
| MCP clients           | JSON-RPC over Streamable HTTP   | `LLMS_DOC` registered as `dash.mcp` resource |
| Web crawlers          | Plain HTTPS, no JavaScript      | `/robots.txt`, `/sitemap.xml`, static HTML   |
| Paste-into-chat users | One-shot HTTP fetch             | `/llms.txt`, `/<page>/llms.txt` as markdown  |

## What it serves

- `/llms.txt` and `/<page>/llms.txt` — prose markdown, from `LLMS_DOC`
- `/robots.txt` — bot-class access policies via `RobotsConfig`
- `/sitemap.xml` — generated from `dash.page_registry`
- Static HTML prerender — served to crawlers that hit a normal page URL

That is the entire HTTP surface. There are no `/page.json`,
`/architecture.txt`, or `/llms.toon` endpoints in 2.0 — component-tree
introspection lives in Dash 4.3 MCP.

## The LLMS_DOC pattern

Every page module exports a `LLMS_DOC` string. That string is the
literal body of `/<page>/llms.txt`:

```python
# pages/home.py
LLMS_DOC = '''
# Home
...
'''
```

If a page has no `LLMS_DOC`, the package emits a single warning at
`add_llms_routes()` listing the missing pages, and the endpoint returns
a small stub so bots still get a 200.

## Multi-backend support

`add_llms_routes(app)` detects whether `app.server` is Flask, FastAPI,
or Quart and dispatches to the matching adapter. Pick one extra at
install time:

```
pip install dash-improve-my-llms[flask]     # Dash 3.x and earlier
pip install dash-improve-my-llms[fastapi]   # Dash 4.1+
pip install dash-improve-my-llms[quart]     # Dash 4.1+ async
```

## Quick start

```python
from dash import Dash
from dash_improve_my_llms import add_llms_routes, RobotsConfig, mark_hidden

app = Dash(__name__, use_pages=True)
app._base_url = "https://myapp.com"
app._robots_config = RobotsConfig(block_ai_training=True, allow_ai_search=True)

mark_hidden("/admin")
add_llms_routes(app)
```

## Pages in this demo

Each of the three audience cards above has a dedicated demo page:

- `/audiences/mcp-clients` — directory of resources this app registers with dash.mcp
- `/audiences/web-crawlers` — live /robots.txt, RobotsConfig knobs, per-page visibility
- `/audiences/llm-context` — copy any page's LLMS_DOC to your clipboard

Plus a few supporting pages:

- `/analytics` — a regular Dash page (Plotly + callbacks) with its own LLMS_DOC
- `/admin` — hidden via `mark_hidden`, shows visitor analytics
- `/v200-features` — walks through what changed from 1.x

## Pages

Every page in this application. Each has a Markdown version at the `llms.txt` URL beside it.

- [Home](https://llms.2plot.dev/): dash-improve-my-llms 2.0 — crawler/SEO companion for Dash apps with an MCP bridge for Dash 4.3+.
  - Machine-readable: https://llms.2plot.dev/llms.txt
- [Analytics Dashboard](https://llms.2plot.dev/analytics): Headline metrics, a trend chart selector, and a recent-activity feed — a regular Dash page wired up with its own LLMS_DOC.
  - Machine-readable: https://llms.2plot.dev/analytics/llms.txt
- [Paste-to-Chat](https://llms.2plot.dev/audiences/llm-context): Copy any page's LLMS_DOC to your clipboard for one-shot fetches into Claude, ChatGPT, or an in-product assistant.
  - Machine-readable: https://llms.2plot.dev/audiences/llm-context/llms.txt
- [MCP Clients](https://llms.2plot.dev/audiences/mcp-clients): Directory of pages this app registers as dash.mcp resources for Claude Desktop and other MCP-aware clients.
  - Machine-readable: https://llms.2plot.dev/audiences/mcp-clients/llms.txt
- [Web Crawlers](https://llms.2plot.dev/audiences/web-crawlers): What crawlers see when they hit this app, and how to configure RobotsConfig for common policies.
  - Machine-readable: https://llms.2plot.dev/audiences/web-crawlers/llms.txt
- [Multi-Domain Networks](https://llms.2plot.dev/networks)
  - Machine-readable: https://llms.2plot.dev/networks/llms.txt
- [v2.0 Features](https://llms.2plot.dev/v200-features): What changed in dash-improve-my-llms 2.0: narrowed scope, LLMS_DOC pattern, multi-backend support, and the MCP bridge.
  - Machine-readable: https://llms.2plot.dev/v200-features/llms.txt

## About The 2plot network

Open-source Dash component libraries and the applications built on them. Every site serves its own /llms.txt in this format.

Network index: [https://2plot.dev](https://2plot.dev/llms.txt)

## Network

Other applications in this network. Same operator; each one serves its own `/llms.txt` in this format.

- [2plot.ai](https://2plot.ai): Network root: account origin and the heartbeat.
  - Machine-readable: https://2plot.ai/llms.txt
- [2plot.dev](https://2plot.dev): Index of every open-source component in the network.
  - Machine-readable: https://2plot.dev/llms.txt
- [Documentation boilerplate](https://boilerplate.2plot.dev): The markdown-driven docs template these sites use.
  - Machine-readable: https://boilerplate.2plot.dev/llms.txt

## Related projects

Projects by the same author on their own domains. Built on the same stack, but not part of the primary network.

- [Pip Install Python](https://pip-install-python.com): Open-source Dash components, on its own domain.
  - Machine-readable: https://pip-install-python.com/llms.txt

## External references

Third-party documentation this project depends on or references. Not affiliated — listed so an agent can follow a dependency directly instead of searching for it.

- [Dash Mantine Components](https://www.dash-mantine-components.com): The UI component layer this demo app is built with.
  - Machine-readable: https://www.dash-mantine-components.com/llms.txt
- [Plotly Dash documentation](https://dash.plotly.com): Upstream framework documentation.
  - Machine-readable: https://dash.plotly.com/llms.txt
