mcp
Deploy files, sites, and Dockerfile apps to live URLs + private drives for agent memory.
사용해야 할까요
품질 및 안전성
발견 사항 (3)
- LOWget_site에서
- LOWdrive_revoke_token에서
- LOWdrive_restore에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"mcp": {
"url": "https://dataecho.ai/mcp"
}
}
}원격 엔드포인트
https://dataecho.ai/mcpstreamable-http할 수 있는 일
도구 목록
도구 (26)
⚪platform_info
DataEcho platform overview: what it can host, auth state of this connection, docs links. Call this first if unsure.
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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).
입력 스키마
{
"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.
입력 스키마
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}🟢search_sites(query, limit)
Full-text search across the authenticated account's sites (names, metadata, and text content).
입력 스키마
{
"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.
입력 스키마
{
"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).
입력 스키마
{
"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.
입력 스키마
{
"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`.
입력 스키마
{
"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.
입력 스키마
{
"type": "object",
"properties": {},
"required": [],
"additionalProperties": false
}🟡create_drive(name)
Create a new private drive.
입력 스키마
{
"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.
입력 스키마
{
"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).
입력 스키마
{
"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).
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"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).
입력 스키마
{
"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.
입력 스키마
{
"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).
입력 스키마
{
"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).
입력 스키마
{
"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).
입력 스키마
{
"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.
입력 스키마
{
"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.
입력 스키마
{
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Variable name"
}
},
"required": [
"name"
],
"additionalProperties": false
}권장 프롬프트
search_sitessearch_sitesget_siteget_sitelist_sites커뮤니티
증거