GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
作者による説明(英語の原文)
Microsoft 365 & Azure admin: Graph, ARM, and the PowerShell cmdlets Graph does not expose.
この3つを1つのスコアにまとめることはしません。意見、測定、人気はそれぞれ別のものだからです。
このサーバーのやさしい解説はまだ書いていません。以下はレジストリから読み取った事実です。
使っているAIアプリを選んで、設定をコピーしてください。
AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, MINERVA_SHAREPOINT_URL「秘密」と表示された値は、あなたのアカウントの鍵です。絶対に人に教えたり、チャットに貼り付けたりしないでください。
必要なもの
どのアプリを使っていますか?
上でアプリを選んでください。選んだアプリを覚えておくので、次からはボタンに「…にインストール」と表示されます。
Claude Desktop → Settings → Developer → Edit Config を開き、claude_desktop_config.json にこれを貼り付けます
{
"mcpServers": {
"minerva": {
"command": "npx",
"args": [
"-y",
"minerva-mcp",
"--stdio",
"your-value"
],
"env": {
"AZURE_TENANT_ID": "your-value",
"AZURE_CLIENT_ID": "your-value",
"AZURE_CLIENT_SECRET": "your-value",
"MINERVA_SHAREPOINT_URL": "your-value"
}
}
}
}ターミナルでこれを実行します
claude mcp add minerva --env AZURE_TENANT_ID=your-value --env AZURE_CLIENT_ID=your-value --env AZURE_CLIENT_SECRET=your-value --env MINERVA_SHAREPOINT_URL=your-value -- npx -y minerva-mcp --stdio your-value動かす前に、空欄の値を入力してください。
このサーバーは起動コマンドに値を入れる必要があるので、設定をコピーして入力してください。
プロジェクトの .cursor/mcp.json、または ~/.cursor/mcp.json に貼り付けます
{
"mcpServers": {
"minerva": {
"command": "npx",
"args": [
"-y",
"minerva-mcp",
"--stdio",
"your-value"
],
"env": {
"AZURE_TENANT_ID": "your-value",
"AZURE_CLIENT_ID": "your-value",
"AZURE_CLIENT_SECRET": "your-value",
"MINERVA_SHAREPOINT_URL": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
このサーバーは起動コマンドに値を入れる必要があるので、設定をコピーして入力してください。
プロジェクトの .vscode/mcp.json に貼り付けます
{
"servers": {
"minerva": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"minerva-mcp",
"--stdio",
"your-value"
],
"env": {
"AZURE_TENANT_ID": "your-value",
"AZURE_CLIENT_ID": "your-value",
"AZURE_CLIENT_SECRET": "your-value",
"MINERVA_SHAREPOINT_URL": "your-value"
}
}
}
}ブラウザがアプリを開いてよいか確認し、そのあとアプリが設定を表示して確認を求めます。キーの値は空欄のままなので、自分で入力してください。
これはパソコンで動くサーバーですが、ChatGPTがつなげるのはインターネット上のサーバーだけです。ほかのアプリを選んでください。
選んだアプリは、この端末のCookieに保存されます。アカウントは不要です。
AZURE_TENANT_ID envAZURE_CLIENT_ID envMINERVA_SHAREPOINT_URL envこの設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月8日にチェック
レジストリ名は、リポジトリを所有するGitHubアカウント HoussemMak で確認済みです
このリポジトリはまだGitHubから読み取っていません
このリポジトリはまだGitHubから読み取っていません
これはパソコンで動くため、インターネット上のエンドポイントはありません
パソコンで動き、代わりにローカルの設定を使います
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
当てはまる基本チェック1項目のうち1項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
入力が必要なもの:AZURE_CLIENT_SECRET
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
GitHubリポジトリの最終更新は–、最新バージョン(0.4.2)がレジストリに届いたのは3 か月前です。
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
同じカテゴリには:GitHub, Desktop Commander, Cloudflare MCP
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
作者のリポジトリから書かれたとおりにコピーしたものです。PopNx MCPは内容を確認・推奨していません。HTML、画像、スクリプトは取り除いています。リンクはこのサイトの外へ移動します。
Microsoft 365 and Azure administration for AI assistants — including the parts Microsoft Graph cannot reach.
An MCP server that lets Claude, Copilot, VS Code or any MCP client query and administer a Microsoft 365 tenant in plain language.
There are already good ones, and this is not trying to replace them.
| Lokka | ms-365-mcp-server | Minerva MCP | |
|---|---|---|---|
| Microsoft Graph | ✅ | ✅ 300+ tools | ✅ generic call |
| Azure Resource Manager | ✅ | — | ✅ |
| Exchange Online cmdlets | — | — | ✅ |
| SharePoint / PnP cmdlets | — | — | ✅ |
| Teams Admin cmdlets | — | — | ✅ |
| Purview / compliance cmdlets | — | — | ✅ |
| Risk classification per action | — | — | ✅ |
| Human approval before writes | — | read-only switch | ✅ native to the protocol |
| MCP 2026-07-28 (stateless) | — | — | ✅ |
If you only need Graph, use Lokka or ms-365-mcp-server. They are excellent, more mature, and more widely used. Lokka in particular is written by a Microsoft Entra product manager.
Reach for this one when you hit the wall everyone hits eventually: a large part of Microsoft 365 administration has no Graph API. Mailbox permissions, transport rules, message trace, retention policies, sensitivity labels, Teams calling policies, SharePoint term stores, tenant-wide Exchange settings — those live in PowerShell and nowhere else. This server exposes them, with a risk classification and a confirmation step in front of anything that writes.
flowchart LR
A["AI client Claude · VS Code · Copilot Studio"] B["minerva-mcp"] C{"Risk classifier"} D["Human confirmation"] G["Microsoft Graph Azure ARM · Search"] P["PowerShell 7 Exchange · PnP · Teams · Purview"] M["Microsoft authorizes the token"]
A -->|"stdio or HTTP"| B B --> C C -->|"read"| G C -->|"write"| D D -->|"signed mandate"| G D -->|"signed mandate"| P C -->|"read"| P G --> M P --> M
Reads go straight through. Writes stop at a classifier, come back to you as an input_required describing the action and its consequences, and only run once you confirm. Microsoft still has the final word: the server forwards a token, it never grants access.
Nothing to clone. Add it to your client and sign in on first use.
claude_desktop_config.json:
{
"mcpServers": { "minerva": { "command": "npx", "args": ["-y", "minerva-mcp", "--stdio"] } } }
.vscode/mcp.json:
{
"servers": { "minerva": { "type": "stdio", "command": "npx", "args": ["-y", "minerva-mcp", "--stdio"] } } }
More, including read-only and app-only setups, in examples/.
On the first tool call the server prints a device-code prompt on stderr: open the link, enter the code, done. No app registration needed to try it — it uses the public Microsoft Graph PowerShell client by default.
Requirements: Node.js 20+. For the PowerShell tools, PowerShell 7+ and the modules you intend to use (ExchangeOnlineManagement, PnP.PowerShell, MicrosoftTeams).
*"Which mailboxes have full access delegated to someone outside their department?"*
→
execute_exchange_onlinewithGet-MailboxPermission, no Graph equivalent exists.
*"Show me every conditional access policy that does not require MFA, and our Secure Score."*
→
generate_security_report+microsoft_graph_call.
*"Create a shared mailbox for invoicing and give the finance team access."*
→ classified as a write: the server describes the action and its consequences,
and waits for your confirmation before doing anything.
| Tool | What it does | Graph equivalent? |
|---|---|---|
microsoft_graph_call | Any Microsoft Graph call (v1.0 or beta) | — |
azure_arm_call | Any Azure Resource Manager call | — |
microsoft_search | Unified Microsoft Search | — |
get_tenant_context | Organisation, licences, Secure Score | — |
generate_security_report | Tenant security posture | — |
execute_exchange_online | Exchange Online cmdlets | ❌ none |
execute_pnp_sharepoint | PnP PowerShell (SharePoint) cmdlets | ❌ none |
execute_teams_admin | Teams Admin cmdlets | ❌ none |
execute_purview_compliance | Purview / compliance cmdlets | ❌ none |
Restrict the surface with --tools=microsoft_graph_call,get_tenant_context, or forbid every write with --read-only.
A model reads untrusted content — an email subject, a site name, a document — and decides which tool to call. Prompt injection is not hypothetical, and the tools here can delete mailboxes.
So writes do not simply execute. Every action is classified auto, confirmed or critical from the HTTP verb and path (or the PowerShell verb). Anything above auto makes the server answer input_required under MCP's Multi Round-Trip Requests: your client shows what is about to happen and its consequences, you confirm, and only then does it run.
The confirmation is a signed mandate (HMAC) bound to the caller, the method, and a digest of the arguments, valid five minutes. A mandate obtained to delete /users/1 cannot be replayed on /users/999, and cannot be presented by anyone else.
If your client does not support elicitation, nothing is silently executed: the server returns an error saying the action needs confirmation.
Every flag has an environment variable equivalent.
| Flag | Env | Default | |
|---|---|---|---|
--stdio | MINERVA_TRANSPORT=stdio | HTTP | JSON-RPC over stdin/stdout |
--port= | MCP_SERVER_PORT | 3001 | HTTP listen port |
In stdio mode all logs go to stderr — stdout belongs to the protocol.
| Flag | Env | |
|---|---|---|
--auth= | MINERVA_AUTH_MODE | bearer, device-code, client-secret |
--tenant= | MINERVA_TENANT_ID, AZURE_TENANT_ID | Entra tenant |
--client-id= | MINERVA_CLIENT_ID, AZURE_CLIENT_ID | Application |
--client-secret= | AZURE_CLIENT_SECRET | App-only secret |
Defaults: bearer over HTTP (the caller supplies the token), device-code over stdio, client-secret as soon as a secret is present. Each resource gets its own token: Graph, ARM, Exchange, Purview, SharePoint and Teams do not share an audience.
| Flag | Env | |
|---|---|---|
--read-only | MINERVA_READ_ONLY | Refuse every write |
--tools= | MINERVA_TOOLS | Register only these tools |
--ps= | MINERVA_PS_EXECUTOR | auto, redis, local, none |
--sharepoint-url= | MINERVA_SHAREPOINT_URL | Required by the PnP tool locally |
--allowed-origins= | MINERVA_ALLOWED_ORIGINS | Browser origins allowed on /mcp |
--redis-url= | REDIS_URL | Queue for an external PowerShell runner |
| — | MINERVA_MRTR_SECRET | Signing key for approval mandates |
| — | MINERVA_PWSH_PATH | Path to pwsh |
| — | MINERVA_REQUIRE_VERIFIED_TOKENS | Refuse tokens whose signature cannot be verified |
--read-only reuses the same risk classifier as the approval gate, so it covers PowerShell cmdlets too, not just HTTP verbs.
Speaks MCP 2026-07-28, and still serves handshake-era clients until 2027-07-28.
Stateless core (per-request _meta, no initialize, no Mcp-Session-Id) | ✅ |
server/discover | ✅ |
Multi Round-Trip Requests (input_required) | ✅ — this is the approval mechanism |
MCP-Protocol-Version / Mcp-Method / Mcp-Name headers, base64 sentinel | ✅ validated against the body |
ttlMs / cacheScope on lists | ✅ always private |
Version negotiation (-32022 listing supported versions) | ✅ |
Origin validation (anti DNS-rebinding) | ✅ |
| GET/DELETE on the MCP endpoint | ✅ 405, removed by this revision |
Handshake era (initialize) | ✅ until 2027-07-28 |
One endpoint serves both generations; the request body decides which. Both read the same tool registry, and a test compares them against a frozen contract so they cannot drift.
Read SECURITY.md before deploying. The three things that matter:
nonce header that only Graph can check. Their tid/oid claims are therefore self-reported. The server validates them structurally, flags them verified: false, and binds approval mandates to a fingerprint of the token itself rather than to the claims alone. A token that *should* have verified and did not is rejected.Cmdlet names and parameters never reach the script as code: they travel through environment variables, the name is validated against a strict Verb-Noun pattern, and the call goes through Get-Command plus the call operator.
Report a vulnerability privately — see SECURITY.md.
Those three belong to Minerva-IA, the commercial platform this server was extracted from. Everything in this repository works without it.
npm install
npm run dev:stdio # stdio, hot reload npm run verify # typecheck + tests + secret scan npm run build && node scripts/smoke-stdio.mjs
Tests need no credentials and touch no network.
Pull requests are closed until 2027-07-31 — see CONTRIBUTING.md for why, and for what is welcome in the meantime (bug reports very much are).
MIT — see LICENSE.