Skip to main content
Glama
datoushiwo

wechat-writer-mcp

by datoushiwo
README.md
# wechat-writer-mcp

<div align="center">

<!-- 核心信息徽章 -->
<div style="margin-bottom: 8px;">
  <a href="https://www.npmjs.com/package/wechat-writer-mcp">
    <img src="https://img.shields.io/npm/v/wechat-writer-mcp?style=flat-square&logo=npm&color=cb3837" alt="NPM Version" />
  </a>
  <a href="https://github.com/datoushiwo/wechat-writer-mcp/blob/main/LICENSE">
    <img src="https://img.shields.io/npm/l/wechat-writer-mcp?style=flat-square&color=green" alt="License" />
  </a>
  <a href="https://www.npmjs.com/package/wechat-writer-mcp">
    <img src="https://img.shields.io/npm/dm/wechat-writer-mcp?style=flat-square&logo=npm&color=blue" alt="Downloads" />
  </a>
</div>

<!-- 技术栈徽章 -->
<div>
  <a href="https://nodejs.org/">
    <img src="https://img.shields.io/node/v/wechat-writer-mcp?style=flat-square&logo=node.js&color=339933" alt="Node.js" />
  </a>
  <a href="https://www.typescriptlang.org/">
    <img src="https://img.shields.io/badge/TypeScript-5.0+-blue?style=flat-square&logo=typescript" alt="TypeScript" />
  </a>
  <a href="https://modelcontextprotocol.io/">
    <img src="https://img.shields.io/badge/MCP-1.1.3-purple?style=flat-square" alt="MCP" />
  </a>
  <a href="https://developers.weixin.qq.com/doc/offiaccount/Draft_Box/Add_draft.html">
    <img src="https://img.shields.io/badge/微信公众号-官方API-07c160?style=flat-square" alt="WeChat" />
  </a>
</div>

</div>

面向技术博主的 AI 内容加工流水线 MCP —— 从原始素材到公众号草稿箱,**只存草稿,不自动发布**。

## ⚡ 快速开始

### 一键启动

```bash
npx wechat-writer-mcp
```

### MCP 配置

```json
{
  "mcpServers": {
    "wechat-writer": {
      "command": "npx",
      "args": ["wechat-writer-mcp"],
      "env": {
        "WECHAT_APP_ID": "your_app_id",
        "WECHAT_APP_SECRET": "your_app_secret"
      }
    }
  }
}
```

### 立即体验

```text
AI指令: "导入 ./my-article.md,帮我排版成公众号格式,检查原创度后存入草稿箱"
```

## 🛠️ 核心功能

- **4 个专业工具** - 导入素材、智能排版、原创检测、存入草稿箱
- **官方 API** - 基于微信公众号草稿箱 API,完全合规
- **内容加工** - 段落切分、代码块处理、超链接转脚注、头尾模板、标题候选
- **安全第一** - 永远只存草稿箱,永远不自动群发/发布
- **即插即用** - 支持 Claude Code、Cursor、Claude Desktop

## 📦 工具列表

| 工具 | 说明 | 输入 | 输出 |
|------|------|------|------|
| `import_source` | 导入原始内容 | 本地 markdown 文件或网页 URL | raw_markdown + 标题/字数等元数据 |
| `transform_for_wechat` | 公众号智能排版 | markdown 内容 | 适配 HTML + 3 个标题候选 + 摘要建议 |
| `estimate_originality` | 原创度自评 | 文章内容 | 原创度评分 + 与历史草稿的相似段落 |
| `save_to_wechat_draft` | 存入草稿箱 | 标题 + HTML 内容 | media_id + 后台链接 |

## 💡 使用流程

```
用户: 导入 ./my-article.md
AI:   [调 import_source] 已读入 838 字 markdown
      标题识别:《我用 Claude Code 三周做了一个 MCP Server》

用户: 帮我按公众号风格排版
AI:   [调 transform_for_wechat]
      - 代码块已处理为公众号可显示格式
      - 已应用头尾模板
      - 3 个标题候选:
        1. 我用 Claude Code 三周做了一个 MCP Server
        2. 我用 Claude Code 三周做了一个 MCP Server:完整实践指南
        3. 一文读懂我用 Claude Code 三周做了一个 MCP Server
      要哪个?

用户: 用 1,检查下原创度
AI:   [调 estimate_originality]
      深度原创(92/100)
      建议:可以标记"原创"
      历史比对:无重复内容

用户: OK 存草稿箱
AI:   [调 save_to_wechat_draft]
      ✅ 已存入公众号草稿箱
      → 请前往 mp.weixin.qq.com → 内容管理 → 草稿箱 手动发送
```

## ⚙️ 安装配置

### 方式一:npx 直接运行(推荐)

```bash
npx wechat-writer-mcp
```

### 方式二:本地安装

```bash
git clone https://github.com/datoushiwo/wechat-writer-mcp.git
cd wechat-writer-mcp
npm install
npm run build
```

### 环境变量

```bash
cp .env.example .env
```

| 变量 | 必填 | 说明 |
|------|------|------|
| `WECHAT_APP_ID` | ✅ | 公众号 AppID |
| `WECHAT_APP_SECRET` | ✅ | 公众号 AppSecret |
| `WECHAT_COVERS_DIR` | | 封面图片目录,默认 `~/Pictures/wechat-covers` |
| `WECHAT_DEFAULT_AUTHOR` | | 默认作者名 |
| `WECHAT_API_TIMEOUT` | | API 超时毫秒数,默认 15000 |

### 前置条件

1. **公众号 AppID/AppSecret**:mp.weixin.qq.com → 开发 → 基本配置
2. **IP 白名单**:将你的出口 IP 添加到公众号后台 → 开发 → 基本配置 → IP 白名单

### 客户端配置

<details>
<summary><b>Claude Code</b></summary>

在 `~/.claude/mcp.json` 或项目下 `.claude/mcp.json` 中添加:

```json
{
  "mcpServers": {
    "wechat-writer": {
      "command": "npx",
      "args": ["wechat-writer-mcp"],
      "env": {
        "WECHAT_APP_ID": "your_app_id",
        "WECHAT_APP_SECRET": "your_app_secret"
      }
    }
  }
}
```

</details>

<details>
<summary><b>Cursor</b></summary>

在 Cursor Settings → MCP 中添加,配置同上。

</details>

<details>
<summary><b>Claude Desktop</b></summary>

编辑 `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "wechat-writer": {
      "command": "npx",
      "args": ["wechat-writer-mcp"],
      "env": {
        "WECHAT_APP_ID": "your_app_id",
        "WECHAT_APP_SECRET": "your_app_secret"
      }
    }
  }
}
```

</details>

## ⚠️ 注意事项

- **安全**:AppSecret 永远不要提交到 Git,`.env` 已在 `.gitignore` 中
- **权限**:只调用 `draft/add`,永远不调用 `freepublish/submit` 或 `mass/send`
- **查重**:`estimate_originality` 只与你自己的历史草稿比对,**不能替代微信官方查重**
- **封面**:默认从 `~/Pictures/wechat-covers/` 随机选取,无封面时自动生成占位图
- **模板**:可自定义 `templates/wechat-header.html` 和 `templates/wechat-footer.html`

## 🗺️ Roadmap

- [x] v0.1 - MVP:4 个核心 tool + 公众号草稿箱 API
- [ ] 自定义排版主题
- [ ] 封面图片 AI 推荐
- [ ] 掘金同步发布(v2)
- [ ] 发布后数据反馈
- [ ] 多标题 A/B 建议

## 🤝 贡献

欢迎提 Issue 和 PR。

```bash
git clone https://github.com/datoushiwo/wechat-writer-mcp.git
cd wechat-writer-mcp
npm install
npm run dev  # 开发模式
```

## 📄 License

MIT

---

**让 AI 帮你搞定公众号排版,你只管写内容。** ✍️

TDQS

A4.1/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct purpose: importing source content, transforming it for WeChat, checking originality, and saving as draft. No functional overlap exists.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern (estimate_originality, import_source, transform_for_wechat, save_to_wechat_draft).

Tool Count5/5

Four tools cover the end-to-end workflow of preparing a WeChat article without superfluous or missing pieces, appropriate for the focused domain.

Completeness4/5

The set covers the core cycle of import, transform, originality check, and save. Minor gaps like listing/editing existing drafts are absent but not critical for the primary use case.

Maintenance

ActivitySlowing
ResponsivenessNo issues