学习目录服务

一个双传输模型上下文协议(MCP)服务器,提供对Microsoft Learn目录API的访问,支持本地开发和远程部署。

  • by dannybombastic
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 dannybombastic/mcp-learn

使用说明

MCP学习目录服务器📚

双传输模型上下文协议(MCP)服务器,提供对Microsoft Learn目录API的访问。两者都有 标准 (为地方发展)和 超文本传输协议 (用于远程部署和n8n集成)传输。

🚀 特性

  • 双重运输支持:stdio(本地)和HTTP(远程/web)传输
  • n8n兼容:HTTP服务器已准备好用于自动化工作流
  • VS代码集成:与VS Code MCP扩展无缝协作
  • Microsoft学习API:完全访问课程、模块、学习路径
  • Docker就绪:容器化,便于部署
  • 搜索和筛选:具有多个过滤器选项的高级搜索
  • 内容刮擦:从学习模块中提取详细内容
  • 会话管理:安全的HTTP会话处理
  • CORS支持:可配置的跨源资源共享

� 可用工具

  1. listCatalog -按类型列出Microsoft学习对象
  2. searchCatalog -使用筛选器和文本查询搜索目录
  3. 获取详细信息 -获取特定内容的详细信息
  4. 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 (必填):逗号分隔的UID
  • locale (可选):语言区域设置
  • 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 (可选):指向第一个单元的直接URL
  • units (可选):单元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进行多阶段构建

🤝 贡献

  1. 分叉项目
  2. 创建功能分支(git checkout -b feature/AmazingFeature)
  3. 提交您的更改(git commit -m 'Add some AmazingFeature')
  4. 推到分支(git push origin feature/AmazingFeature)
  5. 打开拉取请求

📄 许可证

MIT许可证-有关详细信息,请参阅许可证文件

🔗 实用链接


由以下材料制成❤️ 促进Microsoft Azure学习和自动化! 🚀