Skip to main content
Glama
txscribe-ai

txscribe MCP Server

Official
by txscribe-ai
README.md
# @txscribe/mcp

An [MCP](https://modelcontextprotocol.io) server for the txscribe developer API. It lets an AI
assistant transcribe a link with your txscribe account and read the transcript and the summary
back, through the same API documented at <https://txscribe.ai/developers>.

There are two ways to connect, with the same eight tools:

- **Hosted** — `https://txscribe.ai/mcp` (Streamable HTTP). Claude and ChatGPT connect to it as
  a custom connector and sign you in to txscribe with OAuth; nothing to install. Clients that
  take a header can send an API key instead.
- **Local** — this package, run as a command (`npx -y @txscribe/mcp`) by Claude Desktop, Claude
  Code, Cursor and other clients that start MCP servers themselves, with your API key in its
  environment.

Both are thin wrappers: every tool is one call to the developer API as you. What a tool may do,
and the minutes it uses, is exactly what your account may do in the app. Nothing is cached or
stored on your machine.

## Hosted: Claude and ChatGPT

- **Claude** (claude.ai, the desktop app): Settings → Connectors → Add custom connector, URL
  `https://txscribe.ai/mcp`. Claude opens txscribe; sign in and choose **Allow**.
- **ChatGPT** (with developer mode on): add a connector with the URL `https://txscribe.ai/mcp`
  and OAuth as its authentication, then allow it on the txscribe page that opens.
- **Claude Code**: `claude mcp add --transport http txscribe https://txscribe.ai/mcp` (it signs in
  with OAuth), or with a key:
  `claude mcp add --transport http txscribe https://txscribe.ai/mcp --header "Authorization: Bearer txs_live_…"`.
- **Cursor and others** that take a URL and headers: the URL above with the header
  `Authorization: Bearer txs_live_…`.

A connection made with **Allow** is an API key the app holds for you. It is listed under **Plan and
billing → Developer API**, where **Revoke** disconnects that app. It does not expire on its own.

## Local: this package

1. In the app, open **Plan and billing → Developer API** and make a key (it starts with
   `txs_live_`; you see it once).
2. Add the server to your client with the key in its environment.

Claude Desktop (`claude_desktop_config.json`) or any client that takes a command:

```json
{
  "mcpServers": {
    "txscribe": {
      "command": "npx",
      "args": ["-y", "@txscribe/mcp"],
      "env": { "TXSCRIBE_API_KEY": "txs_live_…" }
    }
  }
}
```

Claude Code:

```bash
claude mcp add txscribe --env TXSCRIBE_API_KEY=txs_live_… -- npx -y @txscribe/mcp
```

`TXSCRIBE_API_BASE` points the server at another deployment (default
`https://txscribe.ai/api/v1`).

## Tools

| Tool | What it does | Writes? |
|---|---|---|
| `list_transcriptions` | Your transcriptions, newest first, with paging | no |
| `search_transcriptions` | Which recordings said a word or phrase, and when: up to five matches each, with the second they start at. Reads the finished ones among your newest 500 recordings; searches what was said, not titles. | no |
| `transcribe_link` | Create a transcription from a link (YouTube, Google Drive, Dropbox …). The recording is transcribed, never downloaded. Uses your minutes. | yes |
| `get_transcription` | Status and metadata of one transcription | no |
| `get_transcript` | The finished transcript as `json` (segments, word timings, speakers), `txt`, `srt` or `vtt`; `from` and `to` (seconds) for only the paragraphs around a moment, `summaryOnly` for the summary instead | no |
| `get_summary` | The summary and its status | no |
| `request_summary` | Ask for a summary, or a new one, in a language and for a kind of recording | yes |
| `delete_transcription` | Delete a transcription and everything made from it. Cannot be undone. | yes, destructive |

Five tools only read; three change your account. Uploading a file is not a tool: the API's
upload is a signed PUT of the whole file, which an assistant cannot make from a chat. Use the
app, or the API directly, for files.

A typical exchange: *"Transcribe this talk and give me the three claims to check"* →
`transcribe_link` → `get_transcription` until `status` is `done` → `get_transcript` (txt) →
the assistant reads it; `request_summary` + `get_summary` for the summary txscribe makes.

Finding something in recordings you already have: *"What did we agree about the budget?"* →
`search_transcriptions` ("budget") → `get_transcript` with `from`/`to` around the matches it
returned, instead of whole transcripts.

## Errors

API refusals come back as tool errors with the API's own code (`invalid_api_key`,
`quota_exceeded`, `not_ready`, `unsupported_link` …), the HTTP status, the request id to quote
to support and, on 429, the `Retry-After` seconds. Neither server retries anything itself.

## Develop

```bash
npm ci
npm test
```

The tests run the server over an in-memory transport against a fake `fetch`; nothing reaches
the network. The hosted server lives in the web app (`web/src/lib/mcp/`), and its tests check
that its tool list matches this one.

## Publish (maintainers)

```bash
cd mcp
npm ci && npm test
npm login                      # an npm account that owns the @txscribe scope
npm publish                    # publishConfig makes it public; prepublishOnly runs the tests
```

`server.json` is the entry for the MCP Registry (registry.modelcontextprotocol.io); its `name`
matches `mcpName` in package.json, which is how the registry checks the npm package is ours.
Publish it after the npm package is up and the hosted endpoint is switched on, with
[`mcp-publisher`](https://github.com/modelcontextprotocol/registry) and DNS proof of txscribe.ai.

TDQS

A4/5.0

Scored across 8 tools

Disambiguation4/5

Each tool maps to a distinct operation, but the trio get_transcription (status/metadata), get_transcript (content) and get_summary (summary) shares similar names and resource focus, so an agent must read descriptions carefully to pick correctly. The descriptions do explicitly disambiguate (e.g., 'Not ready yet... check get_transcription first'), keeping overlap manageable.

Naming Consistency5/5

All eight tools follow a consistent snake_case verb_noun pattern: list_transcriptions, get_transcript, get_summary, request_summary, delete_transcription, transcribe_link, search_transcriptions, get_transcription. Verbs are used predictably (get_ for reads, request_ for creating async work, delete_ for removal).

Tool Count5/5

Eight tools is well-scoped for a transcription service, with each tool earning its place across listing, creation, status polling, content retrieval, search, summarization, and deletion. No redundant or filler tools.

Completeness4/5

The lifecycle is largely covered: create via link, poll status, retrieve transcript in multiple formats, summarize, search, and delete. Minor gaps exist—there is no tool for directly uploading a local media file (despite an 'uploading' status) and no rename/update metadata operation.

Maintenance

ActivityMaintained
ResponsivenessNo issues