# PassFast (remote · passfa.st)

Remote HTTPS MCP for Apple + Google Wallet passes. Paste sk_live_ once.

- Trust score: 66/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-21

## Components

- remote · `passfa.st`: 66/100 (this document), [markdown](https://verifymcp.io/servers/st-passfa-passfast/passfa.md), [page](https://verifymcp.io/servers/st-passfa-passfast/passfa)

## Channel facts

- Endpoint: `https://passfa.st/mcp`
- Transports: `streamable-http`
- Auth: `required`
- 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-09-21.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation check failed: no authorisation is required to call this server, and it exposes a tool marked destructive (voidPassBySerial).
  - 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**: 70/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 7785 tokens (~173/item across 45 items; 45 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 3/100
  - Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 96/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 88% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 7 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 46 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the PassFast MCP server?

PassFast is a hosted endpoint at https://passfa.st/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http st-passfa-passfast 'https://passfa.st/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "st-passfa-passfast": {
      "url": "https://passfa.st/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "st-passfa-passfast": {
      "type": "http",
      "url": "https://passfa.st/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.st-passfa-passfast]
url = "https://passfa.st/mcp"
```

### opencode

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

### OpenClaw

```bash
openclaw mcp add st-passfa-passfast --url 'https://passfa.st/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  st-passfa-passfast:
    url: "https://passfa.st/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "st-passfa-passfast": {
      "Transport": "http",
      "Url": "https://passfa.st/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add st-passfa-passfast -t streamable-http -u 'https://passfa.st/mcp'
```

### Other

```json
{
  "mcpServers": {
    "st-passfa-passfast": {
      "type": "http",
      "url": "https://passfa.st/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-09-21 (score 66, +1)

- [functional improvement] Stability: unverified → 0.03

### 2026-09-20 (score 65)

First indexed and scored.

## MCP tools (45)

### `generatePass` (~663 tokens)

Generate a wallet pass

Generates a wallet pass from a published template. For Apple passes (default),
returns a signed `.pkpass` binary file directly. For Google passes
(`wallet_type: "google"`), returns a JSON object containing a `save_url`
that the user can open to add the pass to Google Wallet.

When `wallet_type: "both"`, generates both Apple and Google passes in a single
call. The response is always JSON with `apple` and `google` keys. Partial success
is allowed — if one wallet fails, the other is still returned with a warning.
Returns 201 if at least one succeeds.

The pass ID is returned in the `X-Pass-Id` response header (for single-wallet).

If the app has a validation webhook configured, the webhook is called once
before generation (not per wallet type). A webhook rejection returns 403;
a webhook error returns 502 (fail-closed).

\**Scope:** `passes:create`

Maps to OpenAPI operationId `generatePass` — POST /generate-pass.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `data` (object, required): Dynamic field values merged into the template structure.
- `expires_at` (string): Optional expiration timestamp for the pass.
- `external_id` (string): Optional external identifier for cross-system lookups.
- `get_or_create` (boolean): When true, if a pass with the same serial_number already exists and is active, return the existing .pkpass (200) instead of a 409 error. The response includes an `X-Pass-Existed: true` header. If the…
- `locations` (array): GPS locations where the pass is relevant (shown on lock screen). Overrides template defaults if provided.
- `max_distance` (number): Maximum distance in meters from a location for lock screen relevance.
- `relevant_date` (string): ISO 8601 date when the pass is relevant (appears on lock screen).
- `serial_number` (string, required): Unique serial number for this pass.
- `strip_image_id` (string): Override the template's strip/hero image for this pass only. The referenced image must belong to the same app and have purpose `strip` (or a `strip_*` variant). Applied to Apple `strip.png` and Googl…
- `template_id` (string, required): ID of the published template to use.
- `wallet_type` (string): Target wallet platform. Defaults to `apple`. When set to `google`, the response is a JSON object with a `save_url` instead of a binary .pkpass file. When set to `both`, generates both Apple and Googl…
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `listPasses` (~207 tokens)

List passes

Returns a paginated list of passes for the current app.

\**Scope:** `passes:read`

Maps to OpenAPI operationId `listPasses` — GET /manage-passes.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `created_after` (string): Only return passes created after this timestamp.
- `created_before` (string): Only return passes created before this timestamp.
- `external_id` (string): Filter by external ID.
- `limit` (integer): Maximum number of results to return.
- `offset` (integer): Number of results to skip.
- `serial_number` (string): Filter by serial number.
- `status` (string): Filter by pass status.
- `template_id` (string): Filter by template ID.
- `wallet_type` (string): Filter by wallet platform type.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `getPass` (~100 tokens)

Get a pass

Returns the full details of a single pass.

\**Scope:** `passes:read`

Maps to OpenAPI operationId `getPass` — GET /manage-passes/{id}.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `id` (string, required): Pass ID.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `updatePass` (~357 tokens)

Update a pass

Updates the dynamic data of an active pass. Optionally sends a push
notification to registered devices so they fetch the updated pass.
At least one of `data`, `expires_at`, `locations`, `relevant_date`,
or `max_distance` is required.

\**Scope:** `passes:manage`

Maps to OpenAPI operationId `updatePass` — PATCH /manage-passes/{id}.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `data` (object): New dynamic field values to merge into the pass.
- `expires_at` (string): Expiration timestamp (set to null to remove expiration).
- `id` (string, required): Pass ID.
- `locations` (array): GPS locations where the pass is relevant (overrides template defaults).
- `max_distance` (number): Maximum distance in meters from a location for lock screen relevance.
- `push_update` (boolean): If true, send a push notification to registered devices.
- `relevant_date` (string): ISO 8601 date when the pass is relevant (lock screen).
- `strip_image_id` (string): Override the template's strip/hero image for this pass. The referenced image must belong to the same app and have purpose `strip` (or a `strip_*` variant). Applied to Apple `strip.png` and Google `he…
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `getPassBySerial` (~183 tokens)

Get a pass by serial number

Returns the full details of a single pass looked up by serial number.
When a serial has both Apple and Google passes, use `?wallet_type=` to select which one (defaults to `apple`).

\**Scope:** `passes:read`

Maps to OpenAPI operationId `getPassBySerial` — GET /manage-passes/serial/{serial_number}.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `serial_number` (string, required): Pass serial number (unique within app + wallet type).
- `wallet_type` (string): Wallet type to look up when a serial number has both Apple and Google passes. Defaults to `apple` for backward compatibility.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `updatePassBySerial` (~433 tokens)

Update a pass by serial number

Updates the dynamic data of an active pass looked up by serial number.
Optionally sends a push notification to registered devices.
At least one of `data`, `expires_at`, `locations`, `relevant_date`,
or `max_distance` is required.
When a serial has both Apple and Google passes, use `?wallet_type=` to select which one (defaults to `apple`).

\**Scope:** `passes:manage`

Maps to OpenAPI operationId `updatePassBySerial` — PATCH /manage-passes/serial/{serial_number}.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `data` (object): New dynamic field values to merge into the pass.
- `expires_at` (string): Expiration timestamp (set to null to remove expiration).
- `locations` (array): GPS locations where the pass is relevant (overrides template defaults).
- `max_distance` (number): Maximum distance in meters from a location for lock screen relevance.
- `push_update` (boolean): If true, send a push notification to registered devices.
- `relevant_date` (string): ISO 8601 date when the pass is relevant (lock screen).
- `serial_number` (string, required): Pass serial number (unique within app + wallet type).
- `strip_image_id` (string): Override the template's strip/hero image for this pass. The referenced image must belong to the same app and have purpose `strip` (or a `strip_*` variant). Applied to Apple `strip.png` and Google `he…
- `wallet_type` (string): Wallet type to look up when a serial number has both Apple and Google passes. Defaults to `apple` for backward compatibility.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `downloadPassBySerial` (~190 tokens)

Download a .pkpass file by serial number

Downloads the `.pkpass` binary for an active pass looked up by serial number.
When a serial has both Apple and Google passes, use `?wallet_type=` to select which one (defaults to `apple`).

\**Scope:** `passes:download`

Maps to OpenAPI operationId `downloadPassBySerial` — GET /manage-passes/serial/{serial_number}/download.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `serial_number` (string, required): Pass serial number (unique within app + wallet type).
- `wallet_type` (string): Wallet type to look up when a serial number has both Apple and Google passes. Defaults to `apple` for backward compatibility.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `voidPassBySerial` (~221 tokens)

Void a pass by serial number

Marks a pass (looked up by serial number) as invalidated and rebuilds the `.pkpass`
file with Apple's `voided: true` flag. Registered devices are sent push notifications
so the pass appears voided immediately in Apple Wallet.
When a serial has both Apple and Google passes, use `?wallet_type=` to select which one (defaults to `apple`).

\**Scope:** `passes:manage`

Maps to OpenAPI operationId `voidPassBySerial` — POST /manage-passes/serial/{serial_number}/void.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `serial_number` (string, required): Pass serial number (unique within app + wallet type).
- `wallet_type` (string): Wallet type to look up when a serial number has both Apple and Google passes. Defaults to `apple` for backward compatibility.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `downloadPass` (~107 tokens)

Download a .pkpass file

Downloads the `.pkpass` binary for an active pass.

\**Scope:** `passes:download`

Maps to OpenAPI operationId `downloadPass` — GET /manage-passes/{id}/download.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `id` (string, required): Pass ID.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `voidPass` (~153 tokens)

Void a pass

Marks a pass as invalidated and rebuilds the `.pkpass` file with Apple's `voided: true` flag.
Registered devices are sent push notifications so the pass appears voided immediately in Apple Wallet.
Rebuild failure is non-fatal — the pass is still invalidated at the DB level.

\**Scope:** `passes:manage`

Maps to OpenAPI operationId `voidPass` — POST /manage-passes/{id}/void.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `id` (string, required): Pass ID.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `createTemplate` (~372 tokens)

Create a template

Creates a new pass template in draft status.

\**Scope:** `templates:manage`

Maps to OpenAPI operationId `createTemplate` — POST /manage-templates.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `background_image_id` (string)
- `description` (string): Optional description of the template.
- `field_schema` (object): Optional JSON schema for validating dynamic data.
- `google_logo_image_id` (string)
- `google_pass_type` (string): Google Wallet class type override. If unset, PassFast auto-maps from the Apple `pass_style` (+ `structure.transitType` for boardingPass): - `generic` → generic - `storeCard` → loyalty (or giftCard vi…
- `google_wide_logo_image_id` (string)
- `icon_image_id` (string)
- `logo_image_id` (string)
- `name` (string, required): Human-readable template name.
- `pass_style` (string, required): Apple Wallet pass style.
- `strip_image_id` (string)
- `structure` (object, required): Complete pass structure. Drives both Apple `pass.json` emission and Google Wallet class/object JSON. Fields are grouped below by platform, but the single JSONB object carries all of them for dual-wal…
- `thumbnail_image_id` (string)
- `wallet_types` (array)
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `listTemplates` (~126 tokens)

List templates

Returns all templates for the current app. By default returns non-archived
templates. Set `archived=true` to return only archived templates.

\**Scope:** `templates:manage`

Maps to OpenAPI operationId `listTemplates` — GET /manage-templates.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `archived` (boolean): When true, return only archived templates instead of active ones.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `getTemplate` (~100 tokens)

Get a template

Returns the full details of a single template.

\**Scope:** `templates:manage`

Maps to OpenAPI operationId `getTemplate` — GET /manage-templates/{id}.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `id` (string, required): Template ID.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `updateTemplate` (~271 tokens)

Update a template

Updates a draft template. Published templates cannot be modified.

\**Scope:** `templates:manage`

Maps to OpenAPI operationId `updateTemplate` — PATCH /manage-templates/{id}.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `background_image_id` (string)
- `description` (string)
- `field_schema` (object)
- `google_logo_image_id` (string)
- `google_pass_type`
- `google_wide_logo_image_id` (string)
- `icon_image_id` (string)
- `id` (string, required): Template ID.
- `logo_image_id` (string)
- `name` (string)
- `pass_style` (string): Apple Wallet pass style.
- `strip_image_id` (string)
- `structure` (object): Complete pass structure. Drives both Apple `pass.json` emission and Google Wallet class/object JSON. Fields are grouped below by platform, but the single JSONB object carries all of them for dual-wal…
- `thumbnail_image_id` (string)
- `wallet_types` (array): Wallet platforms this template supports.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `deleteTemplate` (~137 tokens)

Delete a template

Soft-deletes a template by marking it as archived. Use `permanent=true`
to permanently delete the template and its associated data.

\**Scope:** `templates:manage`

Maps to OpenAPI operationId `deleteTemplate` — DELETE /manage-templates/{id}.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `id` (string, required): Template ID.
- `permanent` (boolean): When true, permanently deletes the template instead of archiving it.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `publishTemplate` (~111 tokens)

Publish a template

Publishes a draft template, making it available for pass generation.
Published templates cannot be modified.

\**Scope:** `templates:manage`

Maps to OpenAPI operationId `publishTemplate` — POST /manage-templates/{id}/publish.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `id` (string, required): Template ID.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `uploadImage` (~387 tokens)

Upload an image

Uploads an image for use in pass templates or per-pass strip overrides.
Send as multipart form data with a `purpose` field and a `file` field
containing the PNG image.

\**Upload behaviour by purpose:**
\- `strip` — **accumulates**. Each upload creates a new image; the returned
  \`id` can be passed as `strip_image_id` on `POST /v1/passes` or
  \`PATCH /v1/passes/{id}` to give individual passes their own banner.
  Previous `strip` images are NOT deleted — manage them via
  \`DELETE /v1/images/{id}` when no longer referenced.
\- All other purposes (`icon`, `logo`, `thumbnail`, `background`, `footer`,
  and all `_2x`/`_3x` variants) — **replace-on-upload**. Uploading a new
  image of the same purpose deletes the previous one from storage and DB.
  These are app-wide template assets, not per-pass.

\**Scope:** `images:manage`

Maps to OpenAPI operationId `uploadImage` — POST /manage-images.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `file_base64` (string, required): Base64-encoded file bytes. Maps to the OpenAPI multipart `file` field — same uploadImage (or equivalent) endpoint, not a new API.
- `filename` (string): Optional filename sent with the multipart upload.
- `purpose` (string, required): The intended use of the image. `strip` uploads accumulate (for per-pass `strip_image_id` overrides); all other purposes replace existing uploads of the same purpose for the app.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `listImages` (~90 tokens)

List images

Returns all images for the current app, including signed preview URLs.

\**Scope:** `images:manage`

Maps to OpenAPI operationId `listImages` — GET /manage-images.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `deleteImage` (~193 tokens)

Delete an image

Deletes an image (storage file + DB row). Always succeeds when the image exists.

Any template column pointing at this image is silently cleared (the template
falls back to no image in that slot — re-attach a new one if needed).
Any pass with `strip_image_id` pointing at this image has its override nullified
and reverts to the template's strip on next render.

Use `GET /manage-images/{id}/usage` first if you need to know the blast radius
before deleting.

\**Scope:** `images:manage`

Maps to OpenAPI operationId `deleteImage` — DELETE /manage-images/{id}.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `id` (string, required): Image ID.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `getImageUsage` (~210 tokens)

Get image usage / reference counts

Report how an image is referenced across templates and passes. Useful before
DELETE to confirm an image is unused, or to find which templates a shared
asset is attached to.

\- `template_refs` lists every template column (e.g. `strip_image_id`,
  \`icon_image_id`, `google_logo_image_id`) that references this image.
\- `pass_refs_count` is the number of passes whose per-pass `strip_image_id`
  points at this image.
\- `safe_to_delete` is `true` when `total_refs` is 0.

\**Scope:** `images:manage`

Maps to OpenAPI operationId `getImageUsage` — GET /manage-images/{id}/usage.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `id` (string, required): Image ID.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `uploadP12Certificate` (~171 tokens)

Upload a .p12 certificate bundle

Uploads a PKCS#12 (.p12) bundle containing signer certificate and private key.
The bundle is decrypted with the provided password, and individual certificates
are extracted and stored with AES-256-GCM encryption.

\**Scope:** `certs:manage`

Maps to OpenAPI operationId `uploadP12Certificate` — POST /manage-certs/p12.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `p12_data` (string, required): Base64-encoded .p12 file data.
- `password` (string): Password to decrypt the .p12 bundle (if password-protected).
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `uploadCertificate` (~120 tokens)

Upload a single certificate

Uploads a single PEM-encoded certificate or key.

\**Scope:** `certs:manage`

Maps to OpenAPI operationId `uploadCertificate` — POST /manage-certs.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `cert_data` (string, required): Base64-encoded certificate or key data.
- `cert_type` (string, required): Type of certificate being uploaded.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `listCertificates` (~87 tokens)

List certificates

Returns all certificates for the current app.

\**Scope:** `certs:manage`

Maps to OpenAPI operationId `listCertificates` — GET /manage-certs.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `deleteCertificate` (~96 tokens)

Delete a certificate

Deletes a certificate.

\**Scope:** `certs:manage`

Maps to OpenAPI operationId `deleteCertificate` — DELETE /manage-certs/{id}.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `id` (string, required): Certificate ID.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `uploadGoogleCredentials` (~133 tokens)

Upload Google credentials

Uploads Google service account credentials for Google Wallet pass signing.
The service account JSON and issuer ID are stored securely.

\**Scope:** `certs:manage`

Maps to OpenAPI operationId `uploadGoogleCredentials` — POST /manage-certs/google.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `issuer_id` (string, required): Google Wallet issuer ID.
- `service_account_json` (object, required): Google service account JSON key file contents.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `listGoogleCredentials` (~94 tokens)

List Google credentials

Returns all active Google Wallet credentials for the current app.

\**Scope:** `certs:manage`

Maps to OpenAPI operationId `listGoogleCredentials` — GET /manage-certs/google.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `deactivateGoogleCredential` (~106 tokens)

Deactivate Google credential

Deactivates a Google Wallet credential.

\**Scope:** `certs:manage`

Maps to OpenAPI operationId `deactivateGoogleCredential` — DELETE /manage-certs/google/{id}.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `id` (string, required): Google credential ID.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `testGoogleConnection` (~101 tokens)

Test Google connection

Tests the configured Google Wallet credentials by attempting to
authenticate with the Google Wallet API.

\**Scope:** `certs:manage`

Maps to OpenAPI operationId `testGoogleConnection` — POST /manage-certs/google/test.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `testAppleCertificates` (~124 tokens)

Test Apple certificates

Generates an ephemeral test `.pkpass` file to verify that the uploaded
Apple signing certificates are valid and complete. The test pass is
not stored — it is returned directly as a binary download.

\**Scope:** `certs:manage`

Maps to OpenAPI operationId `testAppleCertificates` — POST /manage-certs/test.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `getOrganization` (~60 tokens)

Get organization details

Returns the current organization's settings.

\**Scope:** `org:read`

Maps to OpenAPI operationId `getOrganization` — GET /manage-org.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

### `updateOrganization` (~120 tokens)

Update organization settings

Updates the current organization's settings, including APNs credentials.

\**Scope:** `org:manage`

Maps to OpenAPI operationId `updateOrganization` — PATCH /manage-org.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `apns_key_id` (string): Apple Push Notification service Key ID.
- `apns_key_p8` (string): APNs .p8 private key contents.
- `name` (string): Organization display name.
- `slug` (string): URL-friendly slug.

### `getApp` (~87 tokens)

Get current app details

Returns the current app's settings.

\**Scope:** `org:read`

Maps to OpenAPI operationId `getApp` — GET /manage-org/app.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `createApp` (~74 tokens)

Create a new app

Creates a new app within the organization.

\**Scope:** `org:manage`

Maps to OpenAPI operationId `createApp` — POST /manage-org/app.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `name` (string): App display name.

### `updateApp` (~292 tokens)

Update app settings

Updates the current app's settings, including webhook configuration.
Set `regenerate_webhook_secret` to `true` to generate a new webhook
signing secret; the new secret is returned in `webhook_secret_raw`
(shown only once).

\**Scope:** `org:manage`

Maps to OpenAPI operationId `updateApp` — PATCH /manage-org/app.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `apple_team_id` (string): Apple Developer Team ID.
- `google_signing_mode` (string): Google signing mode. `managed` uses platform credentials; `custom` uses your own.
- `name` (string): App display name.
- `onboarding_completed` (boolean): Whether onboarding has been completed for this app.
- `pass_type_identifier` (string): Apple pass type identifier (e.g., pass.com.example.myapp).
- `regenerate_webhook_secret` (boolean): Set to true to regenerate the webhook signing secret.
- `signing_mode` (string): Apple signing mode. `managed` uses platform credentials; `custom` uses your own.
- `validation_webhook_url` (string): URL for pre-generation validation webhooks.
- `webhook_url` (string): URL for async event webhook delivery.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `deleteApp` (~94 tokens)

Deactivate an app

Deactivates the current app. This does not permanently delete data.

\**Scope:** `org:manage`

Maps to OpenAPI operationId `deleteApp` — DELETE /manage-org/app.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `testWebhook` (~100 tokens)

Test the validation webhook

Sends a sample validation webhook payload to the configured URL
and returns the result.

\**Scope:** `org:manage`

Maps to OpenAPI operationId `testWebhook` — POST /manage-org/app/test-webhook.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `getManagedSigningStatus` (~124 tokens)

Check managed signing availability

Returns whether managed (platform) signing credentials are available
for Apple and Google wallets. When `apple_ready` or `google_ready` is
\`true`, apps can use `signing_mode: "managed"` or
\`google_signing_mode: "managed"` without uploading their own credentials.

\**Scope:** `org:read`

Maps to OpenAPI operationId `getManagedSigningStatus` — GET /manage-org/managed-signing-status.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

### `listWebhookEvents` (~147 tokens)

List webhook events

Returns a paginated list of webhook event delivery records for the current app.

\**Scope:** `org:read`

Maps to OpenAPI operationId `listWebhookEvents` — GET /manage-org/webhook-events.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `delivery_status` (string): Filter by delivery status.
- `event_type` (string): Filter by event type.
- `limit` (integer): Maximum number of results to return.
- `offset` (integer): Number of results to skip.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `listApiKeys` (~66 tokens)

List API keys

Returns all API keys for the current organization.

\**Scope:** `org:manage`

Maps to OpenAPI operationId `listApiKeys` — GET /manage-keys.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

### `createApiKey` (~140 tokens)

Create an API key

Creates a new API key. The response contains `id`, `name`, `key_type`,
\`key_prefix`, `raw_key`, and `message`. The full raw key is shown only
once and cannot be retrieved again.

\**Scope:** `org:manage`

Maps to OpenAPI operationId `createApiKey` — POST /manage-keys.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `key_type` (string, required): Key type. Secret keys have full access; publishable keys have limited scopes.
- `name` (string, required): Human-readable label for the key.

### `revokeApiKey` (~89 tokens)

Revoke an API key

Revokes an API key, making it inactive. Revoked keys cannot authenticate.

\**Scope:** `org:manage`

Maps to OpenAPI operationId `revokeApiKey` — PATCH /manage-keys/{id}.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `id` (string, required): API key ID.

### `deleteApiKey` (~109 tokens)

Delete an API key

Permanently deletes an API key. The key **must be revoked first**
(via PATCH) before it can be deleted. Attempting to delete an active
key returns 400.

\**Scope:** `org:manage`

Maps to OpenAPI operationId `deleteApiKey` — DELETE /manage-keys/{id}.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `id` (string, required): API key ID.

### `createShareToken` (~197 tokens)

Create a share token

Creates a public share token for a pass, enabling distribution via URL,
QR code, or messaging. The share URL points to a public page where
recipients can add the pass to Apple or Google Wallet without logging in.

Idempotent — if the pass already has a share token, the existing token
is returned (200) instead of creating a new one (201).

For dual-wallet passes (same serial number with both Apple and Google),
the share token is automatically applied to all sibling passes.

\**Scope:** `passes:manage`

Maps to OpenAPI operationId `createShareToken` — POST /share-pass/create.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `pass_id` (string, required): ID of the pass to share.
- `x_app_id` (string): Override X-App-Id for this call. Defaults to the MCP connection header.

### `getSharePassMetadata` (~100 tokens)

Get shared pass metadata

Returns public metadata for a shared pass. No authentication required.
Used by the public share page to display wallet buttons and pass info.

Maps to OpenAPI operationId `getSharePassMetadata` — GET /share-pass/{token}. Public endpoint — no API key required.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `token` (string, required): Share token (32 hex characters).

### `downloadSharedPass` (~101 tokens)

Download shared Apple .pkpass

Downloads the Apple `.pkpass` file for a shared pass. No authentication
required. Only works for active Apple passes.

Maps to OpenAPI operationId `downloadSharedPass` — GET /share-pass/{token}/download. Public endpoint — no API key required.

Same PassFast HTTP API, billing, and rate limits. Do not invent other paths.

Input parameters:

- `token` (string, required): Share token (32 hex characters).

## Diagnostics

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

## Score history

- 2026-09-21: 66
- 2026-09-20: 65

## Common questions

### What is the PassFast MCP server?

PassFast is an MCP server listed in the public MCP registry as st.passfa/passfast. Remote HTTPS MCP for Apple + Google Wallet passes. Paste sk_live_ once. This page covers its hosted endpoint (https://passfa.st/mcp).

### Is the PassFast MCP server safe to use?

PassFast scores 66 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the PassFast MCP server expose?

PassFast exposes 45 tools: generatePass, listPasses, getPass, updatePass, getPassBySerial, and 40 more. Their descriptions and schemas cost roughly 7,543 tokens of context every time the server is loaded.

### Does the PassFast MCP server require authentication?

No. We connected to PassFast without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the PassFast MCP server still maintained?

PassFast is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://passfa.st/mcp
- Authorisation metadata: https://passfa.st/.well-known/oauth-protected-resource/mcp
- Repository: https://github.com/aberkaneso/passfast-mcp
- Website: https://passfa.st/
- Changelog RSS feed: https://verifymcp.io/servers/st-passfa-passfast/passfa.xml
- Changelog JSON feed: https://verifymcp.io/servers/st-passfa-passfast/passfa.json
- HTML version of this page: https://verifymcp.io/servers/st-passfa-passfast/passfa
