深度研究桌面扩展

Ollama Deep Researcher是一款桌面扩展,利用网页搜索和LLM合成技术进行高级主题研究,支持可配置的研究参数和状态跟踪。

  • by Cam10001110101
  • Python
  • 本地部署
  • 16 星标
  • 更新于
在 GitHub 查看 Cam10001110101/mcp-server-ollama-deep-researcher

使用说明

⛔ 已存档--此代码已移动

迁移到 mcpcentral平台monorepo 2026年7月23日(ADR-043)。

在这里工作: mcpcentral-io/mcpcentral → apps/deep-researcher/ 工人: mcpcentral-deep-researcher

此存储库是只读的,保留用于历史记录。看 DEPRECATED.md.


Olama Deep研究员DXT扩展

概述

Ollama深度研究员 是一个桌面扩展(DXT),它使用网络搜索和LLM合成来实现高级主题研究,由本地MCP服务器提供支持。它支持可配置的研究参数、状态跟踪和资源访问,旨在与DXT生态系统无缝集成。

  • 研究任何主题 使用网络搜索API(Tavily、Perplexity、Exa)和LLM(Ollama、DeepSeek等)
  • 配置 最大研究循环、LLM模型和搜索API
  • 跟踪状态 正在进行的研究
  • 获取研究成果 通过MCP协议作为资源

特性

  • 通过stdio实现MCP协议,以实现本地安全操作
  • 防御性编程:错误处理、超时和验证
  • 通过stderr进行日志记录和调试
  • 与DXT主机环境兼容

目录结构

.
├── manifest.json         # DXT manifest (see MANIFEST.md for spec)
├── src/
│   ├── index.ts         # MCP server entrypoint (Node.js, stdio transport)
│   └── assistant/       # Python research logic
│       └── run_research.py
├── README.md            # This documentation
└── ...

安装和设置

  1. 克隆仓库 并安装依赖项:

    git clone <your-repo-url>
    cd mcp-server-ollama-deep-researcher
    npm install
    
  2. 安装Python依赖项 对于助理:

    cd src/assistant
    pip install -r requirements.txt
    # or use pyproject.toml/uv if preferred
    
  3. 设置所需的环境变量 对于web搜索API:

    • 对于塔维利: TAVILY_API_KEY
    • 对于困惑: PERPLEXITY_API_KEY
    • 例如: EXA_API_KEY (点击此处获取您的https://dashboard.exa.ai/api-keys)
    • 可选: LANGSMITH_API_KEY, LANGSMITH_TRACING=true, OLLAMA_BASE_URL (默认为 http://localhost:11434)
    • 例子:
      export TAVILY_API_KEY=your_tavily_key
      export PERPLEXITY_API_KEY=your_perplexity_key
      export EXA_API_KEY=your_exa_key
      
    • 不想在磁盘上保存明文密钥? 看 可选:使用1Password保护机密 在......下面
  4. 构建TypeScript服务器 (如果需要):

    npm run build
    
  5. 在本地运行扩展进行测试:

    node dist/index.js
    # Or use the DXT host to load the extension per DXT documentation
    

用法

  • 研究一个主题:
    • 使用 research 工具与 { "topic": "Your subject" }
  • 获取研究状态:
    • 使用 get_status 工具
  • 配置研究参数:
    • 使用 configure 具有以下任一功能的工具: maxLoops, llmModel, searchApi

显现

看 manifest.json 获取完整的DXT清单,包括工具模式和资源模板。跟随 DXT MANIFEST.md.

日志记录和调试

  • 所有服务器日志和错误都输出到 stderr 用于调试。
  • 30分钟后,研究子进程将被终止,以防止挂起。
  • 无效请求和配置错误会返回清晰、结构化的错误消息。

安全与最佳实践

  • 所有工具模式在执行前都经过验证。
  • API密钥是web搜索API所必需的,并且从不记录。
  • MCP协议通过stdio用于本地安全通信。

测试与验证

  • 通过将扩展加载到DXT兼容主机中来验证它。
  • 确保所有工具调用都返回有效、结构化的JSON响应。
  • 检查清单是否加载,扩展是否注册为DXT。

故障排除

  • 缺少API密钥: 确保 TAVILY_API_KEY, PERPLEXITY_API_KEY,或 EXA_API_KEY 根据您使用的搜索API在您的环境中进行设置。
  • Python错误: 检查Python依赖关系并登录 stderr.
  • 超时: 研究子过程限制在30分钟内。

搜索API比较

  • 塔维利: 快速、全面的网络搜索,可提取原始内容
  • 困惑: 基于人工智能的搜索,带有自然语言摘要和引用
  • 考试: 针对具有亮点的语义搜索进行优化的神经搜索引擎

可选:使用1Password保护机密

如果你使用 1密码,您可以将明文API密钥从磁盘上保留下来,也可以将其从AI编码代理的上下文中保留下来。这是 选择加入和添加 --上面的明文设置保持不变。先决条件:1Password for Mac或Linux op CLI(brew install --cask 1password-cli),以及 sqlite3.

创建 一 1Password环境包含这八个变量(四个密钥是机密的;其余的是非机密配置):

变量 机密?
TAVILY_API_KEY, PERPLEXITY_API_KEY, EXA_API_KEY, LANGSMITH_API_KEY 是的
OLLAMA_BASE_URL, LANGSMITH_TRACING, LANGSMITH_ENDPOINT, LANGSMITH_PROJECT 没有

您可以导入现有 .env 直接创建环境。一旦它存在,请选择以下三种机制中的任何一种(A是AI编码模式;B是1Password推荐的MCP启动;C是无法运行的主机的回退 op).

A.已安装 .env +验证挂钩(将明文排除在LLM上下文之外)

1Password环境挂载本地 .env 作为UNIX命名管道(FIFO):内容按需流式传输给授权的阅读器 从未存储在磁盘上克劳德密码 PreToolUse 钩子在代理运行shell命令之前验证挂载。

  1. 在1Password桌面应用程序中,打开您的环境→ 目的地→ Local .env file → 选择文件路径→ .env → Mount.验证 cat .env (通过Touch ID批准;身份验证持续到1Password锁定)。
  2. .1password/environments.toml (committed)告诉hook要验证的路径-已设置为 mount_paths = [".env"].
  3. 在本地安装验证挂钩:
    git clone https://github.com/1Password/agent-hooks /tmp/agent-hooks
    /tmp/agent-hooks/install.sh --agent claude-code --target-dir .
    
    这创建了 .claude/claude-code-1password-hooks-bundle/ 和 .claude/settings.json (两者均被忽略)。钩子是 故障打开:如果1Password或 sqlite3 它允许执行,因此非1Password贡献者不受影响。
  4. 测试一下: echo '{"command":"echo test","workspace_roots":["'"$PWD"'"]}' | .claude/claude-code-1password-hooks-bundle/bin/run-hook.sh 1password-validate-mounted-env-files → {"permission":"allow"} 在解锁时, deny 锁定时带有修复说明。

B op run --environment 用于MCP服务器启动

复制 .mcp.json.1password.example → .mcp.json (gignored),更换 <ENVIRONMENT_ID> 使用您的环境ID,您的MCP主机将在启动时通过 op run非秘密配置保留在 env 阻断;秘密从环境中注入。模板使用完整路径 /opt/homebrew/bin/op 因为GUI启动的主机(例如Claude Desktop)不会继承您的shell $PATH --如果你的 op 住在别处(which op).

后退,如果你 op CLI缺少 --environment (the environment 子命令是1Password Environments测试版的一部分,在某些版本中不存在,例如。 op v2.34.x):使用 op run --env-file .env 在平原上 .env 的 op:// 而是引用。创建项目一次(op item create --vault "Your Vault" --category "Login" --title "ollama-deep-researcher" "TAVILY_API_KEY[concealed]=..." …),然后写一个gignored .env 引用并将启动器指向它:

# .env (gitignored) — references only, no plaintext
# TAVILY_API_KEY=op://Your Vault/ollama-deep-researcher/TAVILY_API_KEY
# …
op run --env-file .env -- node build/index.js

相同的 .env 也为Docker提供了支持(见下文),因此一个引用文件涵盖了两个启动路径。 op run 每次启动时提示Touch ID一次。

C op inject 模板 .mcp.json

对于无法使用的MCP主机 op run,复制 .mcp.json.template → 工作文件,替换 <vault> 使用您的保险库名称,然后将 {{ op://... }} 参考实际值:

op inject -i .mcp.json.template -o .mcp.json

op inject 使用filemode写入输出 0600. .mcp.json 被忽视了。在1Password中轮换机密后重新编译。(需要 op CLI,支持标准项目/保管库;这个 op run --environment 选项B中的表单还需要1Password Environments测试版。)

码头工人

docker-compose.yml 从环境中插值所有八个变量。运行作曲 op run --env-file 所以 op:// 参考文献 .env (或FIFO装载,如果你在A中设置了一个)被解析并转发到容器中:

op run --env-file .env -- docker compose up

参考文献