Files
mcphub/docs/zh/essentials/code.mdx

893 lines
16 KiB
Plaintext

---
title: '代码块'
description: 'MCPHub 文档中代码块的编写和展示指南'
---
## 内联代码
在 MCPHub 文档中使用内联代码来标记命令、配置键、文件名或短代码片段:
```md
使用 `mcphub start` 命令启动服务器,配置 `MCPHUB_PORT` 环境变量。
```
使用 `mcphub start` 命令启动服务器,配置 `MCPHUB_PORT` 环境变量。
## 代码块语法
### 基本代码块
MCPHub 支持多种编程语言的语法高亮:
````md
```javascript
// JavaScript 示例
const mcpClient = new MCPClient({
endpoint: process.env.MCPHUB_ENDPOINT,
apiKey: process.env.MCPHUB_API_KEY,
});
```
````
```javascript
// JavaScript 示例
const mcpClient = new MCPClient({
endpoint: process.env.MCPHUB_ENDPOINT,
apiKey: process.env.MCPHUB_API_KEY,
});
```
### TypeScript 代码
````md
```typescript
interface MCPServerConfig {
id: string;
name: string;
endpoint: string;
capabilities: string[];
metadata?: Record<string, any>;
}
class MCPServer implements MCPServerConfig {
constructor(
public id: string,
public name: string,
public endpoint: string,
public capabilities: string[],
) {}
}
```
````
```typescript
interface MCPServerConfig {
id: string;
name: string;
endpoint: string;
capabilities: string[];
metadata?: Record<string, any>;
}
class MCPServer implements MCPServerConfig {
constructor(
public id: string,
public name: string,
public endpoint: string,
public capabilities: string[],
) {}
}
```
### Python 代码
````md
```python
import requests
from typing import Dict, List, Optional
class MCPHubClient:
def __init__(self, endpoint: str, api_key: str):
self.endpoint = endpoint
self.api_key = api_key
self.headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
def create_server(self, config: Dict) -> Dict:
response = requests.post(
f'{self.endpoint}/api/servers',
json=config,
headers=self.headers
)
return response.json()
```
````
```python
import requests
from typing import Dict, List, Optional
class MCPHubClient:
def __init__(self, endpoint: str, api_key: str):
self.endpoint = endpoint
self.api_key = api_key
self.headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
def create_server(self, config: Dict) -> Dict:
response = requests.post(
f'{self.endpoint}/api/servers',
json=config,
headers=self.headers
)
return response.json()
```
## 配置文件
### YAML 配置
````md
```yaml title="mcphub.yml"
server:
port: 3000
host: 0.0.0.0
database:
type: postgresql
host: localhost
port: 5432
database: mcphub
username: mcphub_user
password: secure_password
mcp:
servers:
- id: ai-assistant
name: AI Assistant Server
endpoint: https://ai.example.com
capabilities:
- chat
- completion
- id: data-processor
name: Data Processing Server
endpoint: https://data.example.com
capabilities:
- analysis
- transformation
routing:
strategy: round_robin
health_check:
enabled: true
interval: 30s
timeout: 5s
logging:
level: info
format: json
file: /var/log/mcphub/app.log
```
````
```yaml title="mcphub.yml"
server:
port: 3000
host: 0.0.0.0
database:
type: postgresql
host: localhost
port: 5432
database: mcphub
username: mcphub_user
password: secure_password
mcp:
servers:
- id: ai-assistant
name: AI Assistant Server
endpoint: https://ai.example.com
capabilities:
- chat
- completion
- id: data-processor
name: Data Processing Server
endpoint: https://data.example.com
capabilities:
- analysis
- transformation
routing:
strategy: round_robin
health_check:
enabled: true
interval: 30s
timeout: 5s
logging:
level: info
format: json
file: /var/log/mcphub/app.log
```
### JSON 配置
````md
```json title="package.json"
{
"name": "@mcphub/server",
"version": "2.1.0",
"description": "Model Context Protocol Hub Server",
"main": "dist/index.js",
"scripts": {
"start": "node dist/index.js",
"dev": "tsx watch src/index.ts",
"build": "tsc",
"test": "jest",
"test:watch": "jest --watch",
"lint": "eslint src/**/*.ts",
"migrate": "prisma migrate deploy"
},
"dependencies": {
"@prisma/client": "^5.7.0",
"express": "^4.18.2",
"helmet": "^7.1.0",
"cors": "^2.8.5",
"jsonwebtoken": "^9.0.2",
"bcryptjs": "^2.4.3",
"winston": "^3.11.0"
},
"devDependencies": {
"@types/node": "^20.10.0",
"@types/express": "^4.17.21",
"typescript": "^5.3.0",
"tsx": "^4.6.0",
"jest": "^29.7.0",
"eslint": "^8.55.0"
}
}
```
````
```json title="package.json"
{
"name": "@mcphub/server",
"version": "2.1.0",
"description": "Model Context Protocol Hub Server",
"main": "dist/index.js",
"scripts": {
"start": "node dist/index.js",
"dev": "tsx watch src/index.ts",
"build": "tsc",
"test": "jest",
"test:watch": "jest --watch",
"lint": "eslint src/**/*.ts",
"migrate": "prisma migrate deploy"
},
"dependencies": {
"@prisma/client": "^5.7.0",
"express": "^4.18.2",
"helmet": "^7.1.0",
"cors": "^2.8.5",
"jsonwebtoken": "^9.0.2",
"bcryptjs": "^2.4.3",
"winston": "^3.11.0"
},
"devDependencies": {
"@types/node": "^20.10.0",
"@types/express": "^4.17.21",
"typescript": "^5.3.0",
"tsx": "^4.6.0",
"jest": "^29.7.0",
"eslint": "^8.55.0"
}
}
```
### Docker 配置
````md
```dockerfile title="Dockerfile"
FROM node:18-alpine AS builder
WORKDIR /app
# 复制依赖文件
COPY package*.json ./
COPY tsconfig.json ./
# 安装依赖
RUN npm ci --only=production
# 复制源码
COPY src/ ./src/
# 构建应用
RUN npm run build
# 生产环境镜像
FROM node:18-alpine AS production
WORKDIR /app
# 创建非 root 用户
RUN addgroup -g 1001 -S nodejs
RUN adduser -S mcphub -u 1001
# 复制构建产物
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./
# 设置权限
USER mcphub
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD node dist/health-check.js
EXPOSE 3000
CMD ["node", "dist/index.js"]
```
````
```dockerfile title="Dockerfile"
FROM node:18-alpine AS builder
WORKDIR /app
# 复制依赖文件
COPY package*.json ./
COPY tsconfig.json ./
# 安装依赖
RUN npm ci --only=production
# 复制源码
COPY src/ ./src/
# 构建应用
RUN npm run build
# 生产环境镜像
FROM node:18-alpine AS production
WORKDIR /app
# 创建非 root 用户
RUN addgroup -g 1001 -S nodejs
RUN adduser -S mcphub -u 1001
# 复制构建产物
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package*.json ./
# 设置权限
USER mcphub
# 健康检查
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD node dist/health-check.js
EXPOSE 3000
CMD ["node", "dist/index.js"]
```
## 终端命令
### Bash/Shell 命令
````md
```bash
# 克隆 MCPHub 仓库
git clone https://github.com/samanhappy/mcphub.git
cd mcphub
# 安装依赖
npm install
# 复制环境变量文件
cp .env.example .env
# 设置数据库
npm run db:setup
# 启动开发服务器
npm run dev
# 构建生产版本
npm run build
# 启动生产服务器
npm start
```
````
```bash
# 克隆 MCPHub 仓库
git clone https://github.com/samanhappy/mcphub.git
cd mcphub
# 安装依赖
npm install
# 复制环境变量文件
cp .env.example .env
# 设置数据库
npm run db:setup
# 启动开发服务器
npm run dev
# 构建生产版本
npm run build
# 启动生产服务器
npm start
```
### PowerShell 命令
````md
```powershell
# Windows PowerShell 安装步骤
# 克隆仓库
git clone https://github.com/samanhappy/mcphub.git
Set-Location mcphub
# 安装 Node.js 依赖
npm install
# 复制环境变量文件
Copy-Item .env.example .env
# 启动开发服务器
npm run dev
```
````
```powershell
# Windows PowerShell 安装步骤
# 克隆仓库
git clone https://github.com/samanhappy/mcphub.git
Set-Location mcphub
# 安装 Node.js 依赖
npm install
# 复制环境变量文件
Copy-Item .env.example .env
# 启动开发服务器
npm run dev
```
### Docker 命令
````md
```bash
# 使用 Docker 运行 MCPHub
docker run -d \
--name mcphub \
-p 3000:3000 \
-e NODE_ENV=production \
-e DATABASE_URL=postgresql://user:pass@host:5432/mcphub \
-e JWT_SECRET=your-secret-key \
mcphub/server:latest
# 查看日志
docker logs mcphub
# 进入容器
docker exec -it mcphub sh
# 停止容器
docker stop mcphub
# 使用 Docker Compose
docker-compose up -d
```
````
```bash
# 使用 Docker 运行 MCPHub
docker run -d \
--name mcphub \
-p 3000:3000 \
-e NODE_ENV=production \
-e DATABASE_URL=postgresql://user:pass@host:5432/mcphub \
-e JWT_SECRET=your-secret-key \
mcphub/server:latest
# 查看日志
docker logs mcphub
# 进入容器
docker exec -it mcphub sh
# 停止容器
docker stop mcphub
# 使用 Docker Compose
docker-compose up -d
```
## API 请求示例
### cURL 命令
````md
```bash
# 创建新的 MCP 服务器
curl -X POST http://localhost:3000/api/servers \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "AI Assistant Server",
"endpoint": "https://ai.example.com",
"capabilities": ["chat", "completion"],
"groupId": "production"
}'
# 获取服务器列表
curl -X GET "http://localhost:3000/api/servers?limit=10&active=true" \
-H "Authorization: Bearer YOUR_API_TOKEN"
# 更新服务器配置
curl -X PUT http://localhost:3000/api/servers/server-123 \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Updated AI Assistant",
"active": true
}'
# 删除服务器
curl -X DELETE http://localhost:3000/api/servers/server-123 \
-H "Authorization: Bearer YOUR_API_TOKEN"
```
````
```bash
# 创建新的 MCP 服务器
curl -X POST http://localhost:3000/api/servers \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "AI Assistant Server",
"endpoint": "https://ai.example.com",
"capabilities": ["chat", "completion"],
"groupId": "production"
}'
# 获取服务器列表
curl -X GET "http://localhost:3000/api/servers?limit=10&active=true" \
-H "Authorization: Bearer YOUR_API_TOKEN"
# 更新服务器配置
curl -X PUT http://localhost:3000/api/servers/server-123 \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"name": "Updated AI Assistant",
"active": true
}'
# 删除服务器
curl -X DELETE http://localhost:3000/api/servers/server-123 \
-H "Authorization: Bearer YOUR_API_TOKEN"
```
### HTTP 请求示例
````md
```http
POST /api/servers HTTP/1.1
Host: localhost:3000
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
{
"name": "AI Assistant Server",
"endpoint": "https://ai.example.com",
"capabilities": ["chat", "completion"],
"groupId": "production"
}
```
````
```http
POST /api/servers HTTP/1.1
Host: localhost:3000
Authorization: Bearer YOUR_API_TOKEN
Content-Type: application/json
{
"name": "AI Assistant Server",
"endpoint": "https://ai.example.com",
"capabilities": ["chat", "completion"],
"groupId": "production"
}
```
## 数据库查询
### SQL 查询
````md
```sql
-- 查询活跃的 MCP 服务器
SELECT
id,
name,
endpoint,
status,
created_at
FROM mcp_servers
WHERE status = 'active'
ORDER BY created_at DESC;
-- 统计每个组的服务器数量
SELECT
g.name as group_name,
COUNT(s.id) as server_count
FROM server_groups g
LEFT JOIN mcp_servers s ON g.id = s.group_id
GROUP BY g.id, g.name
ORDER BY server_count DESC;
-- 查询最近的错误日志
SELECT
timestamp,
level,
message,
metadata
FROM logs
WHERE level = 'error'
AND timestamp >= NOW() - INTERVAL '1 hour'
ORDER BY timestamp DESC
LIMIT 50;
```
````
```sql
-- 查询活跃的 MCP 服务器
SELECT
id,
name,
endpoint,
status,
created_at
FROM mcp_servers
WHERE status = 'active'
ORDER BY created_at DESC;
-- 统计每个组的服务器数量
SELECT
g.name as group_name,
COUNT(s.id) as server_count
FROM server_groups g
LEFT JOIN mcp_servers s ON g.id = s.group_id
GROUP BY g.id, g.name
ORDER BY server_count DESC;
-- 查询最近的错误日志
SELECT
timestamp,
level,
message,
metadata
FROM logs
WHERE level = 'error'
AND timestamp >= NOW() - INTERVAL '1 hour'
ORDER BY timestamp DESC
LIMIT 50;
```
## 代码块最佳实践
### 1. 语言标识
始终为代码块指定正确的语言:
````md
````javascript // ✅ 正确
```js // ✅ 也可以
```; // ❌ 避免无语言标识
````
````
### 2. 文件名标题
为配置文件和示例添加文件名:
````md
```yaml title="docker-compose.yml"
version: '3.8'
services:
mcphub:
image: mcphub/server:latest
```
````
### 3. 突出显示重要行
使用行号高亮重要代码:
````md
```javascript {3,7-9}
const express = require('express');
const app = express();
const port = process.env.PORT || 3000; // 重要:端口配置
app.get('/health', (req, res) => {
res.json({ status: 'ok' });
});
app.listen(port, () => {
// 重要:服务器启动
console.log(`Server running on port ${port}`);
}); // 重要:结束
```
````
### 4. 代码注释
添加有意义的中文注释:
```javascript
// 初始化 MCPHub 客户端
const client = new MCPHubClient({
endpoint: 'http://localhost:3000',
apiKey: process.env.API_KEY,
timeout: 30000, // 30 秒超时
retries: 3, // 重试 3 次
});
// 配置路由策略
client.setRoutingStrategy({
type: 'weighted', // 加权轮询
healthCheck: true, // 启用健康检查
fallback: 'round_robin', // 降级策略
});
```
### 5. 错误处理示例
展示完整的错误处理:
```javascript
try {
const server = await mcpClient.createServer({
name: 'AI Assistant',
endpoint: 'https://ai.example.com',
});
console.log('服务器创建成功:', server.id);
} catch (error) {
if (error.code === 'DUPLICATE_SERVER') {
console.log('服务器已存在,跳过创建');
} else if (error.code === 'INVALID_ENDPOINT') {
console.error('无效的端点地址:', error.message);
} else {
console.error('创建失败:', error.message);
throw error; // 重新抛出未知错误
}
}
```
## 支持的语言
MCPHub 文档支持以下编程语言的语法高亮:
- **JavaScript/TypeScript**: `javascript`, `js`, `typescript`, `ts`
- **Python**: `python`, `py`
- **Shell/Bash**: `bash`, `shell`, `sh`
- **PowerShell**: `powershell`, `ps1`
- **SQL**: `sql`, `postgresql`, `mysql`
- **YAML**: `yaml`, `yml`
- **JSON**: `json`
- **XML**: `xml`
- **HTML**: `html`
- **CSS**: `css`
- **Dockerfile**: `dockerfile`
- **Go**: `go`
- **Rust**: `rust`
- **Java**: `java`
- **C#**: `csharp`, `cs`
- **PHP**: `php`
- **Ruby**: `ruby`
- **HTTP**: `http`
- **Markdown**: `markdown`, `md`
`````
### 使用三个反引号
````md
```javascript
console.log('Hello World');
`````
`````
### 语法高亮
我们使用 [Prism](https://prismjs.com/) 来语法高亮显示。Prism 支持 [各种编程语言](https://prismjs.com/#supported-languages)。
要添加语法高亮显示,请在代码块的第一行指定语言。
````md
```python
def hello():
print("Hello World")
```
`````
```python
def hello():
print("Hello World")
```
## 代码组
<CodeGroup>
```bash npm
npm i mintlify
```
```bash yarn
yarn add mintlify
```
```bash pnpm
pnpm add mintlify
```
</CodeGroup>
`CodeGroup` 允许您将多个代码块组合在一起,并为它们提供选项卡。
````md
<CodeGroup>
```bash npm
npm i mintlify
```
```bash yarn
yarn add mintlify
```
```bash pnpm
pnpm add mintlify
```
</CodeGroup>
````
### 代码标题
您也可以为代码块设置标题:
```javascript hello.js
const hello = 'world';
console.log(hello);
```
````md
```javascript hello.js
const hello = 'world';
console.log(hello);
```
````