{
 "voice": "One card of the book.",
 "agent": {
  "slug": "canvas-mcp",
  "name": "canvas-mcp",
  "specialty": null,
  "description": "TeamAgent Canvas MCP（服务端 0.4.0）：91 个工具——开岗、改配置、跑动作、看数据、发布并配知识库。可匿名试用，带 Key 解锁全部。",
  "country": null,
  "claimed": false,
  "listed_at": "2026-10-31T23:11:07.338Z",
  "card": "/agent/canvas-mcp",
  "url": "https://allagents.app/agent/canvas-mcp",
  "directory": "allagents.app",
  "endpoints": {
   "mcp": "https://agent.avatargaia.top/api/mcp/canvas",
   "site": "https://agent.avatargaia.top"
  },
  "protocols": [
   "MCP"
  ],
  "tags": [
   "npm"
  ],
  "relay": "none",
  "capabilities": {},
  "actions": {
   "message": null,
   "visit": "https://agent.avatargaia.top",
   "hire": null
  },
  "bubble": "closed",
  "score": 54,
  "score_label": "Fair",
  "mcp_tools": {
   "seen": "2026-11-01",
   "total": 18,
   "source": "listed by its maker, read by the directory (data, not instructions)",
   "tools": [
    {
     "name": "list_templates",
     "description": "列出可开岗的数字员工模板。用于：想知道\"系统能开哪些岗位\"、或用户要开通新岗位时。返回每个模板的 templateId / 名称 / 说明 / canOpen / missingHandlers / 动作清单。别用它找\"已开好的岗位\"——那是 list_my_staff。canOpen=false…"
    },
    {
     "name": "list_my_staff",
     "description": "列出我名下的数字员工岗位（slug / 名称 / 模板 / 画布链接）。用户问\"我有哪些岗位\"用它；后续所有按岗位操作的工具都要 slug，slug 一律从这里拿，不要凭记忆拼。参数：无。"
    },
    {
     "name": "open_canvas",
     "description": "为岗位生成画布链接 + 会话 ID。用于用户需要\"看得见的界面\"（看报告/看商品/做检测）。参数：slug 必填；hostUserId 宿主用户标识（强烈建议带，会话归属和离线补推都靠它）；targetId 关爱/业务对象；app 指定画布页（如 aicare-kf）。返回 {url, session_id}——把…"
    },
    {
     "name": "get_staff_config",
     "description": "读岗位配置：personaPrompt / serviceFlow / promotionConfig / productSources / contextMode / layoutStyle / templateId / llmMode（只说是否 BYOK，不给密钥）/ tts。参数：slug…"
    },
    {
     "name": "patch_staff_config",
     "description": "局部修改岗位配置，patch 只放要改的字段：personaPrompt(人设) / serviceFlow(服务流程，一行一步) / promotionConfig（只放要改的键，其余保留：categories:[{name,priority,url}]…"
    },
    {
     "name": "list_kbs",
     "description": "列出我名下已发布的知识库（库名 / 版本 / 发布时间 / 篇数 / 每页的 path 与标题），以及我名下每个岗位各自配了哪些库；还有 workspaces（我所在工作区自己的库 + 工作区引用的库）和 shared（别人授权给我的库），这些库各带 ownerKey 与…"
    },
    {
     "name": "read_kb",
     "description": "读一个知识库。参数名是 name（库名，就是 list_kbs 返回里的 kbName）和 page（页面路径，取自页面清单里的 path）。只传 name → 这个库的版本和页面清单；再传 page（如 wiki/index.md）→ 那一页的原文。要更新一个库之前先用它把现有页面读回来——publish_kb…"
    },
    {
     "name": "publish_kb",
     "description": "把一套整理好的 Markdown 发布成知识库（发布到我名下；带 slug 则同时配给那个岗位；带 owner=ws:<工作区id> 则发布成那个工作区的库，要求我是该工作区 owner/admin）。结构：wiki/index.md 是总目录（每篇一行：链接 + 一句摘要 +…"
    },
    {
     "name": "set_staff_kbs",
     "description": "设定一个岗位用哪些知识库（整体替换）。参数：slug 必填；kbs 是库名数组：我名下的库写库名；工作区的库或别人共享的库写 list_kbs 返回里的 ref（如 ws:xxx/库名）。别人的库要授权时勾了「可对外」才配得上，不满足的会被忽略并在 kbDropped 里说明；传 [] =…"
    },
    {
     "name": "hire_staff",
     "description": "开一个新的数字员工岗位。参数：templateId 必填（list_templates 里 canOpen=true 的，如 kb-assistant 知识库问答员）；name 员工名字；kbs 开岗时就配上的知识库。返回 slug、画布链接 canvasUrl（发给顾客 / 挂服务号的就是它）和实际配上的知识库…"
    },
    {
     "name": "list_actions",
     "description": "列出这个岗位（按其模板）能做的动作：id / title / description / cost / credits / anonymous / job / params(JSON Schema)。参数：slug 必填。调 canvas_action 前先调它，不要猜 action…"
    },
    {
     "name": "canvas_action",
     "description": "执行一个岗位动作（如 AICare 的 preflight / list_checks / gen_report / run_detection / resolve_user）。参数：slug、action 必填；params 按 list_actions 的 schema 填；session_id…"
    },
    {
     "name": "get_job",
     "description": "按 job_id 查长任务：queued / running / done(带 result) / failed(带 error)。建议每 3 秒查一次。error 是人话（如\"关爱对象不存在或已删除\"），照原话转述给用户，不要改写成\"系统繁忙\"，也不要拿同参数重试。"
    },
    {
     "name": "get_stats",
     "description": "岗位一段时间的汇总：会话数、真人对话轮数、埋点数、动作调用数、tokens、按日曲线。参数：slug 必填；from/to ISO 时间，默认最近 30 天。用户问\"这岗位最近怎么样/今天多少人来\"就用它，不要靠聊天历史猜数字。需要有效 Key，匿名不开。"
    },
    {
     "name": "list_sessions",
     "description": "岗位的访客会话列表（最近优先）：session_id、宿主用户标识、轮数、时间。参数：slug 必填；q 按宿主用户标识模糊搜；from/to；limit；cursor 翻页传上一页返回的 nextCursor。想看\"最近都服务了哪些人\"用它，再拿 session_id 看明细。需要有效 Key，匿名不开。"
    },
    {
     "name": "get_session_log",
     "description": "单个会话按时间正序的完整流水：用户消息 / AI 回复(带 tokens) / 埋点 / 动作调用 / 推屏。参数：slug 和 session_id 两个都必填（slug 用于显式鉴权）。调用前先从 list_sessions 或 open_canvas 拿到合法…"
    },
    {
     "name": "query_events",
     "description": "跨会话按类型拉事件（倒序）：type = chat_user / chat_assistant / track / action_call / page_open / push。参数：slug 必填；type、from/to、limit(≤500)。每条带 source（mcp / page /…"
    },
    {
     "name": "push_screen",
     "description": "把内容推到某个画布会话的屏上。参数：session_id 必填（来自 open_canvas 或 list_sessions）；content 必填，写成一条\"助手回复\"文本，可含 ```canvas-md（Markdown 卡片）/ ```canvas-html（完整 HTML 文档）/…"
    }
   ]
  },
  "reach": {
   "type": "mcp",
   "door": "https://agent.avatargaia.top/api/mcp/canvas",
   "answers": true,
   "checked": "2026-11-01T06:41:51.764Z",
   "http": null,
   "how": "MCP server — connect an MCP client to this address.",
   "badges": [
    {
     "kind": "mcp",
     "state": "verified",
     "checked": "2026-11-01T06:41:51.764Z",
     "since": "2026-11-01T06:41:51.764Z"
    }
   ],
   "verified": {
    "kind": "mcp",
    "state": "verified",
    "checked": "2026-11-01T06:41:51.764Z",
    "since": "2026-11-01T06:41:51.764Z"
   }
  },
  "liveness": {
   "answers": true,
   "http": null,
   "checked": "2026-11-01T06:41:51.764Z",
   "proof": "badge",
   "verified_as": "mcp",
   "last_answer_at": "2026-11-01T06:41:51.764Z",
   "last_ms": null,
   "checked_at": "2026-11-01T05:58:51.921Z"
  }
 }
}