# `app.netlify.clify-dev/clify` 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/app.netlify.clify-dev/clify
- JSON: https://anlyon.dev/api/v1/servers/app.netlify.clify-dev/clify
- Version: 0.3.0 (active)
- Publisher: app.netlify.clify-dev (domain proven to the MCP Registry)
- Runs: remote (streamable-http)
- Sign-in to list tools: none
- Repository: https://github.com/ToukoUrsin/clify
- Metadata from the official MCP Registry, synced 2026-10-21T17:44:37.543Z

Title and description, as the publisher wrote them:

```untrusted-server-text
Verified websites as JSON commands for AI agents over plain curl or MCP.
```

Scanned 2026-10-21T18:31:45.728Z over streamable-http.

**7 tools: 1 can delete or cancel things, 2 change things and 4 only read.**

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

## Findings

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

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

annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The input takes a statement or command to run (input.command), which can change anything it can reach.
```


## Deletes or cancels (1)

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

### `clify_run`

- The name "clify_run" says "run": a word for a change.
- The input takes a statement or command to run (input.command), which can change anything it can reach.
- The server marks it destructive (destructiveHint: true).

Description, as the server wrote it:

```untrusted-server-text
Call one command of a clify site and get JSON back. args holds the command's params (see clify_help). Lists return count, total and nextPage (args for the next page). Write commands return a dry-run preview unless confirm:true.
```

## Changes things (2)

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

### `clify_help`

- The input takes a statement or command to run (input.command), which can change anything it can reach.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
A site's commands with params ("name*" = required, ":a|b" = allowed values, "=x" = default). Pass command for full param docs, default fields and a ready clify_run call.
```

### `wikipedia__summary`

- 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.

Description, as the server wrote it:

```untrusted-server-text
en.wikipedia.org: Short summary of an article (title, description, extract, url) Returns title, description, extract, content_urls.desktop.page by default. (Same as clify_run site=wikipedia command=summary.)
```

## Only reads (4)

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

### `clify_sites`

- The description's first verb is "search": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Search the catalogue of 135 real websites clify can call (package registries, government data, science, news, jobs, weather, culture…). Pass a keyword query to get the best sites with their matching commands. Without a query it pages through the catalogue, one line per site ("name (category, commands): about"); filter with category. Start here.
```

### `crates__get-crate`

- The name "crates__get-crate" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
crates.io: Get a crate's details: description, links, download totals, keywords, categories and default version Returns name, description, default_version, downloads, recent_downloads, num_versions, keywords, categories, repository, documentation, homepage, updated_at by default. (Same as clify_run site=crates command=get-crate.)
```

### `hnsearch__search`

- The name "hnsearch__search" says "search": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
hn.algolia.com: Search stories/comments by relevance Returns title, points, num_comments, author, created_at, url, objectID by default. (Same as clify_run site=hnsearch command=search.)
```

### `pypi__get-package`

- The name "pypi__get-package" says "get": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
pypi.org: Get a package's PyPI page for its latest version: name and version, summary, pip install command, project links and metadata sidebar, and README text. Returns name_version, summary, pip_command, sidebar, description by default. (Same as clify_run site=pypi command=get-package.)
```

## Claude Code permissions

For `.claude/settings.json`, assuming the server is installed as `clify`:

```json
{
  "permissions": {
    "allow": [
      "mcp__clify__clify_sites",
      "mcp__clify__crates__get-crate",
      "mcp__clify__pypi__get-package",
      "mcp__clify__hnsearch__search"
    ],
    "ask": [
      "mcp__clify__clify_help",
      "mcp__clify__wikipedia__summary"
    ],
    "deny": [
      "mcp__clify__clify_run"
    ]
  }
}
```
