@awarecorp/mcp-logger 0.0.2-dev.0 → 0.0.2-dev.1
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/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +84 -1
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/interceptor.d.ts.map +1 -0
- package/dist/cli/interceptor.js +170 -1
- package/dist/cli/interceptor.js.map +1 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +5 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/index.d.ts +10 -110
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +21 -1
- package/dist/index.js.map +1 -0
- package/dist/sdk/index.d.ts +66 -0
- package/dist/sdk/index.d.ts.map +1 -0
- package/dist/sdk/index.js +80 -1
- package/dist/sdk/index.js.map +1 -0
- package/dist/sdk/instrumentation.d.ts +11 -0
- package/dist/sdk/instrumentation.d.ts.map +1 -0
- package/dist/sdk/instrumentation.js +99 -1
- package/dist/sdk/instrumentation.js.map +1 -0
- package/dist/sdk/types.d.ts +11 -40
- package/dist/sdk/types.d.ts.map +1 -0
- package/dist/sdk/types.js +5 -0
- package/dist/sdk/types.js.map +1 -0
- package/dist/shared/config.d.ts +18 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +18 -1
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/span-utils.d.ts +31 -0
- package/dist/shared/span-utils.d.ts.map +1 -0
- package/dist/shared/span-utils.js +90 -1
- package/dist/shared/span-utils.js.map +1 -0
- package/dist/shared/telemetry.d.ts +25 -0
- package/dist/shared/telemetry.d.ts.map +1 -0
- package/dist/shared/telemetry.js +91 -1
- package/dist/shared/telemetry.js.map +1 -0
- package/dist/shared/types.d.ts +5 -6
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +5 -0
- package/dist/shared/types.js.map +1 -0
- package/package.json +5 -11
|
@@ -1 +1,99 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* MCP Server 자동 계측
|
|
3
|
+
*
|
|
4
|
+
* setRequestHandler를 오버라이드하여 모든 요청/응답을 자동으로 추적합니다.
|
|
5
|
+
*/
|
|
6
|
+
import { getTracer } from '../shared/telemetry.js';
|
|
7
|
+
import { setSpanAttributes, addSpanEvent, recordSpanError, markSpanSuccess, safeStringify } from '../shared/span-utils.js';
|
|
8
|
+
/**
|
|
9
|
+
* MCP Server에 자동 계측 적용
|
|
10
|
+
*/
|
|
11
|
+
export function instrumentMCPServer(server, debug = false) {
|
|
12
|
+
const tracer = getTracer();
|
|
13
|
+
if (!tracer) {
|
|
14
|
+
throw new Error('[MCP Logger SDK] Tracer not initialized. Call initMCPLogger first.');
|
|
15
|
+
}
|
|
16
|
+
// 원본 setRequestHandler 저장
|
|
17
|
+
const originalSetRequestHandler = server.setRequestHandler.bind(server);
|
|
18
|
+
// setRequestHandler 오버라이드
|
|
19
|
+
server.setRequestHandler = function (requestSchema, handler) {
|
|
20
|
+
// requestSchema에서 method 추출
|
|
21
|
+
const methodLiteral = requestSchema.shape?.method;
|
|
22
|
+
const method = methodLiteral?._def?.value || 'unknown';
|
|
23
|
+
if (debug) {
|
|
24
|
+
console.log(`[MCP Logger SDK] Instrumenting handler: ${method}`);
|
|
25
|
+
}
|
|
26
|
+
// 래핑된 핸들러 생성
|
|
27
|
+
const wrappedHandler = async (request, extra) => {
|
|
28
|
+
const spanName = `mcp.${method}`;
|
|
29
|
+
return await tracer.startActiveSpan(spanName, {
|
|
30
|
+
attributes: {
|
|
31
|
+
'mcp.method': method,
|
|
32
|
+
'mcp.request.method': request.method,
|
|
33
|
+
},
|
|
34
|
+
}, async (span) => {
|
|
35
|
+
const startTime = Date.now();
|
|
36
|
+
try {
|
|
37
|
+
// Request 로깅
|
|
38
|
+
const paramsStr = safeStringify(request.params || {});
|
|
39
|
+
setSpanAttributes(span, {
|
|
40
|
+
'mcp.request.id': 'unknown', // MCPRequest에 id가 없으므로 'unknown'으로 설정
|
|
41
|
+
'mcp.request.params.size': paramsStr?.length,
|
|
42
|
+
});
|
|
43
|
+
if (paramsStr && paramsStr.length < 1000) {
|
|
44
|
+
span.setAttribute('mcp.request.params', paramsStr);
|
|
45
|
+
}
|
|
46
|
+
addSpanEvent(span, 'mcp.request.received', {
|
|
47
|
+
'request.method': request.method,
|
|
48
|
+
'request.timestamp': startTime,
|
|
49
|
+
}, debug);
|
|
50
|
+
if (debug) {
|
|
51
|
+
console.log(`[MCP Logger SDK] Request received:`, {
|
|
52
|
+
method: request.method,
|
|
53
|
+
params: request.params,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
// 원본 핸들러 실행
|
|
57
|
+
const result = await handler(request, extra);
|
|
58
|
+
const endTime = Date.now();
|
|
59
|
+
const duration = endTime - startTime;
|
|
60
|
+
// Response 로깅
|
|
61
|
+
const resultStr = safeStringify(result);
|
|
62
|
+
setSpanAttributes(span, {
|
|
63
|
+
'mcp.duration_ms': duration,
|
|
64
|
+
'mcp.response.size': resultStr?.length,
|
|
65
|
+
});
|
|
66
|
+
if (resultStr && resultStr.length < 1000) {
|
|
67
|
+
span.setAttribute('mcp.response.result', resultStr);
|
|
68
|
+
}
|
|
69
|
+
addSpanEvent(span, 'mcp.response.sent', {
|
|
70
|
+
'response.timestamp': endTime,
|
|
71
|
+
'response.duration_ms': duration,
|
|
72
|
+
}, debug);
|
|
73
|
+
markSpanSuccess(span);
|
|
74
|
+
if (debug) {
|
|
75
|
+
console.log(`[MCP Logger SDK] Response sent (${duration}ms):`, result);
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
// Error 로깅
|
|
81
|
+
recordSpanError(span, error, debug);
|
|
82
|
+
if (debug) {
|
|
83
|
+
console.error(`[MCP Logger SDK] Error occurred:`, error);
|
|
84
|
+
}
|
|
85
|
+
throw error;
|
|
86
|
+
}
|
|
87
|
+
finally {
|
|
88
|
+
span.end();
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
// 래핑된 핸들러로 등록
|
|
93
|
+
return originalSetRequestHandler(requestSchema, wrappedHandler);
|
|
94
|
+
};
|
|
95
|
+
if (debug) {
|
|
96
|
+
console.log('[MCP Logger SDK] Server instrumentation complete');
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=instrumentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../../src/sdk/instrumentation.ts"],"names":[],"mappings":"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"}
|
package/dist/sdk/types.d.ts
CHANGED
|
@@ -1,66 +1,37 @@
|
|
|
1
|
-
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
2
|
-
import { ZodObject, ZodLiteral } from 'zod';
|
|
3
|
-
import { Request, Result } from '@modelcontextprotocol/sdk/types.js';
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* 공통 타입 정의
|
|
7
|
-
*/
|
|
8
|
-
/**
|
|
9
|
-
* 텔레메트리 초기화 옵션
|
|
10
|
-
*/
|
|
11
|
-
interface TelemetryOptions {
|
|
12
|
-
/**
|
|
13
|
-
* API Key for authentication (필수)
|
|
14
|
-
*/
|
|
15
|
-
apiKey: string;
|
|
16
|
-
/**
|
|
17
|
-
* 서비스 이름 (옵션)
|
|
18
|
-
* 지정하지 않으면 자동으로 'mcp-server-{random}' 형식으로 생성
|
|
19
|
-
*/
|
|
20
|
-
serviceName?: string;
|
|
21
|
-
/**
|
|
22
|
-
* 커스텀 OTLP 엔드포인트 (옵션)
|
|
23
|
-
* 기본값: CONFIG.ENDPOINT
|
|
24
|
-
*/
|
|
25
|
-
endpoint?: string;
|
|
26
|
-
/**
|
|
27
|
-
* 디버그 로그 활성화 (옵션)
|
|
28
|
-
*/
|
|
29
|
-
debug?: boolean;
|
|
30
|
-
}
|
|
31
|
-
|
|
32
1
|
/**
|
|
33
2
|
* SDK 타입 정의
|
|
34
3
|
*/
|
|
35
|
-
|
|
4
|
+
import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
5
|
+
import type { ZodObject, ZodLiteral } from 'zod';
|
|
6
|
+
import type { Request, Result } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import type { TelemetryOptions } from '../shared/types.js';
|
|
36
8
|
/**
|
|
37
9
|
* SDK 초기화 옵션 (TelemetryOptions 확장)
|
|
38
10
|
*/
|
|
39
|
-
interface SDKInitOptions extends TelemetryOptions {
|
|
11
|
+
export interface SDKInitOptions extends TelemetryOptions {
|
|
40
12
|
}
|
|
41
13
|
/**
|
|
42
14
|
* MCP JSON-RPC Request 타입
|
|
43
15
|
*/
|
|
44
|
-
type MCPRequest = Request;
|
|
16
|
+
export type MCPRequest = Request;
|
|
45
17
|
/**
|
|
46
18
|
* MCP Result 타입
|
|
47
19
|
*/
|
|
48
|
-
type MCPResult = Result;
|
|
20
|
+
export type MCPResult = Result;
|
|
49
21
|
/**
|
|
50
22
|
* MCP Request Schema 타입
|
|
51
23
|
*/
|
|
52
|
-
type MCPRequestSchema = ZodObject<{
|
|
24
|
+
export type MCPRequestSchema = ZodObject<{
|
|
53
25
|
method: ZodLiteral<string>;
|
|
54
26
|
}>;
|
|
55
27
|
/**
|
|
56
28
|
* Request Handler Extra 타입
|
|
57
29
|
*/
|
|
58
|
-
interface RequestHandlerExtra {
|
|
30
|
+
export interface RequestHandlerExtra {
|
|
59
31
|
signal: AbortSignal;
|
|
60
32
|
}
|
|
61
33
|
/**
|
|
62
34
|
* MCP Server 타입 (재export)
|
|
63
35
|
*/
|
|
64
|
-
type MCPServer = Server;
|
|
65
|
-
|
|
66
|
-
export type { MCPRequest, MCPRequestSchema, MCPResult, MCPServer, RequestHandlerExtra, SDKInitOptions };
|
|
36
|
+
export type MCPServer = Server;
|
|
37
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACxE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,KAAK,CAAC;AACjD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAE3D;;GAEG;AACH,MAAM,WAAW,cAAe,SAAQ,gBAAgB;CAAG;AAE3D;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC;AAEjC;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,CAAC;IACvC,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;CAC5B,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,WAAW,CAAC;CACrB;AAED;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/sdk/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 공통 설정 상수
|
|
3
|
+
*/
|
|
4
|
+
export declare const CONFIG: {
|
|
5
|
+
/**
|
|
6
|
+
* OTLP Endpoint (하드코딩)
|
|
7
|
+
*/
|
|
8
|
+
readonly ENDPOINT: "https://aware.mcypher.com/v1/traces";
|
|
9
|
+
/**
|
|
10
|
+
* SDK 버전
|
|
11
|
+
*/
|
|
12
|
+
readonly SDK_VERSION: "1.0.0";
|
|
13
|
+
/**
|
|
14
|
+
* 서비스 이름 접두사
|
|
15
|
+
*/
|
|
16
|
+
readonly SERVICE_NAME_PREFIX: "mcp-server";
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/shared/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,eAAO,MAAM,MAAM;IACjB;;OAEG;;IAGH;;OAEG;;IAGH;;OAEG;;CAEK,CAAC"}
|
package/dist/shared/config.js
CHANGED
|
@@ -1 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 공통 설정 상수
|
|
3
|
+
*/
|
|
4
|
+
export const CONFIG = {
|
|
5
|
+
/**
|
|
6
|
+
* OTLP Endpoint (하드코딩)
|
|
7
|
+
*/
|
|
8
|
+
ENDPOINT: 'https://aware.mcypher.com/v1/traces',
|
|
9
|
+
/**
|
|
10
|
+
* SDK 버전
|
|
11
|
+
*/
|
|
12
|
+
SDK_VERSION: '1.0.0',
|
|
13
|
+
/**
|
|
14
|
+
* 서비스 이름 접두사
|
|
15
|
+
*/
|
|
16
|
+
SERVICE_NAME_PREFIX: 'mcp-server',
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/shared/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB;;OAEG;IACH,QAAQ,EAAE,qCAAqC;IAE/C;;OAEG;IACH,WAAW,EAAE,OAAO;IAEpB;;OAEG;IACH,mBAAmB,EAAE,YAAY;CACzB,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Span 생성 및 관리 유틸리티
|
|
3
|
+
*/
|
|
4
|
+
import { Span } from '@opentelemetry/api';
|
|
5
|
+
import type { SpanAttributes } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Span에 안전하게 속성 추가
|
|
8
|
+
*/
|
|
9
|
+
export declare function setSpanAttributes(span: Span, attributes: SpanAttributes): void;
|
|
10
|
+
/**
|
|
11
|
+
* Span에 이벤트 추가 (에러 핸들링 포함)
|
|
12
|
+
*/
|
|
13
|
+
export declare function addSpanEvent(span: Span, name: string, attributes?: SpanAttributes, debug?: boolean): void;
|
|
14
|
+
/**
|
|
15
|
+
* Span에 에러 기록
|
|
16
|
+
*/
|
|
17
|
+
export declare function recordSpanError(span: Span, error: Error | unknown, debug?: boolean): void;
|
|
18
|
+
/**
|
|
19
|
+
* Span을 성공으로 마크
|
|
20
|
+
*/
|
|
21
|
+
export declare function markSpanSuccess(span: Span): void;
|
|
22
|
+
/**
|
|
23
|
+
* 객체를 안전하게 JSON 문자열로 변환
|
|
24
|
+
* (circular reference 처리)
|
|
25
|
+
*/
|
|
26
|
+
export declare function safeStringify(obj: any, maxLength?: number): string | null;
|
|
27
|
+
/**
|
|
28
|
+
* Trace context 전파 헤더 생성
|
|
29
|
+
*/
|
|
30
|
+
export declare function getTraceHeaders(): Record<string, string>;
|
|
31
|
+
//# sourceMappingURL=span-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-utils.d.ts","sourceRoot":"","sources":["../../src/shared/span-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,IAAI,EAAkC,MAAM,oBAAoB,CAAC;AAC1E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,GAAG,IAAI,CAM9E;AAED;;GAEG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,cAAc,EAC3B,KAAK,CAAC,EAAE,OAAO,GACd,IAAI,CAYN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK,GAAG,OAAO,EACtB,KAAK,CAAC,EAAE,OAAO,GACd,IAAI,CAoBN;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAEhD;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,GAAE,MAAc,GAAG,MAAM,GAAG,IAAI,CAUhF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAaxD"}
|
|
@@ -1 +1,90 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* Span 생성 및 관리 유틸리티
|
|
3
|
+
*/
|
|
4
|
+
import { SpanStatusCode, context, trace } from '@opentelemetry/api';
|
|
5
|
+
/**
|
|
6
|
+
* Span에 안전하게 속성 추가
|
|
7
|
+
*/
|
|
8
|
+
export function setSpanAttributes(span, attributes) {
|
|
9
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
10
|
+
if (value !== undefined && value !== null) {
|
|
11
|
+
span.setAttribute(key, value);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Span에 이벤트 추가 (에러 핸들링 포함)
|
|
17
|
+
*/
|
|
18
|
+
export function addSpanEvent(span, name, attributes, debug) {
|
|
19
|
+
try {
|
|
20
|
+
if (attributes) {
|
|
21
|
+
span.addEvent(name, attributes);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
span.addEvent(name);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
if (debug) {
|
|
29
|
+
console.error('[MCP Logger] Failed to add span event:', err);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Span에 에러 기록
|
|
35
|
+
*/
|
|
36
|
+
export function recordSpanError(span, error, debug) {
|
|
37
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
38
|
+
const errorName = error instanceof Error ? error.constructor.name : 'Error';
|
|
39
|
+
if (error instanceof Error) {
|
|
40
|
+
span.recordException(error);
|
|
41
|
+
}
|
|
42
|
+
span.setStatus({
|
|
43
|
+
code: SpanStatusCode.ERROR,
|
|
44
|
+
message: errorMessage,
|
|
45
|
+
});
|
|
46
|
+
span.setAttribute('error', true);
|
|
47
|
+
span.setAttribute('error.type', errorName);
|
|
48
|
+
span.setAttribute('error.message', errorMessage);
|
|
49
|
+
if (debug) {
|
|
50
|
+
console.error('[MCP Logger] Error recorded in span:', error);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Span을 성공으로 마크
|
|
55
|
+
*/
|
|
56
|
+
export function markSpanSuccess(span) {
|
|
57
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 객체를 안전하게 JSON 문자열로 변환
|
|
61
|
+
* (circular reference 처리)
|
|
62
|
+
*/
|
|
63
|
+
export function safeStringify(obj, maxLength = 10000) {
|
|
64
|
+
try {
|
|
65
|
+
const str = JSON.stringify(obj);
|
|
66
|
+
if (str.length > maxLength) {
|
|
67
|
+
return str.slice(0, maxLength) + '... (truncated)';
|
|
68
|
+
}
|
|
69
|
+
return str;
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Trace context 전파 헤더 생성
|
|
77
|
+
*/
|
|
78
|
+
export function getTraceHeaders() {
|
|
79
|
+
const headers = {};
|
|
80
|
+
const ctx = context.active();
|
|
81
|
+
const span = trace.getSpan(ctx);
|
|
82
|
+
if (span) {
|
|
83
|
+
const spanContext = span.spanContext();
|
|
84
|
+
if (spanContext) {
|
|
85
|
+
headers['traceparent'] = `00-${spanContext.traceId}-${spanContext.spanId}-01`;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return headers;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=span-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"span-utils.js","sourceRoot":"","sources":["../../src/shared/span-utils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 공통 텔레메트리 레이어
|
|
3
|
+
*
|
|
4
|
+
* OpenTelemetry SDK 초기화 및 관리를 담당합니다.
|
|
5
|
+
* SDK와 CLI 양쪽에서 공통으로 사용됩니다.
|
|
6
|
+
*/
|
|
7
|
+
import { Tracer } from '@opentelemetry/api';
|
|
8
|
+
import type { TelemetryOptions } from './types.js';
|
|
9
|
+
/**
|
|
10
|
+
* OpenTelemetry SDK 초기화
|
|
11
|
+
*/
|
|
12
|
+
export declare function initializeTelemetry(options: TelemetryOptions): Tracer;
|
|
13
|
+
/**
|
|
14
|
+
* 현재 Tracer 반환
|
|
15
|
+
*/
|
|
16
|
+
export declare function getTracer(): Tracer | null;
|
|
17
|
+
/**
|
|
18
|
+
* 초기화 여부 확인
|
|
19
|
+
*/
|
|
20
|
+
export declare function isInitializedTelemetry(): boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Telemetry 종료
|
|
23
|
+
*/
|
|
24
|
+
export declare function shutdownTelemetry(): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../src/shared/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAAS,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEnD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAMnD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAoDrE;AAED;;GAEG;AACH,wBAAgB,SAAS,IAAI,MAAM,GAAG,IAAI,CAEzC;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAEhD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAWvD"}
|
package/dist/shared/telemetry.js
CHANGED
|
@@ -1 +1,91 @@
|
|
|
1
|
-
|
|
1
|
+
/**
|
|
2
|
+
* 공통 텔레메트리 레이어
|
|
3
|
+
*
|
|
4
|
+
* OpenTelemetry SDK 초기화 및 관리를 담당합니다.
|
|
5
|
+
* SDK와 CLI 양쪽에서 공통으로 사용됩니다.
|
|
6
|
+
*/
|
|
7
|
+
import { NodeSDK } from '@opentelemetry/sdk-node';
|
|
8
|
+
import { OTLPTraceExporter } from '@opentelemetry/exporter-trace-otlp-http';
|
|
9
|
+
import { Resource } from '@opentelemetry/resources';
|
|
10
|
+
import { trace } from '@opentelemetry/api';
|
|
11
|
+
import { CONFIG } from './config.js';
|
|
12
|
+
let sdk = null;
|
|
13
|
+
let tracer = null;
|
|
14
|
+
let isInitialized = false;
|
|
15
|
+
/**
|
|
16
|
+
* OpenTelemetry SDK 초기화
|
|
17
|
+
*/
|
|
18
|
+
export function initializeTelemetry(options) {
|
|
19
|
+
if (isInitialized) {
|
|
20
|
+
if (options.debug) {
|
|
21
|
+
console.error('[MCP Logger] Telemetry already initialized, returning existing tracer');
|
|
22
|
+
}
|
|
23
|
+
return tracer;
|
|
24
|
+
}
|
|
25
|
+
// 서비스 이름 생성
|
|
26
|
+
const serviceName = options.serviceName ||
|
|
27
|
+
`${CONFIG.SERVICE_NAME_PREFIX}-${Math.random().toString(36).slice(2, 8)}`;
|
|
28
|
+
if (options.debug) {
|
|
29
|
+
console.error('[MCP Logger] Initializing telemetry...');
|
|
30
|
+
console.error(`[MCP Logger] Endpoint: ${options.endpoint || CONFIG.ENDPOINT}`);
|
|
31
|
+
console.error(`[MCP Logger] Service: ${serviceName}`);
|
|
32
|
+
}
|
|
33
|
+
// SDK 초기화
|
|
34
|
+
sdk = new NodeSDK({
|
|
35
|
+
resource: new Resource({
|
|
36
|
+
["service.name"]: serviceName,
|
|
37
|
+
["service.version"]: CONFIG.SDK_VERSION,
|
|
38
|
+
}),
|
|
39
|
+
traceExporter: new OTLPTraceExporter({
|
|
40
|
+
url: options.endpoint || CONFIG.ENDPOINT,
|
|
41
|
+
headers: {
|
|
42
|
+
'x-api-key': options.apiKey,
|
|
43
|
+
},
|
|
44
|
+
}),
|
|
45
|
+
});
|
|
46
|
+
sdk.start();
|
|
47
|
+
tracer = trace.getTracer('mcp-logger', CONFIG.SDK_VERSION);
|
|
48
|
+
isInitialized = true;
|
|
49
|
+
if (options.debug) {
|
|
50
|
+
console.error('[MCP Logger] Telemetry initialized successfully');
|
|
51
|
+
}
|
|
52
|
+
// 프로세스 종료 시 정리
|
|
53
|
+
const cleanup = async () => {
|
|
54
|
+
if (options.debug) {
|
|
55
|
+
console.error('[MCP Logger] Shutting down telemetry...');
|
|
56
|
+
}
|
|
57
|
+
await shutdownTelemetry();
|
|
58
|
+
};
|
|
59
|
+
process.once('SIGTERM', cleanup);
|
|
60
|
+
process.once('SIGINT', cleanup);
|
|
61
|
+
return tracer;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 현재 Tracer 반환
|
|
65
|
+
*/
|
|
66
|
+
export function getTracer() {
|
|
67
|
+
return tracer;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* 초기화 여부 확인
|
|
71
|
+
*/
|
|
72
|
+
export function isInitializedTelemetry() {
|
|
73
|
+
return isInitialized;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Telemetry 종료
|
|
77
|
+
*/
|
|
78
|
+
export async function shutdownTelemetry() {
|
|
79
|
+
if (sdk) {
|
|
80
|
+
try {
|
|
81
|
+
await sdk.shutdown();
|
|
82
|
+
sdk = null;
|
|
83
|
+
tracer = null;
|
|
84
|
+
isInitialized = false;
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
console.error('[MCP Logger] Error shutting down telemetry:', err);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/shared/telemetry.ts"],"names":[],"mappings":"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"}
|
package/dist/shared/types.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
/**
|
|
5
5
|
* 텔레메트리 초기화 옵션
|
|
6
6
|
*/
|
|
7
|
-
interface TelemetryOptions {
|
|
7
|
+
export interface TelemetryOptions {
|
|
8
8
|
/**
|
|
9
9
|
* API Key for authentication (필수)
|
|
10
10
|
*/
|
|
@@ -27,17 +27,17 @@ interface TelemetryOptions {
|
|
|
27
27
|
/**
|
|
28
28
|
* Span 속성 인터페이스
|
|
29
29
|
*/
|
|
30
|
-
interface SpanAttributes {
|
|
30
|
+
export interface SpanAttributes {
|
|
31
31
|
[key: string]: string | number | boolean | undefined;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
34
|
* MCP 메시지 방향
|
|
35
35
|
*/
|
|
36
|
-
type MessageDirection = 'request' | 'response';
|
|
36
|
+
export type MessageDirection = 'request' | 'response';
|
|
37
37
|
/**
|
|
38
38
|
* JSON-RPC 메시지 타입
|
|
39
39
|
*/
|
|
40
|
-
interface JSONRPCMessage {
|
|
40
|
+
export interface JSONRPCMessage {
|
|
41
41
|
jsonrpc: '2.0';
|
|
42
42
|
id?: string | number;
|
|
43
43
|
method?: string;
|
|
@@ -49,5 +49,4 @@ interface JSONRPCMessage {
|
|
|
49
49
|
data?: any;
|
|
50
50
|
};
|
|
51
51
|
}
|
|
52
|
-
|
|
53
|
-
export type { JSONRPCMessage, MessageDirection, SpanAttributes, TelemetryOptions };
|
|
52
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;CACtD;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,UAAU,CAAC;AAEtD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,CAAC,EAAE,GAAG,CAAC;KACZ,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/shared/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@awarecorp/mcp-logger",
|
|
3
|
-
"version": "0.0.2-dev.
|
|
3
|
+
"version": "0.0.2-dev.1",
|
|
4
4
|
"description": "Unified MCP observability solution - SDK for code integration and CLI for zero-config wrapping",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -14,12 +14,11 @@
|
|
|
14
14
|
"!dist/cli/**/*.d.ts"
|
|
15
15
|
],
|
|
16
16
|
"scripts": {
|
|
17
|
-
"build": "
|
|
18
|
-
"build:readable": "npm run clean && tsc",
|
|
17
|
+
"build": "tsc",
|
|
19
18
|
"prepublishOnly": "npm run build",
|
|
20
19
|
"clean": "rm -rf dist",
|
|
21
20
|
"dev": "tsc --watch",
|
|
22
|
-
"test:cli": "npm run build
|
|
21
|
+
"test:cli": "npm run build && node bin/mcp-logger.js --help",
|
|
23
22
|
"publish:stable": "npm run build && npm publish --access public",
|
|
24
23
|
"publish:dev": "npm run build && npm publish --access public --tag dev",
|
|
25
24
|
"version:patch": "npm version patch",
|
|
@@ -49,21 +48,16 @@
|
|
|
49
48
|
}
|
|
50
49
|
},
|
|
51
50
|
"dependencies": {
|
|
51
|
+
"@opentelemetry/sdk-node": "^0.52.0",
|
|
52
52
|
"@opentelemetry/api": "^1.9.0",
|
|
53
53
|
"@opentelemetry/exporter-trace-otlp-http": "^0.52.0",
|
|
54
54
|
"@opentelemetry/resources": "^1.25.0",
|
|
55
|
-
"@opentelemetry/sdk-node": "^0.52.0",
|
|
56
55
|
"@opentelemetry/semantic-conventions": "^1.25.0",
|
|
57
56
|
"commander": "^11.1.0"
|
|
58
57
|
},
|
|
59
58
|
"devDependencies": {
|
|
60
|
-
"@modelcontextprotocol/sdk": "^0.5.0",
|
|
61
|
-
"@rollup/plugin-terser": "^0.4.4",
|
|
62
|
-
"@rollup/plugin-typescript": "^12.1.4",
|
|
63
59
|
"@types/node": "^20.0.0",
|
|
64
|
-
"
|
|
65
|
-
"rollup-plugin-dts": "^6.2.3",
|
|
66
|
-
"tslib": "^2.8.1",
|
|
60
|
+
"@modelcontextprotocol/sdk": "^0.5.0",
|
|
67
61
|
"typescript": "^5.3.0"
|
|
68
62
|
},
|
|
69
63
|
"engines": {
|