aso-mcp 1.0.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/LICENSE +21 -0
- package/README.md +227 -0
- package/build/cache/sqlite-cache.d.ts +10 -0
- package/build/cache/sqlite-cache.d.ts.map +1 -0
- package/build/cache/sqlite-cache.js +51 -0
- package/build/cache/sqlite-cache.js.map +1 -0
- package/build/data-sources/app-store-connect.d.ts +12 -0
- package/build/data-sources/app-store-connect.d.ts.map +1 -0
- package/build/data-sources/app-store-connect.js +415 -0
- package/build/data-sources/app-store-connect.js.map +1 -0
- package/build/data-sources/app-store.d.ts +7 -0
- package/build/data-sources/app-store.d.ts.map +1 -0
- package/build/data-sources/app-store.js +28 -0
- package/build/data-sources/app-store.js.map +1 -0
- package/build/data-sources/aso-scoring.d.ts +15 -0
- package/build/data-sources/aso-scoring.d.ts.map +1 -0
- package/build/data-sources/aso-scoring.js +140 -0
- package/build/data-sources/aso-scoring.js.map +1 -0
- package/build/data-sources/custom-scoring.d.ts +52 -0
- package/build/data-sources/custom-scoring.d.ts.map +1 -0
- package/build/data-sources/custom-scoring.js +83 -0
- package/build/data-sources/custom-scoring.js.map +1 -0
- package/build/server.d.ts +3 -0
- package/build/server.d.ts.map +1 -0
- package/build/server.js +69 -0
- package/build/server.js.map +1 -0
- package/build/tools/analyze-competitors.d.ts +3 -0
- package/build/tools/analyze-competitors.d.ts.map +1 -0
- package/build/tools/analyze-competitors.js +112 -0
- package/build/tools/analyze-competitors.js.map +1 -0
- package/build/tools/analyze-reviews.d.ts +3 -0
- package/build/tools/analyze-reviews.d.ts.map +1 -0
- package/build/tools/analyze-reviews.js +188 -0
- package/build/tools/analyze-reviews.js.map +1 -0
- package/build/tools/clear-cache.d.ts +3 -0
- package/build/tools/clear-cache.d.ts.map +1 -0
- package/build/tools/clear-cache.js +32 -0
- package/build/tools/clear-cache.js.map +1 -0
- package/build/tools/connect-get-app.d.ts +3 -0
- package/build/tools/connect-get-app.d.ts.map +1 -0
- package/build/tools/connect-get-app.js +56 -0
- package/build/tools/connect-get-app.js.map +1 -0
- package/build/tools/connect-get-metadata.d.ts +3 -0
- package/build/tools/connect-get-metadata.d.ts.map +1 -0
- package/build/tools/connect-get-metadata.js +73 -0
- package/build/tools/connect-get-metadata.js.map +1 -0
- package/build/tools/connect-list-localizations.d.ts +3 -0
- package/build/tools/connect-list-localizations.d.ts.map +1 -0
- package/build/tools/connect-list-localizations.js +55 -0
- package/build/tools/connect-list-localizations.js.map +1 -0
- package/build/tools/connect-setup.d.ts +3 -0
- package/build/tools/connect-setup.d.ts.map +1 -0
- package/build/tools/connect-setup.js +47 -0
- package/build/tools/connect-setup.js.map +1 -0
- package/build/tools/connect-update-metadata.d.ts +3 -0
- package/build/tools/connect-update-metadata.d.ts.map +1 -0
- package/build/tools/connect-update-metadata.js +176 -0
- package/build/tools/connect-update-metadata.js.map +1 -0
- package/build/tools/discover-keywords.d.ts +3 -0
- package/build/tools/discover-keywords.d.ts.map +1 -0
- package/build/tools/discover-keywords.js +195 -0
- package/build/tools/discover-keywords.js.map +1 -0
- package/build/tools/generate-aso-brief.d.ts +3 -0
- package/build/tools/generate-aso-brief.d.ts.map +1 -0
- package/build/tools/generate-aso-brief.js +295 -0
- package/build/tools/generate-aso-brief.js.map +1 -0
- package/build/tools/get-app-details.d.ts +3 -0
- package/build/tools/get-app-details.d.ts.map +1 -0
- package/build/tools/get-app-details.js +89 -0
- package/build/tools/get-app-details.js.map +1 -0
- package/build/tools/get-aso-report.d.ts +3 -0
- package/build/tools/get-aso-report.d.ts.map +1 -0
- package/build/tools/get-aso-report.js +168 -0
- package/build/tools/get-aso-report.js.map +1 -0
- package/build/tools/keyword-gap.d.ts +3 -0
- package/build/tools/keyword-gap.d.ts.map +1 -0
- package/build/tools/keyword-gap.js +116 -0
- package/build/tools/keyword-gap.js.map +1 -0
- package/build/tools/localized-keywords.d.ts +3 -0
- package/build/tools/localized-keywords.d.ts.map +1 -0
- package/build/tools/localized-keywords.js +107 -0
- package/build/tools/localized-keywords.js.map +1 -0
- package/build/tools/optimize-metadata.d.ts +3 -0
- package/build/tools/optimize-metadata.d.ts.map +1 -0
- package/build/tools/optimize-metadata.js +156 -0
- package/build/tools/optimize-metadata.js.map +1 -0
- package/build/tools/search-keywords.d.ts +3 -0
- package/build/tools/search-keywords.d.ts.map +1 -0
- package/build/tools/search-keywords.js +65 -0
- package/build/tools/search-keywords.js.map +1 -0
- package/build/tools/suggest-keywords.d.ts +3 -0
- package/build/tools/suggest-keywords.d.ts.map +1 -0
- package/build/tools/suggest-keywords.js +71 -0
- package/build/tools/suggest-keywords.js.map +1 -0
- package/build/tools/track-ranking.d.ts +3 -0
- package/build/tools/track-ranking.d.ts.map +1 -0
- package/build/tools/track-ranking.js +94 -0
- package/build/tools/track-ranking.js.map +1 -0
- package/build/types/index.d.ts +151 -0
- package/build/types/index.d.ts.map +1 -0
- package/build/types/index.js +2 -0
- package/build/types/index.js.map +1 -0
- package/build/utils/constants.d.ts +40 -0
- package/build/utils/constants.d.ts.map +1 -0
- package/build/utils/constants.js +35 -0
- package/build/utils/constants.js.map +1 -0
- package/build/utils/formatters.d.ts +9 -0
- package/build/utils/formatters.d.ts.map +1 -0
- package/build/utils/formatters.js +37 -0
- package/build/utils/formatters.js.map +1 -0
- package/build/utils/localization.d.ts +7 -0
- package/build/utils/localization.d.ts.map +1 -0
- package/build/utils/localization.js +63 -0
- package/build/utils/localization.js.map +1 -0
- package/build/utils/rate-limiter.d.ts +7 -0
- package/build/utils/rate-limiter.d.ts.map +1 -0
- package/build/utils/rate-limiter.js +23 -0
- package/build/utils/rate-limiter.js.map +1 -0
- package/package.json +60 -0
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { loadConfig, getApp } from "../data-sources/app-store-connect.js";
|
|
3
|
+
import { getFromCache, setCache } from "../cache/sqlite-cache.js";
|
|
4
|
+
import { CACHE_TTL } from "../utils/constants.js";
|
|
5
|
+
export function registerConnectGetApp(server) {
|
|
6
|
+
server.tool("connect_get_app", "Bundle ID ile uygulama bul, ASC ID ve versiyon durumunu göster", {
|
|
7
|
+
bundleId: z
|
|
8
|
+
.string()
|
|
9
|
+
.describe("App bundle ID (e.g. 'com.spotify.client')"),
|
|
10
|
+
}, async ({ bundleId }) => {
|
|
11
|
+
const cacheKey = `connect-app:${bundleId}`;
|
|
12
|
+
const cached = getFromCache(cacheKey);
|
|
13
|
+
if (cached) {
|
|
14
|
+
return { content: [{ type: "text", text: cached }] };
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const config = loadConfig();
|
|
18
|
+
if (!config) {
|
|
19
|
+
return {
|
|
20
|
+
content: [
|
|
21
|
+
{
|
|
22
|
+
type: "text",
|
|
23
|
+
text: "Error: App Store Connect credentials not configured. Use connect_setup tool first.",
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
isError: true,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const appInfo = await getApp(config, bundleId);
|
|
30
|
+
const result = {
|
|
31
|
+
app: appInfo,
|
|
32
|
+
editableVersion: appInfo.versionId
|
|
33
|
+
? {
|
|
34
|
+
id: appInfo.versionId,
|
|
35
|
+
state: appInfo.versionState,
|
|
36
|
+
}
|
|
37
|
+
: null,
|
|
38
|
+
note: appInfo.versionId
|
|
39
|
+
? "Editable version found (PREPARE_FOR_SUBMISSION)."
|
|
40
|
+
: "No editable version found. Create a new version in App Store Connect to update metadata.",
|
|
41
|
+
};
|
|
42
|
+
const resultText = JSON.stringify(result, null, 2);
|
|
43
|
+
setCache(cacheKey, resultText, CACHE_TTL.CONNECT_APP);
|
|
44
|
+
return { content: [{ type: "text", text: resultText }] };
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
return {
|
|
48
|
+
content: [
|
|
49
|
+
{ type: "text", text: `Error: ${error.message}` },
|
|
50
|
+
],
|
|
51
|
+
isError: true,
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=connect-get-app.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-get-app.js","sourceRoot":"","sources":["../../src/tools/connect-get-app.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,UAAU,qBAAqB,CAAC,MAAiB;IACrD,MAAM,CAAC,IAAI,CACT,iBAAiB,EACjB,gEAAgE,EAChE;QACE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,CAAC,2CAA2C,CAAC;KACzD,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;QACrB,MAAM,QAAQ,GAAG,eAAe,QAAQ,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,oFAAoF;yBAC3F;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAE/C,MAAM,MAAM,GAAG;gBACb,GAAG,EAAE,OAAO;gBACZ,eAAe,EAAE,OAAO,CAAC,SAAS;oBAChC,CAAC,CAAC;wBACE,EAAE,EAAE,OAAO,CAAC,SAAS;wBACrB,KAAK,EAAE,OAAO,CAAC,YAAY;qBAC5B;oBACH,CAAC,CAAC,IAAI;gBACR,IAAI,EAAE,OAAO,CAAC,SAAS;oBACrB,CAAC,CAAC,kDAAkD;oBACpD,CAAC,CAAC,0FAA0F;aAC/F,CAAC;YAEF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACnD,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC;YAEtD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACpE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE;iBAC3D;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-get-metadata.d.ts","sourceRoot":"","sources":["../../src/tools/connect-get-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAMpE,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,SAAS,QA6E3D"}
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { loadConfig, getMetadata } from "../data-sources/app-store-connect.js";
|
|
3
|
+
import { getFromCache, setCache } from "../cache/sqlite-cache.js";
|
|
4
|
+
import { CACHE_TTL, CHAR_LIMITS } from "../utils/constants.js";
|
|
5
|
+
export function registerConnectGetMetadata(server) {
|
|
6
|
+
server.tool("connect_get_metadata", "Belirli bir locale için mevcut ASO metadata'sını getir", {
|
|
7
|
+
appId: z
|
|
8
|
+
.string()
|
|
9
|
+
.describe("App Store Connect app ID (from connect_get_app)"),
|
|
10
|
+
locale: z
|
|
11
|
+
.string()
|
|
12
|
+
.default("tr")
|
|
13
|
+
.describe("Locale code — accepts both Apple format ('en-US') and country code ('us')"),
|
|
14
|
+
}, async ({ appId, locale }) => {
|
|
15
|
+
const cacheKey = `connect-metadata:${appId}:${locale}`;
|
|
16
|
+
const cached = getFromCache(cacheKey);
|
|
17
|
+
if (cached) {
|
|
18
|
+
return { content: [{ type: "text", text: cached }] };
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
const config = loadConfig();
|
|
22
|
+
if (!config) {
|
|
23
|
+
return {
|
|
24
|
+
content: [
|
|
25
|
+
{
|
|
26
|
+
type: "text",
|
|
27
|
+
text: "Error: App Store Connect credentials not configured. Use connect_setup tool first.",
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
isError: true,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const metadata = await getMetadata(config, appId, locale);
|
|
34
|
+
const result = {
|
|
35
|
+
metadata,
|
|
36
|
+
characterLimits: {
|
|
37
|
+
subtitle: {
|
|
38
|
+
used: metadata.subtitleLength,
|
|
39
|
+
max: CHAR_LIMITS.SUBTITLE,
|
|
40
|
+
remaining: CHAR_LIMITS.SUBTITLE - metadata.subtitleLength,
|
|
41
|
+
},
|
|
42
|
+
keywords: {
|
|
43
|
+
used: metadata.keywordsLength,
|
|
44
|
+
max: CHAR_LIMITS.KEYWORD_FIELD,
|
|
45
|
+
remaining: CHAR_LIMITS.KEYWORD_FIELD - metadata.keywordsLength,
|
|
46
|
+
},
|
|
47
|
+
description: {
|
|
48
|
+
used: metadata.descriptionLength,
|
|
49
|
+
max: CHAR_LIMITS.DESCRIPTION,
|
|
50
|
+
remaining: CHAR_LIMITS.DESCRIPTION - metadata.descriptionLength,
|
|
51
|
+
},
|
|
52
|
+
promotionalText: {
|
|
53
|
+
used: metadata.promotionalTextLength,
|
|
54
|
+
max: CHAR_LIMITS.PROMOTIONAL_TEXT,
|
|
55
|
+
remaining: CHAR_LIMITS.PROMOTIONAL_TEXT - metadata.promotionalTextLength,
|
|
56
|
+
},
|
|
57
|
+
},
|
|
58
|
+
};
|
|
59
|
+
const resultText = JSON.stringify(result, null, 2);
|
|
60
|
+
setCache(cacheKey, resultText, CACHE_TTL.CONNECT_METADATA);
|
|
61
|
+
return { content: [{ type: "text", text: resultText }] };
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
return {
|
|
65
|
+
content: [
|
|
66
|
+
{ type: "text", text: `Error: ${error.message}` },
|
|
67
|
+
],
|
|
68
|
+
isError: true,
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=connect-get-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-get-metadata.js","sourceRoot":"","sources":["../../src/tools/connect-get-metadata.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAC/E,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE/D,MAAM,UAAU,0BAA0B,CAAC,MAAiB;IAC1D,MAAM,CAAC,IAAI,CACT,sBAAsB,EACtB,wDAAwD,EACxD;QACE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,CAAC,iDAAiD,CAAC;QAC9D,MAAM,EAAE,CAAC;aACN,MAAM,EAAE;aACR,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CAAC,2EAA2E,CAAC;KACzF,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE;QAC1B,MAAM,QAAQ,GAAG,oBAAoB,KAAK,IAAI,MAAM,EAAE,CAAC;QACvD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,oFAAoF;yBAC3F;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;YAE1D,MAAM,MAAM,GAAG;gBACb,QAAQ;gBACR,eAAe,EAAE;oBACf,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ,CAAC,cAAc;wBAC7B,GAAG,EAAE,WAAW,CAAC,QAAQ;wBACzB,SAAS,EAAE,WAAW,CAAC,QAAQ,GAAG,QAAQ,CAAC,cAAc;qBAC1D;oBACD,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ,CAAC,cAAc;wBAC7B,GAAG,EAAE,WAAW,CAAC,aAAa;wBAC9B,SAAS,EAAE,WAAW,CAAC,aAAa,GAAG,QAAQ,CAAC,cAAc;qBAC/D;oBACD,WAAW,EAAE;wBACX,IAAI,EAAE,QAAQ,CAAC,iBAAiB;wBAChC,GAAG,EAAE,WAAW,CAAC,WAAW;wBAC5B,SAAS,EAAE,WAAW,CAAC,WAAW,GAAG,QAAQ,CAAC,iBAAiB;qBAChE;oBACD,eAAe,EAAE;wBACf,IAAI,EAAE,QAAQ,CAAC,qBAAqB;wBACpC,GAAG,EAAE,WAAW,CAAC,gBAAgB;wBACjC,SAAS,EACP,WAAW,CAAC,gBAAgB,GAAG,QAAQ,CAAC,qBAAqB;qBAChE;iBACF;aACF,CAAC;YAEF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACnD,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,gBAAgB,CAAC,CAAC;YAE3D,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACpE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE;iBAC3D;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-list-localizations.d.ts","sourceRoot":"","sources":["../../src/tools/connect-list-localizations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASpE,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,SAAS,QA4DjE"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { loadConfig, listLocalizations, } from "../data-sources/app-store-connect.js";
|
|
3
|
+
import { getFromCache, setCache } from "../cache/sqlite-cache.js";
|
|
4
|
+
import { CACHE_TTL } from "../utils/constants.js";
|
|
5
|
+
export function registerConnectListLocalizations(server) {
|
|
6
|
+
server.tool("connect_list_localizations", "Bir uygulamanın tüm locale'lerini ve metadata durumlarını listele", {
|
|
7
|
+
appId: z
|
|
8
|
+
.string()
|
|
9
|
+
.describe("App Store Connect app ID"),
|
|
10
|
+
}, async ({ appId }) => {
|
|
11
|
+
const cacheKey = `connect-localizations:${appId}`;
|
|
12
|
+
const cached = getFromCache(cacheKey);
|
|
13
|
+
if (cached) {
|
|
14
|
+
return { content: [{ type: "text", text: cached }] };
|
|
15
|
+
}
|
|
16
|
+
try {
|
|
17
|
+
const config = loadConfig();
|
|
18
|
+
if (!config) {
|
|
19
|
+
return {
|
|
20
|
+
content: [
|
|
21
|
+
{
|
|
22
|
+
type: "text",
|
|
23
|
+
text: "Error: App Store Connect credentials not configured. Use connect_setup tool first.",
|
|
24
|
+
},
|
|
25
|
+
],
|
|
26
|
+
isError: true,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
const localizations = await listLocalizations(config, appId);
|
|
30
|
+
const result = {
|
|
31
|
+
appId,
|
|
32
|
+
totalLocales: localizations.length,
|
|
33
|
+
localizations,
|
|
34
|
+
summary: {
|
|
35
|
+
withSubtitle: localizations.filter((l) => l.hasSubtitle).length,
|
|
36
|
+
withKeywords: localizations.filter((l) => l.hasKeywords).length,
|
|
37
|
+
withDescription: localizations.filter((l) => l.hasDescription).length,
|
|
38
|
+
withPromotionalText: localizations.filter((l) => l.hasPromotionalText).length,
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
const resultText = JSON.stringify(result, null, 2);
|
|
42
|
+
setCache(cacheKey, resultText, CACHE_TTL.CONNECT_LOCALIZATIONS);
|
|
43
|
+
return { content: [{ type: "text", text: resultText }] };
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
return {
|
|
47
|
+
content: [
|
|
48
|
+
{ type: "text", text: `Error: ${error.message}` },
|
|
49
|
+
],
|
|
50
|
+
isError: true,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=connect-list-localizations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-list-localizations.js","sourceRoot":"","sources":["../../src/tools/connect-list-localizations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,UAAU,EACV,iBAAiB,GAClB,MAAM,sCAAsC,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAElD,MAAM,UAAU,gCAAgC,CAAC,MAAiB;IAChE,MAAM,CAAC,IAAI,CACT,4BAA4B,EAC5B,mEAAmE,EACnE;QACE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,CAAC,0BAA0B,CAAC;KACxC,EACD,KAAK,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;QAClB,MAAM,QAAQ,GAAG,yBAAyB,KAAK,EAAE,CAAC;QAClD,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAChE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,oFAAoF;yBAC3F;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YAED,MAAM,aAAa,GAAG,MAAM,iBAAiB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;YAE7D,MAAM,MAAM,GAAG;gBACb,KAAK;gBACL,YAAY,EAAE,aAAa,CAAC,MAAM;gBAClC,aAAa;gBACb,OAAO,EAAE;oBACP,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM;oBAC/D,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,MAAM;oBAC/D,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,MAAM;oBACrE,mBAAmB,EAAE,aAAa,CAAC,MAAM,CACvC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAC5B,CAAC,MAAM;iBACT;aACF,CAAC;YAEF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;YACnD,QAAQ,CAAC,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,qBAAqB,CAAC,CAAC;YAEhE,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;QACpE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE;iBAC3D;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-setup.d.ts","sourceRoot":"","sources":["../../src/tools/connect-setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,QAmDrD"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { saveConfig, validateCredentials, } from "../data-sources/app-store-connect.js";
|
|
3
|
+
export function registerConnectSetup(server) {
|
|
4
|
+
server.tool("connect_setup", "App Store Connect kimlik bilgilerini yapılandır ve doğrula", {
|
|
5
|
+
issuerId: z
|
|
6
|
+
.string()
|
|
7
|
+
.describe("App Store Connect Issuer ID"),
|
|
8
|
+
apiKeyId: z
|
|
9
|
+
.string()
|
|
10
|
+
.describe("App Store Connect API Key ID"),
|
|
11
|
+
privateKeyPath: z
|
|
12
|
+
.string()
|
|
13
|
+
.describe("Path to .p8 private key file"),
|
|
14
|
+
}, async ({ issuerId, apiKeyId, privateKeyPath }) => {
|
|
15
|
+
try {
|
|
16
|
+
const config = { issuerId, apiKeyId, privateKeyPath };
|
|
17
|
+
// Validate credentials with a test API call
|
|
18
|
+
await validateCredentials(config);
|
|
19
|
+
// Save config for future use
|
|
20
|
+
saveConfig(config);
|
|
21
|
+
const result = {
|
|
22
|
+
status: "success",
|
|
23
|
+
message: "App Store Connect credentials validated and saved.",
|
|
24
|
+
config: {
|
|
25
|
+
issuerId,
|
|
26
|
+
apiKeyId,
|
|
27
|
+
privateKeyPath,
|
|
28
|
+
configPath: "~/.aso-mcp/connect-config.json",
|
|
29
|
+
},
|
|
30
|
+
};
|
|
31
|
+
return {
|
|
32
|
+
content: [
|
|
33
|
+
{ type: "text", text: JSON.stringify(result, null, 2) },
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
return {
|
|
39
|
+
content: [
|
|
40
|
+
{ type: "text", text: `Error: ${error.message}` },
|
|
41
|
+
],
|
|
42
|
+
isError: true,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=connect-setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-setup.js","sourceRoot":"","sources":["../../src/tools/connect-setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,UAAU,EACV,mBAAmB,GACpB,MAAM,sCAAsC,CAAC;AAE9C,MAAM,UAAU,oBAAoB,CAAC,MAAiB;IACpD,MAAM,CAAC,IAAI,CACT,eAAe,EACf,4DAA4D,EAC5D;QACE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,CAAC,6BAA6B,CAAC;QAC1C,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,CAAC,8BAA8B,CAAC;QAC3C,cAAc,EAAE,CAAC;aACd,MAAM,EAAE;aACR,QAAQ,CAAC,8BAA8B,CAAC;KAC5C,EACD,KAAK,EAAE,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE,EAAE;QAC/C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;YAEtD,4CAA4C;YAC5C,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;YAElC,6BAA6B;YAC7B,UAAU,CAAC,MAAM,CAAC,CAAC;YAEnB,MAAM,MAAM,GAAG;gBACb,MAAM,EAAE,SAAS;gBACjB,OAAO,EAAE,oDAAoD;gBAC7D,MAAM,EAAE;oBACN,QAAQ;oBACR,QAAQ;oBACR,cAAc;oBACd,UAAU,EAAE,gCAAgC;iBAC7C;aACF,CAAC;YAEF,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;iBACjE;aACF,CAAC;QACJ,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAO;gBACL,OAAO,EAAE;oBACP,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE;iBAC3D;gBACD,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-update-metadata.d.ts","sourceRoot":"","sources":["../../src/tools/connect-update-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAQpE,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,QAkN9D"}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { loadConfig, updateMetadata, } from "../data-sources/app-store-connect.js";
|
|
3
|
+
import { CHAR_LIMITS } from "../utils/constants.js";
|
|
4
|
+
export function registerConnectUpdateMetadata(server) {
|
|
5
|
+
server.tool("connect_update_metadata", "ASO metadata alanlarını App Store Connect'te güncelle", {
|
|
6
|
+
appId: z
|
|
7
|
+
.string()
|
|
8
|
+
.describe("App Store Connect app ID"),
|
|
9
|
+
locale: z
|
|
10
|
+
.string()
|
|
11
|
+
.default("tr")
|
|
12
|
+
.describe("Locale code — accepts both Apple format ('en-US') and country code ('us')"),
|
|
13
|
+
name: z
|
|
14
|
+
.string()
|
|
15
|
+
.optional()
|
|
16
|
+
.describe("App name / title for this locale (max 30 chars)"),
|
|
17
|
+
subtitle: z
|
|
18
|
+
.string()
|
|
19
|
+
.optional()
|
|
20
|
+
.describe("New subtitle (max 30 chars)"),
|
|
21
|
+
keywords: z
|
|
22
|
+
.string()
|
|
23
|
+
.optional()
|
|
24
|
+
.describe("New keywords (max 100 chars, comma-separated, no spaces)"),
|
|
25
|
+
description: z
|
|
26
|
+
.string()
|
|
27
|
+
.optional()
|
|
28
|
+
.describe("New description (max 4000 chars)"),
|
|
29
|
+
promotionalText: z
|
|
30
|
+
.string()
|
|
31
|
+
.optional()
|
|
32
|
+
.describe("New promotional text (max 170 chars)"),
|
|
33
|
+
whatsNew: z
|
|
34
|
+
.string()
|
|
35
|
+
.optional()
|
|
36
|
+
.describe("New what's new text (max 4000 chars)"),
|
|
37
|
+
supportUrl: z
|
|
38
|
+
.string()
|
|
39
|
+
.optional()
|
|
40
|
+
.describe("Support URL for this locale"),
|
|
41
|
+
marketingUrl: z
|
|
42
|
+
.string()
|
|
43
|
+
.optional()
|
|
44
|
+
.describe("Marketing URL for this locale"),
|
|
45
|
+
}, async ({ appId, locale, name, subtitle, keywords, description, promotionalText, whatsNew, supportUrl, marketingUrl }) => {
|
|
46
|
+
try {
|
|
47
|
+
const config = loadConfig();
|
|
48
|
+
if (!config) {
|
|
49
|
+
return {
|
|
50
|
+
content: [
|
|
51
|
+
{
|
|
52
|
+
type: "text",
|
|
53
|
+
text: "Error: App Store Connect credentials not configured. Use connect_setup tool first.",
|
|
54
|
+
},
|
|
55
|
+
],
|
|
56
|
+
isError: true,
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
// Validate character limits before making any API calls
|
|
60
|
+
const warnings = [];
|
|
61
|
+
const errors = [];
|
|
62
|
+
if (name !== undefined && name.length > CHAR_LIMITS.SUBTITLE) {
|
|
63
|
+
errors.push(`Name exceeds ${CHAR_LIMITS.SUBTITLE} char limit (${name.length} chars)`);
|
|
64
|
+
}
|
|
65
|
+
if (subtitle !== undefined && subtitle.length > CHAR_LIMITS.SUBTITLE) {
|
|
66
|
+
errors.push(`Subtitle exceeds ${CHAR_LIMITS.SUBTITLE} char limit (${subtitle.length} chars)`);
|
|
67
|
+
}
|
|
68
|
+
if (keywords !== undefined) {
|
|
69
|
+
if (keywords.length > CHAR_LIMITS.KEYWORD_FIELD) {
|
|
70
|
+
errors.push(`Keywords exceed ${CHAR_LIMITS.KEYWORD_FIELD} char limit (${keywords.length} chars)`);
|
|
71
|
+
}
|
|
72
|
+
if (keywords.includes(", ")) {
|
|
73
|
+
warnings.push("Keywords contain spaces after commas. App Store keywords should be comma-separated without spaces.");
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (description !== undefined &&
|
|
77
|
+
description.length > CHAR_LIMITS.DESCRIPTION) {
|
|
78
|
+
errors.push(`Description exceeds ${CHAR_LIMITS.DESCRIPTION} char limit (${description.length} chars)`);
|
|
79
|
+
}
|
|
80
|
+
if (promotionalText !== undefined &&
|
|
81
|
+
promotionalText.length > CHAR_LIMITS.PROMOTIONAL_TEXT) {
|
|
82
|
+
errors.push(`Promotional text exceeds ${CHAR_LIMITS.PROMOTIONAL_TEXT} char limit (${promotionalText.length} chars)`);
|
|
83
|
+
}
|
|
84
|
+
if (whatsNew !== undefined && whatsNew.length > CHAR_LIMITS.WHATS_NEW) {
|
|
85
|
+
errors.push(`What's New exceeds ${CHAR_LIMITS.WHATS_NEW} char limit (${whatsNew.length} chars)`);
|
|
86
|
+
}
|
|
87
|
+
if (errors.length > 0) {
|
|
88
|
+
return {
|
|
89
|
+
content: [
|
|
90
|
+
{
|
|
91
|
+
type: "text",
|
|
92
|
+
text: JSON.stringify({
|
|
93
|
+
status: "validation_failed",
|
|
94
|
+
errors,
|
|
95
|
+
warnings,
|
|
96
|
+
message: "Fix character limit violations before updating.",
|
|
97
|
+
}, null, 2),
|
|
98
|
+
},
|
|
99
|
+
],
|
|
100
|
+
isError: true,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// Check if any fields are provided
|
|
104
|
+
const updates = { name, subtitle, keywords, description, promotionalText, whatsNew, supportUrl, marketingUrl };
|
|
105
|
+
const hasUpdates = Object.values(updates).some((v) => v !== undefined);
|
|
106
|
+
if (!hasUpdates) {
|
|
107
|
+
return {
|
|
108
|
+
content: [
|
|
109
|
+
{
|
|
110
|
+
type: "text",
|
|
111
|
+
text: "Error: No metadata fields provided to update. Specify at least one of: name, subtitle, keywords, description, promotionalText, whatsNew, supportUrl, marketingUrl.",
|
|
112
|
+
},
|
|
113
|
+
],
|
|
114
|
+
isError: true,
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
const { before, after } = await updateMetadata(config, appId, locale, updates);
|
|
118
|
+
// Build diff
|
|
119
|
+
const diff = {};
|
|
120
|
+
if (subtitle !== undefined) {
|
|
121
|
+
diff.subtitle = { before: before.subtitle, after: after.subtitle };
|
|
122
|
+
}
|
|
123
|
+
if (keywords !== undefined) {
|
|
124
|
+
diff.keywords = { before: before.keywords, after: after.keywords };
|
|
125
|
+
}
|
|
126
|
+
if (description !== undefined) {
|
|
127
|
+
diff.description = {
|
|
128
|
+
before: before.description,
|
|
129
|
+
after: after.description,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
if (promotionalText !== undefined) {
|
|
133
|
+
diff.promotionalText = {
|
|
134
|
+
before: before.promotionalText,
|
|
135
|
+
after: after.promotionalText,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
if (whatsNew !== undefined) {
|
|
139
|
+
diff.whatsNew = { before: before.whatsNew, after: after.whatsNew };
|
|
140
|
+
}
|
|
141
|
+
if (supportUrl !== undefined) {
|
|
142
|
+
diff.supportUrl = { before: before.supportUrl, after: after.supportUrl };
|
|
143
|
+
}
|
|
144
|
+
if (marketingUrl !== undefined) {
|
|
145
|
+
diff.marketingUrl = { before: before.marketingUrl, after: after.marketingUrl };
|
|
146
|
+
}
|
|
147
|
+
const result = {
|
|
148
|
+
status: "success",
|
|
149
|
+
locale: after.locale,
|
|
150
|
+
diff,
|
|
151
|
+
warnings: warnings.length > 0 ? warnings : undefined,
|
|
152
|
+
characterLimits: {
|
|
153
|
+
subtitle: { used: after.subtitleLength, max: CHAR_LIMITS.SUBTITLE },
|
|
154
|
+
keywords: {
|
|
155
|
+
used: after.keywordsLength,
|
|
156
|
+
max: CHAR_LIMITS.KEYWORD_FIELD,
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
};
|
|
160
|
+
return {
|
|
161
|
+
content: [
|
|
162
|
+
{ type: "text", text: JSON.stringify(result, null, 2) },
|
|
163
|
+
],
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
catch (error) {
|
|
167
|
+
return {
|
|
168
|
+
content: [
|
|
169
|
+
{ type: "text", text: `Error: ${error.message}` },
|
|
170
|
+
],
|
|
171
|
+
isError: true,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
//# sourceMappingURL=connect-update-metadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect-update-metadata.js","sourceRoot":"","sources":["../../src/tools/connect-update-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"discover-keywords.d.ts","sourceRoot":"","sources":["../../src/tools/discover-keywords.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWpE,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,SAAS,QAiOzD"}
|