# Patina (remote · patinadata.xyz)

Check how many years of verifiable history a person has behind accounts they already own.

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

## Components

- remote · `patinadata.xyz`: 71/100 (this document), [markdown](https://verifymcp.io/servers/ramakrishnanhulk20-patina/api-mcp.md), [page](https://verifymcp.io/servers/ramakrishnanhulk20-patina/api-mcp)

## Channel facts

- Endpoint: `https://patinadata.xyz/api/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-17.

- **Endpoint Security**: 80/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 64/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1565 tokens (~391/item across 4 items; 4 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 10/100
  - Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

## Install

### Claude

```bash
claude mcp add --transport http ramakrishnanhulk20-patina https://patinadata.xyz/api/mcp
```

### Codex

```toml
[mcp_servers.ramakrishnanhulk20-patina]
url = "https://patinadata.xyz/api/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ramakrishnanhulk20-patina": {
      "type": "remote",
      "url": "https://patinadata.xyz/api/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add ramakrishnanhulk20-patina --url https://patinadata.xyz/api/mcp --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  ramakrishnanhulk20-patina:
    url: "https://patinadata.xyz/api/mcp"
```

### Other

```json
{
  "mcpServers": {
    "ramakrishnanhulk20-patina": {
      "type": "http",
      "url": "https://patinadata.xyz/api/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-16 (score 71, +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-15 (score 70, 0)

- [functional improvement] Stability: unverified → 0.03

### 2026-08-14 (score 70)

First indexed and scored.

## MCP tools (4)

### `get_patina_score` (~417 tokens)

Get Patina score

Look up a person's full Patina score by their Patina username. Patina reads the age and activity of accounts somebody already owns (YouTube, GitHub, Instagram, LinkedIn, Spotify and others) through the Vana data portability protocol, and turns that into a 0-100 score plus a signed attestation. Patina scores 0-100 for how much provable history an account holder has, not for how popular or how real-time-verified they are. 80+ (Deeply worn in) means a long, multi-year record corroborated across independent platforms. 60-79 (Well established) is a solid multi-year record. 40-59 (Some real history) is genuine but shorter or thinner. 20-39 (Thin, but genuine so far) is an early account with a little history. Under 20 (Not much to go on yet) looks freshly created, or has almost nothing connected. Age is the heaviest single input: 12 years of provable history earns full marks on it. Patina proves TENURE: that whoever holds these accounts has a long, corroborated, verifiable history. It does NOT prove uniqueness or liveness, and it is not a proof-of-personhood check. If you need 'exactly one human, present right now', Patina is the wrong signal and you should say so. Call this when you want the whole picture: the score, the per-component breakdown, how many years of history are provable, which platforms corroborate each other, and an attestation you can verify offline. If you only need a yes or no about whether somebody clears a bar, call check_threshold instead. An unknown username comes back with found: false, which is a normal answer meaning no public Patina profile exists under that name. It is not an error, and it is not evidence against the person.

Input parameters:

- `username` (string, required): The person's Patina username, as it appears at patinadata.xyz/u/<username>.

### `check_threshold` (~425 tokens)

Check a Patina trust bar

Decide whether somebody clears a trust bar, as a plain true or false. Give a Patina username plus min_score, min_years, or both. At least one is required. Returns `pass`, plus a one-sentence `reason` written to be quoted straight back to a user. This is the right tool for gating decisions: 'has this person been verifiably around for at least five years', 'is this account above 70'. Patina scores 0-100 for how much provable history an account holder has, not for how popular or how real-time-verified they are. 80+ (Deeply worn in) means a long, multi-year record corroborated across independent platforms. 60-79 (Well established) is a solid multi-year record. 40-59 (Some real history) is genuine but shorter or thinner. 20-39 (Thin, but genuine so far) is an early account with a little history. Under 20 (Not much to go on yet) looks freshly created, or has almost nothing connected. Age is the heaviest single input: 12 years of provable history earns full marks on it. Patina proves TENURE: that whoever holds these accounts has a long, corroborated, verifiable history. It does NOT prove uniqueness or liveness, and it is not a proof-of-personhood check. If you need 'exactly one human, present right now', Patina is the wrong signal and you should say so. When no profile exists, `pass` is false and `found` is false: treat that as UNKNOWN rather than as a failed check, because most people have never heard of Patina and absence proves nothing about them.

Input parameters:

- `min_score` (number): Lowest acceptable Patina score, 0-100. Passing requires score >= this.
- `min_years` (number): Lowest acceptable years of provable history. Passing requires the oldest provable signal to be at least this many years old.
- `username` (string, required): The person's Patina username.

### `verify_attestation` (~220 tokens)

Verify a Patina attestation

Check whether a Patina attestation really was signed by Patina. Every Patina score ships with an EIP-191 signed message; hand this tool that `message` and `signature` and it returns the address it recovered, the address Patina publishes, and whether the two match. IMPORTANT, AND THE WHOLE POINT: you do not need this tool, and where you can, you should not use it. A signature is worth something precisely because ANYONE can check it offline, with no call to Patina, using viem's recoverMessageAddress or ethers' verifyMessage. If you ask Patina's own server whether Patina's own signature is good, you are trusting Patina again and the signature has bought you nothing. That is why this returns the recovered address rather than a bare yes: compare it yourself.

Input parameters:

- `message` (string, required): The exact `message` string from the attestation, newlines and all.
- `signature` (string, required): The `signature` from the attestation, 0x-prefixed.

### `resolve_identity` (~404 tokens)

Resolve a platform handle to a Patina score

Find out whether the person behind a platform handle has a Patina score, WITHOUT learning who they are. Supported sources: github, instagram, linkedin. Accepts a bare handle, an @handle, or a full profile URL. Returns only three things: whether a public Patina profile is linked to that account, its score, and its years of history. It deliberately never returns the Patina username, and never returns which other platforms that person has connected, because doing so would turn this into a cross-platform de-anonymisation tool. Do not ask it for those; it cannot provide them. Other platforms (youtube, spotify, steam, amazon, uber) are NOT supported here, because for those Patina stores an internal platform id rather than a handle a person could type. Those platforms still count fully toward the score itself; only this lookup is limited. Email addresses are refused outright. Patina scores 0-100 for how much provable history an account holder has, not for how popular or how real-time-verified they are. 80+ (Deeply worn in) means a long, multi-year record corroborated across independent platforms. 60-79 (Well established) is a solid multi-year record. 40-59 (Some real history) is genuine but shorter or thinner. 20-39 (Thin, but genuine so far) is an early account with a little history. Under 20 (Not much to go on yet) looks freshly created, or has almost nothing connected. Age is the heaviest single input: 12 years of provable history earns full marks on it.

Input parameters:

- `handle` (string, required): The handle on that platform. 'torvalds', '@torvalds' and 'https://github.com/torvalds' are all accepted.
- `source` (string, required): Which platform the handle belongs to. Supported for lookup: github, instagram, linkedin. Anything else returns an explanation rather than a result.

## Diagnostics

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

## Score history

- 2026-08-17: 71
- 2026-08-16: 71
- 2026-08-15: 70
- 2026-08-14: 70

## Links

- Remote endpoint: https://patinadata.xyz/api/mcp
- Repository: https://github.com/ramakrishnanhulk20/Patina
- Website: https://patinadata.xyz/mcp
- Changelog RSS feed: https://verifymcp.io/servers/ramakrishnanhulk20-patina/api-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/ramakrishnanhulk20-patina/api-mcp.json
- HTML version of this page: https://verifymcp.io/servers/ramakrishnanhulk20-patina/api-mcp
