# co.pepys/pepys-mcp (npm · pepys-mcp)

Transcribe audio & video: diarization, timed SRT/VTT, podcasts, paste-a-link, whole-feed batch.

- Trust score: 64/100 (medium)
- Change this week: +20
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- remote · `pepys.co`: 38/100, [markdown](https://verifymcp.io/servers/co-pepys-pepys-mcp/api-mcp.md), [page](https://verifymcp.io/servers/co-pepys-pepys-mcp/api-mcp)
- npm · `pepys-mcp`: 64/100 (this document), [markdown](https://verifymcp.io/servers/co-pepys-pepys-mcp/pepys-mcp.md), [page](https://verifymcp.io/servers/co-pepys-pepys-mcp/pepys-mcp)

## Channel facts

- Registry: `npm`
- Package: `pepys-mcp`
- Version: `0.1.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, 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-03.

- **Supply Chain Security**: 86/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (94 of 98), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 19/100
  - Repository check failed: no source repository is declared.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 29 days ago).
  - Security-disclosure policy not yet verified: we couldn't inspect the source repository.
- **Schema Quality & AI Usability**: 83/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1163 tokens (~129/item across 9 items; 9 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 85/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 56% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add co-pepys-pepys-mcp -- npx -y pepys-mcp
```

### Codex

```bash
codex mcp add co-pepys-pepys-mcp -- npx -y pepys-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "co-pepys-pepys-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "pepys-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add co-pepys-pepys-mcp --command npx --arg -y --arg pepys-mcp
```

### Hermes

```yaml
mcp_servers:
  co-pepys-pepys-mcp:
    command: "npx"
    args: ["-y", "pepys-mcp"]
```

### Other

```json
{
  "mcpServers": {
    "co-pepys-pepys-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "pepys-mcp"
      ]
    }
  }
}
```

## 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-03 (score 64, +1)

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

### 2026-08-02 (score 63, +33)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] License: unverified → pass
- [functional] Licence: MIT

### 2026-07-31 (score 30, −43)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-29 (score 73, +53)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [functional improvement] Schema quality: unverified → 100
- [functional improvement] License: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Schema quality: unverified → excellent
- [functional improvement] Maintenance: unverified → pass
- [functional] Licence: MIT

### 2026-07-28 (score 20, −24)

- [functional regression] Tool coverage: 100 → unverified
- [functional regression] Schema quality: 100 → unverified
- [functional improvement] Dependency health: unverified → partial

### 2026-07-27 (score 44)

First indexed and scored.

## MCP tools (9)

### `transcribe` (~336 tokens)

Transcribe audio/video

Transcribe hours-long audio or video into an accurate, speaker-labeled (diarized), timestamped transcript with correctly-timed SRT/VTT captions – work a general model can't do on a raw file. Accepts a file_ref from upload_file or a url (YouTube, podcast episode, RSS feed, Google Drive/Dropbox share). Audio is never used to train models. Returns { job_id, status }; fetch the result with get_transcription.

Input parameters:

- `chapters` (boolean): Also generate chapters.
- `diarize` (boolean): Label who said what. Paid capability; a non-entitled account gets an upgrade message.
- `episode_guid` (string): Pick one podcast-feed episode by guid. Only with a feed url; mutually exclusive with episode_index.
- `episode_index` (integer): Pick one podcast-feed episode by position (0 = newest). Mutually exclusive with episode_guid.
- `file_ref` (string): A file_ref from upload_file, for local media. Provide EITHER url OR file_ref.
- `idempotency_key` (string): Make retries safe; the same key returns the same job.
- `language` (string): BCP-47 hint, e.g. 'en'. Omit to auto-detect.
- `quality` (string)
- `summary` (boolean): Also generate an AI summary.
- `translate_to` (string): BCP-47 target to translate the transcript into.
- `url` (string): Public media URL: a file, YouTube video, podcast RSS feed or episode, or a Drive/Dropbox share. Provide EITHER url OR file_ref.

### `get_transcription` (~103 tokens)

Get transcription result

Fetch a transcription by job_id: full text, per-speaker timestamped segments, summary, duration_seconds, billed_minutes, and language. Set wait_ms (up to 25000) to long-poll so short clips come back in one call; otherwise poll until status is 'done'.

Input parameters:

- `job_id` (string, required)
- `wait_ms` (integer): Long-poll up to this many ms (cap 25000) for the job to finish.

### `upload_file` (~150 tokens)

Upload local media

Upload local audio/video the agent is holding (as base64 bytes or a file path) and get back a file_ref to pass to transcribe. Use this when the media has no public URL. Requires the Pepys R2 storage backend.

Input parameters:

- `bytes_base64` (string): Base64-encoded media bytes. Provide EITHER path OR bytes_base64.
- `filename` (string): Original filename (used to infer content type when mime_type is omitted).
- `mime_type` (string): audio/* or video/* content type. Inferred from the filename/path extension if omitted.
- `path` (string): Absolute path to a local audio/video file. Provide EITHER path OR bytes_base64.

### `list_transcriptions` (~60 tokens)

List recent transcriptions

List this account's recent transcription jobs with their job_id, status, title, and duration, so you can resume, fetch, or export an earlier result instead of re-transcribing.

Input parameters:

- `limit` (integer)
- `status` (string)

### `list_podcast_episodes` (~63 tokens)

List podcast episodes

Given a podcast RSS feed or Apple Podcasts show URL, list its episodes (title, publish date, episode_guid, audio_url) so you can pick exactly which one to transcribe.

Input parameters:

- `feed_url` (string, required)
- `limit` (integer)

### `transcribe_podcast_feed` (~115 tokens)

Batch-transcribe a podcast feed

Batch-transcribe a whole podcast feed in one call – fan out every episode, or the latest N, to individual jobs. Returns a set of job_ids. Paid capability (throughput/abuse gate).

Input parameters:

- `diarize` (boolean)
- `feed_url` (string, required)
- `idempotency_key` (string): Make retries safe; the same key returns the same batch (no re-billing).
- `latest` (integer): Transcribe only the newest N episodes; omit for the whole feed.

### `export_transcript` (~102 tokens)

Export a transcript

Export a finished transcript as SRT, VTT, TXT, Markdown, or JSON, with correct caption timings. Segment-level export is free; word-level-timed export (word_level:true) is a paid unlock. (DOCX/PDF are available in the Pepys web app.)

Input parameters:

- `format` (string, required)
- `job_id` (string, required)
- `word_level` (boolean): Word-level timings (paid unlock). Segment-level export is free.

### `search_transcript` (~101 tokens)

Search within a transcript

Search inside a long transcript for a phrase and get back only the matching timestamped segments – locate a quote or topic in an hours-long recording without loading the whole transcript into context.

Input parameters:

- `case_sensitive` (boolean)
- `context_segments` (integer): Also return this many neighbor segments around each hit.
- `job_id` (string, required)
- `max_results` (integer)
- `query` (string, required)
- `whole_word` (boolean)

### `get_credit_balance` (~38 tokens)

Check credit balance

Return the account's remaining transcription credits (in minutes) so you can check headroom before starting a large batch and avoid running out mid-run.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/co-pepys-pepys-mcp/pepys-mcp#diagnostics

## Score history

- 2026-08-03: 64
- 2026-08-02: 63
- 2026-08-01: 30
- 2026-07-31: 30
- 2026-07-30: 73
- 2026-07-29: 73
- 2026-07-28: 20
- 2026-07-27: 44

## Links

- npm package: https://www.npmjs.com/package/pepys-mcp
- Socket report: https://socket.dev/npm/package/pepys-mcp
- Changelog RSS feed: https://verifymcp.io/servers/co-pepys-pepys-mcp/pepys-mcp/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/co-pepys-pepys-mcp/pepys-mcp/changelog.json
- HTML version of this page: https://verifymcp.io/servers/co-pepys-pepys-mcp/pepys-mcp
