api2mcp 0.0.1 → 0.2.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/README.md +138 -1
- package/bin/api2mcp.js +2 -0
- package/dist/chunk-CVWZJCLP.mjs +992 -0
- package/dist/chunk-CVWZJCLP.mjs.map +1 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +1042 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.mjs +47 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/index.d.mts +378 -0
- package/dist/index.d.ts +378 -0
- package/dist/index.js +1049 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +41 -0
- package/dist/index.mjs.map +1 -0
- package/package.json +72 -9
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* 配置类型定义
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* API 请求头配置
|
|
10
|
+
*/
|
|
11
|
+
type ApiHeaders = Record<string, string>;
|
|
12
|
+
/**
|
|
13
|
+
* 单个 API 源配置
|
|
14
|
+
*/
|
|
15
|
+
interface ApiSourceConfig {
|
|
16
|
+
/** OpenAPI 文档 URL 或本地文件路径 */
|
|
17
|
+
openapiUrl: string;
|
|
18
|
+
/** API 基础 URL(可选,默认从 OpenAPI 文档中提取) */
|
|
19
|
+
baseUrl?: string;
|
|
20
|
+
/** 请求超时时间(毫秒) */
|
|
21
|
+
timeout?: number;
|
|
22
|
+
/** 自定义请求头 */
|
|
23
|
+
headers?: ApiHeaders;
|
|
24
|
+
/** 工具名前缀 */
|
|
25
|
+
toolPrefix?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 完整配置
|
|
29
|
+
*/
|
|
30
|
+
interface Config extends ApiSourceConfig {
|
|
31
|
+
/** 调试模式 */
|
|
32
|
+
debug: boolean;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* CLI 参数 Schema
|
|
36
|
+
*/
|
|
37
|
+
declare const CliArgsSchema: z.ZodObject<{
|
|
38
|
+
url: z.ZodOptional<z.ZodString>;
|
|
39
|
+
baseUrl: z.ZodOptional<z.ZodString>;
|
|
40
|
+
timeout: z.ZodOptional<z.ZodNumber>;
|
|
41
|
+
headers: z.ZodOptional<z.ZodString>;
|
|
42
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
43
|
+
debug: z.ZodOptional<z.ZodBoolean>;
|
|
44
|
+
}, "strip", z.ZodTypeAny, {
|
|
45
|
+
debug?: boolean | undefined;
|
|
46
|
+
url?: string | undefined;
|
|
47
|
+
baseUrl?: string | undefined;
|
|
48
|
+
timeout?: number | undefined;
|
|
49
|
+
headers?: string | undefined;
|
|
50
|
+
prefix?: string | undefined;
|
|
51
|
+
}, {
|
|
52
|
+
debug?: boolean | undefined;
|
|
53
|
+
url?: string | undefined;
|
|
54
|
+
baseUrl?: string | undefined;
|
|
55
|
+
timeout?: number | undefined;
|
|
56
|
+
headers?: string | undefined;
|
|
57
|
+
prefix?: string | undefined;
|
|
58
|
+
}>;
|
|
59
|
+
type CliArgs = z.infer<typeof CliArgsSchema>;
|
|
60
|
+
/**
|
|
61
|
+
* 环境变量配置
|
|
62
|
+
*/
|
|
63
|
+
interface EnvConfig {
|
|
64
|
+
OPENAPI_URL?: string;
|
|
65
|
+
API_BASE_URL?: string;
|
|
66
|
+
API_TIMEOUT?: string;
|
|
67
|
+
API_HEADERS?: string;
|
|
68
|
+
DEBUG?: string;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* 配置加载器
|
|
73
|
+
* 优先级: CLI 参数 > 环境变量 > 配置文件
|
|
74
|
+
*/
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* 加载配置
|
|
78
|
+
* 优先级: CLI 参数 > 环境变量 > 配置文件
|
|
79
|
+
*/
|
|
80
|
+
declare function loadConfig(cliArgs?: CliArgs, env?: EnvConfig): Config;
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* OpenAPI 类型定义
|
|
84
|
+
*/
|
|
85
|
+
/**
|
|
86
|
+
* OpenAPI 参数位置
|
|
87
|
+
*/
|
|
88
|
+
type ParameterLocation = 'path' | 'query' | 'header' | 'cookie';
|
|
89
|
+
/**
|
|
90
|
+
* OpenAPI 参数
|
|
91
|
+
*/
|
|
92
|
+
interface OpenApiParameter {
|
|
93
|
+
name: string;
|
|
94
|
+
in: ParameterLocation;
|
|
95
|
+
required?: boolean;
|
|
96
|
+
description?: string;
|
|
97
|
+
schema?: OpenApiSchema;
|
|
98
|
+
deprecated?: boolean;
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* OpenAPI Schema
|
|
102
|
+
*/
|
|
103
|
+
interface OpenApiSchema {
|
|
104
|
+
type?: string;
|
|
105
|
+
format?: string;
|
|
106
|
+
description?: string;
|
|
107
|
+
default?: unknown;
|
|
108
|
+
enum?: unknown[];
|
|
109
|
+
const?: unknown;
|
|
110
|
+
items?: OpenApiSchema;
|
|
111
|
+
properties?: Record<string, OpenApiSchema>;
|
|
112
|
+
additionalProperties?: boolean | OpenApiSchema;
|
|
113
|
+
required?: string[];
|
|
114
|
+
oneOf?: OpenApiSchema[];
|
|
115
|
+
anyOf?: OpenApiSchema[];
|
|
116
|
+
allOf?: OpenApiSchema[];
|
|
117
|
+
minLength?: number;
|
|
118
|
+
maxLength?: number;
|
|
119
|
+
minimum?: number;
|
|
120
|
+
maximum?: number;
|
|
121
|
+
exclusiveMinimum?: boolean | number;
|
|
122
|
+
exclusiveMaximum?: boolean | number;
|
|
123
|
+
pattern?: string;
|
|
124
|
+
minItems?: number;
|
|
125
|
+
maxItems?: number;
|
|
126
|
+
uniqueItems?: boolean;
|
|
127
|
+
nullable?: boolean;
|
|
128
|
+
deprecated?: boolean;
|
|
129
|
+
example?: unknown;
|
|
130
|
+
$ref?: string;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* OpenAPI 请求体
|
|
134
|
+
*/
|
|
135
|
+
interface OpenApiRequestBody {
|
|
136
|
+
description?: string;
|
|
137
|
+
required?: boolean;
|
|
138
|
+
content: Record<string, {
|
|
139
|
+
schema?: OpenApiSchema;
|
|
140
|
+
example?: unknown;
|
|
141
|
+
examples?: Record<string, unknown>;
|
|
142
|
+
}>;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* OpenAPI 响应
|
|
146
|
+
*/
|
|
147
|
+
interface OpenApiResponse {
|
|
148
|
+
description?: string;
|
|
149
|
+
content?: Record<string, {
|
|
150
|
+
schema?: OpenApiSchema;
|
|
151
|
+
example?: unknown;
|
|
152
|
+
}>;
|
|
153
|
+
}
|
|
154
|
+
/**
|
|
155
|
+
* OpenAPI 操作
|
|
156
|
+
*/
|
|
157
|
+
interface OpenApiOperation {
|
|
158
|
+
/** HTTP 方法 */
|
|
159
|
+
method: string;
|
|
160
|
+
/** API 路径 */
|
|
161
|
+
path: string;
|
|
162
|
+
/** 操作 ID */
|
|
163
|
+
operationId?: string;
|
|
164
|
+
/** 摘要 */
|
|
165
|
+
summary?: string;
|
|
166
|
+
/** 详细描述 */
|
|
167
|
+
description?: string;
|
|
168
|
+
/** 标签 */
|
|
169
|
+
tags?: string[];
|
|
170
|
+
/** 参数列表 */
|
|
171
|
+
parameters?: OpenApiParameter[];
|
|
172
|
+
/** 请求体 */
|
|
173
|
+
requestBody?: OpenApiRequestBody;
|
|
174
|
+
/** 响应 */
|
|
175
|
+
responses?: Record<string, OpenApiResponse>;
|
|
176
|
+
/** 是否废弃 */
|
|
177
|
+
deprecated?: boolean;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* OpenAPI 文档信息
|
|
181
|
+
*/
|
|
182
|
+
interface OpenApiInfo {
|
|
183
|
+
title: string;
|
|
184
|
+
version: string;
|
|
185
|
+
description?: string;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* OpenAPI 服务器
|
|
189
|
+
*/
|
|
190
|
+
interface OpenApiServer {
|
|
191
|
+
url: string;
|
|
192
|
+
description?: string;
|
|
193
|
+
variables?: Record<string, {
|
|
194
|
+
default: string;
|
|
195
|
+
enum?: string[];
|
|
196
|
+
description?: string;
|
|
197
|
+
}>;
|
|
198
|
+
}
|
|
199
|
+
/**
|
|
200
|
+
* 解析后的 OpenAPI 文档
|
|
201
|
+
*/
|
|
202
|
+
interface ParsedOpenApiDoc {
|
|
203
|
+
openapi: string;
|
|
204
|
+
info: OpenApiInfo;
|
|
205
|
+
servers?: OpenApiServer[];
|
|
206
|
+
operations: OpenApiOperation[];
|
|
207
|
+
components?: {
|
|
208
|
+
schemas?: Record<string, OpenApiSchema>;
|
|
209
|
+
parameters?: Record<string, OpenApiParameter>;
|
|
210
|
+
requestBodies?: Record<string, OpenApiRequestBody>;
|
|
211
|
+
responses?: Record<string, OpenApiResponse>;
|
|
212
|
+
};
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
/**
|
|
216
|
+
* OpenAPI Schema 到 Zod Schema 转换器
|
|
217
|
+
*/
|
|
218
|
+
|
|
219
|
+
/**
|
|
220
|
+
* Schema 引用解析函数类型
|
|
221
|
+
*/
|
|
222
|
+
type RefResolver = (ref: string) => OpenApiSchema | undefined;
|
|
223
|
+
/**
|
|
224
|
+
* 将 OpenAPI Schema 转换为 Zod Schema
|
|
225
|
+
*/
|
|
226
|
+
declare function convertSchema(schema: OpenApiSchema | undefined, refResolver?: RefResolver): z.ZodType;
|
|
227
|
+
/**
|
|
228
|
+
* 创建引用解析器
|
|
229
|
+
*/
|
|
230
|
+
declare function createRefResolver(components: Record<string, OpenApiSchema> | undefined): RefResolver;
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* MCP 工具生成器
|
|
234
|
+
*/
|
|
235
|
+
|
|
236
|
+
/**
|
|
237
|
+
* 生成的工具定义
|
|
238
|
+
*/
|
|
239
|
+
interface GeneratedTool {
|
|
240
|
+
/** 工具名称 */
|
|
241
|
+
name: string;
|
|
242
|
+
/** 工具描述 */
|
|
243
|
+
description: string;
|
|
244
|
+
/** 输入参数 Schema */
|
|
245
|
+
inputSchema: z.ZodObject<z.ZodRawShape>;
|
|
246
|
+
/** 原始操作定义 */
|
|
247
|
+
operation: OpenApiOperation;
|
|
248
|
+
}
|
|
249
|
+
/**
|
|
250
|
+
* 从 OpenAPI 操作生成 MCP 工具
|
|
251
|
+
*/
|
|
252
|
+
declare function generateTool(operation: OpenApiOperation, components?: Record<string, OpenApiSchema>, toolPrefix?: string): GeneratedTool;
|
|
253
|
+
/**
|
|
254
|
+
* 批量生成工具
|
|
255
|
+
*/
|
|
256
|
+
declare function generateTools(operations: OpenApiOperation[], components?: Record<string, OpenApiSchema>, toolPrefix?: string): GeneratedTool[];
|
|
257
|
+
|
|
258
|
+
/**
|
|
259
|
+
* HTTP 客户端
|
|
260
|
+
*/
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* HTTP 响应
|
|
264
|
+
*/
|
|
265
|
+
interface HttpResponse {
|
|
266
|
+
status: number;
|
|
267
|
+
statusText: string;
|
|
268
|
+
headers: Record<string, string>;
|
|
269
|
+
body: unknown;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* 执行 HTTP 请求
|
|
273
|
+
*/
|
|
274
|
+
declare function executeRequest(operation: OpenApiOperation, input: Record<string, unknown>, config: Config): Promise<HttpResponse>;
|
|
275
|
+
/**
|
|
276
|
+
* 格式化响应为字符串
|
|
277
|
+
*/
|
|
278
|
+
declare function formatResponse(response: HttpResponse): string;
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* OpenAPI 解析器
|
|
282
|
+
*/
|
|
283
|
+
|
|
284
|
+
/**
|
|
285
|
+
* 解析 OpenAPI 文档
|
|
286
|
+
*/
|
|
287
|
+
declare function parseOpenApi(source: string): Promise<ParsedOpenApiDoc>;
|
|
288
|
+
/**
|
|
289
|
+
* 获取基础 URL
|
|
290
|
+
*/
|
|
291
|
+
declare function getBaseUrl(doc: ParsedOpenApiDoc, overrideUrl?: string): string;
|
|
292
|
+
|
|
293
|
+
/**
|
|
294
|
+
* MCP 服务器
|
|
295
|
+
*/
|
|
296
|
+
|
|
297
|
+
/**
|
|
298
|
+
* 创建并启动 MCP 服务器
|
|
299
|
+
*/
|
|
300
|
+
declare function createServer(config: Config): Promise<McpServer>;
|
|
301
|
+
/**
|
|
302
|
+
* 启动服务器(使用 stdio 传输)
|
|
303
|
+
*/
|
|
304
|
+
declare function startServer(config: Config): Promise<void>;
|
|
305
|
+
|
|
306
|
+
/**
|
|
307
|
+
* MCP 工具管理器
|
|
308
|
+
*/
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* 工具管理器
|
|
312
|
+
*/
|
|
313
|
+
declare class ToolManager {
|
|
314
|
+
private tools;
|
|
315
|
+
private config;
|
|
316
|
+
private server;
|
|
317
|
+
constructor(server: McpServer, config: Config);
|
|
318
|
+
/**
|
|
319
|
+
* 注册工具
|
|
320
|
+
*/
|
|
321
|
+
registerTool(tool: GeneratedTool): void;
|
|
322
|
+
/**
|
|
323
|
+
* 批量注册工具
|
|
324
|
+
*/
|
|
325
|
+
registerTools(tools: GeneratedTool[]): void;
|
|
326
|
+
/**
|
|
327
|
+
* 执行工具
|
|
328
|
+
*/
|
|
329
|
+
private executeTool;
|
|
330
|
+
/**
|
|
331
|
+
* 获取所有已注册的工具名称
|
|
332
|
+
*/
|
|
333
|
+
getToolNames(): string[];
|
|
334
|
+
/**
|
|
335
|
+
* 获取工具数量
|
|
336
|
+
*/
|
|
337
|
+
getToolCount(): number;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
/**
|
|
341
|
+
* 错误类定义
|
|
342
|
+
*/
|
|
343
|
+
declare class Api2McpError extends Error {
|
|
344
|
+
readonly code: string;
|
|
345
|
+
readonly cause?: Error | undefined;
|
|
346
|
+
constructor(message: string, code: string, cause?: Error | undefined);
|
|
347
|
+
}
|
|
348
|
+
declare class ConfigurationError extends Api2McpError {
|
|
349
|
+
constructor(message: string, cause?: Error);
|
|
350
|
+
}
|
|
351
|
+
declare class OpenApiParseError extends Api2McpError {
|
|
352
|
+
constructor(message: string, cause?: Error);
|
|
353
|
+
}
|
|
354
|
+
declare class ToolExecutionError extends Api2McpError {
|
|
355
|
+
readonly toolName: string;
|
|
356
|
+
constructor(message: string, toolName: string, cause?: Error);
|
|
357
|
+
}
|
|
358
|
+
declare class HttpError extends Api2McpError {
|
|
359
|
+
readonly statusCode: number;
|
|
360
|
+
readonly responseBody?: string | undefined;
|
|
361
|
+
constructor(message: string, statusCode: number, responseBody?: string | undefined, cause?: Error);
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* 简单日志工具
|
|
366
|
+
* 所有日志输出到 stderr,避免干扰 MCP stdio 协议
|
|
367
|
+
*/
|
|
368
|
+
type LogLevel = 'debug' | 'info' | 'warn' | 'error';
|
|
369
|
+
interface Logger {
|
|
370
|
+
debug: (message: string, ...args: unknown[]) => void;
|
|
371
|
+
info: (message: string, ...args: unknown[]) => void;
|
|
372
|
+
warn: (message: string, ...args: unknown[]) => void;
|
|
373
|
+
error: (message: string, ...args: unknown[]) => void;
|
|
374
|
+
setLevel: (level: LogLevel) => void;
|
|
375
|
+
}
|
|
376
|
+
declare const logger: Logger;
|
|
377
|
+
|
|
378
|
+
export { Api2McpError, type ApiHeaders, type ApiSourceConfig, type Config, ConfigurationError, type GeneratedTool, HttpError, type HttpResponse, type OpenApiOperation, type OpenApiParameter, OpenApiParseError, type OpenApiSchema, type ParsedOpenApiDoc, ToolExecutionError, ToolManager, convertSchema, createRefResolver, createServer, executeRequest, formatResponse, generateTool, generateTools, getBaseUrl, loadConfig, logger, parseOpenApi, startServer };
|