@autodevjapan/godd-mcp-alpha 1.25.20 → 1.25.21

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 (3) hide show
  1. package/README.md +36 -0
  2. package/dist/godd.cjs +118 -6
  3. package/package.json +1 -1
package/README.md CHANGED
@@ -57,6 +57,17 @@ After installation, restart Cursor IDE and the GoDD MCP α server will start aut
57
57
 
58
58
  **Option 2 — Natural language in Agent mode:** In Cursor's Agent mode, you can ask the AI in plain language (e.g., "run dev", "do a review") and the AI will automatically detect and call the appropriate GoDD tool.
59
59
 
60
+ ### Token Efficiency
61
+
62
+ GoDD MCP delivers prompts **on demand** — only the prompt you call is sent to the AI's context. This is fundamentally different from Cursor Rules, which loads all rules into every conversation from the start.
63
+
64
+ | Approach | How it works | Token cost per call |
65
+ |---|---|---|
66
+ | **Cursor Rules** | All rules always in context | ~80,000 tokens × every chat |
67
+ | **GoDD MCP** | Only the called prompt, when called | ~2,000–5,000 tokens per call |
68
+
69
+ Use `/metrics` at any time during a session to see your actual token usage and estimated savings vs. the Cursor Rules baseline.
70
+
60
71
  ### GoDD Prompts
61
72
 
62
73
  Available GoDD prompts (MCP tools) in Cursor IDE:
@@ -86,6 +97,7 @@ Available GoDD prompts (MCP tools) in Cursor IDE:
86
97
  | `diagram` | Auto-update architecture diagrams (maintain living Mermaid docs in sync with code) |
87
98
  | `slide` | Generate presentation slides from project docs (Marp Markdown format) |
88
99
  | `design` | Generate/update visual designs from codebase (Pencil.dev sync) |
100
+ | `metrics` | Token efficiency report — show prompt tokens delivered this session vs. always-on Cursor Rules baseline |
89
101
 
90
102
  ### CLI Commands
91
103
 
@@ -201,6 +213,17 @@ godd-a init --auto
201
213
 
202
214
  **方法 2 — Agent モードでの自然言語指示:** Cursor の Agent モードでは、自然言語で指示するだけで AI が適切な GoDD ツールを自動的に検出して呼び出します(例:「dev して」「レビューして」)。
203
215
 
216
+ ### トークン効率
217
+
218
+ GoDD MCP はプロンプトを**オンデマンドで配信**します。呼び出したプロンプトだけが AI のコンテキストに送られます。全ルールを毎会話の開始から常時コンテキストに含める Cursor Rules とは根本的に異なります。
219
+
220
+ | 方式 | 仕組み | 1回あたりのトークンコスト |
221
+ |---|---|---|
222
+ | **Cursor Rules** | 全ルールを常時コンテキストに含む | ~80,000 tokens × 毎会話 |
223
+ | **GoDD MCP** | 呼び出したプロンプトだけを必要なときに配信 | ~2,000〜5,000 tokens / 呼び出し |
224
+
225
+ セッション中いつでも `/metrics` を実行すると、実際のトークン使用量と Cursor Rules 方式との節約推定値を確認できます。
226
+
204
227
  ### GoDD プロンプト一覧
205
228
 
206
229
  Cursor IDE 上で利用できる GoDD プロンプト(MCP ツール)の一覧です。
@@ -230,6 +253,7 @@ Cursor IDE 上で利用できる GoDD プロンプト(MCP ツール)の一
230
253
  | `diagram` | アーキテクチャ図の自動更新(コードと同期した Mermaid ドキュメントを維持) |
231
254
  | `slide` | プロジェクトドキュメントからプレゼンスライドを生成(Marp Markdown 形式) |
232
255
  | `design` | コードベースからビジュアルデザインを生成/更新(Pencil.dev 同期) |
256
+ | `metrics` | トークン効率レポート — このセッションの配信トークン数と Cursor Rules 常時読み込み方式との比較 |
233
257
 
234
258
  ### CLI コマンド
235
259
 
@@ -345,6 +369,17 @@ godd-a init --auto
345
369
 
346
370
  **Способ 2 — Естественный язык в режиме Agent:** В режиме Agent Cursor можно просто попросить AI использовать нужный инструмент (например, «запусти dev», «сделай review») — AI автоматически обнаружит и вызовет соответствующий инструмент GoDD.
347
371
 
372
+ ### Эффективность токенов
373
+
374
+ GoDD MCP доставляет промпты **по требованию** — в контекст AI отправляется только вызванный промпт. Это принципиально отличается от Cursor Rules, где все правила загружаются в контекст с самого начала каждого чата.
375
+
376
+ | Подход | Принцип работы | Стоимость токенов за вызов |
377
+ |---|---|---|
378
+ | **Cursor Rules** | Все правила всегда в контексте | ~80 000 токенов × каждый чат |
379
+ | **GoDD MCP** | Только нужный промпт, только когда нужен | ~2 000–5 000 токенов за вызов |
380
+
381
+ В любой момент сессии введите `/metrics`, чтобы увидеть фактическое использование токенов и расчётную экономию по сравнению с подходом Cursor Rules.
382
+
348
383
  ### Список промптов GoDD
349
384
 
350
385
  Доступные промпты GoDD (MCP-инструменты) в Cursor IDE:
@@ -374,6 +409,7 @@ godd-a init --auto
374
409
  | `diagram` | Автообновление архитектурных диаграмм (поддержка актуальных Mermaid-документов) |
375
410
  | `slide` | Генерация презентационных слайдов из документации проекта (формат Marp Markdown) |
376
411
  | `design` | Генерация/обновление визуального дизайна из кодовой базы (синхронизация с Pencil.dev) |
412
+ | `metrics` | Отчёт об эффективности токенов — токены этой сессии vs. базовый уровень Cursor Rules |
377
413
 
378
414
  ### Команды CLI
379
415
 
package/dist/godd.cjs CHANGED
@@ -35693,7 +35693,7 @@ function formatConfigIssuesForAI(issues, lang = "ja") {
35693
35693
  }
35694
35694
 
35695
35695
  // src/version.ts
35696
- var VERSION = true ? "1.25.20" : "0.0.0-dev";
35696
+ var VERSION = true ? "1.25.21" : "0.0.0-dev";
35697
35697
 
35698
35698
  // src/tools/base.ts
35699
35699
  var PROMPT_DESCRIPTIONS = {
@@ -35721,7 +35721,8 @@ var PROMPT_DESCRIPTIONS = {
35721
35721
  learn: "Save/recall project-specific patterns, conventions, and pitfalls",
35722
35722
  diagram: "Auto-update architecture diagrams (maintain living Mermaid docs in sync with code)",
35723
35723
  slide: "Generate presentation slides from project docs (Marp Markdown format)",
35724
- design: "Generate/update visual designs from codebase (Pencil.dev sync)"
35724
+ design: "Generate/update visual designs from codebase (Pencil.dev sync)",
35725
+ metrics: "Token efficiency report \u2014 show prompt tokens delivered this session vs. always-on Cursor Rules baseline"
35725
35726
  },
35726
35727
  ja: {
35727
35728
  dev: "\u958B\u767A\uFF08\u6BB5\u968E\u7684\u306B\u8A08\u753B\u2192\u5B9F\u88C5\u2192\u30C6\u30B9\u30C8\u2192\u54C1\u8CEA\u2192\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u5B9F\u884C\uFF09",
@@ -35747,7 +35748,8 @@ var PROMPT_DESCRIPTIONS = {
35747
35748
  learn: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u56FA\u6709\u306E\u30D1\u30BF\u30FC\u30F3\u30FB\u6163\u4F8B\u30FB\u843D\u3068\u3057\u7A74\u3092\u4FDD\u5B58/\u53C2\u7167",
35748
35749
  diagram: "\u30A2\u30FC\u30AD\u30C6\u30AF\u30C1\u30E3\u56F3\u306E\u81EA\u52D5\u66F4\u65B0\uFF08\u30B3\u30FC\u30C9\u3068\u540C\u671F\u3057\u305F Mermaid \u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u3092\u7DAD\u6301\uFF09",
35749
35750
  slide: "\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30C9\u30AD\u30E5\u30E1\u30F3\u30C8\u304B\u3089\u30D7\u30EC\u30BC\u30F3\u30B9\u30E9\u30A4\u30C9\u3092\u751F\u6210\uFF08Marp Markdown \u5F62\u5F0F\uFF09",
35750
- design: "\u30B3\u30FC\u30C9\u30D9\u30FC\u30B9\u304B\u3089\u30D3\u30B8\u30E5\u30A2\u30EB\u30C7\u30B6\u30A4\u30F3\u3092\u751F\u6210/\u66F4\u65B0\uFF08Pencil.dev \u540C\u671F\uFF09"
35751
+ design: "\u30B3\u30FC\u30C9\u30D9\u30FC\u30B9\u304B\u3089\u30D3\u30B8\u30E5\u30A2\u30EB\u30C7\u30B6\u30A4\u30F3\u3092\u751F\u6210/\u66F4\u65B0\uFF08Pencil.dev \u540C\u671F\uFF09",
35752
+ metrics: "\u30C8\u30FC\u30AF\u30F3\u52B9\u7387\u30EC\u30DD\u30FC\u30C8 \u2014 \u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3\u3067\u914D\u4FE1\u3057\u305F\u30D7\u30ED\u30F3\u30D7\u30C8\u30C8\u30FC\u30AF\u30F3\u6570\u3068 Cursor Rules \u5E38\u6642\u8AAD\u307F\u8FBC\u307F\u65B9\u5F0F\u3068\u306E\u6BD4\u8F03"
35751
35753
  },
35752
35754
  ru: {
35753
35755
  dev: "\u0420\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u043A\u0430 (\u043F\u043B\u0430\u043D \u2192 \u0440\u0435\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u2192 \u0442\u0435\u0441\u0442\u044B \u2192 \u043A\u0430\u0447\u0435\u0441\u0442\u0432\u043E \u2192 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u0430\u0446\u0438\u044F \u043F\u043E\u044D\u0442\u0430\u043F\u043D\u043E)",
@@ -35773,7 +35775,8 @@ var PROMPT_DESCRIPTIONS = {
35773
35775
  learn: "\u0421\u043E\u0445\u0440\u0430\u043D\u0435\u043D\u0438\u0435/\u0432\u044B\u0437\u043E\u0432 \u0441\u043F\u0435\u0446\u0438\u0444\u0438\u0447\u043D\u044B\u0445 \u0434\u043B\u044F \u043F\u0440\u043E\u0435\u043A\u0442\u0430 \u043F\u0430\u0442\u0442\u0435\u0440\u043D\u043E\u0432, \u0441\u043E\u0433\u043B\u0430\u0448\u0435\u043D\u0438\u0439 \u0438 \u043F\u043E\u0434\u0432\u043E\u0434\u043D\u044B\u0445 \u043A\u0430\u043C\u043D\u0435\u0439",
35774
35776
  diagram: "\u0410\u0432\u0442\u043E\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043A\u0442\u0443\u0440\u043D\u044B\u0445 \u0434\u0438\u0430\u0433\u0440\u0430\u043C\u043C (\u043F\u043E\u0434\u0434\u0435\u0440\u0436\u043A\u0430 \u0430\u043A\u0442\u0443\u0430\u043B\u044C\u043D\u044B\u0445 Mermaid-\u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432)",
35775
35777
  slide: "\u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F \u0441\u043B\u0430\u0439\u0434\u043E\u0432 \u0438\u0437 \u0434\u043E\u043A\u0443\u043C\u0435\u043D\u0442\u043E\u0432 \u043F\u0440\u043E\u0435\u043A\u0442\u0430 (\u0444\u043E\u0440\u043C\u0430\u0442 Marp Markdown)",
35776
- design: "\u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F/\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0432\u0438\u0437\u0443\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0434\u0438\u0437\u0430\u0439\u043D\u0430 \u0438\u0437 \u043A\u043E\u0434\u043E\u0432\u043E\u0439 \u0431\u0430\u0437\u044B (\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u044F Pencil.dev)"
35778
+ design: "\u0413\u0435\u043D\u0435\u0440\u0430\u0446\u0438\u044F/\u043E\u0431\u043D\u043E\u0432\u043B\u0435\u043D\u0438\u0435 \u0432\u0438\u0437\u0443\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0434\u0438\u0437\u0430\u0439\u043D\u0430 \u0438\u0437 \u043A\u043E\u0434\u043E\u0432\u043E\u0439 \u0431\u0430\u0437\u044B (\u0441\u0438\u043D\u0445\u0440\u043E\u043D\u0438\u0437\u0430\u0446\u0438\u044F Pencil.dev)",
35779
+ metrics: "\u041E\u0442\u0447\u0451\u0442 \u043E\u0431 \u044D\u0444\u0444\u0435\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u0438 \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u2014 \u0442\u043E\u043A\u0435\u043D\u044B \u043F\u0440\u043E\u043C\u043F\u0442\u043E\u0432 \u0432 \u044D\u0442\u043E\u0439 \u0441\u0435\u0441\u0441\u0438\u0438 vs. \u0431\u0430\u0437\u043E\u0432\u044B\u0439 \u0443\u0440\u043E\u0432\u0435\u043D\u044C Cursor Rules"
35777
35780
  }
35778
35781
  };
35779
35782
  var TOOL_ARG_META = {
@@ -35814,7 +35817,8 @@ var TOOL_ARG_META = {
35814
35817
  design: [
35815
35818
  { name: "target", required: false },
35816
35819
  { name: "output", required: false }
35817
- ]
35820
+ ],
35821
+ metrics: []
35818
35822
  };
35819
35823
  var TOOL_ARG_DESCRIPTIONS = {
35820
35824
  en: {
@@ -35922,7 +35926,8 @@ var PUBLIC_PROMPT_ORDER = [
35922
35926
  "learn",
35923
35927
  "diagram",
35924
35928
  "slide",
35925
- "design"
35929
+ "design",
35930
+ "metrics"
35926
35931
  ];
35927
35932
  var COMPOSITE_PROMPTS = {
35928
35933
  dev: { slugs: ["common", "dev"] },
@@ -39988,10 +39993,13 @@ async function validateLicense(registryUrl, licenseKey) {
39988
39993
 
39989
39994
  // src/metrics/prompt-metrics.ts
39990
39995
  var ESTIMATED_CHARS_PER_TOKEN = 3.5;
39996
+ var CURSOR_RULES_BASELINE_CHARS = 28e4;
39991
39997
  var PromptMetrics = class {
39992
39998
  calls = [];
39993
39999
  totalChars = 0;
39994
40000
  commonSize = null;
40001
+ commonSkippedCount = 0;
40002
+ commonSkippedChars = 0;
39995
40003
  recordCommonSize(chars) {
39996
40004
  this.commonSize = chars;
39997
40005
  }
@@ -40007,6 +40015,13 @@ var PromptMetrics = class {
40007
40015
  };
40008
40016
  this.calls.push(metric);
40009
40017
  this.totalChars += contentChars;
40018
+ if (!commonIncluded && !NEEDS_COMMON_SLUGS.has(slug)) {
40019
+ const savedChars = this.commonSize ?? 0;
40020
+ if (savedChars > 0) {
40021
+ this.commonSkippedCount++;
40022
+ this.commonSkippedChars += savedChars;
40023
+ }
40024
+ }
40010
40025
  const estimatedTokens = Math.round(contentChars / ESTIMATED_CHARS_PER_TOKEN);
40011
40026
  const parts = [
40012
40027
  `${slug}: ${contentChars.toLocaleString()} chars (~${estimatedTokens.toLocaleString()} tokens)`,
@@ -40032,6 +40047,99 @@ var PromptMetrics = class {
40032
40047
  getCallHistory() {
40033
40048
  return this.calls;
40034
40049
  }
40050
+ /**
40051
+ * Generate a human-readable token efficiency report in the given language.
40052
+ * Compares actual session usage against the Cursor Rules always-on baseline.
40053
+ */
40054
+ generateReport(lang = "en") {
40055
+ const sessionTokens = Math.round(this.totalChars / ESTIMATED_CHARS_PER_TOKEN);
40056
+ const baselineTokens = Math.round(CURSOR_RULES_BASELINE_CHARS / ESTIMATED_CHARS_PER_TOKEN);
40057
+ const baselinePerCall = Math.round(baselineTokens / Math.max(this.calls.length, 1));
40058
+ const baselineTotalIfAlwaysOn = baselinePerCall * Math.max(this.calls.length, 1);
40059
+ const savedTokens = Math.max(0, baselineTotalIfAlwaysOn - sessionTokens);
40060
+ const savedPct = baselineTotalIfAlwaysOn > 0 ? Math.round(savedTokens / baselineTotalIfAlwaysOn * 100) : 0;
40061
+ const commonSkippedTokens = Math.round(this.commonSkippedChars / ESTIMATED_CHARS_PER_TOKEN);
40062
+ const callLines = this.calls.map((c) => {
40063
+ const t = Math.round(c.chars / ESTIMATED_CHARS_PER_TOKEN);
40064
+ return ` ${c.slug.padEnd(12)} ~${t.toLocaleString()} tokens [${c.slugsLoaded.join(", ")}]`;
40065
+ }).join("\n") || (lang === "ja" ? " \uFF08\u307E\u3060\u547C\u3073\u51FA\u3057\u306A\u3057\uFF09" : lang === "ru" ? " (\u0432\u044B\u0437\u043E\u0432\u043E\u0432 \u0435\u0449\u0451 \u043D\u0435 \u0431\u044B\u043B\u043E)" : " (no calls yet)");
40066
+ if (lang === "ja") {
40067
+ return [
40068
+ `\u{1F4CA} ${brand.displayName} \u2014 \u30C8\u30FC\u30AF\u30F3\u52B9\u7387\u30EC\u30DD\u30FC\u30C8`,
40069
+ ``,
40070
+ `## \u3053\u306E\u30BB\u30C3\u30B7\u30E7\u30F3`,
40071
+ ` \u547C\u3073\u51FA\u3057\u56DE\u6570: ${this.calls.length} \u56DE`,
40072
+ ` \u914D\u4FE1\u30C8\u30FC\u30AF\u30F3\u5408\u8A08: ~${sessionTokens.toLocaleString()} tokens`,
40073
+ ``,
40074
+ `## Cursor Rules \u65B9\u5F0F\u3068\u306E\u6BD4\u8F03\uFF08\u5168\u30D7\u30ED\u30F3\u30D7\u30C8\u5E38\u6642\u8AAD\u307F\u8FBC\u307F\u60F3\u5B9A\uFF09`,
40075
+ ` Cursor Rules \u63A8\u5B9A\u30B3\u30B9\u30C8: ~${baselineTotalIfAlwaysOn.toLocaleString()} tokens`,
40076
+ ` GoDD \u5B9F\u969B\u306E\u30B3\u30B9\u30C8: ~${sessionTokens.toLocaleString()} tokens`,
40077
+ ` \u7BC0\u7D04\u63A8\u5B9A: ~${savedTokens.toLocaleString()} tokens (${savedPct}%)`,
40078
+ ``,
40079
+ `## \u6700\u9069\u5316\u306E\u5185\u8A33`,
40080
+ ` common \u30B9\u30AD\u30C3\u30D7\u56DE\u6570: ${this.commonSkippedCount} \u56DE (~${commonSkippedTokens.toLocaleString()} tokens \u7BC0\u7D04)`,
40081
+ ` \u203B commit/push \u306A\u3069\u8EFD\u91CF\u30C4\u30FC\u30EB\u306F\u5171\u901A\u30DE\u30A4\u30F3\u30C9\u30BB\u30C3\u30C8\u3092\u8AAD\u307F\u8FBC\u307E\u306A\u3044\u8A2D\u8A08`,
40082
+ ``,
40083
+ `## \u547C\u3073\u51FA\u3057\u5C65\u6B74`,
40084
+ callLines,
40085
+ ``,
40086
+ `---`,
40087
+ `GoDD MCP \u306F\u30AA\u30F3\u30C7\u30DE\u30F3\u30C9\u914D\u4FE1\u306E\u305F\u3081\u3001\u4F7F\u3063\u305F\u30D7\u30ED\u30F3\u30D7\u30C8\u3060\u3051\u3092\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306B\u9001\u308A\u307E\u3059\u3002`,
40088
+ `Cursor Rules \u306F\u5168\u30EB\u30FC\u30EB\u3092\u6BCE\u4F1A\u8A71\u306E\u958B\u59CB\u6642\u304B\u3089\u5E38\u6642\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u306B\u542B\u3081\u307E\u3059\u3002`,
40089
+ `\u203B \u30C8\u30FC\u30AF\u30F3\u6570\u306F\u6587\u5B57\u6570 \xF7 3.5 \u3067\u63A8\u5B9A\u3002\u5B9F\u969B\u306E\u5024\u306F\u4F7F\u7528\u30E2\u30C7\u30EB\u306B\u3088\u308A\u7570\u306A\u308A\u307E\u3059\u3002`
40090
+ ].join("\n");
40091
+ }
40092
+ if (lang === "ru") {
40093
+ return [
40094
+ `\u{1F4CA} ${brand.displayName} \u2014 \u041E\u0442\u0447\u0451\u0442 \u044D\u0444\u0444\u0435\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u0438 \u0442\u043E\u043A\u0435\u043D\u043E\u0432`,
40095
+ ``,
40096
+ `## \u042D\u0442\u0430 \u0441\u0435\u0441\u0441\u0438\u044F`,
40097
+ ` \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0432\u044B\u0437\u043E\u0432\u043E\u0432: ${this.calls.length}`,
40098
+ ` \u0414\u043E\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043E \u0442\u043E\u043A\u0435\u043D\u043E\u0432: ~${sessionTokens.toLocaleString()} tokens`,
40099
+ ``,
40100
+ `## \u0421\u0440\u0430\u0432\u043D\u0435\u043D\u0438\u0435 \u0441 Cursor Rules (\u0432\u0441\u0435 \u043F\u0440\u043E\u043C\u043F\u0442\u044B \u0432\u0441\u0435\u0433\u0434\u0430 \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043D\u044B)`,
40101
+ ` \u0420\u0430\u0441\u0447\u0451\u0442\u043D\u044B\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044B Cursor Rules: ~${baselineTotalIfAlwaysOn.toLocaleString()} tokens`,
40102
+ ` \u0424\u0430\u043A\u0442\u0438\u0447\u0435\u0441\u043A\u0438\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044B GoDD: ~${sessionTokens.toLocaleString()} tokens`,
40103
+ ` \u0420\u0430\u0441\u0447\u0451\u0442\u043D\u0430\u044F \u044D\u043A\u043E\u043D\u043E\u043C\u0438\u044F: ~${savedTokens.toLocaleString()} tokens (${savedPct}%)`,
40104
+ ``,
40105
+ `## \u0414\u0435\u0442\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u044F \u043E\u043F\u0442\u0438\u043C\u0438\u0437\u0430\u0446\u0438\u0438`,
40106
+ ` \u041F\u0440\u043E\u043F\u0443\u0441\u043A\u043E\u0432 common: ${this.commonSkippedCount} (~${commonSkippedTokens.toLocaleString()} tokens \u0441\u044D\u043A\u043E\u043D\u043E\u043C\u043B\u0435\u043D\u043E)`,
40107
+ ` \u203B \u041B\u0451\u0433\u043A\u0438\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B (commit, push) \u043D\u0435 \u0437\u0430\u0433\u0440\u0443\u0436\u0430\u044E\u0442 \u043E\u0431\u0449\u0438\u0439 mindset`,
40108
+ ``,
40109
+ `## \u0418\u0441\u0442\u043E\u0440\u0438\u044F \u0432\u044B\u0437\u043E\u0432\u043E\u0432`,
40110
+ callLines,
40111
+ ``,
40112
+ `---`,
40113
+ `GoDD MCP \u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u0435\u0442 \u0442\u043E\u043B\u044C\u043A\u043E \u043D\u0443\u0436\u043D\u044B\u0435 \u043F\u0440\u043E\u043C\u043F\u0442\u044B \u043F\u043E \u0437\u0430\u043F\u0440\u043E\u0441\u0443.`,
40114
+ `Cursor Rules \u0432\u043A\u043B\u044E\u0447\u0430\u0435\u0442 \u0432\u0441\u0435 \u043F\u0440\u0430\u0432\u0438\u043B\u0430 \u0432 \u043A\u043E\u043D\u0442\u0435\u043A\u0441\u0442 \u0441 \u043D\u0430\u0447\u0430\u043B\u0430 \u043A\u0430\u0436\u0434\u043E\u0433\u043E \u0447\u0430\u0442\u0430.`,
40115
+ `\u203B \u041A\u043E\u043B\u0438\u0447\u0435\u0441\u0442\u0432\u043E \u0442\u043E\u043A\u0435\u043D\u043E\u0432 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u044B\u0432\u0430\u0435\u0442\u0441\u044F \u043A\u0430\u043A \u043A\u043E\u043B-\u0432\u043E \u0441\u0438\u043C\u0432\u043E\u043B\u043E\u0432 \xF7 3,5. \u0420\u0435\u0430\u043B\u044C\u043D\u044B\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u0438\u044F \u0437\u0430\u0432\u0438\u0441\u044F\u0442 \u043E\u0442 \u043C\u043E\u0434\u0435\u043B\u0438.`
40116
+ ].join("\n");
40117
+ }
40118
+ return [
40119
+ `\u{1F4CA} ${brand.displayName} \u2014 Token Efficiency Report`,
40120
+ ``,
40121
+ `## This Session`,
40122
+ ` Calls made: ${this.calls.length}`,
40123
+ ` Tokens delivered: ~${sessionTokens.toLocaleString()} tokens`,
40124
+ ``,
40125
+ `## Comparison vs. Cursor Rules (all prompts always loaded)`,
40126
+ ` Cursor Rules estimate: ~${baselineTotalIfAlwaysOn.toLocaleString()} tokens`,
40127
+ ` GoDD actual: ~${sessionTokens.toLocaleString()} tokens`,
40128
+ ` Estimated savings: ~${savedTokens.toLocaleString()} tokens (${savedPct}%)`,
40129
+ ``,
40130
+ `## Optimization breakdown`,
40131
+ ` common skipped: ${this.commonSkippedCount}x (~${commonSkippedTokens.toLocaleString()} tokens saved)`,
40132
+ ` \u203B Lightweight tools (commit, push) skip the heavy common mindset by design`,
40133
+ ``,
40134
+ `## Call history`,
40135
+ callLines,
40136
+ ``,
40137
+ `---`,
40138
+ `GoDD MCP delivers only the prompts you call, on demand.`,
40139
+ `Cursor Rules loads all rules into context from the start of every chat.`,
40140
+ `\u203B Token counts are estimated at chars \xF7 3.5. Actual values vary by model.`
40141
+ ].join("\n");
40142
+ }
40035
40143
  };
40036
40144
 
40037
40145
  // src/index.ts
@@ -40269,6 +40377,10 @@ function startServer() {
40269
40377
  const slug = toolName.replace(brand.toolPrefix, "");
40270
40378
  const rawArgs = request.params.arguments;
40271
40379
  const localArgs = rawArgs ? Object.fromEntries(Object.entries(rawArgs).map(([k, v]) => [k, String(v)])) : void 0;
40380
+ if (slug === "metrics") {
40381
+ const report = metrics.generateReport(displayLang);
40382
+ return { content: [{ type: "text", text: report }] };
40383
+ }
40272
40384
  const result = await resolveMcpSlugContent(slug, "tool", {
40273
40385
  localArgs,
40274
40386
  registryClient,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@autodevjapan/godd-mcp-alpha",
3
- "version": "1.25.20",
3
+ "version": "1.25.21",
4
4
  "type": "module",
5
5
  "description": "GoDD MCP α Server — AI Prompt Delivery System for Cursor IDE",
6
6
  "license": "UNLICENSED",