Files
mcphub/docs/zh/api-reference/endpoint/create.mdx
2025-06-01 00:17:09 +08:00

573 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
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) 文档。