# APIShed (remote · apished.com)

Validates PESEL/NIP/REGON/IBAN/Luhn/ISBN/EAN/SWIFT-BIC/VAT; RPN calc, date math, hashing, tokens

- Trust score: 65/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-20

## Components

- remote · `apished.com`: 65/100 (this document), [markdown](https://verifymcp.io/servers/com-apished-apished/apished.md), [page](https://verifymcp.io/servers/com-apished-apished/apished)

## Channel facts

- Endpoint: `https://apished.com/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `1.0.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-20.

- **Endpoint Security**: 60/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 29 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC is configured correctly; the domain's records validate against the full chain to the root.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 79/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 2220 tokens (~76/item across 29 items; 29 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 7/100
  - Stability observed for 2 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 91/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 69% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add --transport http com-apished-apished https://apished.com/mcp
```

### Codex

```toml
[mcp_servers.com-apished-apished]
url = "https://apished.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-apished-apished": {
      "type": "remote",
      "url": "https://apished.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-apished-apished --url https://apished.com/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-apished-apished:
    url: "https://apished.com/mcp"
```

### Other

```json
{
  "mcpServers": {
    "com-apished-apished": {
      "type": "http",
      "url": "https://apished.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-20 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-08-19 (score 64, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-08-18 (score 64)

First indexed and scored.

## MCP tools (29)

### `datemath_add` (~108 tokens)

Adds years/months/days to date. years/months are applied together with end-of-month clamping — e.g. 2026-01-31 + 1 month = 2026-02-28, not an overflowed 2026-03-03. days is then applied as plain calendar-day arithmetic.

Input parameters:

- `date` (string, required): YYYY-MM-DD
- `days` (integer)
- `months` (integer)
- `years` (integer)

### `datemath_age` (~77 tokens)

Age in whole years as of asOf (optional, defaults to the current UTC date). A Feb-29 birthDate is treated as falling on March 1 in a non-leap asOf year.

Input parameters:

- `asOf` (string): YYYY-MM-DD, defaults to today
- `birthDate` (string, required): YYYY-MM-DD

### `datemath_businessdays` (~104 tokens)

Counts days in [from, to] (inclusive on both ends) whose weekday is in weekdays (default mon-fri) and which aren't in holidays.

Input parameters:

- `from` (string, required): YYYY-MM-DD
- `holidays` (null|array): YYYY-MM-DD dates to exclude
- `to` (string, required): YYYY-MM-DD
- `weekdays` (null|array): sun/mon/tue/wed/thu/fri/sat, default mon-fri

### `datemath_dayofweek` (~50 tokens)

Day of the week for date: both the weekday name and its ISO 8601 weekday number (1=Monday..7=Sunday).

Input parameters:

- `date` (string, required): YYYY-MM-DD

Output parameters:

- `dayOfWeek` (string)
- `isoWeekday` (integer)

### `datemath_diff` (~54 tokens)

Day difference between two YYYY-MM-DD dates: to minus from, in whole days. Negative if to is before from.

Input parameters:

- `from` (string, required): YYYY-MM-DD
- `to` (string, required): YYYY-MM-DD

### `datemath_leapyear` (~31 tokens)

Checks whether year is a leap year in the Gregorian calendar.

Input parameters:

- `year` (integer, required)

### `ean_validate` (~86 tokens)

Validates an 8-digit (EAN-8), 12-digit (UPC-A), 13-digit (EAN-13), or 14-digit (GTIN-14) barcode checksum: alternating weights 1 3 applied right-to-left, check digit is (10 - sum mod 10) mod 10.

Input parameters:

- `value` (string, required): identifier or value to check

Output parameters:

- `reason` (string)
- `valid` (boolean)

### `email_validate` (~64 tokens)

Checks value is a single, bare RFC 5322 email address — syntax only, not a deliverability check. user@localhost is valid (no TLD required). "Name <email>" display syntax is rejected.

Input parameters:

- `value` (string, required): identifier or value to check

Output parameters:

- `reason` (string)
- `valid` (boolean)

### `hash_digest` (~110 tokens)

Computes a hash digest of input (decoded per encoding: "text" default, "base64", or "hex") using algo: md5, sha1, sha256, sha512, or crc32. Returns the digest as lowercase hex.

Input parameters:

- `algo` (string, required): md5, sha1, sha256, sha512, or crc32
- `encoding` (string): text (default), base64, or hex
- `input` (string, required): data to hash, encoded per encoding

### `iban_validate` (~66 tokens)

Validates an IBAN's length for its issuing country (per the SWIFT IBAN registry) and its mod-97 checksum. Does not decompose the BBAN into a bank code/account number or resolve a BIC.

Input parameters:

- `value` (string, required): identifier or value to check

Output parameters:

- `reason` (string)
- `valid` (boolean)

### `isbn_validate` (~77 tokens)

Validates a 10- or 13-character ISBN. ISBN-10 uses weights 10..1 over 10 characters (last may be X, worth 10), sum mod 11 must be 0. ISBN-13 uses the same GTIN checksum as barcodes.

Input parameters:

- `value` (string, required): identifier or value to check

Output parameters:

- `reason` (string)
- `valid` (boolean)

### `jsonschema_validate` (~69 tokens)

Validates document against schema (JSON Schema draft-07 or 2020-12). Reports one specific violation per call, not an aggregated list.

Input parameters:

- `document` (required): the JSON value to validate against schema
- `schema` (required): a JSON Schema (draft-07 or 2020-12)

Output parameters:

- `reason` (string)
- `valid` (boolean)

### `luhn_validate` (~49 tokens)

Validates a numeric string against the Luhn (mod-10) checksum — payment card numbers, IMEI numbers, and similar identifiers.

Input parameters:

- `value` (string, required): identifier or value to check

Output parameters:

- `reason` (string)
- `valid` (boolean)

### `nip_validate` (~96 tokens)

Validates the checksum of a 10-digit Polish tax identification number (NIP). Checksum uses weights 6 5 7 2 3 4 5 6 7 over the first 9 digits; sum mod 11 must equal the 10th digit. A sum mod 11 of 10 is itself invalid.

Input parameters:

- `value` (string, required): digits-only identifier to validate (no spaces or dashes)

Output parameters:

- `reason` (string)
- `valid` (boolean)

### `pesel_validate` (~128 tokens)

Validates the checksum of an 11-digit Polish national identification number (PESEL). Checksum uses weights 1 3 7 9 1 3 7 9 1 3 over the first 10 digits; control digit is (10 - sum mod 10) mod 10. On success also decodes the date of birth and sex embedded in the number; a checksum-valid number with an impossible calendar date (e.g. Feb 30) is still reported invalid.

Input parameters:

- `value` (string, required): digits-only identifier to validate (no spaces or dashes)

Output parameters:

- `birthDate` (string)
- `reason` (string)
- `sex` (string)
- `valid` (boolean)

### `regex_match` (~71 tokens)

Tests input against pattern (Go's regexp package: RE2 syntax, not PCRE — no backreferences or lookaround; use inline flags like (?i) for case-insensitive matching). Returns the full match and captured groups.

Input parameters:

- `input` (string, required)
- `pattern` (string, required): RE2 syntax

Output parameters:

- `groups` (null|array)
- `match` (string)
- `matches` (boolean)

### `regon_validate` (~170 tokens)

Validates the checksum of a 9- or 14-digit Polish business registry number (REGON). 9-digit: weights 8 9 2 3 4 5 6 7 over the first 8 digits, sum mod 11 (10 mapped to 0) must equal the 9th digit. 14-digit: the first 9 digits must themselves be a valid 9-digit REGON, and weights 2 4 8 5 0 9 7 3 6 1 2 4 8 over the first 13 digits (sum mod 11, 10 mapped to 0) must equal the 14th digit.

Input parameters:

- `value` (string, required): digits-only identifier to validate (no spaces or dashes)

Output parameters:

- `reason` (string)
- `valid` (boolean)

### `rpncalc_eval` (~120 tokens)

Evaluates a Reverse Polish Notation (postfix) expression: whitespace-separated tokens, each a number or an operator/function that pops its operands off a stack and pushes the result. Supports arithmetic, exponentiation/modulo, roots, trigonometry, logarithms, rounding, bitwise ops, and constants (pi, e, phi). Always returns the decimal result — for hex/bin/oct rendering, convert the returned number yourself.

Input parameters:

- `expr` (string, required): space-separated RPN expression, e.g. "3 4 + 2 *"

### `swiftbic_validate` (~82 tokens)

Structural format validation only for a SWIFT/BIC code: 8 or 11 characters (4 letters bank code + 2 letters country code + 2 alphanumeric location code + optional 3 alphanumeric branch code). The country code is not cross-checked against ISO 3166-1.

Input parameters:

- `value` (string, required): identifier or value to check

Output parameters:

- `reason` (string)
- `valid` (boolean)

### `text_charat` (~43 tokens)

Returns the 0-indexed character (rune) at index in text.

Input parameters:

- `index` (integer, required): 0-indexed
- `text` (string, required)

### `text_count` (~44 tokens)

Counts non-overlapping occurrences of substring in text (rune-safe, not byte-based).

Input parameters:

- `substring` (string, required): must be non-empty
- `text` (string, required)

### `text_palindrome` (~81 tokens)

Checks whether text reads the same forwards and backwards. ignoreCase/ignoreNonAlnum default false (strict, literal comparison); set both true for phrase-style palindromes like "A man, a plan, a canal: Panama".

Input parameters:

- `ignoreCase` (boolean)
- `ignoreNonAlnum` (boolean)
- `text` (string, required)

### `text_reverse` (~32 tokens)

Reverses text by Unicode code point (rune), not grapheme cluster.

Input parameters:

- `text` (string, required)

### `text_sort` (~70 tokens)

Sorts text's characters or words alphabetically. by: "chars" (default, sorts runes, no separator) or "words" (splits on whitespace, rejoins with a single space).

Input parameters:

- `by` (string): chars (default) or words
- `text` (string, required)

### `text_stats` (~78 tokens)

Descriptive statistics for text: rune/byte/word/line counts, a unique-rune count, a letters/digits/spaces/punctuation/other breakdown, an exact per-character frequency table, and word-length min/max/average plus the actual shortest/longest word (ties resolve to the first occurrence).

Input parameters:

- `text` (string, required)

Output parameters:

- `bytes` (integer)
- `charFrequency` (object)
- `charTypes` (object)
- `lines` (integer)
- `runes` (integer)
- `uniqueRunes` (integer)
- `wordLengths` (object)
- `words` (integer)

### `text_wordcount` (~24 tokens)

Counts whitespace-delimited words in text.

Input parameters:

- `text` (string, required)

### `tokens_count` (~112 tokens)

Counts tokens under an OpenAI-compatible (tiktoken) encoding. Provide exactly one of model (e.g. "gpt-4o") or encoding ("o200k_base" or "cl100k_base"). No Claude/Anthropic tokenizer.

Input parameters:

- `encoding` (string): o200k_base or cl100k_base; exactly one of model/encoding
- `model` (string): e.g. gpt-4o; exactly one of model/encoding
- `text` (string, required)

Output parameters:

- `encoding` (string)
- `tokens` (integer)

### `url_validate` (~48 tokens)

Checks value is a well-formed absolute URL (has both a scheme and a host) — syntax only, not a reachability check.

Input parameters:

- `value` (string, required): identifier or value to check

Output parameters:

- `reason` (string)
- `valid` (boolean)

### `vateu_validate` (~76 tokens)

Format validation only (no VIES lookup) for an EU VAT number: checks the 2-letter member-state prefix (EL for Greece, XI for Northern Ireland) against that country's digit/letter pattern. A format-valid result does not mean the number is actually registered.

Input parameters:

- `value` (string, required): identifier or value to check

Output parameters:

- `reason` (string)
- `valid` (boolean)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-apished-apished/apished#diagnostics

## Score history

- 2026-08-20: 65
- 2026-08-19: 64
- 2026-08-18: 64

## Links

- Remote endpoint: https://apished.com/mcp
- Website: https://apished.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-apished-apished/apished.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-apished-apished/apished.json
- HTML version of this page: https://verifymcp.io/servers/com-apished-apished/apished
