{"name":"ai.dataecho/mcp","slug":"dataecho-mcp","title":null,"description":"Deploy files, sites, and Dockerfile apps to live URLs + private drives for agent memory.","url":"https://mcp.market/server/dataecho-mcp","rating":null,"grade":"B","score":76,"certified":false,"status":"active","category":"devtools","tags":["devtools","ai"],"presence":{"score":18,"stars":0,"forks":0,"downloads_week":null,"last_push_at":"2026-07-04T19:42:09.000Z","license":"MIT"},"uptime":{"percent":100,"checks":28,"ok":28,"last_checked_at":"2026-11-04T02:40:41.760Z","last_ok_at":"2026-11-04T02:40:41.760Z","latency_ms":90},"claimed":false,"transport":"remote","callable_via_gateway":true,"default_price_micros":0,"repository":"https://github.com/mohocp/dataecho","website":"https://dataecho.ai","version":"1.0.0","remotes":[{"type":"streamable-http","url":"https://dataecho.ai/mcp"}],"packages":[],"tools":[{"name":"app_status","description":"Build/run status of a container app deployed via publish_site with a Dockerfile. Poll until status is `live` or `failed`.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Site slug"},"logs":{"type":"boolean","description":"Include build logs"}},"required":["slug"],"additionalProperties":false}},{"name":"claim_site","description":"Make a previously-anonymous site permanent under the authenticated account (requires auth + the claimToken from publish_site).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Site slug"},"claimToken":{"type":"string","description":"Claim token returned by the anonymous publish"}},"required":["slug","claimToken"],"additionalProperties":false}},{"name":"create_drive","description":"Create a new private drive.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Drive name"}},"required":["name"],"additionalProperties":false}},{"name":"delete_site","description":"Permanently delete an owned site. Irreversible — confirm with the user first.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Site slug"}},"required":["slug"],"additionalProperties":false}},{"name":"delete_variable","description":"Delete an account variable.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"Variable name"}},"required":["name"],"additionalProperties":false}},{"name":"drive_delete_file","description":"Delete one file from a drive.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"drive":{"type":"string","description":"Drive name or drv_… id"},"path":{"type":"string","description":"File path"}},"required":["drive","path"],"additionalProperties":false}},{"name":"drive_history","description":"Version timeline of a drive (every write is a restorable version).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"drive":{"type":"string","description":"Drive name or drv_… id"}},"required":["drive"],"additionalProperties":false}},{"name":"drive_list_files","description":"List files in a drive (by drive name or drv_… id), optionally under a path prefix.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"drive":{"type":"string","description":"Drive name or drv_… id"},"prefix":{"type":"string","description":"Path prefix filter"}},"required":["drive"],"additionalProperties":false}},{"name":"drive_move_file","description":"Move/rename a file inside a drive.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"drive":{"type":"string","description":"Drive name or drv_… id"},"from":{"type":"string","description":"Current path"},"to":{"type":"string","description":"New path"}},"required":["drive","from","to"],"additionalProperties":false}},{"name":"drive_read_file","description":"Read a file from a drive. Text comes back as utf-8 `content`; binary as `contentBase64`. Files over 1 MB are refused (use the skill scripts).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"drive":{"type":"string","description":"Drive name or drv_… id"},"path":{"type":"string","description":"File path in the drive"}},"required":["drive","path"],"additionalProperties":false}},{"name":"drive_restore","description":"Restore a drive to a prior version (commits a new version; nothing is lost).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"drive":{"type":"string","description":"Drive name or drv_… id"},"versionId":{"type":"string","description":"dv_… id from drive_history"}},"required":["drive","versionId"],"additionalProperties":false}},{"name":"drive_revoke_token","description":"Revoke a drive share token.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"drive":{"type":"string","description":"Drive name or drv_… id"},"tokenId":{"type":"string","description":"dtok_… id from drive_tokens"}},"required":["drive","tokenId"],"additionalProperties":false}},{"name":"drive_share","description":"Mint a scoped drive access token for another agent (perms read|write, optional path prefix + TTL like `7d`). The secret is returned ONCE.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"drive":{"type":"string","description":"Drive name or drv_… id"},"perms":{"type":"string","description":"read (default) or write"},"pathPrefix":{"type":"string","description":"Restrict the token to this path prefix"},"ttl":{"type":"string","description":"Lifetime, e.g. 1h, 7d (omit for no expiry)"},"label":{"type":"string","description":"Human label for the token"}},"required":["drive"],"additionalProperties":false}},{"name":"drive_tokens","description":"List active share tokens of a drive (secrets are never shown again).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"drive":{"type":"string","description":"Drive name or drv_… id"}},"required":["drive"],"additionalProperties":false}},{"name":"drive_write_file","description":"Write/overwrite one file in a drive (ETag-safe: pass ifMatch to assert the version you read, otherwise the current version is used automatically).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"drive":{"type":"string","description":"Drive name or drv_… id"},"path":{"type":"string","description":"Destination path in the drive"},"content":{"type":"string","description":"UTF-8 text content"},"contentBase64":{"type":"string","description":"Base64 content for binary files"},"contentType":{"type":"string","description":"Optional MIME type"},"ifMatch":{"type":"string","description":"Optional ETag precondition"}},"required":["drive","path"],"additionalProperties":false}},{"name":"get_site","description":"Full details + current file manifest of an owned site.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Site slug"}},"required":["slug"],"additionalProperties":false}},{"name":"list_drives","description":"List the authenticated account's private cloud drives.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},{"name":"list_sites","description":"List all sites owned by the authenticated account.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},{"name":"list_variables","description":"List account variable NAMES (values are write-only — they are injected into proxy calls and container apps, never read back).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},{"name":"platform_info","description":"DataEcho platform overview: what it can host, auth state of this connection, docs links. Call this first if unsure.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{},"required":[],"additionalProperties":false}},{"name":"publish_site","description":"Deploy files to a live URL. No slug → create a NEW site (works without auth; anonymous sites expire in 24h — always show the user the claimUrl). With slug → UPDATE that site (complete snapshot: send ALL files). A Dockerfile in the files makes it a server-side app (auth required; listen on process.env.PORT; persist under /data; poll app_status). Total payload ≤ 8 MB — for bigger sites use the dataecho skill scripts.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"files":{"type":"array","description":"Files to publish. Each file: { path, content (utf-8 text) OR contentBase64 (binary), contentType? }. The publish is a COMPLETE snapshot — omitted files are removed on update.","items":{"type":"object","properties":{"path":{"type":"string","description":"Site-relative path, e.g. index.html or assets/app.js"},"content":{"type":"string","description":"UTF-8 text content (use for html/css/js/json/text)"},"contentBase64":{"type":"string","description":"Base64 content (use for binary files)"},"contentType":{"type":"string","description":"Optional MIME type; guessed from the extension if omitted"}},"required":["path"],"additionalProperties":false}},"slug":{"type":"string","description":"Existing site slug to update (omit to create a new site)"},"title":{"type":"string","description":"Viewer page title (used when there's no index.html)"},"description":{"type":"string","description":"Viewer page description"},"spa":{"type":"boolean","description":"Enable SPA fallback routing (serve index.html for unknown paths)"},"ttlSeconds":{"type":"number","description":"Expiry for authenticated sites, in seconds"},"claimToken":{"type":"string","description":"Claim token — required to update an anonymous site without auth"}},"required":["files"],"additionalProperties":false}},{"name":"request_login_code","description":"Start sign-in: email a one-time code to the user. Follow with verify_login_code.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"email":{"type":"string","description":"The user's email address"}},"required":["email"],"additionalProperties":false}},{"name":"search_sites","description":"Full-text search across the authenticated account's sites (names, metadata, and text content).","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Search query"},"limit":{"type":"number","description":"Max results (optional)"}},"required":["query"],"additionalProperties":false}},{"name":"set_variable","description":"Create/update a write-only account secret (uppercase name). Injected as env vars into container apps and as ${VAR} into proxy calls. Optionally pin which upstream hosts may receive it.","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"name":{"type":"string","description":"UPPER_SNAKE_CASE variable name"},"value":{"type":"string","description":"Secret value (never readable back)"},"allowedUpstreams":{"type":"array","items":{"type":"string"},"description":"Optional allow-list of upstream hosts"}},"required":["name","value"],"additionalProperties":false}},{"name":"update_site_metadata","description":"Patch site settings without redeploying: viewer title/description, SPA mode, TTL, password (string sets, null removes).","write_action":true,"price_micros":0,"input_schema":{"type":"object","properties":{"slug":{"type":"string","description":"Site slug"},"title":{"type":"string","description":"Viewer title"},"description":{"type":"string","description":"Viewer description"},"spaMode":{"type":"boolean","description":"SPA fallback routing"},"ttlSeconds":{"type":"number","description":"Expiry in seconds (null-like 0 not allowed; omit to keep)"},"password":{"type":"string","description":"Password-gate the site; pass an empty string to REMOVE the password"}},"required":["slug"],"additionalProperties":false}},{"name":"verify_login_code","description":"Complete sign-in with the emailed code. Returns the apiKey ONCE — configure it as the `Authorization: Bearer <key>` header of this MCP connection (and/or save to ~/.artifact/credentials for the CLI scripts). Never echo it into chat.","write_action":false,"price_micros":0,"input_schema":{"type":"object","properties":{"email":{"type":"string","description":"Same email as request_login_code"},"code":{"type":"string","description":"The one-time code from the email"}},"required":["email","code"],"additionalProperties":false}}],"scan":{"score":76,"grade":"B","scanned_at":"2026-09-26T16:30:47.212Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-26T16:30:47.107Z","components":{"code":{"score":-1,"max":25,"notes":["remote-only server, no package to scan"]},"reliability":{"score":20,"max":20,"notes":["remote reachable in 1978ms"]},"poisoning":{"score":15,"max":15,"notes":["26 tool descriptions checked"]},"auth":{"score":3,"max":15,"notes":["open endpoint exposes 8 write-action tools with no auth"]},"maintenance":{"score":12,"max":15,"notes":["last push 84 days ago"]},"identity":{"score":7,"max":10,"notes":["namespace and repository owner differ","GitHub account older than a year","website matches verified namespace"]}},"findings":[{"id":"auth.open-write","severity":"high","component":"auth","title":"Write-action tools reachable without authentication"}],"inputs":{"probes":[{"url":"https://dataecho.ai/mcp","reachable":true,"authRequired":false,"latencyMs":1978,"serverInfo":{"name":"dataecho","version":"1.0.0"}}],"packages":[],"repo":{"found":true,"owner":"mohocp","repo":"dataecho","archived":false,"pushedAt":"2026-07-04T19:42:09Z","stars":0,"forks":0,"openIssues":1,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/19995166?v=4","ownerCreatedAt":"2016-06-17T12:43:59Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/19995166?v=4&s=128","source":"registry"},"presence":{"stars":0,"forks":0,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-07-04T19:42:09.000Z","score":18}}}},"grade_history":[{"kind":"restore","fromGrade":"D","toGrade":"B","reason":"score 76: Write-action tools reachable without authentication","createdAt":"2026-09-26T16:30:52.438Z"}],"reviews":[]}