
#pabal-mcp โ App Store / Play Store ASO์ฉ MCP ์๋ฒ
์ฑ์คํ ์ด/ํ๋ ์ด์คํ ์ด ๋ฉํ๋ฐ์ดํฐ, ๋ฆด๋ฆฌ์ค, ASO ๋๊ธฐํ๋ฅผ MCP ๋๊ตฌ๋ก ์ ๊ณตํฉ๋๋ค. Claude Code, Cursor, MCP Inspector ๋ฑ MCP ํด๋ผ์ด์ธํธ์์ stdio ์๋ฒ๋ก ์คํํด ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
[!NOTE] 100% ๋ก์ปฌ์์ ์คํ๋์ด ์๊ฒฉ ์ฆ๋ช ๊ณผ ์บ์๋ ASO ๋ฐ์ดํฐ๊ฐ ์ธ๋ถ๋ก ์ ์ก๋์ง ์์ต๋๋ค. ์คํ ์ด API ํธ์ถ๋ ๋น์ ์ ๋ก์ปฌ ๋จธ์ ์์ ์ง์ ์ํํฉ๋๋ค.
#โ pabal-mcp ์์ด
- ์คํ ์ด๋ง๋ค ํด๋ฆญํ๋ฉฐ ์ ๋ฐ์ดํธ
- ๋ก์บยท๋ฆด๋ฆฌ์ค ๋ ธํธ ๋ณต๋ถ ์ค๋ฅ
- ํ๋ก์ ํธ๋ง๋ค ๋ฐ๋ณต ์ค์
#โ pabal-mcp์ ํจ๊ป
- ๋ ์คํ ์ด ASO ํ/ํธ์๋ฅผ ํ ์๋ฒ์์ ์ฒ๋ฆฌ
- ๋ฆด๋ฆฌ์ค ๋ ธํธ ์ ๋ฐ์ดํธยท๋ฒ์ ์ฒดํฌ๋ฅผ AI ํด๋ผ์ด์ธํธ ์์์ ์ํ
- ๋ก์ปฌ ์บ์/์ค์ ๊ธฐ๋ฐ์ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ํฌํ๋ก
#๐ ๏ธ MCP ํด๋ผ์ด์ธํธ ์ค์น
#์๊ตฌ ์ฌํญ
- Node.js 18 ์ด์
- MCP ํด๋ผ์ด์ธํธ: Cursor, Claude Code, VS Code, Windsurf
[!TIP] ASO/์คํ ์ด ์์ ์ ์์ฃผ ํ๋ค๋ฉด MCP ๊ท์น์ "ํญ์ pabal-mcp ์ฌ์ฉ" ๊ฐ์ ์๋ ํธ์ถ ๊ท์น์ ์ถ๊ฐํ์ธ์.
#์ ์ญ ์ค์น(๊ถ์ฅ)
npm install -g pabal-mcp
# ๋๋
yarn global add pabal-mcp
์ ์ญ ์ค์น๋ฅผ ๋จผ์ ๊ถ์ฅํฉ๋๋ค. ํ๋ก์/๋ฐฉํ๋ฒฝยท์คํ๋ผ์ธ ํ๊ฒฝ์์ npm ๋ค์ด๋ก๋ ๋ฌธ์ ๋ฅผ ํผํ๊ณ ๋ ๋นจ๋ฆฌ ์์ํ ์ ์์ต๋๋ค. npx -y pabal-mcp๋ ๊ฐ๋ฅํ์ง๋ง ์ ์ญ ์ค์น๊ฐ ๊ธฐ๋ณธ ๊ถ์ฅ ๊ฒฝ๋ก์
๋๋ค. ์ ์ญ ์ค์น ํ MCP ์ค์ ์์๋ command: "pabal-mcp"๋ก ๋ฐ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค(npx ๋ถํ์).
#Cursor
~/.cursor/mcp.json ๋๋ ํ๋ก์ ํธ .cursor/mcp.json์ ์ถ๊ฐ:
{
"mcpServers": {
"pabal-mcp": {
"command": "npx",
"args": ["-y", "pabal-mcp"]
}
}
}
#VS Code
settings.json ์์:
"mcp": {
"servers": {
"pabal-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "pabal-mcp"]
}
}
}
#Claude Code
[!TIP] ์์ธํ ์ค์ ์ต์ ์ Claude Code MCP ๊ณต์ ๋ฌธ์๋ฅผ ์ฐธ๊ณ ํ์ธ์.
Claude Code MCP ์ค์ ์ ์ถ๊ฐ (JSON ํ์):
{
"mcpServers": {
"pabal-mcp": {
"command": "npx",
"args": ["-y", "pabal-mcp"]
}
}
}
์ ์ญ ์ค์น(npm install -g pabal-mcp) ํ์๋:
{
"mcpServers": {
"pabal-mcp": {
"command": "pabal-mcp"
}
}
}
#Windsurf
{
"mcpServers": {
"pabal-mcp": {
"command": "npx",
"args": ["-y", "pabal-mcp"]
}
}
}
#๐ ์๊ฒฉ ์ฆ๋ช ์ค์
- ์ค์ ๋๋ ํฐ๋ฆฌ ์์ฑ ๋ฐ ๊ถํ ์ค์ :
mkdir -p ~/.config/pabal-mcp
chmod 700 ~/.config/pabal-mcp
- ํ๋ ์ด์คํ๋๊ฐ ์ฑ์์ง ์ค์ ํ์ผ ์์ฑ:
cat <<'EOF' > ~/.config/pabal-mcp/config.json
{
"dataDir": "/ABSOLUTE/PATH/TO/pabal-web",
"appStore": {
"issuerId": "xxxx",
"keyId": "xxxx",
"privateKeyPath": "./app-store-key.p8"
},
"googlePlay": {
"serviceAccountKeyPath": "./google-play-service-account.json"
}
}
EOF
๋ค์ ๋จ๊ณ์์ App Store Connect ํค๋ฅผ ํ์ธํ ๋ค issuerId, keyId ๊ฐ์ ์ค์ ๊ฐ์ผ๋ก ๋ฐ๊ฟ์ฃผ์ธ์.
dataDir๋ ๊ฐ ์คํ ์ด์์ ๋ด๋ ค๋ฐ์ raw ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ์ ๋ ๊ฒฝ๋ก์
๋๋ค (์: /ABSOLUTE/PATH/TO/pabal-web).
-
~/.config/pabal-mcp/์ ์๊ฒฉ ์ฆ๋ช ์ถ๊ฐ:App Store Connect API ํค:
- App Store Connect โ Users and Access โ Keys โ "Generate API Key"์์ Admin/App Manager ๊ถํ์ผ๋ก ํค ์์ฑ ํ
.p8๋ฅผ ๋ค์ด๋ก๋ํฉ๋๋ค(ํ ๋ฒ๋ง ๊ฐ๋ฅ).~/.config/pabal-mcp/app-store-key.p8๋ก ์ ์ฅํ์ธ์. - ํค ์์ธ ํ๋ฉด์์ Issuer ID์ Key ID๋ฅผ ๋ณต์ฌํ ๋ค
~/.config/pabal-mcp/config.json์issuerId,keyId์ ๋ฐ์ํ์ธ์.
Google Play ์๋น์ค ๊ณ์ JSON:
- Google Cloud ์๋น์ค ๊ณ์ ๊ด๋ฆฌ โ ์ ์๋น์ค ๊ณ์ ์์ฑ(์ด๋ฆ์
pabal๊ถ์ฅ) โ ํค ์์ฑ โ JSON ๋ค์ด๋ก๋. - ๋ค์ด๋ก๋ํ JSON์
~/.config/pabal-mcp/google-play-service-account.json์ผ๋ก ์ ์ฅํฉ๋๋ค. - Play Console โ ์ฌ์ฉ์ ๋ฐ ๊ถํ โ ์ ์ฌ์ฉ์ ์ด๋ โ ์๋น์ค ๊ณ์ ์ด๋ฉ์ผ ์
๋ ฅ.
- ์ฑ ๊ถํ: ASO ์์ ํ ์ฑ๋ค์ ์ ํ.
- ๊ณ์ ๊ถํ: ์๋ ํญ๋ชฉ์ ์ฒดํฌ:
- ์ฑ ์ ๋ณด ๋ณด๊ธฐ ๋ฐ ๋ณด๊ณ ์ ์ผ๊ด ๋ค์ด๋ก๋(์ฝ๊ธฐ ์ ์ฉ)
- ์ฑ ์ด์ ์์ฑยท์์ ยท์ญ์
- ํ๋ก๋์ ์ผ๋ก ์ถ์
- ๊ธฐ๊ธฐ ์ ์ธ ๋ชฉ๋ก ๊ด๋ฆฌ
- Play ์ฑ ์๋ช ์ฌ์ฉ
- ์คํ ์ด ๋ ธ์ถ(์คํ ์ด ํ๋ ์ฆ์ค) ๊ด๋ฆฌ
์ค์ ํ์ผ ํํ (ID ์ ๋ฐ์ดํธ ํ):
{ "dataDir": "/ABSOLUTE/PATH/TO/pabal-web", "appStore": { "issuerId": "<your-issuer-id>", "keyId": "<your-key-id>", "privateKeyPath": "./app-store-key.p8" }, "googlePlay": { "serviceAccountKeyPath": "./google-play-service-account.json" } } - App Store Connect โ Users and Access โ Keys โ "Generate API Key"์์ Admin/App Manager ๊ถํ์ผ๋ก ํค ์์ฑ ํ
-
์คํ ์ด ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
apps-init์ ์ฌ์ฉํด ์คํ ์ด API์์ ์ฑ์ ๊ฐ์ ธ์ ์๋ ๋ฑ๋กํฉ๋๋ค. ์ด ๋ช ๋ น์~/.config/pabal-mcp/registered-apps.json์ ์คํ ์ด์์ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฑ๋ค์ ์ ์ฅํฉ๋๋ค. -
ํ์ผ ๊ถํ ์ ๊ทธ๊ธฐ (ํด๋ ๋ด ๋ชจ๋ ํ์ผ):
chmod 600 ~/.config/pabal-mcp/*
~/.config/pabal-mcp/ ์๋ ๋ชจ๋ ํ์ผ์ ์ ์ฉ๋ฉ๋๋ค. ์ ์๊ฒฉ ์ฆ๋ช
ํ์ผ์ ์ถ๊ฐํ ๋๋ง๋ค ๋ค์ ์คํํ์ธ์.
#๐ง MCP ๋๊ตฌ
- ์ธ์ฆ
auth-check: App Store Connect / Google Play ์ธ์ฆ ์ํ ํ์ธ
- ์ฑ ๊ด๋ฆฌ
apps-init: ์คํ ์ด API์์ ์ฑ์ ๊ฐ์ ธ์ ์๋ ๋ฑ๋ก (Google Play๋packageNameํ์)apps-add: bundleId/packageName์ผ๋ก ๋จ์ผ ์ฑ ๋ฑ๋กapps-search: ๋ฑ๋ก๋ ์ฑ ๊ฒ์
- ASO ๋๊ธฐํ
aso-pull: ASO ๋ฐ์ดํฐ๋ฅผ ๋ก์ปฌ ์บ์(.aso/)์ ๊ฐ์ ธ์ค๊ธฐaso-push: ๋ก์ปฌ ์บ์(.aso/)์ ASO ๋ฐ์ดํฐ๋ฅผ ์คํ ์ด์ ๋ฐ์
- ๋ฆด๋ฆฌ์ค ๊ด๋ฆฌ
release-check-versions: ์ฑ๋ณ ์ต์ ๋ฒ์ ์กฐํrelease-create: ์ ๋ฒ์ ์์ฑrelease-pull-notes: ๋ฆด๋ฆฌ์ค ๋ ธํธ๋ฅผ ๋ก์ปฌ ์บ์(.aso/)์ ๊ฐ์ ธ์ค๊ธฐrelease-update-notes: ๋ฆด๋ฆฌ์ค ๋ ธํธ/What's New ์ ๋ฐ์ดํธ
#๐๏ธ ๊ฐ๋ฐ
#์์ค์์ ์คํ
git clone https://github.com/quartz-labs-dev/pabal-mcp.git
cd pabal-mcp
yarn install
yarn dev:mcp
#ํ ์คํธ
์ ์ฒด ํ
์คํธ ์คํ: npm test
#๐ Pabal Web
ASO์ SEO๋ฅผ ํจ๊ป ๊ด๋ฆฌํ๊ณ ์ถ์ผ์ ๊ฐ์? Pabal Web์ ํ์ธํด๋ณด์ธ์.
Pabal Web์ Next.js ๊ธฐ๋ฐ์ ์น ์ธํฐํ์ด์ค๋ก, ASO, SEO, Google Search Console ์ธ๋ฑ์ฑ ๋ฑ์ ํตํฉ ๊ด๋ฆฌํ ์ ์๋ ์์ ํ ์๋ฃจ์ ์ ๋๋ค.
