planner-mcp
MCP server for Microsoft Planner Premium offering read-only access to Planner data through a secure browser automation worker, with fail-closed configuration and mock mode for safe testing.
README
m365-ui-mcp
m365-ui-mcp is the Microsoft 365 semantic UI MCP evolving from the hardened planner-mcp foundation. The control plane is backed by a private Playwright/Chromium browser worker and is being generalized in gated phases while preserving the existing Planner public contract.
Transition status
The GitHub repository identity is pestoura/m365-ui-mcp. Canonical Python/CLI namespaces are now m365_mcp, m365_browser_worker, m365-ui-mcp and m365-browser-worker; the Planner package/CLI surfaces remain compatibility interfaces while shared-core extraction continues.
The immutable pre-M365 Planner baseline is planner-pre-m365-0.1.0.
Current release scope
The 0.1.0 compatibility contract is deliberately read-only:
- 17 MCP read tools, all existing
planner_*public names preserved; - zero public mutation tools;
- Microsoft Graph is not used as the functional backend;
- browser capabilities are published only from attested UI evidence;
- live browser automation fails closed when the required UIContract state is not attested;
- Conditional Access, device-enrolment requirements and ambiguous authentication states are blockers, never bypassed;
- MFA remains human-in-the-loop; credentials and authenticator approval are not automated.
The default runtime mode is mock. CI and isolated acceptance must never contact a real Microsoft 365 tenant.
Architecture
The runtime is split into two trust zones:
- MCP control plane — FastMCP over Streamable HTTP, contracts, policy, state, redaction, metrics and semantic tool registration.
- Private browser worker — FastAPI + Playwright/Chromium, isolated from direct MCP clients and restricted to typed semantic operations.
The M365 target architecture and transition backlog live under docs/m365-transition/. The immutable Planner architecture/specification remains under docs/ and continues to define the 0.1.0 compatibility baseline until migrated through the PLN-MIG-* parity gates.
Runtime configuration
Configuration is typed and fail-closed. M365_* is the canonical namespace. The equivalent PLANNER_* names remain bounded compatibility aliases with status DEPRECATED_ALIAS and planned removal at major version 2.0.0.
When canonical and legacy aliases are both present they must contain the same literal value. Divergent definitions fail with CONFIG_INVALID; error context contains variable names only and never their values. Credential-shaped variable names under either namespace — for example names containing TOKEN, PASSWORD, SECRET, API_KEY, COOKIE or PRIVATE_KEY — are rejected.
live mode requires an explicit worker URL and absolute state path through either canonical or legacy aliases. The existing default state location is intentionally unchanged during CORE-004; state-path migration is a separate controlled change.
| Canonical variable | Legacy alias | Default | Notes |
|---|---|---|---|
M365_MODE |
PLANNER_MODE |
mock |
mock or live |
M365_MCP_HOST |
PLANNER_MCP_HOST |
127.0.0.1 |
Control-plane bind host |
M365_MCP_PORT |
PLANNER_MCP_PORT |
8080 |
Port 1–65535 |
M365_WORKER_URL |
PLANNER_WORKER_URL |
http://127.0.0.1:8090 |
Required explicitly in live; HTTP(S), no URL userinfo |
M365_STATE_PATH |
PLANNER_STATE_PATH |
/var/lib/planner-mcp/state.sqlite3 |
Required explicitly in live; must be absolute |
M365_REQUEST_TIMEOUT_S |
PLANNER_REQUEST_TIMEOUT_S |
30 |
Positive, maximum 300 seconds |
M365_REQUIRE_UI_ATTESTATION |
PLANNER_REQUIRE_UI_ATTESTATION |
true |
Cannot be disabled in live |
M365_ALLOW_MUTATIONS |
PLANNER_ALLOW_MUTATIONS |
false |
Must remain false in 0.1.0 |
M365_LOG_LEVEL |
PLANNER_LOG_LEVEL |
INFO |
DEBUG, INFO, WARNING, ERROR or CRITICAL |
M365_WORKER_HOST |
PLANNER_WORKER_HOST |
127.0.0.1 |
Private worker bind host |
M365_WORKER_PORT |
PLANNER_WORKER_PORT |
8090 |
Private worker bind port |
Readiness exposes only a sanitized configuration summary: host, worker URL and state path are emitted as [REDACTED]. Credentials, tokens, cookies and authentication material are not valid configuration fields.
Development
Requirements: Python 3.12+.
python -m pip install -e ".[dev]"
python -m compileall -q src tests scripts
ruff check .
mypy
pytest -q
python scripts/check_docs.py
Canonical entry points:
m365-ui-mcp
m365-browser-worker
m365-ui-mcp-healthcheck
Compatibility entry points remain:
planner-mcp
planner-browser-worker
planner-mcp-healthcheck
Existing planner_* MCP tool names are not coupled to repository/package naming and remain PRESERVE.
Container definitions are in docker/ and docker-compose.yml. Base images are digest-pinned and CI blocks HIGH/CRITICAL Trivy findings, validates two CycloneDX SBOMs, performs secret/dependency scanning and runs isolated acceptance.
Governance and release gates
A capability is not considered live-supported because code exists or a mock test passes. Promotion requires evidence and attestation. The current Planner baseline remains governed by:
docs/planner-premium-capabilities.mddocs/ui-contract.mddocs/acceptance.mddocs/definition-of-done.mddocs/release-process.md
Backlog keys P-001..P-074 and EPIC-01..EPIC-10 remain canonical in docs/backlog.md. The M365 transition uses the separate M365-SETUP-*, CORE-*, PLN-MIG-*, OUT-*, XAPP-* and REL-* namespaces in docs/m365-transition/roadmap-and-backlog.md.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。