# Veskar

Solana risk analysis for autonomous agents. Veskar reports patterns. It does not
issue verdicts and it does not give investment advice.

Analysis is Solana. Payment is USDC on Base over x402. No accounts.

## Pay

Bare requests to paid routes return HTTP 402 with a `PAYMENT-REQUIRED` header
and a JSON body. Retry the same request with `PAYMENT-SIGNATURE` (x402 v2).

Offers use `serviceName` Veskar and link here: `https://veskar.io/SKILL.md`.
Payment settles in USDC on Base. That is the payment rail, not what Veskar analyzes.

## Routes

Free:

- `GET /`
- `GET /health`
- `GET /mcp/health`
- `GET /.well-known/agent-card.json`
- `GET /.well-known/x402`
- `GET /openapi.json`
- `GET /SKILL.md`
- `GET /robots.txt`
- `GET /icon.svg`
- `GET /favicon.ico`

Paid:

| Route | Price | Input |
|---|---|---|
| `POST /mcp` | $0.005 | JSON-RPC MCP (`initialize`, `tools/list`, `tools/call`) |
| `GET /api/address` | $0.005 | `address` (Solana base58) |
| `GET /api/token` | $0.01 | `mint` (Solana base58) |

v1 analysis is Solana only.

Invalid base58 is HTTP 400 and is never billed.

## MCP tools

`grade_address`

- input: `address` (Solana base58 public key)
- output: `grade`, `score` (number or null), `signals`

`scan_token`

- input: `mint` (Solana base58 public key)
- output: `grade`, `score`, `liquidity`, `authority`, `holders`, `signals`

If a field is not known, it is `null` or `unknown`. Veskar does not fill gaps
with guessed numbers. If analysis is unavailable, the call fails instead of
inventing a grade.

## Examples

```
GET /api/address?address=TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA
GET /api/token?mint=So11111111111111111111111111111111111111112
```

MCP `tools/call` arguments use the same fields.

## Discovery

Indexers: probe the paid routes with no params. The response is 402, not 400.
Every 402 includes `extensions.bazaar`.
