Beltran12138/wecom-docs-mcp-server
FreeNot checkedWeCom (Enterprise WeChat) document operations via MCP: create, read, and edit Docs and Smartsheets (9 tools). Fills the doc-CRUD gap — existing WeCom MCP server
About
WeCom (Enterprise WeChat) document operations via MCP: create, read, and edit Docs and Smartsheets (9 tools). Fills the doc-CRUD gap — existing WeCom MCP servers only support webhook messaging.
README
⚠️ Archived 2026-08-18 — read this first
Unmaintained, and never published to PyPI. The
pip install wecom-docs-mcp-serverline further down does not work and never did — install from source if you still want to run it.Why it's archived
This server is a stdio proxy over WeCom's robot-doc MCP backend. Tencent's investment has visibly moved to a different surface: the official WecomTeam/wecom-cli (Rust; rewritten for v1.1.0 on 2026-08-17, 14 service domains) plus the official WecomTeam/wecom-unified agent skill. The robot-doc MCP backend has had no public update since 2026-04-22.
What the official CLI now covers
Verified against
@wecom/cliv1.1.0 on 2026-08-18:
This project's selling point Status in v1.1.0 stdio transport Obsolete — the CLI is a local process. Any agent that can run a shell needs no MCP layer at all. ms-epoch → ISO 8601 Obsolete — the CLI returns 2026-08-17 12:17:25directly.Chinese error hints Obsolete — the CLI returns help_message+help_instruction, including a clickable authorization-repair link.Schema passthrough Obsolete — every subcommand accepts --schema(full JSON Schema with field descriptions) and--doc.Smartsheet cell unwrap Still unsolved. v1.1.0 still returns values[field] = [{"type":"text","text":...}], and long rich-text cells fragment into dozens of segments.If you came here to give an agent access to WeCom documents
Use the official CLI, not this:
npm install -g @wecom/cli npx skills add WecomTeam/wecom-unified -y -g wecom-cli auth initThe one part still worth copying
wecom_doc_mcp/transforms.py — the cell-unwrap transform. ~120 lines, no MCP dependency. Lift it as a post-processing filter on CLI output rather than running this server.
Two empirical findings worth keeping
Observed 2026-07 against the robot-doc backend:
get_doc_contentandsmartsheet_get_*use independent permission scopes. The same bot can read a smartsheet viasmartsheet_get_records(errcode 0) and still get851003 no authorityfromget_doc_contenton that same document. Route reads by document type; one working scope proves nothing about the other.- Pass the full document
urlincluding?scode=rather than reconstructingdocid. The backend resolves the URL; stripping prefixes by hand yields301085 invalid docid.
An ergonomic stdio MCP facade over WeCom's official robot-doc MCP backend. It proxies all 25 backend tools verbatim and adds a transform layer that makes the raw output usable by LLM agents:
- Schema passthrough — the tool list is fetched from the backend at startup, so it auto-tracks official updates. Zero schema maintenance.
- Cell unwrap — smartsheet
values[field] = [{"type":"text","text":...}]cells become plain scalars (in a_rowsview). - ms → ISO — 13-digit ms-epoch timestamps (
create_time,update_time) convert to ISO 8601. - Chinese error hints —
errcode851003 etc. get_error_summary+_error_hintso the agent learns the fix, not just the code.
Relationship to the backend: This server requires the official robot-doc MCP backend (an apikey from WeCom admin → 智能文档机器人 → API). It is a thin proxy + ergonomics layer, not a replacement.
Why this exists
The official robot-doc backend is an HTTP (StreamableHttp) MCP server. Two friction points: (1) many MCP clients and dev workflows prefer stdio; (2) its raw output is agent-hostile — nested cell format, ms-epoch strings, opaque error codes. This server bridges both:
| official robot-doc | this server | |
|---|---|---|
| Transport | HTTP (StreamableHttp) | stdio |
| Tool schema | raw 25 tools | same 25, passthrough |
| Cell format | [{"type":"text",...}] |
unwrapped scalars (_rows) |
| Timestamps | ms-epoch strings | ISO 8601 |
| Error codes | 851003 only |
+ Chinese summary + fix hint |
| apikey | required | required (proxied) |
Requirements
- Python 3.9+
- A WeCom 智能文档机器人 (Smart Doc Bot) with its API key — available to enterprises (≥10 members) via WeCom admin → 应用管理 → 智能文档机器人 → API.
Install
⚠️ Never published to PyPI.
pip install wecom-docs-mcp-serverreturns 404. Source install is the only path.
Clone + editable:
git clone https://github.com/Beltran12138/wecom-docs-mcp-server
cd wecom-docs-mcp-server
pip install -e .
Configuration
| Variable | Required | Description |
|---|---|---|
WECOM_MCP_APIKEY |
yes | robot-doc apikey |
WECOM_MCP_BASE_URL |
no | override backend URL (default https://qyapi.weixin.qq.com/mcp/robot-doc) |
Claude Desktop (claude_desktop_config.json)
{
"mcpServers": {
"wecom-doc": {
"command": "wecom-docs-mcp-server",
"env": { "WECOM_MCP_APIKEY": "your_apikey_here" }
}
}
}
Tools
All 25 backend tools are exposed verbatim (fetched live at startup). By domain:
| Domain | Read | Write |
|---|---|---|
| doc | get_doc_content | create_doc, edit_doc_content, upload_doc_image, upload_doc_file |
| smartsheet (智能表) | get_sheet, get_fields, get_records | add/update/delete × sheet/fields/records |
| sheet (电子表格) | get_info | add_sub, delete_sub, update_range_data, append_data |
| smartpage (智能页面) | get_export_result | create, export_task |
Permission model (empirically observed 2026-07):
get_doc_contentandsmartsheet_get_*use independent permission scopes. A bot may read a smartsheet viasmartsheet_get_records(errcode 0) yet get851003 no authorityfromget_doc_contenton the same doc. Route reads by doc type.
Transforms (the value-add)
Applied automatically on every tools/call response:
_rowsonsmartsheet_get_records— a flattened view where cells are unwrapped to scalars and top-level record fields (record_id,create_time, …) are preserved. The originalrecordsarray is kept intact.- ms → ISO on all successful dict payloads — 13-digit ms-epoch strings → ISO 8601. Alphanumeric IDs (
q979lj) are untouched. _error_summary+_error_hinton any non-zero errcode — Chinese explanation + concrete fix.
Usage
Read a smartsheet end-to-end:
User: read https://doc.weixin.qq.com/smartsheet/s3_xxx?scode=yyy
Agent:
1. smartsheet_get_sheet(url=...) → sheet_id (e.g. "q979lj")
2. smartsheet_get_fields(sheet_id, url) → field schema (types, IDs)
3. smartsheet_get_records(sheet_id, url) → records + _rows (cells unwrapped, timestamps ISO)
Pass the full
url(with?scode=) rather than guessingdocid— the backend resolves it. Manually extracting docid by stripping prefixes is error-prone (empirically:301085 invalid docid).
Troubleshooting
| errcode | meaning | fix |
|---|---|---|
| 851000 | 文档链接有误 | check url + scode, or use docid |
| 851002 | 文档类型与工具不兼容 | smartsheet → use smartsheet_get_* |
| 851003 | 无文档权限 | smartsheet 用 smartsheet_get_*;普通文档查后台权限 |
| 851008 | 缺文档内容读取权限 | 企微后台 → 机器人 → API 权限 |
| 301085 | 无效 docid | 用完整 url 含 scode |
| 40058 | 参数缺失 | smartsheet 需 sheet_id(先 get_sheet) |
Related
| Project | Focus |
|---|---|
| official robot-doc MCP | backend (HTTP, ≥10 人企业) |
| wecom-bot-mcp-server | bot messaging via webhook |
| this server | robot-doc stdio proxy + ergonomics |
Tests
pip install -e ".[dev]" # or: pip install pytest httpx
pytest
25 unit tests cover SSE/JSON parsing, ms-timestamp normalization, cell unwrap, error humanizing, and server routing/post-processing — all offline (httpx mocked).
License
MIT
Installing Beltran12138/wecom-docs-mcp-server
This server has no published package — it is built from source. Open the repository and follow its README.
▸ github.com/Beltran12138/wecom-docs-mcp-serverFAQ
Is Beltran12138/wecom-docs-mcp-server MCP free?
Yes, Beltran12138/wecom-docs-mcp-server MCP is free — one-click install via Unyly at no cost.
Does Beltran12138/wecom-docs-mcp-server need an API key?
No, Beltran12138/wecom-docs-mcp-server runs without API keys or environment variables.
Is Beltran12138/wecom-docs-mcp-server hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Beltran12138/wecom-docs-mcp-server in Claude Desktop, Claude Code or Cursor?
Open Beltran12138/wecom-docs-mcp-server on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Notion
Read and write pages in your workspace
by NotionLinear
Issues, cycles, triage — from Claude
by LinearGoogle Drive
Search and read your Drive files
by Googlemindsdb/mindsdb
Connect and unify data across various platforms and databases with [MindsDB as a single MCP server](https://docs.mindsdb.com/mcp/overview).
by mindsdbfulcradynamics/fulcra-context-mcp
MCP server for accessing personal health and biometric data including sleep stages, heart rate, HRV, glucose, workouts, calendar, and location via the Fulcra Li
by fulcradynamicsaymericzip/intlayer
A MCP Server that enhance your IDE with AI-powered assistance for Intlayer i18n / CMS tool: smart CLI access, access to the docs.
by aymericziprinadelph/Agent-MCP
A framework for creating multi-agent systems using MCP for coordinated AI collaboration, featuring task management, shared context, and RAG capabilities.
by rinadelphWhenLabs-org/when
Developer toolkit: auto-detect stack for AI context files, catch port conflicts, validate .env schemas, spot docs drift, audit dependency licenses, and time cod
by WhenLabs-orgmadbonez/caldav-mcp
Universal MCP server for CalDAV protocol integration. Works with any CalDAV-compatible calendar server including Yandex Calendar, Google Calendar (via CalDAV),
by madbonezfreema/mcp-gsheets
MCP server for Google Sheets API integration with comprehensive reading, writing, formatting, and sheet management capabilities.
by freemaCompare Beltran12138/wecom-docs-mcp-server with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All productivity MCPs
