Skip to main content
Glama

๐Ÿ“„ wecom-doc-mcp

Let AI read your Enterprise WeChat docs โ€” in real time.

MCP Node TypeScript License

English ยท ไธญๆ–‡


๐Ÿค” Why

Enterprise WeChat documents sit behind SSO. AI assistants can't access them.

This MCP server bridges the gap: provide your browser cookie once, and the server handles authenticated fetching + HTML-to-Markdown conversion on every request.

๐Ÿ’ฌ "ๅธฎๆˆ‘็œ‹ไธ‹่ฟ™ไธชๆ–‡ๆกฃ: https://doc.weixin.qq.com/doc/w3_xxx"
         โ”‚
         โ–ผ
   โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     ๐Ÿช      โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”     ๐Ÿ“     โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
   โ”‚ Claude Code  โ”‚ โ”€โ”€Cookieโ”€โ”€โ–ถ โ”‚  MCP Server   โ”‚ โ”€โ”€HTMLโ”€โ”€โ–ถ โ”‚ Markdown โ”‚
   โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜             โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜            โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Related MCP server: wecom-docs-mcp-server

๐Ÿ› ๏ธ Tools

Tool

Description

๐Ÿ“– fetch_wecom_doc

Fetch a document by URL โ†’ return Markdown

๐Ÿช set_wecom_cookie

Save cookie locally (chmod 600)

โœ… check_wecom_auth

Verify if saved cookie is still valid

๐Ÿš€ Quick Start

Step 1 โ€” Install

git clone https://github.com/SIE-Operations-and-Maintenance-Team/wecom-doc-mcp.git
cd wecom-doc-mcp
npm install

Step 2 โ€” Register with Claude Code

Add to ~/.mcp.json:

{
  "mcpServers": {
    "wecom-doc": {
      "command": "npx",
      "args": ["tsx", "/path/to/wecom-doc-mcp/src/index.ts"]
    }
  }
}
1. ๐ŸŒ  Open doc.weixin.qq.com โ†’ log in
2. ๐Ÿ”ง  F12 โ†’ Network tab
3. ๐Ÿ“‹  Click any request โ†’ copy the Cookie header value

Step 4 โ€” Use It

You:    ๅธฎๆˆ‘่ฎพ็ฝฎไผไธšๅพฎไฟก Cookie: <paste>
Claude: โœ… Cookie ๅทฒไฟๅญ˜

You:    ๅธฎๆˆ‘็œ‹ไธ‹่ฟ™ไธชๆ–‡ๆกฃ: https://doc.weixin.qq.com/doc/w3_xxx
Claude: # ๆ–‡ๆกฃๆ ‡้ข˜
        ่ฟ™ๆ˜ฏๆ–‡ๆกฃ็š„ๅ†…ๅฎน...

๐Ÿ“ Architecture

                          wecom-doc-mcp
                    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
                    โ”‚                     โ”‚
  fetch_wecom_doc โ”€โ”€โ”ค  ๐Ÿ“ก /dop-api/opendocโ”‚
        โ”‚           โ”‚  Call WeChat's       โ”‚
        โ”‚           โ”‚  internal API for    โ”‚โ”€โ”€โ”€โ”€ ๐Ÿ“ Markdown
        โ”‚           โ”‚  document JSON data  โ”‚
        โ”‚           โ”‚                     โ”‚
        โ”‚           โ”‚  ๐Ÿงน cleanDocText    โ”‚
        โ”‚           โ”‚  Strip HYPERLINK     โ”‚
        โ”‚           โ”‚  markup โ†’ clean text โ”‚
        โ”‚           โ”‚                     โ”‚
        โ”‚           โ”‚  ๐Ÿ“„ Fallback:       โ”‚
        โ”‚           โ”‚  cheerio + turndown  โ”‚
        โ”‚           โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
        โ”‚
  set_wecom_cookie โ”€โ”€โ”€ ๐Ÿ’พ ~/.claude/wecom-doc-mcp/.env (mode 600)
        โ”‚
  check_wecom_auth โ”€โ”€โ”€ ๐Ÿฅ /dop-api/opendoc โ†’ clientVars.isLogin?

Two modes, your choice:

Mode

How

When

๐Ÿ’พ Persistent

set_wecom_cookie โ†’ saved to ~/.claude/wecom-doc-mcp/.env

Set once, use forever (until expiry)

โšก Per-request

Pass cookie param to fetch_wecom_doc

Override on the fly

๐Ÿ”’ Cookie file lives outside the project directory โ€” never committed, never shared, chmod 600.

๐Ÿ“‘ Supported Document Types

Type

URL Pattern

Status

๐Ÿ“ Documents

/doc/

โœ… Verified

๐Ÿ“Š Spreadsheets

/sheet/

โœ… Verified

๐ŸŽž๏ธ Slides

/slide/

๐Ÿ”ง No dedicated parser

๐Ÿง  Mind Maps

/mind/

โœ… Verified

๐Ÿ”€ Flowcharts

/flowchart/

๐Ÿ”ง No dedicated parser

๐Ÿ“‹ Smart Sheets

/smartsheet/

โœ… Verified

  • โœ… Verified: exercised against real documents. Spreadsheets (4 worksheet tabs), smart sheets (15 worksheets / 2103 rows) and documents (2 files) were verified in this round; mind maps were verified by the original author (this round only added rendering unit tests, the fetching logic is unchanged).

  • ๐Ÿงช Implemented, needs a sample: code path implemented and covered by synthetic cases, but no real document of this type was available; a payload mismatch raises a clear error.

  • ๐Ÿ”ง No dedicated parser: the payload shape is unknown, so the tool falls back to extracting the page HTML, strips toolbar/menu nodes, and labels the result as page text.

Spreadsheets (src/sheet.ts): cells are not part of the document-text payload but live in collab_client_vars.initialAttributedText.text[0].related_sheet as base64 + zlib + protobuf, rendered as one Markdown table per worksheet.

  • tab=<sheetId> in the URL selects the worksheet (forwarded to the API); otherwise the default tab is read;

  • at most 100 data rows per call by default, with an explicit note of how many were omitted; use rowStart / rowEnd (1-based, header excluded) โ€” non-numeric or out-of-range values are reported;

  • rows above the header (template title, dropdown option definitions) are listed separately;

  • date cells hold Excel serial numbers (e.g. 46303 = 2026-10-08).

Smart Sheets (src/smartsheet.ts): a different payload โ€” plain JSON in text[0].workbook (sheets, dashboards, forms) and text[0].smartsheet.

  • Column names carry their type (e.g. ็Šถๆ€(ๅ•้€‰), ๅผ€ๅง‹ๆ—ถ้—ด(ๆ—ฅๆœŸ)); single-select/person columns resolve to option names; dates are converted from millisecond timestamps to local dates; number/formula columns show the computed result; unsupported shapes are marked [ๆœช่งฃๆž็š„็ฑปๅž‹N];

  • one request returns a single worksheet โ€” other worksheets need tab=<sheetId> in the link, otherwise the tool fails with an explicit message;

  • row order follows the view definition (matching the UI); form-backed worksheets fall back to the payload's own order; skipped empty rows are reported.

Re-runnable checks (scripts kept in a local temp directory, not committed): verify-sheet.ts, verify-fixes.ts, verify-varint.ts, verify-smartsheet.ts (real responses), verify-mind.ts, and verify-e2e.ts (needs a live cookie; covers worksheets, real documents, real smart sheets, parameter validation, error messages, and cookie leak prevention โ€” copy it into the project root and run npx tsx verify-e2e.ts).

๐Ÿ“ฆ Tech Stack

Dependency

Purpose

@modelcontextprotocol/sdk

MCP protocol implementation

cheerio

HTML parsing

turndown

HTML โ†’ Markdown conversion

tsx

TypeScript runtime

๐Ÿ“„ License

MIT


Tool Schema Changelog

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

Loading tool schema changelogโ€ฆ

    Related MCP Connectors

    Related MCP Servers