dropbox-transcripts-mcp
dropbox-transcripts-mcp
一个 MCP 服务器,用于索引存储在 Dropbox 中的纯文本播客转录稿,并使其能够在 Claude Code 中进行搜索。当添加新的转录稿时会自动同步。
功能
将 Dropbox 文件夹中的所有
.txt转录稿缓存到本地 SQLite 数据库中,并支持全文搜索 (FTS5)每隔 N 小时轮询一次 Dropbox,并自动索引新增或更改的文件
为 Claude Code 提供四个工具:列出、检索、搜索和手动同步
Related MCP server: transcript-search
前置要求
Python 3.10+
uv (macOS 上使用
brew install uv)一个 Dropbox 账户,且转录稿存放在某个文件夹中(默认:
/Podcasts/Lenny)
设置
1. 创建 Dropbox 应用
点击 Create app
选择 Scoped access 和 Full Dropbox
随意命名(例如
transcripts-mcp)在 Permissions 选项卡下,启用:
files.metadata.readfiles.content.read
从 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 应用密钥 | |
| 是 | Dropbox 应用密钥密码 | |
| 是 | OAuth 刷新令牌 | |
| 否 |
| Dropbox 中转录稿文件夹的路径 |
| 否 |
| 轮询 Dropbox 更改的频率 |
| 否 |
| 本地 SQLite 数据库路径 |
文件命名规范
转录稿文件应命名为 Guest Name.txt。文件名(不含 .txt)将成为 get_episode 使用的剧集标识符,并显示在 list_episodes 中。
示例:Adam Fishman.txt, Elena Verna 2.0.txt
可用工具
工具 | 描述 |
| 列出所有已索引的剧集及上次同步时间 |
| 按嘉宾姓名获取完整转录稿(支持部分匹配) |
| 带有高亮片段的全文搜索。支持带引号的短语、AND/OR 逻辑、前缀通配符 ( |
| 手动触发 Dropbox 同步 |
许可证
MIT
Available Tools
4 toolsget_episode_toolA
Get the full transcript for an episode by guest name. Supports partial matches: 'Fishman' will find 'Adam Fishman'.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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*').
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
4 tool updates
v0.1.0- First observed
get_episode_tool - First observed
list_episodes_tool - First observed
search_transcripts_tool - First observed
sync_tool
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: listing episodes, retrieving a specific transcript, full-text search, and triggering a sync. No overlap or ambiguity.
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).
Four tools is well-scoped for a server focused on podcast transcripts. Each tool serves a necessary function without redundancy or deficiency.
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
Related MCP Connectors
An MCP server that provides tools to discover and retrieve podcast episodes transcripts.
MCP server for structured access to Lenny Rachitsky podcast transcripts. For content creators.
MCP server for RiverScript, an AI transcription platform - fetches transcripts shared via a link.
Hosted MCP server connecting claude.ai, ChatGPT and other AI apps to your own computer
Related MCP Servers
- AlicenseAqualityCmaintenanceAn 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.97 npm66MIT
- FlicenseAqualityDmaintenanceA semantic search system for Claude Code transcript history, exposed as an MCP server so Claude Code can query its own past sessions.2-
- AlicenseNot gradedqualityDmaintenanceA local MCP server that indexes and searches your Claude Code conversation history with both keyword and semantic search, fully private and running locally.MIT
- AlicenseAqualityDmaintenanceMCP server that indexes Claude.ai chats and local Claude Code sessions, enabling semantic and keyword search across all your conversations with Claude.628 PyPI5MIT