MCP呼叫记录服务器
MCP(模型上下文协议)服务器,使用 人工智能驱动的结构化摘要此服务器使业务利益相关者能够通过Claude Desktop和Microsoft Copilot 365 Studio使用自然语言查询客户端呼叫记录。
现在由OpenAI GPT-4-turbo提供支持 以获得一流的摘要质量和结构化提取。
架构图(使用Gemini Nano Banana生成)
数据流
在我们确定了可以在嵌入级别进行的改进后,这是数据流的改进版本。
特性
- 自动索引:监视VTT转录文件的目录,并在后台自动为其建立索引
- AI驱动的摘要:使用OpenAI GPT-4-turbo生成具有呼叫类型、参与者、公司/企业、关键主题、行动项目和决策的完美结构化摘要
- 高级嵌入:OpenAI text-embedding-3-small(1536维),提供卓越的语义搜索质量
- 自然语言查询问“总结美国银行销售电话”或“Capital One电话中的行动项目是什么?”
- 100%一致的格式:GPT-4-turbo即使对于长转录本(860+行,286+段)也能保持完美的结构
- 所有参与者已捕获:绝不会错过会议参与者-所有发言者都被正确识别
- 无幻觉:正确显示缺失信息的“未知”,而不是捏造数据
- 单工具界面:简单
query_transcripts处理所有查询的工具(纯语义搜索)
服务器使用:
- OpenAI GPT-4涡轮:生成结构化摘要的一流法学硕士(每份成绩单约0.01-0.05美元)
- OpenAI嵌入:text-embedding-3-small,用于1536维语义搜索(每个转录本约0.0001美元)
- 色度:矢量数据库;Node.js客户端连接到 ChromaDB服务器 奔跑在
http://localhost:8000。持久数据存储在启动Chroma服务器时配置的目录中(请参阅 CHROMADB_SETUP.md). - 文件监视器(chokidar):自动检测新的、更改的或删除的VTT文件并为其建立索引
- MCP协议:AI辅助集成的标准协议(stdio传输)
先决条件
- Node.js 18+
- OpenAI API密钥(在https://platform.openai.com/api-keys)
- 5美元+OpenAI学分(涵盖约200份成绩单)
- 包含VTT转录文件的目录
- ChromaDB服务器 运行于
http://localhost:8000(参见 CHROMADB_SETUP.md)
安装
- 克隆或下载此存储库。
- 安装依赖项:
npm install- 构建TypeScript代码:
npm run build- 创建一个
.env项目根目录中的文件:
OPENAI_API_KEY=sk-proj-your-key-here
VTT_DIRECTORY=/path/to/vtt/transcript/files
CHROMA_DB_PATH=./chroma_db看 ENV_SETUP.md 有关详细的环境设置说明。
- 在运行MCP服务器之前,启动ChromaDB服务器(在单独的终端中)——请参阅 CHROMADB_SETUP.md.
配置
环境变量
MCP服务器从环境变量(例如从 .env 项目根目录中的文件):
| 变量 | 必填 | 描述 |
|---|---|---|
OPENAI_API_KEY | 是 | GPT-4-turbo摘要和嵌入的OpenAI API密钥 |
VTT_DIRECTORY | 是 | 包含VTT转录文件的目录路径 |
CHROMA_DB_PATH | No | Chroma服务器数据的路径(默认值: ./chroma_db) |
成本:平均每份成绩单约0.02美元(因长度而异)。您的5美元信用额度约为200份成绩单。
Claude桌面设置
- 编辑您的Claude Desktop配置文件:
- macOS: ~/Library/Application Support/Claude/claude_desktop_config.json - 视窗: %APPDATA%\Claude\claude_desktop_config.json - Linux: ~/.config/claude/claude_desktop_config.json
- 添加MCP服务器(使用 绝对的 通往
dist/index.js):
{
"mcpServers": {
"call-recording": {
"command": "node",
"args": ["/absolute/path/to/MCP_Call_Recording/dist/index.js"]
}
}
}示例配置位于 config/claude-desktop.json.
- 重新启动克劳德桌面。
- 服务器将加载
.env,索引中的现有VTT文件VTT_DIRECTORY,并注意新的、更改的或删除的文件。
Microsoft Copilot 365 Studio安装程序
服务器当前正在使用 标准 运输。对于Copilot Studio,您需要将其作为HTTP MCP服务器运行(例如,在中添加HTTP传输 src/index.ts 或在适配器后面运行)。
作为参考, config/copilot-studio.json 说明了可能的结构(名称、描述、传输类型、环境变量)。集 VTT_DIRECTORY, CHROMA_DB_PATH,以及 OPENAI_API_KEY 在您的部署环境中。
用法
配置后,您可以向Claude Desktop(或设置HTTP后的Copilot Studio)询问有关通话记录的问题,例如:
- “上次与美国银行通话时讨论的主要风险是什么?”
- “确定上次与美国银行销售部客户通话中确定的最大风险”
- “本月与Acme Corp的电话会议做出了哪些决定?”
- “总结1月15日与TechCorp通话的要点”
服务器将:
- 为您的问题生成嵌入
- 跑a 语义搜索 在矢量数据库中(无元数据过滤)
- 返回包含相关片段、元数据(客户、日期、发言人)和相关性得分的格式化答案
工具: query_transcripts
question(必填):关于成绩单的自然语言问题。limit(可选,默认值:10):返回的最大结果数。minScore(可选,默认值:0.0):最小相关性得分(0-1)。以下部分不包括在内。
运作原理
自动索引
启动服务器时:
- 扫描
VTT_DIRECTORY对于现有的.vtt文件 - 将每个文件解析为带有时间戳的片段
- 从文件名和VTT内容中提取元数据(客户端名称、日期、参与者、调用类型)
- 使用OpenAI GPT-4-turbo生成AI驱动的结构化摘要
- 使用OpenAI text-embedding-3-small(1536个维度)创建整个摘要的语义嵌入
- 在ChromaDB中存储摘要和嵌入以进行语义搜索
- 当文件监视器检测到新文件或更改的文件时,使用相同的管道
文件监视
服务器使用chokidar监视VTT目录:
- 新文件:自动索引
- 更改文件:重新索引(首先删除该文件的现有段)
- 已删除的文件:从数据库中删除该文件的段
查询处理
对于每个查询:
- 该问题使用OpenAI text-embedding-3-small嵌入(与索引使用的模型相同)
- Chroma通过嵌入相似度(余弦距离→ 转换为0-1分)
- 结果按以下方式过滤
minScore,按分数排序,并使用摘要文本和元数据进行格式化
重新索引
如果需要刷新一个文件或整个目录的索引:
- 单个文件 (强制重新索引一个VTT文件):
npm run reindex -- path/to/file.vtt
# or: tsx reindex-file.ts path/to/file.vtt- 所有文件 在
VTT_DIRECTORY(强制重新索引所有内容):
npm run reindex-all
# or: tsx reindex-all.ts这两个脚本都使用您的 .env (例如。 VTT_DIRECTORY, CHROMA_DB_PATH, OPENAI_API_KEY).Chroma服务器必须正在运行。
备注:重新索引需要OpenAI API信用额度(每份成绩单约0.02美元)。
文件结构
MCP_Call_Recording/
├── src/
│ ├── index.ts # Entry point: init services, index existing files, start file watcher, start MCP server
│ ├── server.ts # MCP server setup and tool registration (query_transcripts)
│ ├── tools/
│ │ └── query.ts # query_transcripts tool (embedding + vector search + format answer)
│ ├── services/
│ │ ├── vttParser.ts # VTT file parsing
│ │ ├── summaryService.ts # OpenAI GPT-4-turbo for structured summaries
│ │ ├── embeddingService.ts # OpenAI text-embedding-3-small (1536-dim)
│ │ ├── vectorDb.ts # Chroma client (connects to http://localhost:8000)
│ │ ├── metadataExtractor.ts # Metadata from filename and VTT content
│ │ ├── indexer.ts # Index one file or directory into Chroma
│ │ └── fileWatcher.ts # chokidar-based file watcher
│ ├── types/
│ │ └── transcript.ts # TypeScript interfaces
│ └── utils/
│ └── chunking.ts # Legacy chunking utilities (now using full-transcript summaries)
├── config/
│ ├── claude-desktop.json # Example Claude Desktop MCP config
│ └── copilot-studio.json # Example structure for Copilot Studio (HTTP not implemented)
├── reindex-file.ts # Script to reindex a single VTT file
├── reindex-all.ts # Script to reindex all VTT files in VTT_DIRECTORY
├── check-embeddings.sql # Optional: SQL for inspecting Chroma SQLite DB (chroma_db)
├── start_chroma.sh # Helper to start Chroma server (see CHROMADB_SETUP.md)
├── start_chroma.py
├── package.json
├── tsconfig.json
├── CHROMADB_SETUP.md
└── README.md发展
运行(生产构建)
npm run build
npm start开发模式(tsx,无构建步骤)
npm run dev手表(根据变化重建)
npm run watch重新索引
npm run reindex -- vtt_files/SomeFile.vtt
npm run reindex-allVTT文件格式
服务器需要WebVTT文件(.vtt 扩展)。例子:
WEBVTT
00:00:00.000 --> 00:00:05.000
Hello, this is a transcript segment.
00:00:05.000 --> 00:00:10.000
This segment has a speaker identifier.元数据抽取
元数据来源于:
- 文件名模式:
{ClientName}_{Date}_{Type}.vtt\
例子: BankOfAmerica_2026-01-15_Sales.vtt
- VTT标头:注释注释或其他标头元数据
- 文件修改时间:在文件名或内容中找不到日期时回退
故障排除
服务器无法启动
- 确保在中设置了所有必需的环境变量
.env(尤其是OPENAI_API_KEY和VTT_DIRECTORY). - 验证您的OpenAI API密钥是否有效并具有信用。
- 确保 ChromaDB服务器 正在运行
http://localhost:8000(参见 CHROMADB_SETUP.md). - 在Claude Desktop配置中,使用 绝对的 通往
dist/index.js. - 检查stderr/logs是否有错误。
文件未被索引
- 确认
VTT_DIRECTORY指向正确的目录和文件.vtt扩展。 - 检查文件权限和stderr是否存在索引错误。
- 对于单个文件,请尝试:
npm run reindex -- path/to/file.vtt.
搜索结果不佳或为空
- 确保成绩单是有效的VTT并且已被索引(查看启动日志或使用重新索引脚本)。
- 降低
minScore(例如0.0)以查看更多结果;工具默认值为0.0。 - 检查OpenAI API的使用情况以确认正在生成嵌入。
OpenAI API问题
- 费率限制:OpenAI有速率限制。如果为多个文件编制索引,则按顺序处理它们。
- 成本监控:请在以下网址查看您的使用情况https://platform.openai.com/usage
- 预算警报:将限制设置为https://platform.openai.com/settings/organization/billing/limits
安全注意事项
- API密钥安全:确保您的OpenAI API密钥的安全。永不承诺
.env文件到版本控制。 - 成本控制:在您的OpenAI帐户中设置使用限制,以防止意外收费。
- 数据隐私:成绩单被发送到OpenAI进行处理。确保符合您的数据政策。
- 验证并约束文件路径以避免目录遍历。
- 根据需要对用户查询输入进行消毒或限制。
- 考虑对生产或HTTP部署进行速率限制和访问控制。
从Ollama移民
如果要从以前的基于Ollama的版本升级,请参阅 docs/OPENAI_MIGRATION.md 获取完整的迁移说明。
许可证
麻省理工学院
