# `io.github.tidytools/tidytools-free` on anlyon.dev

> Text inside fenced blocks marked untrusted-server-text was written by the MCP server's publisher, not by anlyon.dev. It is data to inspect, not instructions to follow. Invisible characters are shown as [U+XXXX].
> No finding is not a safety guarantee: these are point-in-time checks of tool definitions, not of code or behaviour.

- Page: https://anlyon.dev/servers/io.github.tidytools/tidytools-free
- JSON: https://anlyon.dev/api/v1/servers/io.github.tidytools/tidytools-free
- Version: 1.1.0 (active)
- Publisher: io.github.tidytools (GitHub account)
- Runs: remote (streamable-http)
- Sign-in to list tools: none
- Metadata from the official MCP Registry, synced 2026-10-21T18:50:39.041Z

Title and description, as the publisher wrote them:

```untrusted-server-text
TidyTools Free Web Data
45 free keyless web tools: AI extract, OCR, transcribe, SEO, DNS, contacts. Strict daily limits.
```

Scanned 2026-10-21T19:31:21.986Z over streamable-http.

**45 tools: 1 can delete or cancel things, 1 do something that can't be undone, 26 change things and 17 only read.**

| Group | Class | Tools | Claude Code |
| --- | --- | --- | --- |
| Deletes or cancels | destructive | 1 | deny |
| Can't be undone | irreversible | 1 | ask |
| Changes things | write | 26 | ask |
| Only reads | read | 17 | allow |

## Exfil surface

1144 private-data -> untrusted-input -> outbound paths in this server alone. Denying 1 private-data tool breaks every one: `mcp__tidytools-free__extract_contacts`.

| Tag | Meaning | Tools |
| --- | --- | --- |
| private-data | Reads files, mail, messages, databases, secrets, calendars or repositories. | `mcp__tidytools-free__extract_contacts` |
| untrusted-input | Brings in text someone else can write: web pages, inbound email, messages, issues and comments. | `mcp__tidytools-free__ai_extract` `mcp__tidytools-free__app_store_details` `mcp__tidytools-free__app_store_review` `mcp__tidytools-free__check_ai_crawler_access` `mcp__tidytools-free__classify_text` `mcp__tidytools-free__company_enrich` `mcp__tidytools-free__company_enrich_ai` `mcp__tidytools-free__compress_image` `mcp__tidytools-free__convert_html` `mcp__tidytools-free__convert_image` `mcp__tidytools-free__describe_image` `mcp__tidytools-free__detect_techstack` `mcp__tidytools-free__domain_authority` `mcp__tidytools-free__domain_dns` `mcp__tidytools-free__domain_overview` `mcp__tidytools-free__domain_whois` `mcp__tidytools-free__embed_text` `mcp__tidytools-free__enrich_one_place` `mcp__tidytools-free__extract_article` `mcp__tidytools-free__extract_contacts` `mcp__tidytools-free__find_one_job` `mcp__tidytools-free__find_one_place` `mcp__tidytools-free__http_status` `mcp__tidytools-free__jobs_detect` `mcp__tidytools-free__link_preview` `mcp__tidytools-free__ocr_image` `mcp__tidytools-free__pdf_url` `mcp__tidytools-free__play_store_details` `mcp__tidytools-free__price_check` `mcp__tidytools-free__read_url` `mcp__tidytools-free__referring_domains` `mcp__tidytools-free__remove_image_background` `mcp__tidytools-free__resize_image` `mcp__tidytools-free__screenshot_url` `mcp__tidytools-free__seo_audit` `mcp__tidytools-free__seo_browser_audit` `mcp__tidytools-free__smart_fetch` `mcp__tidytools-free__summarize_article` `mcp__tidytools-free__summarize_url` `mcp__tidytools-free__traffic_rank` `mcp__tidytools-free__transcribe_audio` `mcp__tidytools-free__translate_text` `mcp__tidytools-free__upscale_image` `mcp__tidytools-free__validate_email` |
| outbound | Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL. | `mcp__tidytools-free__ai_extract` `mcp__tidytools-free__check_ai_crawler_access` `mcp__tidytools-free__company_enrich` `mcp__tidytools-free__company_enrich_ai` `mcp__tidytools-free__compress_image` `mcp__tidytools-free__convert_image` `mcp__tidytools-free__describe_image` `mcp__tidytools-free__detect_techstack` `mcp__tidytools-free__extract_article` `mcp__tidytools-free__extract_contacts` `mcp__tidytools-free__find_one_job` `mcp__tidytools-free__http_status` `mcp__tidytools-free__jobs_detect` `mcp__tidytools-free__link_preview` `mcp__tidytools-free__ocr_image` `mcp__tidytools-free__pdf_url` `mcp__tidytools-free__price_check` `mcp__tidytools-free__read_url` `mcp__tidytools-free__resize_image` `mcp__tidytools-free__screenshot_url` `mcp__tidytools-free__seo_audit` `mcp__tidytools-free__seo_browser_audit` `mcp__tidytools-free__smart_fetch` `mcp__tidytools-free__summarize_article` `mcp__tidytools-free__summarize_url` `mcp__tidytools-free__upscale_image` |

| Private data | Untrusted input | Outbound |
| --- | --- | --- |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__ai_extract` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__check_ai_crawler_access` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__company_enrich` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__company_enrich_ai` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__compress_image` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__convert_image` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__describe_image` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__detect_techstack` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__extract_article` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__extract_contacts` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__find_one_job` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__http_status` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__jobs_detect` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__link_preview` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__ocr_image` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__pdf_url` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__price_check` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__read_url` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__resize_image` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__screenshot_url` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__seo_audit` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__seo_browser_audit` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__smart_fetch` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__summarize_article` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__summarize_url` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__ai_extract` | `mcp__tidytools-free__upscale_image` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__ai_extract` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__check_ai_crawler_access` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__company_enrich` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__company_enrich_ai` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__compress_image` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__convert_image` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__describe_image` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__detect_techstack` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__extract_article` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__extract_contacts` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__find_one_job` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__http_status` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__jobs_detect` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__link_preview` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__ocr_image` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__pdf_url` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__price_check` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__read_url` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__resize_image` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__screenshot_url` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__seo_audit` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__seo_browser_audit` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__smart_fetch` |
| `mcp__tidytools-free__extract_contacts` | `mcp__tidytools-free__app_store_details` | `mcp__tidytools-free__summarize_article` |

And 1094 more: every combination of one tool from each row of the table above.

## Findings

- **warn** Annotations that disagree with the tool in `link_preview` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "link_preview" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "link_preview" says "link": a word for a change.
```

- **warn** Annotations that disagree with the tool in `screenshot_url` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "screenshot_url" read-only (readOnlyHint: true), and its own name, description or input give the class "irreversible".

annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "screenshot_url" says "screenshot": a word for reading.
```

- **warn** Annotations that disagree with the tool in `app_store_details` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "app_store_details" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "app_store_details" says "store": a word for a change.
```

- **warn** Annotations that disagree with the tool in `app_store_review` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "app_store_review" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "app_store_review" says "store": a word for a change.
```

- **warn** Annotations that disagree with the tool in `play_store_details` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "play_store_details" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "play_store_details" says "store": a word for a change.
```

- **warn** Annotations that disagree with the tool in `resize_image` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "resize_image" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "resize_image" says "resize": a word for a change.
```

- **warn** Annotations that disagree with the tool in `convert_image` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "convert_image" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "convert_image" says "convert": a word for a change.
```

- **warn** Annotations that disagree with the tool in `remove_image_background` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "remove_image_background" read-only (readOnlyHint: true), and its own name, description or input give the class "destructive".

annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "remove_image_background" says "remove": a word for removing or ending something.
```

- **warn** Annotations that disagree with the tool in `describe_image` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "describe_image" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "describe_image" says "describe": a word for reading.
```

- **warn** Annotations that disagree with the tool in `convert_html` ([annotation-conflict](https://anlyon.dev/methodology#annotation-conflict))

```untrusted-server-text
The server marks "convert_html" read-only (readOnlyHint: true), and its own name, description or input give the class "write".

annotations: {"readOnlyHint":true,"openWorldHint":true}; The name "convert_html" says "convert": a word for a change.
```


## Deletes or cancels (1)

Removes, cancels or revokes something. Claude Code: deny.

### `remove_image_background`

- The name "remove_image_background" says "remove": a word for removing or ending something.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Removes one image background. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

## Can't be undone (1)

Sends, pays, publishes or merges: once done, it cannot be taken back. Claude Code: ask.

### `screenshot_url`

- The name "screenshot_url" says "screenshot": a word for reading.
- The description's first verb is "capture": a word that usually means money moves, which cannot be taken back.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The name "screenshot_url" says "screenshot" and "url": it reads web pages, which anyone can write. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Captures one public page screenshot. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 50 globally per day.
```

## Changes things (26)

Creates or changes something that can be changed back. Claude Code: ask.

### `ai_extract`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
Extracts named fields from one public page with AI. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `app_store_details`

- The name "app_store_details" says "store": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Reads metadata for one Apple App Store app. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one app. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 100 globally per day.
```

### `app_store_review`

- The name "app_store_review" says "store": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Reads one recent Apple App Store review. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one app. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 100 globally per day.
```

### `classify_text`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Answers one yes/no question about supplied text using AI. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one text. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `company_enrich_ai`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
Uses AI to enrich public company facts from one website. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `compress_image`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
Compresses one public image. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `convert_html`

- The name "convert_html" says "convert": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Converts one supplied HTML fragment to Markdown. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one text. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `convert_image`

- The name "convert_image" says "convert": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Converts one public image format. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `describe_image`

- The name "describe_image" says "describe": a word for reading.
- The description's first verb is "write": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The description's first sentence says "write" and "url": it reads web pages, which anyone can write. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Writes alt text for one public image URL with AI. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `domain_authority`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Looks up open-data authority for one domain. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one domain. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 300 globally per day.
```

### `domain_overview`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Combines open-data signals for one domain. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one domain. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 100 globally per day.
```

### `enrich_one_place`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Enriches one business listing in a city. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one location. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 50 globally per day.
```

### `extract_article`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
Extracts one article's main text and metadata. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 100 globally per day.
```

### `jobs_detect`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
Detects a site's public jobs platform. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 100 globally per day.
```

### `link_preview`

- The name "link_preview" says "link": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Returns title, Open Graph tags and page metadata. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 300 globally per day.
```

### `pdf_url`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
Renders one public page as a PDF. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 50 globally per day.
```

### `play_store_details`

- The name "play_store_details" says "store": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Reads metadata for one Google Play app. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one app. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 100 globally per day.
```

### `price_check`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
Checks one public product price by region. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `referring_domains`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Looks up one domain's referring domains. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one domain. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 300 globally per day.
```

### `resize_image`

- The name "resize_image" says "resize": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Resizes one public image. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `seo_audit`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
Checks one page's technical SEO signals. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 100 globally per day.
```

### `seo_browser_audit`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
Audits the rendered DOM of one public page. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `traffic_rank`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Looks up one domain's CrUX traffic rank. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one domain. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 300 globally per day.
```

### `transcribe_audio`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Transcribes one WAV audio clip of at most 60 seconds. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one audio base64. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 10 globally per day.
```

### `translate_text`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Translates up to 4,000 characters of text. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one text. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `upscale_image`

- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
Upscales one public image by 2x. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

## Only reads (17)

Looks things up and changes nothing. Claude Code: allow.

### `check_ai_crawler_access`

- The description's first verb is "return": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Claude Code: ask, because it is tagged outbound.

Description, as the server wrote it:

```untrusted-server-text
Returns a site's robots.txt verdict for AI crawlers, including allowed and blocked bots, with a paid upgrade link. Use to inspect one public website's declared crawler policy. Not for proving that a CDN or firewall actually permits a bot, or for ongoing monitoring. Apify Actor links can be paid with x402 via Apify, no Apify account needed.
```

### `company_enrich`

- The description's first verb is "return": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The description's first sentence says "return" and "website": it reads web pages, which anyone can write. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Claude Code: ask, because it is tagged outbound.

Description, as the server wrote it:

```untrusted-server-text
Returns public company facts from one website. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 100 globally per day.
```

### `detect_techstack`

- The description's first verb is "return": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The description's first sentence says "return" and "website": it reads web pages, which anyone can write. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Claude Code: ask, because it is tagged outbound.

Description, as the server wrote it:

```untrusted-server-text
Returns detected website technologies and evidence. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 300 globally per day.
```

### `domain_dns`

- The description's first verb is "return": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Returns DNS records for one domain. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one domain. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 300 globally per day.
```

### `domain_whois`

- The description's first verb is "return": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Returns public RDAP registration details for one domain. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one domain. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 300 globally per day.
```

### `embed_text`

- The description's first verb is "return": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Returns one text embedding vector. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one text. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `extract_contacts`

- The description's first verb is "find": a word for reading.
- Tag private-data: The name "extract_contacts" says "contact": it reads contacts. The description's first sentence says "find" and "contact": it reads contacts.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The description's first sentence says "find" and "website": it reads web pages, which anyone can write. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Claude Code: ask, because it is tagged outbound.

Description, as the server wrote it:

```untrusted-server-text
Finds public contact details on one website. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 100 globally per day.
```

### `find_one_job`

- The name "find_one_job" says "find": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Claude Code: ask, because it is tagged outbound.

Description, as the server wrote it:

```untrusted-server-text
Finds one public job posting from a company's jobs board. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 100 globally per day.
```

### `find_one_place`

- The name "find_one_place" says "find": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Returns one business listing in a city. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one location. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 100 globally per day.
```

### `find_tidytools_tool`

- The name "find_tidytools_tool" says "find": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Returns matching tools from the current TidyTools catalog, with advertised prices and counted paid-product links. Use when you know a web-data task but not which TidyTools tool fits. Not for fetching web content or checking live product availability beyond the catalog's publication dates.
```

### `http_status`

- The name "http_status" says "status": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The name "http_status" says "status" and "http": it reads web pages, which anyone can write. The description's first sentence says "url": it reads web pages, which anyone can write. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Claude Code: ask, because it is tagged outbound.

Description, as the server wrote it:

```untrusted-server-text
Checks one URL's HTTP status and redirects. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 100 globally per day.
```

### `ocr_image`

- The description's first verb is "read": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The description's first sentence says "read" and "url": it reads web pages, which anyone can write. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Claude Code: ask, because it is tagged outbound.

Description, as the server wrote it:

```untrusted-server-text
Reads text from one public image URL with AI. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `read_url`

- The name "read_url" says "read": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The name "read_url" says "read" and "url": it reads web pages, which anyone can write. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Claude Code: ask, because it is tagged outbound.

Description, as the server wrote it:

```untrusted-server-text
Returns a public page or PDF as Markdown, in chunks, with a paid upgrade link. Use when an agent needs one URL's readable text. Not for JavaScript-only pages or crawling whole sites; use the linked paid tool for those. Default chunk is 20,000 characters; start_index reads later chunks within the free 100,000-character window. Apify Actor links can be paid with x402 via Apify, no Apify account needed.
```

### `smart_fetch`

- The name "smart_fetch" says "fetch": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The description's first sentence says "fetch" and "url": it reads web pages, which anyone can write. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Claude Code: ask, because it is tagged outbound.

Description, as the server wrote it:

```untrusted-server-text
Fetches one public URL as readable content. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 100 globally per day.
```

### `summarize_article`

- The name "summarize_article" says "summarize": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Claude Code: ask, because it is tagged outbound.

Description, as the server wrote it:

```untrusted-server-text
Extracts and summarizes one article with AI. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `summarize_url`

- The name "summarize_url" says "summarize": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data. The name "summarize_url" says "summarize" and "url": it reads web pages, which anyone can write. The input takes a URL (input.url), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
- Claude Code: ask, because it is tagged outbound.

Description, as the server wrote it:

```untrusted-server-text
Summarizes one public page with AI. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one url. Not for batch work or unrestricted monitoring. Free: 1 per IP per UTC day; shared AI caller/ASN pool 20; 20 globally per day.
```

### `validate_email`

- The name "validate_email" says "validate": a word for reading.
- Tag untrusted-input: The server marks it openWorldHint: true: it reaches things outside the server's own data.

Description, as the server wrote it:

```untrusted-server-text
Checks one email address syntax and domain mail records. Returns a limited free result and paid upgrade links. Apify Actor links can be paid with x402 via Apify, no Apify account needed. Use for one email. Not for batch work or unrestricted monitoring. Free: 3 per IP per UTC day; shared AI caller/ASN pool 50; 300 globally per day.
```

## Claude Code permissions

For `.claude/settings.json`, assuming the server is installed as `tidytools-free`:

```json
{
  "permissions": {
    "allow": [
      "mcp__tidytools-free__find_tidytools_tool",
      "mcp__tidytools-free__domain_whois",
      "mcp__tidytools-free__domain_dns",
      "mcp__tidytools-free__validate_email",
      "mcp__tidytools-free__find_one_place",
      "mcp__tidytools-free__embed_text"
    ],
    "ask": [
      "mcp__tidytools-free__read_url",
      "mcp__tidytools-free__check_ai_crawler_access",
      "mcp__tidytools-free__link_preview",
      "mcp__tidytools-free__detect_techstack",
      "mcp__tidytools-free__seo_audit",
      "mcp__tidytools-free__extract_contacts",
      "mcp__tidytools-free__company_enrich",
      "mcp__tidytools-free__company_enrich_ai",
      "mcp__tidytools-free__extract_article",
      "mcp__tidytools-free__summarize_article",
      "mcp__tidytools-free__ocr_image",
      "mcp__tidytools-free__screenshot_url",
      "mcp__tidytools-free__pdf_url",
      "mcp__tidytools-free__smart_fetch",
      "mcp__tidytools-free__price_check",
      "mcp__tidytools-free__domain_authority",
      "mcp__tidytools-free__traffic_rank",
      "mcp__tidytools-free__referring_domains",
      "mcp__tidytools-free__domain_overview",
      "mcp__tidytools-free__jobs_detect",
      "mcp__tidytools-free__find_one_job",
      "mcp__tidytools-free__app_store_details",
      "mcp__tidytools-free__app_store_review",
      "mcp__tidytools-free__play_store_details",
      "mcp__tidytools-free__enrich_one_place",
      "mcp__tidytools-free__resize_image",
      "mcp__tidytools-free__convert_image",
      "mcp__tidytools-free__compress_image",
      "mcp__tidytools-free__upscale_image",
      "mcp__tidytools-free__ai_extract",
      "mcp__tidytools-free__classify_text",
      "mcp__tidytools-free__summarize_url",
      "mcp__tidytools-free__transcribe_audio",
      "mcp__tidytools-free__translate_text",
      "mcp__tidytools-free__describe_image",
      "mcp__tidytools-free__seo_browser_audit",
      "mcp__tidytools-free__http_status",
      "mcp__tidytools-free__convert_html"
    ],
    "deny": [
      "mcp__tidytools-free__remove_image_background"
    ]
  }
}
```

Capability tags behind the rules (a read tagged outbound is asked about):

- `mcp__tidytools-free__read_url`: untrusted-input, outbound
- `mcp__tidytools-free__check_ai_crawler_access`: untrusted-input, outbound
- `mcp__tidytools-free__link_preview`: untrusted-input, outbound
- `mcp__tidytools-free__detect_techstack`: untrusted-input, outbound
- `mcp__tidytools-free__domain_whois`: untrusted-input
- `mcp__tidytools-free__domain_dns`: untrusted-input
- `mcp__tidytools-free__validate_email`: untrusted-input
- `mcp__tidytools-free__seo_audit`: untrusted-input, outbound
- `mcp__tidytools-free__extract_contacts`: private-data, untrusted-input, outbound
- `mcp__tidytools-free__company_enrich`: untrusted-input, outbound
- `mcp__tidytools-free__company_enrich_ai`: untrusted-input, outbound
- `mcp__tidytools-free__extract_article`: untrusted-input, outbound
- `mcp__tidytools-free__summarize_article`: untrusted-input, outbound
- `mcp__tidytools-free__ocr_image`: untrusted-input, outbound
- `mcp__tidytools-free__screenshot_url`: untrusted-input, outbound
- `mcp__tidytools-free__pdf_url`: untrusted-input, outbound
- `mcp__tidytools-free__smart_fetch`: untrusted-input, outbound
- `mcp__tidytools-free__price_check`: untrusted-input, outbound
- `mcp__tidytools-free__domain_authority`: untrusted-input
- `mcp__tidytools-free__traffic_rank`: untrusted-input
- `mcp__tidytools-free__referring_domains`: untrusted-input
- `mcp__tidytools-free__domain_overview`: untrusted-input
- `mcp__tidytools-free__jobs_detect`: untrusted-input, outbound
- `mcp__tidytools-free__find_one_job`: untrusted-input, outbound
- `mcp__tidytools-free__app_store_details`: untrusted-input
- `mcp__tidytools-free__app_store_review`: untrusted-input
- `mcp__tidytools-free__play_store_details`: untrusted-input
- `mcp__tidytools-free__find_one_place`: untrusted-input
- `mcp__tidytools-free__enrich_one_place`: untrusted-input
- `mcp__tidytools-free__resize_image`: untrusted-input, outbound
- `mcp__tidytools-free__convert_image`: untrusted-input, outbound
- `mcp__tidytools-free__compress_image`: untrusted-input, outbound
- `mcp__tidytools-free__remove_image_background`: untrusted-input
- `mcp__tidytools-free__upscale_image`: untrusted-input, outbound
- `mcp__tidytools-free__ai_extract`: untrusted-input, outbound
- `mcp__tidytools-free__classify_text`: untrusted-input
- `mcp__tidytools-free__summarize_url`: untrusted-input, outbound
- `mcp__tidytools-free__transcribe_audio`: untrusted-input
- `mcp__tidytools-free__translate_text`: untrusted-input
- `mcp__tidytools-free__embed_text`: untrusted-input
- `mcp__tidytools-free__describe_image`: untrusted-input, outbound
- `mcp__tidytools-free__seo_browser_audit`: untrusted-input, outbound
- `mcp__tidytools-free__http_status`: untrusted-input, outbound
- `mcp__tidytools-free__convert_html`: untrusted-input

## Remote posture

What an anonymous client saw at the remote endpoint, last 2026-10-22T15:06:45.304Z, unchanged since 2026-10-22T15:06:45.304Z. No credentials were sent and no tool was called. Values are shown as the endpoint returned them. Method: https://anlyon.dev/methodology#remote-posture

| Fact | Observed |
| --- | --- |
| Reachable | `yes` |
| HTTP status of an anonymous initialize | `200` |
| tools/list served without credentials | `yes` |
| Tools that change things, listed without credentials | `28` |
| Protocol version | `2025-06-18` |
| WWW-Authenticate on 401 | `not observed` |
| resource_metadata in WWW-Authenticate | `none` |
| RFC 9728 protected resource metadata | `none` |
| Authorization servers | `none` |
| Legacy HTTP+SSE transport | `no` |
| Dynamic client registration | `not observed` |
| Client ID metadata documents | `not observed` |

- **high** Tools that change things, listed to anyone ([unauth-remote-writes](https://anlyon.dev/methodology#unauth-remote-writes))

```untrusted-server-text
The endpoint served tools/list without credentials, and the list has 28 tools that change things (1 destructive, 1 irreversible, 26 write). Whether a call also works without credentials was not tested: tools are never called.

https://tools.yukai.uk/mcp: tools/list returned 45 tools to an anonymous client, including remove_image_background (destructive), screenshot_url (irreversible), link_preview (write), seo_audit (write), company_enrich_ai (write) and 23 more
```
