appstore-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/.claude/CLAUDE.md +29 -0
- package/.claude/settings.local.json +24 -0
- package/.prettierrc +7 -0
- package/README.md +170 -0
- package/dist/app-store-service.d.ts +21 -0
- package/dist/app-store-service.d.ts.map +1 -0
- package/dist/app-store-service.js +146 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/mcp/resources/countries.d.ts +5 -0
- package/dist/mcp/resources/countries.d.ts.map +1 -0
- package/dist/mcp/resources/countries.js +236 -0
- package/dist/mcp/resources/index.d.ts +3 -0
- package/dist/mcp/resources/index.d.ts.map +1 -0
- package/dist/mcp/resources/index.js +80 -0
- package/dist/mcp/tools/get-app-details.d.ts +3 -0
- package/dist/mcp/tools/get-app-details.d.ts.map +1 -0
- package/dist/mcp/tools/get-app-details.js +84 -0
- package/dist/mcp/tools/get-app-info.d.ts +3 -0
- package/dist/mcp/tools/get-app-info.d.ts.map +1 -0
- package/dist/mcp/tools/get-app-info.js +156 -0
- package/dist/mcp/tools/get-app-release-info.d.ts +3 -0
- package/dist/mcp/tools/get-app-release-info.d.ts.map +1 -0
- package/dist/mcp/tools/get-app-release-info.js +80 -0
- package/dist/mcp/tools/get-app-screenshots.d.ts +3 -0
- package/dist/mcp/tools/get-app-screenshots.d.ts.map +1 -0
- package/dist/mcp/tools/get-app-screenshots.js +71 -0
- package/dist/mcp/tools/get-trending-apps.d.ts +3 -0
- package/dist/mcp/tools/get-trending-apps.d.ts.map +1 -0
- package/dist/mcp/tools/get-trending-apps.js +89 -0
- package/dist/mcp/tools/index.d.ts +3 -0
- package/dist/mcp/tools/index.d.ts.map +1 -0
- package/dist/mcp/tools/index.js +12 -0
- package/dist/mcp/tools/list-categories.d.ts +3 -0
- package/dist/mcp/tools/list-categories.d.ts.map +1 -0
- package/dist/mcp/tools/list-categories.js +38 -0
- package/dist/mcp/tools/list-countries.d.ts +3 -0
- package/dist/mcp/tools/list-countries.d.ts.map +1 -0
- package/dist/mcp/tools/list-countries.js +40 -0
- package/dist/mcp/tools/search-apps.d.ts +3 -0
- package/dist/mcp/tools/search-apps.d.ts.map +1 -0
- package/dist/mcp/tools/search-apps.js +67 -0
- package/dist/services/app-store-service.d.ts +21 -0
- package/dist/services/app-store-service.d.ts.map +1 -0
- package/dist/services/app-store-service.js +146 -0
- package/dist/types.d.ts +46 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +41 -0
- package/eslint.config.js +9 -0
- package/package.json +46 -0
- package/src/index.ts +24 -0
- package/src/mcp/resources/countries.ts +234 -0
- package/src/mcp/resources/index.ts +117 -0
- package/src/mcp/tools/get-app-info.ts +183 -0
- package/src/mcp/tools/get-trending-apps.ts +108 -0
- package/src/mcp/tools/index.ts +10 -0
- package/src/mcp/tools/search-apps.ts +74 -0
- package/src/services/app-store-service.ts +236 -0
- package/src/types.ts +77 -0
- package/tsconfig.json +21 -0
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerGetAppReleaseInfo = registerGetAppReleaseInfo;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const app_store_service_1 = require("../../app-store-service");
|
|
6
|
+
function registerGetAppReleaseInfo(server) {
|
|
7
|
+
server.registerTool('get_app_release_info', {
|
|
8
|
+
description: 'Get release and update information for a specific app, including original release date, latest update date, and current version',
|
|
9
|
+
inputSchema: {
|
|
10
|
+
appId: zod_1.z.string().describe('The App Store ID of the app (numeric ID from the App Store URL)'),
|
|
11
|
+
country: zod_1.z
|
|
12
|
+
.string()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe('Country code for the App Store (e.g., US, GB, JP). Defaults to US'),
|
|
15
|
+
},
|
|
16
|
+
}, async ({ appId, country }) => {
|
|
17
|
+
const countryCode = country || 'US';
|
|
18
|
+
try {
|
|
19
|
+
const releaseInfo = await app_store_service_1.AppStoreService.getAppReleaseInfo(appId, countryCode);
|
|
20
|
+
if (!releaseInfo) {
|
|
21
|
+
return {
|
|
22
|
+
content: [
|
|
23
|
+
{
|
|
24
|
+
type: 'text',
|
|
25
|
+
text: JSON.stringify({
|
|
26
|
+
success: false,
|
|
27
|
+
error: `App with ID ${appId} not found`,
|
|
28
|
+
}, null, 2),
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const formatDate = (dateString) => {
|
|
34
|
+
if (!dateString)
|
|
35
|
+
return null;
|
|
36
|
+
const date = new Date(dateString);
|
|
37
|
+
return date.toLocaleDateString('en-US', {
|
|
38
|
+
year: 'numeric',
|
|
39
|
+
month: 'long',
|
|
40
|
+
day: 'numeric',
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
const result = {
|
|
44
|
+
success: true,
|
|
45
|
+
appId: appId,
|
|
46
|
+
country: countryCode,
|
|
47
|
+
releaseInfo: {
|
|
48
|
+
originalReleaseDate: releaseInfo.releaseDate,
|
|
49
|
+
originalReleaseDateFormatted: formatDate(releaseInfo.releaseDate),
|
|
50
|
+
currentVersionReleaseDate: releaseInfo.currentVersionReleaseDate,
|
|
51
|
+
currentVersionReleaseDateFormatted: formatDate(releaseInfo.currentVersionReleaseDate),
|
|
52
|
+
currentVersion: releaseInfo.version,
|
|
53
|
+
},
|
|
54
|
+
};
|
|
55
|
+
return {
|
|
56
|
+
content: [
|
|
57
|
+
{
|
|
58
|
+
type: 'text',
|
|
59
|
+
text: JSON.stringify(result, null, 2),
|
|
60
|
+
},
|
|
61
|
+
],
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
66
|
+
return {
|
|
67
|
+
content: [
|
|
68
|
+
{
|
|
69
|
+
type: 'text',
|
|
70
|
+
text: JSON.stringify({
|
|
71
|
+
success: false,
|
|
72
|
+
error: errorMessage,
|
|
73
|
+
}, null, 2),
|
|
74
|
+
},
|
|
75
|
+
],
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWFwcC1yZWxlYXNlLWluZm8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL2dldC1hcHAtcmVsZWFzZS1pbmZvLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsOERBeUZDO0FBNUZELDZCQUF3QjtBQUN4QiwrREFBMEQ7QUFFMUQsU0FBZ0IseUJBQXlCLENBQUMsTUFBaUI7SUFDdkQsTUFBTSxDQUFDLFlBQVksQ0FDZixzQkFBc0IsRUFDdEI7UUFDSSxXQUFXLEVBQUUsaUlBQWlJO1FBQzlJLFdBQVcsRUFBRTtZQUNULEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLGlFQUFpRSxDQUFDO1lBQzdGLE9BQU8sRUFBRSxPQUFDO2lCQUNMLE1BQU0sRUFBRTtpQkFDUixRQUFRLEVBQUU7aUJBQ1YsUUFBUSxDQUFDLG1FQUFtRSxDQUFDO1NBQ3JGO0tBQ0osRUFDRCxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRTtRQUN6QixNQUFNLFdBQVcsR0FBRyxPQUFPLElBQUksSUFBSSxDQUFDO1FBQ3BDLElBQUksQ0FBQztZQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sbUNBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLENBQUM7WUFFaEYsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO2dCQUNmLE9BQU87b0JBQ0gsT0FBTyxFQUFFO3dCQUNMOzRCQUNJLElBQUksRUFBRSxNQUFlOzRCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FDaEI7Z0NBQ0ksT0FBTyxFQUFFLEtBQUs7Z0NBQ2QsS0FBSyxFQUFFLGVBQWUsS0FBSyxZQUFZOzZCQUMxQyxFQUNELElBQUksRUFDSixDQUFDLENBQ0o7eUJBQ0o7cUJBQ0o7aUJBQ0osQ0FBQztZQUNOLENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxDQUFDLFVBQW1CLEVBQWlCLEVBQUU7Z0JBQ3RELElBQUksQ0FBQyxVQUFVO29CQUFFLE9BQU8sSUFBSSxDQUFDO2dCQUM3QixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztnQkFDbEMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxFQUFFO29CQUNwQyxJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUUsTUFBTTtvQkFDYixHQUFHLEVBQUUsU0FBUztpQkFDakIsQ0FBQyxDQUFDO1lBQ1AsQ0FBQyxDQUFDO1lBRUYsTUFBTSxNQUFNLEdBQUc7Z0JBQ1gsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLFdBQVcsRUFBRTtvQkFDVCxtQkFBbUIsRUFBRSxXQUFXLENBQUMsV0FBVztvQkFDNUMsNEJBQTRCLEVBQUUsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUM7b0JBQ2pFLHlCQUF5QixFQUFFLFdBQVcsQ0FBQyx5QkFBeUI7b0JBQ2hFLGtDQUFrQyxFQUFFLFVBQVUsQ0FDMUMsV0FBVyxDQUFDLHlCQUF5QixDQUN4QztvQkFDRCxjQUFjLEVBQUUsV0FBVyxDQUFDLE9BQU87aUJBQ3RDO2FBQ0osQ0FBQztZQUVGLE9BQU87Z0JBQ0gsT0FBTyxFQUFFO29CQUNMO3dCQUNJLElBQUksRUFBRSxNQUFlO3dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztxQkFDeEM7aUJBQ0o7YUFDSixDQUFDO1FBQ04sQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDYixNQUFNLFlBQVksR0FBRyxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUM7WUFDOUUsT0FBTztnQkFDSCxPQUFPLEVBQUU7b0JBQ0w7d0JBQ0ksSUFBSSxFQUFFLE1BQWU7d0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUNoQjs0QkFDSSxPQUFPLEVBQUUsS0FBSzs0QkFDZCxLQUFLLEVBQUUsWUFBWTt5QkFDdEIsRUFDRCxJQUFJLEVBQ0osQ0FBQyxDQUNKO3FCQUNKO2lCQUNKO2FBQ0osQ0FBQztRQUNOLENBQUM7SUFDTCxDQUFDLENBQ0osQ0FBQztBQUNOLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-app-screenshots.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-app-screenshots.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,QA8E1D"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerGetAppScreenshots = registerGetAppScreenshots;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const app_store_service_1 = require("../../app-store-service");
|
|
6
|
+
function registerGetAppScreenshots(server) {
|
|
7
|
+
server.registerTool('get_app_screenshots', {
|
|
8
|
+
description: 'Get screenshot URLs for a specific app. Useful for downloading or displaying app screenshots',
|
|
9
|
+
inputSchema: {
|
|
10
|
+
appId: zod_1.z.string().describe('The App Store ID of the app (numeric ID from the App Store URL)'),
|
|
11
|
+
country: zod_1.z
|
|
12
|
+
.string()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe('Country code for the App Store (e.g., US, GB, JP). Defaults to US'),
|
|
15
|
+
},
|
|
16
|
+
}, async ({ appId, country }) => {
|
|
17
|
+
const countryCode = country || 'US';
|
|
18
|
+
try {
|
|
19
|
+
const screenshots = await app_store_service_1.AppStoreService.getAppScreenshots(appId, countryCode);
|
|
20
|
+
if (!screenshots) {
|
|
21
|
+
return {
|
|
22
|
+
content: [
|
|
23
|
+
{
|
|
24
|
+
type: 'text',
|
|
25
|
+
text: JSON.stringify({
|
|
26
|
+
success: false,
|
|
27
|
+
error: `App with ID ${appId} not found`,
|
|
28
|
+
}, null, 2),
|
|
29
|
+
},
|
|
30
|
+
],
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const result = {
|
|
34
|
+
success: true,
|
|
35
|
+
appId: appId,
|
|
36
|
+
country: countryCode,
|
|
37
|
+
iphone: {
|
|
38
|
+
count: screenshots.screenshotUrls.length,
|
|
39
|
+
urls: screenshots.screenshotUrls,
|
|
40
|
+
},
|
|
41
|
+
ipad: {
|
|
42
|
+
count: screenshots.ipadScreenshotUrls.length,
|
|
43
|
+
urls: screenshots.ipadScreenshotUrls,
|
|
44
|
+
},
|
|
45
|
+
};
|
|
46
|
+
return {
|
|
47
|
+
content: [
|
|
48
|
+
{
|
|
49
|
+
type: 'text',
|
|
50
|
+
text: JSON.stringify(result, null, 2),
|
|
51
|
+
},
|
|
52
|
+
],
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
57
|
+
return {
|
|
58
|
+
content: [
|
|
59
|
+
{
|
|
60
|
+
type: 'text',
|
|
61
|
+
text: JSON.stringify({
|
|
62
|
+
success: false,
|
|
63
|
+
error: errorMessage,
|
|
64
|
+
}, null, 2),
|
|
65
|
+
},
|
|
66
|
+
],
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWFwcC1zY3JlZW5zaG90cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tY3AvdG9vbHMvZ2V0LWFwcC1zY3JlZW5zaG90cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLDhEQThFQztBQWpGRCw2QkFBd0I7QUFDeEIsK0RBQTBEO0FBRTFELFNBQWdCLHlCQUF5QixDQUFDLE1BQWlCO0lBQ3ZELE1BQU0sQ0FBQyxZQUFZLENBQ2YscUJBQXFCLEVBQ3JCO1FBQ0ksV0FBVyxFQUFFLDhGQUE4RjtRQUMzRyxXQUFXLEVBQUU7WUFDVCxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLFFBQVEsQ0FBQyxpRUFBaUUsQ0FBQztZQUM3RixPQUFPLEVBQUUsT0FBQztpQkFDTCxNQUFNLEVBQUU7aUJBQ1IsUUFBUSxFQUFFO2lCQUNWLFFBQVEsQ0FBQyxtRUFBbUUsQ0FBQztTQUNyRjtLQUNKLEVBQ0QsS0FBSyxFQUFFLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUU7UUFDekIsTUFBTSxXQUFXLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQztRQUNwQyxJQUFJLENBQUM7WUFDRCxNQUFNLFdBQVcsR0FBRyxNQUFNLG1DQUFlLENBQUMsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1lBRWhGLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDZixPQUFPO29CQUNILE9BQU8sRUFBRTt3QkFDTDs0QkFDSSxJQUFJLEVBQUUsTUFBZTs0QkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQ2hCO2dDQUNJLE9BQU8sRUFBRSxLQUFLO2dDQUNkLEtBQUssRUFBRSxlQUFlLEtBQUssWUFBWTs2QkFDMUMsRUFDRCxJQUFJLEVBQ0osQ0FBQyxDQUNKO3lCQUNKO3FCQUNKO2lCQUNKLENBQUM7WUFDTixDQUFDO1lBRUQsTUFBTSxNQUFNLEdBQUc7Z0JBQ1gsT0FBTyxFQUFFLElBQUk7Z0JBQ2IsS0FBSyxFQUFFLEtBQUs7Z0JBQ1osT0FBTyxFQUFFLFdBQVc7Z0JBQ3BCLE1BQU0sRUFBRTtvQkFDSixLQUFLLEVBQUUsV0FBVyxDQUFDLGNBQWMsQ0FBQyxNQUFNO29CQUN4QyxJQUFJLEVBQUUsV0FBVyxDQUFDLGNBQWM7aUJBQ25DO2dCQUNELElBQUksRUFBRTtvQkFDRixLQUFLLEVBQUUsV0FBVyxDQUFDLGtCQUFrQixDQUFDLE1BQU07b0JBQzVDLElBQUksRUFBRSxXQUFXLENBQUMsa0JBQWtCO2lCQUN2QzthQUNKLENBQUM7WUFFRixPQUFPO2dCQUNILE9BQU8sRUFBRTtvQkFDTDt3QkFDSSxJQUFJLEVBQUUsTUFBZTt3QkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7cUJBQ3hDO2lCQUNKO2FBQ0osQ0FBQztRQUNOLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2IsTUFBTSxZQUFZLEdBQUcsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUFDO1lBQzlFLE9BQU87Z0JBQ0gsT0FBTyxFQUFFO29CQUNMO3dCQUNJLElBQUksRUFBRSxNQUFlO3dCQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FDaEI7NEJBQ0ksT0FBTyxFQUFFLEtBQUs7NEJBQ2QsS0FBSyxFQUFFLFlBQVk7eUJBQ3RCLEVBQ0QsSUFBSSxFQUNKLENBQUMsQ0FDSjtxQkFDSjtpQkFDSjthQUNKLENBQUM7UUFDTixDQUFDO0lBQ0wsQ0FBQyxDQUNKLENBQUM7QUFDTixDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-trending-apps.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/get-trending-apps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,QAsGxD"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerGetTrendingApps = registerGetTrendingApps;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const app_store_service_1 = require("../../services/app-store-service");
|
|
6
|
+
const types_1 = require("../../types");
|
|
7
|
+
function registerGetTrendingApps(server) {
|
|
8
|
+
server.registerTool('get_trending_apps', {
|
|
9
|
+
description: 'Get top/trending apps from the App Store by category, platform, and pricing type',
|
|
10
|
+
inputSchema: {
|
|
11
|
+
platform: zod_1.z
|
|
12
|
+
.string()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe('Platform to get apps for: iphone, ipad, mac, or tv. Defaults to iphone'),
|
|
15
|
+
pricingType: zod_1.z
|
|
16
|
+
.string()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe('Pricing type: free (top free apps), paid (top paid apps), or grossing (top grossing apps). Defaults to free'),
|
|
19
|
+
country: zod_1.z
|
|
20
|
+
.string()
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('Country code for the App Store (e.g., US, GB, JP). Defaults to US'),
|
|
23
|
+
categoryId: zod_1.z
|
|
24
|
+
.string()
|
|
25
|
+
.optional()
|
|
26
|
+
.describe('Optional category ID to filter by (e.g., 6014 for Games, 6007 for Productivity)'),
|
|
27
|
+
limit: zod_1.z
|
|
28
|
+
.number()
|
|
29
|
+
.optional()
|
|
30
|
+
.describe('Maximum number of results to return (1-100). Defaults to 25'),
|
|
31
|
+
},
|
|
32
|
+
}, async ({ platform, pricingType, country, categoryId, limit }) => {
|
|
33
|
+
const platformValue = (platform || 'iphone');
|
|
34
|
+
const pricingValue = (pricingType || 'free');
|
|
35
|
+
const countryCode = country || 'US';
|
|
36
|
+
const resultLimit = limit || 25;
|
|
37
|
+
try {
|
|
38
|
+
const apps = await app_store_service_1.AppStoreService.getTrendingApps(platformValue, pricingValue, countryCode, categoryId, resultLimit);
|
|
39
|
+
const categoryInfo = categoryId
|
|
40
|
+
? types_1.APP_STORE_CATEGORIES.find((c) => c.id === categoryId)
|
|
41
|
+
: null;
|
|
42
|
+
const result = {
|
|
43
|
+
success: true,
|
|
44
|
+
count: apps.length,
|
|
45
|
+
filters: {
|
|
46
|
+
platform: platformValue,
|
|
47
|
+
pricingType: pricingValue,
|
|
48
|
+
country: countryCode,
|
|
49
|
+
category: categoryInfo
|
|
50
|
+
? { id: categoryInfo.id, name: categoryInfo.name }
|
|
51
|
+
: 'All Categories',
|
|
52
|
+
},
|
|
53
|
+
apps: apps.map((app, index) => ({
|
|
54
|
+
rank: index + 1,
|
|
55
|
+
id: app.id,
|
|
56
|
+
name: app.name,
|
|
57
|
+
artistName: app.artistName,
|
|
58
|
+
url: app.url,
|
|
59
|
+
iconUrl: app.iconUrl,
|
|
60
|
+
price: app.formattedPrice || 'Free',
|
|
61
|
+
primaryGenre: app.primaryGenreName,
|
|
62
|
+
})),
|
|
63
|
+
};
|
|
64
|
+
return {
|
|
65
|
+
content: [
|
|
66
|
+
{
|
|
67
|
+
type: 'text',
|
|
68
|
+
text: JSON.stringify(result, null, 2),
|
|
69
|
+
},
|
|
70
|
+
],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (error) {
|
|
74
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
75
|
+
return {
|
|
76
|
+
content: [
|
|
77
|
+
{
|
|
78
|
+
type: 'text',
|
|
79
|
+
text: JSON.stringify({
|
|
80
|
+
success: false,
|
|
81
|
+
error: errorMessage,
|
|
82
|
+
}, null, 2),
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LXRyZW5kaW5nLWFwcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL2dldC10cmVuZGluZy1hcHBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0EsMERBc0dDO0FBMUdELDZCQUF3QjtBQUN4Qix3RUFBbUU7QUFDbkUsdUNBQTBFO0FBRTFFLFNBQWdCLHVCQUF1QixDQUFDLE1BQWlCO0lBQ3JELE1BQU0sQ0FBQyxZQUFZLENBQ2YsbUJBQW1CLEVBQ25CO1FBQ0ksV0FBVyxFQUFFLGtGQUFrRjtRQUMvRixXQUFXLEVBQUU7WUFDVCxRQUFRLEVBQUUsT0FBQztpQkFDTixNQUFNLEVBQUU7aUJBQ1IsUUFBUSxFQUFFO2lCQUNWLFFBQVEsQ0FBQyx3RUFBd0UsQ0FBQztZQUN2RixXQUFXLEVBQUUsT0FBQztpQkFDVCxNQUFNLEVBQUU7aUJBQ1IsUUFBUSxFQUFFO2lCQUNWLFFBQVEsQ0FDTCw2R0FBNkcsQ0FDaEg7WUFDTCxPQUFPLEVBQUUsT0FBQztpQkFDTCxNQUFNLEVBQUU7aUJBQ1IsUUFBUSxFQUFFO2lCQUNWLFFBQVEsQ0FBQyxtRUFBbUUsQ0FBQztZQUNsRixVQUFVLEVBQUUsT0FBQztpQkFDUixNQUFNLEVBQUU7aUJBQ1IsUUFBUSxFQUFFO2lCQUNWLFFBQVEsQ0FDTCxpRkFBaUYsQ0FDcEY7WUFDTCxLQUFLLEVBQUUsT0FBQztpQkFDSCxNQUFNLEVBQUU7aUJBQ1IsUUFBUSxFQUFFO2lCQUNWLFFBQVEsQ0FBQyw2REFBNkQsQ0FBQztTQUMvRTtLQUNKLEVBQ0QsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDNUQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFhLENBQUM7UUFDekQsTUFBTSxZQUFZLEdBQUcsQ0FBQyxXQUFXLElBQUksTUFBTSxDQUFnQixDQUFDO1FBQzVELE1BQU0sV0FBVyxHQUFHLE9BQU8sSUFBSSxJQUFJLENBQUM7UUFDcEMsTUFBTSxXQUFXLEdBQUcsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUVoQyxJQUFJLENBQUM7WUFDRCxNQUFNLElBQUksR0FBRyxNQUFNLG1DQUFlLENBQUMsZUFBZSxDQUM5QyxhQUFhLEVBQ2IsWUFBWSxFQUNaLFdBQVcsRUFDWCxVQUFVLEVBQ1YsV0FBVyxDQUNkLENBQUM7WUFFRixNQUFNLFlBQVksR0FBRyxVQUFVO2dCQUMzQixDQUFDLENBQUMsNEJBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLFVBQVUsQ0FBQztnQkFDdkQsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUVYLE1BQU0sTUFBTSxHQUFHO2dCQUNYLE9BQU8sRUFBRSxJQUFJO2dCQUNiLEtBQUssRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDbEIsT0FBTyxFQUFFO29CQUNMLFFBQVEsRUFBRSxhQUFhO29CQUN2QixXQUFXLEVBQUUsWUFBWTtvQkFDekIsT0FBTyxFQUFFLFdBQVc7b0JBQ3BCLFFBQVEsRUFBRSxZQUFZO3dCQUNsQixDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsWUFBWSxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsWUFBWSxDQUFDLElBQUksRUFBRTt3QkFDbEQsQ0FBQyxDQUFDLGdCQUFnQjtpQkFDekI7Z0JBQ0QsSUFBSSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO29CQUM1QixJQUFJLEVBQUUsS0FBSyxHQUFHLENBQUM7b0JBQ2YsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNWLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtvQkFDZCxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7b0JBQzFCLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztvQkFDWixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87b0JBQ3BCLEtBQUssRUFBRSxHQUFHLENBQUMsY0FBYyxJQUFJLE1BQU07b0JBQ25DLFlBQVksRUFBRSxHQUFHLENBQUMsZ0JBQWdCO2lCQUNyQyxDQUFDLENBQUM7YUFDTixDQUFDO1lBRUYsT0FBTztnQkFDSCxPQUFPLEVBQUU7b0JBQ0w7d0JBQ0ksSUFBSSxFQUFFLE1BQWU7d0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3FCQUN4QztpQkFDSjthQUNKLENBQUM7UUFDTixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNiLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztZQUM5RSxPQUFPO2dCQUNILE9BQU8sRUFBRTtvQkFDTDt3QkFDSSxJQUFJLEVBQUUsTUFBZTt3QkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQ2hCOzRCQUNJLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSxZQUFZO3lCQUN0QixFQUNELElBQUksRUFDSixDQUFDLENBQ0o7cUJBQ0o7aUJBQ0o7YUFDSixDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUMsQ0FDSixDQUFDO0FBQ04sQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKpE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,QAIjD"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerAllTools = registerAllTools;
|
|
4
|
+
const search_apps_1 = require("./search-apps");
|
|
5
|
+
const get_app_info_1 = require("./get-app-info");
|
|
6
|
+
const get_trending_apps_1 = require("./get-trending-apps");
|
|
7
|
+
function registerAllTools(server) {
|
|
8
|
+
(0, search_apps_1.registerSearchApps)(server);
|
|
9
|
+
(0, get_app_info_1.registerGetAppInfo)(server);
|
|
10
|
+
(0, get_trending_apps_1.registerGetTrendingApps)(server);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0EsNENBSUM7QUFSRCwrQ0FBbUQ7QUFDbkQsaURBQW9EO0FBQ3BELDJEQUE4RDtBQUU5RCxTQUFnQixnQkFBZ0IsQ0FBQyxNQUFpQjtJQUM5QyxJQUFBLGdDQUFrQixFQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLElBQUEsaUNBQWtCLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFDM0IsSUFBQSwyQ0FBdUIsRUFBQyxNQUFNLENBQUMsQ0FBQztBQUNwQyxDQUFDIn0=
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-categories.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-categories.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,QAqCvD"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerListCategories = registerListCategories;
|
|
4
|
+
const types_1 = require("../../types");
|
|
5
|
+
function registerListCategories(server) {
|
|
6
|
+
server.registerTool('list_categories', {
|
|
7
|
+
description: 'List all available App Store categories, platforms, and pricing types. Useful for getting category IDs to use with get_trending_apps',
|
|
8
|
+
inputSchema: {},
|
|
9
|
+
}, async () => {
|
|
10
|
+
const result = {
|
|
11
|
+
success: true,
|
|
12
|
+
categories: types_1.APP_STORE_CATEGORIES.map((category) => ({
|
|
13
|
+
id: category.id,
|
|
14
|
+
name: category.name,
|
|
15
|
+
emoji: category.emoji,
|
|
16
|
+
})),
|
|
17
|
+
platforms: types_1.PLATFORMS.map((platform) => ({
|
|
18
|
+
value: platform.value,
|
|
19
|
+
label: platform.label,
|
|
20
|
+
emoji: platform.emoji,
|
|
21
|
+
})),
|
|
22
|
+
pricingTypes: types_1.PRICING_TYPES.map((pricing) => ({
|
|
23
|
+
value: pricing.value,
|
|
24
|
+
label: pricing.label,
|
|
25
|
+
emoji: pricing.emoji,
|
|
26
|
+
})),
|
|
27
|
+
};
|
|
28
|
+
return {
|
|
29
|
+
content: [
|
|
30
|
+
{
|
|
31
|
+
type: 'text',
|
|
32
|
+
text: JSON.stringify(result, null, 2),
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
};
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jYXRlZ29yaWVzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL21jcC90b29scy9saXN0LWNhdGVnb3JpZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFHQSx3REFxQ0M7QUF2Q0QsdUNBQTZFO0FBRTdFLFNBQWdCLHNCQUFzQixDQUFDLE1BQWlCO0lBQ3BELE1BQU0sQ0FBQyxZQUFZLENBQ2YsaUJBQWlCLEVBQ2pCO1FBQ0ksV0FBVyxFQUFFLHNJQUFzSTtRQUNuSixXQUFXLEVBQUUsRUFBRTtLQUNsQixFQUNELEtBQUssSUFBSSxFQUFFO1FBQ1AsTUFBTSxNQUFNLEdBQUc7WUFDWCxPQUFPLEVBQUUsSUFBSTtZQUNiLFVBQVUsRUFBRSw0QkFBb0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ2hELEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRTtnQkFDZixJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUk7Z0JBQ25CLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSzthQUN4QixDQUFDLENBQUM7WUFDSCxTQUFTLEVBQUUsaUJBQVMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLEVBQUUsRUFBRSxDQUFDLENBQUM7Z0JBQ3BDLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSztnQkFDckIsS0FBSyxFQUFFLFFBQVEsQ0FBQyxLQUFLO2dCQUNyQixLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUs7YUFDeEIsQ0FBQyxDQUFDO1lBQ0gsWUFBWSxFQUFFLHFCQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7Z0JBQ3BCLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSztnQkFDcEIsS0FBSyxFQUFFLE9BQU8sQ0FBQyxLQUFLO2FBQ3ZCLENBQUMsQ0FBQztTQUNOLENBQUM7UUFFRixPQUFPO1lBQ0gsT0FBTyxFQUFFO2dCQUNMO29CQUNJLElBQUksRUFBRSxNQUFlO29CQUNyQixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztpQkFDeEM7YUFDSjtTQUNKLENBQUM7SUFDTixDQUFDLENBQ0osQ0FBQztBQUNOLENBQUMifQ==
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list-countries.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/list-countries.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,SAAS,QA0CtD"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerListCountries = registerListCountries;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const countries_1 = require("../resources/countries");
|
|
6
|
+
function registerListCountries(server) {
|
|
7
|
+
server.registerTool('list_countries', {
|
|
8
|
+
description: 'List all available App Store countries or search for a specific country. Returns country codes that can be used with other tools',
|
|
9
|
+
inputSchema: {
|
|
10
|
+
search: zod_1.z
|
|
11
|
+
.string()
|
|
12
|
+
.optional()
|
|
13
|
+
.describe('Optional search term to filter countries by name'),
|
|
14
|
+
},
|
|
15
|
+
}, async ({ search }) => {
|
|
16
|
+
let countries = countries_1.COUNTRIES;
|
|
17
|
+
if (search) {
|
|
18
|
+
const searchLower = search.toLowerCase();
|
|
19
|
+
countries = countries_1.COUNTRIES.filter((country) => country.name.toLowerCase().includes(searchLower));
|
|
20
|
+
}
|
|
21
|
+
const result = {
|
|
22
|
+
success: true,
|
|
23
|
+
count: countries.length,
|
|
24
|
+
searchTerm: search || null,
|
|
25
|
+
countries: countries.map((country) => ({
|
|
26
|
+
code: country.code,
|
|
27
|
+
name: country.name,
|
|
28
|
+
})),
|
|
29
|
+
};
|
|
30
|
+
return {
|
|
31
|
+
content: [
|
|
32
|
+
{
|
|
33
|
+
type: 'text',
|
|
34
|
+
text: JSON.stringify(result, null, 2),
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jb3VudHJpZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL2xpc3QtY291bnRyaWVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsc0RBMENDO0FBN0NELDZCQUF3QjtBQUN4QixzREFBbUQ7QUFFbkQsU0FBZ0IscUJBQXFCLENBQUMsTUFBaUI7SUFDbkQsTUFBTSxDQUFDLFlBQVksQ0FDZixnQkFBZ0IsRUFDaEI7UUFDSSxXQUFXLEVBQUUsa0lBQWtJO1FBQy9JLFdBQVcsRUFBRTtZQUNULE1BQU0sRUFBRSxPQUFDO2lCQUNKLE1BQU0sRUFBRTtpQkFDUixRQUFRLEVBQUU7aUJBQ1YsUUFBUSxDQUFDLGtEQUFrRCxDQUFDO1NBQ3BFO0tBQ0osRUFDRCxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFO1FBQ2pCLElBQUksU0FBUyxHQUFHLHFCQUFTLENBQUM7UUFFMUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNULE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN6QyxTQUFTLEdBQUcscUJBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FDbkQsQ0FBQztRQUNOLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRztZQUNYLE9BQU8sRUFBRSxJQUFJO1lBQ2IsS0FBSyxFQUFFLFNBQVMsQ0FBQyxNQUFNO1lBQ3ZCLFVBQVUsRUFBRSxNQUFNLElBQUksSUFBSTtZQUMxQixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkMsSUFBSSxFQUFFLE9BQU8sQ0FBQyxJQUFJO2dCQUNsQixJQUFJLEVBQUUsT0FBTyxDQUFDLElBQUk7YUFDckIsQ0FBQyxDQUFDO1NBQ04sQ0FBQztRQUVGLE9BQU87WUFDSCxPQUFPLEVBQUU7Z0JBQ0w7b0JBQ0ksSUFBSSxFQUFFLE1BQWU7b0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2lCQUN4QzthQUNKO1NBQ0osQ0FBQztJQUNOLENBQUMsQ0FDSixDQUFDO0FBQ04sQ0FBQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search-apps.d.ts","sourceRoot":"","sources":["../../../src/mcp/tools/search-apps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAIpE,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,QAqEnD"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.registerSearchApps = registerSearchApps;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
const app_store_service_1 = require("../../services/app-store-service");
|
|
6
|
+
function registerSearchApps(server) {
|
|
7
|
+
server.registerTool('search_apps', {
|
|
8
|
+
description: 'Search for apps on the App Store by name or keyword',
|
|
9
|
+
inputSchema: {
|
|
10
|
+
query: zod_1.z.string().describe('The search term to find apps'),
|
|
11
|
+
country: zod_1.z
|
|
12
|
+
.string()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe('Country code for the App Store (e.g., US, GB, JP). Defaults to US'),
|
|
15
|
+
limit: zod_1.z
|
|
16
|
+
.number()
|
|
17
|
+
.optional()
|
|
18
|
+
.describe('Maximum number of results to return (1-200). Defaults to 25'),
|
|
19
|
+
},
|
|
20
|
+
}, async ({ query, country, limit }) => {
|
|
21
|
+
const countryCode = country || 'US';
|
|
22
|
+
const resultLimit = limit || 25;
|
|
23
|
+
try {
|
|
24
|
+
const apps = await app_store_service_1.AppStoreService.searchApps(query, countryCode, resultLimit);
|
|
25
|
+
const result = {
|
|
26
|
+
success: true,
|
|
27
|
+
count: apps.length,
|
|
28
|
+
country: countryCode,
|
|
29
|
+
query: query,
|
|
30
|
+
apps: apps.map((app) => ({
|
|
31
|
+
id: app.id,
|
|
32
|
+
name: app.name,
|
|
33
|
+
artistName: app.artistName,
|
|
34
|
+
url: app.url,
|
|
35
|
+
iconUrl: app.iconUrl,
|
|
36
|
+
price: app.formattedPrice || 'Free',
|
|
37
|
+
rating: app.averageUserRating?.toFixed(1) || 'N/A',
|
|
38
|
+
ratingCount: app.userRatingCount || 0,
|
|
39
|
+
primaryGenre: app.primaryGenreName,
|
|
40
|
+
})),
|
|
41
|
+
};
|
|
42
|
+
return {
|
|
43
|
+
content: [
|
|
44
|
+
{
|
|
45
|
+
type: 'text',
|
|
46
|
+
text: JSON.stringify(result, null, 2),
|
|
47
|
+
},
|
|
48
|
+
],
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch (error) {
|
|
52
|
+
const errorMessage = error instanceof Error ? error.message : 'Unknown error';
|
|
53
|
+
return {
|
|
54
|
+
content: [
|
|
55
|
+
{
|
|
56
|
+
type: 'text',
|
|
57
|
+
text: JSON.stringify({
|
|
58
|
+
success: false,
|
|
59
|
+
error: errorMessage,
|
|
60
|
+
}, null, 2),
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VhcmNoLWFwcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWNwL3Rvb2xzL3NlYXJjaC1hcHBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsZ0RBcUVDO0FBeEVELDZCQUF3QjtBQUN4Qix3RUFBbUU7QUFFbkUsU0FBZ0Isa0JBQWtCLENBQUMsTUFBaUI7SUFDaEQsTUFBTSxDQUFDLFlBQVksQ0FDZixhQUFhLEVBQ2I7UUFDSSxXQUFXLEVBQUUscURBQXFEO1FBQ2xFLFdBQVcsRUFBRTtZQUNULEtBQUssRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLDhCQUE4QixDQUFDO1lBQzFELE9BQU8sRUFBRSxPQUFDO2lCQUNMLE1BQU0sRUFBRTtpQkFDUixRQUFRLEVBQUU7aUJBQ1YsUUFBUSxDQUFDLG1FQUFtRSxDQUFDO1lBQ2xGLEtBQUssRUFBRSxPQUFDO2lCQUNILE1BQU0sRUFBRTtpQkFDUixRQUFRLEVBQUU7aUJBQ1YsUUFBUSxDQUFDLDZEQUE2RCxDQUFDO1NBQy9FO0tBQ0osRUFDRCxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDaEMsTUFBTSxXQUFXLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQztRQUNwQyxNQUFNLFdBQVcsR0FBRyxLQUFLLElBQUksRUFBRSxDQUFDO1FBQ2hDLElBQUksQ0FBQztZQUNELE1BQU0sSUFBSSxHQUFHLE1BQU0sbUNBQWUsQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFLFdBQVcsRUFBRSxXQUFXLENBQUMsQ0FBQztZQUUvRSxNQUFNLE1BQU0sR0FBRztnQkFDWCxPQUFPLEVBQUUsSUFBSTtnQkFDYixLQUFLLEVBQUUsSUFBSSxDQUFDLE1BQU07Z0JBQ2xCLE9BQU8sRUFBRSxXQUFXO2dCQUNwQixLQUFLLEVBQUUsS0FBSztnQkFDWixJQUFJLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztvQkFDckIsRUFBRSxFQUFFLEdBQUcsQ0FBQyxFQUFFO29CQUNWLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSTtvQkFDZCxVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVU7b0JBQzFCLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRztvQkFDWixPQUFPLEVBQUUsR0FBRyxDQUFDLE9BQU87b0JBQ3BCLEtBQUssRUFBRSxHQUFHLENBQUMsY0FBYyxJQUFJLE1BQU07b0JBQ25DLE1BQU0sRUFBRSxHQUFHLENBQUMsaUJBQWlCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUs7b0JBQ2xELFdBQVcsRUFBRSxHQUFHLENBQUMsZUFBZSxJQUFJLENBQUM7b0JBQ3JDLFlBQVksRUFBRSxHQUFHLENBQUMsZ0JBQWdCO2lCQUNyQyxDQUFDLENBQUM7YUFDTixDQUFDO1lBRUYsT0FBTztnQkFDSCxPQUFPLEVBQUU7b0JBQ0w7d0JBQ0ksSUFBSSxFQUFFLE1BQWU7d0JBQ3JCLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO3FCQUN4QztpQkFDSjthQUNKLENBQUM7UUFDTixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNiLE1BQU0sWUFBWSxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGVBQWUsQ0FBQztZQUM5RSxPQUFPO2dCQUNILE9BQU8sRUFBRTtvQkFDTDt3QkFDSSxJQUFJLEVBQUUsTUFBZTt3QkFDckIsSUFBSSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQ2hCOzRCQUNJLE9BQU8sRUFBRSxLQUFLOzRCQUNkLEtBQUssRUFBRSxZQUFZO3lCQUN0QixFQUNELElBQUksRUFDSixDQUFDLENBQ0o7cUJBQ0o7aUJBQ0o7YUFDSixDQUFDO1FBQ04sQ0FBQztJQUNMLENBQUMsQ0FDSixDQUFDO0FBQ04sQ0FBQyJ9
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { App, Platform, PricingType } from '../types';
|
|
2
|
+
export declare class AppStoreService {
|
|
3
|
+
private static getFeedName;
|
|
4
|
+
private static buildRssUrl;
|
|
5
|
+
private static parseSearchResult;
|
|
6
|
+
private static parseRssEntry;
|
|
7
|
+
static searchApps(query: string, country?: string, limit?: number): Promise<App[]>;
|
|
8
|
+
static getAppDetails(appId: string, country?: string): Promise<App | null>;
|
|
9
|
+
static lookupMultipleApps(appIds: string[], country?: string): Promise<Map<string, App>>;
|
|
10
|
+
static getTrendingApps(platform?: Platform, pricingType?: PricingType, country?: string, categoryId?: string, limit?: number): Promise<App[]>;
|
|
11
|
+
static getAppReleaseInfo(appId: string, country?: string): Promise<{
|
|
12
|
+
releaseDate?: string;
|
|
13
|
+
currentVersionReleaseDate?: string;
|
|
14
|
+
version?: string;
|
|
15
|
+
} | null>;
|
|
16
|
+
static getAppScreenshots(appId: string, country?: string): Promise<{
|
|
17
|
+
screenshotUrls: string[];
|
|
18
|
+
ipadScreenshotUrls: string[];
|
|
19
|
+
} | null>;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=app-store-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-store-service.d.ts","sourceRoot":"","sources":["../../src/services/app-store-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAyDtD,qBAAa,eAAe;IACxB,OAAO,CAAC,MAAM,CAAC,WAAW;IA2B1B,OAAO,CAAC,MAAM,CAAC,WAAW;IAU1B,OAAO,CAAC,MAAM,CAAC,iBAAiB;IA0BhC,OAAO,CAAC,MAAM,CAAC,aAAa;WAiBf,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAa,EAAE,KAAK,GAAE,MAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;WAarF,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,MAAa,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC;WAezE,kBAAkB,CAC3B,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,GAAE,MAAa,GACvB,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;WAiBf,eAAe,CACxB,QAAQ,GAAE,QAAmB,EAC7B,WAAW,GAAE,WAAoB,EACjC,OAAO,GAAE,MAAa,EACtB,UAAU,CAAC,EAAE,MAAM,EACnB,KAAK,GAAE,MAAW,GACnB,OAAO,CAAC,GAAG,EAAE,CAAC;WAUJ,iBAAiB,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAAa,GACvB,OAAO,CAAC;QAAE,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,yBAAyB,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;WAcpF,iBAAiB,CAC1B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,MAAa,GACvB,OAAO,CAAC;QAAE,cAAc,EAAE,MAAM,EAAE,CAAC;QAAC,kBAAkB,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,IAAI,CAAC;CAYhF"}
|