Microsoft Learn MCP
Official remote MCP server that lets agents search and read current Microsoft Learn documentation and code samples (Azure, .NET, Microsoft 365 and more). Free, no API key.
Test results
Last passed 2026-10-22Server package tested: mcp-remote 0.15.2 (npm, Node v20.19.2; resolved 2026-10-22)
Direct and key dependencies as resolved: express 4.22.3 · open 10.2.0 · strict-url-sanitise 0.0.1 · undici 7.30.1
All 79 resolved dependencies
accepts==1.3.8
array-flatten==1.1.1
body-parser==1.20.9
bundle-name==4.1.1
bytes==3.1.2
call-bind-apply-helpers==1.0.2
call-bound==1.0.4
content-disposition==0.5.4
content-type==1.0.5
cookie==0.7.2
cookie-signature==1.0.7
debug==2.6.9
default-browser==5.5.1
default-browser-id==5.0.1
define-lazy-prop==3.0.0
depd==2.0.0
destroy==1.2.0
dunder-proto==1.0.1
ee-first==1.1.1
encodeurl==2.0.0
es-define-property==1.0.1
es-errors==1.3.0
es-object-atoms==1.1.2
escape-html==1.0.3
etag==1.8.1
express==4.22.3
finalhandler==1.3.2
forwarded==0.2.0
fresh==0.5.2
function-bind==1.1.2
get-intrinsic==1.3.0
get-proto==1.0.1
gopd==1.2.0
has-symbols==1.1.0
hasown==2.0.4
http-errors==2.0.1
iconv-lite==0.4.24
inherits==2.0.4
ipaddr.js==1.9.1
is-docker==3.0.0
is-inside-container==1.0.0
is-wsl==3.1.1
math-intrinsics==1.1.0
media-typer==0.3.0
merge-descriptors==1.0.3
methods==1.1.2
mime==1.6.0
mime-db==1.52.0
mime-types==2.1.35
ms==2.0.0, 2.1.3
negotiator==0.6.3
object-inspect==1.13.4
on-finished==2.4.2
open==10.2.0
parseurl==1.3.3
path-to-regexp==0.1.13
proxy-addr==2.0.8
qs==6.16.1
range-parser==1.2.1
raw-body==2.5.3
run-applescript==7.1.0
safe-buffer==5.2.1
safer-buffer==2.1.2
send==0.19.2
serve-static==1.16.3
setprototypeof==1.2.0
side-channel==1.1.1
side-channel-list==1.0.1
side-channel-map==1.0.1
side-channel-weakmap==1.0.2
statuses==2.0.2
strict-url-sanitise==0.0.1
toidentifier==1.0.1
type-is==1.6.18
undici==7.30.1
unpipe==1.0.0
utils-merge==1.0.1
vary==1.1.2
wsl-utils==0.1.0Captured with: npm ls --all --json in the npx env.
Full result per app: Does it work with Claude Code? · Does it work with Cursor? · Does it work with ChatGPT (Codex)?
Real test
PassedOne run from our records. When two runs share a date, we show a failure if there is one.
- Client
- ChatGPT (Codex) · Codex CLI 0.162.0-alpha.17.2
- Date
- Oct 22, 2026
- The task we gave
Using only the microsoft-learn-mcp MCP tools, look up in the official Microsoft Learn documentation which local port the Azure Functions Core Tools host (`func start`) listens on by default, and reply with the port number.
- What it promised
- details not recorded for this run
- What happened
Tool calls:
microsoft-learn-mcp:microsoft_docs_searchTool result
{"content": [{"type": "text", "text": "{\"results\":[{\"title\":\"Code and test Azure Functions locally (programming-language-powershell)\",\"content\":\"# Code and test Azure Functions locally (programming-language-powershell)\\n## Local project files\\n| Setting | Description| \\n| --- | --- |\\n| **\\u0060LocalHttpPort\\u0060** | Sets the default port used when running the local Functions host (\\u0060func host start\\u0060 and \\u0060func run\\u0060). The \\u0060--port\\u0060 command-line option takes precedence over this setting. For example, when running in Visual Studio IDE, you can change the port number by navigating to the \\u0022Project Properties -\\u003E Debug\\u0022 window and explicitly specifying the port number in a \\u0060host start --port \\u003Cyour-port-number\\u003E\\u0060 command that can be supplied in the \\u0022Application Arguments\\u0022 field. |\\n| **\\u0060CORS\\u0060** | Defines the origins allowed for [cross-origin resource sharing (CORS)](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing). Origins are supplied as a comma-separated list with no spaces. The wildcard value (\\\\*) is supported, which allows requests from any origin. |\\n| **\\u0060CORSCredentials\\u0060** | When set to \\u0060true\\u0060, allows \\u0060withCredentials\\u0060 requests. |\\n| **\\u0060ConnectionStrings\\u0060** | A collection. Don\\u0027t use this collection for the connection strings used by your function bindings. This collection is used only by framAgent reply
7071 ([Microsoft Learn: Azure Functions local runtime and tools reference](https://learn.microsoft.com/azure/azure-functions/functions-core-tools-reference#%60func-start%60)).- Verdict
- Passed
Install
claude mcp add microsoft-learn-mcp -- npx -y mcp-remote https://learn.microsoft.com/api/mcpRun in your terminal. This exact command is what our harness runs in Claude Code; see the results above.
{
"mcpServers": {
"microsoft-learn-mcp": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://learn.microsoft.com/api/mcp"
]
}
}
}Save as .cursor/mcp.json. This exact config is what our harness runs in Cursor; see the results above.
{
"mcpServers": {
"microsoft-learn-mcp": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://learn.microsoft.com/api/mcp"
]
}
}
}Add to claude_desktop_config.json and restart Claude Desktop. Tested on the Linux beta; see the results above.
[mcp_servers.microsoft-learn-mcp]
command = "npx"
args = ["-y", "mcp-remote", "https://learn.microsoft.com/api/mcp"]Add to ~/.codex/config.toml (shared by the ChatGPT (Codex) CLI and the ChatGPT desktop app; Codex runs inside the ChatGPT desktop app). Tested with the ChatGPT (Codex) CLI bundled in the ChatGPT desktop app; see the results above.
Not connecting? Troubleshooting: Claude Code · Cursor · Claude Desktop · ChatGPT (Codex)
Test history
| Date | Check | Result | Versions tested |
|---|---|---|---|
| 2026-10-22 | Protocol (direct stdio) | Protocol: starts, 3 tools listed | mcp-remote 0.15.2 · server reported v1.0.0 |
| 2026-10-22 | Claude Code | Passed install, connect, tools, agent task | Claude Code 2.1.296 · mcp-remote 0.15.2 |
| 2026-10-22 | Cursor | Passed install, connect, tools, agent task | Cursor CLI 2026.10.22-27dcf5f · mcp-remote 0.15.2 |
| 2026-10-22 | ChatGPT (Codex) | Passed install, connect, tools, agent task | Codex CLI 0.162.0-alpha.17.2 · mcp-remote 0.15.2 |
Tools seen by our harness (3)
microsoft_docs_searchmicrosoft_code_sample_searchmicrosoft_docs_fetch