Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Microsoft Planner MCP server — plans, buckets, tasks via Microsoft Graph, ETags handled
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
MS_TENANT_ID, MS_CLIENT_ID, MS_CLIENT_SECRET, PLANNER_ADVANCED_TOOLSET标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"planner": {
"command": "npx",
"args": [
"-y",
"mcp-planner"
],
"env": {
"MS_TENANT_ID": "your-value",
"MS_CLIENT_ID": "your-value",
"MS_CLIENT_SECRET": "your-value",
"PLANNER_ADVANCED_TOOLSET": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add planner --env MS_TENANT_ID=your-value --env MS_CLIENT_ID=your-value --env MS_CLIENT_SECRET=your-value --env PLANNER_ADVANCED_TOOLSET=your-value -- npx -y mcp-planner运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"planner": {
"command": "npx",
"args": [
"-y",
"mcp-planner"
],
"env": {
"MS_TENANT_ID": "your-value",
"MS_CLIENT_ID": "your-value",
"MS_CLIENT_SECRET": "your-value",
"PLANNER_ADVANCED_TOOLSET": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"planner": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"mcp-planner"
],
"env": {
"MS_TENANT_ID": "your-value",
"MS_CLIENT_ID": "your-value",
"MS_CLIENT_SECRET": "your-value",
"PLANNER_ADVANCED_TOOLSET": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
PLANNER_ADVANCED_TOOLSET env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过 GitHub 账户 mspstack 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:MS_TENANT_ID, MS_CLIENT_ID, MS_CLIENT_SECRET
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.4.0)于2个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Spec Driven Development, Remote Desktop Commander, AI Deprecations
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
AI model shutdown dates, replacements, change feed and webhook alerts for 8 providers.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
MCP server for Microsoft Planner via the Microsoft Graph API. Find groups and plans, list buckets and tasks, and create, update, assign, complete, or delete tasks — including descriptions and checklists — with Planner's ETag concurrency handled automatically.
Sibling project to mcp-itglue and mcp-connectwise-psa — same architecture.
| Tool | Description |
|---|---|
planner_search_groups | Find Microsoft 365 groups (Teams) by name → group ID |
planner_find_user | Find a user by name/UPN → user ID for assignments |
planner_list_plans | List plans owned by a group |
planner_get_plan | Plan + its buckets |
planner_create_bucket | Create a bucket in a plan |
planner_list_tasks | Tasks in a plan or bucket (filter by assignee, open/completed) |
planner_list_user_tasks | All tasks assigned to a user, across plans |
planner_get_task | Task with description and checklist |
planner_create_task | Create task (bucket, due date, priority, assignees, description) |
planner_update_task | Update title/bucket/due/priority/progress/assignees |
planner_update_task_details | Update description; add or (un)check checklist items |
planner_delete_task | Permanently delete a task |
graph_find_endpoint † | Search a curated catalog of the /planner, /groups, /users Graph surface |
graph_get † | Read-only GET for any Graph v1.0 path under /planner, /groups, /users |
† Advanced toolset (opt-in, off by default) — an escape hatch for Graph surface the curated tools don't wrap. Enable with PLANNER_ADVANCED_TOOLSET=true or --advanced. graph_get is verb-locked to GET, rejects /beta, and only reaches the three path prefixes above, so a shared app registration's other permissions (e.g. mail) stay out of reach.
Tasks.ReadWrite.All, GroupMember.Read.All, User.Read.All → Grant admin consentMS_TENANT_ID=<tenant> MS_CLIENT_ID=<client-id> MS_CLIENT_SECRET=<secret> npx -y mcp-planner
Claude Code:
claude mcp add planner --env MS_TENANT_ID=<tenant> --env MS_CLIENT_ID=<client-id> --env MS_CLIENT_SECRET=<secret> -- npx -y mcp-planner
npx -y mcp-planner --transport http --port 3000
Sessions authenticate per-request (BYOK) with x-ms-tenant-id + x-ms-client-id plus either x-ms-client-secret (app-only) or x-ms-refresh-token (delegated — see below), or fall back to the MS_* environment credentials when set. When both a secret and a refresh token arrive, the refresh token wins (header-overlay proxies can add but not remove headers). Health probe at GET /health.
App-only sessions act as the app registration; delegated sessions act as a user: their Planner permissions apply and every write is attributed to them.
Tasks.ReadWrite, Group.Read.All, User.ReadBasic.All (+ admin consent where the tenant requires it).node scripts/device-login.mjs --tenant <tenant-id> --client <public-client-id>
MS_REFRESH_TOKEN instead of MS_CLIENT_SECRET (stdio), or the x-ms-refresh-token header (HTTP). Behind the MCP gateway, register it as a personal credential (field x-ms-refresh-token).The refresh token is a secret — it acts as you — and stays valid ~90 days past its last use; re-run the helper when it expires.
docker build -t mcp-planner .
docker run -p 3000:3000 -e MS_TENANT_ID=... -e MS_CLIENT_ID=... -e MS_CLIENT_SECRET=... mcp-planner
No MCP-level role gating: the Entra app registration's granted Graph permissions are the access control. Point sessions at different app registrations (BYOK headers) to scope what they can do.
If-Match ETag on every update/delete — the tools fetch the current resource and pass its ETag automatically. On a 412 (concurrent change), just retry.npm install
npm run dev # stdio npm run dev:http # http npm test npm run build npm run bundle # Claude Desktop .mcpb
MIT