ShipDapp
by yash1ts · remote · no sign-in to list tools · v0.2.0 · published by GitHub user yash1ts
Deploy Dockerized apps to Akash devnet with ShipDapp MCP build, deploy, update, and logs tools.
16 tools: 1 do something that can't be undone, 12 change things and 3 only read.
Scanned Oct 21, 2026
- Deletes or cancels0Claude Code: deny
- Can't be undone1Claude Code: ask: see these tools
- Changes things12Claude Code: ask: see these tools
- Only reads3Claude Code: allow: see these tools
No check matched anything in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport sse shipdapp https://api.shipdapp.com/api/mcp/sse --header 'Authorization: <your-authorization>'Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
16 tools
Can't be undone 1Claude Code: ask
close_appCALL THIS WHEN PERMANENTLY SHUTTING DOWN an app — stops the Akash lease, frees resources, and marks the deployment DELETED.No findings
Why it is in this group
- The name "close_app" says "close": a word for a change.
- The description says "irreversible".
Description, as the server wrote it CALL THIS WHEN PERMANENTLY SHUTTING DOWN an app — stops the Akash lease, frees resources, and marks the deployment DELETED. This is irreversible for that deploymentId. Use list_apps first if you don't know the ID. Do NOT use this for updates — use update_app instead.
Changes things 12Claude Code: ask
authenticateCALL THIS IMMEDIATELY AFTER get_auth_challenge.No findings
Why it is in this group
- The description's first verb is "call": a word for a change.
Description, as the server wrote it CALL THIS IMMEDIATELY AFTER get_auth_challenge. Submit the base58 signature of the challenge message to unlock the session. All deploy/build/status tools require authentication — do not call them until this succeeds.
build_imageUSE ONLY when you want to build a container image WITHOUT creating a deployment.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it USE ONLY when you want to build a container image WITHOUT creating a deployment. For normal shipping, prefer deploy_app instead (build + deploy in one step). Call this if you need to verify the image builds successfully before deploying, or if you plan to deploy the image manually later. After calling, poll get_build_status until SUCCESS. Prefer validate_upload first.
deploy_appPRIMARY SOURCE DEPLOY TOOL — call when the app is built/tested locally and ready to ship.No findings
Why it is in this group
- The name "deploy_app" says "deploy": a word for a change.
Description, as the server wrote it PRIMARY SOURCE DEPLOY TOOL — call when the app is built/tested locally and ready to ship. Prefer validate_upload first. Uploads files + templateId (mergeMode=strict by default: upload-as-is — never injects starter Tailwind/PostCSS/React files; requires package.json + index.html and that the HTML entry's local imports resolve). Framework-agnostic SPA. Returns uploadSummary + warnings. Next: poll get_app_status until ACTIVE and httpReady=true, then share proxyUri. Apps are unlisted by default (live URL still works); pass listOnStore=true or call set_app_listing to appear on the App Store. Omit package-lock.json. Use deploy_image for prebuilt images. See prompt deploy_app_guide.
deploy_imageCALL THIS WHEN YOU ALREADY HAVE A PUBLIC DOCKER/OCI IMAGE and want to deploy it to devnet without uploading source files or running Cloud Build.No findings
Why it is in this group
- The name "deploy_image" says "deploy": a word for a change.
Description, as the server wrote it CALL THIS WHEN YOU ALREADY HAVE A PUBLIC DOCKER/OCI IMAGE and want to deploy it to devnet without uploading source files or running Cloud Build. Requires dockerImage + appName. Use deploy_app instead when the agent has local source files and wants ShipDapp to build the image. Guardrails apply: max active deployments, daily limit, duplicate appName blocked, hourly deploy rate limit, cooldown. Returns deploymentId, network=devnet, dockerImage. Apps are unlisted by default; pass listOnStore=true or call set_app_listing to appear on the App Store. Next step: poll get_app_status until ACTIVE and share proxyUri.
get_auth_challengeCALL THIS FIRST before deploy/build tools ONLY if you are NOT using a ShipDapp API key in MCP client headers.No findings
Why it is in this group
- The name "get_auth_challenge" says "get": a word for reading.
- The description's first verb is "call": a word for a change.
Description, as the server wrote it CALL THIS FIRST before deploy/build tools ONLY if you are NOT using a ShipDapp API key in MCP client headers. Returns a Sign-In-With-Solana message for local wallet signing.
get_logsCALL THIS WHEN SOMETHING WENT WRONG or you need to debug.No findings
Why it is in this group
- The name "get_logs" says "get": a word for reading.
- The description's first verb is "call": a word for a change.
Description, as the server wrote it CALL THIS WHEN SOMETHING WENT WRONG or you need to debug. type=build + buildId: after FAILURE — returns failureSummary and inline buildLogTail when Cloud Logging is available (else logUrl). type=runtime: container stdout/stderr from Akash when ACTIVE; on provider HTTP errors, returns a clear message plus lastError fallback. Runtime logs are NOT available until the deployment has an Akash lease.
get_usage_limitsCALL THIS AFTER A GUARDRAIL BLOCK or before planning multiple deploys.No findings
Why it is in this group
- The name "get_usage_limits" says "get": a word for reading.
- The description's first verb is "call": a word for a change.
Description, as the server wrote it CALL THIS AFTER A GUARDRAIL BLOCK or before planning multiple deploys. Returns your wallet's deployment quotas and current usage (active apps, hourly build/deploy counts). Use to understand why deploy_app was rejected and what to do next (close_app or wait).
list_appsCALL THIS to see all your deployed apps (listed and unlisted), find a deploymentId, or check which apps are ACTIVE vs DEPLOYING.No findings
Why it is in this group
- The name "list_apps" says "list": a word for reading.
- The description's first verb is "call": a word for a change.
Description, as the server wrote it CALL THIS to see all your deployed apps (listed and unlisted), find a deploymentId, or check which apps are ACTIVE vs DEPLOYING. Use before update_app, set_app_listing, or close_app when you don't know the deploymentId.
list_template_filesCALL THIS BEFORE deploy_app to see required vs optional paths.No findings
Why it is in this group
- The name "list_template_files" says "list": a word for reading.
- The description's first verb is "call": a word for a change.
Description, as the server wrote it CALL THIS BEFORE deploy_app to see required vs optional paths. Required is minimal (package.json + index.html); component filenames are not fixed — validate_upload checks that the HTML entry's imports resolve.
list_templatesCALL THIS WHEN STARTING A NEW APP or when you need a templateId for deploy_app/build_image.No findings
Why it is in this group
- The name "list_templates" says "list": a word for reading.
- The description's first verb is "call": a word for a change.
Description, as the server wrote it CALL THIS WHEN STARTING A NEW APP or when you need a templateId for deploy_app/build_image. Returns available templates (e.g. webapp-static = frontend SPA, framework-agnostic). Optional starter via includeFiles=true is React+Vite+Tailwind — not required. Production start uses serve -s dist in the starter. Prefer list_template_files + validate_upload before deploy_app. Upload your complete project as-is (mergeMode=strict never injects Tailwind/PostCSS).
set_app_listingCALL THIS to list or unlist an existing app on the public App Store.No findings
Why it is in this group
- The name "set_app_listing" says "set": a word for a change.
Description, as the server wrote it CALL THIS to list or unlist an existing app on the public App Store. Unlisted apps stay reachable via proxyUri if you know the URL. Use list_apps to find deploymentId. Does not change the live deployment.
update_appCALL THIS WHEN AN APP IS ALREADY DEPLOYED and you want to push new code or change config.No findings
Why it is in this group
- The name "update_app" says "update": a word for a change.
Description, as the server wrote it CALL THIS WHEN AN APP IS ALREADY DEPLOYED and you want to push new code or change config. Pass files + templateId to rebuild (same strict upload rules as deploy_app — prefer validate_upload first), OR pass dockerImage alone to redeploy an existing image. Do NOT use deploy_app for updates. Blocked while status is DEPLOYING — wait and poll get_app_status. After calling, poll until ACTIVE and httpReady=true.
Only reads 3Claude Code: allow
get_app_statusPRIMARY STATUS POLL after deploy_app, update_app, or deploy_image.No findings
Why it is in this group
- The name "get_app_status" says "get": a word for reading.
Description, as the server wrote it PRIMARY STATUS POLL after deploy_app, update_app, or deploy_image. Poll every 10–20s until status is ACTIVE and httpReady is true (then share proxyUri), or FAILED (read lastError / buildLogTail). ACTIVE alone can still mean HTTP 503 while the process starts — wait for httpReady. On FAILED, buildLogTail may be attached automatically.
get_build_statusOptional debug tool for Cloud Build progress.No findings
Why it is in this group
- The name "get_build_status" says "get": a word for reading.
Description, as the server wrote it Optional debug tool for Cloud Build progress. Prefer polling get_app_status(deploymentId) after deploy_app/update_app — the server auto-promotes BUILDING → Akash deploy when the build succeeds. Use this when you only have a buildId (e.g. after build_image) or need build-level detail. On FAILURE, returns failureSummary and buildLogTail when available.
validate_uploadDRY-RUN before deploy_app/update_app/build_image.No findings
Why it is in this group
- The name "validate_upload" says "validate": a word for reading.
Description, as the server wrote it DRY-RUN before deploy_app/update_app/build_image. Checks file count, bytes, missing required paths, template-default fills, and placeholder garbage — without starting a Cloud Build. Call this when unsure the files map is complete.
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.2.0. Values in angle brackets are yours to fill in.
claude mcp add --transport sse shipdapp https://api.shipdapp.com/api/mcp/sse --header 'Authorization: <your-authorization>'Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__shipdapp__validate_upload",
"mcp__shipdapp__get_build_status",
"mcp__shipdapp__get_app_status"
],
"ask": [
"mcp__shipdapp__get_auth_challenge",
"mcp__shipdapp__authenticate",
"mcp__shipdapp__get_usage_limits",
"mcp__shipdapp__list_templates",
"mcp__shipdapp__list_template_files",
"mcp__shipdapp__build_image",
"mcp__shipdapp__deploy_app",
"mcp__shipdapp__deploy_image",
"mcp__shipdapp__update_app",
"mcp__shipdapp__list_apps",
"mcp__shipdapp__set_app_listing",
"mcp__shipdapp__close_app",
"mcp__shipdapp__get_logs"
],
"deny": []
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as shipdapp. Review it before you use it.
