@airmcp-dev/gateway 0.1.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.
Files changed (54) hide show
  1. package/LICENSE +17 -0
  2. package/dist/index.d.ts +9 -0
  3. package/dist/index.d.ts.map +1 -0
  4. package/dist/index.js +14 -0
  5. package/dist/index.js.map +1 -0
  6. package/dist/proxy/index.d.ts +5 -0
  7. package/dist/proxy/index.d.ts.map +1 -0
  8. package/dist/proxy/index.js +7 -0
  9. package/dist/proxy/index.js.map +1 -0
  10. package/dist/proxy/mcp-proxy.d.ts +53 -0
  11. package/dist/proxy/mcp-proxy.d.ts.map +1 -0
  12. package/dist/proxy/mcp-proxy.js +131 -0
  13. package/dist/proxy/mcp-proxy.js.map +1 -0
  14. package/dist/proxy/protocol-adapter.d.ts +28 -0
  15. package/dist/proxy/protocol-adapter.d.ts.map +1 -0
  16. package/dist/proxy/protocol-adapter.js +56 -0
  17. package/dist/proxy/protocol-adapter.js.map +1 -0
  18. package/dist/proxy/session-pool.d.ts +39 -0
  19. package/dist/proxy/session-pool.d.ts.map +1 -0
  20. package/dist/proxy/session-pool.js +102 -0
  21. package/dist/proxy/session-pool.js.map +1 -0
  22. package/dist/registry/health-checker.d.ts +35 -0
  23. package/dist/registry/health-checker.d.ts.map +1 -0
  24. package/dist/registry/health-checker.js +121 -0
  25. package/dist/registry/health-checker.js.map +1 -0
  26. package/dist/registry/index.d.ts +4 -0
  27. package/dist/registry/index.d.ts.map +1 -0
  28. package/dist/registry/index.js +7 -0
  29. package/dist/registry/index.js.map +1 -0
  30. package/dist/registry/server-registry.d.ts +37 -0
  31. package/dist/registry/server-registry.d.ts.map +1 -0
  32. package/dist/registry/server-registry.js +72 -0
  33. package/dist/registry/server-registry.js.map +1 -0
  34. package/dist/registry/tool-index.d.ts +35 -0
  35. package/dist/registry/tool-index.d.ts.map +1 -0
  36. package/dist/registry/tool-index.js +72 -0
  37. package/dist/registry/tool-index.js.map +1 -0
  38. package/dist/router/index.d.ts +3 -0
  39. package/dist/router/index.d.ts.map +1 -0
  40. package/dist/router/index.js +6 -0
  41. package/dist/router/index.js.map +1 -0
  42. package/dist/router/load-balancer.d.ts +23 -0
  43. package/dist/router/load-balancer.d.ts.map +1 -0
  44. package/dist/router/load-balancer.js +78 -0
  45. package/dist/router/load-balancer.js.map +1 -0
  46. package/dist/router/request-router.d.ts +21 -0
  47. package/dist/router/request-router.d.ts.map +1 -0
  48. package/dist/router/request-router.js +50 -0
  49. package/dist/router/request-router.js.map +1 -0
  50. package/dist/types.d.ts +88 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +7 -0
  53. package/dist/types.js.map +1 -0
  54. package/package.json +33 -0
@@ -0,0 +1,88 @@
1
+ /** MCP 서버 등록 정보 */
2
+ export interface ServerEntry {
3
+ /** 고유 식별자 */
4
+ id: string;
5
+ /** 표시 이름 */
6
+ name: string;
7
+ /** 서버 transport 타입 */
8
+ transport: 'stdio' | 'http' | 'sse';
9
+ /** stdio: command + args, http/sse: url */
10
+ connection: StdioConnection | HttpConnection;
11
+ /** 서버가 제공하는 도구 목록 (발견 후 채워짐) */
12
+ tools: ToolEntry[];
13
+ /** 서버 상태 */
14
+ status: ServerStatus;
15
+ /** 마지막 헬스체크 시각 */
16
+ lastHealthCheck?: Date;
17
+ /** 서버 메타데이터 */
18
+ metadata?: Record<string, any>;
19
+ }
20
+ export interface StdioConnection {
21
+ type: 'stdio';
22
+ command: string;
23
+ args?: string[];
24
+ cwd?: string;
25
+ env?: Record<string, string>;
26
+ }
27
+ export interface HttpConnection {
28
+ type: 'http' | 'sse';
29
+ url: string;
30
+ headers?: Record<string, string>;
31
+ }
32
+ export type ServerConnection = StdioConnection | HttpConnection;
33
+ export type ServerStatus = 'registered' | 'connecting' | 'connected' | 'error' | 'stopped';
34
+ /** 도구 인덱스 엔트리 */
35
+ export interface ToolEntry {
36
+ /** 도구 이름 */
37
+ name: string;
38
+ /** 도구 설명 */
39
+ description?: string;
40
+ /** 이 도구를 제공하는 서버 ID */
41
+ serverId: string;
42
+ /** 입력 스키마 (JSON Schema) */
43
+ inputSchema?: Record<string, any>;
44
+ }
45
+ /** 라우팅 요청 */
46
+ export interface RouteRequest {
47
+ /** 호출할 도구 이름 */
48
+ toolName: string;
49
+ /** 도구 파라미터 */
50
+ params: Record<string, any>;
51
+ /** 요청 메타데이터 */
52
+ meta?: {
53
+ clientId?: string;
54
+ sessionId?: string;
55
+ priority?: number;
56
+ };
57
+ }
58
+ /** 라우팅 결과 */
59
+ export interface RouteResult {
60
+ /** 라우팅된 서버 */
61
+ server: ServerEntry;
62
+ /** 도구 정보 */
63
+ tool: ToolEntry;
64
+ }
65
+ /** 헬스체크 결과 */
66
+ export interface HealthCheckResult {
67
+ serverId: string;
68
+ healthy: boolean;
69
+ latencyMs: number;
70
+ error?: string;
71
+ checkedAt: Date;
72
+ }
73
+ /** 로드밸런서 전략 */
74
+ export type BalancerStrategy = 'round-robin' | 'least-connections' | 'weighted' | 'random';
75
+ /** Gateway 설정 */
76
+ export interface GatewayConfig {
77
+ /** 게이트웨이 이름 */
78
+ name?: string;
79
+ /** HTTP 리스닝 포트 */
80
+ port?: number;
81
+ /** 헬스체크 주기 (ms) */
82
+ healthCheckInterval?: number;
83
+ /** 로드밸런서 전략 */
84
+ balancer?: BalancerStrategy;
85
+ /** 요청 타임아웃 (ms) */
86
+ requestTimeout?: number;
87
+ }
88
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAMA,mBAAmB;AACnB,MAAM,WAAW,WAAW;IAC1B,aAAa;IACb,EAAE,EAAE,MAAM,CAAC;IACX,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,sBAAsB;IACtB,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IACpC,2CAA2C;IAC3C,UAAU,EAAE,eAAe,GAAG,cAAc,CAAC;IAC7C,gCAAgC;IAChC,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,YAAY;IACZ,MAAM,EAAE,YAAY,CAAC;IACrB,kBAAkB;IAClB,eAAe,CAAC,EAAE,IAAI,CAAC;IACvB,eAAe;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC;AAED,MAAM,MAAM,gBAAgB,GAAG,eAAe,GAAG,cAAc,CAAC;AAEhE,MAAM,MAAM,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC;AAE3F,iBAAiB;AACjB,MAAM,WAAW,SAAS;IACxB,YAAY;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY;IACZ,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,uBAAuB;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CACnC;AAED,aAAa;AACb,MAAM,WAAW,YAAY;IAC3B,gBAAgB;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC5B,eAAe;IACf,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,aAAa;AACb,MAAM,WAAW,WAAW;IAC1B,cAAc;IACd,MAAM,EAAE,WAAW,CAAC;IACpB,YAAY;IACZ,IAAI,EAAE,SAAS,CAAC;CACjB;AAED,cAAc;AACd,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,eAAe;AACf,MAAM,MAAM,gBAAgB,GAAG,aAAa,GAAG,mBAAmB,GAAG,UAAU,GAAG,QAAQ,CAAC;AAE3F,iBAAiB;AACjB,MAAM,WAAW,aAAa;IAC5B,eAAe;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kBAAkB;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mBAAmB;IACnB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe;IACf,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,mBAAmB;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
package/dist/types.js ADDED
@@ -0,0 +1,7 @@
1
+ // Copyright 2026 CodePedia Labs. Licensed under Apache-2.0.
2
+ // @airmcp-dev/gateway — types.ts
3
+ //
4
+ // Gateway 전체 타입 정의.
5
+ // proxy, registry, router에서 공통으로 사용.
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,4DAA4D;AAC5D,iCAAiC;AACjC,EAAE;AACF,oBAAoB;AACpB,qCAAqC"}
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@airmcp-dev/gateway",
3
+ "version": "0.1.0",
4
+ "description": "MCP reverse proxy, server registry, and request router",
5
+ "type": "module",
6
+ "files": ["dist", "README.md", "LICENSE"],
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": "./dist/index.js"
11
+ },
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "dev": "tsc --watch",
15
+ "test": "vitest run",
16
+ "lint": "tsc --noEmit"
17
+ },
18
+ "dependencies": {
19
+ "@airmcp-dev/core": "^0.1.0",
20
+ "@modelcontextprotocol/sdk": "^1.12.0"
21
+ },
22
+ "devDependencies": {
23
+ "typescript": "^5.5.0",
24
+ "vitest": "^2.0.0",
25
+ "@types/node": "^20.0.0"
26
+ },
27
+ "author": "CodePedia Labs",
28
+ "homepage": "https://airmcp.dev",
29
+ "bugs": { "url": "https://github.com/airmcp-dev/air/issues" },
30
+ "repository": { "type": "git", "url": "https://github.com/airmcp-dev/air", "directory": "packages/gateway" },
31
+ "keywords": ["mcp", "ai", "agent", "air"],
32
+ "license": "Apache-2.0"
33
+ }