Skip to main content
Glama
pedraum

dropbox-transcripts-mcp

by pedraum

dropbox-transcripts-mcp

Dropbox에 저장된 일반 텍스트 팟캐스트 대본을 인덱싱하여 Claude Code 내에서 검색할 수 있게 해주는 MCP 서버입니다. 새로운 대본이 추가되면 자동으로 동기화됩니다.

기능

  • Dropbox 폴더의 모든 .txt 대본을 로컬 SQLite 데이터베이스(FTS5 전체 텍스트 검색 지원)로 캐싱

  • N시간마다 Dropbox를 폴딩하여 새 파일이나 변경된 파일을 자동으로 인덱싱

  • Claude Code에 4가지 도구(목록, 가져오기, 검색, 수동 동기화) 제공

Related MCP server: transcript-search

사전 요구 사항

  • Python 3.10+

  • uv (macOS의 경우 brew install uv)

  • 대본이 저장된 폴더(기본값: /Podcasts/Lenny)가 있는 Dropbox 계정

설정

1. Dropbox 앱 생성

  1. https://www.dropbox.com/developers/apps로 이동합니다.

  2. Create app을 클릭합니다.

  3. Scoped access와 Full Dropbox를 선택합니다.

  4. 이름을 지정합니다(예: transcripts-mcp).

  5. Permissions 탭에서 다음 권한을 활성화합니다:

    • files.metadata.read

    • files.content.read

  6. Settings 탭에서 App Key와 App Secret을 복사합니다.

2. 인증 설정 실행

uvx --from git+https://github.com/YOUR_USERNAME/dropbox-transcripts-mcp dropbox-transcripts-setup

이 과정은 OAuth 흐름을 안내하고 DROPBOX_REFRESH_TOKEN을 출력합니다. 또한 Claude Code 설정에 붙여넣을 정확한 MCP 구성 블록도 출력합니다.

3. Claude Code에 추가

~/.claude/settings.json을 편집하고 다음을 추가합니다:

{
  "mcpServers": {
    "transcripts": {
      "command": "uvx",
      "args": [
        "--from", "git+https://github.com/YOUR_USERNAME/dropbox-transcripts-mcp",
        "dropbox-transcripts-mcp"
      ],
      "env": {
        "DROPBOX_APP_KEY": "your_app_key",
        "DROPBOX_APP_SECRET": "your_app_secret",
        "DROPBOX_REFRESH_TOKEN": "your_refresh_token",
        "DROPBOX_FOLDER_PATH": "/Podcasts/Lenny"
      }
    }
  }
}

Claude Code가 서버를 처음 시작할 때 Dropbox의 모든 대본을 동기화합니다. 이후 동기화는 6시간(구성 가능)마다 백그라운드에서 자동으로 수행됩니다.

구성

모든 구성은 환경 변수를 통해 이루어집니다:

변수

필수

기본값

설명

DROPBOX_APP_KEY

예

Dropbox 앱 키

DROPBOX_APP_SECRET

예

Dropbox 앱 시크릿

DROPBOX_REFRESH_TOKEN

예

OAuth 리프레시 토큰

DROPBOX_FOLDER_PATH

아니요

/Podcasts/Lenny

Dropbox 내 대본 폴더 경로

SYNC_INTERVAL_HOURS

아니요

6

Dropbox 변경 사항을 폴링할 주기

DB_PATH

아니요

~/.dropbox-transcripts-mcp/transcripts.db

로컬 SQLite 데이터베이스 경로

파일 명명 규칙

대본 파일은 게스트 이름.txt 형식으로 지정해야 합니다. 파일 이름(.txt 제외)은 get_episode에서 사용되고 list_episodes에 표시되는 에피소드 식별자가 됩니다.

예시: Adam Fishman.txt, Elena Verna 2.0.txt

사용 가능한 도구

도구

설명

list_episodes_tool

마지막 동기화 시간과 함께 인덱싱된 모든 에피소드 나열

get_episode_tool

게스트 이름으로 전체 대본 가져오기 (부분 일치 지원)

search_transcripts_tool

강조 표시된 스니펫과 함께 전체 텍스트 검색. 따옴표로 묶인 구문, AND/OR, 접두사 와일드카드(retain*) 지원

sync_tool

수동으로 Dropbox 동기화 트리거

라이선스

MIT

Available Tools

4 tools
get_episode_toolA

Get the full transcript for an episode by guest name. Supports partial matches: 'Fishman' will find 'Adam Fishman'.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Discloses partial match behavior but lacks details on auth, rate limits, or side effects. Adequate but not comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. Purpose and key behavior stated efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Tool is simple (1 param, output schema exists). Description covers how to use and partial match behavior; output schema handles return format details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage; description compensates by specifying 'guest name' and giving a concrete example of partial matching, adding essential meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb ('Get'), resource ('full transcript'), and method ('by guest name'). Distinguishes from siblings like list_episodes_tool, search_transcripts_tool, sync_tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Implicitly states when to use: when you have a guest name and need a transcript. Lacks explicit exclusions or alternatives, but context from sibling names makes it clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_episodes_toolA

List all available podcast transcript episodes.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It only states 'list all available' without disclosing behavioral traits (e.g., pagination, rate limits, whether it's a snapshot). Minimal transparency beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence that is front-loaded with the essential purpose. Every word earns its place with no verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, output schema exists), the description is mostly adequate. It could hint at the return structure (list of episodes), but the output schema covers that. Missing details like order or limits are minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, and schema coverage is 100%. Baseline for zero parameters is 4. The description adds context about the resource type but does not need to elaborate further.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'List' and the resource 'all available podcast transcript episodes'. It distinguishes from siblings like get_episode_tool (single episode) and search_transcripts_tool (search).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for retrieving all episodes but offers no explicit guidance on when to use this tool versus alternatives like get_episode_tool or search_transcripts_tool. No when-not or prerequisite information is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_transcripts_toolA

Full-text search across all transcript content. Returns matching episodes with highlighted snippets. Supports quoted phrases, AND/OR operators, and prefix wildcards (e.g. 'retain*').

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description discloses query syntax features (quoted phrases, operators, wildcards), which is helpful. However, it omits other behavioral aspects like whether it is read-only, pagination behavior, or performance implications.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences: purpose, output, and supported features. No superfluous information, well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema (not shown) and simple parameters, the description covers purpose, output type, and query syntax. It lacks details on result ordering or pagination, but overall sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, so the description must compensate. It explains query capabilities but does not describe the limit parameter beyond its default. Partial compensation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it performs full-text search across all transcript content and returns matching episodes with highlighted snippets. It distinguishes itself from sibling tools like get_episode, list_episodes, and sync by specifying search capabilities.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description does not mention when not to use it or refer to sibling tools for specific use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sync_toolA

Manually trigger a sync from Dropbox to update the local transcript index.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses the operation (sync, update index) but does not mention potential side effects, auth requirements, idempotency, or if it's a long-running operation. Moderate transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One sentence that is front-loaded with the action and completely captures the tool's purpose without any fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple tool with no parameters and an output schema (though not detailed). Description is complete enough for a trigger tool; it could note if async or idempotent, but not necessary for basic use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters in schema, and schema coverage is 100%. Baseline for 0 parameters is 4. Description adds no parameter info because none exist, but that is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action (trigger sync), source (Dropbox), and effect (update local index). Distinguishes from siblings which deal with episodes and transcripts, not sync operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Manually trigger a sync', implying when to use: when the local index needs updating from Dropbox. Does not mention when not to use or provide alternatives, but context from sibling tools helps.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.1.0
    • First observedget_episode_tool
    • First observedlist_episodes_tool
    • First observedsearch_transcripts_tool
    • First observedsync_tool

TDQS

A4.1/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: listing episodes, retrieving a specific transcript, full-text search, and triggering a sync. No overlap or ambiguity.

Naming Consistency4/5

Most tools follow a verb_noun_tool pattern (get_episode_tool, list_episodes_tool, search_transcripts_tool, sync_tool). However, there is inconsistency in pluralization: 'get_episode' (singular) vs. 'list_episodes' and 'search_transcripts' (plural).

Tool Count5/5

Four tools is well-scoped for a server focused on podcast transcripts. Each tool serves a necessary function without redundancy or deficiency.

Completeness5/5

The tool set covers all core operations for a transcript reader: listing available episodes, retrieving a specific transcript, searching across content, and syncing the index. No obvious gaps for the intended use case.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    An MCP server that makes Claude Code conversation history searchable and proactively useful by indexing past sessions with hybrid BM25+TF-IDF search, extracting decisions and solutions, and auto-injecting relevant project context at session start.
    9
    7 npm
    66
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server that indexes Claude.ai chats and local Claude Code sessions, enabling semantic and keyword search across all your conversations with Claude.
    6
    28 PyPI
    5
    MIT