Skip to main content
Glama

mdymcp

⬆️ 已装过的用户升级

升级程序(推荐这条,绕开 uv 索引缓存偶发不更新):

uv tool install --force --refresh mdymcp

(或 uv tool upgrade mdymcp;升完重启 IDE / 重开会话。)

0.5.x(v1 token 多机集中刷新)

单机用户:升级程序即可,无需任何改动(默认仍是本地刷新,全向后兼容)。

多台机器/服务器共用同一明道账号:必须切「服务器集中刷新」。原因——多端各自持有 token 各自刷新,明道每次 refresh 都轮换 refresh_token,会把彼此顶成孤儿(error_code 10101)。 把刷新集中到一台常驻服务器当唯一 owner,其余端只读:在做初始部署的那台跑 mdymcp-install 选 [2] 服务器集中(或 mdymcp-server-setup),其余机器把生成的 ~/.mdymcp/server_token_key + .env 里 4 个 MD_V1_TOKEN_* 拷过去(别在其余机器重新授权)。详见 server/README.md。

⚠️ 若某个项目自己的 venv 里也 import mdymcp(不是只走全局 binary),那份要单独升: uv pip install --python <项目>/.venv/bin/python -U mdymcp。

0.3.0(HAP 改用个人 PAT)— 仍停在 0.2.x 的老用户才需要

0.3.0 起 HAP 改用个人 PAT,不再走旧的 refresh_token / hap_key。去 https://www.mingdao.com/personal?type=pat 生成 PAT(pat_ 开头),然后任选其一:

  • 省事:重跑 mdymcp-install,走到 HAP 步骤粘进去;

  • 手动:编辑 ~/.mdymcp/.env,删掉 MD_HAP_KEY / MD_HAP_REFRESH_TOKEN / MD_HAP_TOKEN,加上 MD_HAP_PAT=pat_xxx。

Related MCP server: mingdao-mcp-server

一键安装

macOS / Linux

curl -LsSf https://raw.githubusercontent.com/andyleimc-source/mdymcp/main/install.sh | sh

Windows(PowerShell)

powershell -c "irm https://raw.githubusercontent.com/andyleimc-source/mdymcp/main/install.ps1 | iex"

脚本做三件事:

  1. 检测 uv,没装就从官方源装上(uv 会自己拉合适的 Python,你机器上是 3.14 / 3.9 还是没装都没关系)

  2. uv tool install mdymcp

  3. 启动 mdymcp-install 交互向导 —— 浏览器 OAuth 拿 v1 凭据 → 自动打开 HAP 个人 PAT 页粘 MD_HAP_PAT → 让你选范围(用户级/项目级/两个都要)+ 编号多选要注册的 IDE → 检测到 Claude Code 时自动安装 mdymcp skill(使用心智 + 故障 SOP)到 ~/.claude/skills/mdymcp/

配置写在 ~/.mdymcp/.env(Windows: %USERPROFILE%\.mdymcp\.env),跨目录都能用。

装完后想重跑:mdymcp-install


功能

明道(Mingdao)统一 MCP Server —— 一次安装,98 个工具:

  • v1 协作 API(50 个,本地实现):动态 / 日程 / 私信 / 收件箱 / 群组 / 用户 / 组织 / 个人账户

  • HAP 网关(48 个,透明代理 api2.mingdao.com/mcp):应用 / 工作表 / 记录 / 角色成员 / 工作流审批 / 图表 / 选项集 / 知识库 / 地区组织

HAP 工具由远端网关动态提供;具体参数 schema 以启动时 tools/list 返回的为准。

支持的 AI IDE

IDE

配置文件

支持范围

Claude Code

~/.claude.json(通过 claude mcp add)

用户级 + 项目级 .mcp.json

Codex CLI

~/.codex/config.toml

用户级

Cursor

~/.cursor/mcp.json

用户级 + 项目级 .cursor/mcp.json

Windsurf

~/.codeium/windsurf/mcp_config.json

用户级

Gemini Antigravity

~/.gemini/antigravity/mcp_config.json

用户级

Trae(含国内版 Trae CN)

mac: ~/Library/Application Support/Trae/User/mcp.jsonwin: %APPDATA%\Trae\User\mcp.jsonlinux: ~/.config/Trae/User/mcp.json

用户级

VS Code(Copilot Chat)

.vscode/mcp.json

项目级

mdymcp-install 会自动检测已装的 IDE,范围 + 客户端两个问题你挑完即可。手动指定:mdymcp-install --client=cursor,windsurf,trae(--client=all 全装)。

Antigravity:写完后去 IDE 里「Manage MCP Servers → Refresh」一下才能看到 mdymcp。

Cursor / Windsurf / Trae / VS Code:通常需要重启 IDE 或在 MCP 设置里手动刷新。


怎么拿 HAP 的 PAT

mdymcp-install 走到 HAP 步骤时会自动开浏览器到 PAT 页,复制粘贴即可。

PAT 页:https://www.mingdao.com/personal?type=pat

  • 已登录 → 直接在页面生成/管理个人 PAT(pat_ 开头)。

  • 未登录 → 先登录,会自动跳回该页。

复制 pat_xxx,在向导提示 MD_HAP_PAT: 时粘进去即可。PAT 本身就是 Bearer token,长期有效、你自己可随时吊销重发,无需服务端交换。留空 = 跳过 HAP,只用 v1 工具。


架构与 Token

┌──────────────────────┐ stdio ┌──────────────────────────────┐
│ Claude Code / Cursor │──────▶│        mdymcp.server         │
│ / Codex / Windsurf / │       ├──────────────────────────────┤
│ Antigravity / Trae / │       │ [静态注册] 50 个 v1 工具     │──┐
│ VS Code Copilot      │       ├──────────────────────────────┤  │HTTP
└──────────────────────┘       │ [动态注册] HapGateway        │──┤
                               │ 48 个 HAP 工具(透明代理)   │  │
                               └──────────────────────────────┘  ▼
                             ┌──────────────────────────────────────┐
                             │ api.mingdao.com/v1/*   (v1 API)      │
                             │ api2.mingdao.com/mcp   (HAP gateway) │
                             └──────────────────────────────────────┘

v1 access_token

HAP token

install 时

本地 OAuth → token 写入 ~/.mdymcp/v1_token.json

粘 PAT → MD_HAP_PAT 写入 .env

运行时

本地 token 文件,过期用 refresh_token 本地续期

直接用 MD_HAP_PAT,无远端交换

缓存 TTL

跟随明道下发的 expires_in(已发布应用 7 天)

不需要(PAT 即 token)

v1 token 全程本地:mdymcp-auth 授权一次拿 access_token + refresh_token 落盘(chmod 600),过期自动用 refresh_token(14 天有效)续期,refresh 也过期才需重新授权。app_key/app_secret 内嵌在包里(公共客户端模式,同 Google/GitHub CLI),零配置。已有旧凭据(MD_ACCOUNT_ID/MD_KEY)且未授权的机器回落老的远端 hook 链路。HAP 直接用 .env 里的 PAT 当 Bearer token。HAP 网关握手失败时不崩 server,仅跳过远端工具注册,v1 工具仍可用。

多机共用同一账号?用 server 模式。 多台机器/服务器持同一对 token 会互相抢刷(明道每次 refresh 都轮换 refresh_token),把对方顶成孤儿(error_code 10101)。把刷新集中到一台常驻服务器当唯一 owner:跑一次 mdymcp-server-setup(或 bash server/provision.sh <IP> <user>),其余机器只读、永不刷新。详见 server/README.md。


配置

~/.mdymcp/.env(或各 IDE 的 MCP JSON 里的 env 块):

# HAP 网关 PAT(在 https://www.mingdao.com/personal?type=pat 生成,pat_ 开头)
MD_HAP_PAT=  # install 时粘贴;留空 = 跳过 HAP

# 可选(通常不用动)
# MD_APP_KEY= / MD_APP_SECRET=<换成自己的 OAuth 应用>
# MD_CALLBACK_PORT=8080
# 旧链路回落(未配 MD_APP_SECRET 时才用)
# MD_ACCOUNT_ID= / MD_KEY= / MD_HOOK_URL=

故障排查

现象

解决

command not found: uv

重开终端;或 export PATH="$HOME/.local/bin:$PATH"

curl / irm 拉 astral.sh 失败

走代理;或从 https://github.com/astral-sh/uv/releases 下载 tarball 手动解压到 ~/.local/bin/

Windows 下 irm | iex 报执行策略错误

管理员 PowerShell:Set-ExecutionPolicy -Scope CurrentUser RemoteSigned

[v1] 本地无可用 token / 刷新 token 失败

跑 mdymcp-auth 重新授权(refresh_token 14 天没用过会过期)

缺 MD_HAP_PAT / PAT 无效或已过期

去 https://www.mingdao.com/personal?type=pat 重新生成 PAT,更新 .env 的 MD_HAP_PAT 或重跑 mdymcp-install

IDE 里看不到 mdymcp

重启 IDE;或在 IDE 的 MCP 设置里点 Refresh。GUI 启动找不到 uvx 时改从终端启动 IDE(默认写绝对路径应该已规避这个)

启动显示 HAP 网关工具 0 个

/mcp 握手失败(多半是网络);v1 工具不受影响

HAP 工具返回 Http Headers verification failed

HAP 后端既有问题(Node 版也有),非 mdymcp bug


API 参考

明道开放平台:https://open.mingdao.com/document

License

MIT

Available Tools

50 tools
calendar_add_membersB

给日程添加成员。member_ids 逗号分隔(明道用户),invited_accounts 为非明道用户(格式 ["电话","邮箱"])。

Inputs: event_id (required), member_ids, invited_accounts, event_recurring_time, +1 more.

calendar_create_eventC

创建日程。日期格式 YYYY-MM-DD HH:MM。member_ids 用逗号分隔多个用户ID。

Inputs: name (required), end_date (required), begin_date (required), address, +11 more.

calendar_edit_eventC

修改日程属性(名称、时间、地点、描述等)。日期格式 YYYY-MM-DD HH:MM。

Inputs: event_id (required), name, address, end_date, +11 more.

calendar_get_event_detailsC

获取单个日程的详细信息。

Inputs: event_id (required).

calendar_get_eventsA

获取日程列表。通过日历订阅接口拉取 iCal 数据并解析。

日期格式 YYYY-MM-DD(北京时间)。

  • 不传日期:默认取 [今天-30, 今天](订阅 feed 通常只到当天,查未来多为空)。 全量约 2600+ 条会撑爆上下文,故有默认范围,需更早请显式传 start_date。

  • organizer:按组织者过滤(邮箱或姓名子串,大小写不敏感)。看某人日程用这个, 例:organizer="phil.ren" 查任向晖。

  • keyword:按标题(summary)子串过滤。

  • limit:最多返回条数(默认 200),超出按时间倒序截断并标记 truncated。

Inputs: limit, keyword, end_date, organizer, +1 more.

calendar_get_unconfirmed_eventsB

获取当前用户未确认的日程邀请。

Inputs: page_size, page_index.

calendar_remove_eventC

删除日程。removing_all_recurring_events: 是否删除所有循环日程。

Inputs: event_id (required), event_recurring_time, removing_all_recurring_events.

company_get_by_idC

根据组织ID查询组织信息。

Inputs: project_id (required).

company_get_departmentsC

获取组织的部门列表。

Inputs: project_id (required).

company_get_projectsA

获取当前用户所属的组织列表。

Inputs: no named parameters.

group_add_adminB

添加群组管理员。

Inputs: group_id (required), account_id (required).

group_createC

创建一个新群组。group_name 为群组名称。

Inputs: group_name (required), about, project_id, is_approval.

group_create_discussionC

创建讨论组。account_ids 用逗号分隔。

Inputs: name (required), account_ids.

group_editC

编辑群组信息。

Inputs: group_id (required), name, about, is_approval.

group_get_detailC

获取群组详情(含成员信息)。

Inputs: group_id (required).

group_get_membersC

获取群组成员列表。

Inputs: group_id (required), pagesize.

group_get_my_createdA

获取当前用户创建的所有群组。

Inputs: no named parameters.

group_get_my_joinedA

获取当前用户加入的所有群组。

Inputs: no named parameters.

group_get_project_groupsC

获取组织下所有群组。

Inputs: project_id.

group_get_project_membersC

获取组织群组的成员列表。

Inputs: group_id (required), pagesize.

message_get_postC

获取与动态相关的收件箱消息。

Inputs: pagesize.

message_get_systemC

获取系统消息列表。

Inputs: pagesize.

passport_get_detailA

获取当前登录用户的详细信息。

Inputs: no named parameters.

passport_get_settingA

获取当前用户的账户设置。

Inputs: no named parameters.

passport_get_unread_countB

获取各类未读消息数量。

Inputs: no named parameters.

passport_get_user_cardB

获取当前用户的个人名片。

Inputs: no named parameters.

post_add_postB

发布一条新动态。post_type: 0=普通,1=链接,2=图片,3=文档,4=提问,7=投票。group_ids/project_ids 逗号分隔。

Inputs: post_msg (required), group_ids, post_type, project_ids.

post_add_post_replyC

给指定动态添加评论。reply_id 为回复某条评论时填写。

Inputs: post_id (required), reply_msg (required), reply_id.

post_delete_postB

删除一条动态。

Inputs: post_id (required).

post_delete_post_replyA

删除一条动态评论。post_id 必填,reply_id 为要删除的评论ID。

Inputs: post_id (required), reply_id.

post_get_all_postsA

获取全公司可见的动态流。可按关键词、类型、群组过滤。用 max_id 翻页。

Inputs: max_id, group_id, keywords, pagesize, +3 more.

post_get_group_postsC

获取指定群组的动态。

Inputs: group_id (required), max_id, pagesize.

post_get_my_postsC

获取当前用户自己发布的动态。

Inputs: max_id, pagesize.

post_get_post_detailA

获取单条动态的详细信息。

Inputs: post_id (required).

post_get_post_replyC

获取某条动态的评论列表。

Inputs: post_id (required), max_id, pagesize.

post_get_post_select_groupsB

获取当前用户可以发布动态的群组列表。

Inputs: no named parameters.

post_get_user_postsC

获取指定用户的动态。account_id 为目标用户ID。

Inputs: account_id (required), max_id, pagesize.

user_get_by_phoneC

根据手机号或邮箱查找用户。

Inputs: identifier (required).

user_get_cardC

获取指定用户的名片信息。

Inputs: account_id (required).

user_get_friendsC

获取当前用户的联系人列表。

Inputs: pagesize.

user_get_mentionedA

获取可 @ 的用户列表,可按关键词过滤。

Inputs: keywords.

user_get_project_usersC

获取组织通讯录(所有成员)。

Inputs: pagesize, project_id.

user_get_subordinateC

获取下属列表。

Inputs: project_id (required).

webchat_get_chat_listB

获取聊天会话列表。

Inputs: no named parameters.

webchat_get_message_by_idB

根据消息ID获取前后消息。account_id 和 group_id 二选一。

Inputs: message_id (required), size, group_id, account_id.

webchat_get_message_countB

获取与某人或某群的消息总数。account_id 和 group_id 二选一。

Inputs: group_id, account_id.

webchat_get_messagesB

获取与某人或某群的消息记录。account_id 和 group_id 二选一。

Inputs: keyword, group_id, pagesize, pageindex, +1 more.

webchat_get_unread_countB

获取未读消息总数。

Inputs: no named parameters.

webchat_send_messageA

给用户或群组发送文本消息。account_id 和 group_id 二选一。

Inputs: message (required), group_id, account_id.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    C2.8/5.0

    Scored across 50 tools

    Disambiguation4/5

    Most tools have distinct purposes through different resource+verb combinations (e.g., calendar_get_events vs calendar_search), but the sheer number of similar 'get' tools and overlapping scope (e.g., post_get_all_posts vs post_get_group_posts) may cause occasional misselection. Overall, descriptions help differentiate.

    Naming Consistency4/5

    Tools consistently follow a prefix_verb_noun snake_case pattern (e.g., group_create, post_delete_post). Minor inconsistencies exist like 'webchat_get_message_by_id' vs 'webchat_get_messages' and 'post_add_post' redundancy, but the pattern is predictable.

    Tool Count2/5

    With 50 tools, the set is far beyond the typical well-scoped range (3-15). Although the platform covers many domains, the high count risks overwhelming agents and increasing selection errors. A more focused subset would improve usability.

    Completeness3/5

    The tool set covers major CRUD-like operations for calendars, posts, groups, and chat, but lacks some obvious actions like group deletion, user information updates, or file handling. The coverage is decent but not fully comprehensive for the implied collaboration domain.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      Not graded
      quality
      D
      maintenance
      A comprehensive MCP server providing over 390 tools across 66 providers, including major SaaS platforms like GitHub, Slack, and Stripe. It enables AI assistants to interact directly with a wide array of public APIs and utility services through a single interface.
      -
    • A
      license
      A
      quality
      D
      maintenance
      MCP server for Mingdao Worksheet API. Enables listing worksheets, querying records, and performing CRUD operations on Mingdao (明道云) works through natural language.
      13
      22 npm
      1
      MIT
    • A
      license
      Not graded
      quality
      C
      maintenance
      MCP server for Feishu/Lark API integration, enabling AI agents to send messages, manage groups, create and edit documents and spreadsheets, and search knowledge bases.
      MIT