argo

104Stars6Forks9Issues0Watchers

Integrate Argo multilingual search

Language
Python
License
MIT
Branch
main
dsh-ecosystemdsh-plugin

Install

$ dsh plugin --profile web add github:taxueseek/argo

Run the command above in your terminal to install this plugin via the dsh CLI. You can switch Profile in the top-right corner. New to dsh? Read the beginner tutorial

One-Sentence Positioning

Integrate Argo multilingual search and evidence verification MCP into DSH, enabling the model to directly invoke 10 web search, scraping, and deep research tools in conversations, outputting concise JSON instead of long web pages.

Core Capabilities

  • Unified Search: Automatic routing by language, domain, and intent; multi-engine parallel recall with RRF fusion; outputs concise JSON with authority, evidence density, and timeliness scores
  • Deep Research: Splits complex problems into multiple sub-questions, multi-source parallel collection, provides gap hints for missing evidence
  • Intelligent Scraping & Site Crawling: HTTP-first, upgrades to browser when anti-scraping is detected; supports BM25 focused extraction, table and JSON-LD structured extraction
  • Document & Local Search: Converts PDFs to Markdown, web pages to images; offline scanning of local code/notes/skill libraries
  • Social Platform Search: Covers Hacker News, Zhihu, Bilibili, V2EX, supports both post list and public opinion aggregation modes
  • Intent Disambiguation: Identifies polysemous terms like "苹果" (Apple/Python), provides search strategy suggestions

Technical Implementation

  • Languages: Python 3.10+ (core) + Node.js 18+ (npx launch shell only)
  • Key Dependencies: PyYAML (required), curl_cffi (optional), pdfplumber or PyMuPDF (for PDF), Chrome / Playwright (for screenshots and JS-rendered pages)
  • Architecture Pattern: DSH pulls npx -y github:taxueseek/argo via @deepseek-ai/dsh-mcp-client in stdio mode; the Node shell bin/argo.js spawns Python scripts/mcp_server.py; the 10 tools' schema unique source of truth is in scripts/mcp_tools.py
  • Entry Files: bin/argo.js (Node launcher) / scripts/mcp_server.py (MCP protocol aggregator) / packages/dsh-plugin/cordis.patch.yml (DSH bundle patch, unique source declaring registration IDs for 10 mcp__argo__* tools with mcp-argo)

Applicable Scenarios

Simply enable this plugin in DSH when conducting research, checking market data, reading academic papers, scraping anti-scraping sites, or performing cross-language Q&A. If you want the model to not just do generic web title searches every time, but directly get concise results with credibility scores and be able to split sub-questions for deep research as needed, this capability set is exactly what you need.

Prerequisites and Compatibility

DependencyMinimum VersionDescription
Node.js>=18Required only for npx entry
Python>=3.10MCP core language; macOS comes with 3.9 which won't work, set ARGO_PYTHON to point to 3.10+
PyYAMLAnyOnly hard dependency, install script will auto-install
PlatformmacOS / LinuxDeclared in package.json os field; Windows can work via python fallback, optional browser capabilities require graphical environment
Native ModulesNoneNo node-gyp module dependencies

Installation

dsh plugin --profile web add github:taxueseek/argo

Configuration Options

ConfigTypeDescriptionDefault
TAVILY_API_KEYEnvironment VariableEnable Tavily engine (international/semantic search), skipped if not setNot set
BOCHA_API_KEYEnvironment VariableEnable Bocha engine (Chinese AI search), skipped if not setNot set
METASO_API_KEYEnvironment VariableEnable Metaso engine (Chinese AI search), skipped if not setNot set
ZHIHU_ACCESS_SECRETEnvironment VariableEnable Zhihu official API source, falls back to no-key if not setNot set
BRAVE_API_KEY / FELO_API_KEY / GITHUB_TOKEN / WEB_SEARCH_API_KEY / ANYSEARCH_API_KEY / OCTEN_API_KEYEnvironment VariablesOptional additional engine credentialsNot set
ARGO_PYTHONEnvironment VariableCustom Python interpreter path (read by npx entry)python3 (Windows: python)
Budget Mode modefast / auto / deep / budgetfast prioritizes free; auto is cost-aware; deep prioritizes quality; budget quota controlauto
Search Depth depthfast / balanced / deepControls number of recall engines and reranking strategyfast
Time Window since / untilStringFormat like 7d or 2026-08-01, pushed down to engines supporting time windowsNone
Cache Pathcache.db_path (config.yaml)SQLite cache location~/.cache/unified-search/cache.db
Advanced Browser Tool argo_fetch's use_browserBooleanWhether to force anti-detection browser, auto-upgrades on HTTP failurefalse

FAQ

Q: What can I see in DSH after installation?

A: After restarting dsh web, the model side will have 10 additional capabilities prefixed with mcp__argo__, including unified search, local file search, deep research, credibility assessment, intent disambiguation, page scraping, site crawling, page screenshots, PDF extraction, and social platform search.

Q: Do I need to configure API Keys to use it?

A: No. Argo has built-in many free and local engines; when no Key is configured, it automatically uses zero-cost paths; configuring Tavily, Bocha, Metaso, etc. Keys will improve some engine result quality.

Q: Does it depend on Python?

A: Yes. The Node launcher is just a shell; the actual logic runs in the scripts/mcp_server.py Python process. The machine needs Python 3.10+ with PyYAML installed. When macOS comes with 3.9 which won't work, use ARGO_PYTHON to point to a 3.10+ interpreter.

Q: How do I use local source code instead of pulling from GitHub?

A: In the profile's cordis.patch.yml user layer, override the default configuration with the same ID (mcp-argo), change command from npx to python3 and point to the local scripts/mcp_server.py path; Cordis uses last-writer-wins for the same ID.

Q: Where is data stored? How to clear cache?

A: Query cache is written to ~/.cache/unified-search/cache.db (SQLite), TTL is tiered by domain (finance 5 minutes, news 10-15 minutes, research 2-24 hours). Login-state results are isolated and not stored in public cache. Delete the file to clear cache.

Q: Why does social platform search sometimes return empty?

A: Hacker News / Zhihu, Bilibili, V2EX work with zero key; Twitter, Reddit, Weibo, Xiaohongshu require external login state or third-party API, will fall back to empty when not configured. Social results don't enter public cache to avoid polluting main search.

Q: Are argo_fetch and argo_pdf the same thing?

A: No. argo_fetch grabs HTML pages (HTTP-first, upgrades to browser when anti-scraping detected), returns "PDF not supported" directly when encountering PDF Content-Type; for PDFs use argo_pdf, which uses pdfplumber or PyMuPDF to convert PDF to Markdown.

Q: Which platforms does this plugin support?

A: The os field in package.json declares darwin and linux; on Windows the npx entry automatically falls back to python command, the Python MCP core itself is cross-platform, but optional capabilities like Chrome screenshots depend on graphical environment.

Difficulty Level

Beginner — one-line install command works, free engines are sufficient for daily use; advanced users can explore budget mode, time windows, deep research, and login-state sub-skills (ego-search, off by default).

Known Issues and Limitations

  • The lightweight HTTP fetcher (scripts/fetch.py) returns PDF not supported error directly when encountering PDF Content-Type; to handle PDFs you must use the separate argo_pdf tool
  • Twitter / Reddit / Weibo / Xiaohongshu in argo_social_search depend on external login state or third-party API, returns empty when not configured; zero-key available platforms are only Hacker News, Zhihu, Bilibili, V2EX
  • The os field in package.json only declares macOS and linux; on Windows bin/argo.js uses process.platform === 'win32' to switch to python command as fallback, but optional browser scraping capabilities are unavailable without graphical environment
  • When argo_fetch uses anti-detection browser downgrade (Patchright/Cloudflare bypass), it depends on system-installed Chrome or Playwright; missing时会从 HTTP 抓取失败回退为空
  • No TODO / FIXME / HACK comments found in source code; the above limitations come from README, mcp_tools.py schema descriptions, and package.json field declarations