MCP server for Zhihu — lets AI agents interact with zhihu.com
The server has 12 tools with basic parameter schemas and descriptions, but significant gaps in definition quality prevent it from reaching production readiness. All tool names follow verb_noun conventions (good), but descriptions are inconsistent in quality and informativeness. Input schemas are present but lack comprehensive parameter descriptions. Most critically: error handling is minimal, output schemas are undocumented, composition patterns are weak (tools are tightly coupled to Zhihu's API rather than natural conversational intent), and security posture is concerning (scraping credentials, no permission gates). This is a typical community scraper server with limited agent affordances.
Check if the browser session is logged into Zhihu.
Check if cookies are valid by visiting Zhihu and checking login status.
Clear all stored cookies.
Fetch recent activities from a Zhihu user's profile (live scrape).
Get Zhihu answer detail: content, author, upvote count, comment count.
Get Zhihu article detail: title, content, author, publish time, upvotes, comments.
Get comments on a Zhihu question, answer, or article.
Output schemas are completely undocumented. Tools return JSON strings but LLMs cannot see what fields to expect. get_activities returns an object with 'user', 'fetched', 'new_to_db', 'activities' fields, but this structure is invisible to the MCP client/LLM.
Parameter descriptions are minimal or missing context. 'user' is described as 'Zhihu user URL token (e.g. 'xu-ze-qiu')' but lacks guidance on format validation or error handling if invalid. 'count' has no range constraints in description.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 53 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 20 | - | v1 |
Get database statistics: total activities, tracked users, last capture time.
Query the database for activities captured in the last N hours. This does NOT scrape Zhihu — it returns previously stored results.
Get Zhihu question detail: title, description, answer count, topics, top answers.
Search Zhihu content by keyword.
Get Zhihu user profile: avatar, name, bio, follower count, topics.
Error handling is absent. All tools catch exceptions with 'except Exception as e: return json.dumps({"error": repr(e)...})'. This violates the recovery-guide pattern, errors don't tell LLMs what to do next. E.g., if get_activities fails with a Zhihu 403 (forbidden), the agent has no actionable guidance on whether to retry, check cookies, or try a different user.
Tool composition is fragmented and task-dependent rather than intent-driven. 'Get user profile, then search their activities, then fetch details on top question' requires 3+ sequential calls. No batch tools. Per pattern:tool-chain, output from one tool should flow directly into the next, but here get_user_profile doesn't return question IDs, forcing a separate search call.
Security concern: Tools handle scraping cookies and Zhihu session state (check_login_status, delete_cookies) but there is no permission gating. Any agent (or user via prompt injection) can call delete_cookies and wipe authentication. Per pattern:permission-gate, destructive/sensitive tools must verify authority.
Returned results are unpaginated and unbounded. search_content accepts 'count' up to 20, but no pagination tokens or total_count. get_activities caps at 20 but offers no way to load next 20.
More critically, it lacks warning that this is destructive, per pattern:command-tool, state-modifying operations must declare consequences.
Parameter 'sort' in search_content has no enum constraint in schema (visible in Input JSON). It accepts string with note 'relevance, newest, most_upvoted' but LLMs are prone to hallucinating variants like 'recent', 'top', 'latest'. Per pattern:constrained-input, use explicit enum, not free-form strings.
cookie_status description is vague: 'Check if cookies are valid by visiting Zhihu and checking login status.' Does it perform a login check? Does it validate cookie format? Does it hit Zhihu? This ambiguity forces LLMs to guess when to call it vs check_login_status.