# `xyz.keespecs/keespecs` 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/xyz.keespecs/keespecs
- JSON: https://anlyon.dev/api/v1/servers/xyz.keespecs/keespecs
- Version: 1.0.0 (active)
- Publisher: xyz.keespecs (domain proven to the MCP Registry)
- Runs: remote (streamable-http)
- Sign-in to list tools: none
- Metadata from the official MCP Registry, synced 2026-11-02T23:18:24.887Z

Title and description, as the publisher wrote them:

```untrusted-server-text
KeeSpecs
Keeta network data for agents: free reads, plus x402 quotes for paid reports. No key needed.
```

Scanned 2026-11-02T23:18:28.181Z over streamable-http.

**39 tools: 3 do something that can't be undone, 15 change things and 21 only read.**

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

## Exfil surface

234 private-data -> untrusted-input -> outbound paths in this server alone. Denying 2 private-data tools breaks every one: `mcp__keespecs__get_directory`, `mcp__keespecs__get_ecosystem`.

| Tag | Meaning | Tools |
| --- | --- | --- |
| private-data | Reads files, mail, messages, databases, secrets, calendars or repositories. | `mcp__keespecs__get_directory` `mcp__keespecs__get_ecosystem` |
| untrusted-input | Brings in text someone else can write: web pages, inbound email, messages, issues and comments. | `mcp__keespecs__get_account` `mcp__keespecs__get_activity` `mcp__keespecs__get_balance` `mcp__keespecs__get_block` `mcp__keespecs__get_directory` `mcp__keespecs__get_ecosystem` `mcp__keespecs__get_outbox` `mcp__keespecs__get_permissions` `mcp__keespecs__get_portfolio` `mcp__keespecs__get_price` `mcp__keespecs__get_providers` `mcp__keespecs__get_representatives` `mcp__keespecs__get_storage_quotas` `mcp__keespecs__get_supply` `mcp__keespecs__get_token` `mcp__keespecs__get_x402_health` `mcp__keespecs__list_skills` `mcp__keespecs__lookup_username` `mcp__keespecs__quote_address_check` `mcp__keespecs__quote_alpaca` `mcp__keespecs__quote_anchors` `mcp__keespecs__quote_bridge_route` `mcp__keespecs__quote_bridge_speed` `mcp__keespecs__quote_changes` `mcp__keespecs__quote_convert_check` `mcp__keespecs__quote_desk` `mcp__keespecs__quote_movers` `mcp__keespecs__quote_network` `mcp__keespecs__quote_persist_check` `mcp__keespecs__quote_price_crossings` `mcp__keespecs__quote_prices` `mcp__keespecs__quote_pulse` `mcp__keespecs__quote_regime` `mcp__keespecs__quote_settlement` `mcp__keespecs__quote_stablecoin_fx` `mcp__keespecs__quote_status` `mcp__keespecs__quote_token_check` `mcp__keespecs__read_skill` `mcp__keespecs__search_tokens` |
| outbound | Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL. | `mcp__keespecs__quote_bridge_route` `mcp__keespecs__quote_convert_check` `mcp__keespecs__quote_stablecoin_fx` |

| Private data | Untrusted input | Outbound |
| --- | --- | --- |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_account` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_account` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_account` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_activity` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_activity` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_activity` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_balance` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_balance` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_balance` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_block` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_block` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_block` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_directory` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_directory` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_directory` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_ecosystem` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_ecosystem` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_ecosystem` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_outbox` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_outbox` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_outbox` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_permissions` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_permissions` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_permissions` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_portfolio` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_portfolio` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_portfolio` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_price` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_price` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_price` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_providers` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_providers` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_providers` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_representatives` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_representatives` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_representatives` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_storage_quotas` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_storage_quotas` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_storage_quotas` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_supply` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_supply` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_supply` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_token` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_token` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_token` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_x402_health` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_x402_health` | `mcp__keespecs__quote_convert_check` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__get_x402_health` | `mcp__keespecs__quote_stablecoin_fx` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__list_skills` | `mcp__keespecs__quote_bridge_route` |
| `mcp__keespecs__get_directory` | `mcp__keespecs__list_skills` | `mcp__keespecs__quote_convert_check` |

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

## Findings

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

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

annotations: {"readOnlyHint":true,"openWorldHint":true}; The input addresses people (input.to): what it sends cannot be taken back.
```

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

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

annotations: {"readOnlyHint":true,"openWorldHint":true}; The input addresses people (input.to): what it sends cannot be taken back.
```

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

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

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


## Can't be undone (3)

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

### `quote_bridge_route`

- The input addresses people (input.to): what it sends 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.
- Tag outbound: The input takes a destination (input.to): what the tool writes goes there.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Whether a published one-hop bridge path exists between two chains for a token. Not a quote or a transfer. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_convert_check`

- The name "quote_convert_check" says "convert": a word for a change.
- The input addresses people (input.to): what it sends 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.
- Tag outbound: The input takes a destination (input.to): what the tool writes goes there.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Go, caution or no-go before a convert or bridge on Keeta. Not a quote or a guarantee. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_stablecoin_fx`

- The input addresses people (input.to): what it sends 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.
- Tag outbound: The input takes a destination (input.to): what the tool writes goes there.
- Findings: warn annotation-conflict

Description, as the server wrote it:

```untrusted-server-text
Peg check for Keeta's same-currency stablecoin anchor. Not an FX rate. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

## Changes things (15)

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

### `quote_address_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.

Description, as the server wrote it:

```untrusted-server-text
Whether a Keeta address has history, with a 0-100 score. Not proof of personhood. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_alpaca`

- 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
AlpacaDEX pools with 24-hour volume, priced in KTA. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_anchors`

- 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
Newest movement of Keeta's anchors in one activity page, and the median block fee. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_bridge_speed`

- 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
How fast transfers move into and out of Keeta, measured on Keeta only. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_changes`

- 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
Stored change history. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_desk`

- 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
Desk: one combined read in place of several single reads, priced per call. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_movers`

- 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
Community tokens and official stablecoins ranked by send count. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_network`

- 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
Live throughput and settlement time in one call. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_persist_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.

Description, as the server wrote it:

```untrusted-server-text
Per-account check before storing data on Keeta. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_price_crossings`

- 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
When the price marks crossed the 1% line or came back inside it. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_prices`

- 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
Price check: two price marks for KTA and whether they agree within 1%. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_pulse`

- 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
Ledger totals, tx/s over the last minute, and the latest blocks. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_regime`

- 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
Whether Keeta's rail is quiet or slow over the last hour. Not a forecast. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_settlement`

- 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
Median and p95 settlement time across representatives, 15-minute window. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `quote_token_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.

Description, as the server wrote it:

```untrusted-server-text
Whether a Keeta token named by ticker or address is the official one. Pass token or symbol, not both. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

## Only reads (21)

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

### `get_account`

- The name "get_account" says "get": 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
Head block, height, representative, published name and balances for one address. Free.
```

### `get_activity`

- The name "get_activity" says "get": 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
Latest confirmed events that touched an address, up to 8. Free.
```

### `get_balance`

- The name "get_balance" says "get": 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
One token balance on one Keeta address. Free.
```

### `get_block`

- The name "get_block" says "get": 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
One Keeta block by its 64-character hash. Amounts are ledger integers. Free.
```

### `get_directory`

- The name "get_directory" says "get": a word for reading.
- Tag private-data: The name "get_directory" says "get" and "directory": it reads files.
- 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
Every token in the Keeta currency map with its reported supply. Free.
```

### `get_ecosystem`

- The name "get_ecosystem" says "get": a word for reading.
- Tag private-data: The description's first sentence says "directory": it reads files.
- 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
The KeeSpecs directory: Keeta's own products and apps, plus community entries seeded from their own public pages. Community entries are unclaimed or self-claimed, not verified by KeeSpecs. Not a ranking. Free.
```

### `get_outbox`

- The name "get_outbox" says "get": 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
Latest blocks an address itself published, up to 8. Free.
```

### `get_permissions`

- The name "get_permissions" says "get": 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
Who may act on an account. Read only. Free.
```

### `get_portfolio`

- The name "get_portfolio" says "get": 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
Every token one address holds, up to 40. Free.
```

### `get_price`

- The name "get_price" says "get": 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
Dollar price of KTA from the deepest pool, with 1-hour and 24-hour change. Not a forecast. Free.
```

### `get_providers`

- The name "get_providers" says "get": 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
Keeta's published anchor providers and what their metadata says they connect. Not a quote. Free.
```

### `get_representatives`

- The name "get_representatives" says "get": 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
Keeta representatives holding voting weight, heaviest first. Free.
```

### `get_storage_quotas`

- The name "get_storage_quotas" says "get": 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
Current Keeta storage limits: max object size, objects and bytes per user. Free.
```

### `get_supply`

- The name "get_supply" says "get": 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
On-chain supply of KTA, USDC, EURC and cbBTC. Token amounts, not prices. Free.
```

### `get_token`

- The name "get_token" says "get": 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
Name, code, decimals and supply of one Keeta token. Free.
```

### `get_x402_health`

- The name "get_x402_health" says "get": 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
Whether the Keeta x402 facilitator answers right now. If it is down, paid reads cannot settle. Free.
```

### `list_skills`

- The name "list_skills" says "list": 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
List KeeSpecs skills: which read to call and when. Free.
```

### `lookup_username`

- The name "lookup_username" says "lookup": 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
A keeta.xyz name to its Keeta address, or an address back to its name. Pass both to check they still match. Free.
```

### `quote_status`

- The name "quote_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.

Description, as the server wrote it:

```untrusted-server-text
Three pass/fail/unknown checks for this minute: ledger activity, settlement time, price agreement. Returns the x402 payment quote for this read (price, network, asset, pay-to, and the exact URL). It does not return data. To buy, GET the returned URL over HTTP and pay with x402; check get_x402_health first.
```

### `read_skill`

- The name "read_skill" says "read": 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
Return one KeeSpecs skill as Markdown (for example read-price). Free.
```

### `search_tokens`

- The name "search_tokens" says "search": 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
Ticker, name or description to matching Keeta token addresses. Official addresses first. Free.
```

## Claude Code permissions

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

```json
{
  "permissions": {
    "allow": [
      "mcp__keespecs__list_skills",
      "mcp__keespecs__read_skill",
      "mcp__keespecs__get_price",
      "mcp__keespecs__lookup_username",
      "mcp__keespecs__search_tokens",
      "mcp__keespecs__get_x402_health",
      "mcp__keespecs__get_token",
      "mcp__keespecs__get_block",
      "mcp__keespecs__get_balance",
      "mcp__keespecs__get_supply",
      "mcp__keespecs__get_representatives",
      "mcp__keespecs__get_directory",
      "mcp__keespecs__get_ecosystem",
      "mcp__keespecs__get_providers",
      "mcp__keespecs__get_account",
      "mcp__keespecs__get_portfolio",
      "mcp__keespecs__get_activity",
      "mcp__keespecs__get_outbox",
      "mcp__keespecs__get_permissions",
      "mcp__keespecs__get_storage_quotas",
      "mcp__keespecs__quote_status"
    ],
    "ask": [
      "mcp__keespecs__quote_prices",
      "mcp__keespecs__quote_price_crossings",
      "mcp__keespecs__quote_regime",
      "mcp__keespecs__quote_settlement",
      "mcp__keespecs__quote_pulse",
      "mcp__keespecs__quote_token_check",
      "mcp__keespecs__quote_movers",
      "mcp__keespecs__quote_alpaca",
      "mcp__keespecs__quote_anchors",
      "mcp__keespecs__quote_bridge_route",
      "mcp__keespecs__quote_changes",
      "mcp__keespecs__quote_stablecoin_fx",
      "mcp__keespecs__quote_address_check",
      "mcp__keespecs__quote_bridge_speed",
      "mcp__keespecs__quote_desk",
      "mcp__keespecs__quote_network",
      "mcp__keespecs__quote_convert_check",
      "mcp__keespecs__quote_persist_check"
    ],
    "deny": []
  }
}
```

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

- `mcp__keespecs__list_skills`: untrusted-input
- `mcp__keespecs__read_skill`: untrusted-input
- `mcp__keespecs__get_price`: untrusted-input
- `mcp__keespecs__lookup_username`: untrusted-input
- `mcp__keespecs__search_tokens`: untrusted-input
- `mcp__keespecs__get_x402_health`: untrusted-input
- `mcp__keespecs__get_token`: untrusted-input
- `mcp__keespecs__get_block`: untrusted-input
- `mcp__keespecs__get_balance`: untrusted-input
- `mcp__keespecs__get_supply`: untrusted-input
- `mcp__keespecs__get_representatives`: untrusted-input
- `mcp__keespecs__get_directory`: private-data, untrusted-input
- `mcp__keespecs__get_ecosystem`: private-data, untrusted-input
- `mcp__keespecs__get_providers`: untrusted-input
- `mcp__keespecs__get_account`: untrusted-input
- `mcp__keespecs__get_portfolio`: untrusted-input
- `mcp__keespecs__get_activity`: untrusted-input
- `mcp__keespecs__get_outbox`: untrusted-input
- `mcp__keespecs__get_permissions`: untrusted-input
- `mcp__keespecs__get_storage_quotas`: untrusted-input
- `mcp__keespecs__quote_prices`: untrusted-input
- `mcp__keespecs__quote_price_crossings`: untrusted-input
- `mcp__keespecs__quote_status`: untrusted-input
- `mcp__keespecs__quote_regime`: untrusted-input
- `mcp__keespecs__quote_settlement`: untrusted-input
- `mcp__keespecs__quote_pulse`: untrusted-input
- `mcp__keespecs__quote_token_check`: untrusted-input
- `mcp__keespecs__quote_movers`: untrusted-input
- `mcp__keespecs__quote_alpaca`: untrusted-input
- `mcp__keespecs__quote_anchors`: untrusted-input
- `mcp__keespecs__quote_bridge_route`: untrusted-input, outbound
- `mcp__keespecs__quote_changes`: untrusted-input
- `mcp__keespecs__quote_stablecoin_fx`: untrusted-input, outbound
- `mcp__keespecs__quote_address_check`: untrusted-input
- `mcp__keespecs__quote_bridge_speed`: untrusted-input
- `mcp__keespecs__quote_desk`: untrusted-input
- `mcp__keespecs__quote_network`: untrusted-input
- `mcp__keespecs__quote_convert_check`: untrusted-input, outbound
- `mcp__keespecs__quote_persist_check`: untrusted-input

## Remote posture

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

https://keespecs.xyz/mcp: tools/list returned 39 tools to an anonymous client, including quote_bridge_route (irreversible), quote_stablecoin_fx (irreversible), quote_convert_check (irreversible), quote_prices (write), quote_price_crossings (write) and 13 more
```
