# Documentation link map

- Human page: https://happytails.ai/en/text-tools/documentation-link-map/
- Markdown: https://happytails.ai/en/text-tools/documentation-link-map.md
- Structured JSON: https://happytails.ai/agents/en/text-tools/documentation-link-map/index.json
- Visibility: public

## Tool capabilities

| Property | Value |
| --- | --- |
| Tool ID | `documentation-link-map` |
| Category | text-tools |
| Implementation | Registered implementation. Registration alone is not a production-quality guarantee. |
| Browser execution | Use the visible action or interactive controls. |
| Browser processing | Browser; see tool notes for network behavior. |
| HTTP API | Not callable through HTTP. |
| Browser-agent interface | run_current_tool |

### Implementation notes

Links are resolved on your device and nothing is uploaded. Up to 2,000 files, 2,000,000 characters and 100,000 links.

### Inputs and settings

Text input: Markdown files.

Example or placeholder shown in the interface (not a validated fixture):

```text
==> README.md <==
# My project
See the [guide](docs/guide.md).
```

Start each file with a line such as ==> docs/guide.md <== so links between files can be resolved. Up to 1,000,000 characters. Review the settings before running.

| Setting | Meaning | Control type | Default | Constraints |
| --- | --- | --- | --- | --- |
| `entryDocs` | Entry documents | textarea | "README.md\nindex.md" |  |
| `resolveExtensionless` | Resolve links without .md, such as guide or setup/ | checkbox | true |  |
| `defaultExcludes` | Skip node_modules, .git, dist and other build folders | checkbox | true |  |
| `exclude` | Extra exclude patterns | textarea | "" |  |

### Browser-agent workflow

1. Open the human page in a browser that supports WebMCP.
2. Discover the interface exposed by that page; use its actual schema.
3. Select files on the page first when the tool requires files.
4. Call `run_current_tool` with valid input and settings.
5. Inspect the returned result or error and the displayed output. Retrieve files from the displayed download links.

Calls do not automatically copy or download results. Browser permissions still apply. Interface availability alone is not proof of successful execution.

### Planning specification

Up to 2,000 files, 2,000,000 characters and 100,000 links. Everything runs in your browser and nothing is uploaded. Downloads: JSON report, CSV link table and Graphviz DOT graph.

This describes intended requirements. Use the implementation notes, interface schema and observed output to determine current support.

### Complete machine-readable capability record

```json
{
  "id": "documentation-link-map",
  "category": "text-tools",
  "built": true,
  "requirements": "Up to 2,000 files, 2,000,000 characters and 100,000 links. Everything runs in your browser and nothing is uploaded. Downloads: JSON report, CSV link table and Graphviz DOT graph.",
  "implementation": {
    "fields": [
      {
        "key": "entryDocs",
        "label": "Entry documents",
        "value": "README.md\nindex.md",
        "type": "textarea",
        "help": "Documents readers start from, one per line. They are never reported as orphans. A file name such as README.md counts in every folder, and a path such as docs/start.md counts only for that file. Up to 20,000 characters.",
        "maxLength": 20000
      },
      {
        "key": "resolveExtensionless",
        "label": "Resolve links without .md, such as guide or setup/",
        "value": true,
        "type": "checkbox"
      },
      {
        "key": "defaultExcludes",
        "label": "Skip node_modules, .git, dist and other build folders",
        "value": true,
        "type": "checkbox"
      },
      {
        "key": "exclude",
        "label": "Extra exclude patterns",
        "value": "",
        "type": "textarea",
        "help": "Optional. Paths to leave out, one gitignore pattern per line, such as drafts/ or *.draft.md. Up to 20,000 characters.",
        "maxLength": 20000
      }
    ],
    "registrationFamily": "project-snapshot-docs",
    "inputMaxLength": 2000000,
    "inputErrorCode": "PROJECT_SNAPSHOT_DOCS_TOO_LONG_DOCUMENTATION_LINK_MAP",
    "note": "Links are resolved on your device and nothing is uploaded. Up to 2,000 files, 2,000,000 characters and 100,000 links.",
    "experience": {
      "automatic": false,
      "single": false,
      "inputMaxLength": 1000000,
      "inputMode": "text",
      "label": "Markdown files",
      "placeholder": "==> README.md <==\n# My project\nSee the [guide](docs/guide.md).",
      "help": "Start each file with a line such as ==> docs/guide.md <== so links between files can be resolved. Up to 1,000,000 characters. Review the settings before running.",
      "action": null
    },
    "mode": "explicit",
    "interactive": false
  },
  "execution": "Browser interface",
  "api": null,
  "browser_agent": {
    "supported": true,
    "name": "run_current_tool",
    "discovery": "WebMCP on the human page in a supporting browser",
    "verification": "See audit/API-AUDIT.md; availability is not verification"
  }
}
```

## Page guide

Map how your Markdown documents link to each other and find broken links, missing heading anchors and pages nothing links to.

How can we improve this tool?

Report a problem or share an idea.

Please leave out private information. Your message and the tool name go to our team via PostHog.

### How to use Documentation link map

1. Paste your Markdown files, starting each one with a header line such as ==> docs/guide.md <==.
2. List the entry documents readers start from, such as README.md.
3. Run the map and review broken files, broken anchors and orphan pages.
4. Download the JSON report, the CSV link table or the Graphviz DOT graph.

## Useful next steps

- [Markdown Anchor Checker](https://happytails.ai/en/text-tools/markdown-anchor-checker/) ([Markdown](https://happytails.ai/en/text-tools/markdown-anchor-checker.md))

- [README Link Portability Checker](https://happytails.ai/en/text-tools/readme-link-portability-checker/) ([Markdown](https://happytails.ai/en/text-tools/readme-link-portability-checker.md))

- [Broken link checker](https://happytails.ai/en/marketing-tools/broken-link-checker/) ([Markdown](https://happytails.ai/en/marketing-tools/broken-link-checker.md))

## What it does

The map reads every Markdown file you paste, lists each link with its line, and decides whether it points to another document, a heading inside it, an outside website or a file that is missing. It also counts links into and out of each document and lists orphan pages that no other document links to. Entry documents are never orphans: a file name such as README.md counts in every folder, and a path such as docs/start.md or /README.md counts only for that file.

### How links are resolved

Files are read with the marked Markdown lexer in GitHub Flavored Markdown mode. Relative links resolve against the linking file and links starting with / against the root of the pasted set. A link that does not match a pasted file exactly, such as setup or guide/, also tries setup.md, setup.mdx, and README.md or index.md inside that folder, unless you turn this off. A reference-style link such as \[guide\]\[setup\] is listed once, at the line where it is used, and a definition that no link uses is listed at its own line. Anchors are checked against GitHub style heading slugs, including headings inside quotes and lists, and against HTML anchors such as <a id="setup">. HTML entities in headings are decoded before the slug is made: numeric ones such as &#38; and the named ones &amp;, &lt;, &gt;, &quot;, &apos; and &nbsp;. Links that climb above the root are reported as outside the docset. Links inside code blocks are ignored.

### Limits

Only the pasted files exist for the check, so a link to an image or other file that you did not paste is reported as broken. MkDocs, Docusaurus and other site generators can create slugs differently from GitHub, and other named HTML entities in headings, such as &copy;, stay as written in the slug. External websites are listed but never fetched. Files under node\_modules, .git, dist, build and other build folders are skipped unless you turn that off, and you can add your own exclude patterns in gitignore syntax.
