使用说明
MCP学习目录服务器📚
双传输模型上下文协议(MCP)服务器,提供对Microsoft Learn目录API的访问。两者都有 标准 (为地方发展)和 超文本传输协议 (用于远程部署和n8n集成)传输。
🚀 特性
- 双重运输支持:stdio(本地)和HTTP(远程/web)传输
- n8n兼容:HTTP服务器已准备好用于自动化工作流
- VS代码集成:与VS Code MCP扩展无缝协作
- Microsoft学习API:完全访问课程、模块、学习路径
- Docker就绪:容器化,便于部署
- 搜索和筛选:具有多个过滤器选项的高级搜索
- 内容刮擦:从学习模块中提取详细内容
- 会话管理:安全的HTTP会话处理
- CORS支持:可配置的跨源资源共享
� 可用工具
- listCatalog -按类型列出Microsoft学习对象
- searchCatalog -使用筛选器和文本查询搜索目录
- 获取详细信息 -获取特定内容的详细信息
- scrapeModule单位 -从学习模块单元中提取内容
🔧 安装和设置
先决条件
- Node.js>=20.0.0
- npm或纱线
地方发展(stdio)
# Clone and setup
git clone <repository-url>
cd mcp-learn
npm install
npm run build
# Run stdio server
npm start
生产部署(HTTP)
# Build and run with Docker
docker-compose up -d
# Or run manually
npm install
npm run build
npm run start:http
🌐 运输选项
1.stdio交通(地方发展)
非常适合VS Code MCP扩展和本地开发:
VS代码配置 (~/.config/Code/User/mcp.json):
{
"mcpServers": {
"learn-catalog": {
"command": "node",
"args": ["/absolute/path/to/mcp-learn/dist/server.js"],
"description": "Microsoft Learn Catalog Server (stdio)"
}
}
}
2.HTTP传输(远程/生产)
对于web部署、n8n集成和远程访问:
- 实时服务器:
https://mcp-learn-catalog.devspn.tech/ - 端点:
POST /mcp - 协议:基于HTTP的MCP(JSON-RPC 2.0)
- 标头:
Content-Type: application/json,Accept: application/json - 会话管理:通过
Mcp-Session-Id头球
VS代码配置 (HTTP):
{
"mcpServers": {
"learn-catalog-http": {
"transport": {
"type": "http",
"uri": "https://mcp-learn-catalog.devspn.tech/mcp"
},
"description": "Microsoft Learn Catalog Server (HTTP)"
}
}
}
🎯 集成示例
VS代码MCP扩展
支持两种传输的完整配置:
{
"mcpServers": {
"learn-catalog": {
"command": "node",
"args": ["/home/user/Documents/mcp-learn/dist/server.js"],
"description": "Microsoft Learn Catalog (Local)"
},
"learn-catalog-http": {
"transport": {
"type": "http",
"uri": "https://mcp-learn-catalog.devspn.tech/mcp"
},
"description": "Microsoft Learn Catalog (Remote)"
}
}
}
n8n工作流集成
在n8n中使用HTTP传输:
1.初始化会话
// HTTP Request Node 1 - Initialize
POST https://mcp-learn-catalog.devspn.tech/mcp
Headers: Content-Type: application/json
Body:
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-06-18",
"clientInfo": {"name": "n8n", "version": "1.0.0"},
"capabilities": {}
}
}
2.使用工具
// HTTP Request Node 2 - Call Tool
POST https://mcp-learn-catalog.devspn.tech/mcp
Headers:
Content-Type: application/json
Mcp-Session-Id: {{session_id_from_step_1}}
Body:
{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "searchCatalog",
"arguments": {
"q": "Azure Functions",
"type": "modules",
"max_results": 5
}
}
}
Docker部署
# docker-compose.yml
version: '3.8'
services:
mcp-learn-catalog:
build: .
ports:
- "3001:3001"
environment:
- PORT=3001
- NODE_ENV=production
- ALLOWED_ORIGINS=https://your-n8n-domain.com,http://localhost:3000
restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3001/health"]
interval: 30s
timeout: 10s
retries: 3
� API 参考
listCatalog
按类型列出Microsoft学习内容。
参数:
type(必填):内容类型(模块、学习路径、证书等)locale(可选):语言区域设置(默认:en-us)max_results(可选):最大结果数
例子:
{
"name": "listCatalog",
"arguments": {
"type": "modules",
"max_results": 5
}
}
响应格式:
[
{
"title": "Deploy device data protection",
"content": "This module describes how you can use Intune...",
"contentUrl": "https://learn.microsoft.com/en-us/training/modules/..."
}
]
searchCatalog
使用高级筛选器搜索Microsoft Learn目录。
参数:
type(可选):逗号分隔的内容类型q(可选):自由文本搜索查询level(可选):难度等级(初级、中级、高级)role(可选):目标角色筛选器product(可选):Microsoft产品筛选器subject(可选):主题区域过滤器popularity(可选):流行度过滤器(例如“gte 0.5”)last_modified(可选):日期过滤器(例如,“gte 2024-01-01”)max_results(可选):返回的最大结果
例子:
{
"name": "searchCatalog",
"arguments": {
"q": "Azure Functions",
"type": "modules",
"level": "intermediate",
"max_results": 3
}
}
获取详细信息
通过UID获取特定内容的详细信息。
参数:
uid(必填):逗号分隔的UIDlocale(可选):语言区域设置type(可选):内容类型筛选器
例子:
{
"name": "getDetail",
"arguments": {
"uid": "learn.wwl.develop-azure-functions"
}
}
响应格式:
# Modules
## Develop Azure Functions
Learn how to create and deploy Azure Functions.
URL: https://learn.microsoft.com/en-us/training/modules/develop-azure-functions/
scrapeModule单位
从学习模块单元中提取详细内容。
参数:
module(可选):带有uid、firstUnitUrl、units的模块对象firstUnitUrl(可选):指向第一个单元的直接URLunits(可选):单元UID数组with_text_excerpt(可选):包含文本内容(默认值:false)max_chars_excerpt(可选):最大文本长度(默认值:800)max_units(可选):要处理的最大单位数
例子:
{
"name": "scrapeModuleUnits",
"arguments": {
"firstUnitUrl": "https://learn.microsoft.com/en-us/training/modules/develop-azure-functions/1-introduction/",
"units": ["learn.wwl.develop-azure-functions.introduction"],
"with_text_excerpt": true,
"max_units": 3
}
}
🔍 响应格式
所有工具均以与Microsoft兼容的格式返回响应:
{
"content": [
{
"type": "text",
"text": "[JSON array of results or markdown content]"
}
]
}
响应格式与Microsoft MCP工具匹配:
- list目录/搜索目录:类似于
microsoft_docs_search(对象数组) - 获取详细信息:类似于
microsoft_docs_fetch(结构化降价) - scrapeModule单位:类似于
microsoft_code_sample_search(代码片段格式)
🛠️ 发展
可用脚本
# Install dependencies
npm install
# Build TypeScript
npm run build
# Run stdio server (development)
npm start
npm run dev
# Run HTTP server (production)
npm run start:http
# Type checking
npm run check
# Docker development
docker-compose up --build
项目结构
mcp-learn/
├── src/
│ ├── server.ts # stdio MCP server
│ ├── http-server.ts # HTTP MCP server
│ └── types/
│ └── html-to-text.d.ts # Type definitions
├── dist/ # Compiled JavaScript
├── Dockerfile # Docker configuration
├── docker-compose.yml # Docker Compose setup
├── package.json # Dependencies and scripts
├── tsconfig.json # TypeScript configuration
└── README.md # This file
� 安全和CORS
HTTP服务器包括:
- CORS配置:可通过以下方式配置来源
ALLOWED_ORIGINS环境变量 - 安全头:内容类型验证、XSS保护、帧选项
- 会话管理:通过自动清理确保会话处理的安全
- 输入验证:所有参数的Zod模式验证
- 速率限制:内置并发控制
🌍 环境变量
# Server Configuration
PORT=3001 # HTTP server port
NODE_ENV=production # Environment mode
# CORS Configuration
ALLOWED_ORIGINS=http://localhost:3000,https://your-n8n-domain.com
# Session Configuration (optional)
SESSION_TIMEOUT=3600000 # 1 hour in milliseconds
🚀 部署选项
1.地方发展
- 使用带有VS代码的stdio传输
- 直接执行Node.js
- 完整的调试功能
2.Docker容器
- 生产就绪的集装箱化
- 多阶段构建优化
- 健康检查包括
- 自动会话清理
3.云部署
- 与任何Node.js主机兼容
- 环境变量配置
- 水平缩放支持
- SSL/TLS终止就绪
4.家庭实验室/自托管
- Docker编写设置
- 反向代理兼容(nginx、traefik)
- 让我们加密SSL支持
- 资源监控包括
🧪 测试服务器
健康检查(HTTP)
curl https://mcp-learn-catalog.devspn.tech/health
基本工具测试(HTTP)
# Initialize session
curl -X POST https://mcp-learn-catalog.devspn.tech/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","clientInfo":{"name":"test","version":"1.0.0"},"capabilities":{}}}'
# Call tool (use session ID from above)
curl -X POST https://mcp-learn-catalog.devspn.tech/mcp \
-H "Content-Type: application/json" \
-H "Mcp-Session-Id: YOUR_SESSION_ID" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"searchCatalog","arguments":{"q":"Azure","max_results":2}}}'
🎯 用例
摘录AZ-104认证内容
// Search for AZ-104 certification
searchCatalog({
q: "AZ-104",
type: "certifications,learningPaths,modules"
})
// Extract content from specific modules
scrapeModuleUnits({
firstUnitUrl: "https://learn.microsoft.com/en-us/training/modules/configure-storage-accounts/1-introduction/",
units: ["introduction", "implement-azure-storage"],
max_chars_excerpt: 25000,
with_text_excerpt: true
})
n8n学习自动化
// Create automated learning content workflows
// 1. Search for latest Azure modules
// 2. Extract content summaries
// 3. Generate study guides
// 4. Send to notification systems
VS代码学习助理
// Directly within VS Code:
// 1. Search certification requirements
// 2. Extract module content
// 3. Create personalized study notes
// 4. Track learning progress
🔍 高级功能
智能内容提取
- 表格提取:自动提取比较表和规格
- 智能URL构建:为Microsoft学习单元构建有效的URL
- 灵活的单位命名:支持简单名称和完整UID
- 自动前缀删除:条纹
learn.wwl.智能前缀 - 可配置限制:每单位最多提取25000个字符
会话管理(HTTP)
- 自动会话创建:关于初始化方法
- 会话清理:1小时后自动清理
- 并发会话支持:同时有多个客户端
- 会话保持:跨请求维护状态
CORS和安全
- 灵活的CORS:环境可配置的来源
- 安全头:XSS保护、内容类型验证
- 输入验证:所有参数的Zod模式
- 错误处理:全面的错误响应
📊 Microsoft学习API集成
此服务器与以下设备集成:
- Microsoft学习目录API:用于搜索和元数据
- Microsoft学习Web内容:用于内容提取
- 多个地方:国际支持(en-us、es-es等)
- 实时数据:API直接访问最新内容
🚨 限制和注意事项
- 速率限制:Microsoft Learn可能会应用费率限制
- 内容结构:报废取决于当前的HTML结构
- 会话超时:HTTP会话在1小时后过期
- CORS限制:正确配置允许的来源
- 内存使用:大容量内容提取可能需要足够的RAM
📞 支持与兼容性
- MCP协议: 2025-06-18
- Node.js:20+推荐
- 运输:stdio和HTTP
- 客户:VS Code MCP扩展,n8n,任何兼容MCP的客户端
- API:Microsoft学习目录API
- 码头工人:使用Node.js 20 Alpine进行多阶段构建
🤝 贡献
- 分叉项目
- 创建功能分支(
git checkout -b feature/AmazingFeature) - 提交您的更改(
git commit -m 'Add some AmazingFeature') - 推到分支(
git push origin feature/AmazingFeature) - 打开拉取请求
📄 许可证
MIT许可证-有关详细信息,请参阅许可证文件
🔗 实用链接
由以下材料制成❤️ 促进Microsoft Azure学习和自动化! 🚀
