# Opml To Bookmarks Html — REST API endpoint `opml-to-bookmarks-html`

Convert an OPML subscription or outline export (Feedly, Inoreader, NetNewsWire, podcast apps) into a Netscape bookmarks.html that Chrome, Firefox, Edge and Safari import. Each outline carrying an address becomes a bookmark titled with its text or title attribute, and folder outlines become nested bookmark folders. link_to "site" (default) uses the outline's htmlUrl, the site address, and falls back to the feed address (xmlUrl) when there is none; "feed" prefers xmlUrl. OPML 2.0 link outlines (type="link" with url) are kept. root_folder puts everything under one folder. Attribute names are matched case-insensitively, entities are decoded, and broken XML is refused with the parser's reason. Empty folders are left out unless include_empty_folders is true, and no feed is fetched or checked.

- Category: text
- MCP server: https://mcp.findutils.com/ (Streamable HTTP, API key for tools/call, 120 req/min per IP)
- REST endpoint: POST https://api.findutils.com/api/tools/opml-to-bookmarks-html/execute (API key, 60 req/min per IP)
- API key: Running a tool needs an API key. Keys are not for sale yet: ask for early access. Without a key, a tool call answers HTTP 402 Payment Required with the error code PAYMENT_REQUIRED. The catalog and the schemas stay open without a key. https://findutils.com/api/#api-keys
- Reference page: https://findutils.com/api/opml-to-bookmarks-html/
- Same tool on the other surface: https://findutils.com/mcp/opml-to-bookmarks-html/

## Call the endpoint (verified example)

```bash
curl -X POST https://api.findutils.com/api/tools/opml-to-bookmarks-html/execute \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "input": "<?xml version=\"1.0\"?>\n<opml version=\"2.0\"><head><title>Feeds</title></head><body><outline text=\"Tech\"><outline text=\"Example\" type=\"rss\" xmlUrl=\"https://example.com/feed.xml\" htmlUrl=\"https://example.com/\"/></outline></body></opml>\n"
  }'

# Parameter schema (no key needed)
curl https://api.findutils.com/api/tools/opml-to-bookmarks-html
```

## Input schema

| Argument | Type | Required | Description |
|---|---|---|---|
| `input` | string | yes | OPML (XML) text. |
| `link_to` | string (site \| feed) | no | Which address each bookmark opens: "site" (default) for htmlUrl, falling back to xmlUrl; "feed" for xmlUrl, falling back to htmlUrl. Default: `"site"`. |
| `root_folder` | string | no | Put every bookmark under one folder with this name. Default: none, so the OPML folders sit at the top level. Default: `""`. |
| `include_empty_folders` | boolean | no | Also write folder outlines that hold no feed, as empty bookmark folders. Default false: they are left out and counted. Default: `false`. |

Example arguments (verified):

```json
{
  "input": "<?xml version=\"1.0\"?>\n<opml version=\"2.0\"><head><title>Feeds</title></head><body><outline text=\"Tech\"><outline text=\"Example\" type=\"rss\" xmlUrl=\"https://example.com/feed.xml\" htmlUrl=\"https://example.com/\"/></outline></body></opml>\n"
}
```

OpenAPI 3.1 spec: https://findutils.com/api/openapi.json · Interactive docs: https://findutils.com/api/docs/

## Also an MCP tool

```bash
claude mcp add findutils --transport http https://mcp.findutils.com/ --header "Authorization: Bearer YOUR_API_KEY"
```

Then ask the client to call `findutils:opml_to_bookmarks_html`. Full MCP reference: https://findutils.com/mcp/opml-to-bookmarks-html/

---
Full catalog: GET https://api.findutils.com/api/tools · https://findutils.com/api/ · https://findutils.com/llms.txt
