Skip to main content
Glama
iTraceur

wechat-mp-search

by iTraceur

dsh-wechat-mp-search

npm License: MIT

deepseek-harness (dsh) 插件,同时提供同构的 MCP server 入口:零配置抓取搜狗微信搜索(weixin.sogou.com),用于检索微信公众号文章并抓取正文。

两种分发形态共享同一套核心逻辑(src/sogou.ts),工具名、参数与返回字段完全一致:

  • dsh 插件src/index.ts):进程内 Cordis 插件,随宿主 dsh 运行时加载;

  • MCP serversrc/mcp-server.ts):标准 Model Context Protocol stdio server,供 Claude Code、Cursor、Codex 等任意 MCP 客户端使用。

工具

工具名

参数

说明

weixin_search

query: string(必填)、page?: number(默认 1)

搜索单页结果,返回 { results, blocked }

weixin_search_all

query: string(必填)、max_pages?: number(默认 10)

按页翻页搜索,直到达到页数上限或命中反爬拦截;max_pages 会被插件配置的硬上限(maxPages)截断。

get_weixin_article_content

real_url: string(必填)、referer?: string

抓取文章正文纯文本;失败时返回 获取文章内容失败: ... 字符串而非抛异常。

weixin_search/weixin_search_all 返回的每条结果字段:titlelink(搜狗跳转链接)、real_url(还原后的微信公众号真实链接,解析失败为空串)、publish_timepage

Related MCP server: WeChat Article Reader MCP Server

反爬 / 限流策略

本插件进行了四项反爬增强,均可通过插件配置调整:

  1. 会话级 cookie jar:同一次搜索会话内(一次 weixin_search 调用及其后续链接解析请求)共享并累积 Set-Cookie,使后续请求携带前序请求获得的 cookie。

  2. 请求间限速抖动:链接解析之间使用 linkDelayMs + [0, linkDelayJitterMs) 随机抖动延迟;weixin_search_all 翻页之间使用 pageDelayMs + [0, pageDelayJitterMs) 随机抖动延迟。

  3. 反爬重试:命中反爬验证(响应体或跳转后 URL 出现反爬特征)时,重建一个全新会话(全新 cookie jar)重试一次;仍失败才判定为 blocked: true

  4. max_pages 硬上限weixin_search_allmax_pages 参数无法突破插件配置项 maxPages(默认 30)。

配置项

配置项

默认值

说明

requestTimeoutMs

15000

单次 HTTP 请求超时(毫秒)。

maxOutputBytes

8000000

响应体最大字节数;流式读取达到上限即停止下载并按字符边界截断。

linkDelayMs / linkDelayJitterMs

200 / 400

链接解析之间的最小延迟与随机抖动上限。

pageDelayMs / pageDelayJitterMs

1000 / 1000

翻页之间的最小延迟与随机抖动上限。

retryDelayMs

2500

命中反爬后重建会话重试前的最小延迟。

maxPages

30

weixin_search_allmax_pages 硬上限。

各数值配置项均有下界(如 requestTimeoutMs >= 1,延迟类 >= 0):dsh 形态下非法值会在插件加载时被校验拒绝;MCP 形态(不经过配置校验)会将非法值(负数、NaN 等)回退为默认值。

安装

dsh 插件

# 本地路径安装
dsh plugin --profile <profile-name> add ${workspace}/dsh-wechat-mp-search

# 发布到 npm 后
dsh plugin --profile <profile-name> add dsh-wechat-mp-search

MCP server(任意 MCP 客户端)

本包的默认可执行入口即 MCP stdio server。

本地路径使用(无需发布到 npm):先用 npm install && npm run build 生成 lib/,然后在支持 MCP 的客户端中添加:

{
  "mcpServers": {
    "wechat-mp-search": {
      "command": "node",
      "args": ["${workspace}/dsh-wechat-mp-search/lib/mcp-server.js"]
    }
  }
}

Claude Code 也可以一行命令添加:

claude mcp add wechat-mp-search -- node ${workspace}/dsh-wechat-mp-search/lib/mcp-server.js

修改源码后重新 npm run build 即生效。频繁迭代可在项目目录执行 npm link,之后配置直接写 "command": "dsh-wechat-mp-search"

发布到 npm 后

{
  "mcpServers": {
    "wechat-mp-search": {
      "command": "npx",
      "args": ["-y", "dsh-wechat-mp-search"]
    }
  }
}

或全局安装后直接使用命令:

npm install -g dsh-wechat-mp-search
# 客户端配置: { "command": "dsh-wechat-mp-search" }

MCP 入口零配置运行,各反爬参数使用上文默认值;需要自定义时可在 dsh 形态下通过插件 config 调整。

开发

npm install
npm run build       # tsc -p tsconfig.json
npm run typecheck   # tsc --noEmit
npm test            # vitest run

peerDependencies 中的 @deepseek-ai/cordis@deepseek-ai/dsh-tools 由宿主 dsh 运行时提供。 本仓库的 .npmrc 已将 registry 指向官方 https://registry.npmjs.org/,因为这几个包 (含其自身的 @deepseek-ai/dsh-llm@deepseek-ai/dsh-session 等传递 peer 依赖)已在公网 npm 发布对应版本,可直接 npm install;若你的环境配置了指向其他镜像源的全局 registry, 请临时使用 --registry=https://registry.npmjs.org/ 或本仓库自带的 .npmrc

免责声明

仅学习研究使用,请控制请求频率,遵守搜狗 / 微信与相关法规。目标站点接口变更可能导致解析逻辑失效

Available Tools

3 tools
get_weixin_article_contentA

抓取微信公众号文章正文纯文本。失败时返回以"获取文章内容失败:"开头的说明,而非报错。

ParametersJSON Schema
NameRequiredDescriptionDefault
refererNo可选的 Referer 请求头
real_urlYes微信公众号文章真实链接(https://mp.weixin.qq.com/...)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It does disclose a key behavioral trait: on failure it returns a message starting with '获取文章内容失败:' instead of raising an error, and it returns plain text. However, it omits other potentially relevant behaviors such as authentication requirements or rate limits, so it is only partially transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that front-loads the primary purpose and then adds the essential failure-behavior note. There is no wasted wording or redundant restating of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a straightforward fetch-content tool, the description covers the core action, the output type (plain text), and the failure mode. The lack of an output schema is mitigated by mentioning '纯文本'. Minor gaps like referer usage are already covered by the schema's parameter descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add any parameter-level semantics beyond the schema, but it doesn't need to because the schema already documents both parameters clearly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('抓取' / fetch) and a specific resource ('微信公众号文章正文纯文本' / WeChat article body plain text). This clearly distinguishes it from the sibling search tools (weixin_search, weixin_search_all), which find articles rather than retrieve their content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus the sibling search tools. The description only explains what the tool does and its failure behavior, leaving the agent to infer usage context from the name and schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

weixin_search_allA

自动翻页搜索多页微信公众号文章并聚合结果,直到空页、命中反爬拦截或达到页数上限为止。

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes搜索关键词
max_pagesNo最多翻页数,默认 10;不可超过服务端硬上限

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden of behavioral disclosure. It explains that the tool automatically turns pages, aggregates results, and stops under three named conditions (empty page, anti-crawler interception, page limit). This is useful context beyond simply saying 'search'. It doesn't cover auth requirements or return format, but the core behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, dense sentence that front-loads the main action and resource, then provides the termination logic. Every part contributes essential information, with no redundant filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter tool with no output schema, the description covers the key functional behavior and edge cases (stopping conditions) well. It does not describe the return format or error handling for anti-crawler interception, but the parameter schema is fully covered and the invocation logic is clear. Minor gap: it doesn't explain what 'aggregated results' look like.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds no new meaning to the parameters beyond what the schema already provides: the 'query' is a keyword and 'max_pages' is a page count with a default and hard limit. The tool description's mention of 'page limit' aligns with but does not exceed the schema's parameter description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb phrase ('自动翻页搜索' - automatically paginate search) and clearly identifies the resource ('微信公众号文章') and action ('聚合结果' - aggregate results). It also lists explicit termination conditions (empty page, anti-crawler interception, page limit), which distinguishes it from the likely single-page sibling 'weixin_search' and the content-fetching sibling 'get_weixin_article_content'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied: an agent can infer this tool is for multi-page search aggregation because it explicitly mentions pagination and aggregation. However, the description does not either explicitly say when to use this vs. the sibling 'weixin_search' or state any exclusions. No alternatives are named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.1.0
    • First observedget_weixin_article_content
    • First observedweixin_search
    • First observedweixin_search_all

TDQS

A3.9/5.0

Scored across 3 tools

Disambiguation4/5

weixin_search and weixin_search_all both search Sogou WeChat articles, but their descriptions clearly distinguish single-page vs aggregated multi-page results. get_weixin_article_content is a separate retrieval step with no overlap.

Naming Consistency3/5

The weixin_search and weixin_search_all names share a consistent prefix and action style, but get_weixin_article_content breaks the pattern by leading with get_ and placing article before content. The naming is still readable, just not uniformly structured.

Tool Count5/5

Three tools is appropriately scoped for a focused WeChat article search-and-read server. Each tool has a distinct role: one-page search, multi-page search, and content retrieval.

Completeness5/5

For the stated purpose of searching WeChat public account articles and reading article text, the surface is complete. Search covers both quick single-page and full paginated needs, and content fetching provides the end-to-end workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    Read WeChat (微信) Official Account articles with native multimodal output — body, images, and video keyframes returned as MCP content blocks. Handles all three embed types: Tencent Video, WeChat-native, and Channels (视频号 metadata via public API).
    1
    7
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables crawling WeChat Official Account articles via the mp.weixin.qq.com search interface, including account search, article listing, incremental crawling, and fetching articles as Markdown with local SQLite storage.
    6
    1
    MIT