# Phoenix Labs

> Restore old video and turn images into clips with sound. Pay from a capped balance, by card or USDC.

- name: io.github.thekillsquad007/phoenix-labs
- version: 1.1.0
- connection class: R2 (oauth_consent_once)
- trust: 79/100 flags: no-repository
- quality: 90/100 (strong)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/io.github.thekillsquad007%2Fphoenix-labs
- tools: https://api.protogrid.dev/v1/servers/io.github.thekillsquad007%2Fphoenix-labs/tools

**An agent can connect after a one-time OAuth consent by a human.** Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "phoenix-labs": {
      "type": "http",
      "url": "https://api.phoenixlabs.space/mcp",
      "headers": {
        "Authorization": "Bearer ${PHOENIX_LABS_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${PHOENIX_LABS_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 99
- freshness: 100
- provenance: 45
- drivers: +website +reachable +uptime-98% +updated-23d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 90/100 (strong)

### protocol: n/a (weight 25)

- n/a `protocol.modern`, `protocol.stateless`, `protocol.transport`, `protocol.list_ttl`: no remote answered a protocol handshake (not probed yet, unreachable, or local-only)

### authorization: 100 (weight 15)

- pass `auth.prm`: Protected Resource Metadata (RFC 9728) published
- pass `auth.as_metadata`: authorization server metadata reachable
- pass `auth.cimd`: Client ID Metadata Documents supported
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 93 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 13 of 13 tools declare readOnlyHint or destructiveHint
- warn `tools.directory_hints`: 7 of 13 tools declare all four hints; missing: get_prices (idempotentHint); get_balance (idempotentHint); quote_restore (idempotentHint); …
- pass `tools.token_cost`: about 1,902 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 75 (weight 15)

- warn `stability.changes`: 13 tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 13, about 1,902 tokens to load them all
- tool set hash: b718e4a07ea47ad9e79b5dc216bf6619
- tools last changed: 2026-09-27T22:54:15.905Z
- badge: [![protogrid quality](https://protogrid.dev/badge/io.github.thekillsquad007/phoenix-labs.svg)](https://protogrid.dev/servers/io.github.thekillsquad007/phoenix-labs)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-09-27 `top_up_with_usdc` changed (title)
- 2026-09-27 `create_top_up_link` changed (title)
- 2026-09-27 `get_balance` changed (title)
- 2026-09-27 `cancel_job` changed (title)
- 2026-09-27 `list_clips` changed (title)
- 2026-09-27 `get_clip` changed (title, inputSchema)
- 2026-09-27 `start_clip` changed (title, inputSchema)
- 2026-09-27 `make_clip` changed (title, inputSchema)
- 2026-09-27 `get_restore` changed (title, inputSchema)
- 2026-09-27 `start_restore` changed (title, inputSchema)

Full history: https://api.protogrid.dev/v1/servers/io.github.thekillsquad007%2Fphoenix-labs/changes

## Remotes

- https://api.phoenixlabs.space/mcp (streamable-http, auth oauth2, reachable true, uptime30d 0.9775281)

## Packages

_none_

## Tools (13)

- `cancel_job`: Cancel a restore or clip whose file was never uploaded, and get its price back on the balance at once.
- `create_restore`: Start a cloud restore of an old video (tape, DVD, film scan, old phone clip): denoise, deinterlace, rebuild detail and upscale. Returns an upload_url; PUT the video there, then call start_restore. With an agent key it is paid from the balance now (pay_with 'balance'), and refunded to the balance if it fails. With pay_with 'checkout' (or no key) the user pays through a checkout link that start_restore returns. Up to 2 GB; standard up to 30 minutes, enhanced and studio_max up to 6 minutes.
- `create_top_up_link`: A checkout link the user opens to add money to the balance (US$5 to $200). Nothing is charged until they pay.
- `get_balance`: The Phoenix balance this key can spend: the balance, and this key's limit, amount spent and amount left.
- `get_clip`: Status of a clip. When status is 'done', video_url plays it and download_url saves it (both valid 24 hours).
- `get_prices`: Current prices and limits for Phoenix Motion clips and Cloud Restore, in US dollars. Free, no key needed.
- `get_restore`: Status of a restore. When status is 'done', download_url is the restored video (valid 24 hours).
- `list_clips`: The most recent clips made with this key, newest first.
- `make_clip`: Phoenix Motion: turn one still image into a five-second video clip at 24 fps, with sound made in the same pass, from a prompt describing the motion, camera and sound. Costs the listed price (see get_prices) from the balance; a clip that fails or is refused costs nothing. Pass image_url to start at once; otherwise PUT the image to the returned upload_url and call start_clip.
- `quote_restore`: Exact price in US dollars to restore one video clip in the cloud, from its length and resolution. Free, no key needed.
- `start_clip`: After uploading the image to make_clip's upload_url: start making the clip.
- `start_restore`: After the video is uploaded: starts a balance-paid restore on the GPU, or returns the checkout_url the user must open to pay for a checkout restore (it starts once they have paid).
- `top_up_with_usdc`: Add money to the balance by paying USDC on Base yourself, with x402 (for assistants that hold a crypto wallet). Call it without a payment to get the payment requirements back (an x402 PaymentRequired error), sign the EIP-3009 transfer, then call it again with the signed payment in _meta['x402/payment']. $1 to $200; 1 USDC adds $1. No gas needed: the facilitator pays it.
