关于 wechat-article-downloader
通过 MCP 工具下载微信公众号文章的 Skill。远程 MCP 支持单篇文章和合集,启动本地 MCP 后还可获取账号凭据、批量下载文章并导出 CSV 元数据。
主要功能
- 01下载单篇文章
- 02下载文章合集
- 03通过本地服务批量下载账号文章
- 04获取公众号凭据
- 05将文章元数据导出为 CSV
- 06本地 MCP 不可用时切换远程服务
适用场景
- 01保存单篇微信公众号文章
- 02下载 appmsgalbum 合集
- 03批量归档公众号文章
- 04导出文章统计数据进行分析
MCP 相关
通过 `http://127.0.0.1:4545/mcp` 的本地 MCP 服务调用文章、账号、批量下载和导出工具。本地 MCP 不可用时,远程 MCP 支持下载单篇文章和合集。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ qiye45/ wechatdownload --skill wechat-article-downloader安装后在 Claude Code 中输入/wechat-article-downloader确认已加载。
附带文件evals/evals.json
详细介绍
微信文章下载器
此技能通过与微信文章下载工具交互的 MCP 服务,帮助你下载微信公众号文章。
前提条件
此技能使用本地 MCP 端点 http://127.0.0.1:4545/mcp 来提供完整功能。
如果本地 MCP 不可用,你可以改用 https://changfengbox.top/api/mcp,以使用远程支持的工具。
本地 MCP 工具:
single_article_download- 下载单篇文章get_public_account_id- 获取公众号凭据batch_download_articles- 批量下载公众号的所有文章export_article_data- 将文章元数据导出为 CSV
远程备用 MCP(https://changfengbox.top/api/mcp)目前支持:
- 方法:
initialize、tools/list、tools/call tools/call中的工具name:wechat- 下载单篇文章wechat_collection- 下载公众号合集(appmsgalbum)
重要:远程备用服务不提供 single_article_download、batch_download_articles、get_public_account_id 或 export_article_data 等本地工具名称。
工作流
1. 检查本地 MCP 服务状态
使用大多数功能前,请确认本地 MCP 正在运行:
import requests
LOCAL_MCP_ENDPOINT = "http://127.0.0.1:4545/mcp"
def check_local_mcp():
response = requests.post(
LOCAL_MCP_ENDPOINT,
json={"jsonrpc": "2.0", "method": "initialize", "id": 1},
headers={"Content-Type": "application/json"},
timeout=3,
)
if response.status_code != 200:
raise RuntimeError("Local MCP is not available")
return LOCAL_MCP_ENDPOINT
local_mcp_endpoint = check_local_mcp()
如果无法访问本地 MCP,请告知用户需要:
- 打开微信文章下载工具
- 勾选“启动MCP”复选框,以启动 MCP 服务
- 等待确认消息显示服务已在端口 4545 上运行
2. 下载单篇文章
优先使用本地工具。如果本地 MCP 调用失败,则改用远程 wechat 工具。
import requests
LOCAL_MCP_ENDPOINT = "http://127.0.0.1:4545/mcp"
FALLBACK_DOWNLOAD_MCP_ENDPOINT = "https://changfengbox.top/api/mcp"
def call_tool(endpoint, tool_name, arguments, req_id=2):
payload = {
"jsonrpc": "2.0",
"method": "tools/call",
"id": req_id,
"params": {
"name": tool_name,
"arguments": arguments,
}
}
response = requests.post(
endpoint,
json=payload,
headers={"Content-Type": "application/json"},
timeout=10,
)
response.raise_for_status()
return response.json()
def download_single_article(url):
try:
return call_tool(
LOCAL_MCP_ENDPOINT,
"single_article_download",
{"url": url},
req_id=2,
)
except Exception:
remote_config = {
"保存离线网页": True,
"HTML": True,
"MD": True,
"PDF": False,
"WORD": False,
"TXT": False,
"MHTML": False,
"文件开头添加日期": True,
}
return call_tool(
FALLBACK_DOWNLOAD_MCP_ENDPOINT,
"wechat",
{"url": url, "config": remote_config},
req_id=3,
)
# Example usage
article_url = "https://mp.weixin.qq.com/s/xxxxx"
result = download_single_article(article_url)
print(result)
文章将以工具中配置的格式(HTML、PDF、Word、Markdown、MHTML 等)下载到工具的默认下载目录。
远程 wechat 配置可以使用以下键:
保存离线网页HTMLMDPDFWORDTXTMHTML文件开头添加日期
如果本地 127.0.0.1:4545 不可用,此步骤应自动改用 https://changfengbox.top/api/mcp,并使用工具名称 wechat。
3. 下载合集(appmsgalbum)
对于合集 URL,通过 tools/call 调用远程 wechat_collection:
def download_collection(collection_url):
payload = {
"jsonrpc": "2.0",
"method": "tools/call",
"id": 4,
"params": {
"name": "wechat_collection",
"arguments": {
"url": collection_url,
},
},
}
response = requests.post(
"https://changfengbox.top/api/mcp",
json=payload,
headers={"Content-Type": "application/json"},
timeout=20,
)
response.raise_for_status()
return response.json()
4. 获取公众号凭据(仅限本地)
批量下载前,需要获取公众号凭据。此操作会触发以下流程:
- 工具从示例文章 URL 中提取公众号 ID
- 生成一个需要在微信桌面客户端中打开的特殊链接
- 打开该链接时,工具会自动捕获身份验证凭据
def get_account_credentials():
payload = {
"jsonrpc": "2.0",
"method": "tools/call",
"id": 3,
"params": {
"name": "get_public_account_id",
"arguments": {}
}
}
response = requests.post('http://127.0.0.1:4545/mcp',
json=payload,
headers={"Content-Type": "application/json"})
result = response.json()
return result
result = get_account_credentials()
print(result)
调用此工具后,用户需要:
- 从工具的日志窗口中复制生成的链接
- 在微信桌面客户端中打开该链接(而非浏览器)
- 等待工具自动捕获凭据
- 查找“获取密钥成功”消息
5. 批量下载文章(仅限本地)
获取凭据后,即可批量下载该公众号的所有文章:
def batch_download_articles():
payload = {
"jsonrpc": "2.0",
"method": "tools/call",
"id": 4,
"params": {
"name": "batch_download_articles",
"arguments": {}
}
}
response = requests.post('http://127.0.0.1:4545/mcp',
json=payload,
headers={"Content-Type": "application/json"})
result = response.json()
return result
result = batch_download_articles()
print(result)
批量下载将:
- 根据工具中配置的日期范围和筛选条件下载文章
- 以多种格式保存文章(HTML、PDF、Word、Markdown、MHTML,具体取决于配置)
- 按公众号名称整理文件
- 在工具的日志窗口中显示进度
6. 导出文章数据(仅限本地)
如需将文章元数据(标题、URL、发布日期、阅读量、点赞数等)导出为 CSV:
def export_article_data():
payload = {
"jsonrpc": "2.0",
"method": "tools/call",
"id": 5,
"params": {
"name": "export_article_data",
"arguments": {}
}
}
response = requests.post('http://127.0.0.1:4545/mcp',
json=payload,
headers={"Content-Type": "application/json"})
result = response.json()
return result
result = export_article_data()
print(result)
此操作会将包含文章元数据的 CSV 文件导出到下载目录。
常见工作流
工作流 1:下载单篇文章
用户说:“下载这篇微信文章:https://mp.weixin.qq.com/s/xxxxx”
- 检查本地 MCP 服务状态
- 如果本地服务正在运行,使用该 URL 调用
single_article_download - 如果本地服务不可用,则使用
url + config调用远程wechat - 告知用户下载已开始,并说明文件的保存位置
工作流 2:下载合集(appmsgalbum)
用户说:“下载这个微信公众号合集/appmsgalbum”
- 调用远程
tools/call,并设置name="wechat_collection" - 在
arguments中传入合集 URL - 如有需要,先调用
tools/list验证工具参数 - 告知用户文件的保存位置
工作流 3:批量下载公众号文章(仅限本地)
用户说:“下载这个公众号的所有文章”
- 检查本地 MCP 服务状态
- 确认用户已提供该公众号的一篇示例文章 URL
- 调用
get_public_account_id,并说明用户需要在微信中打开生成的链接 - 等待用户确认已获取凭据
- 调用
batch_download_articles开始批量下载 - 通过工具界面监控进度
工作流 4:导出文章元数据(仅限本地)
用户说:“将文章数据导出为 CSV”或“获取文章统计数据”
- 检查本地 MCP 服务状态
- 确认已获取凭据(如未获取,则引导用户完成凭据获取流程)
- 调用
export_article_data - 告知用户 CSV 文件的保存位置
错误处理
常见问题及解决方案:
单篇下载期间本地 MCP 不可用:自动切换到 https://changfengbox.top/api/mcp,并使用 name="wechat" 重试。
远程工具名称不匹配:远程回退时不要使用本地名称。仅使用 wechat 或 wechat_collection。
凭据获取、批量下载或导出时本地 MCP 不可用:这些工作流仅限本地。用户需要启动微信下载工具并启用 MCP 服务。
未获取凭据:用户需要在微信桌面客户端中打开生成的链接,以完成凭据获取流程。
下载失败:检查工具的日志窗口,查看具体错误消息。常见原因:
- 文章 URL 格式无效
- 网络连接问题
- 微信限流
输出位置
所有下载文件均保存到工具配置的下载目录(默认:工具目录下的 下载/ 文件夹),并按以下方式分类:
- 公众号名称(批量下载时)
- 文章标题
- 格式(HTML、PDF、Word、Markdown、MHTML 等)
下载完成后,工具界面会在日志窗口中显示确切的文件路径。