GitHub
server ทางการของ GitHub ให้ AI อ่านและจัดการโค้ด issue และ pull request ในบัญชีของคุณได้ ใช้ผ่านคลาวด์ของ GitHub หรือรันในเครื่องด้วย Docker ก็ได้
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Microsoft 365 & Azure admin: Graph, ARM, and the PowerShell cmdlets Graph does not expose.
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม 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",
"ใส่ค่าของคุณ"
],
"env": {
"AZURE_TENANT_ID": "ใส่ค่าของคุณ",
"AZURE_CLIENT_ID": "ใส่ค่าของคุณ",
"AZURE_CLIENT_SECRET": "ใส่ค่าของคุณ",
"MINERVA_SHAREPOINT_URL": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add minerva --env AZURE_TENANT_ID='ใส่ค่าของคุณ' --env AZURE_CLIENT_ID='ใส่ค่าของคุณ' --env AZURE_CLIENT_SECRET='ใส่ค่าของคุณ' --env MINERVA_SHAREPOINT_URL='ใส่ค่าของคุณ' -- npx -y minerva-mcp --stdio 'ใส่ค่าของคุณ'เติมค่าที่เว้นว่างไว้ก่อนรัน
ตัวนี้ต้องใส่ค่าในคำสั่งเปิดเอง ให้คัดลอกค่าตั้งแล้วเติมค่า
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"minerva": {
"command": "npx",
"args": [
"-y",
"minerva-mcp",
"--stdio",
"ใส่ค่าของคุณ"
],
"env": {
"AZURE_TENANT_ID": "ใส่ค่าของคุณ",
"AZURE_CLIENT_ID": "ใส่ค่าของคุณ",
"AZURE_CLIENT_SECRET": "ใส่ค่าของคุณ",
"MINERVA_SHAREPOINT_URL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้ต้องใส่ค่าในคำสั่งเปิดเอง ให้คัดลอกค่าตั้งแล้วเติมค่า
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"minerva": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"minerva-mcp",
"--stdio",
"ใส่ค่าของคุณ"
],
"env": {
"AZURE_TENANT_ID": "ใส่ค่าของคุณ",
"AZURE_CLIENT_ID": "ใส่ค่าของคุณ",
"AZURE_CLIENT_SECRET": "ใส่ค่าของคุณ",
"MINERVA_SHAREPOINT_URL": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
AZURE_TENANT_ID envAZURE_CLIENT_ID envMINERVA_SHAREPOINT_URL envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 8 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub HoussemMak ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: AZURE_CLIENT_SECRET
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (0.4.2) เข้า registry 3 เดือนที่ผ่านมา
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี GitHub, Desktop Commander, Cloudflare MCP
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
server ทางการของ GitHub ให้ AI อ่านและจัดการโค้ด issue และ pull request ในบัญชีของคุณได้ ใช้ผ่านคลาวด์ของ GitHub หรือรันในเครื่องด้วย Docker ก็ได้
MCP server for terminal commands, file operations, and process management
Cloudflare MCP servers
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ 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.