mcp

Deploy files, sites, and Dockerfile apps to live URLs + private drives for agent memory.

Should I use this

Quality & Safety

A
Description quality
95%
Schema completeness
89%
Naming quality
89%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (3)

  • LOWTool 'get_site' description lacks action verbin get_site
  • LOWTool 'drive_revoke_token' description lacks action verbin drive_revoke_token
  • LOWTool 'drive_restore' description lacks action verbin drive_restore

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~2,436Tokens (tool definitions)
~773 BTypical response size
Moderate attention impact (1.90% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mcp": {
      "url": "https://dataecho.ai/mcp"
    }
  }
}

Remote endpoints

https://dataecho.ai/mcpstreamable-http

What it can do

Tool inventory

Tools (26)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
⚪platform_info

DataEcho platform overview: what it can host, auth state of this connection, docs links. Call this first if unsure.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
⚪request_login_code(email)

Start sign-in: email a one-time code to the user. Follow with verify_login_code.

Input Schema

{
  "type": "object",
  "properties": {
    "email": {
      "type": "string",
      "description": "The user's email address"
    }
  },
  "required": [
    "email"
  ],
  "additionalProperties": false
}
🟡verify_login_code(email, code)

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.

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
}
🟡publish_site(files, slug, title, description, spa, ...)

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.

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
}
🟡claim_site(slug, claimToken)

Make a previously-anonymous site permanent under the authenticated account (requires auth + the claimToken from publish_site).

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
}
🟢list_sites

List all sites owned by the authenticated account.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
🟢search_sites(query, limit)

Full-text search across the authenticated account's sites (names, metadata, and text content).

Input Schema

{
  "type": "object",
  "properties": {
    "query": {
      "type": "string",
      "description": "Search query"
    },
    "limit": {
      "type": "number",
      "description": "Max results (optional)"
    }
  },
  "required": [
    "query"
  ],
  "additionalProperties": false
}
🟢get_site(slug)

Full details + current file manifest of an owned site.

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Site slug"
    }
  },
  "required": [
    "slug"
  ],
  "additionalProperties": false
}
🟡update_site_metadata(slug, title, description, spaMode, ttlSeconds, ...)

Patch site settings without redeploying: viewer title/description, SPA mode, TTL, password (string sets, null removes).

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
}
🔴delete_site(slug)

Permanently delete an owned site. Irreversible — confirm with the user first.

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Site slug"
    }
  },
  "required": [
    "slug"
  ],
  "additionalProperties": false
}
🟡app_status(slug, logs)

Build/run status of a container app deployed via publish_site with a Dockerfile. Poll until status is `live` or `failed`.

Input Schema

{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Site slug"
    },
    "logs": {
      "type": "boolean",
      "description": "Include build logs"
    }
  },
  "required": [
    "slug"
  ],
  "additionalProperties": false
}
🟢list_drives

List the authenticated account's private cloud drives.

Input Schema

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
🟡create_drive(name)

Create a new private drive.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Drive name"
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false
}
🟢drive_list_files(drive, prefix)

List files in a drive (by drive name or drv_… id), optionally under a path prefix.

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
}
🟢drive_read_file(drive, path)

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).

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
}
🟡drive_write_file(drive, path, content, contentBase64, contentType, ...)

Write/overwrite one file in a drive (ETag-safe: pass ifMatch to assert the version you read, otherwise the current version is used automatically).

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
}
🔴drive_delete_file(drive, path)

Delete one file from a drive.

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
}
⚪drive_move_file(drive, from, to)

Move/rename a file inside a drive.

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
}
⚪drive_share(drive, perms, pathPrefix, ttl, label)

Mint a scoped drive access token for another agent (perms read|write, optional path prefix + TTL like `7d`). The secret is returned ONCE.

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
}
🟢drive_tokens(drive)

List active share tokens of a drive (secrets are never shown again).

Input Schema

{
  "type": "object",
  "properties": {
    "drive": {
      "type": "string",
      "description": "Drive name or drv_… id"
    }
  },
  "required": [
    "drive"
  ],
  "additionalProperties": false
}
⚪drive_revoke_token(drive, tokenId)

Revoke a drive share token.

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
}
🟡drive_history(drive)

Version timeline of a drive (every write is a restorable version).

Input Schema

{
  "type": "object",
  "properties": {
    "drive": {
      "type": "string",
      "description": "Drive name or drv_… id"
    }
  },
  "required": [
    "drive"
  ],
  "additionalProperties": false
}
⚪drive_restore(drive, versionId)

Restore a drive to a prior version (commits a new version; nothing is lost).

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
}
🟡list_variables

List account variable NAMES (values are write-only — they are injected into proxy calls and container apps, never read back).

Input Schema

{
  "type": "object",
  "properties": {},
  "required": [],
  "additionalProperties": false
}
🟡set_variable(name, value, allowedUpstreams)

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.

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
}
🔴delete_variable(name)

Delete an account variable.

Input Schema

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "description": "Variable name"
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false
}

Recommended Prompts

search_research
Search for information about [topic] using mcp
Expected tools: search_sites
find_specific
Find [specific item] using mcp
Expected tools: search_sites
retrieve_data
Get details about [item] from mcp
Expected tools: get_site
fetch_info
Fetch [information type] using mcp
Expected tools: get_site
list_items
List all [items] available in mcp
Expected tools: list_sites

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded26 tools
verifiedversion not recorded26 tools