多服务跨平台搜索工具

MCP Workspace Finder 是一个通过 Model Context Protocol (MCP) 在 Google Drive、Slack 和 GitHub 之间进行跨平台搜索的命令行工具 (CLI),支持本地运行和交互式 REPL 模式。

  • by nob-ogura
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 nob-ogura/mcp-workspace-finder

使用说明

MCP工作区查找器(PoC)

Google Drive、Slack、GitHub 的Model Context Protocol (MCP) 通过搜索横断面CLI 的,之PoC。不使用容器,只在本地运行Typer/Rich 基本REPL 和非交互命令。

前提条件

  • 在主机上Python 3.10 已安装以上内容(例如: pyenv 的3.10系)。
  • Poetry 的规格化距离的幂函数pipx install poetry 来修改标记元素的显示属性。
  • 仅假定本地环境。Docker/不支持容器。

初始设置

  1. 将显示clone 导航到目录。
  2. Poetry 的Python 3.10+ 的规格化距离的幂函数 poetry env use python3.10)。
  3. 安装依赖关系: poetry install。
  4. 创建环境文件: cp .env.example .env至少 OPENAI_API_KEY, SLACK_USER_TOKEN, GITHUB_TOKEN, DRIVE_TOKEN_PATH(OAuth 标记文件的路径)。机密信息保持在本地.env 和 token.json 啊gitignore 完成。.env 啊 文件存在 单击功能区上--mock 未指定、ALLOW_REAL=1、servers.yaml 的 mode: real 中所述修改相应参数的值。
  5. MCP 部署服务器(Slack/GitHub/Drive) servers.yaml 的设置(详情请参阅“MCP服务器的安装”)。即使令牌或验证文件的路径与默认路径不同 servers.yaml 进行调试。

MCP 安装服务器

CLI 独立于每个服务MCP 将服务器作为子进程启动。使用以下方法之一准备服务器servers.yaml 来定义自定义外观。

Slack MCP服务器(Go製)

  1. Go 1.21 准备以上内容。如果未导入macOS 那么 brew install go、Ubuntu 那么 sudo apt-get install golang 用等放入。go version 确认1.21以上,必要的话 export PATH="$(go env GOPATH)/bin:$PATH" 的 ~/.zshrc 等追记 ~/go/bin 的PATH 贯彻。
  2. 安装: go install github.com/korotovsky/slack-mcp-server/cmd/slack-mcp-server@latest
  3. 确定二进制位置: $(go env GOPATH)/bin/slack-mcp-server(通常是 ~/go/bin)。GitHub Releases 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
  4. servers.yaml 的,之 slack.exec 中所述方法的备选方法。

GitHub MCP服务器(TypeScript製)

  1. Node.js 18+ 准备。
  2. 建议:npx 执行最新操作
    npx -y @modelcontextprotocol/server-github
    • pip install github-mcp-server 像...一样的PyPI 因为包不存在npm 进行动态观察时的轴心点。
  3. 如果想通过定期使用高速启动,则全局安装
    npm install -g @modelcontextprotocol/server-github 的 mcp-server-github 因为进入了servers.yaml 的,之 github.exec 的 mcp-server-github指定(或绝对路径)。
  4. 验证:PAT 的 GITHUB_TOKEN 将条目添加到文档注册表CLI 也 GITHUB_TOKEN ),模板名称将采用不同的格式。servers.yaml 的 env: 中所述修改相应参数的值。
  5. 例: servers.yaml 的npx 使用时
    github:
      exec: npx
      args:
        - -y
        - "@modelcontextprotocol/server-github"
      env:
        GITHUB_TOKEN: ${GITHUB_TOKEN}
    

Google Drive MCP Server (Node 制)

  1. Node.js 18+ 准备。
  2. 执行方法有两种:
    • 全局安装: npm install -g @modelcontextprotocol/server-gdrive 之后servers.yaml 的 exec: server-gdrive 视为。
    • npx 実行(推奨・更新追従が容易): servers.yaml 设定如下。
      exec: npx
      args:
        - -y
        - "@modelcontextprotocol/server-gdrive"
      
  3. 首次启动前OAuth 在流程中 token.json 中所述修改相应参数的值。GDRIVE_OAUTH_PATH=$GOOGLE_CREDENTIALS_PATH GDRIVE_CREDENTIALS_PATH=$DRIVE_TOKEN_PATH npx -y @modelcontextprotocol/server-gdrive auth 在浏览器中允许后保存的 secrets/token.json 的 DRIVE_TOKEN_PATH 中所述修改相应参数的值。

実环境用の通信情报の取得手顺

ALLOW_REAL=1 且 --mock 未指定的最小烟雾(搜索API 进行动态观察时的轴心点。获取后 .env 和 servers.yaml 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。

  • Slack(用户令牌/xoxp-)

    1. https://api.slack.com/apps创建新的应用程序(可从scratch)。
    2. OAuth和权限 → 用户令牌范围 的 search:read, channels:history, groups:history, im:history, users:read 中所述修改相应参数的值。
    3. 安装到工作区 查看项目中可用的所有族User OAuth Token(xoxp- ),然后单击.env 的 SLACK_USER_TOKEN=<xoxp-...> 缺少支持的问题。
    4. 任意: curl -H "Authorization: Bearer $SLACK_USER_TOKEN" "https://slack.com/api/search.messages?query=smoke" 在200/ok:true 确认后通信准备完成。
  • GitHub (PAT / repo 仅读取)

    1. GitHub→ 设置 → 开发人员设置 → 个人访问令牌 中描述的相应参数的值。
      • Fine-grained 是:目标org/repo 的规格化距离的幂函数Repository permissions 的 内容:只读, 元数据:只读, 问题/拉取请求:只读 设定为程度。
      • Classic 如果: repo 授予范围(不需要其他)。
    2. 已提交的令牌(ghp_ 或 github_pat_ 以…开头 .env 的,之 GITHUB_TOKEN 中选择所需的墙类型。
  • 谷歌云端硬盘(OAuth令牌.json)

    1. Google Cloud Console 在中创建项目,然后单击OAuth 设置同意画面(Internal/External中的任一个)。
    2. 「API 和服务-在库中 Google Drive API 中所述修改相应参数的值。
    3. 认证情报 从OAuth 客户机ID(应用程序类型:桌面),下载的客户端密码 secrets/credentials.json 中选择所需的墙类型。
    4. .env 的 GOOGLE_CREDENTIALS_PATH=secrets/credentials.json、DRIVE_TOKEN_PATH=secrets/token.json 选项卡页面上创建或编辑条目servers.yaml 中描述的相应参数的值。
    5. 只有第一次在浏览器中实施同意流程 token.json 来定义自定义外观。modelcontextprotocol 的,之PyPI 版中有gdrive 因为不包含服务器,所以公式Node 版本 @modelcontextprotocol/server-gdrive 使用。示例: GDRIVE_OAUTH_PATH=$GOOGLE_CREDENTIALS_PATH GDRIVE_CREDENTIALS_PATH=$DRIVE_TOKEN_PATH npx -y @modelcontextprotocol/server-gdrive auth 已显示URL 批准 secrets/token.json 中所述修改相应参数的值。
    6. 为烟雾确定一个可搜索的验证文件夹(已授予访问权限)。

CLI 使用方法

  • REPL 启动(TTY): poetry run python -m app
    • 没有实键时,警告后自动回退至拖车。
  • 帮助/非交互模式: poetry run python -m app --help。
  • 强制取消: poetry run python -m app --mock。
  • 实API 允许调用:环境变量 ALLOW_REAL=1 设置(--mock 指定时莫克优先)。在这种状态下 servers.yaml 的 mode: real 中描述的相应参数的值.env 如果存在,启动时 .env 求值时使用曲面法线的原始方向。在其他情况下 .env 将条目添加到文档注册表。

第3阶段:实际环境烟雾(基于接收)步骤总结

启动时Slack/GitHub/Drive 的real 日志中只有一次 real smoke enabled 中描述的相应参数的值。

  1. 统一材料(所有服务通用)
  • .env 的 OPENAI_API_KEY, SLACK_USER_TOKEN (xoxp-), GITHUB_TOKEN (PAT), GOOGLE_CREDENTIALS_PATH, DRIVE_TOKEN_PATH 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
  • servers.yaml 在工作空间的边缘 mode 的 real (保留默认值)OK)。
  1. Slack/GitHub 的,之auth_files 满足
  • servers.yaml 的,之 auth_files 的 secrets/slack_token.json, secrets/github_token.json 求值时使用曲面法线的原始方向。由于当前服务器不使用内容,所以可以通过空文件。
    mkdir -p secrets
    touch secrets/slack_token.json secrets/github_token.json
    chmod 600 secrets/slack_token.json secrets/github_token.json
    
  • 服务器安装输出高速缓存时,在放置了上述空文件的状态下 ALLOW_REAL=1 poetry run python -m app如果执行一次(或服务器二进制单体)secrets/*.json 中选择另一种天花板类型。
  1. Drive 准备实际服务器
  • servers.yaml 中描述的相应参数的值。
    exec: npx
    args:
      - -y
      - "@modelcontextprotocol/server-gdrive"
    
  1. 実行
  • ALLOW_REAL=1 poetry run python -m app(--mock )。
  1. 确认
  • 在启动日志中 real smoke enabled 只出一次。
  • 模式显示 slack=real, github=real, drive=real 的总和。如果有一个缺损mock 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。
  1. 故障排除
  • Slack/GitHub 的mock 将显示 secrets/slack_token.json, secrets/github_token.json 查看项目中可用的所有族。空文件。
  • Drive 的timeout 预安装或READINESS_TIMEOUT 暂时延长,等待首次下载。

如何执行实际环境搜索烟雾(任务3)

使用实际密钥搜索3个服务Tool 一次一次地吸烟CLI 中所述修改相应参数的值。Slack 那么DM/Private 中描述的场景,使用以下步骤创建明细表,以便在概念设计中分析体量的体积。

  1. 满足前提
    • ALLOW_REAL=1 选项卡页面上创建或编辑条目--mock 不加。
    • .env 和 servers.yaml 的明细栏样式中定义的设置。
    • GitHub 将条目添加到文档注册表 GITHUB_SMOKE_REPO=owner/repo 中所述修改相应参数的值。
    • 可选:如果想改变搜索关键词 SLACK_SMOKE_QUERY / GITHUB_SMOKE_QUERY / DRIVE_SMOKE_QUERY 中所述修改相应参数的值。
  2. 実行
    • 直接実行: poetry run python -m app smoke --report reports/smoke.json
    • 或包装器: ALLOW_REAL=1 scripts/smoke_real.sh --report reports/smoke.json
  3. 结果确认
    • 成功的时候 real smoke passed 将显示每个服务的 status: ok 和Slack 的,之 dm_hit: true 将条目添加到文档注册表。
    • 失败的时候 real smoke failed 查看项目中可用的所有族。结果文件有日期JSON 中选择另一种天花板类型。

笔记本

  • 令牌/认证信息保持在本地.env、token.json、secrets/ 属下不承诺。
  • Docker/不使用容器Poetry 创建的虚拟环境(.venv 或 .poetry-env),模板名称将采用不同的格式。
  • 没有实际钥匙CI 在进行风的检查的情况下 poetry run pytest -m mock。实际模式的测试 ALLOW_REAL=1 缺少支持的问题。