{"repo": "0xmariowu/autosearch", "files": {"docs/mcp-channels-playbook.md": {"00ad54c022a3effb9e848bb70b158b79584f6014": {"t": 1785747435.862041, "n": 24403, "h": "283aa6865eb903f8", "c": "# AutoSearch Channel Research Final Playbook\n\n> Date: 2026-04-19\n> Coverage: mcpmarket.com research + hands-on testing + TikHub paid API integration\n> Positioning: This is the **final master guide**. The previously scattered docs (`mcp-channel-research.md` / `mcp-test-plan.md` / `mcp-test-results.md` / `mcp-no-cookie-inventory.md` / `mcp-final-summary.md` / `tikhub-smoke-test.md`) are consolidated here. All future channel decisions should start from this document.\n\n---\n\n## TL;DR\n\n**Three-tier conclusion**:\n\n1. **Free and usable without cookies**: Sogou WeChat, open-websearch (4 engines), Paper Search MCP (21 academic sources), PullPush (Reddit history), direct RSS reads, Jina Reader (some sites), and 13 official APIs.\n2. **5 of 8 hard targets were unblocked through paid TikHub**: Xiaohongshu, Weibo, Zhihu, Twitter/X, and Douyin. The remaining 3 (flaky Weibo upstream, Instagram/LinkedIn parameters not fully tuned) were not fully solved in this round.\n3. **Final architecture**: AutoSearch uses BYOK (users provide their own TikHub key) and declares dependencies with `requires: [env:TIKHUB_API_KEY]`. The base URL is read from an env var so environments can switch cleanly.\n\n**Cost anchor**: TikHub measured average cost is **$0.0036/request**. 1000 research-grade calls cost about $3.6/month.\n\n---\n\n## Part 1: No-Cookie Usable Inventory (41)\n\n### A. Hands-On PASS in This Round (9)\n\n| Option | Platform/Capability | Auth | Notes |\n|---|---|---|---|\n| **Sogou WeChat SERP** | WeChat Official Accounts | 🟢 None | `weixin.sogou.com/weixin?type=2&query=` |\n| **open-websearch fetch-web + readability** | Any page -> clean markdown | 🟢 None | Cleaned with the Mozilla Readability algorithm |\n| **open-websearch csdn** | CSDN technical blogs | 🟢 None | Native Chinese content |\n| **open-websearch duckduckgo** | DuckDuckGo | 🟢 None | Backup general search |\n| **open-websearch startpage** | Startpage (Google proxy) | 🟢 None | Backup general search |\n| **Paper Search MCP** | arXiv + PubMed + Semantic Scholar + OpenAlex + 17 other sources | 🟢 None | One-command access to 21 academic sources, MIT |\n| **PullPush** | Reddit history from 2005 to present | 🟢 None | Full-text `q=` search is broken; subreddit/time filtering works |\n| **Substack RSS** | Substack / Medium / independent blogs | 🟢 None | All sites expose `/feed` |\n| **Jina Reader** | Bilibili / weak anti-scraping sites | 🟢 None | Zhihu, Xiaohongshu, and Weibo are blocked |\n\n### B. Official APIs Known to Work (13, Integrated in AutoSearch or One-Line Integration)\n\n| Platform | Access Method | Limit |\n|---|---|---|\n| HackerNews Algolia | Official API | Unlimited |\n| Reddit public JSON | `/r/.json` | No login |\n| Stack Exchange API | Official | 300/day without key |\n| GitHub Public Search | Official API | 10/min without token |\n| Dev.to | Public API | No key |\n| npm / PyPI registry | Official | No key |\n| OpenReview API | Official | No key |\n| arXiv API | Official | No key |\n| Xueqiu / 36kr / InfoQ Chinese | Their web/API surfaces | No key |\n| Xiaoyuzhou | RSS / public pages | No key |\n| Bilibili public search API | Official | No login |\n| YouTube transcript | yt-dlp + whisper (local) | No key |\n| Crunchbase public pages | Public search | Limited |\n\n### C. New Categories Found on mcpmarket (AutoSearch Gaps) (11)\n\n| Option | Capability | Priority |\n|---|---|---|\n| [Wikipedia MCP](https://mcpmarket.com/server/wikipedia-1) | Full encyclopedia + summaries | 🔴 Highest |\n| [Wikidata](https://mcpmarket.com/server/wikidata) | SPARQL + entities | 🔴 Highest |\n| [Google Trends Explorer](https://mcpmarket.com/server/google-trends-explorer) | Trend signals | 🔴 Highest |\n| [Google News Trends](https://mcpmarket.com/es/server/google-news-trends) | News + trending terms | 🔴 High |\n| [USPTO](https://mcpmarket.com/server/uspto) | U.S. patents + trademarks | 🟡 As needed |\n| [Google Patents](https://mcpmarket.com/server/google-patents) | Global patents | 🟡 As needed |\n| [EPSS](https://mcpmarket.com/server/epss) | CVE + vulnerability scoring | 🟡 As needed |\n| [Cybersecurity CVE](https://mcpmarket.com/es/server/cybersecurity-2) | NVD database | 🟡 As needed |\n| [OpenStreetMap](https://mcpmarket.com/server/openstreetmap) | Maps + POI | 🟢 As needed |\n| [CoinGecko](https://mcpmarket.com/server/coingecko) | Cryptocurrency | 🟢 As needed |\n| [Open Meteo](https://mcpmarket.com/tools/skills/open-meteo-weather) | Global weather | 🟢 As needed |\n\n### D. Existing Channel Reinforcements (8)\n\n| Option | Reinforces | Notes |\n|---|---|---|\n| [Package Version](https://mcpmarket.com/ja/server/package-version) | npm/PyPI/Maven/Go/Swift/Docker Hub and 9 registries total | One MCP covers 9 registries |\n| [GitLab MCP](https://mcpmarket.com/server/gitlab) | Complements GitHub | Public repos need no token |\n| [Newsfeed](https://mcpmarket.com/server/newsfeed) | `search-rss` preset categories | Free |\n| [Trend Radar](https://mcpmarket.com/tools/skills/trend-radar) | HN + GitHub signal aggregation | Free |\n| [Steam Context](https://mcpmarket.com/server/steam-context) | Games category | Steam API key is free |\n| [Zillow](https://mcpmarket.com/server/zillow) | Real-estate category | Mostly no key |\n| [AI Job Hunting Agent](https://mcpmarket.com/es/server/ai-job-hunting-agent) | Indeed + Remotive jobs | Free |\n| Sogou WeChat MCP wrappers ([ptbsare](https://github.com/ptbsare/sogou-weixin-mcp-server) / [fancyboi999](https://github.com/fancyboi999/weixin_search_mcp)) | Official Accounts | Same underlying Sogou SERP |\n\n---\n\n## Part 2: Hard-Target Breakthrough Matrix\n\n### 🔴 Integrated (Paid TikHub, 5/8)\n\n| Platform | TikHub endpoint | Measured Data |\n|---|---|---|\n| Xiaohongshu | `GET /api/v1/xiaohongshu/web/search_notes?keyword=` | Claude 4.7 found 20 notes, including title/author/likes |\n| Zhihu | `GET /api/v1/zhihu/web/fetch_article_search_v3?keyword=` | LLM agent found 20 high-quality Q&A results |\n| Douyin | `GET /api/v1/douyin/web/fetch_video_search_result_v2?keyword=` | DeepSeek found 12 results, highest with 540K likes |\n| Twitter/X | `GET /api/v1/twitter/web/fetch_search_timeline?keyword=&search_type=Top` | 19 results, full fields (favorites/views/retweets) |\n| Bilibili | `GET /api/v1/bilibili/web/fetch_general_search?keyword=&order=totalrank&page=1&page_size=10` | 8 videos + play counts |\n\n### ⚠️ Not Fully Solved in This Round (3/8)\n\n| Platform | Status | Debug Direction |\n|---|---|---|\n| **Weibo** | TikHub upstream is flaky: `web/fetch_search` returns ok=1 but `cards` is intermittently empty; `web_v2/fetch_realtime_search` 400; `app/fetch_search_all` 422 | Ask support in TikHub Discord; try `web_v2/fetch_ai_smart_search` |\n| **Instagram** | `v2/general_search` returns 200 OK but all zeroes | Try `v2/search_hashtags` or targeted keywords (#hashtag / @username) |\n| **LinkedIn** | `web/search_jobs` returns 400, even with geocode | Check TikHub docs for demo parameters; may require a special geocode format |\n\n### 🟢 Truly Impossible Without Cookies\n\n**Facebook / Instagram public personal pages / Xiaohongshu private-account content / Twitter private accounts**: even TikHub requires account support. These are not core to the research scenario, so do not invest for now.\n\n---\n\n## Part 3: TikHub Field Notes\n\n### Basic Information\n\n- **Homepage**: https://tikhub.io · **API base**: `https://api.tikhub.io/api/v1/`\n- **Auth**: `Authorization: Bearer $TIKHUB_API_KEY`\n- **OpenAPI spec**: `GET https://api.tikhub.io/openapi.json` (1058 endpoints)\n- **Billing**: pay-per-request, average **$0.0036/request** (official marketing says starts at $0.001; measured cost is 3-4x higher)\n- **Free quota**: Daily check-in gives a small amount of free credit\n\n### Platform Coverage (Confirmed Working)\n\n16 platforms, 1000+ tools:\n```\nTikTok (204) · Douyin (247) · Instagram (82) · Xiaohongshu (71)\nWeibo (64) · Bilibili (41) · YouTube (37) · Kuaishou (33)\nZhihu (32) · LinkedIn (25) · Reddit (24) · WeChat · Twitter\nThreads · TikHub Utilities · Other\n```\n\n### Key Pitfalls (In the Order Encountered)\n\n1. **Registration requires email verification**. Without verification, every endpoint returns 403 \"email not verified\".\n2. **The free tier covers only some endpoints**. Xiaohongshu/Weibo/Twitter/Douyin all return 402 (Payment Required) until paid balance is > 0. Zhihu and Bilibili are covered by the free tier.\n3. **Do not use `web_v3` for Xiaohongshu**. `/xiaohongshu/web_v3/fetch_search_notes` returns 400. Use the older `/xiaohongshu/web/search_notes`.\n4. **Do not use `app/v3` for Douyin**. `/douyin/app/v3/fetch_video_search_result` returns 400. Use `/douyin/web/fetch_video_search_result_v2`; data is under `data.business_data[i].data` (two nested layers).\n5. **Weibo endpoints are unstable across versions**. `web_v2/fetch_realtime_search` returns 400; `app/fetch_search_all` returns 422; `web/fetch_search` returns 200 but `cards` fluctuates.\n6. **400 = upstream scraping failure, not necessarily bad parameters**. TikHub's 400 body says \"please check docs and parameters\", but in practice TikHub itself failed to scrape the target site. This kind of 400 **is not billed** (Only pay for successful requests).\n7. **Twitter structure is already flattened**. `data.timeline` is a list, not the original GraphQL-style nested `instructions` structure. Iterate it directly. Fields: `screen_name / text / favorites / views / retweets / replies / created_at / tweet_id / lang`.\n\n### 🚨 Security Note: The Key Is Echoed in Error Responses\n\n**TikHub 400 / 403 / 422 response bodies echo the full request headers, including auth information**. Integration must:\n\n```python\n# BAD — printing the response body directly leaks the key\nexcept httpx.HTTPStatusError as e:\n log.error(\"TikHub failed\", body=e.response.text) # ❌\n\n# GOOD — sanitize before logging\ndef sanitize(data: dict) -> dict:\n detail = data.get(\"detail\", {})\n if isinstance(detail, dict):\n detail.pop(\"headers\", None)\n for k in list(detail.keys()):\n if \"auth\" in k.lower() or \"token\" in k.lower():\n detail[k] = \"\"\n return data\n\nexcept httpx.HTTPStatusError as e:\n log.error(\"TikHub failed\", body=sanitize(e.response.json())) # ✅\n```\n\nTests must include: **assert exception string does not contain \"Bearer\"**.\n\n### MCP vs API Choice\n\nTikHub officially provides 4 transports: Stdio / SSE / Streamable HTTP / Curl(API).\n\n**For AutoSearch**: **choose direct Curl/API calls**, not MCP.\n\nReasons:\n- AutoSearch is a Python plugin installed with `pip install`. Using MCP would require users to additionally install Node.js + `mcp-remote` + the TikHub MCP server (3 dependencies)\n- AutoSearch channels are already \"tools\"; calling MCP from inside a tool is tool-calling-a-tool, and JSON-RPC over stdio adds a useless serialization layer\n- Enabling the full TikHub MCP exposes 1000+ tool schemas and injects roughly 400K tokens into Claude context, which is untenable\n- Even selecting only the 6 hard-target platforms still exposes ~470 tools (~190K tokens), which is still not ideal\n\n**Good fit for Stdio MCP**: ad hoc calls where a user in a Claude Code session wants to directly search Xiaohongshu, and this is for the user to install TikHub MCP themselves; it is unrelated to AutoSearch.\n\n---\n\n## Part 4: Final AutoSearch Integration Architecture\n\n### BYOK (Bring Your Own Key) Is the Only Reasonable Plan\n\n**Do not**:\n- ❌ Hardcode a TikHub key into the release build (a pip package exposes plaintext)\n- ❌ Share one key across all users (violates ToS and drains the balance)\n\n**Do**:\n- ✅ Users register and top up at `tikhub.io` themselves\n- ✅ `export TIKHUB_API_KEY=`, and AutoSearch reads the env var\n- ✅ SKILL.md declares `requires: [env:TIKHUB_API_KEY]`; without a key, the channel is automatically marked unavailable while other channels continue running\n\n### Channel Structure (Validated by Pilot)\n\n```\nautosearch/lib/\n└── tikhub_client.py # Generic client + error redaction + 5xx retries\n\nautosearch/skills/channels/zhihu/\n├── SKILL.md # frontmatter declares via_tikhub method\n└── methods/\n └── via_tikhub.py # maps /zhihu/web/fetch_article_search_v3 to Evidence\n\ntests/lib/test_tikhub_client.py # client unit tests, including redaction assertion\ntests/channels/zhihu/test_via_tikhub.py # method unit tests\n```\n\n**fallback_chain order**: `[via_tikhub, api_search, api_answer_detail]` — prefer TikHub when a key is present; fall back to the original path when no key exists.\n\n### Leave Room for a Future Proxy\n\n`tikhub_client.py` reads the base URL from an env var:\n\n```python\nbase_url = os.getenv(\"TIKHUB_BASE_URL\", \"https://api.tikhub.io\")\n```\n\nIf the upstream needs to be changed later, such as to a self-hosted proxy or mirror, users only need to change two env vars with zero code changes:\n\n```bash\nexport TIKHUB_BASE_URL=https://your-proxy.example.com/tikhub\nexport TIKHUB_API_KEY=\n```\n\n### 5 Channels Pending Integration (Priority Order)\n\n| Priority | Channel | Endpoint | Status |\n|---|---|---|---|\n| 1 | **zhihu** | `zhihu/web/fetch_article_search_v3` | ✅ pilot complete (branch `feat/tikhub-channels`) |\n| 2 | **xiaohongshu** | `xiaohongshu/web/search_notes` | Pending expansion |\n| 3 | **twitter** | `twitter/web/fetch_search_timeline` | Pending expansion |\n| 4 | **douyin** | `douyin/web/fetch_video_search_result_v2` | Pending expansion |\n| 5 | **bilibili** | `bilibili/web/fetch_general_search` | Pending expansion |\n\nAfter the pilot is validated, have Codex write the remaining 4 adapters in parallel from the same template. Each should be < 50 lines.\n\n---\n\n## Appendix\n\n### A. Test Command Quick Reference (Copy-Paste Ready)\n\n```bash\n# Sogou WeChat + readability cleanup = full-text Official Account search\ncd /tmp/mcp-smoke/ows\nnode build/index.js fetch-web \\\n \"https://weixin.sogou.com/weixin?type=2&query=\" \\\n --readability --spawn --json\n\n# open-websearch multi-engine\nnode build/index.js search \"\" --engine duckduckgo --limit 5 --spawn --json\nnode build/index.js search \"\" --engine csdn --limit 5 --spawn --json\n\n# Paper Search MCP academic search\ncd /tmp/mcp-smoke/paper-search-mcp\npython3 -c \"\nimport sys; sys.path.insert(0,'.')\nfrom paper_search_mcp.academic_platforms.arxiv import ArxivSearcher\ns = ArxivSearcher()\nfor p in s.search('', max_results=5):\n print(p.title, p.url)\n\"\n\n# PullPush Reddit history\ncurl -s \"https://api.pullpush.io/reddit/search/submission/?subreddit=&after=&before=&size=10\"\n\n# Jina Reader for any URL\ncurl -sL \"https://r.jina.ai/\"\n\n# Any TikHub endpoint, with redacted result inspection\ncurl -sS -H \"Authorization: Bearer $TIKHUB_API_KEY\" \\\n \"https://api.tikhub.io/api/v1/zhihu/web/fetch_article_search_v3?keyword=\" \\\n -o /tmp/t.json\npython3 -c \"\nimport json\nd = json.load(open('/tmp/t.json'))\ndetail = d.get('detail', {})\nif isinstance(detail, dict): detail.pop('headers', None)\nprint(json.dumps(d, indent=2, ensure_ascii=False)[:1000])\n\"\nrm -f /tmp/t.json # Key point: remove temp file that may contain echoed key data\n```\n\n### B. External Links\n\n- mcpmarket.com — research source for this round\n- tikhub.io — paid platform API\n- github.com/Aas-ee/open-webSearch — 8-engine free SERP\n- github.com/openags/paper-search-mcp — 21 academic sources\n- github.com/jacklenzotti/pullpush-mcp — Reddit history\n- r.jina.ai — free URL -> markdown via Jina Reader\n\n### C. Related Docs (Before This Round)\n\nConsolidated into this playbook, so **you no longer need to read them day to day**:\n- `mcp-channel-research.md` — initial research\n- `mcp-channel-test-plan.md` — test plan\n- `mcp-test-results.md` — first round of hands-on tests\n- `mcp-no-cookie-inventory.md` — no-cookie inventory\n- `mcp-final-summary.md` — phase summary\n- `tikhub-smoke-test.md` — detailed TikHub smoke test\n\nKeep them archived for traceability, but in daily use, **this playbook + `tikhub-smoke-test.md`** is enough.\n\n### D. Cost Ledger (As of 2026-04-19)\n\n- TikHub: **$0.053** (19 smoke requests)\n- Other: $0 (all free options)\n\n---\n\n**Maintenance rule**: When a new channel is integrated or a new hard target is unblocked, update the corresponding table in this playbook to keep it as the single source of truth.\n\n---\n\n## Appendix E. 2026-04-19 Supplemental Scan (New No-Key + No-Cookie Options)\n\nThis deeper mcpmarket.com pass found **12 fully no-key and no-cookie categories** missed earlier. Ranked by research value:\n\n### 🔴 High Value (Strongly Recommended)\n\n| MCP | Capability | Auth | Tested | Why It Matters |\n|---|---|---|---|---|\n| [FRED](https://mcpmarket.com/server/fred) · [Fredapi](https://mcpmarket.com/server/fredapi) · [FRED Macro Data](https://mcpmarket.com/server/fred-macroeconomic-data) | U.S. Federal Reserve economic data, 800K+ time series | 🟢 No key | Not tested | Essential macro signal for AI/startup research |\n| [World Bank Data](https://mcpmarket.com/server/world-bank-data) | Global economic indicators | 🟢 No key | Not tested | Core need for country-comparison research |\n| [Public APIs Directory](https://mcpmarket.com/es/server/public-apis) ([repo](https://github.com/zazencodes/public-apis-mcp)) | Free API directory semantic search | 🟢 No key | **✅ 04-19** | **Metatool** — future engine for AutoSearch to discover new channels |\n| [Open Library / Books](https://mcpmarket.com/server/books) · [OpenLibrary](https://mcpmarket.com/server/openlibrary) | ISBN lookup, full book catalog | 🟢 No auth | Not tested | Foundation for academic/publishing research |\n| [Word of the Day](https://mcpmarket.com/server/word-of-the-day) | Free Dictionary API with definitions, pronunciation, and examples | 🟢 No key | Not tested | Basic fact-checking utility |\n| [Dash Docset](https://mcpmarket.com/server/dash) · [Enhanced Dash](https://mcpmarket.com/server/enhanced-dash) | Local Dash docset query | 🟢 Local | Not tested | Instant technical-doc lookup |\n| [Hugging Face MCP](https://mcpmarket.com/tools/skills/hugging-face-mcp) | Hub model/dataset search | 🟢 Public search without key | **✅ 04-19** | Foundation for AI research |\n| Wikipedia API (official) | Encyclopedia search + summaries | 🟢 No key | **✅ 04-19** | Foundation for fact checking and encyclopedia enrichment |\n| Wikidata SPARQL (official) | Structured entities + graph queries | 🟢 No key | **✅ 04-19** | Entity relationship queries |\n| Google Trends via `pytrends` | Keyword trend time series | 🟢 No key | **✅ 04-19** | Topic heat and brand-comparison signals |\n\n### 🟡 Integrate As Needed\n\n| MCP | Capability | Auth | Scenario |\n|---|---|---|---|\n| [Flightradar24](https://mcpmarket.com/server/flightradar24-1) · [Flight (ADS-B)](https://mcpmarket.com/server/flight) | Real-time flight tracking | 🟢 Partly no key | Travel / supply-chain research |\n| [Etherscan MCP](https://mcpmarket.com/server/etherscan-2) · [Dune Analytics](https://mcpmarket.com/tools/skills/dune-analytics-on-chain-data) | Ethereum on-chain data | 🟢 Etherscan free key / 🟡 Dune paid | Web3 research |\n| [Ethereum JSON-RPC](https://mcpmarket.com/server/eth-1) | Native JSON-RPC chain query | 🟢 Public nodes | Deep DeFi research |\n| [TMDB](https://mcpmarket.com/server/tmdb) · [IMDb](https://mcpmarket.com/es/server/imdb-1) · [OMDB](https://mcpmarket.com/es/server/omdb) | Movie/TV data | 🟢 TMDB/OMDB free key | Content/entertainment research |\n| [Last.fm (ScrobblerContext)](https://mcpmarket.com/es/server/scrobblercontext) | Music data | 🟢 Free key | Content analysis |\n| [OpenFoodFacts](https://mcpmarket.com/server/openfoodfacts) | Global food database | 🟢 No key | Consumer goods / health research |\n\n### 🟢 Basic Utilities (Occasional Use)\n\n| MCP | Capability | Auth |\n|---|---|---|\n| [Whois Lookup](https://mcpmarket.com/server/whois) · [Domain Lookup](https://mcpmarket.com/server/domain-lookup) | WHOIS / RDAP lookup | 🟢 No key |\n| [DeepL MCP](https://mcpmarket.com/server/deepl) | Translation | 🟡 Free tier requires key |\n| [Pexels MCP](https://mcpmarket.com/es/server/pexels) | Free stock images | 🟡 Free key |\n\n### mcpmarket Has No Coverage for These Categories\n\n- **Toutiao / Baijiahao / NetEase Hao** (Chinese news aggregators)\n- **Reuters / TechCrunch / Bloomberg** (professional news, RSS only)\n- **Coursera / edX / Khan Academy / MOOC**\n- **Chinese government open data** (National Bureau of Statistics, customs)\n- **ESPN / sports data**\n- **Air quality / environmental data / real-time carbon emissions**\n\nThese can only be covered through RSS + Exa `site:`, or by waiting for future mcpmarket additions.\n\n### 2026-04-19 Hands-On Verification (5 Core MCPs)\n\nSmoke tests were run against the underlying APIs for the 5 most important MCPs for \"basic facts / trends / AI Hub / metatools.\" All passed:\n\n| MCP | Underlying API | Smoke Test | Sample |\n|---|---|---|---|\n| **Wikipedia** | `en.wikipedia.org/w/api.php?action=query&list=search&srsearch=` | Search `Claude AI` -> 5 results | Claude (language model) · Anthropic · OpenAI Codex · Artificial intelligence · Project Maven |\n| **Wikidata** | `query.wikidata.org/sparql` (SPARQL) | `P31 wd:Q11660` query for AI entities -> 5 results | AlphaFold · Lee Luda · Intelligent Autonomous Systems |\n| **Google Trends** | `pytrends` Python library (unofficial, simulated requests) | 7 days hourly `Claude AI` vs `ChatGPT` -> **169 rows** | Latest hour Claude AI=3, ChatGPT=45, making the brand-awareness gap obvious |\n| **Hugging Face Hub** | `huggingface.co/api/models?search=` | Search `llama` -> 5 results | meta-llama/Llama-3.1-8B-Instruct, 9.36M downloads · Llama-3.3-70B-Instruct, 490K downloads |\n| **Public APIs Directory** | Local `datastore/index.json` (1426 full APIs) | Full load + filter auth=No -> **668 no-key APIs** | 1426 APIs across dozens of categories including Animals/Crypto/Finance/Transport/Security |\n\n**Key clarification**: Public APIs Directory MCP ([zazencodes/public-apis-mcp](https://github.com/zazencodes/public-apis-mcp)) **does not depend on the now-dead `api.publicapis.org` at all**. Its data is built-in JSON (1426 entries), and the embedding index is built locally (.npz file). So even though the old API domain now fails DNS resolution, the MCP works correctly.\n\n**Pitfall warning — Google Trends**: pytrends is an unofficial simulated-request library. Google occasionally changes cookie/token mechanics and breaks it. Integration must include **retries + error tolerance** and must not treat it as a hard dependency. It is much more fragile than the other 4 official APIs.\n\n**Integration recommendation (lightest path)**: The first 4 can all be called directly through Python `httpx` against HTTP APIs; there is no need to start an MCP process. Public APIs Directory can have its `index.json` copied into AutoSearch and parsed locally. A 1426-row JSON file is small, and embeddings can be computed locally. This keeps AutoSearch free of new external process dependencies.\n\n---\n\n### Updated AutoSearch Priority After the Scan\n\nOn top of the 6 \"strongly recommended\" basics in Part 1 section C, **add 3 highest-priority items**:\n\n1. **FRED + World Bank** (macroeconomic signals, no key and no cookie in one step)\n2. **Public APIs Directory** (metatool; lets AutoSearch automatically discover new channels)\n3. **Open Library** (foundation for academic/publishing research)\n\nIn total, AutoSearch should now add **9 channels** to become the \"only full-coverage research system in the market\":\n\n```\nWikipedia + Wikidata # encyclopedia ✅ verified\nGoogle Trends # trends ✅ verified (flaky risk)\nHugging Face Hub # AI models ✅ verified\nPublic APIs Directory # metatool ✅ verified\nGoogle Patents # patents not verified\nCVE/NVD # security not verified\nFRED + World Bank # macroeconomics not verified\nOpen Library # books not verified\n```\n\nAll are 🟢 zero-key and zero-cookie. The implementation cost is small and the payoff is high.\n\n**First integration batch (4 already verified)**: Wikipedia, Wikidata, Hugging Face, Public APIs Directory — Codex can write channel adapters immediately, each < 30 lines of Python + httpx code.\n\n**Second integration batch (5 not yet smoke-tested)**: Google Trends, Google Patents, CVE/NVD, FRED, Open Library — proceed by research-scenario priority, and run a smoke test against the underlying API before each integration.\n"}, "4095d24c63933a9e65d9f3543e8aa3bab76dc592": {"t": 1785773302.9481592, "n": 24403, "h": "283aa6865eb903f8", "c": "# AutoSearch Channel Research Final Playbook\n\n> Date: 2026-04-19\n> Coverage: mcpmarket.com research + hands-on testing + TikHub paid API integration\n> Positioning: This is the **final master guide**. The previously scattered docs (`mcp-channel-research.md` / `mcp-test-plan.md` / `mcp-test-results.md` / `mcp-no-cookie-inventory.md` / `mcp-final-summary.md` / `tikhub-smoke-test.md`) are consolidated here. All future channel decisions should start from this document.\n\n---\n\n## TL;DR\n\n**Three-tier conclusion**:\n\n1. **Free and usable without cookies**: Sogou WeChat, open-websearch (4 engines), Paper Search MCP (21 academic sources), PullPush (Reddit history), direct RSS reads, Jina Reader (some sites), and 13 official APIs.\n2. **5 of 8 hard targets were unblocked through paid TikHub**: Xiaohongshu, Weibo, Zhihu, Twitter/X, and Douyin. The remaining 3 (flaky Weibo upstream, Instagram/LinkedIn parameters not fully tuned) were not fully solved in this round.\n3. **Final architecture**: AutoSearch uses BYOK (users provide their own TikHub key) and declares dependencies with `requires: [env:TIKHUB_API_KEY]`. The base URL is read from an env var so environments can switch cleanly.\n\n**Cost anchor**: TikHub measured average cost is **$0.0036/request**. 1000 research-grade calls cost about $3.6/month.\n\n---\n\n## Part 1: No-Cookie Usable Inventory (41)\n\n### A. Hands-On PASS in This Round (9)\n\n| Option | Platform/Capability | Auth | Notes |\n|---|---|---|---|\n| **Sogou WeChat SERP** | WeChat Official Accounts | 🟢 None | `weixin.sogou.com/weixin?type=2&query=` |\n| **open-websearch fetch-web + readability** | Any page -> clean markdown | 🟢 None | Cleaned with the Mozilla Readability algorithm |\n| **open-websearch csdn** | CSDN technical blogs | 🟢 None | Native Chinese content |\n| **open-websearch duckduckgo** | DuckDuckGo | 🟢 None | Backup general search |\n| **open-websearch startpage** | Startpage (Google proxy) | 🟢 None | Backup general search |\n| **Paper Search MCP** | arXiv + PubMed + Semantic Scholar + OpenAlex + 17 other sources | 🟢 None | One-command access to 21 academic sources, MIT |\n| **PullPush** | Reddit history from 2005 to present | 🟢 None | Full-text `q=` search is broken; subreddit/time filtering works |\n| **Substack RSS** | Substack / Medium / independent blogs | 🟢 None | All sites expose `/feed` |\n| **Jina Reader** | Bilibili / weak anti-scraping sites | 🟢 None | Zhihu, Xiaohongshu, and Weibo are blocked |\n\n### B. Official APIs Known to Work (13, Integrated in AutoSearch or One-Line Integration)\n\n| Platform | Access Method | Limit |\n|---|---|---|\n| HackerNews Algolia | Official API | Unlimited |\n| Reddit public JSON | `/r/.json` | No login |\n| Stack Exchange API | Official | 300/day without key |\n| GitHub Public Search | Official API | 10/min without token |\n| Dev.to | Public API | No key |\n| npm / PyPI registry | Official | No key |\n| OpenReview API | Official | No key |\n| arXiv API | Official | No key |\n| Xueqiu / 36kr / InfoQ Chinese | Their web/API surfaces | No key |\n| Xiaoyuzhou | RSS / public pages | No key |\n| Bilibili public search API | Official | No login |\n| YouTube transcript | yt-dlp + whisper (local) | No key |\n| Crunchbase public pages | Public search | Limited |\n\n### C. New Categories Found on mcpmarket (AutoSearch Gaps) (11)\n\n| Option | Capability | Priority |\n|---|---|---|\n| [Wikipedia MCP](https://mcpmarket.com/server/wikipedia-1) | Full encyclopedia + summaries | 🔴 Highest |\n| [Wikidata](https://mcpmarket.com/server/wikidata) | SPARQL + entities | 🔴 Highest |\n| [Google Trends Explorer](https://mcpmarket.com/server/google-trends-explorer) | Trend signals | 🔴 Highest |\n| [Google News Trends](https://mcpmarket.com/es/server/google-news-trends) | News + trending terms | 🔴 High |\n| [USPTO](https://mcpmarket.com/server/uspto) | U.S. patents + trademarks | 🟡 As needed |\n| [Google Patents](https://mcpmarket.com/server/google-patents) | Global patents | 🟡 As needed |\n| [EPSS](https://mcpmarket.com/server/epss) | CVE + vulnerability scoring | 🟡 As needed |\n| [Cybersecurity CVE](https://mcpmarket.com/es/server/cybersecurity-2) | NVD database | 🟡 As needed |\n| [OpenStreetMap](https://mcpmarket.com/server/openstreetmap) | Maps + POI | 🟢 As needed |\n| [CoinGecko](https://mcpmarket.com/server/coingecko) | Cryptocurrency | 🟢 As needed |\n| [Open Meteo](https://mcpmarket.com/tools/skills/open-meteo-weather) | Global weather | 🟢 As needed |\n\n### D. Existing Channel Reinforcements (8)\n\n| Option | Reinforces | Notes |\n|---|---|---|\n| [Package Version](https://mcpmarket.com/ja/server/package-version) | npm/PyPI/Maven/Go/Swift/Docker Hub and 9 registries total | One MCP covers 9 registries |\n| [GitLab MCP](https://mcpmarket.com/server/gitlab) | Complements GitHub | Public repos need no token |\n| [Newsfeed](https://mcpmarket.com/server/newsfeed) | `search-rss` preset categories | Free |\n| [Trend Radar](https://mcpmarket.com/tools/skills/trend-radar) | HN + GitHub signal aggregation | Free |\n| [Steam Context](https://mcpmarket.com/server/steam-context) | Games category | Steam API key is free |\n| [Zillow](https://mcpmarket.com/server/zillow) | Real-estate category | Mostly no key |\n| [AI Job Hunting Agent](https://mcpmarket.com/es/server/ai-job-hunting-agent) | Indeed + Remotive jobs | Free |\n| Sogou WeChat MCP wrappers ([ptbsare](https://github.com/ptbsare/sogou-weixin-mcp-server) / [fancyboi999](https://github.com/fancyboi999/weixin_search_mcp)) | Official Accounts | Same underlying Sogou SERP |\n\n---\n\n## Part 2: Hard-Target Breakthrough Matrix\n\n### 🔴 Integrated (Paid TikHub, 5/8)\n\n| Platform | TikHub endpoint | Measured Data |\n|---|---|---|\n| Xiaohongshu | `GET /api/v1/xiaohongshu/web/search_notes?keyword=` | Claude 4.7 found 20 notes, including title/author/likes |\n| Zhihu | `GET /api/v1/zhihu/web/fetch_article_search_v3?keyword=` | LLM agent found 20 high-quality Q&A results |\n| Douyin | `GET /api/v1/douyin/web/fetch_video_search_result_v2?keyword=` | DeepSeek found 12 results, highest with 540K likes |\n| Twitter/X | `GET /api/v1/twitter/web/fetch_search_timeline?keyword=&search_type=Top` | 19 results, full fields (favorites/views/retweets) |\n| Bilibili | `GET /api/v1/bilibili/web/fetch_general_search?keyword=&order=totalrank&page=1&page_size=10` | 8 videos + play counts |\n\n### ⚠️ Not Fully Solved in This Round (3/8)\n\n| Platform | Status | Debug Direction |\n|---|---|---|\n| **Weibo** | TikHub upstream is flaky: `web/fetch_search` returns ok=1 but `cards` is intermittently empty; `web_v2/fetch_realtime_search` 400; `app/fetch_search_all` 422 | Ask support in TikHub Discord; try `web_v2/fetch_ai_smart_search` |\n| **Instagram** | `v2/general_search` returns 200 OK but all zeroes | Try `v2/search_hashtags` or targeted keywords (#hashtag / @username) |\n| **LinkedIn** | `web/search_jobs` returns 400, even with geocode | Check TikHub docs for demo parameters; may require a special geocode format |\n\n### 🟢 Truly Impossible Without Cookies\n\n**Facebook / Instagram public personal pages / Xiaohongshu private-account content / Twitter private accounts**: even TikHub requires account support. These are not core to the research scenario, so do not invest for now.\n\n---\n\n## Part 3: TikHub Field Notes\n\n### Basic Information\n\n- **Homepage**: https://tikhub.io · **API base**: `https://api.tikhub.io/api/v1/`\n- **Auth**: `Authorization: Bearer $TIKHUB_API_KEY`\n- **OpenAPI spec**: `GET https://api.tikhub.io/openapi.json` (1058 endpoints)\n- **Billing**: pay-per-request, average **$0.0036/request** (official marketing says starts at $0.001; measured cost is 3-4x higher)\n- **Free quota**: Daily check-in gives a small amount of free credit\n\n### Platform Coverage (Confirmed Working)\n\n16 platforms, 1000+ tools:\n```\nTikTok (204) · Douyin (247) · Instagram (82) · Xiaohongshu (71)\nWeibo (64) · Bilibili (41) · YouTube (37) · Kuaishou (33)\nZhihu (32) · LinkedIn (25) · Reddit (24) · WeChat · Twitter\nThreads · TikHub Utilities · Other\n```\n\n### Key Pitfalls (In the Order Encountered)\n\n1. **Registration requires email verification**. Without verification, every endpoint returns 403 \"email not verified\".\n2. **The free tier covers only some endpoints**. Xiaohongshu/Weibo/Twitter/Douyin all return 402 (Payment Required) until paid balance is > 0. Zhihu and Bilibili are covered by the free tier.\n3. **Do not use `web_v3` for Xiaohongshu**. `/xiaohongshu/web_v3/fetch_search_notes` returns 400. Use the older `/xiaohongshu/web/search_notes`.\n4. **Do not use `app/v3` for Douyin**. `/douyin/app/v3/fetch_video_search_result` returns 400. Use `/douyin/web/fetch_video_search_result_v2`; data is under `data.business_data[i].data` (two nested layers).\n5. **Weibo endpoints are unstable across versions**. `web_v2/fetch_realtime_search` returns 400; `app/fetch_search_all` returns 422; `web/fetch_search` returns 200 but `cards` fluctuates.\n6. **400 = upstream scraping failure, not necessarily bad parameters**. TikHub's 400 body says \"please check docs and parameters\", but in practice TikHub itself failed to scrape the target site. This kind of 400 **is not billed** (Only pay for successful requests).\n7. **Twitter structure is already flattened**. `data.timeline` is a list, not the original GraphQL-style nested `instructions` structure. Iterate it directly. Fields: `screen_name / text / favorites / views / retweets / replies / created_at / tweet_id / lang`.\n\n### 🚨 Security Note: The Key Is Echoed in Error Responses\n\n**TikHub 400 / 403 / 422 response bodies echo the full request headers, including auth information**. Integration must:\n\n```python\n# BAD — printing the response body directly leaks the key\nexcept httpx.HTTPStatusError as e:\n log.error(\"TikHub failed\", body=e.response.text) # ❌\n\n# GOOD — sanitize before logging\ndef sanitize(data: dict) -> dict:\n detail = data.get(\"detail\", {})\n if isinstance(detail, dict):\n detail.pop(\"headers\", None)\n for k in list(detail.keys()):\n if \"auth\" in k.lower() or \"token\" in k.lower():\n detail[k] = \"\"\n return data\n\nexcept httpx.HTTPStatusError as e:\n log.error(\"TikHub failed\", body=sanitize(e.response.json())) # ✅\n```\n\nTests must include: **assert exception string does not contain \"Bearer\"**.\n\n### MCP vs API Choice\n\nTikHub officially provides 4 transports: Stdio / SSE / Streamable HTTP / Curl(API).\n\n**For AutoSearch**: **choose direct Curl/API calls**, not MCP.\n\nReasons:\n- AutoSearch is a Python plugin installed with `pip install`. Using MCP would require users to additionally install Node.js + `mcp-remote` + the TikHub MCP server (3 dependencies)\n- AutoSearch channels are already \"tools\"; calling MCP from inside a tool is tool-calling-a-tool, and JSON-RPC over stdio adds a useless serialization layer\n- Enabling the full TikHub MCP exposes 1000+ tool schemas and injects roughly 400K tokens into Claude context, which is untenable\n- Even selecting only the 6 hard-target platforms still exposes ~470 tools (~190K tokens), which is still not ideal\n\n**Good fit for Stdio MCP**: ad hoc calls where a user in a Claude Code session wants to directly search Xiaohongshu, and this is for the user to install TikHub MCP themselves; it is unrelated to AutoSearch.\n\n---\n\n## Part 4: Final AutoSearch Integration Architecture\n\n### BYOK (Bring Your Own Key) Is the Only Reasonable Plan\n\n**Do not**:\n- ❌ Hardcode a TikHub key into the release build (a pip package exposes plaintext)\n- ❌ Share one key across all users (violates ToS and drains the balance)\n\n**Do**:\n- ✅ Users register and top up at `tikhub.io` themselves\n- ✅ `export TIKHUB_API_KEY=`, and AutoSearch reads the env var\n- ✅ SKILL.md declares `requires: [env:TIKHUB_API_KEY]`; without a key, the channel is automatically marked unavailable while other channels continue running\n\n### Channel Structure (Validated by Pilot)\n\n```\nautosearch/lib/\n└── tikhub_client.py # Generic client + error redaction + 5xx retries\n\nautosearch/skills/channels/zhihu/\n├── SKILL.md # frontmatter declares via_tikhub method\n└── methods/\n └── via_tikhub.py # maps /zhihu/web/fetch_article_search_v3 to Evidence\n\ntests/lib/test_tikhub_client.py # client unit tests, including redaction assertion\ntests/channels/zhihu/test_via_tikhub.py # method unit tests\n```\n\n**fallback_chain order**: `[via_tikhub, api_search, api_answer_detail]` — prefer TikHub when a key is present; fall back to the original path when no key exists.\n\n### Leave Room for a Future Proxy\n\n`tikhub_client.py` reads the base URL from an env var:\n\n```python\nbase_url = os.getenv(\"TIKHUB_BASE_URL\", \"https://api.tikhub.io\")\n```\n\nIf the upstream needs to be changed later, such as to a self-hosted proxy or mirror, users only need to change two env vars with zero code changes:\n\n```bash\nexport TIKHUB_BASE_URL=https://your-proxy.example.com/tikhub\nexport TIKHUB_API_KEY=\n```\n\n### 5 Channels Pending Integration (Priority Order)\n\n| Priority | Channel | Endpoint | Status |\n|---|---|---|---|\n| 1 | **zhihu** | `zhihu/web/fetch_article_search_v3` | ✅ pilot complete (branch `feat/tikhub-channels`) |\n| 2 | **xiaohongshu** | `xiaohongshu/web/search_notes` | Pending expansion |\n| 3 | **twitter** | `twitter/web/fetch_search_timeline` | Pending expansion |\n| 4 | **douyin** | `douyin/web/fetch_video_search_result_v2` | Pending expansion |\n| 5 | **bilibili** | `bilibili/web/fetch_general_search` | Pending expansion |\n\nAfter the pilot is validated, have Codex write the remaining 4 adapters in parallel from the same template. Each should be < 50 lines.\n\n---\n\n## Appendix\n\n### A. Test Command Quick Reference (Copy-Paste Ready)\n\n```bash\n# Sogou WeChat + readability cleanup = full-text Official Account search\ncd /tmp/mcp-smoke/ows\nnode build/index.js fetch-web \\\n \"https://weixin.sogou.com/weixin?type=2&query=\" \\\n --readability --spawn --json\n\n# open-websearch multi-engine\nnode build/index.js search \"\" --engine duckduckgo --limit 5 --spawn --json\nnode build/index.js search \"\" --engine csdn --limit 5 --spawn --json\n\n# Paper Search MCP academic search\ncd /tmp/mcp-smoke/paper-search-mcp\npython3 -c \"\nimport sys; sys.path.insert(0,'.')\nfrom paper_search_mcp.academic_platforms.arxiv import ArxivSearcher\ns = ArxivSearcher()\nfor p in s.search('', max_results=5):\n print(p.title, p.url)\n\"\n\n# PullPush Reddit history\ncurl -s \"https://api.pullpush.io/reddit/search/submission/?subreddit=&after=&before=&size=10\"\n\n# Jina Reader for any URL\ncurl -sL \"https://r.jina.ai/\"\n\n# Any TikHub endpoint, with redacted result inspection\ncurl -sS -H \"Authorization: Bearer $TIKHUB_API_KEY\" \\\n \"https://api.tikhub.io/api/v1/zhihu/web/fetch_article_search_v3?keyword=\" \\\n -o /tmp/t.json\npython3 -c \"\nimport json\nd = json.load(open('/tmp/t.json'))\ndetail = d.get('detail', {})\nif isinstance(detail, dict): detail.pop('headers', None)\nprint(json.dumps(d, indent=2, ensure_ascii=False)[:1000])\n\"\nrm -f /tmp/t.json # Key point: remove temp file that may contain echoed key data\n```\n\n### B. External Links\n\n- mcpmarket.com — research source for this round\n- tikhub.io — paid platform API\n- github.com/Aas-ee/open-webSearch — 8-engine free SERP\n- github.com/openags/paper-search-mcp — 21 academic sources\n- github.com/jacklenzotti/pullpush-mcp — Reddit history\n- r.jina.ai — free URL -> markdown via Jina Reader\n\n### C. Related Docs (Before This Round)\n\nConsolidated into this playbook, so **you no longer need to read them day to day**:\n- `mcp-channel-research.md` — initial research\n- `mcp-channel-test-plan.md` — test plan\n- `mcp-test-results.md` — first round of hands-on tests\n- `mcp-no-cookie-inventory.md` — no-cookie inventory\n- `mcp-final-summary.md` — phase summary\n- `tikhub-smoke-test.md` — detailed TikHub smoke test\n\nKeep them archived for traceability, but in daily use, **this playbook + `tikhub-smoke-test.md`** is enough.\n\n### D. Cost Ledger (As of 2026-04-19)\n\n- TikHub: **$0.053** (19 smoke requests)\n- Other: $0 (all free options)\n\n---\n\n**Maintenance rule**: When a new channel is integrated or a new hard target is unblocked, update the corresponding table in this playbook to keep it as the single source of truth.\n\n---\n\n## Appendix E. 2026-04-19 Supplemental Scan (New No-Key + No-Cookie Options)\n\nThis deeper mcpmarket.com pass found **12 fully no-key and no-cookie categories** missed earlier. Ranked by research value:\n\n### 🔴 High Value (Strongly Recommended)\n\n| MCP | Capability | Auth | Tested | Why It Matters |\n|---|---|---|---|---|\n| [FRED](https://mcpmarket.com/server/fred) · [Fredapi](https://mcpmarket.com/server/fredapi) · [FRED Macro Data](https://mcpmarket.com/server/fred-macroeconomic-data) | U.S. Federal Reserve economic data, 800K+ time series | 🟢 No key | Not tested | Essential macro signal for AI/startup research |\n| [World Bank Data](https://mcpmarket.com/server/world-bank-data) | Global economic indicators | 🟢 No key | Not tested | Core need for country-comparison research |\n| [Public APIs Directory](https://mcpmarket.com/es/server/public-apis) ([repo](https://github.com/zazencodes/public-apis-mcp)) | Free API directory semantic search | 🟢 No key | **✅ 04-19** | **Metatool** — future engine for AutoSearch to discover new channels |\n| [Open Library / Books](https://mcpmarket.com/server/books) · [OpenLibrary](https://mcpmarket.com/server/openlibrary) | ISBN lookup, full book catalog | 🟢 No auth | Not tested | Foundation for academic/publishing research |\n| [Word of the Day](https://mcpmarket.com/server/word-of-the-day) | Free Dictionary API with definitions, pronunciation, and examples | 🟢 No key | Not tested | Basic fact-checking utility |\n| [Dash Docset](https://mcpmarket.com/server/dash) · [Enhanced Dash](https://mcpmarket.com/server/enhanced-dash) | Local Dash docset query | 🟢 Local | Not tested | Instant technical-doc lookup |\n| [Hugging Face MCP](https://mcpmarket.com/tools/skills/hugging-face-mcp) | Hub model/dataset search | 🟢 Public search without key | **✅ 04-19** | Foundation for AI research |\n| Wikipedia API (official) | Encyclopedia search + summaries | 🟢 No key | **✅ 04-19** | Foundation for fact checking and encyclopedia enrichment |\n| Wikidata SPARQL (official) | Structured entities + graph queries | 🟢 No key | **✅ 04-19** | Entity relationship queries |\n| Google Trends via `pytrends` | Keyword trend time series | 🟢 No key | **✅ 04-19** | Topic heat and brand-comparison signals |\n\n### 🟡 Integrate As Needed\n\n| MCP | Capability | Auth | Scenario |\n|---|---|---|---|\n| [Flightradar24](https://mcpmarket.com/server/flightradar24-1) · [Flight (ADS-B)](https://mcpmarket.com/server/flight) | Real-time flight tracking | 🟢 Partly no key | Travel / supply-chain research |\n| [Etherscan MCP](https://mcpmarket.com/server/etherscan-2) · [Dune Analytics](https://mcpmarket.com/tools/skills/dune-analytics-on-chain-data) | Ethereum on-chain data | 🟢 Etherscan free key / 🟡 Dune paid | Web3 research |\n| [Ethereum JSON-RPC](https://mcpmarket.com/server/eth-1) | Native JSON-RPC chain query | 🟢 Public nodes | Deep DeFi research |\n| [TMDB](https://mcpmarket.com/server/tmdb) · [IMDb](https://mcpmarket.com/es/server/imdb-1) · [OMDB](https://mcpmarket.com/es/server/omdb) | Movie/TV data | 🟢 TMDB/OMDB free key | Content/entertainment research |\n| [Last.fm (ScrobblerContext)](https://mcpmarket.com/es/server/scrobblercontext) | Music data | 🟢 Free key | Content analysis |\n| [OpenFoodFacts](https://mcpmarket.com/server/openfoodfacts) | Global food database | 🟢 No key | Consumer goods / health research |\n\n### 🟢 Basic Utilities (Occasional Use)\n\n| MCP | Capability | Auth |\n|---|---|---|\n| [Whois Lookup](https://mcpmarket.com/server/whois) · [Domain Lookup](https://mcpmarket.com/server/domain-lookup) | WHOIS / RDAP lookup | 🟢 No key |\n| [DeepL MCP](https://mcpmarket.com/server/deepl) | Translation | 🟡 Free tier requires key |\n| [Pexels MCP](https://mcpmarket.com/es/server/pexels) | Free stock images | 🟡 Free key |\n\n### mcpmarket Has No Coverage for These Categories\n\n- **Toutiao / Baijiahao / NetEase Hao** (Chinese news aggregators)\n- **Reuters / TechCrunch / Bloomberg** (professional news, RSS only)\n- **Coursera / edX / Khan Academy / MOOC**\n- **Chinese government open data** (National Bureau of Statistics, customs)\n- **ESPN / sports data**\n- **Air quality / environmental data / real-time carbon emissions**\n\nThese can only be covered through RSS + Exa `site:`, or by waiting for future mcpmarket additions.\n\n### 2026-04-19 Hands-On Verification (5 Core MCPs)\n\nSmoke tests were run against the underlying APIs for the 5 most important MCPs for \"basic facts / trends / AI Hub / metatools.\" All passed:\n\n| MCP | Underlying API | Smoke Test | Sample |\n|---|---|---|---|\n| **Wikipedia** | `en.wikipedia.org/w/api.php?action=query&list=search&srsearch=` | Search `Claude AI` -> 5 results | Claude (language model) · Anthropic · OpenAI Codex · Artificial intelligence · Project Maven |\n| **Wikidata** | `query.wikidata.org/sparql` (SPARQL) | `P31 wd:Q11660` query for AI entities -> 5 results | AlphaFold · Lee Luda · Intelligent Autonomous Systems |\n| **Google Trends** | `pytrends` Python library (unofficial, simulated requests) | 7 days hourly `Claude AI` vs `ChatGPT` -> **169 rows** | Latest hour Claude AI=3, ChatGPT=45, making the brand-awareness gap obvious |\n| **Hugging Face Hub** | `huggingface.co/api/models?search=` | Search `llama` -> 5 results | meta-llama/Llama-3.1-8B-Instruct, 9.36M downloads · Llama-3.3-70B-Instruct, 490K downloads |\n| **Public APIs Directory** | Local `datastore/index.json` (1426 full APIs) | Full load + filter auth=No -> **668 no-key APIs** | 1426 APIs across dozens of categories including Animals/Crypto/Finance/Transport/Security |\n\n**Key clarification**: Public APIs Directory MCP ([zazencodes/public-apis-mcp](https://github.com/zazencodes/public-apis-mcp)) **does not depend on the now-dead `api.publicapis.org` at all**. Its data is built-in JSON (1426 entries), and the embedding index is built locally (.npz file). So even though the old API domain now fails DNS resolution, the MCP works correctly.\n\n**Pitfall warning — Google Trends**: pytrends is an unofficial simulated-request library. Google occasionally changes cookie/token mechanics and breaks it. Integration must include **retries + error tolerance** and must not treat it as a hard dependency. It is much more fragile than the other 4 official APIs.\n\n**Integration recommendation (lightest path)**: The first 4 can all be called directly through Python `httpx` against HTTP APIs; there is no need to start an MCP process. Public APIs Directory can have its `index.json` copied into AutoSearch and parsed locally. A 1426-row JSON file is small, and embeddings can be computed locally. This keeps AutoSearch free of new external process dependencies.\n\n---\n\n### Updated AutoSearch Priority After the Scan\n\nOn top of the 6 \"strongly recommended\" basics in Part 1 section C, **add 3 highest-priority items**:\n\n1. **FRED + World Bank** (macroeconomic signals, no key and no cookie in one step)\n2. **Public APIs Directory** (metatool; lets AutoSearch automatically discover new channels)\n3. **Open Library** (foundation for academic/publishing research)\n\nIn total, AutoSearch should now add **9 channels** to become the \"only full-coverage research system in the market\":\n\n```\nWikipedia + Wikidata # encyclopedia ✅ verified\nGoogle Trends # trends ✅ verified (flaky risk)\nHugging Face Hub # AI models ✅ verified\nPublic APIs Directory # metatool ✅ verified\nGoogle Patents # patents not verified\nCVE/NVD # security not verified\nFRED + World Bank # macroeconomics not verified\nOpen Library # books not verified\n```\n\nAll are 🟢 zero-key and zero-cookie. The implementation cost is small and the payoff is high.\n\n**First integration batch (4 already verified)**: Wikipedia, Wikidata, Hugging Face, Public APIs Directory — Codex can write channel adapters immediately, each < 30 lines of Python + httpx code.\n\n**Second integration batch (5 not yet smoke-tested)**: Google Trends, Google Patents, CVE/NVD, FRED, Open Library — proceed by research-scenario priority, and run a smoke test against the underlying API before each integration.\n"}, "50b4a03f68b88050d57d5eb427830af05d531136": {"t": 1785773304.5931473, "n": 17060, "h": "3c2795c3c62e3c3b", "c": "# AutoSearch 渠道调研最终手册\n\n> 时间:2026-04-19\n> 覆盖:mcpmarket.com 调研 + 实测 + TikHub 付费 API 打通\n> 定位:这份是**最终总纲**,之前分散文档(`mcp-channel-research.md` / `mcp-test-plan.md` / `mcp-test-results.md` / `mcp-no-cookie-inventory.md` / `mcp-final-summary.md` / `tikhub-smoke-test.md`)都汇总到这里。未来所有渠道决策从这份开始。\n\n---\n\n## TL;DR\n\n**三档结论**:\n\n1. **无 cookie 免费可用**:搜狗微信、open-websearch(4 引擎)、Paper Search MCP(21 学术源)、PullPush(Reddit 历史)、RSS 直读、Jina Reader(部分站)、以及 13 个官方 API。\n2. **硬骨头 8 个中付费打通 5 个**(TikHub):小红书、微博、知乎、Twitter/X、抖音。剩 3 个(微博上游 flaky、Instagram/LinkedIn 参数未调通)本轮未完全解决。\n3. **最终架构**:AutoSearch 走 BYOK(用户自配 TikHub key),`requires: [env:TIKHUB_API_KEY]` 声明依赖。Base URL 从 env var 读,便于在不同环境之间切换。\n\n**成本锚点**:TikHub 实测平均 **$0.0036/请求**。1000 次研究级调用 ≈ $3.6/月。\n\n---\n\n## 第一部分:无 cookie 可用清单(41 个)\n\n### A. 本次亲手实测 PASS(9 个)\n\n| 方案 | 平台/能力 | 认证 | 备注 |\n|---|---|---|---|\n| **搜狗微信 SERP** | 微信公众号 | 🟢 无 | `weixin.sogou.com/weixin?type=2&query=` |\n| **open-websearch fetch-web + readability** | 任意页 → 干净 markdown | 🟢 无 | Mozilla Readability 算法清洗 |\n| **open-websearch csdn** | CSDN 技术博客 | 🟢 无 | 原生中文 |\n| **open-websearch duckduckgo** | DuckDuckGo | 🟢 无 | 备用通用搜 |\n| **open-websearch startpage** | Startpage(Google 代理) | 🟢 无 | 备用通用搜 |\n| **Paper Search MCP** | arXiv + PubMed + Semantic Scholar + OpenAlex + 其他 17 源 | 🟢 无 | 一键 21 学术源,MIT |\n| **PullPush** | Reddit 历史数据 2005-至今 | 🟢 无 | `q=` 全文搜挂,按 subreddit/时间过滤正常 |\n| **Substack RSS** | Substack / Medium / 独立博客 | 🟢 无 | 所有站暴露 `/feed` |\n| **Jina Reader** | B站 / 反爬弱的站 | 🟢 无 | 知乎小红书微博会被封 |\n\n### B. 官方 API 已知可用(13 个,AutoSearch 已集成或一行接入)\n\n| 平台 | 接入方式 | 限额 |\n|---|---|---|\n| HackerNews Algolia | 官方 API | 无限 |\n| Reddit 公开 JSON | `/r/.json` | 无登录 |\n| Stack Exchange API | 官方 | 300/day 无 key |\n| GitHub Public Search | 官方 API | 10/min 无 token |\n| Dev.to | 公开 API | 无 key |\n| npm / PyPI registry | 官方 | 无 key |\n| OpenReview API | 官方 | 无 key |\n| arXiv API | 官方 | 无 key |\n| 雪球 / 36kr / InfoQ 中文 | 各自 web/API | 无 key |\n| 小宇宙 | RSS / 公开页 | 无 key |\n| B站公开搜索 API | 官方 | 无登录 |\n| YouTube transcript | yt-dlp + whisper(本地) | 无 key |\n| Crunchbase 公开页 | 公开搜索 | 有限 |\n\n### C. mcpmarket 发现的新品类(AutoSearch 空白)(11 个)\n\n| 方案 | 能力 | 优先级 |\n|---|---|---|\n| [Wikipedia MCP](https://mcpmarket.com/server/wikipedia-1) | 百科全站 + 摘要 | 🔴 最高 |\n| [Wikidata](https://mcpmarket.com/server/wikidata) | SPARQL + 实体 | 🔴 最高 |\n| [Google Trends Explorer](https://mcpmarket.com/server/google-trends-explorer) | 趋势信号 | 🔴 最高 |\n| [Google News Trends](https://mcpmarket.com/es/server/google-news-trends) | 新闻 + 趋势词 | 🔴 高 |\n| [USPTO](https://mcpmarket.com/server/uspto) | 美国专利 + 商标 | 🟡 按需 |\n| [Google Patents](https://mcpmarket.com/server/google-patents) | 全球专利 | 🟡 按需 |\n| [EPSS](https://mcpmarket.com/server/epss) | CVE + 漏洞评分 | 🟡 按需 |\n| [Cybersecurity CVE](https://mcpmarket.com/es/server/cybersecurity-2) | NVD 数据库 | 🟡 按需 |\n| [OpenStreetMap](https://mcpmarket.com/server/openstreetmap) | 地图 + POI | 🟢 按需 |\n| [CoinGecko](https://mcpmarket.com/server/coingecko) | 加密货币 | 🟢 按需 |\n| [Open Meteo](https://mcpmarket.com/tools/skills/open-meteo-weather) | 全球天气 | 🟢 按需 |\n\n### D. 现有 channel 补强(8 个)\n\n| 方案 | 补哪个 | 备注 |\n|---|---|---|\n| [Package Version](https://mcpmarket.com/ja/server/package-version) | npm/PyPI/Maven/Go/Swift/Docker Hub 等 9 注册表 | 一个 MCP 顶 9 个 |\n| [GitLab MCP](https://mcpmarket.com/server/gitlab) | 补 GitHub 之外 | 公开 repo 无 token |\n| [Newsfeed](https://mcpmarket.com/server/newsfeed) | `search-rss` 预置分类 | 免费 |\n| [Trend Radar](https://mcpmarket.com/tools/skills/trend-radar) | HN + GitHub 信号聚合 | 免费 |\n| [Steam Context](https://mcpmarket.com/server/steam-context) | 游戏品类 | Steam API key 免费 |\n| [Zillow](https://mcpmarket.com/server/zillow) | 房产品类 | 大部分无 key |\n| [AI Job Hunting Agent](https://mcpmarket.com/es/server/ai-job-hunting-agent) | Indeed + Remotive 岗位 | 免费 |\n| 搜狗微信 MCP 包装([ptbsare](https://github.com/ptbsare/sogou-weixin-mcp-server) / [fancyboi999](https://github.com/fancyboi999/weixin_search_mcp)) | 公众号 | 底层同搜狗 SERP |\n\n---\n\n## 第二部分:硬骨头攻克矩阵\n\n### 🔴 已打通(TikHub 付费,5/8)\n\n| 平台 | TikHub endpoint | 实测数据 |\n|---|---|---|\n| 小红书 | `GET /api/v1/xiaohongshu/web/search_notes?keyword=` | Claude 4.7 搜到 20 条笔记,含 title/author/likes |\n| 知乎 | `GET /api/v1/zhihu/web/fetch_article_search_v3?keyword=` | LLM agent 搜到 20 条高质量问答 |\n| 抖音 | `GET /api/v1/douyin/web/fetch_video_search_result_v2?keyword=` | DeepSeek 搜到 12 条,最高 54 万赞 |\n| Twitter/X | `GET /api/v1/twitter/web/fetch_search_timeline?keyword=&search_type=Top` | 19 条,全字段(favorites/views/retweets) |\n| B站 | `GET /api/v1/bilibili/web/fetch_general_search?keyword=&order=totalrank&page=1&page_size=10` | 8 条视频 + 播放量 |\n\n### ⚠️ 本轮未完全解决(3/8)\n\n| 平台 | 状态 | 排查方向 |\n|---|---|---|\n| **微博** | TikHub 上游 flaky——`web/fetch_search` 返回 ok=1 但 cards 时空时不空,重试波动;`web_v2/fetch_realtime_search` 400;`app/fetch_search_all` 422 | 去 TikHub Discord 问客服;尝试 `web_v2/fetch_ai_smart_search` |\n| **Instagram** | `v2/general_search` 返回 200 OK 但全 0 | 换 `v2/search_hashtags` 或针对性关键词(#hashtag / @username) |\n| **LinkedIn** | `web/search_jobs` 400,加 geocode 也 400 | 去 TikHub docs 查 demo 参数,可能需要特殊 geocode 格式 |\n\n### 🟢 真·完全无法无 cookie 搞定\n\n**Facebook / Instagram 公开个人页 / 小红书私人号内容 / Twitter 私人账号**——即使 TikHub 也要账号支持。这些不在研究场景核心,暂不投入。\n\n---\n\n## 第三部分:TikHub 实战经验\n\n### 基础信息\n\n- **官网**:https://tikhub.io · **API base**:`https://api.tikhub.io/api/v1/`\n- **认证**:`Authorization: Bearer $TIKHUB_API_KEY`\n- **OpenAPI 规格**:`GET https://api.tikhub.io/openapi.json`(1058 个 endpoint)\n- **计费**:pay-per-request,平均 **$0.0036/次**(官方宣传 $0.001 起步,实测贵 3-4 倍)\n- **免费额度**:每日签到可领少量 free credit\n\n### 覆盖平台(确认跑通)\n\n16 平台共 1000+ tools:\n```\nTikTok (204) · Douyin (247) · Instagram (82) · Xiaohongshu (71)\nWeibo (64) · Bilibili (41) · YouTube (37) · Kuaishou (33)\nZhihu (32) · LinkedIn (25) · Reddit (24) · WeChat · Twitter\nThreads · TikHub Utilities · 其他\n```\n\n### 关键坑(按踩坑顺序)\n\n1. **注册要验证邮箱**。不验证一切 endpoint 都 403 \"邮箱未验证\"。\n2. **免费 tier 只覆盖部分 endpoint**。小红书/微博/Twitter/抖音都是 402(Payment Required)直到付费余额 > 0。知乎 / B站属于免费 tier 覆盖。\n3. **小红书别用 `web_v3`**。`/xiaohongshu/web_v3/fetch_search_notes` 返回 400。用老版 `/xiaohongshu/web/search_notes`。\n4. **抖音别用 `app/v3`**。`/douyin/app/v3/fetch_video_search_result` 返回 400。用 `/douyin/web/fetch_video_search_result_v2`,数据在 `data.business_data[i].data`(嵌套两层)。\n5. **微博 endpoint 多版本都不稳**。`web_v2/fetch_realtime_search` 400;`app/fetch_search_all` 422;`web/fetch_search` 200 但 cards 波动。\n6. **400 = 上游爬取失败,不是参数错**。TikHub 的 400 body 是\"请查看文档核对参数\",但实际上是 TikHub 自己爬目标站失败。这种 400 **不计费**(Only pay for successful requests)。\n7. **Twitter 结构已扁平化**。`data.timeline` 是 list(不是 GraphQL 原格式的 instructions 嵌套),直接遍历即可。字段:`screen_name / text / favorites / views / retweets / replies / created_at / tweet_id / lang`。\n\n### 🚨 安全注意:Key 会在错误响应里被回显\n\n**TikHub 的 400 / 403 / 422 响应体会原样回显完整请求头(含认证信息)**。接入必须:\n\n```python\n# BAD — 直接打印 response body 会泄露 key\nexcept httpx.HTTPStatusError as e:\n log.error(\"TikHub failed\", body=e.response.text) # ❌\n\n# GOOD — 先脱敏再 log\ndef sanitize(data: dict) -> dict:\n detail = data.get(\"detail\", {})\n if isinstance(detail, dict):\n detail.pop(\"headers\", None)\n for k in list(detail.keys()):\n if \"auth\" in k.lower() or \"token\" in k.lower():\n detail[k] = \"\"\n return data\n\nexcept httpx.HTTPStatusError as e:\n log.error(\"TikHub failed\", body=sanitize(e.response.json())) # ✅\n```\n\n测试里必须有一条:**assert exception string 不包含 \"Bearer\"**。\n\n### MCP vs API 选择\n\nTikHub 官方提供 4 种 transport:Stdio / SSE / Streamable HTTP / Curl(API)。\n\n**对 AutoSearch 而言**:**选 Curl/API 直连**,不要走 MCP。\n\n理由:\n- AutoSearch 是 Python plugin,用户 `pip install` 安装。走 MCP 要求用户额外装 Node.js + `mcp-remote` + TikHub MCP server(3 个依赖)\n- AutoSearch 的 channel 是\"工具\"本身,再走一层 MCP 是工具里调工具,JSON-RPC over stdio 多一层序列化毫无意义\n- TikHub MCP 全勾是 1000+ tool schema,注入 Claude context ~400k token,直接炸\n- 即使只勾 6 个硬骨头平台也 ~470 tools(~190k token),依然不理想\n\n**Stdio MCP 适用场景**:用户在 Claude Code 会话里想直接 \"搜一下小红书\" 的即兴调用。这是用户自己装 TikHub MCP 的事,和 AutoSearch 无关。\n\n---\n\n## 第四部分:AutoSearch 最终接入架构\n\n### BYOK(Bring Your Own Key)是唯一合理方案\n\n**不要做的**:\n- ❌ 把 TikHub key 硬编码到发布版里(pip 包明文可提取)\n- ❌ 一个 key 共享给所有用户(违反 ToS + 余额被烧光)\n\n**要做的**:\n- ✅ 用户自己去 `tikhub.io` 注册 + 充值\n- ✅ `export TIKHUB_API_KEY=xxx`,AutoSearch 读 env var\n- ✅ SKILL.md 声明 `requires: [env:TIKHUB_API_KEY]`,没 key 时 channel 自动标记不可用,其他 channel 照跑\n\n### Channel 结构(已通过 pilot 验证)\n\n```\nautosearch/lib/\n└── tikhub_client.py # 通用客户端 + 错误脱敏 + 5xx 重试\n\nautosearch/skills/channels/zhihu/\n├── SKILL.md # frontmatter 声明 via_tikhub method\n└── methods/\n └── via_tikhub.py # 调 /zhihu/web/fetch_article_search_v3 映射到 Evidence\n\ntests/lib/test_tikhub_client.py # 客户端单测(含脱敏断言)\ntests/channels/zhihu/test_via_tikhub.py # method 单测\n```\n\n**fallback_chain 顺序**:`[via_tikhub, api_search, api_answer_detail]` — TikHub 有 key 时优先用,没 key 时 fallback 到原方案。\n\n### 为未来 proxy 留口子\n\n`tikhub_client.py` 的 base URL 从 env var 读:\n\n```python\nbase_url = os.getenv(\"TIKHUB_BASE_URL\", \"https://api.tikhub.io\")\n```\n\n这样如果以后需要换上游(比如自托管代理或镜像),用户只需改两个 env var,零代码改动:\n\n```bash\nexport TIKHUB_BASE_URL=https://your-proxy.example.com/tikhub\nexport TIKHUB_API_KEY=\n```\n\n### 待接入的 5 个 channel(按优先级)\n\n| 优先级 | Channel | Endpoint | 状态 |\n|---|---|---|---|\n| 1 | **zhihu** | `zhihu/web/fetch_article_search_v3` | ✅ pilot 写完(branch `feat/tikhub-channels`) |\n| 2 | **xiaohongshu** | `xiaohongshu/web/search_notes` | 待扩展 |\n| 3 | **twitter** | `twitter/web/fetch_search_timeline` | 待扩展 |\n| 4 | **douyin** | `douyin/web/fetch_video_search_result_v2` | 待扩展 |\n| 5 | **bilibili** | `bilibili/web/fetch_general_search` | 待扩展 |\n\nPilot 验证通过后,让 Codex 按同一模板并行写剩下 4 个 adapter。改造量每个 < 50 行。\n\n---\n\n## 附录\n\n### A. 测试命令速查(可复制即跑)\n\n```bash\n# 搜狗微信 + readability 清洗 = 公众号全文搜索\ncd /tmp/mcp-smoke/ows\nnode build/index.js fetch-web \\\n \"https://weixin.sogou.com/weixin?type=2&query=\" \\\n --readability --spawn --json\n\n# open-websearch 多引擎\nnode build/index.js search \"\" --engine duckduckgo --limit 5 --spawn --json\nnode build/index.js search \"\" --engine csdn --limit 5 --spawn --json\n\n# Paper Search MCP 学术\ncd /tmp/mcp-smoke/paper-search-mcp\npython3 -c \"\nimport sys; sys.path.insert(0,'.')\nfrom paper_search_mcp.academic_platforms.arxiv import ArxivSearcher\ns = ArxivSearcher()\nfor p in s.search('', max_results=5):\n print(p.title, p.url)\n\"\n\n# PullPush Reddit 历史\ncurl -s \"https://api.pullpush.io/reddit/search/submission/?subreddit=&after=&before=&size=10\"\n\n# Jina Reader 任意 URL\ncurl -sL \"https://r.jina.ai/\"\n\n# TikHub 任意 endpoint(脱敏地看结果)\ncurl -sS -H \"Authorization: Bearer $TIKHUB_API_KEY\" \\\n \"https://api.tikhub.io/api/v1/zhihu/web/fetch_article_search_v3?keyword=\" \\\n -o /tmp/t.json\npython3 -c \"\nimport json\nd = json.load(open('/tmp/t.json'))\ndetail = d.get('detail', {})\nif isinstance(detail, dict): detail.pop('headers', None)\nprint(json.dumps(d, indent=2, ensure_ascii=False)[:1000])\n\"\nrm -f /tmp/t.json # 关键:清理可能含 key 回显的临时文件\n```\n\n### B. 外部链接\n\n- mcpmarket.com — 本次调研来源\n- tikhub.io — 付费平台 API\n- github.com/Aas-ee/open-webSearch — 8 引擎免费 SERP\n- github.com/openags/paper-search-mcp — 21 学术源\n- github.com/jacklenzotti/pullpush-mcp — Reddit 历史\n- r.jina.ai — Jina Reader 免费 URL → markdown\n\n### C. 相关文档(本次之前)\n\n已被本手册汇总、**可以不用再翻**:\n- `mcp-channel-research.md` — 初期调研\n- `mcp-channel-test-plan.md` — 测试计划\n- `mcp-test-results.md` — 第一轮实测\n- `mcp-no-cookie-inventory.md` — 无 cookie 清单\n- `mcp-final-summary.md` — 阶段总结\n- `tikhub-smoke-test.md` — TikHub 详细实测\n\n保留归档供溯源,但日常看**本手册 + `tikhub-smoke-test.md`** 即可。\n\n### D. 开销总账(截至 2026-04-19)\n\n- TikHub:**$0.053**(19 次 smoke request)\n- 其他:$0(全部免费方案)\n\n---\n\n**维护规则**:接入一个新 channel 或打通一个新硬骨头 → 更新本手册对应表格,保持单一事实来源。\n\n---\n\n## 附 E. 2026-04-19 补充扫描(免 key + 免 cookie 新增)\n\n本轮深挖 mcpmarket.com 发现了之前漏掉的 **12 个完全免 key 免 cookie 的品类**。按研究价值分档:\n\n### 🔴 高价值(强烈建议接入)\n\n| MCP | 能力 | 认证 | 实测 | 为什么值得 |\n|---|---|---|---|---|\n| [FRED](https://mcpmarket.com/server/fred) · [Fredapi](https://mcpmarket.com/server/fredapi) · [FRED Macro Data](https://mcpmarket.com/server/fred-macroeconomic-data) | 美联储经济数据 80w+ 时间序列 | 🟢 无 key | 未测 | AI/创业研究的宏观信号必备 |\n| [World Bank Data](https://mcpmarket.com/server/world-bank-data) | 全球经济指标 | 🟢 无 key | 未测 | 国别对比研究刚需 |\n| [Public APIs Directory](https://mcpmarket.com/es/server/public-apis) ([repo](https://github.com/zazencodes/public-apis-mcp)) | 免费 API 目录 semantic search | 🟢 无 key | **✅ 04-19** | **元工具** — AutoSearch 未来发现新 channel 的引擎 |\n| [Open Library / Books](https://mcpmarket.com/server/books) · [OpenLibrary](https://mcpmarket.com/server/openlibrary) | ISBN 书籍查询,全量书目 | 🟢 无 auth | 未测 | 学术/出版研究基础 |\n| [Word of the Day](https://mcpmarket.com/server/word-of-the-day) | Free Dictionary API,定义+发音+例句 | 🟢 无 key | 未测 | 事实核查基础工具 |\n| [Dash Docset](https://mcpmarket.com/server/dash) · [Enhanced Dash](https://mcpmarket.com/server/enhanced-dash) | 本地 Dash docset 查询 | 🟢 本地 | 未测 | 技术文档即时查询 |\n| [Hugging Face MCP](https://mcpmarket.com/tools/skills/hugging-face-mcp) | Hub model/dataset 搜索 | 🟢 公开搜索无 key | **✅ 04-19** | AI 研究基础 |\n| Wikipedia API(官方) | 百科搜索 + 摘要 | 🟢 无 key | **✅ 04-19** | 事实核查/百科补全基础 |\n| Wikidata SPARQL(官方) | 结构化实体 + 图谱查询 | 🟢 无 key | **✅ 04-19** | 实体关系查询 |\n| Google Trends via `pytrends` | 关键词趋势时间序列 | 🟢 无 key | **✅ 04-19** | 话题热度/品牌对比信号 |\n\n### 🟡 按需接入\n\n| MCP | 能力 | 认证 | 场景 |\n|---|---|---|---|\n| [Flightradar24](https://mcpmarket.com/server/flightradar24-1) · [Flight (ADS-B)](https://mcpmarket.com/server/flight) | 实时航班追踪 | 🟢 部分无 key | 出行 / 供应链研究 |\n| [Etherscan MCP](https://mcpmarket.com/server/etherscan-2) · [Dune Analytics](https://mcpmarket.com/tools/skills/dune-analytics-on-chain-data) | 以太坊链上数据 | 🟢 Etherscan 免费 key / 🟡 Dune 付费 | Web3 研究 |\n| [Ethereum JSON-RPC](https://mcpmarket.com/server/eth-1) | 原生 JSON-RPC 查链 | 🟢 公开节点 | DeFi 深度研究 |\n| [TMDB](https://mcpmarket.com/server/tmdb) · [IMDb](https://mcpmarket.com/es/server/imdb-1) · [OMDB](https://mcpmarket.com/es/server/omdb) | 电影/电视数据 | 🟢 TMDB/OMDB 免费 key | 内容/娱乐研究 |\n| [Last.fm (ScrobblerContext)](https://mcpmarket.com/es/server/scrobblercontext) | 音乐数据 | 🟢 免费 key | 内容分析 |\n| [OpenFoodFacts](https://mcpmarket.com/server/openfoodfacts) | 全球食品数据库 | 🟢 无 key | 消费品/健康研究 |\n\n### 🟢 基础工具(偶尔用)\n\n| MCP | 能力 | 认证 |\n|---|---|---|\n| [Whois Lookup](https://mcpmarket.com/server/whois) · [Domain Lookup](https://mcpmarket.com/server/domain-lookup) | WHOIS / RDAP 查询 | 🟢 无 key |\n| [DeepL MCP](https://mcpmarket.com/server/deepl) | 翻译 | 🟡 免费 tier 需 key |\n| [Pexels MCP](https://mcpmarket.com/es/server/pexels) | 免费 stock 图片 | 🟡 免费 key |\n\n### mcpmarket 完全空白(这些品类以后别找 mcpmarket)\n\n- **今日头条 / 百家号 / 网易号**(中文新闻聚合)\n- **Reuters / TechCrunch / Bloomberg**(专业新闻,只有 RSS)\n- **Coursera / edX / Khan Academy / MOOC**\n- **中国政府开放数据**(统计局、海关)\n- **ESPN / 体育数据**\n- **空气质量 / 环境数据 / 实时碳排放**\n\n这些只能靠 RSS + Exa `site:` 覆盖,或者等 mcpmarket 以后上新。\n\n### 2026-04-19 实测验证(5 个核心 MCP)\n\n对\"基础事实 / 趋势 / AI Hub / 元工具\"这 5 个最关键 MCP 做了底层 API smoke test。结果全 PASS:\n\n| MCP | 底层 API | Smoke test | 样本 |\n|---|---|---|---|\n| **Wikipedia** | `en.wikipedia.org/w/api.php?action=query&list=search&srsearch=` | 搜 `Claude AI` → 5 条 | Claude (language model) · Anthropic · OpenAI Codex · Artificial intelligence · Project Maven |\n| **Wikidata** | `query.wikidata.org/sparql` (SPARQL) | `P31 wd:Q11660` 查 AI 实体 → 5 条 | AlphaFold · Lee Luda · Intelligent Autonomous Systems |\n| **Google Trends** | `pytrends` Python 库(非官方,模拟请求) | 7 天每小时 `Claude AI` vs `ChatGPT` → **169 行** | 最新一小时 Claude AI=3, ChatGPT=45(品牌认知度差距直观) |\n| **Hugging Face Hub** | `huggingface.co/api/models?search=` | 搜 `llama` → 5 条 | meta-llama/Llama-3.1-8B-Instruct ⬇936万 · Llama-3.3-70B-Instruct ⬇49万 |\n| **Public APIs Directory** | 本地 `datastore/index.json`(1426 API 全量) | 全量加载 + 筛 auth=No → **668 个免 key** | 1426 个 API 涵盖 Animals/Crypto/Finance/Transport/Security 等几十类 |\n\n**关键澄清**:Public APIs Directory MCP([zazencodes/public-apis-mcp](https://github.com/zazencodes/public-apis-mcp))**完全不依赖已挂掉的 `api.publicapis.org`**。它的数据是内置 JSON(1426 条),embedding 索引本地构建(.npz 文件)。所以即使那个老 API 域名已 DNS 解析失败,MCP 功能完好。\n\n**踩坑预警 — Google Trends**:pytrends 是非官方模拟请求,Google 偶尔会改 cookie/token 机制导致失效。接入时**必加重试 + 错误容忍**,不能作为硬依赖。比其他 4 个官方 API 脆弱得多。\n\n**接入建议(最轻方案)**:前 4 个都可以**直接 Python httpx 调 HTTP API**,不必启动 MCP 进程。Public APIs Directory 可以把它的 `index.json` 拷贝到 AutoSearch 里自己解析——1426 条 JSON 没什么分量,embedding 也可以本地现算。这样 AutoSearch 对外零新依赖进程。\n\n---\n\n### 扫描后更新 AutoSearch 优先级\n\n原 playbook 第一部分 C 节的\"强烈建议接入\"6 个基础上,**追加 3 个最高优先级**:\n\n1. **FRED + World Bank**(宏观经济信号,免 key 免 cookie 一步到位)\n2. **Public APIs Directory**(元工具,加了它 AutoSearch 自动发现新 channel)\n3. **Open Library**(学术/出版研究基础)\n\n合计现在 AutoSearch 应该新增 **9 个 channel** 就能达到\"业内唯一全覆盖研究系统\":\n\n```\nWikipedia + Wikidata # 百科 ✅ 已验证\nGoogle Trends # 趋势 ✅ 已验证(有 flaky 风险)\nHugging Face Hub # AI 模型 ✅ 已验证\nPublic APIs Directory # 元工具 ✅ 已验证\nGoogle Patents # 专利 未验证\nCVE/NVD # 安全 未验证\nFRED + World Bank # 宏观经济 未验证\nOpen Library # 书籍 未验证\n```\n\n全部 🟢 零 key 零 cookie。改造量小,收益最大。\n\n**第一批接入(已实测可用的 4 个)**:Wikipedia、Wikidata、Hugging Face、Public APIs Directory — 这 4 个可以立刻让 Codex 写 channel adapter,每个 < 30 行 Python + httpx 代码。\n\n**第二批接入(未实测 5 个)**:Google Trends、Google Patents、CVE/NVD、FRED、Open Library — 按研究场景优先级推进,每个接入前先 smoke test 底层 API。\n"}, "4385559015b76116ae030334e73aa0f7206b4870": {"t": 1785773306.2182221, "n": 17085, "h": "d5348a2026d209c5", "c": "# AutoSearch 渠道调研最终手册\n\n> 时间:2026-04-19\n> 覆盖:mcpmarket.com 调研 + 实测 + TikHub 付费 API 打通\n> 定位:这份是**最终总纲**,之前分散文档(`mcp-channel-research.md` / `mcp-test-plan.md` / `mcp-test-results.md` / `mcp-no-cookie-inventory.md` / `mcp-final-summary.md` / `tikhub-smoke-test.md`)都汇总到这里。未来所有渠道决策从这份开始。\n\n---\n\n## TL;DR\n\n**三档结论**:\n\n1. **无 cookie 免费可用**:搜狗微信、open-websearch(4 引擎)、Paper Search MCP(21 学术源)、PullPush(Reddit 历史)、RSS 直读、Jina Reader(部分站)、以及 13 个官方 API。\n2. **硬骨头 8 个中付费打通 5 个**(TikHub):小红书、微博、知乎、Twitter/X、抖音。剩 3 个(微博上游 flaky、Instagram/LinkedIn 参数未调通)本轮未完全解决。\n3. **最终架构**:AutoSearch 走 BYOK(用户自配 TikHub key),`requires: [env:TIKHUB_API_KEY]` 声明依赖,未来可无缝切换到 hosted proxy 做商业化。\n\n**成本锚点**:TikHub 实测平均 **$0.0036/请求**。1000 次研究级调用 ≈ $3.6/月。\n\n---\n\n## 第一部分:无 cookie 可用清单(41 个)\n\n### A. 本次亲手实测 PASS(9 个)\n\n| 方案 | 平台/能力 | 认证 | 备注 |\n|---|---|---|---|\n| **搜狗微信 SERP** | 微信公众号 | 🟢 无 | `weixin.sogou.com/weixin?type=2&query=` |\n| **open-websearch fetch-web + readability** | 任意页 → 干净 markdown | 🟢 无 | Mozilla Readability 算法清洗 |\n| **open-websearch csdn** | CSDN 技术博客 | 🟢 无 | 原生中文 |\n| **open-websearch duckduckgo** | DuckDuckGo | 🟢 无 | 备用通用搜 |\n| **open-websearch startpage** | Startpage(Google 代理) | 🟢 无 | 备用通用搜 |\n| **Paper Search MCP** | arXiv + PubMed + Semantic Scholar + OpenAlex + 其他 17 源 | 🟢 无 | 一键 21 学术源,MIT |\n| **PullPush** | Reddit 历史数据 2005-至今 | 🟢 无 | `q=` 全文搜挂,按 subreddit/时间过滤正常 |\n| **Substack RSS** | Substack / Medium / 独立博客 | 🟢 无 | 所有站暴露 `/feed` |\n| **Jina Reader** | B站 / 反爬弱的站 | 🟢 无 | 知乎小红书微博会被封 |\n\n### B. 官方 API 已知可用(13 个,AutoSearch 已集成或一行接入)\n\n| 平台 | 接入方式 | 限额 |\n|---|---|---|\n| HackerNews Algolia | 官方 API | 无限 |\n| Reddit 公开 JSON | `/r/.json` | 无登录 |\n| Stack Exchange API | 官方 | 300/day 无 key |\n| GitHub Public Search | 官方 API | 10/min 无 token |\n| Dev.to | 公开 API | 无 key |\n| npm / PyPI registry | 官方 | 无 key |\n| OpenReview API | 官方 | 无 key |\n| arXiv API | 官方 | 无 key |\n| 雪球 / 36kr / InfoQ 中文 | 各自 web/API | 无 key |\n| 小宇宙 | RSS / 公开页 | 无 key |\n| B站公开搜索 API | 官方 | 无登录 |\n| YouTube transcript | yt-dlp + whisper(本地) | 无 key |\n| Crunchbase 公开页 | 公开搜索 | 有限 |\n\n### C. mcpmarket 发现的新品类(AutoSearch 空白)(11 个)\n\n| 方案 | 能力 | 优先级 |\n|---|---|---|\n| [Wikipedia MCP](https://mcpmarket.com/server/wikipedia-1) | 百科全站 + 摘要 | 🔴 最高 |\n| [Wikidata](https://mcpmarket.com/server/wikidata) | SPARQL + 实体 | 🔴 最高 |\n| [Google Trends Explorer](https://mcpmarket.com/server/google-trends-explorer) | 趋势信号 | 🔴 最高 |\n| [Google News Trends](https://mcpmarket.com/es/server/google-news-trends) | 新闻 + 趋势词 | 🔴 高 |\n| [USPTO](https://mcpmarket.com/server/uspto) | 美国专利 + 商标 | 🟡 按需 |\n| [Google Patents](https://mcpmarket.com/server/google-patents) | 全球专利 | 🟡 按需 |\n| [EPSS](https://mcpmarket.com/server/epss) | CVE + 漏洞评分 | 🟡 按需 |\n| [Cybersecurity CVE](https://mcpmarket.com/es/server/cybersecurity-2) | NVD 数据库 | 🟡 按需 |\n| [OpenStreetMap](https://mcpmarket.com/server/openstreetmap) | 地图 + POI | 🟢 按需 |\n| [CoinGecko](https://mcpmarket.com/server/coingecko) | 加密货币 | 🟢 按需 |\n| [Open Meteo](https://mcpmarket.com/tools/skills/open-meteo-weather) | 全球天气 | 🟢 按需 |\n\n### D. 现有 channel 补强(8 个)\n\n| 方案 | 补哪个 | 备注 |\n|---|---|---|\n| [Package Version](https://mcpmarket.com/ja/server/package-version) | npm/PyPI/Maven/Go/Swift/Docker Hub 等 9 注册表 | 一个 MCP 顶 9 个 |\n| [GitLab MCP](https://mcpmarket.com/server/gitlab) | 补 GitHub 之外 | 公开 repo 无 token |\n| [Newsfeed](https://mcpmarket.com/server/newsfeed) | `search-rss` 预置分类 | 免费 |\n| [Trend Radar](https://mcpmarket.com/tools/skills/trend-radar) | HN + GitHub 信号聚合 | 免费 |\n| [Steam Context](https://mcpmarket.com/server/steam-context) | 游戏品类 | Steam API key 免费 |\n| [Zillow](https://mcpmarket.com/server/zillow) | 房产品类 | 大部分无 key |\n| [AI Job Hunting Agent](https://mcpmarket.com/es/server/ai-job-hunting-agent) | Indeed + Remotive 岗位 | 免费 |\n| 搜狗微信 MCP 包装([ptbsare](https://github.com/ptbsare/sogou-weixin-mcp-server) / [fancyboi999](https://github.com/fancyboi999/weixin_search_mcp)) | 公众号 | 底层同搜狗 SERP |\n\n---\n\n## 第二部分:硬骨头攻克矩阵\n\n### 🔴 已打通(TikHub 付费,5/8)\n\n| 平台 | TikHub endpoint | 实测数据 |\n|---|---|---|\n| 小红书 | `GET /api/v1/xiaohongshu/web/search_notes?keyword=` | Claude 4.7 搜到 20 条笔记,含 title/author/likes |\n| 知乎 | `GET /api/v1/zhihu/web/fetch_article_search_v3?keyword=` | LLM agent 搜到 20 条高质量问答 |\n| 抖音 | `GET /api/v1/douyin/web/fetch_video_search_result_v2?keyword=` | DeepSeek 搜到 12 条,最高 54 万赞 |\n| Twitter/X | `GET /api/v1/twitter/web/fetch_search_timeline?keyword=&search_type=Top` | 19 条,全字段(favorites/views/retweets) |\n| B站 | `GET /api/v1/bilibili/web/fetch_general_search?keyword=&order=totalrank&page=1&page_size=10` | 8 条视频 + 播放量 |\n\n### ⚠️ 本轮未完全解决(3/8)\n\n| 平台 | 状态 | 排查方向 |\n|---|---|---|\n| **微博** | TikHub 上游 flaky——`web/fetch_search` 返回 ok=1 但 cards 时空时不空,重试波动;`web_v2/fetch_realtime_search` 400;`app/fetch_search_all` 422 | 去 TikHub Discord 问客服;尝试 `web_v2/fetch_ai_smart_search` |\n| **Instagram** | `v2/general_search` 返回 200 OK 但全 0 | 换 `v2/search_hashtags` 或针对性关键词(#hashtag / @username) |\n| **LinkedIn** | `web/search_jobs` 400,加 geocode 也 400 | 去 TikHub docs 查 demo 参数,可能需要特殊 geocode 格式 |\n\n### 🟢 真·完全无法无 cookie 搞定\n\n**Facebook / Instagram 公开个人页 / 小红书私人号内容 / Twitter 私人账号**——即使 TikHub 也要账号支持。这些不在研究场景核心,暂不投入。\n\n---\n\n## 第三部分:TikHub 实战经验\n\n### 基础信息\n\n- **官网**:https://tikhub.io · **API base**:`https://api.tikhub.io/api/v1/`\n- **认证**:`Authorization: Bearer $TIKHUB_API_KEY`\n- **OpenAPI 规格**:`GET https://api.tikhub.io/openapi.json`(1058 个 endpoint)\n- **计费**:pay-per-request,平均 **$0.0036/次**(官方宣传 $0.001 起步,实测贵 3-4 倍)\n- **免费额度**:每日签到可领少量 free credit\n\n### 覆盖平台(确认跑通)\n\n16 平台共 1000+ tools:\n```\nTikTok (204) · Douyin (247) · Instagram (82) · Xiaohongshu (71)\nWeibo (64) · Bilibili (41) · YouTube (37) · Kuaishou (33)\nZhihu (32) · LinkedIn (25) · Reddit (24) · WeChat · Twitter\nThreads · TikHub Utilities · 其他\n```\n\n### 关键坑(按踩坑顺序)\n\n1. **注册要验证邮箱**。不验证一切 endpoint 都 403 \"邮箱未验证\"。\n2. **免费 tier 只覆盖部分 endpoint**。小红书/微博/Twitter/抖音都是 402(Payment Required)直到付费余额 > 0。知乎 / B站属于免费 tier 覆盖。\n3. **小红书别用 `web_v3`**。`/xiaohongshu/web_v3/fetch_search_notes` 返回 400。用老版 `/xiaohongshu/web/search_notes`。\n4. **抖音别用 `app/v3`**。`/douyin/app/v3/fetch_video_search_result` 返回 400。用 `/douyin/web/fetch_video_search_result_v2`,数据在 `data.business_data[i].data`(嵌套两层)。\n5. **微博 endpoint 多版本都不稳**。`web_v2/fetch_realtime_search` 400;`app/fetch_search_all` 422;`web/fetch_search` 200 但 cards 波动。\n6. **400 = 上游爬取失败,不是参数错**。TikHub 的 400 body 是\"请查看文档核对参数\",但实际上是 TikHub 自己爬目标站失败。这种 400 **不计费**(Only pay for successful requests)。\n7. **Twitter 结构已扁平化**。`data.timeline` 是 list(不是 GraphQL 原格式的 instructions 嵌套),直接遍历即可。字段:`screen_name / text / favorites / views / retweets / replies / created_at / tweet_id / lang`。\n\n### 🚨 安全注意:Key 会在错误响应里被回显\n\n**TikHub 的 400 / 403 / 422 响应体会原样回显完整 `Authorization` header(含 Bearer token)**。接入必须:\n\n```python\n# BAD — 直接打印 response body 会泄露 key\nexcept httpx.HTTPStatusError as e:\n log.error(\"TikHub failed\", body=e.response.text) # ❌\n\n# GOOD — 先脱敏再 log\ndef sanitize(data: dict) -> dict:\n detail = data.get(\"detail\", {})\n if isinstance(detail, dict):\n detail.pop(\"headers\", None)\n for k in list(detail.keys()):\n if \"auth\" in k.lower() or \"token\" in k.lower():\n detail[k] = \"\"\n return data\n\nexcept httpx.HTTPStatusError as e:\n log.error(\"TikHub failed\", body=sanitize(e.response.json())) # ✅\n```\n\n测试里必须有一条:**assert exception string 不包含 \"Bearer\"**。\n\n### MCP vs API 选择\n\nTikHub 官方提供 4 种 transport:Stdio / SSE / Streamable HTTP / Curl(API)。\n\n**对 AutoSearch 而言**:**选 Curl/API 直连**,不要走 MCP。\n\n理由:\n- AutoSearch 是 Python plugin,用户 `pip install` 安装。走 MCP 要求用户额外装 Node.js + `mcp-remote` + TikHub MCP server(3 个依赖)\n- AutoSearch 的 channel 是\"工具\"本身,再走一层 MCP 是工具里调工具,JSON-RPC over stdio 多一层序列化毫无意义\n- TikHub MCP 全勾是 1000+ tool schema,注入 Claude context ~400k token,直接炸\n- 即使只勾 6 个硬骨头平台也 ~470 tools(~190k token),依然不理想\n\n**Stdio MCP 适用场景**:用户在 Claude Code 会话里想直接 \"搜一下小红书\" 的即兴调用。这是用户自己装 TikHub MCP 的事,和 AutoSearch 无关。\n\n---\n\n## 第四部分:AutoSearch 最终接入架构\n\n### BYOK(Bring Your Own Key)是唯一合理方案\n\n**不要做的**:\n- ❌ 把 TikHub key 硬编码到发布版里(pip 包明文可提取)\n- ❌ 一个 key 共享给所有用户(违反 ToS + 余额被烧光)\n\n**要做的**:\n- ✅ 用户自己去 `tikhub.io` 注册 + 充值\n- ✅ `export TIKHUB_API_KEY=xxx`,AutoSearch 读 env var\n- ✅ SKILL.md 声明 `requires: [env:TIKHUB_API_KEY]`,没 key 时 channel 自动标记不可用,其他 channel 照跑\n\n### Channel 结构(已通过 pilot 验证)\n\n```\nautosearch/lib/\n└── tikhub_client.py # 通用客户端 + 错误脱敏 + 5xx 重试\n\nautosearch/skills/channels/zhihu/\n├── SKILL.md # frontmatter 声明 via_tikhub method\n└── methods/\n └── via_tikhub.py # 调 /zhihu/web/fetch_article_search_v3 映射到 Evidence\n\ntests/lib/test_tikhub_client.py # 客户端单测(含脱敏断言)\ntests/channels/zhihu/test_via_tikhub.py # method 单测\n```\n\n**fallback_chain 顺序**:`[via_tikhub, api_search, api_answer_detail]` — TikHub 有 key 时优先用,没 key 时 fallback 到原方案。\n\n### 为未来 proxy 留口子\n\n`tikhub_client.py` 的 base URL 从 env var 读:\n\n```python\nbase_url = os.getenv(\"TIKHUB_BASE_URL\", \"https://api.tikhub.io\")\n```\n\n未来老板上 hosted proxy 做商业化时,用户只需改两个 env var,零代码改动:\n\n```bash\nexport TIKHUB_BASE_URL=https://api.autosearch.com/tikhub\nexport TIKHUB_API_KEY=\n```\n\n### 待接入的 5 个 channel(按优先级)\n\n| 优先级 | Channel | Endpoint | 状态 |\n|---|---|---|---|\n| 1 | **zhihu** | `zhihu/web/fetch_article_search_v3` | ✅ pilot 写完(branch `feat/tikhub-channels`) |\n| 2 | **xiaohongshu** | `xiaohongshu/web/search_notes` | 待扩展 |\n| 3 | **twitter** | `twitter/web/fetch_search_timeline` | 待扩展 |\n| 4 | **douyin** | `douyin/web/fetch_video_search_result_v2` | 待扩展 |\n| 5 | **bilibili** | `bilibili/web/fetch_general_search` | 待扩展 |\n\nPilot 验证通过后,让 Codex 按同一模板并行写剩下 4 个 adapter。改造量每个 < 50 行。\n\n---\n\n## 附录\n\n### A. 测试命令速查(可复制即跑)\n\n```bash\n# 搜狗微信 + readability 清洗 = 公众号全文搜索\ncd /tmp/mcp-smoke/ows\nnode build/index.js fetch-web \\\n \"https://weixin.sogou.com/weixin?type=2&query=\" \\\n --readability --spawn --json\n\n# open-websearch 多引擎\nnode build/index.js search \"\" --engine duckduckgo --limit 5 --spawn --json\nnode build/index.js search \"\" --engine csdn --limit 5 --spawn --json\n\n# Paper Search MCP 学术\ncd /tmp/mcp-smoke/paper-search-mcp\npython3 -c \"\nimport sys; sys.path.insert(0,'.')\nfrom paper_search_mcp.academic_platforms.arxiv import ArxivSearcher\ns = ArxivSearcher()\nfor p in s.search('', max_results=5):\n print(p.title, p.url)\n\"\n\n# PullPush Reddit 历史\ncurl -s \"https://api.pullpush.io/reddit/search/submission/?subreddit=&after=&before=&size=10\"\n\n# Jina Reader 任意 URL\ncurl -sL \"https://r.jina.ai/\"\n\n# TikHub 任意 endpoint(脱敏地看结果)\ncurl -sS -H \"Authorization: Bearer $TIKHUB_API_KEY\" \\\n \"https://api.tikhub.io/api/v1/zhihu/web/fetch_article_search_v3?keyword=\" \\\n -o /tmp/t.json\npython3 -c \"\nimport json\nd = json.load(open('/tmp/t.json'))\ndetail = d.get('detail', {})\nif isinstance(detail, dict): detail.pop('headers', None)\nprint(json.dumps(d, indent=2, ensure_ascii=False)[:1000])\n\"\nrm -f /tmp/t.json # 关键:清理可能含 key 回显的临时文件\n```\n\n### B. 外部链接\n\n- mcpmarket.com — 本次调研来源\n- tikhub.io — 付费平台 API\n- github.com/Aas-ee/open-webSearch — 8 引擎免费 SERP\n- github.com/openags/paper-search-mcp — 21 学术源\n- github.com/jacklenzotti/pullpush-mcp — Reddit 历史\n- r.jina.ai — Jina Reader 免费 URL → markdown\n\n### C. 相关文档(本次之前)\n\n已被本手册汇总、**可以不用再翻**:\n- `mcp-channel-research.md` — 初期调研\n- `mcp-channel-test-plan.md` — 测试计划\n- `mcp-test-results.md` — 第一轮实测\n- `mcp-no-cookie-inventory.md` — 无 cookie 清单\n- `mcp-final-summary.md` — 阶段总结\n- `tikhub-smoke-test.md` — TikHub 详细实测\n\n保留归档供溯源,但日常看**本手册 + `tikhub-smoke-test.md`** 即可。\n\n### D. 开销总账(截至 2026-04-19)\n\n- TikHub:**$0.053**(19 次 smoke request)\n- 其他:$0(全部免费方案)\n\n---\n\n**维护规则**:接入一个新 channel 或打通一个新硬骨头 → 更新本手册对应表格,保持单一事实来源。\n\n---\n\n## 附 E. 2026-04-19 补充扫描(免 key + 免 cookie 新增)\n\n本轮深挖 mcpmarket.com 发现了之前漏掉的 **12 个完全免 key 免 cookie 的品类**。按研究价值分档:\n\n### 🔴 高价值(强烈建议接入)\n\n| MCP | 能力 | 认证 | 实测 | 为什么值得 |\n|---|---|---|---|---|\n| [FRED](https://mcpmarket.com/server/fred) · [Fredapi](https://mcpmarket.com/server/fredapi) · [FRED Macro Data](https://mcpmarket.com/server/fred-macroeconomic-data) | 美联储经济数据 80w+ 时间序列 | 🟢 无 key | 未测 | AI/创业研究的宏观信号必备 |\n| [World Bank Data](https://mcpmarket.com/server/world-bank-data) | 全球经济指标 | 🟢 无 key | 未测 | 国别对比研究刚需 |\n| [Public APIs Directory](https://mcpmarket.com/es/server/public-apis) ([repo](https://github.com/zazencodes/public-apis-mcp)) | 免费 API 目录 semantic search | 🟢 无 key | **✅ 04-19** | **元工具** — AutoSearch 未来发现新 channel 的引擎 |\n| [Open Library / Books](https://mcpmarket.com/server/books) · [OpenLibrary](https://mcpmarket.com/server/openlibrary) | ISBN 书籍查询,全量书目 | 🟢 无 auth | 未测 | 学术/出版研究基础 |\n| [Word of the Day](https://mcpmarket.com/server/word-of-the-day) | Free Dictionary API,定义+发音+例句 | 🟢 无 key | 未测 | 事实核查基础工具 |\n| [Dash Docset](https://mcpmarket.com/server/dash) · [Enhanced Dash](https://mcpmarket.com/server/enhanced-dash) | 本地 Dash docset 查询 | 🟢 本地 | 未测 | 技术文档即时查询 |\n| [Hugging Face MCP](https://mcpmarket.com/tools/skills/hugging-face-mcp) | Hub model/dataset 搜索 | 🟢 公开搜索无 key | **✅ 04-19** | AI 研究基础 |\n| Wikipedia API(官方) | 百科搜索 + 摘要 | 🟢 无 key | **✅ 04-19** | 事实核查/百科补全基础 |\n| Wikidata SPARQL(官方) | 结构化实体 + 图谱查询 | 🟢 无 key | **✅ 04-19** | 实体关系查询 |\n| Google Trends via `pytrends` | 关键词趋势时间序列 | 🟢 无 key | **✅ 04-19** | 话题热度/品牌对比信号 |\n\n### 🟡 按需接入\n\n| MCP | 能力 | 认证 | 场景 |\n|---|---|---|---|\n| [Flightradar24](https://mcpmarket.com/server/flightradar24-1) · [Flight (ADS-B)](https://mcpmarket.com/server/flight) | 实时航班追踪 | 🟢 部分无 key | 出行 / 供应链研究 |\n| [Etherscan MCP](https://mcpmarket.com/server/etherscan-2) · [Dune Analytics](https://mcpmarket.com/tools/skills/dune-analytics-on-chain-data) | 以太坊链上数据 | 🟢 Etherscan 免费 key / 🟡 Dune 付费 | Web3 研究 |\n| [Ethereum JSON-RPC](https://mcpmarket.com/server/eth-1) | 原生 JSON-RPC 查链 | 🟢 公开节点 | DeFi 深度研究 |\n| [TMDB](https://mcpmarket.com/server/tmdb) · [IMDb](https://mcpmarket.com/es/server/imdb-1) · [OMDB](https://mcpmarket.com/es/server/omdb) | 电影/电视数据 | 🟢 TMDB/OMDB 免费 key | 内容/娱乐研究 |\n| [Last.fm (ScrobblerContext)](https://mcpmarket.com/es/server/scrobblercontext) | 音乐数据 | 🟢 免费 key | 内容分析 |\n| [OpenFoodFacts](https://mcpmarket.com/server/openfoodfacts) | 全球食品数据库 | 🟢 无 key | 消费品/健康研究 |\n\n### 🟢 基础工具(偶尔用)\n\n| MCP | 能力 | 认证 |\n|---|---|---|\n| [Whois Lookup](https://mcpmarket.com/server/whois) · [Domain Lookup](https://mcpmarket.com/server/domain-lookup) | WHOIS / RDAP 查询 | 🟢 无 key |\n| [DeepL MCP](https://mcpmarket.com/server/deepl) | 翻译 | 🟡 免费 tier 需 key |\n| [Pexels MCP](https://mcpmarket.com/es/server/pexels) | 免费 stock 图片 | 🟡 免费 key |\n\n### mcpmarket 完全空白(这些品类以后别找 mcpmarket)\n\n- **今日头条 / 百家号 / 网易号**(中文新闻聚合)\n- **Reuters / TechCrunch / Bloomberg**(专业新闻,只有 RSS)\n- **Coursera / edX / Khan Academy / MOOC**\n- **中国政府开放数据**(统计局、海关)\n- **ESPN / 体育数据**\n- **空气质量 / 环境数据 / 实时碳排放**\n\n这些只能靠 RSS + Exa `site:` 覆盖,或者等 mcpmarket 以后上新。\n\n### 2026-04-19 实测验证(5 个核心 MCP)\n\n对\"基础事实 / 趋势 / AI Hub / 元工具\"这 5 个最关键 MCP 做了底层 API smoke test。结果全 PASS:\n\n| MCP | 底层 API | Smoke test | 样本 |\n|---|---|---|---|\n| **Wikipedia** | `en.wikipedia.org/w/api.php?action=query&list=search&srsearch=` | 搜 `Claude AI` → 5 条 | Claude (language model) · Anthropic · OpenAI Codex · Artificial intelligence · Project Maven |\n| **Wikidata** | `query.wikidata.org/sparql` (SPARQL) | `P31 wd:Q11660` 查 AI 实体 → 5 条 | AlphaFold · Lee Luda · Intelligent Autonomous Systems |\n| **Google Trends** | `pytrends` Python 库(非官方,模拟请求) | 7 天每小时 `Claude AI` vs `ChatGPT` → **169 行** | 最新一小时 Claude AI=3, ChatGPT=45(品牌认知度差距直观) |\n| **Hugging Face Hub** | `huggingface.co/api/models?search=` | 搜 `llama` → 5 条 | meta-llama/Llama-3.1-8B-Instruct ⬇936万 · Llama-3.3-70B-Instruct ⬇49万 |\n| **Public APIs Directory** | 本地 `datastore/index.json`(1426 API 全量) | 全量加载 + 筛 auth=No → **668 个免 key** | 1426 个 API 涵盖 Animals/Crypto/Finance/Transport/Security 等几十类 |\n\n**关键澄清**:Public APIs Directory MCP([zazencodes/public-apis-mcp](https://github.com/zazencodes/public-apis-mcp))**完全不依赖已挂掉的 `api.publicapis.org`**。它的数据是内置 JSON(1426 条),embedding 索引本地构建(.npz 文件)。所以即使那个老 API 域名已 DNS 解析失败,MCP 功能完好。\n\n**踩坑预警 — Google Trends**:pytrends 是非官方模拟请求,Google 偶尔会改 cookie/token 机制导致失效。接入时**必加重试 + 错误容忍**,不能作为硬依赖。比其他 4 个官方 API 脆弱得多。\n\n**接入建议(最轻方案)**:前 4 个都可以**直接 Python httpx 调 HTTP API**,不必启动 MCP 进程。Public APIs Directory 可以把它的 `index.json` 拷贝到 AutoSearch 里自己解析——1426 条 JSON 没什么分量,embedding 也可以本地现算。这样 AutoSearch 对外零新依赖进程。\n\n---\n\n### 扫描后更新 AutoSearch 优先级\n\n原 playbook 第一部分 C 节的\"强烈建议接入\"6 个基础上,**追加 3 个最高优先级**:\n\n1. **FRED + World Bank**(宏观经济信号,免 key 免 cookie 一步到位)\n2. **Public APIs Directory**(元工具,加了它 AutoSearch 自动发现新 channel)\n3. **Open Library**(学术/出版研究基础)\n\n合计现在 AutoSearch 应该新增 **9 个 channel** 就能达到\"业内唯一全覆盖研究系统\":\n\n```\nWikipedia + Wikidata # 百科 ✅ 已验证\nGoogle Trends # 趋势 ✅ 已验证(有 flaky 风险)\nHugging Face Hub # AI 模型 ✅ 已验证\nPublic APIs Directory # 元工具 ✅ 已验证\nGoogle Patents # 专利 未验证\nCVE/NVD # 安全 未验证\nFRED + World Bank # 宏观经济 未验证\nOpen Library # 书籍 未验证\n```\n\n全部 🟢 零 key 零 cookie。改造量小,收益最大。\n\n**第一批接入(已实测可用的 4 个)**:Wikipedia、Wikidata、Hugging Face、Public APIs Directory — 这 4 个可以立刻让 Codex 写 channel adapter,每个 < 30 行 Python + httpx 代码。\n\n**第二批接入(未实测 5 个)**:Google Trends、Google Patents、CVE/NVD、FRED、Open Library — 按研究场景优先级推进,每个接入前先 smoke test 底层 API。\n"}, "aab0714fde4ff0306971a54023f85cc8d0517d13": {"t": 1785773307.8182688, "n": 17074, "h": "9bbdaff1ad1887a0", "c": "# AutoSearch 渠道调研最终手册\n\n> 时间:2026-04-19\n> 覆盖:mcpmarket.com 调研 + 实测 + TikHub 付费 API 打通\n> 定位:这份是**最终总纲**,之前分散文档(`mcp-channel-research.md` / `mcp-test-plan.md` / `mcp-test-results.md` / `mcp-no-cookie-inventory.md` / `mcp-final-summary.md` / `tikhub-smoke-test.md`)都汇总到这里。未来所有渠道决策从这份开始。\n\n---\n\n## TL;DR\n\n**三档结论**:\n\n1. **无 cookie 免费可用**:搜狗微信、open-websearch(4 引擎)、Paper Search MCP(21 学术源)、PullPush(Reddit 历史)、RSS 直读、Jina Reader(部分站)、以及 13 个官方 API。\n2. **硬骨头 8 个中付费打通 5 个**(TikHub):小红书、微博、知乎、Twitter/X、抖音。剩 3 个(微博上游 flaky、Instagram/LinkedIn 参数未调通)本轮未完全解决。\n3. **最终架构**:AutoSearch 走 BYOK(用户自配 TikHub key),`requires: [env:TIKHUB_API_KEY]` 声明依赖,未来可无缝切换到 hosted proxy 做商业化。\n\n**成本锚点**:TikHub 实测平均 **$0.0036/请求**。1000 次研究级调用 ≈ $3.6/月。\n\n---\n\n## 第一部分:无 cookie 可用清单(41 个)\n\n### A. 本次亲手实测 PASS(9 个)\n\n| 方案 | 平台/能力 | 认证 | 备注 |\n|---|---|---|---|\n| **搜狗微信 SERP** | 微信公众号 | 🟢 无 | `weixin.sogou.com/weixin?type=2&query=` |\n| **open-websearch fetch-web + readability** | 任意页 → 干净 markdown | 🟢 无 | Mozilla Readability 算法清洗 |\n| **open-websearch csdn** | CSDN 技术博客 | 🟢 无 | 原生中文 |\n| **open-websearch duckduckgo** | DuckDuckGo | 🟢 无 | 备用通用搜 |\n| **open-websearch startpage** | Startpage(Google 代理) | 🟢 无 | 备用通用搜 |\n| **Paper Search MCP** | arXiv + PubMed + Semantic Scholar + OpenAlex + 其他 17 源 | 🟢 无 | 一键 21 学术源,MIT |\n| **PullPush** | Reddit 历史数据 2005-至今 | 🟢 无 | `q=` 全文搜挂,按 subreddit/时间过滤正常 |\n| **Substack RSS** | Substack / Medium / 独立博客 | 🟢 无 | 所有站暴露 `/feed` |\n| **Jina Reader** | B站 / 反爬弱的站 | 🟢 无 | 知乎小红书微博会被封 |\n\n### B. 官方 API 已知可用(13 个,AutoSearch 已集成或一行接入)\n\n| 平台 | 接入方式 | 限额 |\n|---|---|---|\n| HackerNews Algolia | 官方 API | 无限 |\n| Reddit 公开 JSON | `/r/.json` | 无登录 |\n| Stack Exchange API | 官方 | 300/day 无 key |\n| GitHub Public Search | 官方 API | 10/min 无 token |\n| Dev.to | 公开 API | 无 key |\n| npm / PyPI registry | 官方 | 无 key |\n| OpenReview API | 官方 | 无 key |\n| arXiv API | 官方 | 无 key |\n| 雪球 / 36kr / InfoQ 中文 | 各自 web/API | 无 key |\n| 小宇宙 | RSS / 公开页 | 无 key |\n| B站公开搜索 API | 官方 | 无登录 |\n| YouTube transcript | yt-dlp + whisper(本地) | 无 key |\n| Crunchbase 公开页 | 公开搜索 | 有限 |\n\n### C. mcpmarket 发现的新品类(AutoSearch 空白)(11 个)\n\n| 方案 | 能力 | 优先级 |\n|---|---|---|\n| [Wikipedia MCP](https://mcpmarket.com/server/wikipedia-1) | 百科全站 + 摘要 | 🔴 最高 |\n| [Wikidata](https://mcpmarket.com/server/wikidata) | SPARQL + 实体 | 🔴 最高 |\n| [Google Trends Explorer](https://mcpmarket.com/server/google-trends-explorer) | 趋势信号 | 🔴 最高 |\n| [Google News Trends](https://mcpmarket.com/es/server/google-news-trends) | 新闻 + 趋势词 | 🔴 高 |\n| [USPTO](https://mcpmarket.com/server/uspto) | 美国专利 + 商标 | 🟡 按需 |\n| [Google Patents](https://mcpmarket.com/server/google-patents) | 全球专利 | 🟡 按需 |\n| [EPSS](https://mcpmarket.com/server/epss) | CVE + 漏洞评分 | 🟡 按需 |\n| [Cybersecurity CVE](https://mcpmarket.com/es/server/cybersecurity-2) | NVD 数据库 | 🟡 按需 |\n| [OpenStreetMap](https://mcpmarket.com/server/openstreetmap) | 地图 + POI | 🟢 按需 |\n| [CoinGecko](https://mcpmarket.com/server/coingecko) | 加密货币 | 🟢 按需 |\n| [Open Meteo](https://mcpmarket.com/tools/skills/open-meteo-weather) | 全球天气 | 🟢 按需 |\n\n### D. 现有 channel 补强(8 个)\n\n| 方案 | 补哪个 | 备注 |\n|---|---|---|\n| [Package Version](https://mcpmarket.com/ja/server/package-version) | npm/PyPI/Maven/Go/Swift/Docker Hub 等 9 注册表 | 一个 MCP 顶 9 个 |\n| [GitLab MCP](https://mcpmarket.com/server/gitlab) | 补 GitHub 之外 | 公开 repo 无 token |\n| [Newsfeed](https://mcpmarket.com/server/newsfeed) | `search-rss` 预置分类 | 免费 |\n| [Trend Radar](https://mcpmarket.com/tools/skills/trend-radar) | HN + GitHub 信号聚合 | 免费 |\n| [Steam Context](https://mcpmarket.com/server/steam-context) | 游戏品类 | Steam API key 免费 |\n| [Zillow](https://mcpmarket.com/server/zillow) | 房产品类 | 大部分无 key |\n| [AI Job Hunting Agent](https://mcpmarket.com/es/server/ai-job-hunting-agent) | Indeed + Remotive 岗位 | 免费 |\n| 搜狗微信 MCP 包装([ptbsare](https://github.com/ptbsare/sogou-weixin-mcp-server) / [fancyboi999](https://github.com/fancyboi999/weixin_search_mcp)) | 公众号 | 底层同搜狗 SERP |\n\n---\n\n## 第二部分:硬骨头攻克矩阵\n\n### 🔴 已打通(TikHub 付费,5/8)\n\n| 平台 | TikHub endpoint | 实测数据 |\n|---|---|---|\n| 小红书 | `GET /api/v1/xiaohongshu/web/search_notes?keyword=` | Claude 4.7 搜到 20 条笔记,含 title/author/likes |\n| 知乎 | `GET /api/v1/zhihu/web/fetch_article_search_v3?keyword=` | LLM agent 搜到 20 条高质量问答 |\n| 抖音 | `GET /api/v1/douyin/web/fetch_video_search_result_v2?keyword=` | DeepSeek 搜到 12 条,最高 54 万赞 |\n| Twitter/X | `GET /api/v1/twitter/web/fetch_search_timeline?keyword=&search_type=Top` | 19 条,全字段(favorites/views/retweets) |\n| B站 | `GET /api/v1/bilibili/web/fetch_general_search?keyword=&order=totalrank&page=1&page_size=10` | 8 条视频 + 播放量 |\n\n### ⚠️ 本轮未完全解决(3/8)\n\n| 平台 | 状态 | 排查方向 |\n|---|---|---|\n| **微博** | TikHub 上游 flaky——`web/fetch_search` 返回 ok=1 但 cards 时空时不空,重试波动;`web_v2/fetch_realtime_search` 400;`app/fetch_search_all` 422 | 去 TikHub Discord 问客服;尝试 `web_v2/fetch_ai_smart_search` |\n| **Instagram** | `v2/general_search` 返回 200 OK 但全 0 | 换 `v2/search_hashtags` 或针对性关键词(#hashtag / @username) |\n| **LinkedIn** | `web/search_jobs` 400,加 geocode 也 400 | 去 TikHub docs 查 demo 参数,可能需要特殊 geocode 格式 |\n\n### 🟢 真·完全无法无 cookie 搞定\n\n**Facebook / Instagram 公开个人页 / 小红书私人号内容 / Twitter 私人账号**——即使 TikHub 也要账号支持。这些不在研究场景核心,暂不投入。\n\n---\n\n## 第三部分:TikHub 实战经验\n\n### 基础信息\n\n- **官网**:https://tikhub.io · **API base**:`https://api.tikhub.io/api/v1/`\n- **认证**:`Authorization: Bearer $TIKHUB_API_KEY`\n- **OpenAPI 规格**:`GET https://api.tikhub.io/openapi.json`(1058 个 endpoint)\n- **计费**:pay-per-request,平均 **$0.0036/次**(官方宣传 $0.001 起步,实测贵 3-4 倍)\n- **免费额度**:每日签到可领少量 free credit\n\n### 覆盖平台(确认跑通)\n\n16 平台共 1000+ tools:\n```\nTikTok (204) · Douyin (247) · Instagram (82) · Xiaohongshu (71)\nWeibo (64) · Bilibili (41) · YouTube (37) · Kuaishou (33)\nZhihu (32) · LinkedIn (25) · Reddit (24) · WeChat · Twitter\nThreads · TikHub Utilities · 其他\n```\n\n### 关键坑(按踩坑顺序)\n\n1. **注册要验证邮箱**。不验证一切 endpoint 都 403 \"邮箱未验证\"。\n2. **免费 tier 只覆盖部分 endpoint**。小红书/微博/Twitter/抖音都是 402(Payment Required)直到付费余额 > 0。知乎 / B站属于免费 tier 覆盖。\n3. **小红书别用 `web_v3`**。`/xiaohongshu/web_v3/fetch_search_notes` 返回 400。用老版 `/xiaohongshu/web/search_notes`。\n4. **抖音别用 `app/v3`**。`/douyin/app/v3/fetch_video_search_result` 返回 400。用 `/douyin/web/fetch_video_search_result_v2`,数据在 `data.business_data[i].data`(嵌套两层)。\n5. **微博 endpoint 多版本都不稳**。`web_v2/fetch_realtime_search` 400;`app/fetch_search_all` 422;`web/fetch_search` 200 但 cards 波动。\n6. **400 = 上游爬取失败,不是参数错**。TikHub 的 400 body 是\"请查看文档核对参数\",但实际上是 TikHub 自己爬目标站失败。这种 400 **不计费**(Only pay for successful requests)。\n7. **Twitter 结构已扁平化**。`data.timeline` 是 list(不是 GraphQL 原格式的 instructions 嵌套),直接遍历即可。字段:`screen_name / text / favorites / views / retweets / replies / created_at / tweet_id / lang`。\n\n### 🚨 安全注意:Key 会在错误响应里被回显\n\n**TikHub 的 400 / 403 / 422 响应体会原样回显完整 `Authorization` header(含 Bearer token)**。接入必须:\n\n```python\n# BAD — 直接打印 response body 会泄露 key\nexcept httpx.HTTPStatusError as e:\n log.error(\"TikHub failed\", body=e.response.text) # ❌\n\n# GOOD — 先脱敏再 log\ndef sanitize(data: dict) -> dict:\n detail = data.get(\"detail\", {})\n if isinstance(detail, dict):\n detail.pop(\"headers\", None)\n for k in list(detail.keys()):\n if \"auth\" in k.lower() or \"token\" in k.lower():\n detail[k] = \"\"\n return data\n\nexcept httpx.HTTPStatusError as e:\n log.error(\"TikHub failed\", body=sanitize(e.response.json())) # ✅\n```\n\n测试里必须有一条:**assert exception string 不包含 \"Bearer\"**。\n\n### MCP vs API 选择\n\nTikHub 官方提供 4 种 transport:Stdio / SSE / Streamable HTTP / Curl(API)。\n\n**对 AutoSearch 而言**:**选 Curl/API 直连**,不要走 MCP。\n\n理由:\n- AutoSearch 是 Python plugin,用户 `pip install` 安装。走 MCP 要求用户额外装 Node.js + `mcp-remote` + TikHub MCP server(3 个依赖)\n- AutoSearch 的 channel 是\"工具\"本身,再走一层 MCP 是工具里调工具,JSON-RPC over stdio 多一层序列化毫无意义\n- TikHub MCP 全勾是 1000+ tool schema,注入 Claude context ~400k token,直接炸\n- 即使只勾 6 个硬骨头平台也 ~470 tools(~190k token),依然不理想\n\n**Stdio MCP 适用场景**:用户在 Claude Code 会话里想直接 \"搜一下小红书\" 的即兴调用。这是用户自己装 TikHub MCP 的事,和 AutoSearch 无关。\n\n---\n\n## 第四部分:AutoSearch 最终接入架构\n\n### BYOK(Bring Your Own Key)是唯一合理方案\n\n**不要做的**:\n- ❌ 把 TikHub key 硬编码到发布版里(pip 包明文可提取)\n- ❌ 一个 key 共享给所有用户(违反 ToS + 余额被烧光)\n\n**要做的**:\n- ✅ 用户自己去 `tikhub.io` 注册 + 充值\n- ✅ `export TIKHUB_API_KEY=xxx`,AutoSearch 读 env var\n- ✅ SKILL.md 声明 `requires: [env:TIKHUB_API_KEY]`,没 key 时 channel 自动标记不可用,其他 channel 照跑\n\n### Channel 结构(已通过 pilot 验证)\n\n```\nautosearch/lib/\n└── tikhub_client.py # 通用客户端 + 错误脱敏 + 5xx 重试\n\nskills/channels/zhihu/\n├── SKILL.md # frontmatter 声明 via_tikhub method\n└── methods/\n └── via_tikhub.py # 调 /zhihu/web/fetch_article_search_v3 映射到 Evidence\n\ntests/lib/test_tikhub_client.py # 客户端单测(含脱敏断言)\ntests/channels/zhihu/test_via_tikhub.py # method 单测\n```\n\n**fallback_chain 顺序**:`[via_tikhub, api_search, api_answer_detail]` — TikHub 有 key 时优先用,没 key 时 fallback 到原方案。\n\n### 为未来 proxy 留口子\n\n`tikhub_client.py` 的 base URL 从 env var 读:\n\n```python\nbase_url = os.getenv(\"TIKHUB_BASE_URL\", \"https://api.tikhub.io\")\n```\n\n未来老板上 hosted proxy 做商业化时,用户只需改两个 env var,零代码改动:\n\n```bash\nexport TIKHUB_BASE_URL=https://api.autosearch.com/tikhub\nexport TIKHUB_API_KEY=\n```\n\n### 待接入的 5 个 channel(按优先级)\n\n| 优先级 | Channel | Endpoint | 状态 |\n|---|---|---|---|\n| 1 | **zhihu** | `zhihu/web/fetch_article_search_v3` | ✅ pilot 写完(branch `feat/tikhub-channels`) |\n| 2 | **xiaohongshu** | `xiaohongshu/web/search_notes` | 待扩展 |\n| 3 | **twitter** | `twitter/web/fetch_search_timeline` | 待扩展 |\n| 4 | **douyin** | `douyin/web/fetch_video_search_result_v2` | 待扩展 |\n| 5 | **bilibili** | `bilibili/web/fetch_general_search` | 待扩展 |\n\nPilot 验证通过后,让 Codex 按同一模板并行写剩下 4 个 adapter。改造量每个 < 50 行。\n\n---\n\n## 附录\n\n### A. 测试命令速查(可复制即跑)\n\n```bash\n# 搜狗微信 + readability 清洗 = 公众号全文搜索\ncd /tmp/mcp-smoke/ows\nnode build/index.js fetch-web \\\n \"https://weixin.sogou.com/weixin?type=2&query=\" \\\n --readability --spawn --json\n\n# open-websearch 多引擎\nnode build/index.js search \"\" --engine duckduckgo --limit 5 --spawn --json\nnode build/index.js search \"\" --engine csdn --limit 5 --spawn --json\n\n# Paper Search MCP 学术\ncd /tmp/mcp-smoke/paper-search-mcp\npython3 -c \"\nimport sys; sys.path.insert(0,'.')\nfrom paper_search_mcp.academic_platforms.arxiv import ArxivSearcher\ns = ArxivSearcher()\nfor p in s.search('', max_results=5):\n print(p.title, p.url)\n\"\n\n# PullPush Reddit 历史\ncurl -s \"https://api.pullpush.io/reddit/search/submission/?subreddit=&after=&before=&size=10\"\n\n# Jina Reader 任意 URL\ncurl -sL \"https://r.jina.ai/\"\n\n# TikHub 任意 endpoint(脱敏地看结果)\ncurl -sS -H \"Authorization: Bearer $TIKHUB_API_KEY\" \\\n \"https://api.tikhub.io/api/v1/zhihu/web/fetch_article_search_v3?keyword=\" \\\n -o /tmp/t.json\npython3 -c \"\nimport json\nd = json.load(open('/tmp/t.json'))\ndetail = d.get('detail', {})\nif isinstance(detail, dict): detail.pop('headers', None)\nprint(json.dumps(d, indent=2, ensure_ascii=False)[:1000])\n\"\nrm -f /tmp/t.json # 关键:清理可能含 key 回显的临时文件\n```\n\n### B. 外部链接\n\n- mcpmarket.com — 本次调研来源\n- tikhub.io — 付费平台 API\n- github.com/Aas-ee/open-webSearch — 8 引擎免费 SERP\n- github.com/openags/paper-search-mcp — 21 学术源\n- github.com/jacklenzotti/pullpush-mcp — Reddit 历史\n- r.jina.ai — Jina Reader 免费 URL → markdown\n\n### C. 相关文档(本次之前)\n\n已被本手册汇总、**可以不用再翻**:\n- `mcp-channel-research.md` — 初期调研\n- `mcp-channel-test-plan.md` — 测试计划\n- `mcp-test-results.md` — 第一轮实测\n- `mcp-no-cookie-inventory.md` — 无 cookie 清单\n- `mcp-final-summary.md` — 阶段总结\n- `tikhub-smoke-test.md` — TikHub 详细实测\n\n保留归档供溯源,但日常看**本手册 + `tikhub-smoke-test.md`** 即可。\n\n### D. 开销总账(截至 2026-04-19)\n\n- TikHub:**$0.053**(19 次 smoke request)\n- 其他:$0(全部免费方案)\n\n---\n\n**维护规则**:接入一个新 channel 或打通一个新硬骨头 → 更新本手册对应表格,保持单一事实来源。\n\n---\n\n## 附 E. 2026-04-19 补充扫描(免 key + 免 cookie 新增)\n\n本轮深挖 mcpmarket.com 发现了之前漏掉的 **12 个完全免 key 免 cookie 的品类**。按研究价值分档:\n\n### 🔴 高价值(强烈建议接入)\n\n| MCP | 能力 | 认证 | 实测 | 为什么值得 |\n|---|---|---|---|---|\n| [FRED](https://mcpmarket.com/server/fred) · [Fredapi](https://mcpmarket.com/server/fredapi) · [FRED Macro Data](https://mcpmarket.com/server/fred-macroeconomic-data) | 美联储经济数据 80w+ 时间序列 | 🟢 无 key | 未测 | AI/创业研究的宏观信号必备 |\n| [World Bank Data](https://mcpmarket.com/server/world-bank-data) | 全球经济指标 | 🟢 无 key | 未测 | 国别对比研究刚需 |\n| [Public APIs Directory](https://mcpmarket.com/es/server/public-apis) ([repo](https://github.com/zazencodes/public-apis-mcp)) | 免费 API 目录 semantic search | 🟢 无 key | **✅ 04-19** | **元工具** — AutoSearch 未来发现新 channel 的引擎 |\n| [Open Library / Books](https://mcpmarket.com/server/books) · [OpenLibrary](https://mcpmarket.com/server/openlibrary) | ISBN 书籍查询,全量书目 | 🟢 无 auth | 未测 | 学术/出版研究基础 |\n| [Word of the Day](https://mcpmarket.com/server/word-of-the-day) | Free Dictionary API,定义+发音+例句 | 🟢 无 key | 未测 | 事实核查基础工具 |\n| [Dash Docset](https://mcpmarket.com/server/dash) · [Enhanced Dash](https://mcpmarket.com/server/enhanced-dash) | 本地 Dash docset 查询 | 🟢 本地 | 未测 | 技术文档即时查询 |\n| [Hugging Face MCP](https://mcpmarket.com/tools/skills/hugging-face-mcp) | Hub model/dataset 搜索 | 🟢 公开搜索无 key | **✅ 04-19** | AI 研究基础 |\n| Wikipedia API(官方) | 百科搜索 + 摘要 | 🟢 无 key | **✅ 04-19** | 事实核查/百科补全基础 |\n| Wikidata SPARQL(官方) | 结构化实体 + 图谱查询 | 🟢 无 key | **✅ 04-19** | 实体关系查询 |\n| Google Trends via `pytrends` | 关键词趋势时间序列 | 🟢 无 key | **✅ 04-19** | 话题热度/品牌对比信号 |\n\n### 🟡 按需接入\n\n| MCP | 能力 | 认证 | 场景 |\n|---|---|---|---|\n| [Flightradar24](https://mcpmarket.com/server/flightradar24-1) · [Flight (ADS-B)](https://mcpmarket.com/server/flight) | 实时航班追踪 | 🟢 部分无 key | 出行 / 供应链研究 |\n| [Etherscan MCP](https://mcpmarket.com/server/etherscan-2) · [Dune Analytics](https://mcpmarket.com/tools/skills/dune-analytics-on-chain-data) | 以太坊链上数据 | 🟢 Etherscan 免费 key / 🟡 Dune 付费 | Web3 研究 |\n| [Ethereum JSON-RPC](https://mcpmarket.com/server/eth-1) | 原生 JSON-RPC 查链 | 🟢 公开节点 | DeFi 深度研究 |\n| [TMDB](https://mcpmarket.com/server/tmdb) · [IMDb](https://mcpmarket.com/es/server/imdb-1) · [OMDB](https://mcpmarket.com/es/server/omdb) | 电影/电视数据 | 🟢 TMDB/OMDB 免费 key | 内容/娱乐研究 |\n| [Last.fm (ScrobblerContext)](https://mcpmarket.com/es/server/scrobblercontext) | 音乐数据 | 🟢 免费 key | 内容分析 |\n| [OpenFoodFacts](https://mcpmarket.com/server/openfoodfacts) | 全球食品数据库 | 🟢 无 key | 消费品/健康研究 |\n\n### 🟢 基础工具(偶尔用)\n\n| MCP | 能力 | 认证 |\n|---|---|---|\n| [Whois Lookup](https://mcpmarket.com/server/whois) · [Domain Lookup](https://mcpmarket.com/server/domain-lookup) | WHOIS / RDAP 查询 | 🟢 无 key |\n| [DeepL MCP](https://mcpmarket.com/server/deepl) | 翻译 | 🟡 免费 tier 需 key |\n| [Pexels MCP](https://mcpmarket.com/es/server/pexels) | 免费 stock 图片 | 🟡 免费 key |\n\n### mcpmarket 完全空白(这些品类以后别找 mcpmarket)\n\n- **今日头条 / 百家号 / 网易号**(中文新闻聚合)\n- **Reuters / TechCrunch / Bloomberg**(专业新闻,只有 RSS)\n- **Coursera / edX / Khan Academy / MOOC**\n- **中国政府开放数据**(统计局、海关)\n- **ESPN / 体育数据**\n- **空气质量 / 环境数据 / 实时碳排放**\n\n这些只能靠 RSS + Exa `site:` 覆盖,或者等 mcpmarket 以后上新。\n\n### 2026-04-19 实测验证(5 个核心 MCP)\n\n对\"基础事实 / 趋势 / AI Hub / 元工具\"这 5 个最关键 MCP 做了底层 API smoke test。结果全 PASS:\n\n| MCP | 底层 API | Smoke test | 样本 |\n|---|---|---|---|\n| **Wikipedia** | `en.wikipedia.org/w/api.php?action=query&list=search&srsearch=` | 搜 `Claude AI` → 5 条 | Claude (language model) · Anthropic · OpenAI Codex · Artificial intelligence · Project Maven |\n| **Wikidata** | `query.wikidata.org/sparql` (SPARQL) | `P31 wd:Q11660` 查 AI 实体 → 5 条 | AlphaFold · Lee Luda · Intelligent Autonomous Systems |\n| **Google Trends** | `pytrends` Python 库(非官方,模拟请求) | 7 天每小时 `Claude AI` vs `ChatGPT` → **169 行** | 最新一小时 Claude AI=3, ChatGPT=45(品牌认知度差距直观) |\n| **Hugging Face Hub** | `huggingface.co/api/models?search=` | 搜 `llama` → 5 条 | meta-llama/Llama-3.1-8B-Instruct ⬇936万 · Llama-3.3-70B-Instruct ⬇49万 |\n| **Public APIs Directory** | 本地 `datastore/index.json`(1426 API 全量) | 全量加载 + 筛 auth=No → **668 个免 key** | 1426 个 API 涵盖 Animals/Crypto/Finance/Transport/Security 等几十类 |\n\n**关键澄清**:Public APIs Directory MCP([zazencodes/public-apis-mcp](https://github.com/zazencodes/public-apis-mcp))**完全不依赖已挂掉的 `api.publicapis.org`**。它的数据是内置 JSON(1426 条),embedding 索引本地构建(.npz 文件)。所以即使那个老 API 域名已 DNS 解析失败,MCP 功能完好。\n\n**踩坑预警 — Google Trends**:pytrends 是非官方模拟请求,Google 偶尔会改 cookie/token 机制导致失效。接入时**必加重试 + 错误容忍**,不能作为硬依赖。比其他 4 个官方 API 脆弱得多。\n\n**接入建议(最轻方案)**:前 4 个都可以**直接 Python httpx 调 HTTP API**,不必启动 MCP 进程。Public APIs Directory 可以把它的 `index.json` 拷贝到 AutoSearch 里自己解析——1426 条 JSON 没什么分量,embedding 也可以本地现算。这样 AutoSearch 对外零新依赖进程。\n\n---\n\n### 扫描后更新 AutoSearch 优先级\n\n原 playbook 第一部分 C 节的\"强烈建议接入\"6 个基础上,**追加 3 个最高优先级**:\n\n1. **FRED + World Bank**(宏观经济信号,免 key 免 cookie 一步到位)\n2. **Public APIs Directory**(元工具,加了它 AutoSearch 自动发现新 channel)\n3. **Open Library**(学术/出版研究基础)\n\n合计现在 AutoSearch 应该新增 **9 个 channel** 就能达到\"业内唯一全覆盖研究系统\":\n\n```\nWikipedia + Wikidata # 百科 ✅ 已验证\nGoogle Trends # 趋势 ✅ 已验证(有 flaky 风险)\nHugging Face Hub # AI 模型 ✅ 已验证\nPublic APIs Directory # 元工具 ✅ 已验证\nGoogle Patents # 专利 未验证\nCVE/NVD # 安全 未验证\nFRED + World Bank # 宏观经济 未验证\nOpen Library # 书籍 未验证\n```\n\n全部 🟢 零 key 零 cookie。改造量小,收益最大。\n\n**第一批接入(已实测可用的 4 个)**:Wikipedia、Wikidata、Hugging Face、Public APIs Directory — 这 4 个可以立刻让 Codex 写 channel adapter,每个 < 30 行 Python + httpx 代码。\n\n**第二批接入(未实测 5 个)**:Google Trends、Google Patents、CVE/NVD、FRED、Open Library — 按研究场景优先级推进,每个接入前先 smoke test 底层 API。\n"}}}}