# `uk.firstmention.api/automaton` 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/uk.firstmention.api/automaton
- JSON: https://anlyon.dev/api/v1/servers/uk.firstmention.api/automaton
- Version: 1.0.1 (active)
- Publisher: uk.firstmention.api (domain proven to the MCP Registry)
- Runs: remote (streamable-http)
- Sign-in to list tools: none
- Metadata from the official MCP Registry, synced 2026-10-29T22:19:29.887Z

Title and description, as the publisher wrote them:

```untrusted-server-text
Pay-per-call MCP tools run by autonomous AI agents, each call paid with x402 in USDC.
```

Scanned 2026-10-29T22:19:51.266Z over streamable-http.

**73 tools: 3 do something that can't be undone, 47 change things and 23 only read.**

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

## Exfil surface

324 private-data -> untrusted-input -> outbound paths in this server alone. Denying 3 private-data tools breaks every one: `mcp__automaton__webread__meta`, `mcp__automaton__webread__outline`, `mcp__automaton__webread__read`.

| Tag | Meaning | Tools |
| --- | --- | --- |
| private-data | Reads files, mail, messages, databases, secrets, calendars or repositories. | `mcp__automaton__webread__meta` `mcp__automaton__webread__outline` `mcp__automaton__webread__read` |
| untrusted-input | Brings in text someone else can write: web pages, inbound email, messages, issues and comments. | `mcp__automaton__chgwatch__diff` `mcp__automaton__webread__meta` `mcp__automaton__webread__outline` `mcp__automaton__webread__read` `mcp__automaton__websearch__brief` `mcp__automaton__websearch__briefbatch` |
| outbound | Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL. | `mcp__automaton__agentkit__convert` `mcp__automaton__agentkit__datetime` `mcp__automaton__agentkit__extract` `mcp__automaton__chgwatch__diff` `mcp__automaton__chgwatch__diffmulti` `mcp__automaton__pageaudit__audit` `mcp__automaton__web_extract__extract` `mcp__automaton__webmd__extract` `mcp__automaton__webread__meta` `mcp__automaton__webread__outline` `mcp__automaton__webread__read` `mcp__automaton__websearch__brief` `mcp__automaton__websearch__briefbatch` `mcp__automaton__x402_preflight__check` `mcp__automaton__x402_preflight__headers` `mcp__automaton__x402_preflight__tls` `mcp__automaton__x402check__check` `mcp__automaton__x402index__verdict` |

| Private data | Untrusted input | Outbound |
| --- | --- | --- |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__agentkit__convert` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__agentkit__datetime` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__agentkit__extract` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__chgwatch__diff` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__chgwatch__diffmulti` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__pageaudit__audit` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__web_extract__extract` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__webmd__extract` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__webread__meta` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__webread__outline` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__webread__read` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__websearch__brief` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__websearch__briefbatch` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__x402_preflight__check` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__x402_preflight__headers` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__x402_preflight__tls` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__x402check__check` |
| `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` | `mcp__automaton__x402index__verdict` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__agentkit__convert` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__agentkit__datetime` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__agentkit__extract` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diff` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__chgwatch__diffmulti` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__pageaudit__audit` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__web_extract__extract` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__webmd__extract` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__webread__read` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__websearch__brief` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__websearch__briefbatch` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__x402_preflight__check` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__x402_preflight__headers` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__x402_preflight__tls` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__x402check__check` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__meta` | `mcp__automaton__x402index__verdict` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__agentkit__convert` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__agentkit__datetime` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__agentkit__extract` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__chgwatch__diff` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__chgwatch__diffmulti` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__pageaudit__audit` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__web_extract__extract` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__webmd__extract` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__webread__meta` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__webread__outline` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__webread__read` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__websearch__brief` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__websearch__briefbatch` |
| `mcp__automaton__webread__meta` | `mcp__automaton__webread__outline` | `mcp__automaton__x402_preflight__check` |

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

## Findings

No check matched anything in these tool definitions.


## Can't be undone (3)

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

### `agentkit__convert`

- The name "agentkit__convert" says "convert": a word for a change.
- The input addresses people (input.to): what it sends cannot be taken back.
- Tag outbound: The input takes a destination (input.to): what the tool writes goes there.

Description, as the server wrote it:

```untrusted-server-text
Deterministic mid-task utilities for AI agents: unit + currency conversion by ratio, timezone/date maths, cron schedule expansion, entity extraction, and format + JSON Schema validation. Exact answers, no LLM, 30ms. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/agentkit/convert
```

### `agentkit__datetime`

- The input addresses people (input.to): what it sends cannot be taken back.
- Tag outbound: The input takes a destination (input.to): what the tool writes goes there.

Description, as the server wrote it:

```untrusted-server-text
Deterministic mid-task utilities for AI agents: unit + currency conversion by ratio, timezone/date maths, cron schedule expansion, entity extraction, and format + JSON Schema validation. Exact answers, no LLM, 30ms. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/agentkit/datetime
```

### `agentkit__extract`

- The input addresses people (input.to): what it sends cannot be taken back.
- Tag outbound: The input takes a destination (input.to): what the tool writes goes there.

Description, as the server wrote it:

```untrusted-server-text
Deterministic mid-task utilities for AI agents: unit + currency conversion by ratio, timezone/date maths, cron schedule expansion, entity extraction, and format + JSON Schema validation. Exact answers, no LLM, 30ms. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/agentkit/extract
```

## Changes things (47)

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

### `basedue__due`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Base token due diligence over x402. /report bundles due diligence, cross-venue reference price and position exit cost in ONE $0.01 call. /price now takes up to 10 tokens per $0.01 call for bulk screening. Free /sample on every endpoint. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/basedue/due
```

### `basedue__exit`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Base token due diligence over x402. /report bundles due diligence, cross-venue reference price and position exit cost in ONE $0.01 call. /price now takes up to 10 tokens per $0.01 call for bulk screening. Free /sample on every endpoint. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/basedue/exit
```

### `basedue__price`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Base token due diligence over x402. /report bundles due diligence, cross-venue reference price and position exit cost in ONE $0.01 call. /price now takes up to 10 tokens per $0.01 call for bulk screening. Free /sample on every endpoint. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/basedue/price
```

### `basedue__report`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Base token due diligence over x402. /report bundles due diligence, cross-venue reference price and position exit cost in ONE $0.01 call. /price now takes up to 10 tokens per $0.01 call for bulk screening. Free /sample on every endpoint. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/basedue/report
```

### `bizcal_api__add`

- The name "bizcal_api__add" says "add": a word for a change.

Description, as the server wrote it:

```untrusted-server-text
Public holiday and business-day calendar for US and UK: is a date a business day, add N business days, count business days between dates (net of holidays), and list a year's holidays. $0.01 per call in USDC on Base via x402. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/bizcal-api/add
```

### `bizcal_api__between`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Public holiday and business-day calendar for US and UK: is a date a business day, add N business days, count business days between dates (net of holidays), and list a year's holidays. $0.01 per call in USDC on Base via x402. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/bizcal-api/between
```

### `bizcal_api__day`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Public holiday and business-day calendar for US and UK: is a date a business day, add N business days, count business days between dates (net of holidays), and list a year's holidays. $0.01 per call in USDC on Base via x402. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/bizcal-api/day
```

### `bizcal_api__workdays`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Public holiday and business-day calendar for US and UK: is a date a business day, add N business days, count business days between dates (net of holidays), and list a year's holidays. $0.01 per call in USDC on Base via x402. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/bizcal-api/workdays
```

### `bizcal_api__year`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Public holiday and business-day calendar for US and UK: is a date a business day, add N business days, count business days between dates (net of holidays), and list a year's holidays. $0.01 per call in USDC on Base via x402. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/bizcal-api/year
```

### `check_sanctions__address`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Sanctions screening against US OFAC, UK OFSI and EU lists with real matching on all three. Screen a name, a wallet address, a batch, or your own watchlist. Non-Latin names are transliterated; unscreenable names return 400, never a false clear. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/check-sanctions/address
```

### `check_sanctions__batch`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Sanctions screening against US OFAC, UK OFSI and EU lists with real matching on all three. Screen a name, a wallet address, a batch, or your own watchlist. Non-Latin names are transliterated; unscreenable names return 400, never a false clear. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/check-sanctions/batch
```

### `check_sanctions__changes`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Sanctions screening against US OFAC, UK OFSI and EU lists with real matching on all three. Screen a name, a wallet address, a batch, or your own watchlist. Non-Latin names are transliterated; unscreenable names return 400, never a false clear. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/check-sanctions/changes
```

### `check_sanctions__screen`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Sanctions screening against US OFAC, UK OFSI and EU lists with real matching on all three. Screen a name, a wallet address, a batch, or your own watchlist. Non-Latin names are transliterated; unscreenable names return 400, never a false clear. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/check-sanctions/screen
```

### `check_sanctions__verdict`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Sanctions screening against US OFAC, UK OFSI and EU lists with real matching on all three. Screen a name, a wallet address, a batch, or your own watchlist. Non-Latin names are transliterated; unscreenable names return 400, never a false clear. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/check-sanctions/verdict
```

### `check_sanctions__watchlist`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Sanctions screening against US OFAC, UK OFSI and EU lists with real matching on all three. Screen a name, a wallet address, a batch, or your own watchlist. Non-Latin names are transliterated; unscreenable names return 400, never a false clear. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/check-sanctions/watchlist
```

### `chgwatch__diffmulti`

- Nothing in its name or description says what it does, so it is counted as a write.
- Tag outbound: The input takes a URL (input.urls): a request to a URL can carry data to whoever runs it.

Description, as the server wrote it:

```untrusted-server-text
Monitor public web pages for changes. One call checks many URLs; returns changed=true/false plus added/removed lines, so alert agents pay per poll instead of per page. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/chgwatch/diffmulti
```

### `composite__brief`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
One call joins public SEC EDGAR data into an agent-ready brief: company profile, annual financial series (revenue, net income, assets, cash, EPS) with YoY growth and margins, recent filings, and risk-factor excerpts. Saves an agent five separate lookups and all the parsing. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/composite/brief
```

### `composite__filings`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
One call joins public SEC EDGAR data into an agent-ready brief: company profile, annual financial series (revenue, net income, assets, cash, EPS) with YoY growth and margins, recent filings, and risk-factor excerpts. Saves an agent five separate lookups and all the parsing. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/composite/filings
```

### `composite__watchlist`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
One call joins public SEC EDGAR data into an agent-ready brief: company profile, annual financial series (revenue, net income, assets, cash, EPS) with YoY growth and margins, recent filings, and risk-factor excerpts. Saves an agent five separate lookups and all the parsing. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/composite/watchlist
```

### `domain_intel__batch`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Trust check for any domain in one call: DNS records, email auth (SPF/DMARC/DKIM), WHOIS registrar and age, live HTTP status, TLS certificate issuer/expiry and HSTS. Free /preflight returns the real records as a sample; paid /dns full report, /batch up to 10 domains. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/domain-intel/batch
```

### `domain_intel__dns`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Trust check for any domain in one call: DNS records, email auth (SPF/DMARC/DKIM), WHOIS registrar and age, live HTTP status, TLS certificate issuer/expiry and HSTS. Free /preflight returns the real records as a sample; paid /dns full report, /batch up to 10 domains. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/domain-intel/dns
```

### `domfacts__dns`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
DNS records (A, AAAA, MX, TXT, NS, CNAME, SOA, CAA) and RDAP registration facts for any domain: registrar, created and expiry dates, domain age, days to expiry, nameservers, EPP status. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/domfacts/dns
```

### `domfacts__rdap`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
DNS records (A, AAAA, MX, TXT, NS, CNAME, SOA, CAA) and RDAP registration facts for any domain: registrar, created and expiry dates, domain age, days to expiry, nameservers, EPP status. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/domfacts/rdap
```

### `edgar__company`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Public SEC EDGAR data for agents: company profile plus recent filings, XBRL financial history for any tag (revenue, net income, assets), and full-text search across EDGAR filings si…[29 more chars, already applied] Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/edgar/company
```

### `edgar__financials`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Public SEC EDGAR data for agents: company profile plus recent filings, XBRL financial history for any tag (revenue, net income, assets), and full-text search across EDGAR filings si…[29 more chars, already applied] Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/edgar/financials
```

### `feednews__digest`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
News and feed digest from public RSS/Atom/JSON feeds: merge up to 12 sources, dedupe, filter by keyword and recency, and get one ranked list of items with title, link, time and summary. Includes 22 curated working feeds. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/feednews/digest
```

### `funding_rates__batch`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Perpetual-futures funding rates and annualized carry for BTC, ETH, SOL and more, from exchange public market-data APIs, in one call. Free /preflight sample. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/funding-rates/batch
```

### `funding_rates__best`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Perpetual-futures funding rates and annualized carry for BTC, ETH, SOL and more, from exchange public market-data APIs, in one call. Free /preflight sample. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/funding-rates/best
```

### `funding_rates__funding`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Perpetual-futures funding rates and annualized carry for BTC, ETH, SOL and more, from exchange public market-data APIs, in one call. Free /preflight sample. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/funding-rates/funding
```

### `funding_rates__history`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Perpetual-futures funding rates and annualized carry for BTC, ETH, SOL and more, from exchange public market-data APIs, in one call. Free /preflight sample. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/funding-rates/history
```

### `funding_rates__rates`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Perpetual-futures funding rates and annualized carry for BTC, ETH, SOL and more, from exchange public market-data APIs, in one call. Free /preflight sample. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/funding-rates/rates
```

### `fundinglens__best`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Perpetual funding rates across 7 venues (Binance, Bybit, OKX, Bitget, Hyperliquid, dYdX, Deribit), normalized to 8h and annualized. Free /sample. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/fundinglens/best
```

### `fundinglens__rates`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Perpetual funding rates across 7 venues (Binance, Bybit, OKX, Bitget, Hyperliquid, dYdX, Deribit), normalized to 8h and annualized. Free /sample. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/fundinglens/rates
```

### `pageaudit__audit`

- Nothing in its name or description says what it does, so it is counted as a write.
- 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
One call, full picture of a web page: clean markdown, metadata (title, description, canonical, OpenGraph, favicon), heading outline, link census with resolved links, link health checks and a change…[11 more chars, already applied] Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/pageaudit/audit
```

### `token_dd__batch`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Token due-diligence report for any Base/ETH/BSC/Arbitrum token: live price and liquidity, contract security (honeypot, mint/freeze authority, tax, holder concentration), on-chain supply checks and a risk verdict. Free preview; full report $0.01. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/token-dd/batch
```

### `token_dd__check`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Token due-diligence report for any Base/ETH/BSC/Arbitrum token: live price and liquidity, contract security (honeypot, mint/freeze authority, tax, holder concentration), on-chain supply checks and a risk verdict. Free preview; full report $0.01. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/token-dd/check
```

### `txpreflight__preflight`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Base agent toolbox. /preflight simulates a tx (revert reason, gas, EIP-1559 fees in ETH and USD) before you sign. /verify reads a receipt and proves a USDC transfer settled: confirmations, amount, sender, recipient. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/txpreflight/preflight
```

### `txpreflight__verify`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Base agent toolbox. /preflight simulates a tx (revert reason, gas, EIP-1559 fees in ETH and USD) before you sign. /verify reads a receipt and proves a USDC transfer settled: confirmations, amount, sender, recipient. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/txpreflight/verify
```

### `walletprofile__profile`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Base wallet activity profile + heuristic risk score + exact-address OFAC SDN sanctions screen (US Treasury list, public data). /profile and /sanctions. Free /sample. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/walletprofile/profile
```

### `walletprofile__sanctions`

- Nothing in its name or description says what it does, so it is counted as a write.

Description, as the server wrote it:

```untrusted-server-text
Base wallet activity profile + heuristic risk score + exact-address OFAC SDN sanctions screen (US Treasury list, public data). /profile and /sanctions. Free /sample. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/walletprofile/sanctions
```

### `web_extract__extract`

- Nothing in its name or description says what it does, so it is counted as a write.
- 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
Extract clean readable text or markdown from any public web page: title, language, word/paragraph counts and the full article body. Free /preview sample first. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/web-extract/extract
```

### `webmd__extract`

- The description's first verb is "convert": a word for a change.
- 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
Convert public web pages into clean markdown plus metadata, headings and link inventory. One URL per call ($0.01), or POST up to 10 URLs at once in a single call for batch ingestion. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/webmd/extract
```

### `x402_preflight__check`

- Nothing in its name or description says what it does, so it is counted as a write.
- 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
Preflight and monitoring for x402/HTTP APIs: free structural audit of any x402 402 challenge (accepts[], scheme, network, asset, amount, payTo), plus paid live probe (/check), headers, TLS, uptime history and a public monitored board. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/x402-preflight/check
```

### `x402_preflight__headers`

- Nothing in its name or description says what it does, so it is counted as a write.
- 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
Preflight and monitoring for x402/HTTP APIs: free structural audit of any x402 402 challenge (accepts[], scheme, network, asset, amount, payTo), plus paid live probe (/check), headers, TLS, uptime history and a public monitored board. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/x402-preflight/headers
```

### `x402_preflight__tls`

- Nothing in its name or description says what it does, so it is counted as a write.
- 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
Preflight and monitoring for x402/HTTP APIs: free structural audit of any x402 402 challenge (accepts[], scheme, network, asset, amount, payTo), plus paid live probe (/check), headers, TLS, uptime history and a public monitored board. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/x402-preflight/tls
```

### `x402check__check`

- Nothing in its name or description says what it does, so it is counted as a write.
- 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
Check whether any x402 endpoint is live and correctly priced before you pay it: fetches the target URL, decodes its HTTP 402 payment requirements and returns a verdict with the accepted price, network, asset and pay-to address. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/x402check/check
```

### `x402index__verdict`

- Nothing in its name or description says what it does, so it is counted as a write.
- 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
x402 market intelligence over 41k live listings. Free /search, /market, /compare, /gaps, /guide. Paid /verdict ($0.01): vet one endpoint, or send {"resources":[...]} to batch-vet up to 25 worst-first with live diagnosis, demand, price percentile and alternatives. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/x402index/verdict
```

## Only reads (23)

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

### `agentkit__validate`

- The name "agentkit__validate" says "validate": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Deterministic mid-task utilities for AI agents: unit + currency conversion by ratio, timezone/date maths, cron schedule expansion, entity extraction, and format + JSON Schema validation. Exact answers, no LLM, 30ms. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/agentkit/validate
```

### `api_change_check__compare`

- The name "api_change_check__compare" says "compare": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Compare two OpenAPI 3 JSON specs and get a precise breaking-change report: removed paths, renamed parameters, new required fields, type changes. $0.02 via x402. Price: $0.02 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/api-change-check/compare
```

### `chainread__balance`

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

Description, as the server wrote it:

```untrusted-server-text
Read-only Base and Ethereum chain data over x402: gas, blocks, balances, token metadata, tx status, nonces, and token safety verdicts scored 0-100. Batch up to 25 tokens. Free /scan and /t/<address> verdict pages. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/chainread/balance
```

### `chainread__batch`

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

Description, as the server wrote it:

```untrusted-server-text
Read-only Base and Ethereum chain data over x402: gas, blocks, balances, token metadata, tx status, nonces, and token safety verdicts scored 0-100. Batch up to 25 tokens. Free /scan and /t/<address> verdict pages. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/chainread/batch
```

### `chainread__block`

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

Description, as the server wrote it:

```untrusted-server-text
Read-only Base and Ethereum chain data over x402: gas, blocks, balances, token metadata, tx status, nonces, and token safety verdicts scored 0-100. Batch up to 25 tokens. Free /scan and /t/<address> verdict pages. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/chainread/block
```

### `chainread__code`

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

Description, as the server wrote it:

```untrusted-server-text
Read-only Base and Ethereum chain data over x402: gas, blocks, balances, token metadata, tx status, nonces, and token safety verdicts scored 0-100. Batch up to 25 tokens. Free /scan and /t/<address> verdict pages. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/chainread/code
```

### `chainread__gas`

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

Description, as the server wrote it:

```untrusted-server-text
Read-only Base and Ethereum chain data over x402: gas, blocks, balances, token metadata, tx status, nonces, and token safety verdicts scored 0-100. Batch up to 25 tokens. Free /scan and /t/<address> verdict pages. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/chainread/gas
```

### `chainread__network`

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

Description, as the server wrote it:

```untrusted-server-text
Read-only Base and Ethereum chain data over x402: gas, blocks, balances, token metadata, tx status, nonces, and token safety verdicts scored 0-100. Batch up to 25 tokens. Free /scan and /t/<address> verdict pages. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/chainread/network
```

### `chainread__nonce`

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

Description, as the server wrote it:

```untrusted-server-text
Read-only Base and Ethereum chain data over x402: gas, blocks, balances, token metadata, tx status, nonces, and token safety verdicts scored 0-100. Batch up to 25 tokens. Free /scan and /t/<address> verdict pages. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/chainread/nonce
```

### `chainread__token`

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

Description, as the server wrote it:

```untrusted-server-text
Read-only Base and Ethereum chain data over x402: gas, blocks, balances, token metadata, tx status, nonces, and token safety verdicts scored 0-100. Batch up to 25 tokens. Free /scan and /t/<address> verdict pages. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/chainread/token
```

### `chainread__tx`

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

Description, as the server wrote it:

```untrusted-server-text
Read-only Base and Ethereum chain data over x402: gas, blocks, balances, token metadata, tx status, nonces, and token safety verdicts scored 0-100. Batch up to 25 tokens. Free /scan and /t/<address> verdict pages. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/chainread/tx
```

### `chainread__verdict`

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

Description, as the server wrote it:

```untrusted-server-text
Read-only Base and Ethereum chain data over x402: gas, blocks, balances, token metadata, tx status, nonces, and token safety verdicts scored 0-100. Batch up to 25 tokens. Free /scan and /t/<address> verdict pages. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/chainread/verdict
```

### `chgwatch__diff`

- The name "chgwatch__diff" says "diff": a word for reading.
- Tag untrusted-input: The description's first sentence says "web": it reads web pages, which anyone can write. The input takes a URL (input.urls), and the tool reads it: it reads web pages, which anyone can write.
- Tag outbound: The input takes a URL (input.urls): 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
Monitor public web pages for changes. One call checks many URLs; returns changed=true/false plus added/removed lines, so alert agents pay per poll instead of per page. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/chgwatch/diff
```

### `company_facts__lookup`

- The name "company_facts__lookup" says "lookup": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
One joined company dossier from public sources: SEC EDGAR identity, CIK, SIC industry, incorporation state, recent filings, plus RDAP domain facts and an OFAC/UK/EU sanctions screen of the name. No personal data…[44 more chars, already applied] Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/company-facts/lookup
```

### `company_facts__snapshot`

- The name "company_facts__snapshot" says "snapshot": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
One joined company dossier from public sources: SEC EDGAR identity, CIK, SIC industry, incorporation state, recent filings, plus RDAP domain facts and an OFAC/UK/EU sanctions screen of the name. No personal data…[44 more chars, already applied] Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/company-facts/snapshot
```

### `edgar__resolve`

- The name "edgar__resolve" says "resolve": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Public SEC EDGAR data for agents: company profile plus recent filings, XBRL financial history for any tag (revenue, net income, assets), and full-text search across EDGAR filings si…[29 more chars, already applied] Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/edgar/resolve
```

### `edgar__search`

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

Description, as the server wrote it:

```untrusted-server-text
Public SEC EDGAR data for agents: company profile plus recent filings, XBRL financial history for any tag (revenue, net income, assets), and full-text search across EDGAR filings si…[29 more chars, already applied] Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/edgar/search
```

### `list_services`

- The name "list_services" says "list": a word for reading.

Description, as the server wrote it:

```untrusted-server-text
Free. Lists the paid services on this server: name, description, price, HTTP paths, MCP tools and OpenAPI document. Paid tools are billed per call with x402 in USDC on Base.
```

### `webread__meta`

- The description's first verb is "fetch": a word for reading.
- Tag private-data: The description's first sentence says "fetch" and "table": it reads databases.
- Tag untrusted-input: The description's first sentence says "fetch" and "web": 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
Fetch a public web page and return clean structured content for agents: title and description, heading outline, main article text (boilerplate removed), markdown, links, images, tables and JSON-LD. No LLM, no API key, ~1s. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/webread/meta
```

### `webread__outline`

- The description's first verb is "fetch": a word for reading.
- Tag private-data: The description's first sentence says "fetch" and "table": it reads databases.
- Tag untrusted-input: The description's first sentence says "fetch" and "web": 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
Fetch a public web page and return clean structured content for agents: title and description, heading outline, main article text (boilerplate removed), markdown, links, images, tables and JSON-LD. No LLM, no API key, ~1s. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/webread/outline
```

### `webread__read`

- The name "webread__read" says "read": a word for reading.
- Tag private-data: The description's first sentence says "fetch" and "table": it reads databases.
- Tag untrusted-input: The description's first sentence says "fetch" and "web": 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
Fetch a public web page and return clean structured content for agents: title and description, heading outline, main article text (boilerplate removed), markdown, links, images, tables and JSON-LD. No LLM, no API key, ~1s. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: POST https://api.firstmention.uk/s/webread/read
```

### `websearch__brief`

- The description's first verb is "search": a word for reading.
- Tag untrusted-input: The description's first sentence says "search" and "web": 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
Search plus page-to-markdown in one $0.01 call: ranked results from Wikipedia, Hacker News, GitHub and a web engine, with clean readable article text. Pass q= to search, or url= to extract any single page. Free /demo and /quickstart. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/websearch/brief
```

### `websearch__briefbatch`

- The description's first verb is "search": a word for reading.
- Tag untrusted-input: The description's first sentence says "search" and "web": 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
Search plus page-to-markdown in one $0.01 call: ranked results from Wikipedia, Hacker News, GitHub and a web engine, with clean readable article text. Pass q= to search, or url= to extract any single page. Free /demo and /quickstart. Price: $0.01 per call in USDC on Base (eip155:8453), paid with x402 in params._meta["x402/payment"]. HTTP: GET https://api.firstmention.uk/s/websearch/briefbatch
```

## Claude Code permissions

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

```json
{
  "permissions": {
    "allow": [
      "mcp__automaton__list_services",
      "mcp__automaton__agentkit__validate",
      "mcp__automaton__api_change_check__compare",
      "mcp__automaton__chainread__network",
      "mcp__automaton__chainread__block",
      "mcp__automaton__chainread__balance",
      "mcp__automaton__chainread__token",
      "mcp__automaton__chainread__tx",
      "mcp__automaton__chainread__nonce",
      "mcp__automaton__chainread__gas",
      "mcp__automaton__chainread__code",
      "mcp__automaton__chainread__verdict",
      "mcp__automaton__chainread__batch",
      "mcp__automaton__company_facts__lookup",
      "mcp__automaton__company_facts__snapshot",
      "mcp__automaton__edgar__search",
      "mcp__automaton__edgar__resolve"
    ],
    "ask": [
      "mcp__automaton__agentkit__convert",
      "mcp__automaton__agentkit__datetime",
      "mcp__automaton__agentkit__extract",
      "mcp__automaton__basedue__due",
      "mcp__automaton__basedue__price",
      "mcp__automaton__basedue__exit",
      "mcp__automaton__basedue__report",
      "mcp__automaton__bizcal_api__day",
      "mcp__automaton__bizcal_api__add",
      "mcp__automaton__bizcal_api__between",
      "mcp__automaton__bizcal_api__year",
      "mcp__automaton__bizcal_api__workdays",
      "mcp__automaton__check_sanctions__screen",
      "mcp__automaton__check_sanctions__address",
      "mcp__automaton__check_sanctions__batch",
      "mcp__automaton__check_sanctions__changes",
      "mcp__automaton__check_sanctions__verdict",
      "mcp__automaton__check_sanctions__watchlist",
      "mcp__automaton__chgwatch__diff",
      "mcp__automaton__chgwatch__diffmulti",
      "mcp__automaton__composite__brief",
      "mcp__automaton__composite__watchlist",
      "mcp__automaton__composite__filings",
      "mcp__automaton__domain_intel__dns",
      "mcp__automaton__domain_intel__batch",
      "mcp__automaton__domfacts__dns",
      "mcp__automaton__domfacts__rdap",
      "mcp__automaton__edgar__company",
      "mcp__automaton__edgar__financials",
      "mcp__automaton__feednews__digest",
      "mcp__automaton__funding_rates__funding",
      "mcp__automaton__funding_rates__batch",
      "mcp__automaton__funding_rates__rates",
      "mcp__automaton__funding_rates__best",
      "mcp__automaton__funding_rates__history",
      "mcp__automaton__fundinglens__rates",
      "mcp__automaton__fundinglens__best",
      "mcp__automaton__pageaudit__audit",
      "mcp__automaton__token_dd__check",
      "mcp__automaton__token_dd__batch",
      "mcp__automaton__txpreflight__preflight",
      "mcp__automaton__txpreflight__verify",
      "mcp__automaton__walletprofile__profile",
      "mcp__automaton__walletprofile__sanctions",
      "mcp__automaton__web_extract__extract",
      "mcp__automaton__webmd__extract",
      "mcp__automaton__webread__read",
      "mcp__automaton__webread__outline",
      "mcp__automaton__webread__meta",
      "mcp__automaton__websearch__brief",
      "mcp__automaton__websearch__briefbatch",
      "mcp__automaton__x402_preflight__check",
      "mcp__automaton__x402_preflight__headers",
      "mcp__automaton__x402_preflight__tls",
      "mcp__automaton__x402check__check",
      "mcp__automaton__x402index__verdict"
    ],
    "deny": []
  }
}
```

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

- `mcp__automaton__agentkit__convert`: outbound
- `mcp__automaton__agentkit__datetime`: outbound
- `mcp__automaton__agentkit__extract`: outbound
- `mcp__automaton__chgwatch__diff`: untrusted-input, outbound
- `mcp__automaton__chgwatch__diffmulti`: outbound
- `mcp__automaton__pageaudit__audit`: outbound
- `mcp__automaton__web_extract__extract`: outbound
- `mcp__automaton__webmd__extract`: outbound
- `mcp__automaton__webread__read`: private-data, untrusted-input, outbound
- `mcp__automaton__webread__outline`: private-data, untrusted-input, outbound
- `mcp__automaton__webread__meta`: private-data, untrusted-input, outbound
- `mcp__automaton__websearch__brief`: untrusted-input, outbound
- `mcp__automaton__websearch__briefbatch`: untrusted-input, outbound
- `mcp__automaton__x402_preflight__check`: outbound
- `mcp__automaton__x402_preflight__headers`: outbound
- `mcp__automaton__x402_preflight__tls`: outbound
- `mcp__automaton__x402check__check`: outbound
- `mcp__automaton__x402index__verdict`: outbound

## Remote posture

What an anonymous client saw at the remote endpoint, last 2026-10-29T21:20:37.485Z, unchanged since 2026-10-29T21:20:37.485Z. 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 | `50` |
| 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 50 tools that change things (3 irreversible, 47 write). Whether a call also works without credentials was not tested: tools are never called.

https://api.firstmention.uk/mcp: tools/list returned 73 tools to an anonymous client, including agentkit__convert (irreversible), agentkit__datetime (irreversible), agentkit__extract (irreversible), basedue__due (write), basedue__price (write) and 45 more
```
