diff --git a/README.md b/README.md
index c125ac6..c1b44cf 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,11 @@ MCPHub makes it easy to manage and scale multiple MCP (Model Context Protocol) s

+## 🌐 Live Demo & Docs
+
+- **Documentation**: [docs.mcphubx.com](https://docs.mcphubx.com/)
+- **Demo Environment**: [demo.mcphubx.com](https://demo.mcphubx.com/)
+
## 🚀 Features
- **Broadened MCP Server Support**: Seamlessly integrate any MCP server with minimal configuration.
diff --git a/README.zh.md b/README.zh.md
index 0c7d32d..0fc72b9 100644
--- a/README.zh.md
+++ b/README.zh.md
@@ -6,6 +6,11 @@ MCPHub 通过将多个 MCP(Model Context Protocol)服务器组织为灵活

+## 🌐 在线文档与演示
+
+- **文档地址**: [docs.mcphubx.com](https://docs.mcphubx.com/)
+- **演示环境**: [demo.mcphubx.com](https://demo.mcphubx.com/)
+
## 🚀 功能亮点
- **广泛的 MCP 服务器支持**:无缝集成任何 MCP 服务器,配置简单。
diff --git a/docs/api-reference/auth.mdx b/docs/api-reference/auth.mdx
new file mode 100644
index 0000000..1fa8f8f
--- /dev/null
+++ b/docs/api-reference/auth.mdx
@@ -0,0 +1,147 @@
+---
+title: "Authentication"
+description: "Manage users and authentication."
+---
+
+import { Card, Cards } from 'mintlify';
+
+
+ Log in to get a JWT token.
+
+
+
+ Register a new user.
+
+
+
+ Get the currently authenticated user.
+
+
+
+ Change the password for the current user.
+
+
+---
+
+### Login
+
+Authenticates a user and returns a JWT token along with user details.
+
+- **Endpoint**: `/api/auth/login`
+- **Method**: `POST`
+- **Body**:
+ - `username` (string, required): The user's username.
+ - `password` (string, required): The user's password.
+- **Request Example**:
+ ```json
+ {
+ "username": "admin",
+ "password": "admin123"
+ }
+ ```
+- **Success Response**:
+ ```json
+ {
+ "success": true,
+ "message": "Login successful",
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
+ "user": {
+ "username": "admin",
+ "isAdmin": true,
+ "permissions": { ... }
+ }
+ }
+ ```
+
+---
+
+### Register
+
+Registers a new user and returns a JWT token.
+
+- **Endpoint**: `/api/auth/register`
+- **Method**: `POST`
+- **Body**:
+ - `username` (string, required): The desired username.
+ - `password` (string, required): The desired password (must be at least 6 characters).
+ - `isAdmin` (boolean, optional): Whether the user should have admin privileges.
+- **Request Example**:
+ ```json
+ {
+ "username": "newuser",
+ "password": "password123",
+ "isAdmin": false
+ }
+ ```
+- **Success Response**:
+ ```json
+ {
+ "success": true,
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
+ "user": {
+ "username": "newuser",
+ "isAdmin": false,
+ "permissions": { ... }
+ }
+ }
+ ```
+
+---
+
+### Get Current User
+
+Retrieves the profile of the currently authenticated user.
+
+- **Endpoint**: `/api/auth/user`
+- **Method**: `GET`
+- **Authentication**: Bearer Token required.
+- **Success Response**:
+ ```json
+ {
+ "success": true,
+ "user": {
+ "username": "admin",
+ "isAdmin": true,
+ "permissions": { ... }
+ }
+ }
+ ```
+
+---
+
+### Change Password
+
+Allows the authenticated user to change their password.
+
+- **Endpoint**: `/api/auth/change-password`
+- **Method**: `POST`
+- **Authentication**: Bearer Token required.
+- **Body**:
+ - `currentPassword` (string, required): The user's current password.
+ - `newPassword` (string, required): The desired new password (must be at least 6 characters).
+- **Request Example**:
+ ```json
+ {
+ "currentPassword": "oldpassword",
+ "newPassword": "newpassword123"
+ }
+ ```
+- **Success Response**:
+ ```json
+ {
+ "success": true,
+ "message": "Password updated successfully"
+ }
+ ```
diff --git a/docs/api-reference/config.mdx b/docs/api-reference/config.mdx
new file mode 100644
index 0000000..93ca3d7
--- /dev/null
+++ b/docs/api-reference/config.mdx
@@ -0,0 +1,111 @@
+---
+title: "Config"
+description: "Manage and retrieve system-wide configurations."
+---
+
+import { Card, Cards } from 'mintlify';
+
+Update the main system configuration.
+Get all system settings, including servers and groups.
+Get public runtime configuration for the frontend.
+Get public configuration to check for auth skip.
+
+---
+
+### Update System Config
+
+Updates various parts of the system configuration. You only need to provide the keys for the sections you want to update.
+
+- **Endpoint**: `/api/system-config`
+- **Method**: `PUT`
+- **Body**: A JSON object containing one or more of the following top-level keys: `routing`, `install`, `smartRouting`, `mcpRouter`.
+
+#### Routing Configuration (`routing`)
+
+- `enableGlobalRoute` (boolean): Enable or disable the global `/api/mcp` route.
+- `enableGroupNameRoute` (boolean): Enable or disable group-based routing (e.g., `/api/mcp/group/:groupName`).
+- `enableBearerAuth` (boolean): Enable bearer token authentication for MCP routes.
+- `bearerAuthKey` (string): The secret key to use for bearer authentication.
+- `skipAuth` (boolean): If true, skips all authentication, making the instance public.
+
+#### Install Configuration (`install`)
+
+- `pythonIndexUrl` (string): The base URL of the Python Package Index (PyPI) to use for installations.
+- `npmRegistry` (string): The URL of the npm registry to use for installations.
+- `baseUrl` (string): The public base URL of this MCPHub instance.
+
+#### Smart Routing Configuration (`smartRouting`)
+
+- `enabled` (boolean): Enable or disable the Smart Routing feature.
+- `dbUrl` (string): The database connection URL for storing embeddings.
+- `openaiApiBaseUrl` (string): The base URL for the OpenAI-compatible API for generating embeddings.
+- `openaiApiKey` (string): The API key for the embeddings service.
+- `openaiApiEmbeddingModel` (string): The name of the embedding model to use.
+
+#### MCP Router Configuration (`mcpRouter`)
+
+- `apiKey` (string): The API key for the MCP Router service.
+- `referer` (string): The referer header to use for MCP Router requests.
+- `title` (string): The title to display for this instance on MCP Router.
+- `baseUrl` (string): The base URL for the MCP Router API.
+
+- **Request Example**:
+ ```json
+ {
+ "routing": {
+ "skipAuth": true
+ },
+ "smartRouting": {
+ "enabled": true,
+ "dbUrl": "postgresql://user:pass@host:port/db"
+ }
+ }
+ ```
+
+---
+
+### Get All Settings
+
+Retrieves the entire settings object for the instance, including all server configurations, groups, and system settings. This is a comprehensive dump of the `mcp_settings.json` file.
+
+- **Endpoint**: `/api/settings`
+- **Method**: `GET`
+
+---
+
+### Get Runtime Config
+
+Retrieves the essential runtime configuration required for the frontend application. This endpoint does not require authentication.
+
+- **Endpoint**: `/config`
+- **Method**: `GET`
+- **Success Response**:
+ ```json
+ {
+ "success": true,
+ "data": {
+ "basePath": "",
+ "version": "1.0.0",
+ "name": "MCPHub"
+ }
+ }
+ ```
+
+---
+
+### Get Public Config
+
+Retrieves public configuration, primarily to check if authentication is skipped. This allows the frontend to adjust its behavior accordingly before a user has logged in. This endpoint does not require authentication.
+
+- **Endpoint**: `/public-config`
+- **Method**: `GET`
+- **Success Response**:
+ ```json
+ {
+ "success": true,
+ "data": {
+ "skipAuth": false,
+ "permissions": {}
+ }
+ }
+ ```
diff --git a/docs/api-reference/endpoint/create.mdx b/docs/api-reference/endpoint/create.mdx
deleted file mode 100644
index 5689f1b..0000000
--- a/docs/api-reference/endpoint/create.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 'Create Plant'
-openapi: 'POST /plants'
----
diff --git a/docs/api-reference/endpoint/delete.mdx b/docs/api-reference/endpoint/delete.mdx
deleted file mode 100644
index 657dfc8..0000000
--- a/docs/api-reference/endpoint/delete.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 'Delete Plant'
-openapi: 'DELETE /plants/{id}'
----
diff --git a/docs/api-reference/endpoint/get.mdx b/docs/api-reference/endpoint/get.mdx
deleted file mode 100644
index 56aa09e..0000000
--- a/docs/api-reference/endpoint/get.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 'Get Plants'
-openapi: 'GET /plants'
----
diff --git a/docs/api-reference/endpoint/webhook.mdx b/docs/api-reference/endpoint/webhook.mdx
deleted file mode 100644
index 3291340..0000000
--- a/docs/api-reference/endpoint/webhook.mdx
+++ /dev/null
@@ -1,4 +0,0 @@
----
-title: 'New Plant'
-openapi: 'WEBHOOK /plant/webhook'
----
diff --git a/docs/api-reference/groups.mdx b/docs/api-reference/groups.mdx
new file mode 100644
index 0000000..b975002
--- /dev/null
+++ b/docs/api-reference/groups.mdx
@@ -0,0 +1,212 @@
+---
+title: "Groups"
+description: "Manage server groups to organize and route requests."
+---
+
+import { Card, Cards } from 'mintlify';
+
+Get a list of all groups.
+Create a new group.
+Get details of a specific group.
+Update an existing group.
+Delete a group.
+Add a server to a group.
+Remove a server from a group.
+Batch update servers in a group.
+Get detailed server configurations in a group.
+Update tool selection for a server in a group.
+
+---
+
+### Get All Groups
+
+Retrieves a list of all server groups.
+
+- **Endpoint**: `/api/groups`
+- **Method**: `GET`
+- **Success Response**:
+ ```json
+ {
+ "success": true,
+ "data": [
+ {
+ "id": "group-1",
+ "name": "My Group",
+ "description": "A collection of servers.",
+ "servers": ["server1", "server2"],
+ "owner": "admin"
+ }
+ ]
+ }
+ ```
+
+---
+
+### Create a New Group
+
+Creates a new server group.
+
+- **Endpoint**: `/api/groups`
+- **Method**: `POST`
+- **Body**:
+ - `name` (string, required): The name of the group.
+ - `description` (string, optional): A description for the group.
+ - `servers` (array of strings, optional): A list of server names to include in the group.
+- **Request Example**:
+ ```json
+ {
+ "name": "My New Group",
+ "description": "A description for the new group",
+ "servers": ["server1", "server2"]
+ }
+ ```
+
+---
+
+### Get a Group
+
+Retrieves details for a specific group by its ID or name.
+
+- **Endpoint**: `/api/groups/:id`
+- **Method**: `GET`
+- **Parameters**:
+ - `:id` (string, required): The ID or name of the group.
+
+---
+
+### Update a Group
+
+Updates an existing group's name, description, or server list.
+
+- **Endpoint**: `/api/groups/:id`
+- **Method**: `PUT`
+- **Parameters**:
+ - `:id` (string, required): The ID or name of the group to update.
+- **Body**:
+ - `name` (string, optional): The new name for the group.
+ - `description` (string, optional): The new description for the group.
+ - `servers` (array, optional): The new list of servers for the group. See [Batch Update Group Servers](#batch-update-group-servers) for format.
+- **Request Example**:
+ ```json
+ {
+ "name": "Updated Group Name",
+ "description": "Updated description"
+ }
+ ```
+
+---
+
+### Delete a Group
+
+Deletes a group by its ID or name.
+
+- **Endpoint**: `/api/groups/:id`
+- **Method**: `DELETE`
+- **Parameters**:
+ - `:id` (string, required): The ID or name of the group to delete.
+
+---
+
+### Add Server to Group
+
+Adds a single server to a group.
+
+- **Endpoint**: `/api/groups/:id/servers`
+- **Method**: `POST`
+- **Parameters**:
+ - `:id` (string, required): The ID or name of the group.
+- **Body**:
+ - `serverName` (string, required): The name of the server to add.
+- **Request Example**:
+ ```json
+ {
+ "serverName": "my-server"
+ }
+ ```
+
+---
+
+### Remove Server from Group
+
+Removes a single server from a group.
+
+- **Endpoint**: `/api/groups/:id/servers/:serverName`
+- **Method**: `DELETE`
+- **Parameters**:
+ - `:id` (string, required): The ID or name of the group.
+ - `:serverName` (string, required): The name of the server to remove.
+
+---
+
+### Batch Update Group Servers
+
+Replaces all servers in a group with a new list. The list can be simple strings or detailed configuration objects.
+
+- **Endpoint**: `/api/groups/:id/servers/batch`
+- **Method**: `PUT`
+- **Parameters**:
+ - `:id` (string, required): The ID or name of the group.
+- **Body**:
+ - `servers` (array, required): An array of server names (strings) or server configuration objects.
+- **Request Example (Simple)**:
+ ```json
+ {
+ "servers": ["server1", "server2"]
+ }
+ ```
+- **Request Example (Detailed)**:
+ ```json
+ {
+ "servers": [
+ { "name": "server1", "tools": "all" },
+ { "name": "server2", "tools": ["toolA", "toolB"] }
+ ]
+ }
+ ```
+
+---
+
+### Get Group Server Configs
+
+Retrieves the detailed configuration for all servers within a group, including which tools are enabled.
+
+- **Endpoint**: `/api/groups/:id/server-configs`
+- **Method**: `GET`
+- **Parameters**:
+ - `:id` (string, required): The ID or name of the group.
+- **Success Response**:
+ ```json
+ {
+ "success": true,
+ "data": [
+ {
+ "name": "server1",
+ "tools": "all"
+ },
+ {
+ "name": "server2",
+ "tools": ["toolA", "toolB"]
+ }
+ ]
+ }
+ ```
+
+---
+
+### Update Group Server Tools
+
+Updates the tool selection for a specific server within a group.
+
+- **Endpoint**: `/api/groups/:id/server-configs/:serverName/tools`
+- **Method**: `PUT`
+- **Parameters**:
+ - `:id` (string, required): The ID or name of the group.
+ - `:serverName` (string, required): The name of the server to update.
+- **Body**:
+ - `tools` (string or array of strings, required): Either the string `"all"` to enable all tools, or an array of tool names to enable specifically.
+- **Request Example**:
+ ```json
+ {
+ "tools": ["toolA", "toolC"]
+ }
+ ```
diff --git a/docs/api-reference/introduction.mdx b/docs/api-reference/introduction.mdx
index c835b78..296bc74 100644
--- a/docs/api-reference/introduction.mdx
+++ b/docs/api-reference/introduction.mdx
@@ -1,33 +1,13 @@
---
-title: 'Introduction'
-description: 'Example section for showcasing API endpoints'
+title: "Introduction"
+description: "Welcome to the MCPHub API documentation."
---
-
- If you're not looking to build API reference documentation, you can delete
- this section by removing the api-reference folder.
-
+The MCPHub API provides a comprehensive set of endpoints to manage your MCP servers, groups, users, and more. The API is divided into two main categories:
-## Welcome
+- **MCP Endpoints**: These are the primary endpoints for interacting with your MCP servers. They provide a unified interface for sending requests to your servers and receiving responses in real-time.
+- **Management API**: These endpoints are used for managing the MCPHub instance itself. This includes managing servers, groups, users, and system settings.
-There are two ways to build API documentation: [OpenAPI](https://mintlify.com/docs/api-playground/openapi/setup) and [MDX components](https://mintlify.com/docs/api-playground/mdx/configuration). For the starter kit, we are using the following OpenAPI specification.
+All API endpoints are available under the `/api` path. For example, the endpoint to get all servers is `/api/servers`.
-
- View the OpenAPI specification file
-
-
-## Authentication
-
-All API endpoints are authenticated using Bearer tokens and picked up from the specification file.
-
-```json
-"security": [
- {
- "bearerAuth": []
- }
-]
-```
+Authentication is required for most Management API endpoints. See the [Authentication](/api-reference/auth) section for more details.
\ No newline at end of file
diff --git a/docs/api-reference/logs.mdx b/docs/api-reference/logs.mdx
new file mode 100644
index 0000000..a2b60b8
--- /dev/null
+++ b/docs/api-reference/logs.mdx
@@ -0,0 +1,81 @@
+---
+title: "Logs"
+description: "Access and manage server logs."
+---
+
+import { Card, Cards } from 'mintlify';
+
+
+ Get all logs.
+
+
+
+ Clear all logs.
+
+
+
+ Stream logs in real-time.
+
+
+---
+
+### Get All Logs
+
+Retrieves all stored logs.
+
+- **Endpoint**: `/api/logs`
+- **Method**: `GET`
+- **Success Response**:
+ ```json
+ {
+ "success": true,
+ "data": [
+ {
+ "timestamp": "2023-10-27T10:00:00.000Z",
+ "level": "info",
+ "message": "Server started successfully.",
+ "service": "system"
+ }
+ ]
+ }
+ ```
+
+---
+
+### Clear Logs
+
+Deletes all stored logs.
+
+- **Endpoint**: `/api/logs`
+- **Method**: `DELETE`
+- **Success Response**:
+ ```json
+ {
+ "success": true,
+ "message": "Logs cleared successfully"
+ }
+ ```
+
+---
+
+### Stream Logs
+
+Streams logs in real-time using Server-Sent Events (SSE). The connection will remain open, and new log entries will be sent as they occur.
+
+- **Endpoint**: `/api/logs/stream`
+- **Method**: `GET`
+- **Response Format**: The stream sends events with a `data` field containing a JSON object. The first event has `type: 'initial'` and contains all historical logs. Subsequent events have `type: 'log'` and contain a single new log entry.
+
+- **Example Event**:
+ ```
+ data: {"type":"log","log":{"timestamp":"2023-10-27T10:00:05.000Z","level":"debug","message":"Processing request for /api/some-endpoint","service":"mcp-server"}}
+ ```
diff --git a/docs/api-reference/mcp-http.mdx b/docs/api-reference/mcp-http.mdx
new file mode 100644
index 0000000..ee62fd8
--- /dev/null
+++ b/docs/api-reference/mcp-http.mdx
@@ -0,0 +1,33 @@
+---
+title: "MCP HTTP Endpoints"
+description: "Connect to your MCP servers using the unified HTTP endpoint."
+---
+
+MCPHub provides a unified streamable HTTP interface for all your MCP servers. This allows you to send requests to any configured MCP server and receive responses in real-time.
+
+### Unified Endpoint
+
+This endpoint provides access to all enabled MCP servers.
+
+- **Endpoint**: `http://localhost:3000/mcp`
+- **Method**: `POST`
+
+### Group-Specific Endpoint
+
+For targeted access to specific server groups, use the group-based HTTP endpoint.
+
+- **Endpoint**: `http://localhost:3000/mcp/{group}`
+- **Method**: `POST`
+- **Parameters**:
+ - `{group}`: The ID or name of the group.
+
+### Server-Specific Endpoint
+
+For direct access to individual servers, use the server-specific HTTP endpoint.
+
+- **Endpoint**: `http://localhost:3000/mcp/{server}`
+- **Method**: `POST`
+- **Parameters**:
+ - `{server}`: The name of the server.
+
+> **Note**: If a server name and group name are the same, the group will take precedence.
diff --git a/docs/api-reference/mcp-sse.mdx b/docs/api-reference/mcp-sse.mdx
new file mode 100644
index 0000000..c2c16b4
--- /dev/null
+++ b/docs/api-reference/mcp-sse.mdx
@@ -0,0 +1,25 @@
+---
+title: "MCP SSE Endpoints (Deprecated)"
+description: "Connect to your MCP servers using the SSE endpoint."
+---
+
+The SSE endpoint is deprecated and will be removed in a future version. Please use the [MCP HTTP Endpoints](/api-reference/mcp-http) instead.
+
+### Unified Endpoint
+
+- **Endpoint**: `http://localhost:3000/sse`
+- **Method**: `GET`
+
+### Group-Specific Endpoint
+
+- **Endpoint**: `http://localhost:3000/sse/{group}`
+- **Method**: `GET`
+- **Parameters**:
+ - `{group}`: The ID or name of the group.
+
+### Server-Specific Endpoint
+
+- **Endpoint**: `http://localhost:3000/sse/{server}`
+- **Method**: `GET`
+- **Parameters**:
+ - `{server}`: The name of the server.
diff --git a/docs/api-reference/servers.mdx b/docs/api-reference/servers.mdx
new file mode 100644
index 0000000..eb2bc43
--- /dev/null
+++ b/docs/api-reference/servers.mdx
@@ -0,0 +1,209 @@
+---
+title: "Servers"
+description: "Manage your MCP servers."
+---
+
+import { Card, Cards } from 'mintlify';
+
+
+ Get a list of all MCP servers.
+
+
+
+ Create a new MCP server.
+
+
+
+ Update an existing MCP server.
+
+
+
+ Delete an MCP server.
+
+
+
+ Toggle the enabled state of a server.
+
+
+
+ Toggle the enabled state of a tool.
+
+
+
+ Update the description of a tool.
+
+
+---
+
+### Get All Servers
+
+Retrieves a list of all configured MCP servers, including their status and available tools.
+
+- **Endpoint**: `/api/servers`
+- **Method**: `GET`
+- **Response**:
+ ```json
+ {
+ "success": true,
+ "data": [
+ {
+ "name": "example-server",
+ "status": "connected",
+ "tools": [
+ {
+ "name": "tool1",
+ "description": "Description of tool 1"
+ }
+ ],
+ "config": {
+ "type": "stdio",
+ "command": "node",
+ "args": ["server.js"]
+ }
+ }
+ ]
+ }
+ ```
+
+---
+
+### Create a New Server
+
+Adds a new MCP server to the configuration.
+
+- **Endpoint**: `/api/servers`
+- **Method**: `POST`
+- **Body**:
+ ```json
+ {
+ "name": "my-new-server",
+ "config": {
+ "type": "stdio",
+ "command": "python",
+ "args": ["-u", "my_script.py"],
+ "owner": "admin"
+ }
+ }
+ ```
+ - `name` (string, required): The unique name for the server.
+ - `config` (object, required): The server configuration object.
+ - `type` (string): `stdio`, `sse`, `streamable-http`, or `openapi`.
+ - `command` (string): Command to execute for `stdio` type.
+ - `args` (array of strings): Arguments for the command.
+ - `url` (string): URL for `sse`, `streamable-http`, or `openapi` types.
+ - `openapi` (object): OpenAPI configuration.
+ - `url` (string): URL to the OpenAPI schema.
+ - `schema` (object): The OpenAPI schema object itself.
+ - `headers` (object): Headers to send with requests for `sse`, `streamable-http`, and `openapi` types.
+ - `keepAliveInterval` (number): Keep-alive interval in milliseconds for `sse` type. Defaults to 60000.
+ - `owner` (string): The owner of the server. Defaults to the current user or 'admin'.
+
+---
+
+### Update a Server
+
+Updates the configuration of an existing MCP server.
+
+- **Endpoint**: `/api/servers/:name`
+- **Method**: `PUT`
+- **Parameters**:
+ - `:name` (string, required): The name of the server to update.
+- **Body**:
+ ```json
+ {
+ "config": {
+ "type": "stdio",
+ "command": "node",
+ "args": ["new_server.js"]
+ }
+ }
+ ```
+ - `config` (object, required): The updated server configuration object. See "Create a New Server" for details.
+
+---
+
+### Delete a Server
+
+Removes an MCP server from the configuration.
+
+- **Endpoint**: `/api/servers/:name`
+- **Method**: `DELETE`
+- **Parameters**:
+ - `:name` (string, required): The name of the server to delete.
+
+---
+
+### Toggle a Server
+
+Enables or disables an MCP server.
+
+- **Endpoint**: `/api/servers/:name/toggle`
+- **Method**: `POST`
+- **Parameters**:
+ - `:name` (string, required): The name of the server to toggle.
+- **Body**:
+ ```json
+ {
+ "enabled": true
+ }
+ ```
+ - `enabled` (boolean, required): `true` to enable the server, `false` to disable it.
+
+---
+
+### Toggle a Tool
+
+Enables or disables a specific tool on a server.
+
+- **Endpoint**: `/api/servers/:serverName/tools/:toolName/toggle`
+- **Method**: `POST`
+- **Parameters**:
+ - `:serverName` (string, required): The name of the server.
+ - `:toolName` (string, required): The name of the tool.
+- **Body**:
+ ```json
+ {
+ "enabled": true
+ }
+ ```
+ - `enabled` (boolean, required): `true` to enable the tool, `false` to disable it.
+
+---
+
+### Update Tool Description
+
+Updates the description of a specific tool.
+
+- **Endpoint**: `/api/servers/:serverName/tools/:toolName/description`
+- **Method**: `PUT`
+- **Parameters**:
+ - `:serverName` (string, required): The name of the server.
+ - `:toolName` (string, required): The name of the tool.
+- **Body**:
+ ```json
+ {
+ "description": "New tool description"
+ }
+ ```
+ - `description` (string, required): The new description for the tool.
diff --git a/docs/api-reference/smart-routing.mdx b/docs/api-reference/smart-routing.mdx
new file mode 100644
index 0000000..a6b4b7f
--- /dev/null
+++ b/docs/api-reference/smart-routing.mdx
@@ -0,0 +1,29 @@
+---
+title: "Smart Routing"
+description: "Intelligent tool discovery using vector semantic search."
+---
+
+Smart Routing is MCPHub's intelligent tool discovery system that uses vector semantic search to automatically find the most relevant tools for any given task.
+
+### HTTP Endpoint
+
+- **Endpoint**: `http://localhost:3000/mcp/$smart`
+- **Method**: `POST`
+
+### SSE Endpoint (Deprecated)
+
+- **Endpoint**: `http://localhost:3000/sse/$smart`
+- **Method**: `GET`
+
+### How it Works
+
+1. **Tool Indexing**: All MCP tools are automatically converted to vector embeddings and stored in PostgreSQL with pgvector.
+2. **Semantic Search**: User queries are converted to vectors and matched against tool embeddings using cosine similarity.
+3. **Intelligent Filtering**: Dynamic thresholds ensure relevant results without noise.
+4. **Precise Execution**: Found tools can be directly executed with proper parameter validation.
+
+### Setup Requirements
+
+- PostgreSQL with pgvector extension
+- OpenAI API key (or compatible embedding service)
+- Enable Smart Routing in MCPHub settings
diff --git a/docs/docs.json b/docs/docs.json
index d4fba32..ead9557 100644
--- a/docs/docs.json
+++ b/docs/docs.json
@@ -70,26 +70,58 @@
]
}
]
+ },
+ {
+ "tab": "API",
+ "groups": [
+ {
+ "group": "MCP Endpoints",
+ "pages": [
+ "api-reference/introduction",
+ "api-reference/mcp-http",
+ "api-reference/mcp-sse",
+ "api-reference/smart-routing"
+ ]
+ },
+ {
+ "group": "Management Endpoints",
+ "pages": [
+ "api-reference/servers",
+ "api-reference/groups",
+ "api-reference/auth",
+ "api-reference/logs",
+ "api-reference/config"
+ ]
+ }
+ ]
+ },
+ {
+ "tab": "接口",
+ "groups": [
+ {
+ "group": "MCP 端点",
+ "pages": [
+ "zh/api-reference/introduction",
+ "zh/api-reference/mcp-http",
+ "zh/api-reference/mcp-sse",
+ "zh/api-reference/smart-routing"
+ ]
+ },
+ {
+ "group": "管理端点",
+ "pages": [
+ "zh/api-reference/servers",
+ "zh/api-reference/groups",
+ "zh/api-reference/auth",
+ "zh/api-reference/logs",
+ "zh/api-reference/config"
+ ]
+ }
+ ]
}
],
"global": {
- "anchors": [
- {
- "anchor": "GitHub",
- "href": "https://github.com/samanhappy/mcphub",
- "icon": "github"
- },
- {
- "anchor": "Discord",
- "href": "https://discord.gg/qMKNsn5Q",
- "icon": "discord"
- },
- {
- "anchor": "Sponsor",
- "href": "https://ko-fi.com/samanhappy",
- "icon": "heart"
- }
- ]
+ "anchors": []
}
},
"logo": {
diff --git a/docs/zh/api-reference/auth.mdx b/docs/zh/api-reference/auth.mdx
new file mode 100644
index 0000000..6ed5b0a
--- /dev/null
+++ b/docs/zh/api-reference/auth.mdx
@@ -0,0 +1,147 @@
+---
+title: "身份验证"
+description: "管理用户和身份验证。"
+---
+
+import { Card, Cards } from 'mintlify';
+
+
+ 登录以获取 JWT 令牌。
+
+
+
+ 注册一个新用户。
+
+
+
+ 获取当前已验证的用户。
+
+
+
+ 更改当前用户的密码。
+
+
+---
+
+### 登录
+
+验证用户身份并返回 JWT 令牌及用户详细信息。
+
+- **端点**: `/api/auth/login`
+- **方法**: `POST`
+- **正文**:
+ - `username` (string, 必填): 用户名。
+ - `password` (string, 必填): 用户密码。
+- **请求示例**:
+ ```json
+ {
+ "username": "admin",
+ "password": "admin123"
+ }
+ ```
+- **成功响应**:
+ ```json
+ {
+ "success": true,
+ "message": "登录成功",
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
+ "user": {
+ "username": "admin",
+ "isAdmin": true,
+ "permissions": { ... }
+ }
+ }
+ ```
+
+---
+
+### 注册
+
+注册一个新用户并返回 JWT 令牌。
+
+- **端点**: `/api/auth/register`
+- **方法**: `POST`
+- **正文**:
+ - `username` (string, 必填): 新的用户名。
+ - `password` (string, 必填): 新的用户密码 (至少6个字符)。
+ - `isAdmin` (boolean, 可选): 用户是否应有管理员权限。
+- **请求示例**:
+ ```json
+ {
+ "username": "newuser",
+ "password": "password123",
+ "isAdmin": false
+ }
+ ```
+- **成功响应**:
+ ```json
+ {
+ "success": true,
+ "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
+ "user": {
+ "username": "newuser",
+ "isAdmin": false,
+ "permissions": { ... }
+ }
+ }
+ ```
+
+---
+
+### 获取当前用户
+
+检索当前通过身份验证的用户的个人资料。
+
+- **端点**: `/api/auth/user`
+- **方法**: `GET`
+- **身份验证**: 需要承载令牌 (Bearer Token)。
+- **成功响应**:
+ ```json
+ {
+ "success": true,
+ "user": {
+ "username": "admin",
+ "isAdmin": true,
+ "permissions": { ... }
+ }
+ }
+ ```
+
+---
+
+### 更改密码
+
+允许通过身份验证的用户更改其密码。
+
+- **端点**: `/api/auth/change-password`
+- **方法**: `POST`
+- **身份验证**: 需要承载令牌 (Bearer Token)。
+- **正文**:
+ - `currentPassword` (string, 必填): 用户的当前密码。
+ - `newPassword` (string, 必填): 新的密码 (至少6个字符)。
+- **请求示例**:
+ ```json
+ {
+ "currentPassword": "oldpassword",
+ "newPassword": "newpassword123"
+ }
+ ```
+- **成功响应**:
+ ```json
+ {
+ "success": true,
+ "message": "密码更新成功"
+ }
+ ```
diff --git a/docs/zh/api-reference/config.mdx b/docs/zh/api-reference/config.mdx
new file mode 100644
index 0000000..39d7eb1
--- /dev/null
+++ b/docs/zh/api-reference/config.mdx
@@ -0,0 +1,111 @@
+---
+title: "配置"
+description: "管理和检索系统级配置。"
+---
+
+import { Card, Cards } from 'mintlify';
+
+更新主系统配置。
+获取所有系统设置,包括服务器和群组。
+获取前端的公共运行时配置。
+获取公共配置以检查是否跳过身份验证。
+
+---
+
+### 更新系统配置
+
+更新系统配置的各个部分。您只需提供要更新部分的键。
+
+- **端点**: `/api/system-config`
+- **方法**: `PUT`
+- **正文**: 一个 JSON 对象,包含以下一个或多个顶级键:`routing`、`install`、`smartRouting`、`mcpRouter`。
+
+#### 路由配置 (`routing`)
+
+- `enableGlobalRoute` (boolean): 启用或禁用全局 `/api/mcp` 路由。
+- `enableGroupNameRoute` (boolean): 启用或禁用基于群组的路由 (例如 `/api/mcp/group/:groupName`)。
+- `enableBearerAuth` (boolean): 为 MCP 路由启用承载令牌身份验证。
+- `bearerAuthKey` (string): 用于承载身份验证的密钥。
+- `skipAuth` (boolean): 如果为 true,则跳过所有身份验证,使实例公开。
+
+#### 安装配置 (`install`)
+
+- `pythonIndexUrl` (string): 用于安装的 Python 包索引 (PyPI) 的基础 URL。
+- `npmRegistry` (string): 用于安装的 npm 注册表 URL。
+- `baseUrl` (string): 此 MCPHub 实例的公共基础 URL。
+
+#### 智能路由配置 (`smartRouting`)
+
+- `enabled` (boolean): 启用或禁用智能路由功能。
+- `dbUrl` (string): 用于存储嵌入的数据库连接 URL。
+- `openaiApiBaseUrl` (string): 用于生成嵌入的 OpenAI 兼容 API 的基础 URL。
+- `openaiApiKey` (string): 嵌入服务的 API 密钥。
+- `openaiApiEmbeddingModel` (string): 要使用的嵌入模型的名称。
+
+#### MCP 路由器配置 (`mcpRouter`)
+
+- `apiKey` (string): MCP 路由器服务的 API 密钥。
+- `referer` (string): 用于 MCP 路由器请求的 referer 头。
+- `title` (string): 在 MCP 路由器上显示的此实例的标题。
+- `baseUrl` (string): MCP 路由器 API 的基础 URL。
+
+- **请求示例**:
+ ```json
+ {
+ "routing": {
+ "skipAuth": true
+ },
+ "smartRouting": {
+ "enabled": true,
+ "dbUrl": "postgresql://user:pass@host:port/db"
+ }
+ }
+ ```
+
+---
+
+### 获取所有设置
+
+检索实例的整个设置对象,包括所有服务器配置、群组和系统设置。这是 `mcp_settings.json` 文件的完整转储。
+
+- **端点**: `/api/settings`
+- **方法**: `GET`
+
+---
+
+### 获取运行时配置
+
+检索前端应用程序所需的基本运行时配置。此端点不需要身份验证。
+
+- **端点**: `/config`
+- **方法**: `GET`
+- **成功响应**:
+ ```json
+ {
+ "success": true,
+ "data": {
+ "basePath": "",
+ "version": "1.0.0",
+ "name": "MCPHub"
+ }
+ }
+ ```
+
+---
+
+### 获取公共配置
+
+检索公共配置,主要用于检查是否跳过身份验证。这允许前端在用户登录前相应地调整其行为。此端点不需要身份验证。
+
+- **端点**: `/public-config`
+- **方法**: `GET`
+- **成功响应**:
+ ```json
+ {
+ "success": true,
+ "data": {
+ "skipAuth": false,
+ "permissions": {}
+ }
+ }
+ ```
diff --git a/docs/zh/api-reference/endpoint/create.mdx b/docs/zh/api-reference/endpoint/create.mdx
deleted file mode 100644
index 1998710..0000000
--- a/docs/zh/api-reference/endpoint/create.mdx
+++ /dev/null
@@ -1,572 +0,0 @@
----
-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) 文档。
diff --git a/docs/zh/api-reference/endpoint/delete.mdx b/docs/zh/api-reference/endpoint/delete.mdx
deleted file mode 100644
index 51aa07a..0000000
--- a/docs/zh/api-reference/endpoint/delete.mdx
+++ /dev/null
@@ -1,303 +0,0 @@
----
-title: 删除资源 API
-description: 删除各种资源的 API 端点,包括服务器、组和配置等
----
-
-# 删除资源 API
-
-本文档描述了用于删除各种资源的 API 端点。
-
-## 删除 MCP 服务器
-
-删除指定的 MCP 服务器配置。
-
-### 端点
-
-```http
-DELETE /api/servers/{id}
-```
-
-### 参数
-
-| 参数名 | 类型 | 位置 | 必需 | 描述 |
-| ------ | ------ | ---- | ---- | ------------------ |
-| id | string | path | 是 | 服务器的唯一标识符 |
-
-### 请求示例
-
-```bash
-curl -X DELETE \
- 'https://api.mcphub.io/api/servers/mcp-server-123' \
- -H 'Authorization: Bearer YOUR_API_TOKEN' \
- -H 'Content-Type: application/json'
-```
-
-### 响应
-
-#### 成功响应 (204 No Content)
-
-```json
-{
- "success": true,
- "message": "服务器已成功删除",
- "data": {
- "id": "mcp-server-123",
- "deletedAt": "2024-01-15T10:30:00Z"
- }
-}
-```
-
-#### 错误响应
-
-**404 Not Found**
-
-```json
-{
- "error": {
- "code": "SERVER_NOT_FOUND",
- "message": "指定的服务器不存在",
- "details": {
- "serverId": "mcp-server-123"
- }
- }
-}
-```
-
-**409 Conflict**
-
-```json
-{
- "error": {
- "code": "SERVER_IN_USE",
- "message": "服务器正在使用中,无法删除",
- "details": {
- "activeConnections": 5,
- "associatedGroups": ["group-1", "group-2"]
- }
- }
-}
-```
-
-## 删除服务器组
-
-删除指定的服务器组。
-
-### 端点
-
-```http
-DELETE /api/groups/{id}
-```
-
-### 参数
-
-| 参数名 | 类型 | 位置 | 必需 | 描述 |
-| ------ | ------- | ----- | ---- | ------------------------------ |
-| id | string | path | 是 | 组的唯一标识符 |
-| force | boolean | query | 否 | 是否强制删除(包含服务器的组) |
-
-### 请求示例
-
-```bash
-curl -X DELETE \
- 'https://api.mcphub.io/api/groups/production-group?force=true' \
- -H 'Authorization: Bearer YOUR_API_TOKEN' \
- -H 'Content-Type: application/json'
-```
-
-### 响应
-
-#### 成功响应 (204 No Content)
-
-```json
-{
- "success": true,
- "message": "服务器组已成功删除",
- "data": {
- "id": "production-group",
- "deletedServers": ["server-1", "server-2"],
- "deletedAt": "2024-01-15T10:30:00Z"
- }
-}
-```
-
-## 删除配置项
-
-删除指定的配置项。
-
-### 端点
-
-```http
-DELETE /api/config/{key}
-```
-
-### 参数
-
-| 参数名 | 类型 | 位置 | 必需 | 描述 |
-| ------ | ------ | ---- | ---- | -------- |
-| key | string | path | 是 | 配置键名 |
-
-### 请求示例
-
-```bash
-curl -X DELETE \
- 'https://api.mcphub.io/api/config/custom-setting' \
- -H 'Authorization: Bearer YOUR_API_TOKEN'
-```
-
-### 响应
-
-#### 成功响应 (200 OK)
-
-```json
-{
- "success": true,
- "message": "配置项已删除",
- "data": {
- "key": "custom-setting",
- "previousValue": "old-value",
- "deletedAt": "2024-01-15T10:30:00Z"
- }
-}
-```
-
-## 批量删除
-
-### 批量删除服务器
-
-删除多个 MCP 服务器。
-
-#### 端点
-
-```http
-DELETE /api/servers/batch
-```
-
-#### 请求体
-
-```json
-{
- "serverIds": ["server-1", "server-2", "server-3"],
- "force": false
-}
-```
-
-#### 响应
-
-```json
-{
- "success": true,
- "message": "批量删除完成",
- "data": {
- "deleted": ["server-1", "server-3"],
- "failed": [
- {
- "id": "server-2",
- "reason": "服务器正在使用中"
- }
- ],
- "summary": {
- "total": 3,
- "deleted": 2,
- "failed": 1
- }
- }
-}
-```
-
-## 软删除 vs 硬删除
-
-### 软删除
-
-默认情况下,MCPHub 使用软删除机制:
-
-- 资源被标记为已删除但保留在数据库中
-- 可以通过恢复 API 恢复删除的资源
-- 删除的资源在列表 API 中默认不显示
-
-### 硬删除
-
-使用 `permanent=true` 参数执行硬删除:
-
-```bash
-curl -X DELETE \
- 'https://api.mcphub.io/api/servers/mcp-server-123?permanent=true' \
- -H 'Authorization: Bearer YOUR_API_TOKEN'
-```
-
-硬删除操作不可逆,请谨慎使用。
-
-## 权限要求
-
-| 操作 | 所需权限 |
-| ---------- | ------------------------ |
-| 删除服务器 | `servers:delete` |
-| 删除组 | `groups:delete` |
-| 删除配置 | `config:delete` |
-| 硬删除 | `admin:permanent_delete` |
-
-## 错误代码
-
-| 错误代码 | HTTP 状态码 | 描述 |
-| -------------------------- | ----------- | ---------------- |
-| `RESOURCE_NOT_FOUND` | 404 | 资源不存在 |
-| `RESOURCE_IN_USE` | 409 | 资源正在使用中 |
-| `INSUFFICIENT_PERMISSIONS` | 403 | 权限不足 |
-| `VALIDATION_ERROR` | 400 | 请求参数验证失败 |
-| `INTERNAL_ERROR` | 500 | 服务器内部错误 |
-
-## 最佳实践
-
-### 1. 删除前检查
-
-在删除资源前,建议先检查资源的使用情况:
-
-```bash
-# 检查服务器使用情况
-curl -X GET \
- 'https://api.mcphub.io/api/servers/mcp-server-123/usage' \
- -H 'Authorization: Bearer YOUR_API_TOKEN'
-```
-
-### 2. 备份重要数据
-
-对于重要资源,建议在删除前进行备份:
-
-```bash
-# 导出服务器配置
-curl -X GET \
- 'https://api.mcphub.io/api/servers/mcp-server-123/export' \
- -H 'Authorization: Bearer YOUR_API_TOKEN' \
- > server-backup.json
-```
-
-### 3. 使用事务删除
-
-对于复杂的删除操作,使用事务确保数据一致性:
-
-```json
-{
- "transaction": true,
- "operations": [
- {
- "type": "delete",
- "resource": "server",
- "id": "server-1"
- },
- {
- "type": "delete",
- "resource": "group",
- "id": "group-1"
- }
- ]
-}
-```
-
-## 恢复删除的资源
-
-软删除的资源可以通过恢复 API 恢复:
-
-```bash
-curl -X POST \
- 'https://api.mcphub.io/api/servers/mcp-server-123/restore' \
- -H 'Authorization: Bearer YOUR_API_TOKEN'
-```
diff --git a/docs/zh/api-reference/endpoint/get.mdx b/docs/zh/api-reference/endpoint/get.mdx
deleted file mode 100644
index da0e527..0000000
--- a/docs/zh/api-reference/endpoint/get.mdx
+++ /dev/null
@@ -1,607 +0,0 @@
----
-title: '获取资源'
-description: '查询和检索 MCP 服务器、用户和组信息'
----
-
-## 获取服务器列表
-
-### 端点
-
-```http
-GET /api/servers
-```
-
-### 查询参数
-
-| 参数 | 类型 | 描述 | 示例 |
-| ---------------- | ------- | ------------------------------- | ---------------------------- |
-| `page` | integer | 页码(从 1 开始) | `?page=2` |
-| `limit` | integer | 每页记录数(默认 20,最大 100) | `?limit=50` |
-| `sort` | string | 排序字段 | `?sort=name` |
-| `order` | string | 排序顺序(asc/desc) | `?order=desc` |
-| `status` | string | 过滤服务器状态 | `?status=running` |
-| `search` | string | 搜索服务器名称或描述 | `?search=python` |
-| `group` | string | 过滤所属组 | `?group=dev-team` |
-| `tags` | string | 过滤标签(逗号分隔) | `?tags=python,production` |
-| `enabled` | boolean | 过滤启用状态 | `?enabled=true` |
-| `created_after` | string | 创建时间起始 | `?created_after=2024-01-01` |
-| `created_before` | string | 创建时间结束 | `?created_before=2024-01-31` |
-
-### 响应
-
-```json
-{
- "success": true,
- "data": {
- "items": [
- {
- "id": "server-abc123",
- "name": "文件系统服务器",
- "status": "running",
- "command": "npx",
- "args": ["-y", "@modelcontextprotocol/server-filesystem", "/data"],
- "env": {
- "NODE_ENV": "production"
- },
- "cwd": "/app",
- "pid": 12345,
- "uptime": 3600000,
- "enabled": true,
- "description": "提供文件系统访问的 MCP 服务器",
- "tags": ["filesystem", "production"],
- "health": {
- "status": "healthy",
- "lastCheck": "2024-01-01T12:00:00Z",
- "responseTime": "45ms"
- },
- "resources": {
- "memory": {
- "used": "128MB",
- "limit": "512MB",
- "percentage": 25
- },
- "cpu": {
- "used": "15%",
- "limit": "50%"
- }
- },
- "stats": {
- "totalRequests": 1523,
- "errorCount": 2,
- "avgResponseTime": "234ms"
- },
- "lastRestart": "2024-01-01T08:00:00Z",
- "createdAt": "2024-01-01T00:00:00Z",
- "updatedAt": "2024-01-01T12:00:00Z"
- }
- ],
- "pagination": {
- "page": 1,
- "limit": 20,
- "total": 45,
- "pages": 3,
- "hasNext": true,
- "hasPrev": false
- },
- "filters": {
- "status": "running",
- "totalFiltered": 12
- }
- }
-}
-```
-
-### 示例
-
-```bash
-# 获取运行中的服务器,按名称排序
-curl -X GET "http://localhost:3000/api/servers?status=running&sort=name&order=asc" \
- -H "Authorization: Bearer $TOKEN"
-
-# 搜索包含 "python" 的服务器
-curl -X GET "http://localhost:3000/api/servers?search=python&limit=10" \
- -H "Authorization: Bearer $TOKEN"
-
-# 获取开发团队的服务器
-curl -X GET "http://localhost:3000/api/servers?group=dev-team" \
- -H "Authorization: Bearer $TOKEN"
-```
-
-## 获取服务器详情
-
-### 端点
-
-```http
-GET /api/servers/{serverId}
-```
-
-### 路径参数
-
-- `serverId` (string): 服务器唯一标识符
-
-### 查询参数
-
-| 参数 | 类型 | 描述 |
-| --------------- | ------ | ----------------------------------------------- |
-| `include` | string | 包含额外信息(逗号分隔):`logs,metrics,events` |
-| `metrics_range` | string | 指标时间范围:`1h`, `24h`, `7d` |
-
-### 响应
-
-```json
-{
- "success": true,
- "data": {
- "id": "server-abc123",
- "name": "文件系统服务器",
- "status": "running",
- "command": "npx",
- "args": ["-y", "@modelcontextprotocol/server-filesystem", "/data"],
- "env": {
- "NODE_ENV": "production",
- "DEBUG": "mcp:*"
- },
- "cwd": "/app",
- "pid": 12345,
- "uptime": 3600000,
- "enabled": true,
- "description": "提供文件系统访问的 MCP 服务器",
- "tags": ["filesystem", "production"],
- "healthCheck": {
- "enabled": true,
- "interval": 30000,
- "timeout": 5000,
- "retries": 3,
- "endpoint": "/health",
- "status": "healthy",
- "lastCheck": "2024-01-01T12:00:00Z",
- "responseTime": "45ms",
- "consecutiveFailures": 0
- },
- "resources": {
- "memory": {
- "used": "128MB",
- "limit": "512MB",
- "warning": "400MB",
- "percentage": 25
- },
- "cpu": {
- "used": "15%",
- "limit": "50%",
- "cores": 4
- },
- "network": {
- "bytesIn": "1.2GB",
- "bytesOut": "890MB"
- }
- },
- "stats": {
- "totalRequests": 1523,
- "successfulRequests": 1521,
- "errorCount": 2,
- "avgResponseTime": "234ms",
- "p95ResponseTime": "450ms",
- "requestsPerMinute": 25,
- "lastError": {
- "timestamp": "2024-01-01T11:30:00Z",
- "message": "Temporary connection timeout",
- "count": 1
- }
- },
- "capabilities": [
- {
- "type": "tool",
- "name": "read_file",
- "description": "读取文件内容",
- "schema": {
- "type": "object",
- "properties": {
- "path": { "type": "string" }
- }
- }
- },
- {
- "type": "tool",
- "name": "write_file",
- "description": "写入文件内容",
- "schema": {
- "type": "object",
- "properties": {
- "path": { "type": "string" },
- "content": { "type": "string" }
- }
- }
- }
- ],
- "groups": [
- {
- "id": "dev-team",
- "name": "开发团队",
- "permissions": ["read", "write", "execute"]
- }
- ],
- "events": [
- {
- "id": "event-123",
- "type": "started",
- "timestamp": "2024-01-01T08:00:00Z",
- "message": "服务器启动成功",
- "metadata": {
- "pid": 12345,
- "startupTime": "2.3s"
- }
- }
- ],
- "lastRestart": "2024-01-01T08:00:00Z",
- "createdAt": "2024-01-01T00:00:00Z",
- "updatedAt": "2024-01-01T12:00:00Z",
- "createdBy": "admin"
- }
-}
-```
-
-### 示例
-
-```bash
-# 获取服务器基本信息
-curl -X GET "http://localhost:3000/api/servers/server-abc123" \
- -H "Authorization: Bearer $TOKEN"
-
-# 获取服务器详情包含日志和指标
-curl -X GET "http://localhost:3000/api/servers/server-abc123?include=logs,metrics&metrics_range=24h" \
- -H "Authorization: Bearer $TOKEN"
-```
-
-## 获取服务器状态
-
-### 端点
-
-```http
-GET /api/servers/{serverId}/status
-```
-
-### 响应
-
-```json
-{
- "success": true,
- "data": {
- "serverId": "server-abc123",
- "status": "running",
- "health": "healthy",
- "pid": 12345,
- "uptime": 3600000,
- "startedAt": "2024-01-01T08:00:00Z",
- "lastHealthCheck": "2024-01-01T12:00:00Z",
- "resources": {
- "memory": {
- "rss": 134217728,
- "heapTotal": 67108864,
- "heapUsed": 45088768,
- "external": 8388608
- },
- "cpu": {
- "user": 1000000,
- "system": 500000,
- "percentage": 15.5
- }
- },
- "connections": {
- "active": 5,
- "total": 127
- },
- "performance": {
- "requestsPerSecond": 12.5,
- "avgResponseTime": "234ms",
- "errorRate": "0.1%"
- }
- }
-}
-```
-
-## 获取服务器日志
-
-### 端点
-
-```http
-GET /api/servers/{serverId}/logs
-```
-
-### 查询参数
-
-| 参数 | 类型 | 描述 |
-| -------- | ------- | ---------------------------------------------- |
-| `level` | string | 日志级别过滤:`error`, `warn`, `info`, `debug` |
-| `limit` | integer | 返回日志条数(默认 100,最大 1000) |
-| `since` | string | 开始时间(ISO 8601 格式) |
-| `until` | string | 结束时间(ISO 8601 格式) |
-| `follow` | boolean | 实时跟踪日志流 |
-| `search` | string | 搜索日志内容 |
-
-### 响应
-
-```json
-{
- "success": true,
- "data": {
- "logs": [
- {
- "id": "log-123",
- "timestamp": "2024-01-01T12:00:00Z",
- "level": "info",
- "message": "处理请求: read_file",
- "source": "mcp-server",
- "metadata": {
- "requestId": "req-456",
- "userId": "user-789",
- "duration": "45ms"
- }
- },
- {
- "id": "log-124",
- "timestamp": "2024-01-01T12:00:05Z",
- "level": "error",
- "message": "文件不存在: /nonexistent/file.txt",
- "source": "filesystem",
- "metadata": {
- "requestId": "req-457",
- "path": "/nonexistent/file.txt",
- "error": "ENOENT"
- }
- }
- ],
- "pagination": {
- "limit": 100,
- "total": 1523,
- "hasMore": true,
- "nextCursor": "cursor-abc123"
- }
- }
-}
-```
-
-### 实时日志流
-
-```bash
-# 实时跟踪日志
-curl -X GET "http://localhost:3000/api/servers/server-abc123/logs?follow=true" \
- -H "Authorization: Bearer $TOKEN" \
- -H "Accept: text/event-stream"
-```
-
-## 获取服务器指标
-
-### 端点
-
-```http
-GET /api/servers/{serverId}/metrics
-```
-
-### 查询参数
-
-| 参数 | 类型 | 描述 |
-| ------------- | ------ | ------------------------------------------- |
-| `timeRange` | string | 时间范围:`1h`, `24h`, `7d`, `30d` |
-| `granularity` | string | 数据粒度:`1m`, `5m`, `1h`, `1d` |
-| `metrics` | string | 指定指标(逗号分隔):`cpu,memory,requests` |
-
-### 响应
-
-```json
-{
- "success": true,
- "data": {
- "timeRange": "1h",
- "granularity": "5m",
- "metrics": {
- "cpu": {
- "data": [
- { "timestamp": "2024-01-01T11:00:00Z", "value": 12.5 },
- { "timestamp": "2024-01-01T11:05:00Z", "value": 15.2 }
- ],
- "summary": {
- "avg": 13.8,
- "min": 8.1,
- "max": 18.5,
- "current": 15.2
- }
- },
- "memory": {
- "data": [
- { "timestamp": "2024-01-01T11:00:00Z", "value": 125 },
- { "timestamp": "2024-01-01T11:05:00Z", "value": 128 }
- ],
- "summary": {
- "avg": 126.5,
- "min": 120,
- "max": 135,
- "current": 128
- }
- },
- "requests": {
- "data": [
- { "timestamp": "2024-01-01T11:00:00Z", "value": 45 },
- { "timestamp": "2024-01-01T11:05:00Z", "value": 52 }
- ],
- "summary": {
- "total": 2847,
- "avg": 48.5,
- "peak": 67
- }
- },
- "responseTime": {
- "data": [
- { "timestamp": "2024-01-01T11:00:00Z", "avg": 230, "p95": 450 },
- { "timestamp": "2024-01-01T11:05:00Z", "avg": 245, "p95": 480 }
- ],
- "summary": {
- "avgResponseTime": "237ms",
- "p95ResponseTime": "465ms"
- }
- }
- }
- }
-}
-```
-
-## 获取用户列表
-
-### 端点
-
-```http
-GET /api/users
-```
-
-### 查询参数
-
-| 参数 | 类型 | 描述 |
-| ------------------ | ------- | ---------------- |
-| `role` | string | 过滤用户角色 |
-| `group` | string | 过滤所属组 |
-| `enabled` | boolean | 过滤启用状态 |
-| `search` | string | 搜索用户名或邮箱 |
-| `last_login_after` | string | 最后登录时间起始 |
-
-### 响应
-
-```json
-{
- "success": true,
- "data": {
- "items": [
- {
- "id": "user-abc123",
- "username": "zhangsan",
- "email": "zhangsan@example.com",
- "role": "user",
- "enabled": true,
- "profile": {
- "firstName": "张",
- "lastName": "三",
- "fullName": "张三",
- "department": "开发部",
- "title": "软件工程师"
- },
- "groups": [
- {
- "id": "dev-team",
- "name": "开发团队",
- "role": "member"
- }
- ],
- "stats": {
- "totalSessions": 45,
- "totalRequests": 1234,
- "lastRequestAt": "2024-01-01T11:30:00Z"
- },
- "lastLoginAt": "2024-01-01T08:00:00Z",
- "createdAt": "2023-12-01T00:00:00Z"
- }
- ],
- "pagination": {
- "page": 1,
- "limit": 20,
- "total": 89,
- "pages": 5
- }
- }
-}
-```
-
-## 获取组列表
-
-### 端点
-
-```http
-GET /api/groups
-```
-
-### 响应
-
-```json
-{
- "success": true,
- "data": {
- "items": [
- {
- "id": "group-abc123",
- "name": "dev-team",
- "displayName": "开发团队",
- "description": "前端和后端开发人员",
- "memberCount": 12,
- "serverCount": 8,
- "parentGroup": null,
- "children": [],
- "permissions": {
- "servers": ["read", "write", "execute"],
- "tools": ["read", "execute"]
- },
- "quotas": {
- "requests": {
- "used": 750,
- "limit": 1000
- }
- },
- "createdAt": "2023-12-01T00:00:00Z"
- }
- ]
- }
-}
-```
-
-## 搜索
-
-### 全局搜索
-
-```http
-GET /api/search
-```
-
-### 查询参数
-
-| 参数 | 类型 | 描述 |
-| ------- | ------- | ---------------------------------------------- |
-| `q` | string | 搜索关键词 |
-| `type` | string | 资源类型:`servers`, `users`, `groups`, `logs` |
-| `limit` | integer | 每种类型的最大结果数 |
-
-### 响应
-
-```json
-{
- "success": true,
- "data": {
- "query": "python",
- "results": {
- "servers": [
- {
- "id": "server-1",
- "name": "Python MCP Server",
- "type": "server",
- "relevance": 0.95
- }
- ],
- "users": [],
- "groups": [
- {
- "id": "python-devs",
- "name": "Python 开发者",
- "type": "group",
- "relevance": 0.8
- }
- ],
- "logs": [
- {
- "id": "log-123",
- "message": "Starting Python server...",
- "type": "log",
- "relevance": 0.7
- }
- ]
- },
- "total": 3
- }
-}
-```
-
-有关更多信息,请参阅 [创建资源](/zh/api-reference/endpoint/create)、[删除资源](/zh/api-reference/endpoint/delete) 和 [WebHooks](/zh/api-reference/endpoint/webhook) 文档。
diff --git a/docs/zh/api-reference/endpoint/webhook.mdx b/docs/zh/api-reference/endpoint/webhook.mdx
deleted file mode 100644
index a38b4c9..0000000
--- a/docs/zh/api-reference/endpoint/webhook.mdx
+++ /dev/null
@@ -1,615 +0,0 @@
----
-title: WebHooks API
-description: 配置和管理 WebHook 事件通知的完整指南
----
-
-# WebHooks API
-
-WebHooks 允许 MCPHub 在特定事件发生时向您的应用程序发送实时通知。
-
-## 概述
-
-MCPHub WebHooks 系统支持以下功能:
-
-- 实时事件通知
-- 自定义过滤器
-- 重试机制
-- 签名验证
-- 批量事件处理
-
-## 支持的事件类型
-
-| 事件类型 | 描述 |
-| ----------------------- | -------------- |
-| `server.created` | MCP 服务器创建 |
-| `server.updated` | MCP 服务器更新 |
-| `server.deleted` | MCP 服务器删除 |
-| `server.status_changed` | 服务器状态变更 |
-| `group.created` | 服务器组创建 |
-| `group.updated` | 服务器组更新 |
-| `group.deleted` | 服务器组删除 |
-| `user.login` | 用户登录 |
-| `user.logout` | 用户登出 |
-| `config.changed` | 配置变更 |
-| `system.error` | 系统错误 |
-
-## 创建 WebHook
-
-### 端点
-
-```http
-POST /api/webhooks
-```
-
-### 请求体
-
-```json
-{
- "url": "https://your-app.com/webhook",
- "events": ["server.created", "server.status_changed"],
- "secret": "your-webhook-secret",
- "active": true,
- "config": {
- "contentType": "application/json",
- "insecureSsl": false,
- "retryCount": 3,
- "timeout": 30
- },
- "filters": {
- "serverGroups": ["production", "staging"],
- "serverTypes": ["ai-assistant", "data-processor"]
- }
-}
-```
-
-### 响应
-
-```json
-{
- "success": true,
- "data": {
- "id": "webhook-123",
- "url": "https://your-app.com/webhook",
- "events": ["server.created", "server.status_changed"],
- "active": true,
- "secret": "your-webhook-secret",
- "config": {
- "contentType": "application/json",
- "insecureSsl": false,
- "retryCount": 3,
- "timeout": 30
- },
- "filters": {
- "serverGroups": ["production", "staging"],
- "serverTypes": ["ai-assistant", "data-processor"]
- },
- "createdAt": "2024-01-15T10:30:00Z",
- "updatedAt": "2024-01-15T10:30:00Z"
- }
-}
-```
-
-## 获取 WebHook 列表
-
-### 端点
-
-```http
-GET /api/webhooks
-```
-
-### 查询参数
-
-| 参数名 | 类型 | 描述 |
-| ------ | ------- | -------------------- |
-| page | integer | 页码(默认:1) |
-| limit | integer | 每页数量(默认:20) |
-| active | boolean | 过滤活跃状态 |
-| event | string | 过滤事件类型 |
-
-### 请求示例
-
-```bash
-curl -X GET \
- 'https://api.mcphub.io/api/webhooks?active=true&limit=10' \
- -H 'Authorization: Bearer YOUR_API_TOKEN'
-```
-
-### 响应
-
-```json
-{
- "success": true,
- "data": {
- "webhooks": [
- {
- "id": "webhook-123",
- "url": "https://your-app.com/webhook",
- "events": ["server.created", "server.status_changed"],
- "active": true,
- "lastDelivery": "2024-01-15T09:30:00Z",
- "deliveryCount": 145,
- "failureCount": 2,
- "createdAt": "2024-01-10T10:30:00Z"
- }
- ],
- "pagination": {
- "page": 1,
- "limit": 10,
- "total": 25,
- "pages": 3
- }
- }
-}
-```
-
-## 获取单个 WebHook
-
-### 端点
-
-```http
-GET /api/webhooks/{id}
-```
-
-### 响应
-
-```json
-{
- "success": true,
- "data": {
- "id": "webhook-123",
- "url": "https://your-app.com/webhook",
- "events": ["server.created", "server.status_changed"],
- "active": true,
- "secret": "your-webhook-secret",
- "config": {
- "contentType": "application/json",
- "insecureSsl": false,
- "retryCount": 3,
- "timeout": 30
- },
- "filters": {
- "serverGroups": ["production", "staging"],
- "serverTypes": ["ai-assistant", "data-processor"]
- },
- "stats": {
- "totalDeliveries": 145,
- "successfulDeliveries": 143,
- "failedDeliveries": 2,
- "lastDelivery": "2024-01-15T09:30:00Z",
- "lastSuccess": "2024-01-15T09:30:00Z",
- "lastFailure": "2024-01-14T15:20:00Z"
- },
- "createdAt": "2024-01-10T10:30:00Z",
- "updatedAt": "2024-01-15T10:30:00Z"
- }
-}
-```
-
-## 更新 WebHook
-
-### 端点
-
-```http
-PUT /api/webhooks/{id}
-```
-
-### 请求体
-
-```json
-{
- "url": "https://your-app.com/new-webhook",
- "events": ["server.created", "server.updated", "server.deleted"],
- "active": true,
- "config": {
- "retryCount": 5,
- "timeout": 45
- }
-}
-```
-
-## 删除 WebHook
-
-### 端点
-
-```http
-DELETE /api/webhooks/{id}
-```
-
-### 响应
-
-```json
-{
- "success": true,
- "message": "WebHook 已成功删除"
-}
-```
-
-## WebHook 事件格式
-
-### 基本结构
-
-所有 WebHook 事件都遵循以下基本结构:
-
-```json
-{
- "id": "event-123",
- "type": "server.created",
- "timestamp": "2024-01-15T10:30:00Z",
- "version": "1.0",
- "data": {
- // 事件特定数据
- },
- "metadata": {
- "source": "mcphub",
- "environment": "production",
- "triggeredBy": "user-456"
- }
-}
-```
-
-### 服务器事件示例
-
-#### server.created
-
-```json
-{
- "id": "event-123",
- "type": "server.created",
- "timestamp": "2024-01-15T10:30:00Z",
- "version": "1.0",
- "data": {
- "server": {
- "id": "mcp-server-123",
- "name": "AI Assistant Server",
- "type": "ai-assistant",
- "endpoint": "https://ai-assistant.example.com",
- "group": "production",
- "status": "active",
- "capabilities": ["chat", "completion"],
- "createdAt": "2024-01-15T10:30:00Z"
- }
- },
- "metadata": {
- "source": "mcphub",
- "environment": "production",
- "triggeredBy": "user-456"
- }
-}
-```
-
-#### server.status_changed
-
-```json
-{
- "id": "event-124",
- "type": "server.status_changed",
- "timestamp": "2024-01-15T11:30:00Z",
- "version": "1.0",
- "data": {
- "server": {
- "id": "mcp-server-123",
- "name": "AI Assistant Server",
- "previousStatus": "active",
- "currentStatus": "inactive",
- "reason": "Health check failed",
- "lastHealthCheck": "2024-01-15T11:25:00Z"
- }
- },
- "metadata": {
- "source": "mcphub",
- "environment": "production",
- "triggeredBy": "system"
- }
-}
-```
-
-## 签名验证
-
-MCPHub 使用 HMAC-SHA256 签名来验证 WebHook 的真实性。
-
-### 签名生成
-
-签名在 `X-MCPHub-Signature-256` 头中发送:
-
-```
-X-MCPHub-Signature-256: sha256=5757107ea39eca8e35d1e8...
-```
-
-### 验证示例
-
-#### Node.js
-
-```javascript
-const crypto = require('crypto');
-
-function verifySignature(payload, signature, secret) {
- const expectedSignature = crypto
- .createHmac('sha256', secret)
- .update(payload, 'utf8')
- .digest('hex');
-
- const actualSignature = signature.replace('sha256=', '');
-
- return crypto.timingSafeEqual(
- Buffer.from(expectedSignature, 'hex'),
- Buffer.from(actualSignature, 'hex'),
- );
-}
-
-// Express.js 中间件示例
-app.use('/webhook', express.raw({ type: 'application/json' }), (req, res) => {
- const signature = req.headers['x-mcphub-signature-256'];
- const payload = req.body;
-
- if (!verifySignature(payload, signature, process.env.WEBHOOK_SECRET)) {
- return res.status(401).send('Unauthorized');
- }
-
- // 处理 WebHook 事件
- const event = JSON.parse(payload);
- console.log('收到事件:', event.type);
-
- res.status(200).send('OK');
-});
-```
-
-#### Python
-
-```python
-import hmac
-import hashlib
-
-def verify_signature(payload, signature, secret):
- expected_signature = hmac.new(
- secret.encode('utf-8'),
- payload,
- hashlib.sha256
- ).hexdigest()
-
- actual_signature = signature.replace('sha256=', '')
-
- return hmac.compare_digest(expected_signature, actual_signature)
-
-# Flask 示例
-from flask import Flask, request, jsonify
-import json
-
-app = Flask(__name__)
-
-@app.route('/webhook', methods=['POST'])
-def webhook():
- signature = request.headers.get('X-MCPHub-Signature-256')
- payload = request.get_data()
-
- if not verify_signature(payload, signature, 'your-webhook-secret'):
- return jsonify({'error': 'Unauthorized'}), 401
-
- event = json.loads(payload)
- print(f'收到事件: {event["type"]}')
-
- return jsonify({'status': 'success'}), 200
-```
-
-## 重试机制
-
-MCPHub 对失败的 WebHook 交付实施指数退避重试:
-
-- **重试次数**: 可配置(默认 3 次)
-- **重试间隔**: 2^n 秒(n 为重试次数)
-- **最大间隔**: 300 秒(5 分钟)
-- **超时设置**: 可配置(默认 30 秒)
-
-### 重试时间表
-
-| 尝试次数 | 延迟时间 |
-| -------- | -------- |
-| 1 | 立即 |
-| 2 | 2 秒 |
-| 3 | 4 秒 |
-| 4 | 8 秒 |
-| 5 | 16 秒 |
-
-## 获取交付历史
-
-### 端点
-
-```http
-GET /api/webhooks/{id}/deliveries
-```
-
-### 查询参数
-
-| 参数名 | 类型 | 描述 |
-| ---------- | ------- | ------------------------------------ |
-| page | integer | 页码 |
-| limit | integer | 每页数量 |
-| status | string | 过滤状态(success, failed, pending) |
-| event_type | string | 过滤事件类型 |
-
-### 响应
-
-```json
-{
- "success": true,
- "data": {
- "deliveries": [
- {
- "id": "delivery-123",
- "eventId": "event-123",
- "eventType": "server.created",
- "url": "https://your-app.com/webhook",
- "status": "success",
- "responseCode": 200,
- "responseTime": 145,
- "attempts": 1,
- "deliveredAt": "2024-01-15T10:30:15Z",
- "nextRetry": null
- },
- {
- "id": "delivery-124",
- "eventId": "event-124",
- "eventType": "server.status_changed",
- "url": "https://your-app.com/webhook",
- "status": "failed",
- "responseCode": 500,
- "responseTime": 30000,
- "attempts": 3,
- "error": "Connection timeout",
- "deliveredAt": null,
- "nextRetry": "2024-01-15T11:45:00Z"
- }
- ],
- "pagination": {
- "page": 1,
- "limit": 20,
- "total": 145,
- "pages": 8
- }
- }
-}
-```
-
-## 测试 WebHook
-
-### 端点
-
-```http
-POST /api/webhooks/{id}/test
-```
-
-### 请求体
-
-```json
-{
- "eventType": "server.created",
- "customData": {
- "test": true,
- "message": "这是一个测试事件"
- }
-}
-```
-
-### 响应
-
-```json
-{
- "success": true,
- "data": {
- "deliveryId": "delivery-test-123",
- "status": "delivered",
- "responseCode": 200,
- "responseTime": 124,
- "sentAt": "2024-01-15T10:30:00Z"
- }
-}
-```
-
-## 最佳实践
-
-### 1. 幂等性处理
-
-确保您的 WebHook 端点能够处理重复事件:
-
-```javascript
-const processedEvents = new Set();
-
-app.post('/webhook', (req, res) => {
- const event = req.body;
-
- // 检查事件是否已处理
- if (processedEvents.has(event.id)) {
- return res.status(200).send('Already processed');
- }
-
- // 处理事件
- processEvent(event);
-
- // 记录已处理的事件
- processedEvents.add(event.id);
-
- res.status(200).send('OK');
-});
-```
-
-### 2. 异步处理
-
-对于复杂的处理逻辑,使用异步处理避免阻塞:
-
-```javascript
-app.post('/webhook', async (req, res) => {
- const event = req.body;
-
- // 立即响应
- res.status(200).send('OK');
-
- // 异步处理事件
- setImmediate(() => {
- processEventAsync(event);
- });
-});
-```
-
-### 3. 错误处理
-
-实施适当的错误处理和日志记录:
-
-```javascript
-app.post('/webhook', (req, res) => {
- try {
- const event = req.body;
- processEvent(event);
- res.status(200).send('OK');
- } catch (error) {
- console.error('WebHook 处理错误:', error);
- res.status(500).send('Internal Server Error');
- }
-});
-```
-
-### 4. 监控和告警
-
-监控 WebHook 的交付状态:
-
-```bash
-# 检查失败的交付
-curl -X GET \
- 'https://api.mcphub.io/api/webhooks/webhook-123/deliveries?status=failed' \
- -H 'Authorization: Bearer YOUR_API_TOKEN'
-```
-
-## 故障排除
-
-### 常见问题
-
-1. **签名验证失败**
-
- - 检查密钥是否正确
- - 确保使用原始请求体进行验证
- - 验证 HMAC 计算实现
-
-2. **超时错误**
-
- - 增加 WebHook 超时设置
- - 优化端点响应时间
- - 使用异步处理
-
-3. **重复事件**
- - 实施幂等性检查
- - 使用事件 ID 去重
- - 记录处理状态
-
-### 调试工具
-
-使用 MCPHub 提供的调试工具:
-
-```bash
-# 查看最近的交付日志
-curl -X GET \
- 'https://api.mcphub.io/api/webhooks/webhook-123/deliveries?limit=5' \
- -H 'Authorization: Bearer YOUR_API_TOKEN'
-
-# 重新发送失败的事件
-curl -X POST \
- 'https://api.mcphub.io/api/webhooks/delivery-124/redeliver' \
- -H 'Authorization: Bearer YOUR_API_TOKEN'
-```
diff --git a/docs/zh/api-reference/groups.mdx b/docs/zh/api-reference/groups.mdx
new file mode 100644
index 0000000..f123491
--- /dev/null
+++ b/docs/zh/api-reference/groups.mdx
@@ -0,0 +1,212 @@
+---
+title: "群组"
+description: "管理服务器群组以组织和路由请求。"
+---
+
+import { Card, Cards } from 'mintlify';
+
+获取所有群组的列表。
+创建一个新群组。
+获取特定群组的详细信息。
+更新现有群组。
+删除一个群组。
+将服务器添加到群组。
+从群组中删除服务器。
+批量更新群组中的服务器。
+获取群组中详细的服务器配置。
+更新群组中服务器的工具选择。
+
+---
+
+### 获取所有群组
+
+检索所有服务器群组的列表。
+
+- **端点**: `/api/groups`
+- **方法**: `GET`
+- **成功响应**:
+ ```json
+ {
+ "success": true,
+ "data": [
+ {
+ "id": "group-1",
+ "name": "我的群组",
+ "description": "服务器的集合。",
+ "servers": ["server1", "server2"],
+ "owner": "admin"
+ }
+ ]
+ }
+ ```
+
+---
+
+### 创建一个新群组
+
+创建一个新的服务器群组。
+
+- **端点**: `/api/groups`
+- **方法**: `POST`
+- **正文**:
+ - `name` (string, 必填): 群组的名称。
+ - `description` (string, 可选): 群组的描述。
+ - `servers` (array of strings, 可选): 要包含在群组中的服务器名称列表。
+- **请求示例**:
+ ```json
+ {
+ "name": "我的新群组",
+ "description": "新群组的描述",
+ "servers": ["server1", "server2"]
+ }
+ ```
+
+---
+
+### 获取一个群组
+
+通过 ID 或名称检索特定群组的详细信息。
+
+- **端点**: `/api/groups/:id`
+- **方法**: `GET`
+- **参数**:
+ - `:id` (string, 必填): 群组的 ID 或名称。
+
+---
+
+### 更新一个群组
+
+更新现有群组的名称、描述或服务器列表。
+
+- **端点**: `/api/groups/:id`
+- **方法**: `PUT`
+- **参数**:
+ - `:id` (string, 必填): 要更新的群组的 ID 或名称。
+- **正文**:
+ - `name` (string, 可选): 群组的新名称。
+ - `description` (string, 可选): 群组的新描述。
+ - `servers` (array, 可选): 群组的新服务器列表。格式请参阅 [批量更新群组服务器](#batch-update-group-servers)。
+- **请求示例**:
+ ```json
+ {
+ "name": "更新后的群组名称",
+ "description": "更新后的描述"
+ }
+ ```
+
+---
+
+### 删除一个群组
+
+通过 ID 或名称删除一个群组。
+
+- **端点**: `/api/groups/:id`
+- **方法**: `DELETE`
+- **参数**:
+ - `:id` (string, 必填): 要删除的群组的 ID 或名称。
+
+---
+
+### 将服务器添加到群组
+
+将单个服务器添加到群组。
+
+- **端点**: `/api/groups/:id/servers`
+- **方法**: `POST`
+- **参数**:
+ - `:id` (string, 必填): 群组的 ID 或名称。
+- **正文**:
+ - `serverName` (string, 必填): 要添加的服务器的名称。
+- **请求示例**:
+ ```json
+ {
+ "serverName": "my-server"
+ }
+ ```
+
+---
+
+### 从群组中删除服务器
+
+从群组中删除单个服务器。
+
+- **端点**: `/api/groups/:id/servers/:serverName`
+- **方法**: `DELETE`
+- **参数**:
+ - `:id` (string, 必填): 群组的 ID 或名称。
+ - `:serverName` (string, 必填): 要删除的服务器的名称。
+
+---
+
+### 批量更新群组服务器
+
+用新的列表替换群组中的所有服务器。该列表可以是简单的字符串或详细的配置对象。
+
+- **端点**: `/api/groups/:id/servers/batch`
+- **方法**: `PUT`
+- **参数**:
+ - `:id` (string, 必填): 群组的 ID 或名称。
+- **正文**:
+ - `servers` (array, 必填): 服务器名称(字符串)或服务器配置对象的数组。
+- **请求示例 (简单)**:
+ ```json
+ {
+ "servers": ["server1", "server2"]
+ }
+ ```
+- **请求示例 (详细)**:
+ ```json
+ {
+ "servers": [
+ { "name": "server1", "tools": "all" },
+ { "name": "server2", "tools": ["toolA", "toolB"] }
+ ]
+ }
+ ```
+
+---
+
+### 获取群组服务器配置
+
+检索群组内所有服务器的详细配置,包括启用了哪些工具。
+
+- **端点**: `/api/groups/:id/server-configs`
+- **方法**: `GET`
+- **参数**:
+ - `:id` (string, 必填): 群组的 ID 或名称。
+- **成功响应**:
+ ```json
+ {
+ "success": true,
+ "data": [
+ {
+ "name": "server1",
+ "tools": "all"
+ },
+ {
+ "name": "server2",
+ "tools": ["toolA", "toolB"]
+ }
+ ]
+ }
+ ```
+
+---
+
+### 更新群组服务器工具
+
+更新群组内特定服务器的工具选择。
+
+- **端点**: `/api/groups/:id/server-configs/:serverName/tools`
+- **方法**: `PUT`
+- **参数**:
+ - `:id` (string, 必填): 群组的 ID 或名称。
+ - `:serverName` (string, 必填): 要更新的服务器的名称。
+- **正文**:
+ - `tools` (string or array of strings, 必填): 字符串 `"all"` 表示启用所有工具,或一个工具名称数组以指定启用哪些工具。
+- **请求示例**:
+ ```json
+ {
+ "tools": ["toolA", "toolC"]
+ }
+ ```
diff --git a/docs/zh/api-reference/introduction.mdx b/docs/zh/api-reference/introduction.mdx
index a488d22..6f27376 100644
--- a/docs/zh/api-reference/introduction.mdx
+++ b/docs/zh/api-reference/introduction.mdx
@@ -1,717 +1,13 @@
---
-title: 'API 参考'
-description: 'MCPHub REST API 完整参考文档'
+title: "介绍"
+description: "欢迎来到 MCPHub API 文档。"
---
-## 概述
+MCPHub API 提供了一整套端点来管理您的 MCP 服务器、群组、用户等。该 API 分为两个主要类别:
-MCPHub 提供全面的 REST API,用于管理 MCP 服务器、用户、组和监控。所有 API 端点都需要身份验证,并支持 JSON 格式的请求和响应。
+- **MCP 端点**: 这些是与您的 MCP 服务器交互的主要端点。它们提供了一个统一的界面,用于向您的服务器发送请求并实时接收响应。
+- **管理 API**: 这些端点用于管理 MCPHub 实例本身。这包括管理服务器、群组、用户和系统设置。
-## 基础信息
+所有 API 端点都在 `/api` 路径下可用。例如,获取所有服务器的端点是 `/api/servers`。
-### 基础 URL
-
-```
-https://your-mcphub-instance.com/api
-```
-
-### 身份验证
-
-所有 API 请求都需要身份验证。支持以下方法:
-
-#### JWT 令牌认证
-
-```bash
-curl -X GET https://api.mcphub.com/servers \
- -H "Authorization: Bearer YOUR_JWT_TOKEN"
-```
-
-#### API 密钥认证
-
-```bash
-curl -X GET https://api.mcphub.com/servers \
- -H "X-API-Key: YOUR_API_KEY"
-```
-
-### 请求格式
-
-- **Content-Type**: `application/json`
-- **Accept**: `application/json`
-- **User-Agent**: 建议包含您的应用程序名称和版本
-
-### 响应格式
-
-所有响应都采用 JSON 格式:
-
-```json
-{
- "success": true,
- "data": {
- // 响应数据
- },
- "message": "操作成功",
- "timestamp": "2024-01-01T12:00:00Z"
-}
-```
-
-错误响应格式:
-
-```json
-{
- "success": false,
- "error": {
- "code": "VALIDATION_ERROR",
- "message": "请求数据无效",
- "details": {
- "field": "name",
- "reason": "名称不能为空"
- }
- },
- "timestamp": "2024-01-01T12:00:00Z"
-}
-```
-
-## 状态码
-
-| 状态码 | 说明 |
-| ------ | -------------------- |
-| 200 | 请求成功 |
-| 201 | 资源创建成功 |
-| 204 | 请求成功,无返回内容 |
-| 400 | 请求参数错误 |
-| 401 | 未授权访问 |
-| 403 | 权限不足 |
-| 404 | 资源不存在 |
-| 409 | 资源冲突 |
-| 422 | 请求数据验证失败 |
-| 429 | 请求频率超限 |
-| 500 | 服务器内部错误 |
-
-## 分页
-
-支持分页的端点使用以下参数:
-
-- `page`: 页码(从 1 开始)
-- `limit`: 每页记录数(默认 20,最大 100)
-- `sort`: 排序字段
-- `order`: 排序顺序(`asc` 或 `desc`)
-
-```bash
-curl -X GET "https://api.mcphub.com/servers?page=2&limit=50&sort=name&order=asc" \
- -H "Authorization: Bearer $TOKEN"
-```
-
-分页响应格式:
-
-```json
-{
- "success": true,
- "data": {
- "items": [...],
- "pagination": {
- "page": 2,
- "limit": 50,
- "total": 234,
- "pages": 5,
- "hasNext": true,
- "hasPrev": true
- }
- }
-}
-```
-
-## 过滤和搜索
-
-支持过滤的端点可以使用以下参数:
-
-- `search`: 全文搜索
-- `filter[field]`: 字段过滤
-- `status`: 状态过滤
-- `created_after`: 创建时间筛选
-- `created_before`: 创建时间筛选
-
-```bash
-curl -X GET "https://api.mcphub.com/servers?search=python&filter[status]=running&created_after=2024-01-01" \
- -H "Authorization: Bearer $TOKEN"
-```
-
-## API 端点
-
-### 服务器管理
-
-#### 获取服务器列表
-
-```http
-GET /api/servers
-```
-
-参数:
-
-- `status` (可选): 过滤服务器状态 (`running`, `stopped`, `error`)
-- `group` (可选): 过滤所属组
-- `search` (可选): 搜索服务器名称或描述
-
-示例响应:
-
-```json
-{
- "success": true,
- "data": {
- "items": [
- {
- "id": "server-1",
- "name": "文件系统服务器",
- "status": "running",
- "command": "npx",
- "args": ["-y", "@modelcontextprotocol/server-filesystem", "/data"],
- "env": {
- "NODE_ENV": "production"
- },
- "cwd": "/app",
- "pid": 12345,
- "uptime": 3600000,
- "lastRestart": "2024-01-01T12:00:00Z",
- "createdAt": "2024-01-01T10:00:00Z",
- "updatedAt": "2024-01-01T12:00:00Z"
- }
- ]
- }
-}
-```
-
-#### 创建服务器
-
-```http
-POST /api/servers
-```
-
-请求体:
-
-```json
-{
- "name": "新服务器",
- "command": "python",
- "args": ["-m", "mcp_server"],
- "env": {
- "API_KEY": "your-api-key",
- "LOG_LEVEL": "INFO"
- },
- "cwd": "/app/python-server",
- "enabled": true,
- "description": "Python MCP 服务器",
- "tags": ["python", "production"]
-}
-```
-
-#### 获取服务器详情
-
-```http
-GET /api/servers/{serverId}
-```
-
-#### 更新服务器
-
-```http
-PUT /api/servers/{serverId}
-```
-
-#### 删除服务器
-
-```http
-DELETE /api/servers/{serverId}
-```
-
-#### 启动服务器
-
-```http
-POST /api/servers/{serverId}/start
-```
-
-#### 停止服务器
-
-```http
-POST /api/servers/{serverId}/stop
-```
-
-请求体(可选):
-
-```json
-{
- "graceful": true,
- "timeout": 30000
-}
-```
-
-#### 重启服务器
-
-```http
-POST /api/servers/{serverId}/restart
-```
-
-#### 获取服务器日志
-
-```http
-GET /api/servers/{serverId}/logs
-```
-
-参数:
-
-- `level` (可选): 日志级别过滤
-- `limit` (可选): 返回日志条数
-- `since` (可选): 开始时间
-- `follow` (可选): 实时跟踪日志
-
-### 用户管理
-
-#### 获取用户列表
-
-```http
-GET /api/users
-```
-
-#### 创建用户
-
-```http
-POST /api/users
-```
-
-请求体:
-
-```json
-{
- "username": "newuser",
- "email": "user@example.com",
- "password": "securepassword",
- "role": "user",
- "groups": ["dev-team"],
- "profile": {
- "firstName": "张",
- "lastName": "三",
- "department": "开发部"
- }
-}
-```
-
-#### 获取用户详情
-
-```http
-GET /api/users/{userId}
-```
-
-#### 更新用户
-
-```http
-PUT /api/users/{userId}
-```
-
-#### 删除用户
-
-```http
-DELETE /api/users/{userId}
-```
-
-### 组管理
-
-#### 获取组列表
-
-```http
-GET /api/groups
-```
-
-#### 创建组
-
-```http
-POST /api/groups
-```
-
-请求体:
-
-```json
-{
- "name": "dev-team",
- "displayName": "开发团队",
- "description": "前端和后端开发人员",
- "parentGroup": null,
- "permissions": {
- "servers": ["read", "write", "execute"],
- "tools": ["read", "execute"]
- },
- "settings": {
- "autoAssign": false,
- "maxMembers": 50,
- "requireApproval": true
- }
-}
-```
-
-#### 添加用户到组
-
-```http
-POST /api/groups/{groupId}/members
-```
-
-请求体:
-
-```json
-{
- "userId": "user123",
- "role": "member"
-}
-```
-
-#### 从组中移除用户
-
-```http
-DELETE /api/groups/{groupId}/members/{userId}
-```
-
-#### 分配服务器到组
-
-```http
-POST /api/groups/{groupId}/servers
-```
-
-请求体:
-
-```json
-{
- "serverId": "server-1",
- "permissions": ["read", "write", "execute"]
-}
-```
-
-### 身份验证
-
-#### 登录
-
-```http
-POST /api/auth/login
-```
-
-请求体:
-
-```json
-{
- "username": "admin",
- "password": "password",
- "mfaCode": "123456"
-}
-```
-
-响应:
-
-```json
-{
- "success": true,
- "data": {
- "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "refreshToken": "refresh_token_here",
- "expiresIn": 86400,
- "user": {
- "id": "user123",
- "username": "admin",
- "role": "admin",
- "permissions": ["*"]
- }
- }
-}
-```
-
-#### 刷新令牌
-
-```http
-POST /api/auth/refresh
-```
-
-#### 注销
-
-```http
-POST /api/auth/logout
-```
-
-#### 验证令牌
-
-```http
-GET /api/auth/verify
-```
-
-### 监控
-
-#### 获取系统状态
-
-```http
-GET /api/monitoring/status
-```
-
-响应:
-
-```json
-{
- "success": true,
- "data": {
- "system": {
- "uptime": 86400,
- "version": "2.1.0",
- "nodeVersion": "18.17.0"
- },
- "servers": {
- "total": 12,
- "running": 10,
- "stopped": 1,
- "error": 1
- },
- "performance": {
- "requestsPerMinute": 85,
- "avgResponseTime": "245ms",
- "errorRate": "0.3%"
- }
- }
-}
-```
-
-#### 获取性能指标
-
-```http
-GET /api/monitoring/metrics
-```
-
-参数:
-
-- `timeRange`: 时间范围 (`1h`, `24h`, `7d`, `30d`)
-- `granularity`: 数据粒度 (`1m`, `5m`, `1h`, `1d`)
-- `metrics`: 指定指标名称(逗号分隔)
-
-#### 获取日志
-
-```http
-GET /api/monitoring/logs
-```
-
-参数:
-
-- `level`: 日志级别
-- `source`: 日志源
-- `limit`: 返回条数
-- `since`: 开始时间
-- `until`: 结束时间
-
-### 配置管理
-
-#### 获取系统配置
-
-```http
-GET /api/config
-```
-
-#### 更新系统配置
-
-```http
-PUT /api/config
-```
-
-请求体:
-
-```json
-{
- "smtp": {
- "host": "smtp.example.com",
- "port": 587,
- "secure": false,
- "auth": {
- "user": "noreply@example.com",
- "pass": "password"
- }
- },
- "notifications": {
- "email": true,
- "slack": true,
- "webhook": "https://hooks.example.com/notifications"
- }
-}
-```
-
-## WebSocket API
-
-MCPHub 支持 WebSocket 连接以获取实时更新。
-
-### 连接
-
-```javascript
-const ws = new WebSocket('wss://api.mcphub.com/ws');
-ws.onopen = function () {
- // 发送认证消息
- ws.send(
- JSON.stringify({
- type: 'auth',
- token: 'YOUR_JWT_TOKEN',
- }),
- );
-};
-```
-
-### 订阅事件
-
-```javascript
-// 订阅服务器状态更新
-ws.send(
- JSON.stringify({
- type: 'subscribe',
- channel: 'server-status',
- filters: {
- serverId: 'server-1',
- },
- }),
-);
-
-// 订阅系统监控
-ws.send(
- JSON.stringify({
- type: 'subscribe',
- channel: 'monitoring',
- metrics: ['cpu', 'memory', 'requests'],
- }),
-);
-```
-
-### 事件类型
-
-- `server-status`: 服务器状态变化
-- `server-logs`: 实时日志流
-- `monitoring`: 系统监控指标
-- `alerts`: 系统警报
-- `user-activity`: 用户活动事件
-
-## 错误处理
-
-### 错误代码
-
-| 错误代码 | 描述 |
-| ----------------------- | -------------- |
-| `INVALID_REQUEST` | 请求格式无效 |
-| `AUTHENTICATION_FAILED` | 身份验证失败 |
-| `AUTHORIZATION_FAILED` | 权限不足 |
-| `RESOURCE_NOT_FOUND` | 资源不存在 |
-| `RESOURCE_CONFLICT` | 资源冲突 |
-| `VALIDATION_ERROR` | 数据验证失败 |
-| `RATE_LIMIT_EXCEEDED` | 请求频率超限 |
-| `SERVER_ERROR` | 服务器内部错误 |
-
-### 错误处理示例
-
-```javascript
-async function handleApiRequest() {
- try {
- const response = await fetch('/api/servers', {
- headers: {
- Authorization: `Bearer ${token}`,
- 'Content-Type': 'application/json',
- },
- });
-
- const data = await response.json();
-
- if (!data.success) {
- switch (data.error.code) {
- case 'AUTHENTICATION_FAILED':
- // 重新登录
- redirectToLogin();
- break;
- case 'RATE_LIMIT_EXCEEDED':
- // 延迟重试
- setTimeout(() => handleApiRequest(), 5000);
- break;
- default:
- // 显示错误消息
- showError(data.error.message);
- }
- return;
- }
-
- // 处理成功响应
- handleSuccessResponse(data.data);
- } catch (error) {
- // 处理网络错误
- console.error('网络请求失败:', error);
- }
-}
-```
-
-## 速率限制
-
-API 实施速率限制以防止滥用:
-
-- **默认限制**: 每分钟 100 请求
-- **认证用户**: 每分钟 1000 请求
-- **管理员**: 每分钟 5000 请求
-
-响应头包含速率限制信息:
-
-```
-X-RateLimit-Limit: 1000
-X-RateLimit-Remaining: 999
-X-RateLimit-Reset: 1609459200
-```
-
-## SDK 和客户端库
-
-### JavaScript/Node.js
-
-```bash
-npm install @mcphub/sdk
-```
-
-```javascript
-import { MCPHubClient } from '@mcphub/sdk';
-
-const client = new MCPHubClient({
- baseURL: 'https://api.mcphub.com',
- token: 'YOUR_JWT_TOKEN',
-});
-
-// 获取服务器列表
-const servers = await client.servers.list();
-
-// 创建服务器
-const newServer = await client.servers.create({
- name: '新服务器',
- command: 'python',
- args: ['-m', 'mcp_server'],
-});
-```
-
-### Python
-
-```bash
-pip install mcphub-sdk
-```
-
-```python
-from mcphub_sdk import MCPHubClient
-
-client = MCPHubClient(
- base_url='https://api.mcphub.com',
- token='YOUR_JWT_TOKEN'
-)
-
-# 获取服务器列表
-servers = client.servers.list()
-
-# 创建服务器
-new_server = client.servers.create(
- name='新服务器',
- command='python',
- args=['-m', 'mcp_server']
-)
-```
-
-## 最佳实践
-
-1. **使用 HTTPS**: 始终通过 HTTPS 访问 API
-2. **安全存储令牌**: 不要在客户端代码中硬编码令牌
-3. **处理错误**: 实施适当的错误处理和重试逻辑
-4. **遵守速率限制**: 监控速率限制并实施退避策略
-5. **使用分页**: 对于大数据集使用分页参数
-6. **缓存响应**: 适当缓存 API 响应以减少请求
-7. **版本控制**: 使用 API 版本号以确保兼容性
-
-有关更多信息,请参阅我们的 [SDK 文档](https://docs.mcphub.com/sdk) 和 [示例代码](https://github.com/mcphub/examples)。
+大多数管理 API 端点都需要身份验证。有关更多详细信息,请参阅[身份验证](/api-reference/auth)部分。
\ No newline at end of file
diff --git a/docs/zh/api-reference/logs.mdx b/docs/zh/api-reference/logs.mdx
new file mode 100644
index 0000000..e46b695
--- /dev/null
+++ b/docs/zh/api-reference/logs.mdx
@@ -0,0 +1,81 @@
+---
+title: "日志"
+description: "访问和管理服务器日志。"
+---
+
+import { Card, Cards } from 'mintlify';
+
+
+ 获取所有日志。
+
+
+
+ 清除所有日志。
+
+
+
+ 实时流式传输日志。
+
+
+---
+
+### 获取所有日志
+
+检索所有存储的日志。
+
+- **端点**: `/api/logs`
+- **方法**: `GET`
+- **成功响应**:
+ ```json
+ {
+ "success": true,
+ "data": [
+ {
+ "timestamp": "2023-10-27T10:00:00.000Z",
+ "level": "info",
+ "message": "服务器成功启动。",
+ "service": "system"
+ }
+ ]
+ }
+ ```
+
+---
+
+### 清除日志
+
+删除所有存储的日志。
+
+- **端点**: `/api/logs`
+- **方法**: `DELETE`
+- **成功响应**:
+ ```json
+ {
+ "success": true,
+ "message": "日志清除成功"
+ }
+ ```
+
+---
+
+### 流式传输日志
+
+使用服务器发送事件 (SSE) 实时流式传输日志。连接将保持打开状态,新的日志条目将在发生时发送。
+
+- **端点**: `/api/logs/stream`
+- **方法**: `GET`
+- **响应格式**: 该流发送带有包含 JSON 对象的 `data` 字段的事件。第一个事件的 `type` 为 `initial`,包含所有历史日志。后续事件的 `type` 为 `log`,包含单个新日志条目。
+
+- **事件示例**:
+ ```
+ data: {"type":"log","log":{"timestamp":"2023-10-27T10:00:05.000Z","level":"debug","message":"正在处理 /api/some-endpoint 的请求","service":"mcp-server"}}
+ ```
diff --git a/docs/zh/api-reference/mcp-http.mdx b/docs/zh/api-reference/mcp-http.mdx
new file mode 100644
index 0000000..c7c39d1
--- /dev/null
+++ b/docs/zh/api-reference/mcp-http.mdx
@@ -0,0 +1,33 @@
+---
+title: "MCP HTTP 端点"
+description: "使用统一的 HTTP 端点连接到您的 MCP 服务器。"
+---
+
+MCPHub 为您的所有 MCP 服务器提供统一的可流式 HTTP 接口。这使您可以向任何配置的 MCP 服务器发送请求并实时接收响应。
+
+### 统一端点
+
+此端点提供对所有已启用的 MCP 服务器的访问。
+
+- **端点**: `http://localhost:3000/mcp`
+- **方法**: `POST`
+
+### 特定群组的端点
+
+要定向访问特定的服务器群组,请使用基于群组的 HTTP 端点。
+
+- **端点**: `http://localhost:3000/mcp/{group}`
+- **方法**: `POST`
+- **参数**:
+ - `{group}`: 群组的 ID 或名称。
+
+### 特定服务器的端点
+
+要直接访问单个服务器,请使用特定于服务器的 HTTP 端点。
+
+- **端点**: `http://localhost:3000/mcp/{server}`
+- **方法**: `POST`
+- **参数**:
+ - `{server}`: 服务器的名称。
+
+> **注意**: 如果服务器名称和群组名称相同,则群组将优先。
diff --git a/docs/zh/api-reference/mcp-sse.mdx b/docs/zh/api-reference/mcp-sse.mdx
new file mode 100644
index 0000000..827a790
--- /dev/null
+++ b/docs/zh/api-reference/mcp-sse.mdx
@@ -0,0 +1,25 @@
+---
+title: "MCP SSE 端点 (已弃用)"
+description: "使用 SSE 端点连接到您的 MCP 服务器。"
+---
+
+SSE 端点已弃用,并将在未来版本中删除。请改用 [MCP HTTP 端点](/api-reference/mcp-http)。
+
+### 统一端点
+
+- **端点**: `http://localhost:3000/sse`
+- **方法**: `GET`
+
+### 特定群组的端点
+
+- **端点**: `http://localhost:3000/sse/{group}`
+- **方法**: `GET`
+- **参数**:
+ - `{group}`: 群组的 ID 或名称。
+
+### 特定服务器的端点
+
+- **端点**: `http://localhost:3000/sse/{server}`
+- **方法**: `GET`
+- **参数**:
+ - `{server}`: 服务器的名称。
diff --git a/docs/zh/api-reference/servers.mdx b/docs/zh/api-reference/servers.mdx
new file mode 100644
index 0000000..4e383b5
--- /dev/null
+++ b/docs/zh/api-reference/servers.mdx
@@ -0,0 +1,209 @@
+---
+title: "服务器"
+description: "管理您的 MCP 服务器。"
+---
+
+import { Card, Cards } from 'mintlify';
+
+
+ 获取所有 MCP 服务器的列表。
+
+
+
+ 创建一个新的 MCP 服务器。
+
+
+
+ 更新现有的 MCP 服务器。
+
+
+
+ 删除一个 MCP 服务器。
+
+
+
+ 切换服务器的启用状态。
+
+
+
+ 切换工具的启用状态。
+
+
+
+ 更新工具的描述。
+
+
+---
+
+### 获取所有服务器
+
+检索所有已配置的 MCP 服务器的列表,包括其状态和可用工具。
+
+- **端点**: `/api/servers`
+- **方法**: `GET`
+- **响应**:
+ ```json
+ {
+ "success": true,
+ "data": [
+ {
+ "name": "example-server",
+ "status": "connected",
+ "tools": [
+ {
+ "name": "tool1",
+ "description": "工具1的描述"
+ }
+ ],
+ "config": {
+ "type": "stdio",
+ "command": "node",
+ "args": ["server.js"]
+ }
+ }
+ ]
+ }
+ ```
+
+---
+
+### 创建一个新服务器
+
+将一个新的 MCP 服务器添加到配置中。
+
+- **端点**: `/api/servers`
+- **方法**: `POST`
+- **正文**:
+ ```json
+ {
+ "name": "my-new-server",
+ "config": {
+ "type": "stdio",
+ "command": "python",
+ "args": ["-u", "my_script.py"],
+ "owner": "admin"
+ }
+ }
+ ```
+ - `name` (string, 必填): 服务器的唯一名称。
+ - `config` (object, 必填): 服务器配置对象。
+ - `type` (string): `stdio`、`sse`、`streamable-http` 或 `openapi`。
+ - `command` (string): `stdio` 类型要执行的命令。
+ - `args` (array of strings): 命令的参数。
+ - `url` (string): `sse`、`streamable-http` 或 `openapi` 类型的 URL。
+ - `openapi` (object): OpenAPI 配置。
+ - `url` (string): OpenAPI 模式的 URL。
+ - `schema` (object): OpenAPI 模式对象本身。
+ - `headers` (object): `sse`、`streamable-http` 和 `openapi` 类型请求要发送的标头。
+ - `keepAliveInterval` (number): `sse` 类型的保持活动间隔(毫秒)。默认为 60000。
+ - `owner` (string): 服务器的所有者。默认为当前用户或“admin”。
+
+---
+
+### 更新一个服务器
+
+更新现有 MCP 服务器的配置。
+
+- **端点**: `/api/servers/:name`
+- **方法**: `PUT`
+- **参数**:
+ - `:name` (string, 必填): 要更新的服务器的名称。
+- **正文**:
+ ```json
+ {
+ "config": {
+ "type": "stdio",
+ "command": "node",
+ "args": ["new_server.js"]
+ }
+ }
+ ```
+ - `config` (object, 必填): 更新后的服务器配置对象。详情请参阅“创建一个新服务器”。
+
+---
+
+### 删除一个服务器
+
+从配置中删除一个 MCP 服务器。
+
+- **端点**: `/api/servers/:name`
+- **方法**: `DELETE`
+- **参数**:
+ - `:name` (string, 必填): 要删除的服务器的名称。
+
+---
+
+### 切换一个服务器
+
+启用或禁用一个 MCP 服务器。
+
+- **端点**: `/api/servers/:name/toggle`
+- **方法**: `POST`
+- **参数**:
+ - `:name` (string, 必填): 要切换的服务器的名称。
+- **正文**:
+ ```json
+ {
+ "enabled": true
+ }
+ ```
+ - `enabled` (boolean, 必填): `true` 启用服务器,`false` 禁用服务器。
+
+---
+
+### 切换一个工具
+
+启用或禁用服务器上的特定工具。
+
+- **端点**: `/api/servers/:serverName/tools/:toolName/toggle`
+- **方法**: `POST`
+- **参数**:
+ - `:serverName` (string, 必填): 服务器的名称。
+ - `:toolName` (string, 必填): 工具的名称。
+- **正文**:
+ ```json
+ {
+ "enabled": true
+ }
+ ```
+ - `enabled` (boolean, 必填): `true` 启用工具,`false` 禁用工具。
+
+---
+
+### 更新工具描述
+
+更新特定工具的描述。
+
+- **端点**: `/api/servers/:serverName/tools/:toolName/description`
+- **方法**: `PUT`
+- **参数**:
+ - `:serverName` (string, 必填): 服务器的名称。
+ - `:toolName` (string, 必填): 工具的名称。
+- **正文**:
+ ```json
+ {
+ "description": "新的工具描述"
+ }
+ ```
+ - `description` (string, 必填): 工具的新描述。
diff --git a/docs/zh/api-reference/smart-routing.mdx b/docs/zh/api-reference/smart-routing.mdx
new file mode 100644
index 0000000..4f93d27
--- /dev/null
+++ b/docs/zh/api-reference/smart-routing.mdx
@@ -0,0 +1,29 @@
+---
+title: "智能路由"
+description: "使用向量语义搜索进行智能工具发现。"
+---
+
+智能路由是 MCPHub 的智能工具发现系统,它使用向量语义搜索来自动为任何给定任务找到最相关的工具。
+
+### HTTP 端点
+
+- **端点**: `http://localhost:3000/mcp/$smart`
+- **方法**: `POST`
+
+### SSE 端点 (已弃用)
+
+- **端点**: `http://localhost:3000/sse/$smart`
+- **方法**: `GET`
+
+### 工作原理
+
+1. **工具索引**: 所有 MCP 工具都会自动转换为向量嵌入并存储在带有 pgvector 的 PostgreSQL 中。
+2. **语义搜索**: 用户查询被转换为向量,并使用余弦相似度与工具嵌入进行匹配。
+3. **智能过滤**: 动态阈值可确保相关结果而无噪音。
+4. **精确执行**: 找到的工具可以通过适当的参数验证直接执行。
+
+### 设置要求
+
+- 带有 pgvector 扩展的 PostgreSQL
+- OpenAI API 密钥(或兼容的嵌入服务)
+- 在 MCPHub 设置中启用智能路由