wecom-docs-mcp-server

Operações de documentos do WeCom (WeChat Empresarial) via MCP — criar, ler e editar Docs e Smartsheets. 9 ferramentas. Preenche a lacuna de CRUD de documentos: servidores MCP WeCom existentes suportam apenas mensagens via webhook

Documentação

wecom-docs-mcp-server

⚠️ Arquivado em 2026-08-18 — leia isto primeiro

Sem manutenção, e nunca publicado no PyPI. A linha pip install wecom-docs-mcp-server mais abaixo não funciona e nunca funcionou — instale a partir do código-fonte se ainda quiser executá-lo.

Por que foi arquivado

Este servidor é um proxy stdio sobre o backend robot-doc MCP do WeCom. O investimento da Tencent visivelmente migrou para uma superfície diferente: o WecomTeam/wecom-cli oficial (Rust; reescrito para v1.1.0 em 2026-08-17, 14 domínios de serviço) além da habilidade oficial de agente WecomTeam/wecom-unified. O backend robot-doc MCP não recebe atualizações públicas desde 2026-04-22.

O que a CLI oficial agora cobre

Verificado contra @wecom/cli v1.1.0 em 2026-08-18:

Diferencial deste projetoStatus na v1.1.0
Transporte stdioObsoleto — a CLI é um processo local. Qualquer agente que execute um shell não precisa de camada MCP alguma.
ms-epoch → ISO 8601Obsoleto — a CLI retorna 2026-08-17 12:17:25 diretamente.
Dicas de erro em chinêsObsoleto — a CLI retorna help_message + help_instruction, incluindo um link clicável de reparo de autorização.
Passagem de esquemaObsoleto — todo subcomando aceita --schema (JSON Schema completo com descrições de campos) e --doc.
Desempacotamento de células do SmartsheetAinda não resolvido. A v1.1.0 ainda retorna values[field] = [{"type":"text","text":...}], e células longas de rich text se fragmentam em dezenas de segmentos.

Se você veio aqui para dar a um agente acesso a documentos do WeCom

Use a CLI oficial, não esta:

npm install -g @wecom/cli
npx skills add WecomTeam/wecom-unified -y -g
wecom-cli auth init

A única parte que ainda vale copiar

wecom_doc_mcp/transforms.py — a transformação de desempacotamento de células. ~120 linhas, sem dependência de MCP. Reaproveite como filtro de pós-processamento na saída da CLI em vez de executar este servidor.

Duas descobertas empíricas que valem manter

Observado em 2026-07 contra o backend robot-doc:

  • get_doc_content e smartsheet_get_* usam escopos de permissão independentes. O mesmo bot pode ler um smartsheet via smartsheet_get_records (errcode 0) e ainda receber 851003 no authority de get_doc_content no mesmo documento. Roteie leituras por tipo de documento; um escopo funcional não prova nada sobre o outro.
  • Passe o url completo do documento, incluindo ?scode=, em vez de reconstruir docid. O backend resolve a URL; remover prefixos manualmente resulta em 301085 invalid docid.

MCP Python License: MIT Tests

Uma fachada MCP stdio ergonômica sobre o backend oficial robot-doc MCP do WeCom. Ela faz proxy de todas as 25 ferramentas do backend verbatim e adiciona uma camada de transformação que torna a saída bruta utilizável por agentes de LLM:

  • Passagem de esquema — a lista de ferramentas é buscada do backend na inicialização, então ela acompanha automaticamente as atualizações oficiais. Zero manutenção de esquema.
  • Desempacotamento de células — células values[field] = [{"type":"text","text":...}] do smartsheet tornam-se escalares simples (em uma visão _rows).
  • ms → ISO — timestamps ms-epoch de 13 dígitos (create_time, update_time) convertem para ISO 8601.
  • Dicas de erro em chinêserrcode 851003 etc. recebem _error_summary + _error_hint para que o agente aprenda a correção, não apenas o código.

Relação com o backend: Este servidor requer o backend oficial robot-doc MCP (uma apikey do admin do WeCom → 智能文档机器人 → API). É um proxy fino + camada de ergonomia, não um substituto.


Por que isto existe

O backend oficial robot-doc é um servidor MCP HTTP (StreamableHttp). Dois pontos de atrito: (1) muitos clientes MCP e fluxos de trabalho de desenvolvimento preferem stdio; (2) sua saída bruta é hostil a agentes — formato de célula aninhado, strings ms-epoch, códigos de erro opacos. Este servidor resolve ambos:

robot-doc oficialeste servidor
TransporteHTTP (StreamableHttp)stdio
Esquema de ferramentas25 ferramentas brutasas mesmas 25, passagem direta
Formato de célula[{"type":"text",...}]escalares desempacotados (_rows)
Timestampsstrings ms-epochISO 8601
Códigos de erroapenas 851003+ resumo em chinês + dica de correção
apikeyobrigatóriaobrigatória (proxied)

Requisitos

  • Python 3.9+
  • Um 智能文档机器人 (Smart Doc Bot) do WeCom com sua chave de API — disponível para empresas (≥10 membros) via admin do WeCom → 应用管理 → 智能文档机器人 → API.

Instalação

⚠️ Nunca publicado no PyPI. pip install wecom-docs-mcp-server retorna 404. Instalação a partir do código-fonte é o único caminho.

Clone + instalável:

git clone https://github.com/Beltran12138/wecom-docs-mcp-server
cd wecom-docs-mcp-server
pip install -e .

Configuração

VariávelObrigatóriaDescrição
WECOM_MCP_APIKEYsimapikey do robot-doc
WECOM_MCP_BASE_URLnãosobrescreve a URL do backend (padrão 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" }
    }
  }
}

Ferramentas

Todas as 25 ferramentas do backend são expostas verbatim (buscadas ao vivo na inicialização). Por domínio:

DomínioLeituraEscrita
docget_doc_contentcreate_doc, edit_doc_content, upload_doc_image, upload_doc_file
smartsheet (智能表)get_sheet, get_fields, get_recordsadd/update/delete × sheet/fields/records
sheet (电子表格)get_infoadd_sub, delete_sub, update_range_data, append_data
smartpage (智能页面)get_export_resultcreate, export_task

Modelo de permissão (observado empiricamente em 2026-07): get_doc_content e smartsheet_get_* usam escopos de permissão independentes. Um bot pode ler um smartsheet via smartsheet_get_records (errcode 0) e ainda receber 851003 no authority de get_doc_content no mesmo documento. Roteie leituras por tipo de documento.


Transformações (o valor agregado)

Aplicadas automaticamente em toda resposta tools/call:

  1. _rows em smartsheet_get_records — uma visão achatada onde células são desempacotadas para escalares e campos de registro de nível superior (record_id, create_time, …) são preservados. O array original records é mantido intacto.
  2. ms → ISO em todos os payloads de dict bem-sucedidos — strings ms-epoch de 13 dígitos → ISO 8601. IDs alfanuméricos (q979lj) não são alterados.
  3. _error_summary + _error_hint em qualquer errcode não-zero — explicação em chinês + correção concreta.

Uso

Leia um smartsheet de ponta a ponta:

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)

Passe o url completo (com ?scode=) em vez de adivinhar docid — o backend resolve. Extrair manualmente o docid removendo prefixos é propenso a erros (empiricamente: 301085 invalid docid).


Solução de problemas

errcodesignificadocorreção
851000文档链接有误verifique url + scode, ou use docid
851002文档类型与工具不兼容smartsheet → use smartsheet_get_*
851003无文档权限smartsheet 用 smartsheet_get_*;普通文档查后台权限
851008缺文档内容读取权限企微后台 → 机器人 → API 权限
301085docid inválidouse url completa com scode
40058parâmetro ausentesmartsheet precisa de sheet_id (primeiro get_sheet)

Relacionados

ProjetoFoco
robot-doc MCP oficialbackend (HTTP, empresas ≥10 pessoas)
wecom-bot-mcp-servermensagens de bot via webhook
este servidorproxy stdio robot-doc + ergonomia

Testes

pip install -e ".[dev]"  # or: pip install pytest httpx
pytest

25 testes unitários cobrem parsing SSE/JSON, normalização de timestamps ms, desempacotamento de células, humanização de erros e roteamento/pós-processamento do servidor — todos offline (httpx mockado).


Licença

MIT