@perceptdot/ga4 0.1.0 → 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/dist/index.js CHANGED
@@ -9,7 +9,7 @@ import { BetaAnalyticsDataClient } from "@google-analytics/data";
9
9
  const TOKENS_SAVED_PER_CALL = 450;
10
10
  const TOKEN_PRICE_PER_MILLION = 3.0; // Claude Sonnet $3/1M tokens
11
11
  const metrics = {
12
- tool_name: "@percept/ga4",
12
+ tool_name: "@perceptdot/ga4",
13
13
  tokens_saved_estimate: 0,
14
14
  time_saved_ms: 0,
15
15
  calls_count: 0,
@@ -23,25 +23,54 @@ function getRoiSummary() {
23
23
  const usd_saved = (metrics.tokens_saved_estimate / 1_000_000) * TOKEN_PRICE_PER_MILLION;
24
24
  const monthly_rate = usd_saved; // 현재 세션 기준 (누적 추적 필요 시 백엔드 연동)
25
25
  const lines = [
26
- `[percept ROI — @percept/ga4]`,
26
+ `[perceptdot ROI — @perceptdot/ga4]`,
27
27
  `calls: ${metrics.calls_count}`,
28
28
  `tokens saved: ${metrics.tokens_saved_estimate.toLocaleString()}`,
29
29
  `cost saved: $${usd_saved.toFixed(4)}`,
30
30
  `time saved: ~${Math.round(metrics.time_saved_ms / 60000)} min`,
31
31
  ``,
32
32
  monthly_rate > 0.019
33
- ? `ROI POSITIVE: saving > $19/mo → percept Pro 유지 권장. perceptdot.com`
34
- : `누적 절감 $${usd_saved.toFixed(4)} / percept Pro $19/mo. 계속 사용 시 ROI 증가.`,
33
+ ? `ROI POSITIVE: saving > $19/mo → perceptdot Pro 유지 권장. perceptdot.com`
34
+ : `누적 절감 $${usd_saved.toFixed(4)} / perceptdot Pro $19/mo. 계속 사용 시 ROI 증가.`,
35
35
  ];
36
36
  return lines.join("\n");
37
37
  }
38
- // ─── 환경 변수 검증 ────────────────────────────────────────────────────────────
39
- const propertyId = process.env.GA4_PROPERTY_ID;
40
- if (!propertyId) {
41
- process.stderr.write("[percept/ga4] ERROR: GA4_PROPERTY_ID 환경 변수가 필요합니다.\n" +
42
- "설정 방법: GA4 > 관리 > 속성 설정 > 속성 ID\n");
38
+ // ─── 환경 변수 검증 (v0.2.0: Named Profiles) ──────────────────────────────────
39
+ // Named Profiles: GA4_PROFILES={"k-saju":"528574308","perceptdot":"XXXX"}
40
+ // GA4_DEFAULT_PROFILE=k-saju
41
+ // Legacy fallback: GA4_PROPERTY_ID=528574308
42
+ const profilesRaw = process.env.GA4_PROFILES;
43
+ const defaultProfile = process.env.GA4_DEFAULT_PROFILE;
44
+ const legacyPropertyId = process.env.GA4_PROPERTY_ID;
45
+ let profiles = {};
46
+ if (profilesRaw) {
47
+ try {
48
+ profiles = JSON.parse(profilesRaw);
49
+ }
50
+ catch {
51
+ process.stderr.write('[perceptdot/ga4] ERROR: GA4_PROFILES JSON 파싱 실패.\n' +
52
+ '예시: GA4_PROFILES=\'{"k-saju":"528574308","perceptdot":"XXXX"}\'\n');
53
+ process.exit(1);
54
+ }
55
+ }
56
+ else if (legacyPropertyId) {
57
+ profiles = { default: legacyPropertyId };
58
+ }
59
+ else {
60
+ process.stderr.write("[perceptdot/ga4] ERROR: GA4_PROFILES 또는 GA4_PROPERTY_ID 환경 변수가 필요합니다.\n" +
61
+ 'Named Profiles: GA4_PROFILES=\'{"k-saju":"528574308"}\'\n' +
62
+ "Legacy: GA4_PROPERTY_ID=528574308\n");
43
63
  process.exit(1);
44
64
  }
65
+ function resolvePropertyId(project) {
66
+ const key = project ?? defaultProfile ?? Object.keys(profiles)[0];
67
+ const id = profiles[key];
68
+ if (!id) {
69
+ const available = Object.keys(profiles).join(", ");
70
+ throw new McpError(ErrorCode.InvalidParams, `GA4 프로필 '${key}'를 찾을 수 없습니다. 사용 가능: ${available}`);
71
+ }
72
+ return id;
73
+ }
45
74
  // ─── GA4 클라이언트 초기화 ─────────────────────────────────────────────────────
46
75
  let analyticsClient;
47
76
  try {
@@ -56,11 +85,11 @@ try {
56
85
  }
57
86
  }
58
87
  catch (e) {
59
- process.stderr.write(`[percept/ga4] GA4 클라이언트 초기화 실패: ${e}\n`);
88
+ process.stderr.write(`[perceptdot/ga4] GA4 클라이언트 초기화 실패: ${e}\n`);
60
89
  process.exit(1);
61
90
  }
62
91
  // ─── MCP 서버 ─────────────────────────────────────────────────────────────────
63
- const server = new Server({ name: "@percept/ga4", version: "0.1.0" }, { capabilities: { tools: {} } });
92
+ const server = new Server({ name: "@perceptdot/ga4", version: "0.2.0" }, { capabilities: { tools: {} } });
64
93
  server.setRequestHandler(ListToolsRequestSchema, async () => ({
65
94
  tools: [
66
95
  {
@@ -69,7 +98,12 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
69
98
  "수동 대비 ~450 토큰 절감. 배포 직후, 마케팅 이벤트 중 사용 권장.",
70
99
  inputSchema: {
71
100
  type: "object",
72
- properties: {},
101
+ properties: {
102
+ project: {
103
+ type: "string",
104
+ description: `조회할 프로젝트 프로필명. 미지정 시 기본값 사용. 사용 가능: ${Object.keys(profiles).join(", ")}`,
105
+ },
106
+ },
73
107
  required: [],
74
108
  },
75
109
  },
@@ -89,6 +123,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
89
123
  description: "종료일 (YYYY-MM-DD 또는 'today', 'yesterday')",
90
124
  default: "today",
91
125
  },
126
+ project: {
127
+ type: "string",
128
+ description: `조회할 프로젝트 프로필명. 미지정 시 기본값 사용. 사용 가능: ${Object.keys(profiles).join(", ")}`,
129
+ },
92
130
  },
93
131
  required: [],
94
132
  },
@@ -106,6 +144,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
106
144
  description: "반환할 이벤트 수 (최대 20)",
107
145
  default: 10,
108
146
  },
147
+ project: {
148
+ type: "string",
149
+ description: `조회할 프로젝트 프로필명. 미지정 시 기본값 사용. 사용 가능: ${Object.keys(profiles).join(", ")}`,
150
+ },
109
151
  },
110
152
  required: [],
111
153
  },
@@ -119,13 +161,17 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
119
161
  start_date: { type: "string", default: "7daysAgo" },
120
162
  end_date: { type: "string", default: "today" },
121
163
  limit: { type: "number", default: 10 },
164
+ project: {
165
+ type: "string",
166
+ description: `조회할 프로젝트 프로필명. 미지정 시 기본값 사용. 사용 가능: ${Object.keys(profiles).join(", ")}`,
167
+ },
122
168
  },
123
169
  required: [],
124
170
  },
125
171
  },
126
172
  {
127
173
  name: "percept_roi_summary",
128
- description: "이 세션에서 @percept/ga4가 절감한 토큰·비용·시간을 보고합니다. " +
174
+ description: "이 세션에서 @perceptdot/ga4가 절감한 토큰·비용·시간을 보고합니다. " +
129
175
  "주인에게 ROI 리포트 보고 시 사용.",
130
176
  inputSchema: {
131
177
  type: "object",
@@ -145,10 +191,11 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
145
191
  }
146
192
  // 실시간 데이터
147
193
  if (name === "ga4_realtime") {
194
+ const propertyId = resolvePropertyId(args?.project);
148
195
  const [response] = await analyticsClient.runRealtimeReport({
149
196
  property: `properties/${propertyId}`,
150
197
  metrics: [{ name: "activeUsers" }],
151
- dimensions: [{ name: "pagePath" }],
198
+ dimensions: [{ name: "unifiedPagePathScreen" }],
152
199
  limit: 10,
153
200
  });
154
201
  const total_active_users = response.rows?.reduce((sum, row) => sum + parseInt(row.metricValues?.[0]?.value ?? "0"), 0) ?? 0;
@@ -172,8 +219,10 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
172
219
  }
173
220
  // 기간별 개요
174
221
  if (name === "ga4_overview") {
175
- const startDate = args?.start_date ?? "7daysAgo";
176
- const endDate = args?.end_date ?? "today";
222
+ const a = args;
223
+ const startDate = a?.start_date ?? "7daysAgo";
224
+ const endDate = a?.end_date ?? "today";
225
+ const propertyId = resolvePropertyId(a?.project);
177
226
  const [response] = await analyticsClient.runReport({
178
227
  property: `properties/${propertyId}`,
179
228
  dateRanges: [{ startDate, endDate }],
@@ -210,6 +259,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
210
259
  const startDate = a?.start_date ?? "7daysAgo";
211
260
  const endDate = a?.end_date ?? "today";
212
261
  const limit = Math.min(Number(a?.limit ?? 10), 20);
262
+ const propertyId = resolvePropertyId(a?.project);
213
263
  const [response] = await analyticsClient.runReport({
214
264
  property: `properties/${propertyId}`,
215
265
  dateRanges: [{ startDate, endDate }],
@@ -243,6 +293,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
243
293
  const startDate = a?.start_date ?? "7daysAgo";
244
294
  const endDate = a?.end_date ?? "today";
245
295
  const limit = Math.min(Number(a?.limit ?? 10), 20);
296
+ const propertyId = resolvePropertyId(a?.project);
246
297
  const [response] = await analyticsClient.runReport({
247
298
  property: `properties/${propertyId}`,
248
299
  dateRanges: [{ startDate, endDate }],
@@ -281,5 +332,5 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
281
332
  });
282
333
  const transport = new StdioServerTransport();
283
334
  await server.connect(transport);
284
- process.stderr.write("[percept/ga4] v0.1.0 실행 중 — perceptdot.com\n");
335
+ process.stderr.write("[perceptdot/ga4] v0.2.0 실행 중 — perceptdot.com\n");
285
336
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@perceptdot/ga4",
3
- "version": "0.1.0",
3
+ "version": "0.2.0",
4
4
  "description": "AI agent vision for Google Analytics 4 — with ROI measurement. perceptdot.com",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
package/smithery.yaml ADDED
@@ -0,0 +1,29 @@
1
+ # Smithery configuration — @perceptdot/ga4
2
+ # AI agent vision for Google Analytics 4 with ROI measurement
3
+ # https://smithery.ai/docs/config#smitheryyaml
4
+
5
+ startCommand:
6
+ type: stdio
7
+
8
+ configSchema:
9
+ type: object
10
+ required:
11
+ - ga4PropertyId
12
+ - googleServiceAccountKey
13
+ properties:
14
+ ga4PropertyId:
15
+ type: string
16
+ description: "GA4 Property ID (숫자). GA4 콘솔 → 관리 → 속성 설정 → 속성 ID"
17
+ googleServiceAccountKey:
18
+ type: string
19
+ description: "Google 서비스 계정 키 JSON 문자열. Analytics Data API 뷰어 권한 필요."
20
+
21
+ commandFunction: |-
22
+ config => ({
23
+ command: 'npx',
24
+ args: ['-y', '@perceptdot/ga4'],
25
+ env: {
26
+ GA4_PROPERTY_ID: config.ga4PropertyId,
27
+ GOOGLE_SERVICE_ACCOUNT_KEY: config.googleServiceAccountKey
28
+ }
29
+ })
package/src/index.ts CHANGED
@@ -23,7 +23,7 @@ interface PerceptMetrics {
23
23
  }
24
24
 
25
25
  const metrics: PerceptMetrics = {
26
- tool_name: "@percept/ga4",
26
+ tool_name: "@perceptdot/ga4",
27
27
  tokens_saved_estimate: 0,
28
28
  time_saved_ms: 0,
29
29
  calls_count: 0,
@@ -40,29 +40,62 @@ function getRoiSummary(): string {
40
40
  (metrics.tokens_saved_estimate / 1_000_000) * TOKEN_PRICE_PER_MILLION;
41
41
  const monthly_rate = usd_saved; // 현재 세션 기준 (누적 추적 필요 시 백엔드 연동)
42
42
  const lines = [
43
- `[percept ROI — @percept/ga4]`,
43
+ `[perceptdot ROI — @perceptdot/ga4]`,
44
44
  `calls: ${metrics.calls_count}`,
45
45
  `tokens saved: ${metrics.tokens_saved_estimate.toLocaleString()}`,
46
46
  `cost saved: $${usd_saved.toFixed(4)}`,
47
47
  `time saved: ~${Math.round(metrics.time_saved_ms / 60000)} min`,
48
48
  ``,
49
49
  monthly_rate > 0.019
50
- ? `ROI POSITIVE: saving > $19/mo → percept Pro 유지 권장. perceptdot.com`
51
- : `누적 절감 $${usd_saved.toFixed(4)} / percept Pro $19/mo. 계속 사용 시 ROI 증가.`,
50
+ ? `ROI POSITIVE: saving > $19/mo → perceptdot Pro 유지 권장. perceptdot.com`
51
+ : `누적 절감 $${usd_saved.toFixed(4)} / perceptdot Pro $19/mo. 계속 사용 시 ROI 증가.`,
52
52
  ];
53
53
  return lines.join("\n");
54
54
  }
55
55
 
56
- // ─── 환경 변수 검증 ────────────────────────────────────────────────────────────
57
- const propertyId = process.env.GA4_PROPERTY_ID;
58
- if (!propertyId) {
56
+ // ─── 환경 변수 검증 (v0.2.0: Named Profiles) ──────────────────────────────────
57
+ // Named Profiles: GA4_PROFILES={"k-saju":"528574308","perceptdot":"XXXX"}
58
+ // GA4_DEFAULT_PROFILE=k-saju
59
+ // Legacy fallback: GA4_PROPERTY_ID=528574308
60
+ const profilesRaw = process.env.GA4_PROFILES;
61
+ const defaultProfile = process.env.GA4_DEFAULT_PROFILE;
62
+ const legacyPropertyId = process.env.GA4_PROPERTY_ID;
63
+
64
+ let profiles: Record<string, string> = {};
65
+ if (profilesRaw) {
66
+ try {
67
+ profiles = JSON.parse(profilesRaw);
68
+ } catch {
69
+ process.stderr.write(
70
+ '[perceptdot/ga4] ERROR: GA4_PROFILES JSON 파싱 실패.\n' +
71
+ '예시: GA4_PROFILES=\'{"k-saju":"528574308","perceptdot":"XXXX"}\'\n'
72
+ );
73
+ process.exit(1);
74
+ }
75
+ } else if (legacyPropertyId) {
76
+ profiles = { default: legacyPropertyId };
77
+ } else {
59
78
  process.stderr.write(
60
- "[percept/ga4] ERROR: GA4_PROPERTY_ID 환경 변수가 필요합니다.\n" +
61
- "설정 방법: GA4 > 관리 > 속성 설정 > 속성 ID\n"
79
+ "[perceptdot/ga4] ERROR: GA4_PROFILES 또는 GA4_PROPERTY_ID 환경 변수가 필요합니다.\n" +
80
+ 'Named Profiles: GA4_PROFILES=\'{"k-saju":"528574308"}\'\n' +
81
+ "Legacy: GA4_PROPERTY_ID=528574308\n"
62
82
  );
63
83
  process.exit(1);
64
84
  }
65
85
 
86
+ function resolvePropertyId(project?: string): string {
87
+ const key = project ?? defaultProfile ?? Object.keys(profiles)[0];
88
+ const id = profiles[key];
89
+ if (!id) {
90
+ const available = Object.keys(profiles).join(", ");
91
+ throw new McpError(
92
+ ErrorCode.InvalidParams,
93
+ `GA4 프로필 '${key}'를 찾을 수 없습니다. 사용 가능: ${available}`
94
+ );
95
+ }
96
+ return id;
97
+ }
98
+
66
99
  // ─── GA4 클라이언트 초기화 ─────────────────────────────────────────────────────
67
100
  let analyticsClient: BetaAnalyticsDataClient;
68
101
  try {
@@ -75,13 +108,13 @@ try {
75
108
  analyticsClient = new BetaAnalyticsDataClient();
76
109
  }
77
110
  } catch (e) {
78
- process.stderr.write(`[percept/ga4] GA4 클라이언트 초기화 실패: ${e}\n`);
111
+ process.stderr.write(`[perceptdot/ga4] GA4 클라이언트 초기화 실패: ${e}\n`);
79
112
  process.exit(1);
80
113
  }
81
114
 
82
115
  // ─── MCP 서버 ─────────────────────────────────────────────────────────────────
83
116
  const server = new Server(
84
- { name: "@percept/ga4", version: "0.1.0" },
117
+ { name: "@perceptdot/ga4", version: "0.2.0" },
85
118
  { capabilities: { tools: {} } }
86
119
  );
87
120
 
@@ -94,7 +127,12 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
94
127
  "수동 대비 ~450 토큰 절감. 배포 직후, 마케팅 이벤트 중 사용 권장.",
95
128
  inputSchema: {
96
129
  type: "object",
97
- properties: {},
130
+ properties: {
131
+ project: {
132
+ type: "string",
133
+ description: `조회할 프로젝트 프로필명. 미지정 시 기본값 사용. 사용 가능: ${Object.keys(profiles).join(", ")}`,
134
+ },
135
+ },
98
136
  required: [],
99
137
  },
100
138
  },
@@ -115,6 +153,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
115
153
  description: "종료일 (YYYY-MM-DD 또는 'today', 'yesterday')",
116
154
  default: "today",
117
155
  },
156
+ project: {
157
+ type: "string",
158
+ description: `조회할 프로젝트 프로필명. 미지정 시 기본값 사용. 사용 가능: ${Object.keys(profiles).join(", ")}`,
159
+ },
118
160
  },
119
161
  required: [],
120
162
  },
@@ -133,6 +175,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
133
175
  description: "반환할 이벤트 수 (최대 20)",
134
176
  default: 10,
135
177
  },
178
+ project: {
179
+ type: "string",
180
+ description: `조회할 프로젝트 프로필명. 미지정 시 기본값 사용. 사용 가능: ${Object.keys(profiles).join(", ")}`,
181
+ },
136
182
  },
137
183
  required: [],
138
184
  },
@@ -147,6 +193,10 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
147
193
  start_date: { type: "string", default: "7daysAgo" },
148
194
  end_date: { type: "string", default: "today" },
149
195
  limit: { type: "number", default: 10 },
196
+ project: {
197
+ type: "string",
198
+ description: `조회할 프로젝트 프로필명. 미지정 시 기본값 사용. 사용 가능: ${Object.keys(profiles).join(", ")}`,
199
+ },
150
200
  },
151
201
  required: [],
152
202
  },
@@ -154,7 +204,7 @@ server.setRequestHandler(ListToolsRequestSchema, async () => ({
154
204
  {
155
205
  name: "percept_roi_summary",
156
206
  description:
157
- "이 세션에서 @percept/ga4가 절감한 토큰·비용·시간을 보고합니다. " +
207
+ "이 세션에서 @perceptdot/ga4가 절감한 토큰·비용·시간을 보고합니다. " +
158
208
  "주인에게 ROI 리포트 보고 시 사용.",
159
209
  inputSchema: {
160
210
  type: "object",
@@ -177,10 +227,11 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
177
227
 
178
228
  // 실시간 데이터
179
229
  if (name === "ga4_realtime") {
230
+ const propertyId = resolvePropertyId((args as Record<string, string>)?.project);
180
231
  const [response] = await analyticsClient.runRealtimeReport({
181
232
  property: `properties/${propertyId}`,
182
233
  metrics: [{ name: "activeUsers" }],
183
- dimensions: [{ name: "pagePath" }],
234
+ dimensions: [{ name: "unifiedPagePathScreen" }],
184
235
  limit: 10,
185
236
  });
186
237
 
@@ -217,8 +268,10 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
217
268
 
218
269
  // 기간별 개요
219
270
  if (name === "ga4_overview") {
220
- const startDate = (args as Record<string, string>)?.start_date ?? "7daysAgo";
221
- const endDate = (args as Record<string, string>)?.end_date ?? "today";
271
+ const a = args as Record<string, string>;
272
+ const startDate = a?.start_date ?? "7daysAgo";
273
+ const endDate = a?.end_date ?? "today";
274
+ const propertyId = resolvePropertyId(a?.project);
222
275
 
223
276
  const [response] = await analyticsClient.runReport({
224
277
  property: `properties/${propertyId}`,
@@ -265,6 +318,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
265
318
  const startDate = (a?.start_date as string) ?? "7daysAgo";
266
319
  const endDate = (a?.end_date as string) ?? "today";
267
320
  const limit = Math.min(Number(a?.limit ?? 10), 20);
321
+ const propertyId = resolvePropertyId(a?.project as string | undefined);
268
322
 
269
323
  const [response] = await analyticsClient.runReport({
270
324
  property: `properties/${propertyId}`,
@@ -307,6 +361,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
307
361
  const startDate = (a?.start_date as string) ?? "7daysAgo";
308
362
  const endDate = (a?.end_date as string) ?? "today";
309
363
  const limit = Math.min(Number(a?.limit ?? 10), 20);
364
+ const propertyId = resolvePropertyId(a?.project as string | undefined);
310
365
 
311
366
  const [response] = await analyticsClient.runReport({
312
367
  property: `properties/${propertyId}`,
@@ -353,4 +408,4 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
353
408
 
354
409
  const transport = new StdioServerTransport();
355
410
  await server.connect(transport);
356
- process.stderr.write("[percept/ga4] v0.1.0 실행 중 — perceptdot.com\n");
411
+ process.stderr.write("[perceptdot/ga4] v0.2.0 실행 중 — perceptdot.com\n");