Sfoglia il codice sorgente

feat(工具库): 添加MCP工具名称字段支持

- 在工具列表和详情页添加MCP工具名称字段显示
- 更新前后端接口以支持MCP工具名称字段的增删改查
- 修改生产环境API地址为正式域名
- 更新CORS配置允许生产环境域名访问
max_liu 2 settimane fa
parent
commit
e260b62736

+ 5 - 3
server/routes/toolsLibrary.js

@@ -8,7 +8,7 @@ router.get("/", async (req, res) => {
     const offset = (page - 1) * pageSize;
 
     const sql = `
-      SELECT tools_id, tools_name, tools_function_name, tools_full_name,
+      SELECT tools_id, tools_name, tools_function_name, mcp_tools_name, tools_full_name,
              tools_desc, tools_version, access_task_id, status, call_type,
              api_provider, api_url_path, create_time, update_time
       FROM tools_library
@@ -40,7 +40,7 @@ router.get("/:id", async (req, res) => {
     const { id } = req.params;
 
     const sql = `
-      SELECT tools_id, tools_name, tools_function_name, tools_full_name,
+      SELECT tools_id, tools_name, tools_function_name, mcp_tools_name, tools_full_name,
              tools_desc, tools_version, access_task_id, status, call_type,
              api_provider, api_url_path, operate_path_data, params_definition,
              response_desc, create_time, update_time
@@ -67,6 +67,7 @@ router.put("/:id", async (req, res) => {
     const {
       tools_name,
       tools_function_name,
+      mcp_tools_name,
       tools_full_name,
       tools_desc,
       tools_version,
@@ -82,7 +83,7 @@ router.put("/:id", async (req, res) => {
 
     const sql = `
       UPDATE tools_library
-      SET tools_name = ?, tools_function_name = ?, tools_full_name = ?,
+      SET tools_name = ?, tools_function_name = ?, mcp_tools_name = ?, tools_full_name = ?,
           tools_desc = ?, tools_version = ?, access_task_id = ?,
           status = ?, call_type = ?, api_provider = ?, api_url_path = ?,
           operate_path_data = ?, params_definition = ?, response_desc = ?,
@@ -94,6 +95,7 @@ router.put("/:id", async (req, res) => {
     const params = [
       tools_name ?? null,
       tools_function_name ?? null,
+      mcp_tools_name ?? null,
       tools_full_name ?? null,
       tools_desc ?? null,
       tools_version ?? null,

+ 26 - 23
server/server.js

@@ -1,39 +1,42 @@
-const express = require('express');
-const cors = require('cors');
-const bodyParser = require('body-parser');
-const { createPool } = require('./config/database');
+const express = require("express");
+const cors = require("cors");
+const bodyParser = require("body-parser");
+const { createPool } = require("./config/database");
 
-const pendingToolsRoutes = require('./routes/pendingTools');
-const autoAccessTasksRoutes = require('./routes/autoAccessTasks');
-const toolsLibraryRoutes = require('./routes/toolsLibrary');
+const pendingToolsRoutes = require("./routes/pendingTools");
+const autoAccessTasksRoutes = require("./routes/autoAccessTasks");
+const toolsLibraryRoutes = require("./routes/toolsLibrary");
 
 const app = express();
 const PORT = process.env.PORT || 3001;
 
 // 配置CORS,允许前端域名访问
-app.use(cors({
-  origin: [
-    'http://47.93.61.163:3030',  // 生产环境前端地址
-    'http://localhost:3000',     // 本地开发环境
-    'http://localhost:3030'      // 本地测试环境
-  ],
-  methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
-  allowedHeaders: ['Content-Type', 'Authorization'],
-  credentials: true
-}));
+app.use(
+  cors({
+    origin: [
+      "https://tools.aiddit.com", // 生产环境前端地址
+      // 'http://47.93.61.163:3030',  // 生产环境前端地址
+      "http://localhost:3000", // 本地开发环境
+      "http://localhost:3030", // 本地测试环境
+    ],
+    methods: ["GET", "POST", "PUT", "DELETE", "OPTIONS"],
+    allowedHeaders: ["Content-Type", "Authorization"],
+    credentials: true,
+  })
+);
 app.use(bodyParser.json());
 app.use(bodyParser.urlencoded({ extended: true }));
 
 createPool();
 
-app.use('/api/pending-tools', pendingToolsRoutes);
-app.use('/api/auto-access-tasks', autoAccessTasksRoutes);
-app.use('/api/tools-library', toolsLibraryRoutes);
+app.use("/api/pending-tools", pendingToolsRoutes);
+app.use("/api/auto-access-tasks", autoAccessTasksRoutes);
+app.use("/api/tools-library", toolsLibraryRoutes);
 
-app.get('/api/health', (req, res) => {
-  res.json({ status: 'OK', message: 'Server is running' });
+app.get("/api/health", (req, res) => {
+  res.json({ status: "OK", message: "Server is running" });
 });
 
 app.listen(PORT, () => {
   console.log(`Server is running on port ${PORT}`);
-});
+});

+ 13 - 0
src/pages/ToolsLibraryDetail.js

@@ -225,6 +225,12 @@ const ToolsLibraryDetail = () => {
                 </Form.Item>
               </Col>
             </Row>
+            <Form.Item
+              label="MCP工具名称"
+              name="mcp_tools_name"
+            >
+              <Input />
+            </Form.Item>
             <Form.Item
               label="工具描述"
               name="tools_desc"
@@ -303,6 +309,13 @@ const ToolsLibraryDetail = () => {
               <Tag color="purple">{getApiProviderText(data.api_provider)}</Tag>
             </Descriptions.Item>
             <Descriptions.Item label="API路径">{data.api_url_path}</Descriptions.Item>
+
+            <Descriptions.Item
+              label="MCP工具名称"
+              span={2}
+            >
+              {data.mcp_tools_name || "无"}
+            </Descriptions.Item>
             <Descriptions.Item
               label="工具描述"
               span={2}

+ 12 - 0
src/pages/ToolsLibraryList.js

@@ -91,6 +91,18 @@ const ToolsLibraryList = () => {
         </Tooltip>
       ),
     },
+    {
+      title: "MCP工具名称",
+      dataIndex: "mcp_tools_name",
+      key: "mcp_tools_name",
+      width: 300,
+      ellipsis: true,
+      render: (text) => (
+        <Tooltip title={text}>
+          <span className="cursor-pointer">{text}</span>
+        </Tooltip>
+      ),
+    },
     {
       title: "工具描述",
       dataIndex: "tools_desc",

+ 10 - 9
src/services/api.js

@@ -1,9 +1,10 @@
-import axios from 'axios';
+import axios from "axios";
 
 // 根据环境自动切换API地址
-const API_BASE_URL = process.env.NODE_ENV === 'production' 
-  ? 'http://47.93.61.163:3001/api'  // 生产环境直接访问后端服务
-  : 'http://localhost:3001/api';  // 开发环境使用本地地址
+const API_BASE_URL =
+  process.env.NODE_ENV === "production"
+    ? "https://tools.aiddit.com/api" // 生产环境直接访问后端服务
+    : "http://localhost:3001/api"; // 开发环境使用本地地址
 
 const api = axios.create({
   baseURL: API_BASE_URL,
@@ -13,29 +14,29 @@ const api = axios.create({
 api.interceptors.response.use(
   (response) => response,
   (error) => {
-    console.error('API Error:', error);
+    console.error("API Error:", error);
     return Promise.reject(error);
   }
 );
 
 export const pendingToolsApi = {
-  getList: (params) => api.get('/pending-tools', { params }),
+  getList: (params) => api.get("/pending-tools", { params }),
   getDetail: (id) => api.get(`/pending-tools/${id}`),
   update: (id, data) => api.put(`/pending-tools/${id}`, data),
   delete: (id) => api.delete(`/pending-tools/${id}`),
 };
 
 export const autoAccessTasksApi = {
-  getList: (params) => api.get('/auto-access-tasks', { params }),
+  getList: (params) => api.get("/auto-access-tasks", { params }),
   getDetail: (id) => api.get(`/auto-access-tasks/${id}`),
   update: (id, data) => api.put(`/auto-access-tasks/${id}`, data),
 };
 
 export const toolsLibraryApi = {
-  getList: (params) => api.get('/tools-library', { params }),
+  getList: (params) => api.get("/tools-library", { params }),
   getDetail: (id) => api.get(`/tools-library/${id}`),
   update: (id, data) => api.put(`/tools-library/${id}`, data),
   publish: (id) => api.post(`/tools-library/${id}/publish`),
 };
 
-export default api;
+export default api;