节点在线、应用在线、配置在线使用令牌查询
|
# MCP HTTP æœåŠ¡æž¶æž„
> 版本:v1.0 | 日期:2026-07-22
> 对应模å—:MCP 工具æœåŠ¡èƒ½åŠ›
> 相关文档:[需求文档](/NewLife/Stardust/Blob/master/Doc/需求文档.md) §3.13 | [功能清å•](/NewLife/Stardust/Blob/master/Doc/功能清å•.md) §MCP | [MCP-1-token管ç†](/NewLife/Stardust/Blob/master/Doc/MCP-1-token管ç†.md) | [MCP-2-action扩展](/NewLife/Stardust/Blob/master/Doc/MCP-2-action扩展.md)
---
## 1. èƒŒæ™¯ä¸Žç›®æ ‡
### 1.1 ä¸ºä»€ä¹ˆéœ€è¦ MCP
Stardust 已具备完整的"èŠ‚ç‚¹ç®¡ç† + åº”ç”¨ç®¡ç† + é…ç½®ä¸å¿ƒ + 注册ä¸å¿ƒ + 监控ä¸å¿ƒ + 远程å‘布 + 网关管ç†"能力(M1–M12 å…± 117 个功能),但所有能力**åªèƒ½é€šè¿‡ Web æŽ§åˆ¶å°æˆ–ç§æœ‰ RPC åè®®**调用,**æ— æ³•è¢« LLM/智能体直接消费**。
MCP(Model Context Protocol)是 Anthropic ä¸»å¯¼çš„äº‹å®žæ ‡å‡†ï¼Œå·²è¢«ä¸»æµ IDE/Agent(Traeã€Claude Desktopã€Cursor)原生支æŒã€‚通过在 Stardust æœåŠ¡ç«¯å®žçŽ° MCP HTTP 端点,å¯è®©ä»»æ„ MCP 客户端把 Stardust 当作一个工具æœåŠ¡å™¨è°ƒç”¨ï¼Œ**æ— éœ€ä¸ºæ¯ä¸ª Agent 釿–°å¼€å‘适é…层**。
### 1.2 设计原则
1. **æœ€å°æš´éœ²**:MCP å议层é¢åªæš´éœ² 5 个工具,é¿å…工具列表臃肿
2. **工具èšç„¦å议原è¯**:MCP 工具èšç„¦"å议级查询原è¯"(授æƒå‘现/æœç´¢/获å–/动作å‘现/动作调用),业务æ“作统一走 `invoke_action`
3. **代ç 驱动扩展**:新增 Action åªéœ€å®žçް `IMcpAction` 接å£ï¼Œé›¶é…置零侵入
4. **框架层统一鉴æƒ**ï¼šèµ„æºæŽˆæƒæ ¡éªŒç»Ÿä¸€ç”± `McpService` 框架层完æˆï¼ŒAction 内ä¸å†é‡å¤æ ¡éªŒ
5. **独立 Token 体系**:独立于 Web 用户登录æ€ï¼ŒToken 显å¼ç»‘定å¯è®¿é—®çš„资æºé›†åˆ
---
## 2. 系统架构
### 2.1 整体拓扑
```mermaid
flowchart TD
subgraph Clients [MCP 客户端]
Trae[Trae IDE]
Claude[Claude Desktop]
Cursor[Cursor]
Custom[自定义 Agent]
end
subgraph Stardust [Stardust æœåŠ¡ç«¯]
direction TB
MCP["📡 MCP HTTP 端点\nPOST /mcp\nJSON-RPC 2.0"]
subgraph Core [MCP æ ¸å¿ƒæœåŠ¡]
McpService["McpService\nToken æ ¡éªŒ | èµ„æºæŽˆæƒ\n动作路由 | 审计日志"]
McpMiddleware["McpMiddleware\n请求路由(Cube å‰çŸè·¯ï¼‰"]
end
subgraph Tools [5 个 MCP 工具]
T1["list_authorized_resources\n查看授æƒèµ„æº"]
T2["search_resources\næœç´¢èµ„æº"]
T3["get_resource\n获å–资æºè¯¦æƒ…"]
T4["list_actions\n查看å¯ç”¨åŠ¨ä½œ"]
T5["invoke_action\n调用动作"]
end
subgraph Actions [27 个 Action 实现]
NodeAct["èŠ‚ç‚¹ç®¡ç† 4 个"]
AppAct["åº”ç”¨ç®¡ç† 7 个"]
ConfigAct["é…ç½®ä¸å¿ƒ 2 个"]
DeployAct["远程å‘布 9 个"]
GatewayAct["ç½‘å…³ç®¡ç† 2 个"]
MonitorAct["监控ä¸å¿ƒ 2 个"]
SystemAct["系统 1 个"]
end
subgraph Data [æ•°æ®å±‚]
TokenDB[("McpToken 表")]
ResourceDB[("McpTokenResource 表")]
AuditDB[("McpAudit 表")]
end
subgraph Biz [业务æœåŠ¡]
StarFactory["StarFactory"]
DeployService["DeployService"]
PipelineService["PipelineService"]
ConfigService["ConfigService"]
RegistryService["RegistryService"]
end
end
Clients -->|POST /mcp\nAuthorization: Bearer| MCP
MCP --> McpMiddleware
McpMiddleware --> McpService
McpService --> Tools
McpService --> Actions
McpService -->|读 Token| TokenDB
McpService -->|查授æƒ| ResourceDB
McpService -->|写审计| AuditDB
Actions -->|调用| Biz
style MCP fill:#e74c3c,stroke:#c0392b,stroke-width:2px,color:#fff
style McpService fill:#2c3e50,stroke:#3498db,stroke-width:2px,color:#fff
```
### 2.2 模å—èŒè´£
| 组件 | èŒè´£ | 所属项目 |
|---|---|---|
| `McpMiddleware` | 接收 HTTP è¯·æ±‚ï¼Œè§£æž JSON-RPC,路由到 `McpService`(在 Cube å‰çŸè·¯ï¼Œé¿å… device-id cookie 崩溃) | `Stardust.Web/` |
| `McpService` | Token æ ¡éªŒã€èµ„æºæŽˆæƒæ£€æŸ¥ã€åŠ¨ä½œæ³¨å†Œä¸Žè·¯ç”±ã€å®¡è®¡æ—¥å¿—写入 | `Stardust.Web/Services/` |
| `IMcpAction` / `McpActionBase` | 动作接å£å®šä¹‰ä¸ŽåŸºç±»å®žçް | `Stardust.Web/Mcp/` |
| `IResourceProvider` | 资æºè¯¦æƒ…查询接å£ï¼ˆ6 类资æºï¼‰ | `Stardust.Web/Mcp/Resources/` |
| `McpToken` | MCP 调用å‡è¯ï¼ˆå¯ç”¨çжæ€/过期时间/调用统计) | `Stardust.Data/Platform/` |
| `McpTokenResource` | Token 与资æºï¼ˆé¡¹ç›®/节点/应用)的授æƒå…³ç³» | `Stardust.Data/Platform/` |
| `McpAudit` | æ¯æ¬¡å·¥å…·è°ƒç”¨çš„审计日志 | `Stardust.Data/Platform/` |
### 2.3 调用æµç¨‹
```
MCP 客户端
│ POST /mcp Authorization: Bearer {token}
â–¼
McpMiddleware
│ 1. 从 Header å– Token
│ 2. 查 McpToken 表:Token 是å¦å˜åœ¨ã€Enable=trueã€æœªè¿‡æœŸ
│ ↓ 失败 → 返回 -32001
│ 3. 更新 McpToken.LastTime/LastIP/CallCount
│ 4. è§£æž JSON-RPC method
│ ├─ initialize → 返回 serverInfo
│ ├─ tools.list → 返回 5 个固定工具
│ └─ tools.call {name, arguments}
│ ├─ list_authorized_resources → 直接返回 Token 授æƒèµ„æº
│ ├─ search_resources → 按 Token 授æƒèŒƒå›´è¿‡æ»¤è¿”回æœç´¢ç»“æžœ
│ ├─ list_actions → 返回 McpActionSet 过滤åŽçš„动作清å•
│ ├─ get_resource → æ¡†æž¶å±‚æ ¡éªŒ + è·¯ç”±åˆ°èµ„æº Provider
│ └─ invoke_action → action 查找 → inputSchema æ ¡éªŒ
│ → æ¡†æž¶å±‚èµ„æºæŽˆæƒæ ¡éªŒ → 调用 InvokeAsync → 写审计
â–¼
MCP 客户端(JSON-RPC å“应)
```
---
## 3. å议设计
### 3.1 端点
- **路径**:`POST /mcp`
- **åè®®**:JSON-RPC 2.0
- **鉴æƒ**:`Authorization: Bearer {McpToken}`
- **ä¼ è¾“**:纯 HTTP(å•请求å•å“应),暂ä¸å®žçް SSE 长连接
### 3.2 JSON-RPC 方法
| 方法 | 说明 |
|---|---|
| `initialize` | åè®®æ¡æ‰‹ï¼Œè¿”回 `serverInfo`(name=`Stardust`)和 `capabilities` |
| `tools.list` | 返回 5 ä¸ªå›ºå®šå·¥å…·çš„æ¸…å• |
| `tools.call` | è°ƒç”¨æŒ‡å®šå·¥å…·ï¼Œä¼ å…¥ `name` å’Œ `arguments` |
### 3.3 5 个 MCP 工具
| 工具å | æè¿° | å…¥å‚ | èµ„æºæ ¡éªŒ |
|---|---|---|---|
| `list_authorized_resources` | æŸ¥è¯¢å½“å‰ Token 授æƒäº†å“ªäº›èµ„æº | `resource_type?`(Project/Node/App) | æ— |
| `search_resources` | 按关键å—跨类型æœç´¢èµ„æº | `keyword`(å¿…å¡«)ã€`resource_type?` | æ— ï¼ˆæŒ‰æŽˆæƒè¿‡æ»¤ç»“果) |
| `get_resource` | 按资æºç±»åž‹+ID 获å–å•个资æºè¯¦æƒ… | `resource_type`(å¿…å¡«)ã€`resource_id`(å¿…å¡«) | æ ¹æ® resource_type åŠ¨æ€æ ¡éªŒ |
| `list_actions` | 返回当å‰å¯è°ƒç”¨çš„åŠ¨ä½œæ¸…å• | `module?`(node/app/config ç‰ï¼‰ | æ— |
| `invoke_action` | 调用指定动作 | `action_name`(å¿…å¡«)ã€`params`(å¿…å¡«) | ç”± action çš„ RequiredResource 声明 |
### 3.4 错误ç
| 错误ç | å«ä¹‰ | 说明 |
|---|---|---|
| `-32700` | Parse error | JSON è§£æžå¤±è´¥ |
| `-32600` | Invalid Request | è¯·æ±‚æ ¼å¼é”™è¯¯ |
| `-32601` | Method not found | 未识别的 method / action 被ç¦ç”¨ |
| `-32602` | Invalid params | 傿•°æ ¡éªŒå¤±è´¥ |
| `-32000` | Server error | æœåŠ¡ç«¯å†…éƒ¨å¼‚å¸¸ |
| `-32001` | Unauthorized | Token ä¸å˜åœ¨/ç¦ç”¨/过期 |
| `-32002` | Timeout | 动作执行超时(默认 30 秒) |
| `-32003` | Forbidden | èµ„æºæœªæŽˆæƒ |
---
## 4. 鉴æƒä¸ŽæŽˆæƒæ¨¡åž‹
### 4.1 Token 体系
MCP 使用独立的**èµ„æºæŽˆæƒ Token 体系**,独立于 Web 用户登录æ€ã€‚
- Token æ ¼å¼ï¼š`sdmcp_` å‰ç¼€ + 32 ä½ Base62 éšæœºå—符
- Token 创建åŽä¸å¯ä¿®æ”¹ï¼ˆæ”¯æŒé‡ç½®ç”Ÿæˆæ–° Token)
- Token æ”¯æŒ `Enable` 开关和 `ExpireTime` 过期时间
- Token æ ¡éªŒä½¿ç”¨**æ’定时间比较**é˜²æ—¶åºæ”»å‡»
### 4.2 èµ„æºæŽˆæƒæ¨¡åž‹
ä¸‰ç±»èµ„æºæŽˆæƒäº’为 OR 关系:
| 资æºç±»åž‹ | 说明 | è¯ä¹‰ |
|---|---|---|
| **Project** | é¡¹ç›®æŽˆæƒ | 授æƒé¡¹ç›® → 该项目下所有节点/应用/部署集/æµæ°´çº¿/é…ç½®å‡å¯è®¿é—® |
| **Node** | èŠ‚ç‚¹æŽˆæƒ | å¯å•独æ“作该节点(独立于项目授æƒï¼‰ |
| **App** | åº”ç”¨æŽˆæƒ | å¯å•独æ“作该应用(独立于项目授æƒï¼‰ |
| **IsAll=true** | é€šé…æŽˆæƒ | 该类型下的所有资æºï¼ˆå«æœªæ¥æ–°å¢žçš„)å‡å…许访问 |
### 4.3 æŽˆæƒæ ¡éªŒå±‚级
```
æ¡†æž¶å±‚ç»Ÿä¸€æ ¡éªŒï¼ˆMcpService)
├─ ç›´æŽ¥æ ¡éªŒï¼šparams ä¸å—段å → McpTokenResource è¡¨æ ¡éªŒ
│ 例:node_send_command params.node_id → 查 McpTokenResource(ResourceType=Node, ResourceId=?)
│
├─ é—´æŽ¥æ ¡éªŒï¼šé€šè¿‡ IndirectEntity åæŸ¥ ProjectId/AppId
│ 例:deploy_install params.deploy_id → AppDeploy.FindById → 查 ProjectId → æ ¡éªŒé¡¹ç›®æŽˆæƒ
│
└─ 列表过滤:列表类 action 按 Token 授æƒèŒƒå›´è¿‡æ»¤è¿”回数æ®
例:node_list_online åªè¿”回 Token 授æƒé¡¹ç›®ä¸‹çš„在线节点
Action 实现内部
└─ ä»…åšä¸šåŠ¡åˆæ³•æ€§æ ¡éªŒï¼ˆå¦‚"deploy 是å¦å˜åœ¨")
```
---
## 5. 首批 Action 清å•(27 个)
### 5.1 节点管ç†ï¼ˆnode)— 4 个
| 动作å | æè¿° | 资æºä¾èµ– |
|---|---|---|
| `node_list_online` | 列出在线节点 | æ— ï¼ˆæŒ‰ Token 授æƒé¡¹ç›®è¿‡æ»¤è¿”回) |
| `node_send_command` | å‘节点下å‘命令 | node / `node_id` |
| `node_upgrade` | 触å‘节点å‡çº§æ£€æŸ¥ | node / `node_id` |
| `node_search` | 按åç§°/IP/ç¼–ç æœç´¢èŠ‚ç‚¹ | æ— ï¼ˆæŒ‰ Token 授æƒé¡¹ç›®è¿‡æ»¤è¿”回) |
### 5.2 应用管ç†ï¼ˆapp)— 7 个
| 动作å | æè¿° | 资æºä¾èµ– |
|---|---|---|
| `app_list_online` | 列出在线应用 | æ— ï¼ˆæŒ‰ Token 授æƒé¡¹ç›®è¿‡æ»¤è¿”回) |
| `app_send_command` | å‘应用下å‘命令 | app / `app_id` |
| `app_resolve_service` | è§£æžæœåŠ¡åœ°å€ | æ— ï¼ˆå…¬å¼€æœåŠ¡å‘现) |
| `app_search_service` | æœç´¢å·²æ³¨å†ŒæœåŠ¡ | æ— ï¼ˆå…¬å¼€æœåŠ¡å‘现) |
| `app_restart` | é‡å¯åº”用 | app / `app_id` |
| `app_stop` | åœæ¢åº”用 | app / `app_id` |
| `app_start` | å¯åŠ¨åº”ç”¨ | app / `app_id` |
### 5.3 é…ç½®ä¸å¿ƒï¼ˆconfig)— 2 个
| 动作å | æè¿° | 资æºä¾èµ– |
|---|---|---|
| `config_get` | 获å–应用é…ç½® | app / `app_id` |
| `config_set` | 设置应用é…置项 | app / `app_id` |
### 5.4 远程å‘布(deploy)— 9 个
| 动作å | æè¿° | 资æºä¾èµ– |
|---|---|---|
| `deploy_list` | 列出应用部署集 | æ— ï¼ˆæŒ‰ Token 授æƒé¡¹ç›®è¿‡æ»¤è¿”回) |
| `deploy_compile` | 触å‘编译(ä¸éƒ¨ç½²ï¼‰ | project(间接)+ node(å¯é€‰ï¼‰ |
| `deploy_list_versions` | 列出部署版本 | project(间接) |
| `deploy_list_history` | åˆ—å‡ºéƒ¨ç½²åŽ†å² | project(间接) |
| `deploy_list_nodes` | åˆ—å‡ºéƒ¨ç½²ç›®æ ‡èŠ‚ç‚¹ | project(间接) |
| `deploy_install` | 触å‘部署到指定节点 | project(间接)+ node |
| `pipeline_trigger` | æ‰‹åŠ¨è§¦å‘æµæ°´çº¿ | project(间接) |
| `pipeline_get_run` | æŸ¥è¯¢æµæ°´çº¿è¿è¡ŒçŠ¶æ€ | project(间接) |
| `pipeline_cancel` | å–æ¶ˆæ£åœ¨è¿è¡Œçš„æµæ°´çº¿ | project(间接) |
### 5.5 网关管ç†ï¼ˆgateway)— 2 个
| 动作å | æè¿° | 资æºä¾èµ– |
|---|---|---|
| `gateway_list_routes` | 列出网关路由 | æ— |
| `gateway_list_clusters` | 列出网关集群 | æ— |
### 5.6 监控ä¸å¿ƒï¼ˆmonitor)— 2 个
| 动作å | æè¿° | 资æºä¾èµ– |
|---|---|---|
| `monitor_trace_search` | æœç´¢è°ƒç”¨é“¾ | app / `app_id`(å¯é€‰ï¼‰ |
| `monitor_alarm_list` | 列出告è¦è®°å½• | app / `app_id`(å¯é€‰ï¼‰ |
### 5.7 系统(system)— 1 个
| 动作å | æè¿° | 资æºä¾èµ– |
|---|---|---|
| `get_audit_log` | æŸ¥è¯¢å½“å‰ Token 最近调用记录 | æ— ï¼ˆä»…æŸ¥å½“å‰ Token) |
---
## 6. 开关é…ç½®
| é…置项 | 类型 | 默认值 | 说明 |
|---|---|---|---|
| `StarServerSetting.EnableMcp` | Boolean | `false` | MCP æœåŠ¡æ€»å¼€å…³ã€‚å…³é—æ—¶ `/mcp` 返回 404 |
| `StarServerSetting.McpActionSet` | String | `*` | å¯ç”¨çš„动作集,逗å·åˆ†éš”ï¼›`*` 表示全部å¯ç”¨ |
> Token 本身有 `Enable` å—æ®µå¯å•独ç¦ç”¨ï¼›`EnableMcp` 是全局开关,关é—åŽæ‰€æœ‰ Token éƒ½æ— æ³•è°ƒç”¨ã€‚
---
## 7. 扩展机制
è¯¦è§ [MCP-2-action扩展](/NewLife/Stardust/Blob/master/Doc/MCP-2-action扩展.md)。
新增 MCP 动作的æ¥éª¤ï¼š
1. 在 `Stardust.Web/Mcp/Actions/{Module}/` 下新建类,实现 `IMcpAction`(或继承 `McpActionBase`)
2. 填写 `Name` / `Description` / `Module` / `InputSchema` / `RequiredResource`
3. 实现 `InvokeAsync` æ–¹æ³•ï¼ˆä»…ä¸šåŠ¡é€»è¾‘ï¼Œæ— éœ€æŽˆæƒæ ¡éªŒï¼‰
4. é‡å¯ Stardust.Server,`McpService` 自动å射注册
**æ— éœ€**:修改 Controllerã€ä¿®æ”¹ Service 注册代ç ã€ä¿®æ”¹æ•°æ®åº“é…ç½®ã€ä¿®æ”¹å‰ç«¯ä»£ç 。
---
## 8. 审计日志
æ¯æ¬¡ `tools.call` 在 `McpAudit` 表ä¸è®°å½•一æ¡å®¡è®¡æ—¥å¿—,å«ï¼š
| å—æ®µ | 说明 |
|---|---|
| TokenId / TokenName | 调用方身份(TokenName 为快照,Token åˆ é™¤åŽä»å¯å®¡è®¡ï¼‰ |
| ToolName / ActionName | 调用的工具å和动作å |
| CallerIp / CallerUserAgent | è°ƒç”¨æ¥æº |
| Arguments | å…¥å‚ JSONï¼ˆæˆªæ– 2000 å—ç¬¦ï¼Œæ•æ„Ÿå—段脱æ•) |
| Success / ErrorMessage | 执行结果 |
| Duration | 耗时(ms) |
审计日志写入失败ä¸å½±å“主调用返回。
---
## 9. å½±å“范围
- 新增 3 å¼ æ•°æ®è¡¨ï¼ˆ`McpToken` / `McpTokenResource` / `McpAudit`),ä¸å½±å“已有实体
- 新增 `McpMiddleware`(在 Cube å‰çŸè·¯ `/mcp`),独立鉴æƒï¼Œä¸å¹²æ‰°çŽ°æœ‰ `[ApiFilter]` / JWT 链路
- 新增 27 个 `IMcpAction` 实现,å¤ç”¨å·²æœ‰çš„ `StarFactory` / `DeployService` / `PipelineService` ç‰
- **䏿”¹åЍ** 任何已有 Controllerã€Serviceã€å®žä½“表的对外行为
|