@ggaiteam/appstore-connect-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 +353 -0
- package/dist/auth.d.ts +26 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +72 -0
- package/dist/auth.js.map +1 -0
- package/dist/client.d.ts +31 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +97 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +24 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +129 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +22 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +208 -0
- package/dist/server.js.map +1 -0
- package/dist/tools.d.ts +22 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +118 -0
- package/dist/tools.js.map +1 -0
- package/dist/tools.json +1 -0
- package/dist/transport.d.ts +20 -0
- package/dist/transport.d.ts.map +1 -0
- package/dist/transport.js +99 -0
- package/dist/transport.js.map +1 -0
- package/dist/types.d.ts +56 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* transport.ts — Transport layer for the MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Provides both stdio (local) and Streamable HTTP (remote) transports.
|
|
5
|
+
*/
|
|
6
|
+
import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
7
|
+
/** Start the server with stdio transport (for local use). */
|
|
8
|
+
export declare function startStdio(server: Server): Promise<void>;
|
|
9
|
+
/** Factory that creates a fresh MCP server per HTTP session. */
|
|
10
|
+
export type ServerFactory = () => Server;
|
|
11
|
+
/**
|
|
12
|
+
* Start the server with HTTP/SSE transport (for remote deployment).
|
|
13
|
+
*
|
|
14
|
+
* Each client session gets its own Server instance + transport pair
|
|
15
|
+
* (the MCP Server class only supports one transport at a time).
|
|
16
|
+
*
|
|
17
|
+
* Includes a health check endpoint at /health.
|
|
18
|
+
*/
|
|
19
|
+
export declare function startHttp(createServer: ServerFactory, host: string, port: number): Promise<void>;
|
|
20
|
+
//# sourceMappingURL=transport.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAExE,6DAA6D;AAC7D,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9D;AAED,gEAAgE;AAChE,MAAM,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC;AAOzC;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,YAAY,EAAE,aAAa,EAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAuFf"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* transport.ts — Transport layer for the MCP server.
|
|
3
|
+
*
|
|
4
|
+
* Provides both stdio (local) and Streamable HTTP (remote) transports.
|
|
5
|
+
*/
|
|
6
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
7
|
+
import { StreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/streamableHttp.js";
|
|
8
|
+
import express from "express";
|
|
9
|
+
import { randomUUID } from "node:crypto";
|
|
10
|
+
/** Start the server with stdio transport (for local use). */
|
|
11
|
+
export async function startStdio(server) {
|
|
12
|
+
const transport = new StdioServerTransport();
|
|
13
|
+
await server.connect(transport);
|
|
14
|
+
console.error("[appstore-connect-mcp] stdio transport ready");
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Start the server with HTTP/SSE transport (for remote deployment).
|
|
18
|
+
*
|
|
19
|
+
* Each client session gets its own Server instance + transport pair
|
|
20
|
+
* (the MCP Server class only supports one transport at a time).
|
|
21
|
+
*
|
|
22
|
+
* Includes a health check endpoint at /health.
|
|
23
|
+
*/
|
|
24
|
+
export async function startHttp(createServer, host, port) {
|
|
25
|
+
const app = express();
|
|
26
|
+
app.use(express.json({ limit: "50mb" }));
|
|
27
|
+
// Health check
|
|
28
|
+
app.get("/health", (_req, res) => {
|
|
29
|
+
res.json({ status: "ok", server: "appstore-connect-mcp", version: "1.0.0" });
|
|
30
|
+
});
|
|
31
|
+
// Session storage — each session has its own server + transport
|
|
32
|
+
const sessions = new Map();
|
|
33
|
+
app.post("/mcp", async (req, res) => {
|
|
34
|
+
try {
|
|
35
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
36
|
+
const session = sessionId ? sessions.get(sessionId) : undefined;
|
|
37
|
+
if (session) {
|
|
38
|
+
// Existing session — delegate to its transport
|
|
39
|
+
await session.transport.handleRequest(req, res, req.body);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
// New session: create server + transport, handle the (initialize) request,
|
|
43
|
+
// then store the session once its ID is available.
|
|
44
|
+
const transport = new StreamableHTTPServerTransport({
|
|
45
|
+
sessionIdGenerator: () => randomUUID(),
|
|
46
|
+
});
|
|
47
|
+
const server = createServer();
|
|
48
|
+
transport.onclose = async () => {
|
|
49
|
+
const sid = transport.sessionId;
|
|
50
|
+
if (sid) {
|
|
51
|
+
sessions.delete(sid);
|
|
52
|
+
await server.close();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
await server.connect(transport);
|
|
56
|
+
// handleRequest processes the initialize request and sets the session ID
|
|
57
|
+
await transport.handleRequest(req, res, req.body);
|
|
58
|
+
// After the initialize handshake, the session ID is available
|
|
59
|
+
const newSid = transport.sessionId;
|
|
60
|
+
if (newSid) {
|
|
61
|
+
sessions.set(newSid, { server, transport });
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
console.error("[appstore-connect-mcp] MCP POST error:", err);
|
|
67
|
+
if (!res.headersSent) {
|
|
68
|
+
res.status(500).json({ error: "Internal server error" });
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
});
|
|
72
|
+
// SSE streaming endpoint for server-to-client messages
|
|
73
|
+
app.get("/mcp", async (req, res) => {
|
|
74
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
75
|
+
const session = sessionId ? sessions.get(sessionId) : undefined;
|
|
76
|
+
if (!session) {
|
|
77
|
+
res
|
|
78
|
+
.status(400)
|
|
79
|
+
.json({ error: "No valid session. Send an initialize request first." });
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
await session.transport.handleRequest(req, res);
|
|
83
|
+
});
|
|
84
|
+
// Session termination
|
|
85
|
+
app.delete("/mcp", async (req, res) => {
|
|
86
|
+
const sessionId = req.headers["mcp-session-id"];
|
|
87
|
+
const session = sessionId ? sessions.get(sessionId) : undefined;
|
|
88
|
+
if (!session) {
|
|
89
|
+
res.status(400).json({ error: "No valid session." });
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
await session.transport.handleRequest(req, res);
|
|
93
|
+
});
|
|
94
|
+
app.listen(port, host, () => {
|
|
95
|
+
console.error(`[appstore-connect-mcp] HTTP transport ready on http://${host}:${port}/mcp`);
|
|
96
|
+
console.error(`[appstore-connect-mcp] Health check at http://${host}:${port}/health`);
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=transport.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for the App Store Connect MCP server.
|
|
3
|
+
*/
|
|
4
|
+
/** A single parameter in a tool definition (path or query). */
|
|
5
|
+
export interface ToolParam {
|
|
6
|
+
name: string;
|
|
7
|
+
required: boolean;
|
|
8
|
+
description: string;
|
|
9
|
+
schema: {
|
|
10
|
+
type?: string;
|
|
11
|
+
items?: {
|
|
12
|
+
type?: string;
|
|
13
|
+
enum?: string[];
|
|
14
|
+
};
|
|
15
|
+
enum?: string[];
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
/** A tool definition generated from the OpenAPI spec. */
|
|
19
|
+
export interface ToolDef {
|
|
20
|
+
name: string;
|
|
21
|
+
summary: string;
|
|
22
|
+
description: string;
|
|
23
|
+
method: string;
|
|
24
|
+
path: string;
|
|
25
|
+
category: string;
|
|
26
|
+
pathParams: ToolParam[];
|
|
27
|
+
queryParams: ToolParam[];
|
|
28
|
+
hasBody: boolean | object;
|
|
29
|
+
}
|
|
30
|
+
/** The overall tools.json structure. */
|
|
31
|
+
export interface ToolsData {
|
|
32
|
+
"$comment": string;
|
|
33
|
+
apiVersion: string;
|
|
34
|
+
baseUrl: string;
|
|
35
|
+
stats: {
|
|
36
|
+
total: number;
|
|
37
|
+
by_method: Record<string, number>;
|
|
38
|
+
};
|
|
39
|
+
categories: string[];
|
|
40
|
+
tools: ToolDef[];
|
|
41
|
+
}
|
|
42
|
+
/** Credentials for App Store Connect API. */
|
|
43
|
+
export interface ASCCredentials {
|
|
44
|
+
issuerId: string;
|
|
45
|
+
keyId: string;
|
|
46
|
+
privateKey: string;
|
|
47
|
+
}
|
|
48
|
+
/** Configuration for the MCP server. */
|
|
49
|
+
export interface ServerConfig {
|
|
50
|
+
credentials: ASCCredentials;
|
|
51
|
+
transport: "stdio" | "http";
|
|
52
|
+
port?: number;
|
|
53
|
+
host?: string;
|
|
54
|
+
verbose?: boolean;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,+DAA+D;AAC/D,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE;QACN,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE;YAAE,IAAI,CAAC,EAAE,MAAM,CAAC;YAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;SAAE,CAAC;QAC3C,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;CACH;AAED,yDAAyD;AACzD,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,OAAO,EAAE,OAAO,GAAG,MAAM,CAAC;CAC3B;AAED,wCAAwC;AACxC,MAAM,WAAW,SAAS;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IAC5D,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,EAAE,OAAO,EAAE,CAAC;CAClB;AAED,6CAA6C;AAC7C,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,cAAc,CAAC;IAC5B,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@ggaiteam/appstore-connect-mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for the Apple App Store Connect API — exposes all 1200+ operations as MCP tools. Supports local (stdio) and remote (HTTP) deployment.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "appstore-connect-mcp contributors",
|
|
7
|
+
"homepage": "https://github.com/topcheer/appstore-connect-mcp",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/topcheer/appstore-connect-mcp.git"
|
|
11
|
+
},
|
|
12
|
+
"bugs": {
|
|
13
|
+
"url": "https://github.com/topcheer/appstore-connect-mcp/issues"
|
|
14
|
+
},
|
|
15
|
+
"keywords": [
|
|
16
|
+
"mcp",
|
|
17
|
+
"model-context-protocol",
|
|
18
|
+
"apple",
|
|
19
|
+
"app-store-connect",
|
|
20
|
+
"appstore",
|
|
21
|
+
"api",
|
|
22
|
+
"claude",
|
|
23
|
+
"ai",
|
|
24
|
+
"llm"
|
|
25
|
+
],
|
|
26
|
+
"type": "module",
|
|
27
|
+
"main": "dist/index.js",
|
|
28
|
+
"bin": {
|
|
29
|
+
"appstore-connect-mcp": "dist/index.js"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist",
|
|
33
|
+
"README.md",
|
|
34
|
+
"LICENSE"
|
|
35
|
+
],
|
|
36
|
+
"engines": {
|
|
37
|
+
"node": ">=18.0.0"
|
|
38
|
+
},
|
|
39
|
+
"scripts": {
|
|
40
|
+
"build": "tsc && node -e \"require('node:fs').copyFileSync('src/tools.json','dist/tools.json')\"",
|
|
41
|
+
"dev": "tsc --watch",
|
|
42
|
+
"start": "node dist/index.js",
|
|
43
|
+
"start:http": "node dist/index.js --transport http",
|
|
44
|
+
"start:stdio": "node dist/index.js --transport stdio",
|
|
45
|
+
"generate": "python3 scripts/generate-tools.py",
|
|
46
|
+
"prepublishOnly": "npm run build",
|
|
47
|
+
"lint": "eslint src/ --ext .ts",
|
|
48
|
+
"typecheck": "tsc --noEmit"
|
|
49
|
+
},
|
|
50
|
+
"dependencies": {
|
|
51
|
+
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
52
|
+
"express": "^4.21.2",
|
|
53
|
+
"jsonwebtoken": "^9.0.2",
|
|
54
|
+
"zod": "^3.24.1"
|
|
55
|
+
},
|
|
56
|
+
"publishConfig": {
|
|
57
|
+
"access": "public"
|
|
58
|
+
},
|
|
59
|
+
"devDependencies": {
|
|
60
|
+
"@types/express": "^5.0.0",
|
|
61
|
+
"@types/jsonwebtoken": "^9.0.7",
|
|
62
|
+
"@types/node": "^22.10.5",
|
|
63
|
+
"typescript": "^5.7.3"
|
|
64
|
+
}
|
|
65
|
+
}
|