mirror of
https://github.com/samanhappy/mcphub.git
synced 2025-12-24 02:39:19 -05:00
573 lines
11 KiB
Plaintext
573 lines
11 KiB
Plaintext
---
|
||
title: '创建资源'
|
||
description: '创建新的 MCP 服务器、用户和组'
|
||
---
|
||
|
||
## 创建服务器
|
||
|
||
### 端点
|
||
|
||
```http
|
||
POST /api/servers
|
||
```
|
||
|
||
### 请求
|
||
|
||
#### 请求头
|
||
|
||
```http
|
||
Content-Type: application/json
|
||
Authorization: Bearer YOUR_JWT_TOKEN
|
||
```
|
||
|
||
#### 请求体
|
||
|
||
```json
|
||
{
|
||
"name": "文件系统服务器",
|
||
"command": "npx",
|
||
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/allowed/path"],
|
||
"env": {
|
||
"NODE_ENV": "production",
|
||
"DEBUG": "mcp:*",
|
||
"MAX_FILES": "1000"
|
||
},
|
||
"cwd": "/app/workspace",
|
||
"timeout": 30000,
|
||
"retries": 3,
|
||
"enabled": true,
|
||
"description": "提供文件系统访问的 MCP 服务器",
|
||
"tags": ["filesystem", "production"],
|
||
"healthCheck": {
|
||
"enabled": true,
|
||
"interval": 30000,
|
||
"timeout": 5000,
|
||
"retries": 3,
|
||
"endpoint": "/health"
|
||
},
|
||
"resources": {
|
||
"memory": {
|
||
"limit": "512MB",
|
||
"warning": "400MB"
|
||
},
|
||
"cpu": {
|
||
"limit": "50%"
|
||
}
|
||
},
|
||
"logging": {
|
||
"level": "info",
|
||
"file": "/var/log/mcphub/server.log",
|
||
"maxSize": "100MB",
|
||
"maxFiles": 5
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 必填字段
|
||
|
||
- `name` (string): 服务器唯一名称
|
||
- `command` (string): 执行命令
|
||
- `args` (array): 命令参数数组
|
||
|
||
#### 可选字段
|
||
|
||
- `env` (object): 环境变量键值对
|
||
- `cwd` (string): 工作目录
|
||
- `timeout` (number): 超时时间(毫秒)
|
||
- `retries` (number): 重试次数
|
||
- `enabled` (boolean): 是否启用(默认 true)
|
||
- `description` (string): 服务器描述
|
||
- `tags` (array): 标签数组
|
||
- `healthCheck` (object): 健康检查配置
|
||
- `resources` (object): 资源限制配置
|
||
- `logging` (object): 日志配置
|
||
|
||
### 响应
|
||
|
||
#### 成功响应 (201 Created)
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "server-abc123",
|
||
"name": "文件系统服务器",
|
||
"status": "stopped",
|
||
"command": "npx",
|
||
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/allowed/path"],
|
||
"env": {
|
||
"NODE_ENV": "production",
|
||
"DEBUG": "mcp:*",
|
||
"MAX_FILES": "1000"
|
||
},
|
||
"cwd": "/app/workspace",
|
||
"timeout": 30000,
|
||
"retries": 3,
|
||
"enabled": true,
|
||
"description": "提供文件系统访问的 MCP 服务器",
|
||
"tags": ["filesystem", "production"],
|
||
"healthCheck": {
|
||
"enabled": true,
|
||
"interval": 30000,
|
||
"timeout": 5000,
|
||
"retries": 3,
|
||
"endpoint": "/health",
|
||
"status": "unknown"
|
||
},
|
||
"resources": {
|
||
"memory": {
|
||
"limit": "512MB",
|
||
"warning": "400MB",
|
||
"current": "0MB"
|
||
},
|
||
"cpu": {
|
||
"limit": "50%",
|
||
"current": "0%"
|
||
}
|
||
},
|
||
"logging": {
|
||
"level": "info",
|
||
"file": "/var/log/mcphub/server.log",
|
||
"maxSize": "100MB",
|
||
"maxFiles": 5,
|
||
"currentSize": "0MB"
|
||
},
|
||
"createdAt": "2024-01-01T12:00:00Z",
|
||
"updatedAt": "2024-01-01T12:00:00Z",
|
||
"createdBy": "user123"
|
||
},
|
||
"message": "服务器创建成功"
|
||
}
|
||
```
|
||
|
||
#### 错误响应
|
||
|
||
**400 Bad Request - 参数错误**
|
||
|
||
```json
|
||
{
|
||
"success": false,
|
||
"error": {
|
||
"code": "VALIDATION_ERROR",
|
||
"message": "请求数据验证失败",
|
||
"details": [
|
||
{
|
||
"field": "name",
|
||
"message": "服务器名称不能为空"
|
||
},
|
||
{
|
||
"field": "command",
|
||
"message": "执行命令不能为空"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
**409 Conflict - 名称冲突**
|
||
|
||
```json
|
||
{
|
||
"success": false,
|
||
"error": {
|
||
"code": "RESOURCE_CONFLICT",
|
||
"message": "服务器名称已存在",
|
||
"details": {
|
||
"field": "name",
|
||
"value": "文件系统服务器",
|
||
"conflictingResourceId": "server-xyz789"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### 示例
|
||
|
||
#### cURL
|
||
|
||
```bash
|
||
curl -X POST http://localhost:3000/api/servers \
|
||
-H "Content-Type: application/json" \
|
||
-H "Authorization: Bearer YOUR_JWT_TOKEN" \
|
||
-d '{
|
||
"name": "文件系统服务器",
|
||
"command": "npx",
|
||
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/data"],
|
||
"env": {
|
||
"NODE_ENV": "production"
|
||
},
|
||
"description": "生产环境文件系统服务器"
|
||
}'
|
||
```
|
||
|
||
#### JavaScript
|
||
|
||
```javascript
|
||
const response = await fetch('/api/servers', {
|
||
method: 'POST',
|
||
headers: {
|
||
'Content-Type': 'application/json',
|
||
Authorization: `Bearer ${token}`,
|
||
},
|
||
body: JSON.stringify({
|
||
name: '文件系统服务器',
|
||
command: 'npx',
|
||
args: ['-y', '@modelcontextprotocol/server-filesystem', '/data'],
|
||
env: {
|
||
NODE_ENV: 'production',
|
||
},
|
||
description: '生产环境文件系统服务器',
|
||
}),
|
||
});
|
||
|
||
const result = await response.json();
|
||
if (result.success) {
|
||
console.log('服务器创建成功:', result.data);
|
||
} else {
|
||
console.error('创建失败:', result.error);
|
||
}
|
||
```
|
||
|
||
#### Python
|
||
|
||
```python
|
||
import requests
|
||
|
||
response = requests.post(
|
||
'http://localhost:3000/api/servers',
|
||
headers={
|
||
'Content-Type': 'application/json',
|
||
'Authorization': f'Bearer {token}'
|
||
},
|
||
json={
|
||
'name': '文件系统服务器',
|
||
'command': 'npx',
|
||
'args': ['-y', '@modelcontextprotocol/server-filesystem', '/data'],
|
||
'env': {
|
||
'NODE_ENV': 'production'
|
||
},
|
||
'description': '生产环境文件系统服务器'
|
||
}
|
||
)
|
||
|
||
if response.status_code == 201:
|
||
result = response.json()
|
||
print('服务器创建成功:', result['data'])
|
||
else:
|
||
error = response.json()
|
||
print('创建失败:', error['error'])
|
||
```
|
||
|
||
## 创建用户
|
||
|
||
### 端点
|
||
|
||
```http
|
||
POST /api/users
|
||
```
|
||
|
||
### 请求体
|
||
|
||
```json
|
||
{
|
||
"username": "newuser",
|
||
"email": "user@example.com",
|
||
"password": "SecurePassword123!",
|
||
"role": "user",
|
||
"groups": ["dev-team", "qa-team"],
|
||
"profile": {
|
||
"firstName": "张",
|
||
"lastName": "三",
|
||
"department": "开发部",
|
||
"title": "软件工程师",
|
||
"phone": "+86-138-0013-8000",
|
||
"location": "北京"
|
||
},
|
||
"preferences": {
|
||
"language": "zh-CN",
|
||
"timezone": "Asia/Shanghai",
|
||
"notifications": {
|
||
"email": true,
|
||
"slack": false,
|
||
"browser": true
|
||
}
|
||
},
|
||
"enabled": true
|
||
}
|
||
```
|
||
|
||
### 响应 (201 Created)
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "user-abc123",
|
||
"username": "newuser",
|
||
"email": "user@example.com",
|
||
"role": "user",
|
||
"groups": [
|
||
{
|
||
"id": "dev-team",
|
||
"name": "开发团队",
|
||
"role": "member"
|
||
}
|
||
],
|
||
"profile": {
|
||
"firstName": "张",
|
||
"lastName": "三",
|
||
"fullName": "张三",
|
||
"department": "开发部",
|
||
"title": "软件工程师",
|
||
"phone": "+86-138-0013-8000",
|
||
"location": "北京",
|
||
"avatar": null
|
||
},
|
||
"preferences": {
|
||
"language": "zh-CN",
|
||
"timezone": "Asia/Shanghai",
|
||
"notifications": {
|
||
"email": true,
|
||
"slack": false,
|
||
"browser": true
|
||
}
|
||
},
|
||
"enabled": true,
|
||
"lastLoginAt": null,
|
||
"createdAt": "2024-01-01T12:00:00Z",
|
||
"updatedAt": "2024-01-01T12:00:00Z"
|
||
},
|
||
"message": "用户创建成功"
|
||
}
|
||
```
|
||
|
||
## 创建组
|
||
|
||
### 端点
|
||
|
||
```http
|
||
POST /api/groups
|
||
```
|
||
|
||
### 请求体
|
||
|
||
```json
|
||
{
|
||
"name": "dev-team",
|
||
"displayName": "开发团队",
|
||
"description": "前端和后端开发人员",
|
||
"parentGroup": null,
|
||
"permissions": {
|
||
"servers": {
|
||
"create": false,
|
||
"read": true,
|
||
"update": true,
|
||
"delete": false,
|
||
"execute": true
|
||
},
|
||
"tools": {
|
||
"filesystem": {
|
||
"read": true,
|
||
"write": true,
|
||
"paths": ["/app/data", "/tmp"]
|
||
},
|
||
"web-search": {
|
||
"enabled": true,
|
||
"maxQueries": 100
|
||
}
|
||
},
|
||
"monitoring": {
|
||
"viewLogs": true,
|
||
"viewMetrics": true,
|
||
"exportData": false
|
||
}
|
||
},
|
||
"settings": {
|
||
"autoAssign": false,
|
||
"maxMembers": 50,
|
||
"requireApproval": true,
|
||
"sessionTimeout": "8h"
|
||
},
|
||
"quotas": {
|
||
"requests": {
|
||
"daily": 1000,
|
||
"monthly": 30000
|
||
},
|
||
"storage": {
|
||
"maxSize": "10GB"
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
### 响应 (201 Created)
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"id": "group-abc123",
|
||
"name": "dev-team",
|
||
"displayName": "开发团队",
|
||
"description": "前端和后端开发人员",
|
||
"parentGroup": null,
|
||
"permissions": {
|
||
"servers": {
|
||
"create": false,
|
||
"read": true,
|
||
"update": true,
|
||
"delete": false,
|
||
"execute": true
|
||
},
|
||
"tools": {
|
||
"filesystem": {
|
||
"read": true,
|
||
"write": true,
|
||
"paths": ["/app/data", "/tmp"]
|
||
},
|
||
"web-search": {
|
||
"enabled": true,
|
||
"maxQueries": 100
|
||
}
|
||
},
|
||
"monitoring": {
|
||
"viewLogs": true,
|
||
"viewMetrics": true,
|
||
"exportData": false
|
||
}
|
||
},
|
||
"settings": {
|
||
"autoAssign": false,
|
||
"maxMembers": 50,
|
||
"requireApproval": true,
|
||
"sessionTimeout": "8h"
|
||
},
|
||
"quotas": {
|
||
"requests": {
|
||
"daily": 1000,
|
||
"monthly": 30000
|
||
},
|
||
"storage": {
|
||
"maxSize": "10GB"
|
||
}
|
||
},
|
||
"memberCount": 0,
|
||
"serverCount": 0,
|
||
"createdAt": "2024-01-01T12:00:00Z",
|
||
"updatedAt": "2024-01-01T12:00:00Z",
|
||
"createdBy": "admin"
|
||
},
|
||
"message": "组创建成功"
|
||
}
|
||
```
|
||
|
||
## 批量创建
|
||
|
||
### 批量创建服务器
|
||
|
||
```http
|
||
POST /api/servers/bulk
|
||
```
|
||
|
||
#### 请求体
|
||
|
||
```json
|
||
{
|
||
"servers": [
|
||
{
|
||
"name": "dev-server-1",
|
||
"command": "python",
|
||
"args": ["-m", "mcp_server"],
|
||
"env": { "ENV": "development" }
|
||
},
|
||
{
|
||
"name": "dev-server-2",
|
||
"command": "node",
|
||
"args": ["server.js"],
|
||
"env": { "ENV": "development" }
|
||
}
|
||
],
|
||
"options": {
|
||
"skipExisting": true,
|
||
"validateAll": true,
|
||
"startAfterCreate": false
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 响应 (201 Created)
|
||
|
||
```json
|
||
{
|
||
"success": true,
|
||
"data": {
|
||
"created": [
|
||
{
|
||
"id": "server-1",
|
||
"name": "dev-server-1",
|
||
"status": "created"
|
||
},
|
||
{
|
||
"id": "server-2",
|
||
"name": "dev-server-2",
|
||
"status": "created"
|
||
}
|
||
],
|
||
"skipped": [],
|
||
"failed": [],
|
||
"summary": {
|
||
"total": 2,
|
||
"created": 2,
|
||
"skipped": 0,
|
||
"failed": 0
|
||
}
|
||
},
|
||
"message": "批量创建完成,成功创建 2 个服务器"
|
||
}
|
||
```
|
||
|
||
## 验证
|
||
|
||
### 预验证创建请求
|
||
|
||
在实际创建资源之前验证请求:
|
||
|
||
```http
|
||
POST /api/servers/validate
|
||
```
|
||
|
||
#### 请求体
|
||
|
||
```json
|
||
{
|
||
"name": "test-server",
|
||
"command": "invalid-command",
|
||
"args": []
|
||
}
|
||
```
|
||
|
||
#### 响应
|
||
|
||
```json
|
||
{
|
||
"success": false,
|
||
"data": {
|
||
"valid": false,
|
||
"errors": [
|
||
{
|
||
"field": "command",
|
||
"message": "命令 'invalid-command' 不存在或无法执行"
|
||
}
|
||
],
|
||
"warnings": [
|
||
{
|
||
"field": "args",
|
||
"message": "参数数组为空,服务器可能无法正常启动"
|
||
}
|
||
]
|
||
}
|
||
}
|
||
```
|
||
|
||
有关更多 API 端点信息,请参阅 [获取资源](/zh/api-reference/endpoint/get)、[删除资源](/zh/api-reference/endpoint/delete) 和 [WebHooks](/zh/api-reference/endpoint/webhook) 文档。
|