katman-mcp 0.2.0 → 0.3.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 (38) hide show
  1. package/README.md +48 -42
  2. package/dist/license.js +201 -12
  3. package/dist/meta.js +25 -13
  4. package/dist/plans.js +13 -6
  5. package/dist/tools/account/account.js +19 -10
  6. package/dist/tools/account/cli.js +4 -3
  7. package/dist/tools/account/index.js +1 -1
  8. package/dist/tools/account/upsell.js +156 -39
  9. package/dist/tools/crawl/audit/report.js +2 -2
  10. package/dist/tools/crawl/cli.js +18 -6
  11. package/dist/tools/crawl/index.js +39 -8
  12. package/dist/tools/crawl/scan/framework.js +4 -1
  13. package/dist/tools/method/core/lint.js +15 -1
  14. package/dist/tools/method/core/prompt.js +2 -1
  15. package/dist/tools/method/data/_store.js +17 -0
  16. package/dist/tools/method/data/anatomy.js +12 -141
  17. package/dist/tools/method/data/appendices.js +22 -202
  18. package/dist/tools/method/data/cloudflare.js +28 -192
  19. package/dist/tools/method/data/evidence.js +18 -137
  20. package/dist/tools/method/data/geo-jobs.js +8 -128
  21. package/dist/tools/method/data/landing.js +14 -67
  22. package/dist/tools/method/data/lessons.js +16 -127
  23. package/dist/tools/method/data/measurement.js +38 -142
  24. package/dist/tools/method/data/offsite.js +16 -148
  25. package/dist/tools/method/data/pages.js +16 -167
  26. package/dist/tools/method/data/prompts.js +8 -633
  27. package/dist/tools/method/data/publish.js +14 -113
  28. package/dist/tools/method/data/research.js +14 -131
  29. package/dist/tools/method/data/roadmap.js +12 -105
  30. package/dist/tools/method/data/traps.js +6 -74
  31. package/dist/tools/method/data/verify.js +12 -88
  32. package/dist/tools/method/data/viral-list.js +12 -39
  33. package/dist/tools/method/lib/prompt-lookup.js +18 -0
  34. package/dist/tools/method/mcp/resources.js +4 -3
  35. package/dist/tools/visibility/index.js +2 -2
  36. package/dist/tools/visibility/monitoring.js +3 -0
  37. package/package.json +5 -3
  38. package/server.json +3 -3
@@ -1,167 +1,16 @@
1
- export const PAGE_PLAN_INTRO = {
2
- en: "Few but right pages. On the sample site, 59% of ChatGPT visitors landed on just two situation pages. Our working rule: 5–10 different pages a week; if a template's “crawled – currently not indexed” rate passes 30%, stop publishing new pages from it and merge.",
3
- tr: "Az ama doğru sayfa. Örnek sitede ChatGPT ziyaretçilerinin %59’u yalnızca iki durum sayfasına indi. Çalışma kuralımız: haftada 5–10 farklı sayfa; “tarandı, dizine eklenmedi” oranı %30’u geçen bir şablon varsa yeni sayfa basmayı durdur, birleştir.",
4
- };
5
- export const PAGE_TYPES = [
6
- {
7
- key: "home",
8
- name: { en: "Home", tr: "Ana sayfa" },
9
- purpose: { en: "Says who you are in one sentence; links to every important page.", tr: "Kim olduğunuzu tek cümleyle söyler; bütün önemli sayfalara link verir." },
10
- url: { en: "/", tr: "/" },
11
- schema: ["Organization", "WebSite"],
12
- },
13
- {
14
- key: "situation",
15
- name: { en: "Situation pages", tr: "Durum sayfaları" },
16
- purpose: {
17
- en: "One page per customer situation; the answer is in the first sentence. The page type assistants quote most (59% of the sample site's ChatGPT visitors).",
18
- tr: "Her müşteri durumu için bir sayfa; cevap ilk cümlede. Asistanın en çok alıntıladığı sayfa tipi (örnek sitede ChatGPT ziyaretçilerinin %59’u).",
19
- },
20
- url: { en: "/import-pdf-invoices", tr: "/faturami-muhasebeye-aktar" },
21
- schema: ["Service", "FAQPage", "BreadcrumbList"],
22
- },
23
- {
24
- key: "pricing",
25
- name: { en: "Pricing", tr: "Fiyat" },
26
- purpose: {
27
- en: "Prices in plain text; assistants answer “how much?” from here. The same figures as llms.txt.",
28
- tr: "Fiyat düz metinde; asistanlar “ne kadar?” sorusunu buradan cevaplar. llms.txt ile aynı rakam.",
29
- },
30
- url: { en: "/pricing", tr: "/fiyatlandirma" },
31
- schema: ["Service", "Offer"],
32
- },
33
- {
34
- key: "comparison",
35
- name: { en: "Comparison guide", tr: "Karşılaştırma rehberi" },
36
- purpose: {
37
- en: "A neutral answer to “which tools are there for X?”, competitors included (P7).",
38
- tr: "“X için hangi araçlar var?” sorusunun tarafsız cevabı, rakipler dahil (P7).",
39
- },
40
- url: { en: "/guides/tools-for-x", tr: "/rehber/x-icin-araclar" },
41
- schema: ["Article", "ItemList"],
42
- },
43
- {
44
- key: "faq",
45
- name: { en: "FAQ", tr: "SSS" },
46
- purpose: {
47
- en: "Customers' real questions with short answers. No rich result in Google any more; question–answer pairs for the assistant.",
48
- tr: "Müşterinin gerçek soruları, kısa cevaplarla. Google’da zengin sonuç yok; asistan için soru-cevap çifti.",
49
- },
50
- url: { en: "/faq", tr: "/sss" },
51
- schema: ["FAQPage"],
52
- },
53
- {
54
- key: "about",
55
- name: { en: "About", tr: "Hakkımızda" },
56
- purpose: {
57
- en: "Who builds it, the company, the “not-X” note, social accounts.",
58
- tr: "Kim yapıyor, şirket, “X değildir” notu, sosyal hesaplar.",
59
- },
60
- url: { en: "/about", tr: "/hakkimizda" },
61
- schema: ["AboutPage", "Organization"],
62
- },
63
- {
64
- key: "guide",
65
- name: { en: "Guide or PDF", tr: "Rehber ya da PDF" },
66
- purpose: {
67
- en: "Something others will want to link to; publish it on your own site first, then share it. Backlinks come from here.",
68
- tr: "Başkasının link vermek isteyeceği şey; önce sitenizde yayınlayın, sonra paylaşın. Backlink buradan gelir.",
69
- },
70
- url: { en: "/guides/...", tr: "/rehber/..." },
71
- schema: ["Article"],
72
- },
73
- {
74
- key: "contact",
75
- name: { en: "Contact, privacy, terms", tr: "İletişim, gizlilik, şartlar" },
76
- purpose: {
77
- en: "Trust; keep the e-mail address in plain text (bots can't read an obfuscated address).",
78
- tr: "Güven; e-posta adresi düz metin olsun (gizlenmiş adresi bot okuyamaz).",
79
- },
80
- url: { en: "/contact", tr: "/iletisim" },
81
- schema: ["BreadcrumbList"],
82
- },
83
- {
84
- key: "llms",
85
- name: { en: "llms.txt", tr: "llms.txt" },
86
- purpose: {
87
- en: "A summary for assistants: the one sentence, pricing, “not-X”, the important pages (P8).",
88
- tr: "Asistanlar için özet: tek cümle, fiyat, “X değildir”, önemli sayfalar (P8).",
89
- },
90
- url: { en: "/llms.txt", tr: "/llms.txt" },
91
- schema: [],
92
- },
93
- {
94
- key: "notfound",
95
- name: { en: "404 page", tr: "404 sayfası" },
96
- purpose: { en: "A real 404 status code, with links to the important pages.", tr: "Gerçek 404 durum koduyla, önemli sayfalara linkle." },
97
- url: { en: "(every missing URL)", tr: "(her olmayan adres)" },
98
- schema: [],
99
- },
100
- ];
101
- export const NOINDEX_RULES = {
102
- en: "Login, sign-up, password reset, checkout, thank-you and on-site search pages: noindex,follow and not in the sitemap. App paths (/app, /dashboard, /api): closed in robots.txt. On katman.pro the login page is noindex; /api, /admin, /report and /dashboard are closed in robots.txt. Never close a noindex page in robots.txt: Google then can't see the noindex.",
103
- tr: "Giriş, kayıt, şifre sıfırlama, ödeme, teşekkür ve site içi arama sayfaları: noindex,follow ve sitemap’te yok. Uygulama yolları (/app, /dashboard, /api): robots.txt’de kapalı. katman.pro’da giriş sayfası noindex; /api, /admin, /report ve /dashboard robots.txt’de kapalı. noindex’li bir sayfayı robots.txt’de kapatmayın: Google o zaman noindex’i göremez.",
104
- };
105
- export const MULTILINGUAL_RULES = {
106
- en: "Give every language its own URLs (/tr/geo-nedir and /what-is-geo), written in that language. Every language version lists itself and the others with hreflang, plus an x-default. katman.pro's sitemap has 81 hreflang lines. Translate each page for real: an untranslated page that carries another language's hreflang creates a fake language cluster with duplicate titles.",
107
- tr: "Her dilin kendi adresi olsun (/tr/geo-nedir ve /what-is-geo gibi), adresler o dilde yazılsın. Her dil sürümü hreflang ile kendini ve diğerlerini listelesin, bir de x-default. katman.pro’nun sitemap’inde 81 hreflang satırı var. Her sayfayı gerçekten çevirin: başka dilin hreflang’ini taşıyan çevrilmemiş sayfa ikiz title’lı, sahte bir dil kümesi yaratır.",
108
- };
109
- /** The sample site's architecture on 29 September (376 URLs, 7 languages). */
110
- export const SAMPLE_ARCHITECTURE = [
111
- { type: { en: "Home", tr: "Ana sayfa" }, en: "1", purpose: { en: "Entity definition and the first action", tr: "Varlık tanımı ve ilk eylem" }, geoRole: { en: "“What is it?” questions", tr: "“Nedir?” sorusu" } },
112
- { type: { en: "Feature / situation pages", tr: "Özellik / durum sayfaları" }, en: "15", purpose: { en: "Solve one situation in the first sentence", tr: "Bir durumu ilk cümlede çözmek" }, geoRole: { en: "Most traffic and sales", tr: "En çok trafik ve satış" } },
113
- { type: { en: "Category pages", tr: "Kategori sayfaları" }, en: "34", purpose: { en: "The category's own data, examples, FAQ", tr: "Kategorinin kendi verisi, örnekler, SSS" }, geoRole: { en: "Long tail", tr: "Uzun kuyruk" } },
114
- { type: { en: "“Single question” pages", tr: "“Tek soru” sayfaları" }, en: "61", purpose: { en: "One question from Google autocomplete", tr: "Google’ın otomatik tamamlamasından gelen tek bir soru" }, geoRole: { en: "Long tail, topical authority", tr: "Uzun kuyruk, konu otoritesi" } },
115
- { type: { en: "Guides", tr: "Rehberler" }, en: "17", purpose: { en: "Sourced, dated answers: list guides, cost, copyright, platform rules, statistics", tr: "Kaynaklı, tarihli cevaplar: liste rehberleri, maliyet, telif, platform kuralları, istatistik" }, geoRole: { en: "“Best X” and information questions", tr: "“En iyi X” ve bilgi soruları" } },
116
- { type: { en: "Comparisons", tr: "Karşılaştırmalar" }, en: "3 + hub", purpose: { en: "An honest “us or them”", tr: "Dürüst “biz mi onlar mı”" }, geoRole: { en: "Alternative questions", tr: "Alternatif soruları" } },
117
- { type: { en: "Free tools", tr: "Ücretsiz araçlar" }, en: "3", purpose: { en: "Small, useful tools; a natural link magnet", tr: "İşe yarar küçük araçlar; doğal link mıknatısı" }, geoRole: { en: "Tool questions", tr: "Araç soruları" } },
118
- { type: { en: "Glossary", tr: "Sözlük" }, en: "1", purpose: { en: "Term definitions (DefinedTermSet)", tr: "Terim tanımları (DefinedTermSet)" }, geoRole: { en: "Term questions", tr: "Terim soruları" } },
119
- { type: { en: "Videos", tr: "Videolar" }, en: "hub + embedded", purpose: { en: "YouTube walkthroughs (VideoObject)", tr: "YouTube anlatımları (VideoObject)" }, geoRole: { en: "Being mentioned on YouTube", tr: "YouTube’da anılmak" } },
120
- { type: { en: "About, FAQ, Pricing, Contact…", tr: "Hakkımızda, SSS, Fiyatlar, İletişim…" }, en: "7", purpose: { en: "Trust and the basics", tr: "Güven ve temel bilgiler" }, geoRole: { en: "Entity and price questions", tr: "Varlık ve fiyat soruları" } },
121
- { type: { en: "Legal", tr: "Yasal" }, en: "7", purpose: { en: "Terms, privacy, refunds, usage rights", tr: "Şartlar, gizlilik, iade, kullanım hakları" }, geoRole: { en: "Trust", tr: "Güven" } },
122
- ];
123
- /** How content is produced: many pages, but not spam. */
124
- export const CONTENT_PRODUCTION = [
125
- {
126
- title: { en: "Question source", tr: "Soru kaynağı" },
127
- text: {
128
- en: "Google autocomplete (seed keyword + letter-by-letter expansion), the situation sentences people really ask ChatGPT, and the pages ChatGPT sends people to in your analytics.",
129
- tr: "Google’ın otomatik tamamlaması (tohum kelime + harf harf genişletme), ChatGPT’ye gerçekten sorulan durum cümleleri, analitikte ChatGPT’nin indirdiği sayfalar.",
130
- },
131
- },
132
- {
133
- title: { en: "Draft", tr: "Taslak" },
134
- text: {
135
- en: "An AI draft plus a rule-based build script: no real people's names in the texts, no quality words like “best / perfect”, no made-up numbers, no “we tested it on platform X” claims.",
136
- tr: "Yapay zekâ ile taslak ve kurallı bir derleme betiği: metinlerde gerçek kişi adı yok, “en iyi / mükemmel” gibi kalite kelimeleri ve uydurma sayılar yok, “şu platformda test ettik” iddiası yok.",
137
- },
138
- },
139
- {
140
- title: { en: "Human read", tr: "İnsan okuması" },
141
- text: {
142
- en: "A human reads every page; exaggerations are fixed in the draft. Drafts are kept, so pages can be regenerated.",
143
- tr: "Her sayfayı bir insan okur; abartılar taslakta düzeltilir. Taslaklar saklanır, sayfalar yeniden üretilebilir.",
144
- },
145
- },
146
- {
147
- title: { en: "FAQ from data", tr: "Veriden SSS" },
148
- text: {
149
- en: "A category page's FAQ comes from that category's own data; no made-up questions.",
150
- tr: "Kategori sayfasının SSS’si o kategorinin kendi verisinden; uydurma soru yok.",
151
- },
152
- },
153
- {
154
- title: { en: "Sourced guide", tr: "Kaynaklı rehber" },
155
- text: {
156
- en: "Every figure is tied to a source, with its date. Information that can't be verified at its source (e.g. a ranking seen only on Wikipedia) isn't written.",
157
- tr: "Her rakam bir kaynağa, tarihiyle bağlı. Kaynağında doğrulanamayan bilgi (ör. yalnızca Wikipedia’da görülen bir sıralama) yazılmaz.",
158
- },
159
- },
160
- {
161
- title: { en: "Pace", tr: "Tempo" },
162
- text: {
163
- en: "On a new domain, 5–10 different pages a week; grow only templates that get impressions. If a template's “crawled – currently not indexed” rate passes ~30%, merge or noindex. Google's August 2026 spam update hit template sites site-wide.",
164
- tr: "Yeni alan adında haftada 5–10 farklı sayfa; yalnızca gösterim alan şablonları büyütün. Bir şablonun “tarandı, dizine eklenmedi” oranı ~%30’u geçerse birleştirin ya da noindex yapın. Google’ın Ağustos 2026 spam güncellemesi şablon sitelere site genelinde vurdu.",
165
- },
166
- },
167
- ];
1
+ // Filled from katman.pro at run time for a paid key (see _store.js); the package carries no method text.
2
+ import { onMethod } from "./_store.js";
3
+ export let CONTENT_PRODUCTION = [];
4
+ export let MULTILINGUAL_RULES = {};
5
+ export let NOINDEX_RULES = {};
6
+ export let PAGE_PLAN_INTRO = {};
7
+ export let PAGE_TYPES = [];
8
+ export let SAMPLE_ARCHITECTURE = [];
9
+ onMethod((d) => {
10
+ if (d.CONTENT_PRODUCTION !== undefined) CONTENT_PRODUCTION = d.CONTENT_PRODUCTION;
11
+ if (d.MULTILINGUAL_RULES !== undefined) MULTILINGUAL_RULES = d.MULTILINGUAL_RULES;
12
+ if (d.NOINDEX_RULES !== undefined) NOINDEX_RULES = d.NOINDEX_RULES;
13
+ if (d.PAGE_PLAN_INTRO !== undefined) PAGE_PLAN_INTRO = d.PAGE_PLAN_INTRO;
14
+ if (d.PAGE_TYPES !== undefined) PAGE_TYPES = d.PAGE_TYPES;
15
+ if (d.SAMPLE_ARCHITECTURE !== undefined) SAMPLE_ARCHITECTURE = d.SAMPLE_ARCHITECTURE;
16
+ });