
CIPP MCP - Microsoft 365, Entra ID, Intune, Exchange, Defender, GDAP
io.github.Servosity由 GitHub 账号 Servosity 发布v0.1.13更新于 Oct 29, 2026
MSP MCP for CIPP: Microsoft 365, Entra ID, Intune, Exchange, Defender and GDAP across all tenants
概览
本地 MCP 服务器与 CLI,让 AI 助手通过自建的 CIPP 实例读取并管理各客户租户的 Microsoft 365、Entra ID、Intune、Exchange 与 Defender。
- 可以做什么
- 跨所有客户租户执行 CIPP 读取,并把带日期的快照保存到本地 SQLite
- 生成按租户的汇总表:MFA 与条件访问状况、标准、DLP、保留策略与标签
- 比较不同时间的快照,并对比整个客户群的条件访问策略差异
- 查看 GDAP 委派管理关系、租户记分卡与管理员角色变更
- 规划并执行由 CSV 驱动的批量操作,例如创建用户与离职处理
- 检查凭据与连通性,并清除本地存储、缓存与日志
- 适用场景
- 适合已经自建 CIPP 实例的 MSP 运维人员:希望 AI 助手跨多个客户租户回答整体性问题、保留带日期的副本以便比较,并用自然语言驱动 CIPP 的管理操作。
- 运行要求
- 以本地进程(stdio)运行于 macOS、Windows 或 Linux,可通过 .mcpb 包或安装脚本部署,安装脚本同时放置配套的 cipp-cli。需要自己的自建 CIPP 实例:CIPP_BASE_URL(以 /api 结尾)以及 CIPP API 客户端签发的凭据,通过 CIPP_API_KEY 提供或经 OAuth2 客户端凭据登录获取。CIPP_MCP_HTTP_TOKEN 仅在 HTTP 传输时需要。
安装
在 SourceWeft 中
- 打开 控制台中的 CIPP MCP - Microsoft 365, Entra ID, Intune, Exchange, Defender, GDAP,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
CIPP + AI: MCP server for Microsoft 365, Entra ID, Intune, Exchange, Defender and GDAP - for Claude, the ChatGPT desktop app, GitHub Copilot, Gemini CLI, and any agent that speaks MCP
Unofficial. Community-built Claude Code Skill and MCP server for the CIPP API. Not affiliated with, endorsed by, or sponsored by CyberDrain.
[CIPP + Microsoft 365 demo - animated preview]
▶ Watch the 30-second demo - demo data is simulated; every command shown exists in the real CLI.
MCP server and CLI for CIPP - Microsoft 365, Entra ID, Intune, Exchange Online, Defender and GDAP across every client tenant, with a local store, offline joins across endpoints, and history over time. Works with the AI you already use - ChatGPT (desktop app), Claude Desktop, Codex, Claude Code, Claude Cowork, and GitHub Copilot - plus Gemini CLI. Free, open source, runs on your laptop. Built for MSP owners. No code required.
Works with your agent
The write preview, read-only switch, token-protected HTTP mode and local-data controls described on this page ship in cipp 0.1.13 and later. Check with
cipp-cli --version.
The six agents MSP owners actually use (self-serve, works today):
The ChatGPT desktop app runs cipp-mcp locally and shares MCP configuration with Codex (OpenAI). ChatGPT on the web needs a remote server, which msp-skills does not support yet. If your team works there, a hosted gateway is the better pick; check that your AI app is on the gateway's setup list. Setup steps: mcp-install.md.
Also for the Microsoft and Google stacks
Big install base, but an honest heads-up: Gemini CLI runs the local binary you just installed, while Microsoft 365 Copilot and the Gemini app need a remote server, which msp-skills does not support yet.
Skill-native agents (also covered): Hermes and OpenClaw read this skill's
SKILL.mddirectly and speak MCP - see their install sections below. Also works with Cursor, Windsurf, Cline, Continue.dev, and Zed via MCP. Full per-tool wire-up: docs/which-agent.md.
Run more than one agent? Install across all 51+ supported agents in one command:
npx skills add Servosity/msp-skills@latest(requires Node.js, then run the per-skill installer for the CLI/MCP binaries). See docs/which-agent.md.
Install in 60 seconds
Fastest for Claude Desktop - one-click .mcpb
Claude Desktop bundle: the
.mcpblaunches on macOS (Intel and Apple Silicon), Windows x64 and Linux x64. Every tool shells out to the companioncipp-cli. Releases cut from 2026-09-18 on ship that CLI inside the bundle; older bundles contain only the MCP server, so if yours lacks the companion, run the Path A or Path B installer below first (or setCIPP_CLI_PATHto an existing binary). Details: #331.
Download CIPP MCP (.mcpb) - then open Claude Desktop > Settings > Extensions and select the file. One click, no JSON, no shell. (Browse every CIPP release on the releases page.)
Prefer the Claude Code plugin? Add the marketplace once, then install - works immediately, no directory listing required:
Path A - paste one prompt into your AI agent (recommended)
Copy this into Claude Code, Codex CLI, or Claude Cowork:
Install the CIPP Skill and MCP server from Servosity/msp-skills in this agent workspace. If this workspace uses a POSIX shell (macOS, Linux, WSL, or Bash), run
bash <(curl -fsSL https://raw.githubusercontent.com/Servosity/msp-skills/main/skills/cipp/install.sh). If it uses Windows PowerShell, runiwr -useb https://raw.githubusercontent.com/Servosity/msp-skills/main/skills/cipp/install.ps1 | iex. Then authenticate per the README and runcipp-cli --helpto explore.
The same prompt works in any agent that can run shell.
Path B - run the installer yourself
Windows (PowerShell):
macOS / Linux:
The installer drops both cipp-cli (the CLI) and cipp-mcp (the MCP server) into your user bin path. Claude Code, Codex, and Cowork discover the Skill via SKILL.md in this directory.
Verify:
Upgrade to the latest version
The installer always fetches the current release - re-run it to upgrade:
macOS / Linux:
Windows (PowerShell):
Claude Desktop .mcpb users: download the latest .mcpb (top of this section) and re-select it in Settings > Extensions. Claude Code plugin users: /plugin update cipp@msp-skills.
Add to Claude Desktop, the ChatGPT desktop app, GitHub Copilot, Gemini CLI, or another MCP client
After the installer runs, see mcp-install.md and docs/which-agent.md for the per-agent wire-up - one section per agent, including the GitHub Copilot servers key and the ChatGPT desktop app. Claude Desktop's Settings > Extensions panel is the simplest path; the MCP config block (for users who prefer editing JSON) is documented in mcp-install.md.
Install for Hermes
From the Hermes CLI:
Inside a Hermes chat session:
Hermes speaks MCP natively, so it can also use the cipp-mcp server directly - same install path, same env vars.
Install for OpenClaw
Tell your OpenClaw agent (copy this):
Install the cipp skill from https://github.com/servosity/msp-skills/tree/main/skills/cipp. The skill defines how its required CLI (
cipp-cli) can be installed via theopenclaw:frontmatter block.
OpenClaw isn't generally available yet; the frontmatter wiring is pre-shipped and will activate the moment OpenClaw launches.
Authenticate
CIPP is self-hosted, so the CLI needs your instance's API base URL (the value CIPP shows you, ending in /api) and a credential from an API client you create in CIPP under Integrations > CIPP-API. Let the CLI run the OAuth2 client-credentials exchange, reading the client secret from stdin so it stays out of your shell history:
Or set a bearer token in the environment.
macOS / Linux:
Windows (PowerShell):
doctor calls a real CIPP endpoint with your credential and prints where the CLI keeps its files. It exits 0 even when the credential is rejected, so scripts should add --fail-on error.
What this skill does
The rollups (posture, ca diff, changes, scorecard) read the local store, so run fanout --save for the endpoints they need first; each command's --help names them. fanout --save refuses a tenant's response when anything in the response reads as a failure: failure wording or a failed state anywhere under a status-like field (state, status, result, message, text, detail, reason and the like, at any depth: "status":{"code":"error"}) or in a bare message, a populated field named like error, exception or fault ("error":"HTTP 403", whatever the wording), a field named like success or ok that is false, or a failed state, in the rows or beside them, and keeps the rows already stored. It stores only a list whose every entry carries the endpoint's id; JSON null, an empty answer, a single object or a message is shown, not stored. In the tenant list, and only there, tenant records keep their own Graph token fields (LastGraphError, GraphErrorCount), so one tenant with a failed Graph token does not stop the fleet. A response with a duplicate key is refused. A row whose own name holds a failure word (a user named "Error Reporting", a group named "Denied Access") is still a row. The trade-off: a list whose rows report their own failed status is refused too; run the same fanout with --json to see what CIPP returned. Full command reference: guide.md. For the AI-agent operating contract (--agent, --dry-run, when to confirm before mutating), see AGENTS.md.
What makes this different
CIPP already answers estate-wide questions itself. Its All Tenants views cover the MFA report, Standards alignment and the licence report, its API returns one estate-wide response for tenantFilter=AllTenants, and it ships its own MCP server. If one of those answers your question, use it: it is one call, served from CIPP's reporting cache.
This connector is a different shape: it is local-first. fanout runs a CIPP read once per tenant and, with --save, keeps the rows in a SQLite file on your machine, each save a dated snapshot. Your agent can then search, join and compare that copy offline - a per-tenant MFA or Conditional Access table in posture, every stored signal for one tenant in scorecard, the policy one tenant lacks in ca diff, your own snapshots over time in changes and standards drift - without another API call. You already have this data through CIPP; the connector puts a copy where an agent can work across it. It also carries CIPP's full command surface, writes included: in the MCP server, a CIPP API call that changes something comes back as a preview and runs only when the agent confirms it.
The cost of that shape is real: one call per tenant instead of one call for the estate, and a copy of tenant data on your disk. The next section says where it lives and how to remove it.
Where your data lives
The local copy is on purpose (it is what an agent searches and joins), and it is not encrypted. New files are created readable by your account only; beyond that it relies on your operating system's account permissions and full-disk encryption (BitLocker, FileVault).
- Local store: a
data*.dbSQLite file in the CLI's data directory, filled byfanout --saveand by reads in the default--data-source automode. - Response cache: GET responses for five minutes under
http/in the cache directory. Expired files are deleted on a later run. - Credentials:
credentials.tomlin the data directory. Afterauth loginit holds the API client's secret (so the CLI can mint new tokens) and the current token. WithCIPP_NO_CONFIG_WRITE=1,auth loginrefuses and nothing is stored; setCIPP_API_KEYinstead. - Learn journal: a record of the commands you ran, under
learn/in the state directory.CIPP_NO_LEARN=1turns it off. - Resume checkpoints:
fanout --resumekeeps the tenant domains it has finished in the state directory. cipp-cli doctorprints each path for your machine.
Before a successful response is shown, cached or saved, it is checked for your configured credentials (the API key, the client secret, the minted token) in every encoding the CLI can decode, with spaces and invisible characters removed first. A response holding a single value over 64 KiB once spaces are removed, or a response that is not JSON and is over 64 KiB, is withheld instead, because it cannot be decoded whole; read that value in CIPP itself.
To delete the store, cache and journal, run cipp-cli local-data purge (lists what it would delete) and then cipp-cli local-data purge --yes; cipp-cli auth logout removes the stored credentials. To keep no local copy of CIPP data, set CIPP_NO_LOCAL_DATA=1: reads go live, the response cache is off, and fanout --save and fanout --resume refuse. In Claude Desktop it is the extension's Run without a local copy setting; for other MCP hosts, put it in the server's env block.
When a technician leaves, removing their access in CIPP does not touch what is already on their machine: run cipp-cli auth logout and cipp-cli local-data purge --yes there, delete the checkpoints folder in the CLI's state directory, and rotate the API client's secret in CIPP.
The pain this closes
CIPP's own views answer questions about the current state. An AI agent working from live answers alone starts over on every question, and comparing this quarter with last needs dated copies you keep yourself. Scripting CIPP has its own costs: each API client is limited to 100 requests per 10 seconds, per the CIPP API documentation, and some write endpoints answer HTTP 200 with the failure written inside the response's Results, so a batch has to read every response to know what happened.
cipp-cli fanout --endpoint /ListMFAUsers --all-tenants --save- one read across every tenant, saved locally as a dated snapshot, with HTTP 429 Retry-After handling and--resumeafter a halt.cipp-cli posture --dimension mfa(alsoca,standards,dlp,retention,labels) - one tenant-by-metric table from the saved rows.cipp-cli ca diff- the Conditional Access policy one tenant lacks that most of the fleet has.cipp-cli changes --resource roles --since 7d- rows added, removed or changed between two of your own snapshots.cipp-cli bulk --from offboards.csv --execute- a CSV-driven batch of user and mailbox actions: plan-only without--execute, a non-zero exit when CIPP reports a failure inside an HTTP 200, and per-row--resume.
See pain-point.md for the longer narrative.
Frequently asked questions
Does this work with ChatGPT?
Yes, in the ChatGPT desktop app. It runs MCP servers locally (STDIO), the way cipp-mcp runs, and shares MCP configuration with Codex (OpenAI): add cipp-mcp under Settings > MCP servers as a STDIO server, or add it once to Codex's ~/.codex/config.toml. ChatGPT on the web is not supported by msp-skills yet: it needs a remote server. If your team works there, a hosted gateway is the better pick; check that your AI app is on the gateway's setup list. Setup steps: mcp-install.md.
Does this work with Codex, Cursor, Windsurf, Cline, Copilot, or Gemini?
Yes - all of them speak MCP. Cross-tool install commands are in the matrix above and the deep-dive in docs/which-agent.md.
Do I need to know how to code?
No. The recommended install is to paste one sentence into Claude Code or Codex - your agent reads SKILL.md and does the install. The fallback is a one-line installer per OS (bash or PowerShell). Neither path requires writing code. You'll enter your CIPP credentials once.
Is my CIPP data safe?
The CLI and MCP server run on your machine and talk only to your CIPP instance; MSP Skills receives nothing. But the connector does keep an unencrypted local copy of what it reads, so whoever can read your user profile can read that copy. Where your data lives lists the files, how to delete them, and how to run with no local copy (CIPP_NO_LOCAL_DATA=1).
Doesn't CIPP already show this across all tenants?
Often, yes. CIPP's All Tenants views show the MFA report, Standards alignment and the licence report across your estate, and its own MCP server can query AllTenants. This connector does not replace those. It keeps a local, dated copy so an agent can join endpoints and compare your own snapshots offline, and it gives the agent CIPP's write endpoints behind a preview-then-confirm step.
Do I need my own CIPP instance to use this?
Yes - this drives your own self-hosted CIPP instance's API. In CIPP you create an API client (it issues a client ID, secret, tenant ID, and token URL); the CLI authenticates with OAuth2 client credentials via cipp-cli auth login, or you pipe a bearer token to cipp-cli auth set-token. It reads and acts through your CIPP - it does not replace it.
Will this hit CIPP's API rate limit?
It can: fanout makes one call per tenant, and CIPP allows 100 requests per 10 seconds per API client. The client waits out HTTP 429 using Retry-After, --concurrency sets how many tenants run at once, and --resume skips tenants a halted run already finished. Once rows are saved, the rollups read the local store and make no API calls.
Can this change my tenants, or only read?
Both. CIPP is a full management API, so the CLI can create users, offboard, set forwarding, and more. In the MCP server, any CIPP API call that changes something returns a preview first and runs only when the agent confirms it; set CIPP_MCP_READ_ONLY=1 and the server drops its write tools. On the command line, bulk plans by default and writes only with --execute, and other write commands preview with --dry-run. The strongest boundary is still the role you give the API client in CIPP.
Does it replace the CIPP portal?
No. CIPP stays your portal. This connector lets your AI agent work across a local copy of what CIPP returns and drive CIPP from natural language.
What does it cost?
Free. Apache-2.0 licensed. You pay only for whichever AI agent you use (Claude, ChatGPT, Codex, etc.), and that's billed by your AI provider, not by us.
Safety model
Some CIPP endpoints are called with GET but change things (for example RemoveStandard, ExecSendOrgMessage, ExecRunBackup). The MCP server treats every one of them (43 in this build) as a change that needs confirmation, and fanout, export and tail refuse them. The typed write commands on the command line print CIPP's Results text and exit 0 even when that text reports a failure, so read it before reporting success; bulk and cipp_execute turn such a failure into an error. The strongest control is the scope you grant the CIPP credentials - the CLI can only do what the credentials are permitted to do. Full details, including how to lock it down, are in governance.md.
Status
Live-verified: Abhi Saini, Bearium Networks (MSP), ran cross-tenant fanout against a live CIPP tenant on 2026-08-13 (receipt). More MSPs run it live in our weekly Build Sessions. RSVP at compoundingteams.com/build-sessions.
Standards. Conforms to the open Agent Skills spec (Anthropic, Dec 2025; 40+ agents). MCP-compatible - works with any MCP-capable agent including Hermes. OpenClaw-ready (frontmatter pre-wired, awaiting OpenClaw launch).
Maintained by Servosity. Apache-2.0 licensed. Built with CLI Printing Press. Last updated: 2026-10-23.
来源:skills/cipp/README.md,提交 40d1f95
工具
0版本历史
8- v0.1.13最新Oct 29, 2026
- v0.1.12Oct 23, 2026
- v0.1.11Oct 23, 2026
- v0.1.10Oct 22, 2026
- v0.1.9Oct 14, 2026
- v0.1.8Oct 2, 2026
- v0.1.7Sep 29, 2026
- v0.1.6Sep 16, 2026
评分
已满足适用检查项的 40%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
- 近 30 天内可连通25 分
请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。
- 已声明认证方式10 分
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
- 已列出工具15 分
请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。
- 描述必需15 分
- 图标10 分
- 文档15 分
- 许可证10 分
请在仓库或注册中心条目中声明许可证。
其他 Exchange 集成
Exchange.news — Crypto offers, campaigns and news
news.exchange官方发布者
一个只读的远程目录,让助手查询加密货币注册优惠码、合作链接、活动日期和 Exchange.news 新闻。

ECB Currency Reference Rates — Latest Daily Cross Pairs
由 GitHub 账号 kriton-dev 发布
托管在 Apify 上的远程 MCP 服务器,让助手读取欧洲央行最新每日汇率参考价及计算出的交叉汇率。

Microsoft Exchange Online MCP
由 GitHub 账号 Servosity 发布
非官方 MCP 服务器,让助手通过 REST 跨客户租户审计和管理 Microsoft Exchange Online 邮箱,无需 PowerShell。

Agent Service Exchange
由 GitHub 账号 PatrickPi1312 发布
查找服务商;在维也纳发送经授权的安装或清洁咨询。无需客户账户。AI 翻译

Iran Mercantile Exchange
由 GitHub 账号 sepehr071 发布
非官方的伊朗商品交易所只读 MCP 服务器,让助手查询商品成交、价格、供应公告与市场汇总数据。