apifox-workspace-mcp 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -0
- package/LICENSE +22 -0
- package/README.md +380 -0
- package/config/apifox-mcp.json.example +5 -0
- package/dist/__tests__/logger.test.d.ts +2 -0
- package/dist/__tests__/logger.test.d.ts.map +1 -0
- package/dist/__tests__/logger.test.js +42 -0
- package/dist/__tests__/logger.test.js.map +1 -0
- package/dist/__tests__/types.test.d.ts +2 -0
- package/dist/__tests__/types.test.d.ts.map +1 -0
- package/dist/__tests__/types.test.js +30 -0
- package/dist/__tests__/types.test.js.map +1 -0
- package/dist/__tests__/url-parser.test.d.ts +2 -0
- package/dist/__tests__/url-parser.test.d.ts.map +1 -0
- package/dist/__tests__/url-parser.test.js +27 -0
- package/dist/__tests__/url-parser.test.js.map +1 -0
- package/dist/core/client/apifox.d.ts +62 -0
- package/dist/core/client/apifox.d.ts.map +1 -0
- package/dist/core/client/apifox.js +87 -0
- package/dist/core/client/apifox.js.map +1 -0
- package/dist/core/client/index.d.ts +6 -0
- package/dist/core/client/index.d.ts.map +1 -0
- package/dist/core/client/index.js +6 -0
- package/dist/core/client/index.js.map +1 -0
- package/dist/core/client/mcp-bridge.d.ts +55 -0
- package/dist/core/client/mcp-bridge.d.ts.map +1 -0
- package/dist/core/client/mcp-bridge.js +345 -0
- package/dist/core/client/mcp-bridge.js.map +1 -0
- package/dist/core/config/index.d.ts +5 -0
- package/dist/core/config/index.d.ts.map +1 -0
- package/dist/core/config/index.js +5 -0
- package/dist/core/config/index.js.map +1 -0
- package/dist/core/config/manager.d.ts +132 -0
- package/dist/core/config/manager.d.ts.map +1 -0
- package/dist/core/config/manager.js +298 -0
- package/dist/core/config/manager.js.map +1 -0
- package/dist/core/context-store.d.ts +46 -0
- package/dist/core/context-store.d.ts.map +1 -0
- package/dist/core/context-store.js +82 -0
- package/dist/core/context-store.js.map +1 -0
- package/dist/core/generator/artifact.d.ts +20 -0
- package/dist/core/generator/artifact.d.ts.map +1 -0
- package/dist/core/generator/artifact.js +127 -0
- package/dist/core/generator/artifact.js.map +1 -0
- package/dist/core/generator/index.d.ts +6 -0
- package/dist/core/generator/index.d.ts.map +1 -0
- package/dist/core/generator/index.js +5 -0
- package/dist/core/generator/index.js.map +1 -0
- package/dist/core/index.d.ts +11 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/intent.d.ts +14 -0
- package/dist/core/intent.d.ts.map +1 -0
- package/dist/core/intent.js +80 -0
- package/dist/core/intent.js.map +1 -0
- package/dist/core/parser/index.d.ts +6 -0
- package/dist/core/parser/index.d.ts.map +1 -0
- package/dist/core/parser/index.js +5 -0
- package/dist/core/parser/index.js.map +1 -0
- package/dist/core/parser/url.d.ts +76 -0
- package/dist/core/parser/url.d.ts.map +1 -0
- package/dist/core/parser/url.js +232 -0
- package/dist/core/parser/url.js.map +1 -0
- package/dist/lib/env.d.ts +17 -0
- package/dist/lib/env.d.ts.map +1 -0
- package/dist/lib/env.js +98 -0
- package/dist/lib/env.js.map +1 -0
- package/dist/lib/errors.d.ts +39 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +59 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/index.d.ts +9 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +12 -0
- package/dist/lib/index.js.map +1 -0
- package/dist/lib/logger.d.ts +27 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +79 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/project-root.d.ts +8 -0
- package/dist/lib/project-root.d.ts.map +1 -0
- package/dist/lib/project-root.js +46 -0
- package/dist/lib/project-root.js.map +1 -0
- package/dist/server/handlers/assistant.d.ts +20 -0
- package/dist/server/handlers/assistant.d.ts.map +1 -0
- package/dist/server/handlers/assistant.js +71 -0
- package/dist/server/handlers/assistant.js.map +1 -0
- package/dist/server/handlers/generate-artifacts.d.ts +31 -0
- package/dist/server/handlers/generate-artifacts.d.ts.map +1 -0
- package/dist/server/handlers/generate-artifacts.js +75 -0
- package/dist/server/handlers/generate-artifacts.js.map +1 -0
- package/dist/server/handlers/get-interface-detail.d.ts +28 -0
- package/dist/server/handlers/get-interface-detail.d.ts.map +1 -0
- package/dist/server/handlers/get-interface-detail.js +59 -0
- package/dist/server/handlers/get-interface-detail.js.map +1 -0
- package/dist/server/handlers/index.d.ts +11 -0
- package/dist/server/handlers/index.d.ts.map +1 -0
- package/dist/server/handlers/index.js +13 -0
- package/dist/server/handlers/index.js.map +1 -0
- package/dist/server/handlers/list-projects.d.ts +12 -0
- package/dist/server/handlers/list-projects.d.ts.map +1 -0
- package/dist/server/handlers/list-projects.js +37 -0
- package/dist/server/handlers/list-projects.js.map +1 -0
- package/dist/server/handlers/parse-and-add-project.d.ts +28 -0
- package/dist/server/handlers/parse-and-add-project.d.ts.map +1 -0
- package/dist/server/handlers/parse-and-add-project.js +224 -0
- package/dist/server/handlers/parse-and-add-project.js.map +1 -0
- package/dist/server/handlers/query-interfaces.d.ts +30 -0
- package/dist/server/handlers/query-interfaces.d.ts.map +1 -0
- package/dist/server/handlers/query-interfaces.js +67 -0
- package/dist/server/handlers/query-interfaces.js.map +1 -0
- package/dist/server/handlers/utils.d.ts +51 -0
- package/dist/server/handlers/utils.d.ts.map +1 -0
- package/dist/server/handlers/utils.js +79 -0
- package/dist/server/handlers/utils.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +248 -0
- package/dist/server/index.js.map +1 -0
- package/dist/types/index.d.ts +119 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +19 -0
- package/dist/types/index.js.map +1 -0
- package/package.json +78 -0
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import axios, { AxiosError } from 'axios';
|
|
2
|
+
/**
|
|
3
|
+
* Apifox API 客户端
|
|
4
|
+
* 封装 Apifox REST API 调用
|
|
5
|
+
*/
|
|
6
|
+
export class ApifoxClient {
|
|
7
|
+
client;
|
|
8
|
+
accessToken;
|
|
9
|
+
constructor(accessToken, baseUrl = 'https://api.apifox.com') {
|
|
10
|
+
this.accessToken = accessToken;
|
|
11
|
+
this.client = axios.create({
|
|
12
|
+
baseURL: baseUrl,
|
|
13
|
+
headers: {
|
|
14
|
+
Authorization: `Bearer ${accessToken}`,
|
|
15
|
+
'Content-Type': 'application/json',
|
|
16
|
+
},
|
|
17
|
+
timeout: 30000,
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* 获取项目信息
|
|
22
|
+
* @param projectId 项目 ID
|
|
23
|
+
* @returns 项目信息
|
|
24
|
+
*/
|
|
25
|
+
async getProjectInfo(projectId) {
|
|
26
|
+
try {
|
|
27
|
+
const response = await this.client.get(`/v1/projects/${projectId}`);
|
|
28
|
+
return response.data.data || response.data;
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
if (error instanceof AxiosError) {
|
|
32
|
+
throw new Error(`获取项目信息失败: ${error.response?.data?.message || error.message}`);
|
|
33
|
+
}
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 获取项目接口列表
|
|
39
|
+
* @param projectId 项目 ID
|
|
40
|
+
* @param keyword 搜索关键词(可选)
|
|
41
|
+
* @returns 接口列表
|
|
42
|
+
*/
|
|
43
|
+
async getInterfaces(projectId, keyword) {
|
|
44
|
+
try {
|
|
45
|
+
const params = {};
|
|
46
|
+
if (keyword) {
|
|
47
|
+
params.keyword = keyword;
|
|
48
|
+
}
|
|
49
|
+
const response = await this.client.get(`/v1/projects/${projectId}/apis`, { params });
|
|
50
|
+
return response.data.data || response.data.list || [];
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
if (error instanceof AxiosError) {
|
|
54
|
+
throw new Error(`获取接口列表失败: ${error.response?.data?.message || error.message}`);
|
|
55
|
+
}
|
|
56
|
+
throw error;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 获取接口详情
|
|
61
|
+
* @param projectId 项目 ID
|
|
62
|
+
* @param interfaceId 接口 ID
|
|
63
|
+
* @returns 接口详情
|
|
64
|
+
*/
|
|
65
|
+
async getInterfaceDetail(projectId, interfaceId) {
|
|
66
|
+
try {
|
|
67
|
+
const response = await this.client.get(`/v1/projects/${projectId}/apis/${interfaceId}`);
|
|
68
|
+
return response.data.data || response.data;
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
if (error instanceof AxiosError) {
|
|
72
|
+
throw new Error(`获取接口详情失败: ${error.response?.data?.message || error.message}`);
|
|
73
|
+
}
|
|
74
|
+
throw error;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* 搜索接口(根据关键词)
|
|
79
|
+
* @param projectId 项目 ID
|
|
80
|
+
* @param keyword 搜索关键词
|
|
81
|
+
* @returns 匹配的接口列表
|
|
82
|
+
*/
|
|
83
|
+
async searchInterfaces(projectId, keyword) {
|
|
84
|
+
return this.getInterfaces(projectId, keyword);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=apifox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apifox.js","sourceRoot":"","sources":["../../../src/core/client/apifox.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAiB,UAAU,EAAE,MAAM,OAAO,CAAC;AAGzD;;;GAGG;AACH,MAAM,OAAO,YAAY;IACf,MAAM,CAAgB;IACtB,WAAW,CAAS;IAE5B,YAAY,WAAmB,EAAE,UAAkB,wBAAwB;QACzE,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,OAAO;YAChB,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,WAAW,EAAE;gBACtC,cAAc,EAAE,kBAAkB;aACnC;YACD,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;IACL,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,cAAc,CAAC,SAAiB;QAKpC,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC;YACpE,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,aAAa,CACjB,SAAiB,EACjB,OAAgB;QAUhB,IAAI,CAAC;YACH,MAAM,MAAM,GAAwB,EAAE,CAAC;YACvC,IAAI,OAAO,EAAE,CAAC;gBACZ,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;YAC3B,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,SAAS,OAAO,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;YACrF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,kBAAkB,CACtB,SAAiB,EACjB,WAAmB;QAUnB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,gBAAgB,SAAS,SAAS,WAAW,EAAE,CAAC,CAAC;YACxF,OAAO,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,UAAU,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACjF,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,gBAAgB,CACpB,SAAiB,EACjB,OAAe;QAUf,OAAO,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/client/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/client/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { ApiRequestSpec, ApiResponseSpec, ProjectInfo } from '../../types/index.js';
|
|
2
|
+
/**
|
|
3
|
+
* MCP Bridge 模块
|
|
4
|
+
* 动态创建和调用 Apifox 官方 MCP Server 获取接口文档信息
|
|
5
|
+
*/
|
|
6
|
+
export declare class McpBridge {
|
|
7
|
+
/**
|
|
8
|
+
* 从环境变量中获取自定义的 Apifox API Base URL
|
|
9
|
+
*/
|
|
10
|
+
private getApiBaseUrl;
|
|
11
|
+
/**
|
|
12
|
+
* 构建调用官方 Apifox MCP Server 所需的参数数组
|
|
13
|
+
*/
|
|
14
|
+
private buildServerArgs;
|
|
15
|
+
/**
|
|
16
|
+
* 通过动态创建 Apifox 官方 MCP Server 配置并调用,获取项目信息
|
|
17
|
+
* @param accessToken Apifox access token
|
|
18
|
+
* @param projectId 项目 ID
|
|
19
|
+
* @returns 项目信息(包含项目名称)和执行过程详情
|
|
20
|
+
*/
|
|
21
|
+
getProjectInfoViaMcp(accessToken: string, projectId: string): Promise<ProjectInfo>;
|
|
22
|
+
/**
|
|
23
|
+
* 通过 Apifox 官方 MCP Server 获取接口列表
|
|
24
|
+
* @param accessToken Access token
|
|
25
|
+
* @param projectId 项目 ID
|
|
26
|
+
* @param keyword 搜索关键词(可选)
|
|
27
|
+
* @param executionSteps 执行步骤数组(用于记录过程)
|
|
28
|
+
* @returns 接口列表
|
|
29
|
+
*/
|
|
30
|
+
getInterfacesViaMcp(accessToken: string, projectId: string, keyword?: string, executionSteps?: string[]): Promise<Array<{
|
|
31
|
+
id: string;
|
|
32
|
+
name: string;
|
|
33
|
+
method: string;
|
|
34
|
+
path: string;
|
|
35
|
+
description?: string;
|
|
36
|
+
}>>;
|
|
37
|
+
/**
|
|
38
|
+
* 通过 Apifox 官方 MCP Server 获取接口详情
|
|
39
|
+
* @param accessToken Access token
|
|
40
|
+
* @param projectId 项目 ID
|
|
41
|
+
* @param interfaceId 接口 ID
|
|
42
|
+
* @param executionSteps 执行步骤数组(用于记录过程)
|
|
43
|
+
* @returns 接口详情
|
|
44
|
+
*/
|
|
45
|
+
getInterfaceDetailViaMcp(accessToken: string, projectId: string, interfaceId: string, executionSteps?: string[]): Promise<{
|
|
46
|
+
id: string;
|
|
47
|
+
name?: string;
|
|
48
|
+
method?: string;
|
|
49
|
+
path?: string;
|
|
50
|
+
description?: string;
|
|
51
|
+
request?: ApiRequestSpec;
|
|
52
|
+
response?: ApiResponseSpec;
|
|
53
|
+
}>;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=mcp-bridge.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-bridge.d.ts","sourceRoot":"","sources":["../../../src/core/client/mcp-bridge.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,cAAc,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnG;;;GAGG;AACH,qBAAa,SAAS;IACpB;;OAEG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;;;;OAKG;IACG,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA+HxF;;;;;;;OAOG;IACG,mBAAmB,CACvB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,MAAM,EAChB,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CACR,KAAK,CAAC;QACJ,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC,CACH;IA4GD;;;;;;;OAOG;IACG,wBAAwB,CAC5B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,EAAE,GACxB,OAAO,CAAC;QACT,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,cAAc,CAAC;QACzB,QAAQ,CAAC,EAAE,eAAe,CAAC;KAC5B,CAAC;CAoHH"}
|
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
2
|
+
import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
|
|
3
|
+
/**
|
|
4
|
+
* MCP Bridge 模块
|
|
5
|
+
* 动态创建和调用 Apifox 官方 MCP Server 获取接口文档信息
|
|
6
|
+
*/
|
|
7
|
+
export class McpBridge {
|
|
8
|
+
/**
|
|
9
|
+
* 从环境变量中获取自定义的 Apifox API Base URL
|
|
10
|
+
*/
|
|
11
|
+
getApiBaseUrl() {
|
|
12
|
+
const baseUrl = process.env.APIFOX_API_BASE_URL;
|
|
13
|
+
if (!baseUrl) {
|
|
14
|
+
return null;
|
|
15
|
+
}
|
|
16
|
+
const trimmed = baseUrl.trim();
|
|
17
|
+
return trimmed.length > 0 ? trimmed : null;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 构建调用官方 Apifox MCP Server 所需的参数数组
|
|
21
|
+
*/
|
|
22
|
+
buildServerArgs(projectId, apiBaseUrl) {
|
|
23
|
+
const args = ['-y', 'apifox-mcp-server@latest', `--project=${projectId}`];
|
|
24
|
+
if (apiBaseUrl) {
|
|
25
|
+
args.push(`--apifox-api-base-url=${apiBaseUrl}`);
|
|
26
|
+
}
|
|
27
|
+
return args;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 通过动态创建 Apifox 官方 MCP Server 配置并调用,获取项目信息
|
|
31
|
+
* @param accessToken Apifox access token
|
|
32
|
+
* @param projectId 项目 ID
|
|
33
|
+
* @returns 项目信息(包含项目名称)和执行过程详情
|
|
34
|
+
*/
|
|
35
|
+
async getProjectInfoViaMcp(accessToken, projectId) {
|
|
36
|
+
const executionSteps = [];
|
|
37
|
+
executionSteps.push(' 📝 开始通过 Apifox 官方 MCP Server 获取项目信息');
|
|
38
|
+
const apiBaseUrl = this.getApiBaseUrl();
|
|
39
|
+
const serverArgs = this.buildServerArgs(projectId, apiBaseUrl);
|
|
40
|
+
const serverEnv = {
|
|
41
|
+
APIFOX_ACCESS_TOKEN: accessToken,
|
|
42
|
+
};
|
|
43
|
+
if (apiBaseUrl) {
|
|
44
|
+
serverEnv.APIFOX_API_BASE_URL = apiBaseUrl;
|
|
45
|
+
}
|
|
46
|
+
// 构建 MCP Server 配置
|
|
47
|
+
const mcpConfig = {
|
|
48
|
+
mcpServers: {
|
|
49
|
+
'API 文档': {
|
|
50
|
+
command: 'npx',
|
|
51
|
+
args: serverArgs,
|
|
52
|
+
env: serverEnv,
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
};
|
|
56
|
+
executionSteps.push(' 📄 生成的 MCP 配置:');
|
|
57
|
+
executionSteps.push(` \`\`\`json\n${JSON.stringify(mcpConfig, null, 2)}\n \`\`\``);
|
|
58
|
+
executionSteps.push(` 📡 命令: npx ${serverArgs.join(' ')}`);
|
|
59
|
+
if (apiBaseUrl) {
|
|
60
|
+
executionSteps.push(` 🌐 自定义 API Base URL: ${apiBaseUrl}`);
|
|
61
|
+
}
|
|
62
|
+
try {
|
|
63
|
+
// 创建 MCP Client 并连接到 Apifox 官方 MCP Server
|
|
64
|
+
executionSteps.push(' 🔄 启动 Apifox 官方 MCP Server...');
|
|
65
|
+
const client = new Client({
|
|
66
|
+
name: 'apifox-workspace-mcp-bridge',
|
|
67
|
+
version: '1.0.0',
|
|
68
|
+
}, {
|
|
69
|
+
capabilities: {},
|
|
70
|
+
});
|
|
71
|
+
const transport = new StdioClientTransport({
|
|
72
|
+
command: 'npx',
|
|
73
|
+
args: serverArgs,
|
|
74
|
+
env: {
|
|
75
|
+
...process.env,
|
|
76
|
+
APIFOX_ACCESS_TOKEN: accessToken,
|
|
77
|
+
...(apiBaseUrl ? { APIFOX_API_BASE_URL: apiBaseUrl } : {}),
|
|
78
|
+
},
|
|
79
|
+
});
|
|
80
|
+
await client.connect(transport);
|
|
81
|
+
executionSteps.push(' ✅ MCP Server 连接成功');
|
|
82
|
+
// 列出可用工具
|
|
83
|
+
executionSteps.push(' 🔍 查询可用工具...');
|
|
84
|
+
const tools = await client.listTools();
|
|
85
|
+
executionSteps.push(` ✅ 找到 ${tools.tools.length} 个工具`);
|
|
86
|
+
// 尝试调用工具获取项目信息
|
|
87
|
+
// 注意:这里需要根据 Apifox 官方 MCP Server 的实际工具名称来调用
|
|
88
|
+
// 假设有一个获取项目信息的工具
|
|
89
|
+
let projectInfo = {};
|
|
90
|
+
// 查找可能的工具名称(如 "get_project_info", "get_project", "project_info" 等)
|
|
91
|
+
const possibleToolNames = [
|
|
92
|
+
'get_project_info',
|
|
93
|
+
'get_project',
|
|
94
|
+
'project_info',
|
|
95
|
+
'getProjectInfo',
|
|
96
|
+
'getProject',
|
|
97
|
+
];
|
|
98
|
+
for (const toolName of possibleToolNames) {
|
|
99
|
+
const tool = tools.tools.find((t) => t.name === toolName);
|
|
100
|
+
if (tool) {
|
|
101
|
+
executionSteps.push(` 🔧 调用工具: ${toolName}`);
|
|
102
|
+
try {
|
|
103
|
+
const result = await client.callTool({
|
|
104
|
+
name: toolName,
|
|
105
|
+
arguments: {},
|
|
106
|
+
});
|
|
107
|
+
// 从 MCP 结果中提取项目信息
|
|
108
|
+
if (result && typeof result === 'object') {
|
|
109
|
+
projectInfo = result;
|
|
110
|
+
}
|
|
111
|
+
executionSteps.push(` ✅ 成功获取项目信息`);
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
executionSteps.push(` ⚠️ 工具 ${toolName} 调用失败: ${error instanceof Error ? error.message : String(error)}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// 如果找不到工具,尝试使用默认方式
|
|
120
|
+
if (!projectInfo) {
|
|
121
|
+
executionSteps.push(' ⚠️ 未找到获取项目信息的工具,使用默认项目名称');
|
|
122
|
+
projectInfo = {
|
|
123
|
+
name: `project-${projectId.substring(0, 8)}`,
|
|
124
|
+
id: projectId,
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
await client.close();
|
|
128
|
+
executionSteps.push(' ✅ MCP Server 连接已关闭');
|
|
129
|
+
return {
|
|
130
|
+
name: projectInfo.name || `project-${projectId.substring(0, 8)}`,
|
|
131
|
+
id: projectInfo.id || projectId,
|
|
132
|
+
description: projectInfo.description,
|
|
133
|
+
mcpConfig,
|
|
134
|
+
executionSteps,
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
executionSteps.push(` ❌ 错误: ${error instanceof Error ? error.message : String(error)}`);
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* 通过 Apifox 官方 MCP Server 获取接口列表
|
|
144
|
+
* @param accessToken Access token
|
|
145
|
+
* @param projectId 项目 ID
|
|
146
|
+
* @param keyword 搜索关键词(可选)
|
|
147
|
+
* @param executionSteps 执行步骤数组(用于记录过程)
|
|
148
|
+
* @returns 接口列表
|
|
149
|
+
*/
|
|
150
|
+
async getInterfacesViaMcp(accessToken, projectId, keyword, executionSteps) {
|
|
151
|
+
if (executionSteps) {
|
|
152
|
+
executionSteps.push(' 📝 开始通过 Apifox 官方 MCP Server 获取接口列表');
|
|
153
|
+
}
|
|
154
|
+
const apiBaseUrl = this.getApiBaseUrl();
|
|
155
|
+
const serverArgs = this.buildServerArgs(projectId, apiBaseUrl);
|
|
156
|
+
if (executionSteps && apiBaseUrl) {
|
|
157
|
+
executionSteps.push(` 🌐 自定义 API Base URL: ${apiBaseUrl}`);
|
|
158
|
+
}
|
|
159
|
+
const client = new Client({
|
|
160
|
+
name: 'apifox-workspace-mcp-bridge',
|
|
161
|
+
version: '1.0.0',
|
|
162
|
+
}, {
|
|
163
|
+
capabilities: {},
|
|
164
|
+
});
|
|
165
|
+
const transport = new StdioClientTransport({
|
|
166
|
+
command: 'npx',
|
|
167
|
+
args: serverArgs,
|
|
168
|
+
env: {
|
|
169
|
+
...process.env,
|
|
170
|
+
APIFOX_ACCESS_TOKEN: accessToken,
|
|
171
|
+
...(apiBaseUrl ? { APIFOX_API_BASE_URL: apiBaseUrl } : {}),
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
try {
|
|
175
|
+
await client.connect(transport);
|
|
176
|
+
if (executionSteps) {
|
|
177
|
+
executionSteps.push(' ✅ MCP Server 连接成功');
|
|
178
|
+
}
|
|
179
|
+
// 列出可用工具
|
|
180
|
+
const tools = await client.listTools();
|
|
181
|
+
if (executionSteps) {
|
|
182
|
+
executionSteps.push(` ✅ 找到 ${tools.tools.length} 个工具`);
|
|
183
|
+
}
|
|
184
|
+
// 查找获取接口列表的工具
|
|
185
|
+
const possibleToolNames = [
|
|
186
|
+
'list_interfaces',
|
|
187
|
+
'get_interfaces',
|
|
188
|
+
'list_apis',
|
|
189
|
+
'get_apis',
|
|
190
|
+
'listInterfaces',
|
|
191
|
+
'getInterfaces',
|
|
192
|
+
'listApis',
|
|
193
|
+
'getApis',
|
|
194
|
+
];
|
|
195
|
+
let interfaces = [];
|
|
196
|
+
for (const toolName of possibleToolNames) {
|
|
197
|
+
const tool = tools.tools.find((t) => t.name === toolName);
|
|
198
|
+
if (tool) {
|
|
199
|
+
if (executionSteps) {
|
|
200
|
+
executionSteps.push(` 🔧 调用工具: ${toolName}`);
|
|
201
|
+
}
|
|
202
|
+
try {
|
|
203
|
+
const result = await client.callTool({
|
|
204
|
+
name: toolName,
|
|
205
|
+
arguments: keyword ? { keyword } : {},
|
|
206
|
+
});
|
|
207
|
+
// 解析结果
|
|
208
|
+
if (result.content && Array.isArray(result.content)) {
|
|
209
|
+
const content = result.content[0];
|
|
210
|
+
if (content.type === 'text') {
|
|
211
|
+
try {
|
|
212
|
+
interfaces = JSON.parse(content.text);
|
|
213
|
+
}
|
|
214
|
+
catch {
|
|
215
|
+
// 如果不是 JSON,尝试其他方式解析
|
|
216
|
+
interfaces = [];
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else if (Array.isArray(result)) {
|
|
221
|
+
interfaces = result;
|
|
222
|
+
}
|
|
223
|
+
if (executionSteps) {
|
|
224
|
+
executionSteps.push(` ✅ 成功获取 ${interfaces.length} 个接口`);
|
|
225
|
+
}
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
catch (error) {
|
|
229
|
+
if (executionSteps) {
|
|
230
|
+
executionSteps.push(` ⚠️ 工具 ${toolName} 调用失败: ${error instanceof Error ? error.message : String(error)}`);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
await client.close();
|
|
236
|
+
return interfaces;
|
|
237
|
+
}
|
|
238
|
+
catch (error) {
|
|
239
|
+
await client.close().catch(() => { });
|
|
240
|
+
throw error;
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
/**
|
|
244
|
+
* 通过 Apifox 官方 MCP Server 获取接口详情
|
|
245
|
+
* @param accessToken Access token
|
|
246
|
+
* @param projectId 项目 ID
|
|
247
|
+
* @param interfaceId 接口 ID
|
|
248
|
+
* @param executionSteps 执行步骤数组(用于记录过程)
|
|
249
|
+
* @returns 接口详情
|
|
250
|
+
*/
|
|
251
|
+
async getInterfaceDetailViaMcp(accessToken, projectId, interfaceId, executionSteps) {
|
|
252
|
+
if (executionSteps) {
|
|
253
|
+
executionSteps.push(' 📝 开始通过 Apifox 官方 MCP Server 获取接口详情');
|
|
254
|
+
}
|
|
255
|
+
const apiBaseUrl = this.getApiBaseUrl();
|
|
256
|
+
const serverArgs = this.buildServerArgs(projectId, apiBaseUrl);
|
|
257
|
+
if (executionSteps && apiBaseUrl) {
|
|
258
|
+
executionSteps.push(` 🌐 自定义 API Base URL: ${apiBaseUrl}`);
|
|
259
|
+
}
|
|
260
|
+
const client = new Client({
|
|
261
|
+
name: 'apifox-workspace-mcp-bridge',
|
|
262
|
+
version: '1.0.0',
|
|
263
|
+
}, {
|
|
264
|
+
capabilities: {},
|
|
265
|
+
});
|
|
266
|
+
const transport = new StdioClientTransport({
|
|
267
|
+
command: 'npx',
|
|
268
|
+
args: serverArgs,
|
|
269
|
+
env: {
|
|
270
|
+
...process.env,
|
|
271
|
+
APIFOX_ACCESS_TOKEN: accessToken,
|
|
272
|
+
...(apiBaseUrl ? { APIFOX_API_BASE_URL: apiBaseUrl } : {}),
|
|
273
|
+
},
|
|
274
|
+
});
|
|
275
|
+
try {
|
|
276
|
+
await client.connect(transport);
|
|
277
|
+
if (executionSteps) {
|
|
278
|
+
executionSteps.push(' ✅ MCP Server 连接成功');
|
|
279
|
+
}
|
|
280
|
+
// 列出可用工具
|
|
281
|
+
const tools = await client.listTools();
|
|
282
|
+
if (executionSteps) {
|
|
283
|
+
executionSteps.push(` ✅ 找到 ${tools.tools.length} 个工具`);
|
|
284
|
+
}
|
|
285
|
+
// 查找获取接口详情的工具
|
|
286
|
+
const possibleToolNames = [
|
|
287
|
+
'get_interface_detail',
|
|
288
|
+
'get_interface',
|
|
289
|
+
'get_api_detail',
|
|
290
|
+
'get_api',
|
|
291
|
+
'getInterfaceDetail',
|
|
292
|
+
'getInterface',
|
|
293
|
+
'getApiDetail',
|
|
294
|
+
'getApi',
|
|
295
|
+
];
|
|
296
|
+
let detail = null;
|
|
297
|
+
for (const toolName of possibleToolNames) {
|
|
298
|
+
const tool = tools.tools.find((t) => t.name === toolName);
|
|
299
|
+
if (tool) {
|
|
300
|
+
if (executionSteps) {
|
|
301
|
+
executionSteps.push(` 🔧 调用工具: ${toolName}`);
|
|
302
|
+
}
|
|
303
|
+
try {
|
|
304
|
+
const result = await client.callTool({
|
|
305
|
+
name: toolName,
|
|
306
|
+
arguments: { interfaceId },
|
|
307
|
+
});
|
|
308
|
+
// 解析结果
|
|
309
|
+
if (result.content && Array.isArray(result.content)) {
|
|
310
|
+
const content = result.content[0];
|
|
311
|
+
if (content.type === 'text') {
|
|
312
|
+
try {
|
|
313
|
+
detail = JSON.parse(content.text);
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
// 如果不是 JSON,尝试其他方式解析
|
|
317
|
+
detail = { id: interfaceId };
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
else if (result && typeof result === 'object') {
|
|
322
|
+
detail = result;
|
|
323
|
+
}
|
|
324
|
+
if (executionSteps) {
|
|
325
|
+
executionSteps.push(` ✅ 成功获取接口详情`);
|
|
326
|
+
}
|
|
327
|
+
break;
|
|
328
|
+
}
|
|
329
|
+
catch (error) {
|
|
330
|
+
if (executionSteps) {
|
|
331
|
+
executionSteps.push(` ⚠️ 工具 ${toolName} 调用失败: ${error instanceof Error ? error.message : String(error)}`);
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
await client.close();
|
|
337
|
+
return { id: interfaceId, ...detail };
|
|
338
|
+
}
|
|
339
|
+
catch (error) {
|
|
340
|
+
await client.close().catch(() => { });
|
|
341
|
+
throw error;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
//# sourceMappingURL=mcp-bridge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-bridge.js","sourceRoot":"","sources":["../../../src/core/client/mcp-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/core/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|