{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_uuzz7awda4g9","handle":"avatargaia-canvas-mcp","url":"https://wellknown.network/agents/avatargaia-canvas-mcp","links":{"self":"https://wellknown.network/agents/avatargaia-canvas-mcp/record.json","html":"https://wellknown.network/agents/avatargaia-canvas-mcp","markdown":"https://wellknown.network/agents/avatargaia-canvas-mcp/record.md","api":"https://wellknown.network/api/v1/agents/avatargaia-canvas-mcp","status":"https://wellknown.network/api/v1/agents/avatargaia-canvas-mcp/status","claim":"https://wellknown.network/agents/avatargaia-canvas-mcp/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/avatargaia-canvas-mcp/claim.json","badge":"https://wellknown.network/agents/avatargaia-canvas-mcp/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/avatargaia-canvas-mcp/history","tools":"https://wellknown.network/api/v1/agents/avatargaia-canvas-mcp/tools"},"ard":{"identifier":"urn:air:agent.avatargaia.top:server:avatargaia-canvas-mcp","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"canvas-mcp","summary":"TeamAgent Canvas MCP（服务端 0.4.0）：91 个工具——开岗、改配置、跑动作、看数据、发布并配知识库。可匿名试用，带 Key 解锁全部。","description":"TeamAgent Canvas MCP（服务端 0.4.0）：91 个工具——开岗、改配置、跑动作、看数据、发布并配知识库。可匿名试用，带 Key 解锁全部。","publisher":{"name":"AvatarGaia","url":null},"homepage":"https://agent.avatargaia.top","repository":"https://github.com/AvatarGaia/canvas-mcp","version":"0.1.4","license":"MIT","protocols":["mcp"],"tags":["mcp","model-context-protocol","teamagent","canvas","stdioshim","gaia"],"pricing":null,"endpoints":[{"url":"https://agent.avatargaia.top/api/mcp/canvas","type":"mcp_streamable_http","auth":null,"probeable":true},{"url":"npm:@avatargaia/canvas-mcp","type":"package_npm","auth":null,"probeable":false}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-03T10:36:46.318773Z","npmKeywords":["mcp","model-context-protocol","teamagent","canvas","stdioshim","gaia"],"publishedAt":"2026-10-03T10:36:46.318773Z","registryName":"io.github.AvatarGaia/canvas-mcp"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","license":"npm","repoUrl":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"ai.prompting","name":"Prompt Management","confidence":0.525,"provenance":"derived"}],"categories":["ai"],"language":"zh"},"observed":{"status":"live","statusReason":"Responded 3h ago.","lastOkAt":"2026-10-10T20:28:32.421Z","lastProbedAt":"2026-10-10T20:28:32.421Z","statusComputedAt":"2026-10-10T20:29:35.095Z","reliability30d":{"probes":99,"successRate":1,"p50Ms":341,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":99,"ok":99,"authBoundaryOk":0,"serviceOk":99,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-10T20:28:32.421Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":229,"error":null,"detail":{"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}——把 s"},{"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}] 主推；look:{brandName,slogan,intro"},{"name":"list_kbs","description":"列出我名下已发布的知识库（库名 / 版本 / 发布时间 / 篇数 / 每页的 path 与标题），以及我名下每个岗位各自配了哪些库。用户问\"我有哪些知识库\"\"这个岗位用的什么资料\"时用。知识库是数字员工回答业务问题的依据：岗位配了库，访客问到时它会先查库再答。"},{"name":"read_kb","description":"读一个知识库。参数名是 name（库名，就是 list_kbs 返回里的 kbName）和 page（页面路径，取自页面清单里的 path）。只传 name → 这个库的版本和页面清单；再传 page（如 wiki/index.md）→ 那一页的原文。要更新一个库之前先用它把现有页面读回来——publish_kb 是整"},{"name":"publish_kb","description":"把一套整理好的 Markdown 发布成知识库（发布到我名下；带 slug 则同时配给那个岗位）。结构：wiki/index.md 是总目录（每篇一行：链接 + 一句摘要 + 更新日期，数字员工靠它挑页，摘要要准）；其余 wiki/<主题>/<文章>.md，一个概念一篇，标题用访客会问的说法，单篇别超过 6000 字。"},{"name":"set_staff_kbs","description":"设定一个岗位用哪些知识库（整体替换）。参数：slug 必填；kbs 是库名数组，只能填我名下已发布的库（list_kbs 里有的），别人的库名会被忽略；传 [] = 这个岗位不用任何库。改完立刻生效。"},{"name":"hire_staff","description":"开一个新的数字员工岗位。参数：templateId 必填（list_templates 里 canOpen=true 的，如 kb-assistant 知识库问答员）；name 员工名字；kbs 开岗时就配上的知识库。返回 slug、画布链接 canvasUrl（发给顾客 / 挂服务号的就是它）和实际配上的知识库 kb"},{"name":"list_actions","description":"列出这个岗位（按其模板）能做的动作：id / title / description / cost / credits / anonymous / job / params(JSON Schema)。参数：slug 必填。调 canvas_action 前先调它，不要猜 action 名——各岗位动作集不同，param"},{"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 拿到合法 session_id。隐私边界：只能读自己岗位的记录"},{"name":"query_events","description":"跨会话按类型拉事件（倒序）：type = chat_user / chat_assistant / track / action_call / page_open / push。参数：slug 必填；type、from/to、limit(≤500)。每条带 source（mcp / page / server，看得出谁"},{"name":"push_screen","description":"把内容推到某个画布会话的屏上。参数：session_id 必填（来自 open_canvas 或 list_sessions）；content 必填，写成一条\"助手回复\"文本，可含 ```canvas-md（Markdown 卡片）/ ```canvas-html（完整 HTML 文档）/ ```canvas（JSON"}],"toolCount":18,"toolsHash":"f8ef7bc12bd14cb618cc1e88c1b6c1a543b07895a8089d39838cb51e17350685","serverName":"teamagent-canvas","capabilities":["tools"],"serverVersion":"0.4.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T14:25:17.771Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":253,"error":null,"detail":{"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}——把 s"},{"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}] 主推；look:{brandName,slogan,intro"},{"name":"list_kbs","description":"列出我名下已发布的知识库（库名 / 版本 / 发布时间 / 篇数 / 每页的 path 与标题），以及我名下每个岗位各自配了哪些库。用户问\"我有哪些知识库\"\"这个岗位用的什么资料\"时用。知识库是数字员工回答业务问题的依据：岗位配了库，访客问到时它会先查库再答。"},{"name":"read_kb","description":"读一个知识库。参数名是 name（库名，就是 list_kbs 返回里的 kbName）和 page（页面路径，取自页面清单里的 path）。只传 name → 这个库的版本和页面清单；再传 page（如 wiki/index.md）→ 那一页的原文。要更新一个库之前先用它把现有页面读回来——publish_kb 是整"},{"name":"publish_kb","description":"把一套整理好的 Markdown 发布成知识库（发布到我名下；带 slug 则同时配给那个岗位）。结构：wiki/index.md 是总目录（每篇一行：链接 + 一句摘要 + 更新日期，数字员工靠它挑页，摘要要准）；其余 wiki/<主题>/<文章>.md，一个概念一篇，标题用访客会问的说法，单篇别超过 6000 字。"},{"name":"set_staff_kbs","description":"设定一个岗位用哪些知识库（整体替换）。参数：slug 必填；kbs 是库名数组，只能填我名下已发布的库（list_kbs 里有的），别人的库名会被忽略；传 [] = 这个岗位不用任何库。改完立刻生效。"},{"name":"hire_staff","description":"开一个新的数字员工岗位。参数：templateId 必填（list_templates 里 canOpen=true 的，如 kb-assistant 知识库问答员）；name 员工名字；kbs 开岗时就配上的知识库。返回 slug、画布链接 canvasUrl（发给顾客 / 挂服务号的就是它）和实际配上的知识库 kb"},{"name":"list_actions","description":"列出这个岗位（按其模板）能做的动作：id / title / description / cost / credits / anonymous / job / params(JSON Schema)。参数：slug 必填。调 canvas_action 前先调它，不要猜 action 名——各岗位动作集不同，param"},{"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 拿到合法 session_id。隐私边界：只能读自己岗位的记录"},{"name":"query_events","description":"跨会话按类型拉事件（倒序）：type = chat_user / chat_assistant / track / action_call / page_open / push。参数：slug 必填；type、from/to、limit(≤500)。每条带 source（mcp / page / server，看得出谁"},{"name":"push_screen","description":"把内容推到某个画布会话的屏上。参数：session_id 必填（来自 open_canvas 或 list_sessions）；content 必填，写成一条\"助手回复\"文本，可含 ```canvas-md（Markdown 卡片）/ ```canvas-html（完整 HTML 文档）/ ```canvas（JSON"}],"toolCount":18,"toolsHash":"f8ef7bc12bd14cb618cc1e88c1b6c1a543b07895a8089d39838cb51e17350685","serverName":"teamagent-canvas","capabilities":["tools"],"serverVersion":"0.4.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T07:23:58.279Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":237,"error":null,"detail":{"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}——把 s"},{"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}] 主推；look:{brandName,slogan,intro"},{"name":"list_kbs","description":"列出我名下已发布的知识库（库名 / 版本 / 发布时间 / 篇数 / 每页的 path 与标题），以及我名下每个岗位各自配了哪些库。用户问\"我有哪些知识库\"\"这个岗位用的什么资料\"时用。知识库是数字员工回答业务问题的依据：岗位配了库，访客问到时它会先查库再答。"},{"name":"read_kb","description":"读一个知识库。参数名是 name（库名，就是 list_kbs 返回里的 kbName）和 page（页面路径，取自页面清单里的 path）。只传 name → 这个库的版本和页面清单；再传 page（如 wiki/index.md）→ 那一页的原文。要更新一个库之前先用它把现有页面读回来——publish_kb 是整"},{"name":"publish_kb","description":"把一套整理好的 Markdown 发布成知识库（发布到我名下；带 slug 则同时配给那个岗位）。结构：wiki/index.md 是总目录（每篇一行：链接 + 一句摘要 + 更新日期，数字员工靠它挑页，摘要要准）；其余 wiki/<主题>/<文章>.md，一个概念一篇，标题用访客会问的说法，单篇别超过 6000 字。"},{"name":"set_staff_kbs","description":"设定一个岗位用哪些知识库（整体替换）。参数：slug 必填；kbs 是库名数组，只能填我名下已发布的库（list_kbs 里有的），别人的库名会被忽略；传 [] = 这个岗位不用任何库。改完立刻生效。"},{"name":"hire_staff","description":"开一个新的数字员工岗位。参数：templateId 必填（list_templates 里 canOpen=true 的，如 kb-assistant 知识库问答员）；name 员工名字；kbs 开岗时就配上的知识库。返回 slug、画布链接 canvasUrl（发给顾客 / 挂服务号的就是它）和实际配上的知识库 kb"},{"name":"list_actions","description":"列出这个岗位（按其模板）能做的动作：id / title / description / cost / credits / anonymous / job / params(JSON Schema)。参数：slug 必填。调 canvas_action 前先调它，不要猜 action 名——各岗位动作集不同，param"},{"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 拿到合法 session_id。隐私边界：只能读自己岗位的记录"},{"name":"query_events","description":"跨会话按类型拉事件（倒序）：type = chat_user / chat_assistant / track / action_call / page_open / push。参数：slug 必填；type、from/to、limit(≤500)。每条带 source（mcp / page / server，看得出谁"},{"name":"push_screen","description":"把内容推到某个画布会话的屏上。参数：session_id 必填（来自 open_canvas 或 list_sessions）；content 必填，写成一条\"助手回复\"文本，可含 ```canvas-md（Markdown 卡片）/ ```canvas-html（完整 HTML 文档）/ ```canvas（JSON"}],"toolCount":18,"toolsHash":"f8ef7bc12bd14cb618cc1e88c1b6c1a543b07895a8089d39838cb51e17350685","serverName":"teamagent-canvas","capabilities":["tools"],"serverVersion":"0.4.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T00:28:22.396Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":250,"error":null,"detail":{"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}——把 s"},{"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}] 主推；look:{brandName,slogan,intro"},{"name":"list_kbs","description":"列出我名下已发布的知识库（库名 / 版本 / 发布时间 / 篇数 / 每页的 path 与标题），以及我名下每个岗位各自配了哪些库。用户问\"我有哪些知识库\"\"这个岗位用的什么资料\"时用。知识库是数字员工回答业务问题的依据：岗位配了库，访客问到时它会先查库再答。"},{"name":"read_kb","description":"读一个知识库。参数名是 name（库名，就是 list_kbs 返回里的 kbName）和 page（页面路径，取自页面清单里的 path）。只传 name → 这个库的版本和页面清单；再传 page（如 wiki/index.md）→ 那一页的原文。要更新一个库之前先用它把现有页面读回来——publish_kb 是整"},{"name":"publish_kb","description":"把一套整理好的 Markdown 发布成知识库（发布到我名下；带 slug 则同时配给那个岗位）。结构：wiki/index.md 是总目录（每篇一行：链接 + 一句摘要 + 更新日期，数字员工靠它挑页，摘要要准）；其余 wiki/<主题>/<文章>.md，一个概念一篇，标题用访客会问的说法，单篇别超过 6000 字。"},{"name":"set_staff_kbs","description":"设定一个岗位用哪些知识库（整体替换）。参数：slug 必填；kbs 是库名数组，只能填我名下已发布的库（list_kbs 里有的），别人的库名会被忽略；传 [] = 这个岗位不用任何库。改完立刻生效。"},{"name":"hire_staff","description":"开一个新的数字员工岗位。参数：templateId 必填（list_templates 里 canOpen=true 的，如 kb-assistant 知识库问答员）；name 员工名字；kbs 开岗时就配上的知识库。返回 slug、画布链接 canvasUrl（发给顾客 / 挂服务号的就是它）和实际配上的知识库 kb"},{"name":"list_actions","description":"列出这个岗位（按其模板）能做的动作：id / title / description / cost / credits / anonymous / job / params(JSON Schema)。参数：slug 必填。调 canvas_action 前先调它，不要猜 action 名——各岗位动作集不同，param"},{"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 拿到合法 session_id。隐私边界：只能读自己岗位的记录"},{"name":"query_events","description":"跨会话按类型拉事件（倒序）：type = chat_user / chat_assistant / track / action_call / page_open / push。参数：slug 必填；type、from/to、limit(≤500)。每条带 source（mcp / page / server，看得出谁"},{"name":"push_screen","description":"把内容推到某个画布会话的屏上。参数：session_id 必填（来自 open_canvas 或 list_sessions）；content 必填，写成一条\"助手回复\"文本，可含 ```canvas-md（Markdown 卡片）/ ```canvas-html（完整 HTML 文档）/ ```canvas（JSON"}],"toolCount":18,"toolsHash":"f8ef7bc12bd14cb618cc1e88c1b6c1a543b07895a8089d39838cb51e17350685","serverName":"teamagent-canvas","capabilities":["tools"],"serverVersion":"0.4.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T18:25:53.317Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":260,"error":null,"detail":{"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}——把 s"},{"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}] 主推；look:{brandName,slogan,intro"},{"name":"list_kbs","description":"列出我名下已发布的知识库（库名 / 版本 / 发布时间 / 篇数 / 每页的 path 与标题），以及我名下每个岗位各自配了哪些库。用户问\"我有哪些知识库\"\"这个岗位用的什么资料\"时用。知识库是数字员工回答业务问题的依据：岗位配了库，访客问到时它会先查库再答。"},{"name":"read_kb","description":"读一个知识库。参数名是 name（库名，就是 list_kbs 返回里的 kbName）和 page（页面路径，取自页面清单里的 path）。只传 name → 这个库的版本和页面清单；再传 page（如 wiki/index.md）→ 那一页的原文。要更新一个库之前先用它把现有页面读回来——publish_kb 是整"},{"name":"publish_kb","description":"把一套整理好的 Markdown 发布成知识库（发布到我名下；带 slug 则同时配给那个岗位）。结构：wiki/index.md 是总目录（每篇一行：链接 + 一句摘要 + 更新日期，数字员工靠它挑页，摘要要准）；其余 wiki/<主题>/<文章>.md，一个概念一篇，标题用访客会问的说法，单篇别超过 6000 字。"},{"name":"set_staff_kbs","description":"设定一个岗位用哪些知识库（整体替换）。参数：slug 必填；kbs 是库名数组，只能填我名下已发布的库（list_kbs 里有的），别人的库名会被忽略；传 [] = 这个岗位不用任何库。改完立刻生效。"},{"name":"hire_staff","description":"开一个新的数字员工岗位。参数：templateId 必填（list_templates 里 canOpen=true 的，如 kb-assistant 知识库问答员）；name 员工名字；kbs 开岗时就配上的知识库。返回 slug、画布链接 canvasUrl（发给顾客 / 挂服务号的就是它）和实际配上的知识库 kb"},{"name":"list_actions","description":"列出这个岗位（按其模板）能做的动作：id / title / description / cost / credits / anonymous / job / params(JSON Schema)。参数：slug 必填。调 canvas_action 前先调它，不要猜 action 名——各岗位动作集不同，param"},{"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 拿到合法 session_id。隐私边界：只能读自己岗位的记录"},{"name":"query_events","description":"跨会话按类型拉事件（倒序）：type = chat_user / chat_assistant / track / action_call / page_open / push。参数：slug 必填；type、from/to、limit(≤500)。每条带 source（mcp / page / server，看得出谁"},{"name":"push_screen","description":"把内容推到某个画布会话的屏上。参数：session_id 必填（来自 open_canvas 或 list_sessions）；content 必填，写成一条\"助手回复\"文本，可含 ```canvas-md（Markdown 卡片）/ ```canvas-html（完整 HTML 文档）/ ```canvas（JSON"}],"toolCount":18,"toolsHash":"f8ef7bc12bd14cb618cc1e88c1b6c1a543b07895a8089d39838cb51e17350685","serverName":"teamagent-canvas","capabilities":["tools"],"serverVersion":"0.4.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T11:27:53.298Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":301,"error":null,"detail":{"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}——把 s"},{"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}] 主推；look:{brandName,slogan,intro"},{"name":"list_kbs","description":"列出我名下已发布的知识库（库名 / 版本 / 发布时间 / 篇数 / 每页的 path 与标题），以及我名下每个岗位各自配了哪些库。用户问\"我有哪些知识库\"\"这个岗位用的什么资料\"时用。知识库是数字员工回答业务问题的依据：岗位配了库，访客问到时它会先查库再答。"},{"name":"read_kb","description":"读一个知识库。参数名是 name（库名，就是 list_kbs 返回里的 kbName）和 page（页面路径，取自页面清单里的 path）。只传 name → 这个库的版本和页面清单；再传 page（如 wiki/index.md）→ 那一页的原文。要更新一个库之前先用它把现有页面读回来——publish_kb 是整"},{"name":"publish_kb","description":"把一套整理好的 Markdown 发布成知识库（发布到我名下；带 slug 则同时配给那个岗位）。结构：wiki/index.md 是总目录（每篇一行：链接 + 一句摘要 + 更新日期，数字员工靠它挑页，摘要要准）；其余 wiki/<主题>/<文章>.md，一个概念一篇，标题用访客会问的说法，单篇别超过 6000 字。"},{"name":"set_staff_kbs","description":"设定一个岗位用哪些知识库（整体替换）。参数：slug 必填；kbs 是库名数组，只能填我名下已发布的库（list_kbs 里有的），别人的库名会被忽略；传 [] = 这个岗位不用任何库。改完立刻生效。"},{"name":"hire_staff","description":"开一个新的数字员工岗位。参数：templateId 必填（list_templates 里 canOpen=true 的，如 kb-assistant 知识库问答员）；name 员工名字；kbs 开岗时就配上的知识库。返回 slug、画布链接 canvasUrl（发给顾客 / 挂服务号的就是它）和实际配上的知识库 kb"},{"name":"list_actions","description":"列出这个岗位（按其模板）能做的动作：id / title / description / cost / credits / anonymous / job / params(JSON Schema)。参数：slug 必填。调 canvas_action 前先调它，不要猜 action 名——各岗位动作集不同，param"},{"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 拿到合法 session_id。隐私边界：只能读自己岗位的记录"},{"name":"query_events","description":"跨会话按类型拉事件（倒序）：type = chat_user / chat_assistant / track / action_call / page_open / push。参数：slug 必填；type、from/to、limit(≤500)。每条带 source（mcp / page / server，看得出谁"},{"name":"push_screen","description":"把内容推到某个画布会话的屏上。参数：session_id 必填（来自 open_canvas 或 list_sessions）；content 必填，写成一条\"助手回复\"文本，可含 ```canvas-md（Markdown 卡片）/ ```canvas-html（完整 HTML 文档）/ ```canvas（JSON"}],"toolCount":18,"toolsHash":"f8ef7bc12bd14cb618cc1e88c1b6c1a543b07895a8089d39838cb51e17350685","serverName":"teamagent-canvas","capabilities":["tools"],"serverVersion":"0.4.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T05:26:47.176Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":1010,"error":null,"detail":{"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}——把 s"},{"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}] 主推；look:{brandName,slogan,intro"},{"name":"list_kbs","description":"列出我名下已发布的知识库（库名 / 版本 / 发布时间 / 篇数 / 每页的 path 与标题），以及我名下每个岗位各自配了哪些库。用户问\"我有哪些知识库\"\"这个岗位用的什么资料\"时用。知识库是数字员工回答业务问题的依据：岗位配了库，访客问到时它会先查库再答。"},{"name":"read_kb","description":"读一个知识库。参数名是 name（库名，就是 list_kbs 返回里的 kbName）和 page（页面路径，取自页面清单里的 path）。只传 name → 这个库的版本和页面清单；再传 page（如 wiki/index.md）→ 那一页的原文。要更新一个库之前先用它把现有页面读回来——publish_kb 是整"},{"name":"publish_kb","description":"把一套整理好的 Markdown 发布成知识库（发布到我名下；带 slug 则同时配给那个岗位）。结构：wiki/index.md 是总目录（每篇一行：链接 + 一句摘要 + 更新日期，数字员工靠它挑页，摘要要准）；其余 wiki/<主题>/<文章>.md，一个概念一篇，标题用访客会问的说法，单篇别超过 6000 字。"},{"name":"set_staff_kbs","description":"设定一个岗位用哪些知识库（整体替换）。参数：slug 必填；kbs 是库名数组，只能填我名下已发布的库（list_kbs 里有的），别人的库名会被忽略；传 [] = 这个岗位不用任何库。改完立刻生效。"},{"name":"hire_staff","description":"开一个新的数字员工岗位。参数：templateId 必填（list_templates 里 canOpen=true 的，如 kb-assistant 知识库问答员）；name 员工名字；kbs 开岗时就配上的知识库。返回 slug、画布链接 canvasUrl（发给顾客 / 挂服务号的就是它）和实际配上的知识库 kb"},{"name":"list_actions","description":"列出这个岗位（按其模板）能做的动作：id / title / description / cost / credits / anonymous / job / params(JSON Schema)。参数：slug 必填。调 canvas_action 前先调它，不要猜 action 名——各岗位动作集不同，param"},{"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 拿到合法 session_id。隐私边界：只能读自己岗位的记录"},{"name":"query_events","description":"跨会话按类型拉事件（倒序）：type = chat_user / chat_assistant / track / action_call / page_open / push。参数：slug 必填；type、from/to、limit(≤500)。每条带 source（mcp / page / server，看得出谁"},{"name":"push_screen","description":"把内容推到某个画布会话的屏上。参数：session_id 必填（来自 open_canvas 或 list_sessions）；content 必填，写成一条\"助手回复\"文本，可含 ```canvas-md（Markdown 卡片）/ ```canvas-html（完整 HTML 文档）/ ```canvas（JSON"}],"toolCount":18,"toolsHash":"f8ef7bc12bd14cb618cc1e88c1b6c1a543b07895a8089d39838cb51e17350685","serverName":"teamagent-canvas","capabilities":["tools"],"serverVersion":"0.4.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T23:22:33.632Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":222,"error":null,"detail":{"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}——把 s"},{"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}] 主推；look:{brandName,slogan,intro"},{"name":"list_kbs","description":"列出我名下已发布的知识库（库名 / 版本 / 发布时间 / 篇数 / 每页的 path 与标题），以及我名下每个岗位各自配了哪些库。用户问\"我有哪些知识库\"\"这个岗位用的什么资料\"时用。知识库是数字员工回答业务问题的依据：岗位配了库，访客问到时它会先查库再答。"},{"name":"read_kb","description":"读一个知识库。参数名是 name（库名，就是 list_kbs 返回里的 kbName）和 page（页面路径，取自页面清单里的 path）。只传 name → 这个库的版本和页面清单；再传 page（如 wiki/index.md）→ 那一页的原文。要更新一个库之前先用它把现有页面读回来——publish_kb 是整"},{"name":"publish_kb","description":"把一套整理好的 Markdown 发布成知识库（发布到我名下；带 slug 则同时配给那个岗位）。结构：wiki/index.md 是总目录（每篇一行：链接 + 一句摘要 + 更新日期，数字员工靠它挑页，摘要要准）；其余 wiki/<主题>/<文章>.md，一个概念一篇，标题用访客会问的说法，单篇别超过 6000 字。"},{"name":"set_staff_kbs","description":"设定一个岗位用哪些知识库（整体替换）。参数：slug 必填；kbs 是库名数组，只能填我名下已发布的库（list_kbs 里有的），别人的库名会被忽略；传 [] = 这个岗位不用任何库。改完立刻生效。"},{"name":"hire_staff","description":"开一个新的数字员工岗位。参数：templateId 必填（list_templates 里 canOpen=true 的，如 kb-assistant 知识库问答员）；name 员工名字；kbs 开岗时就配上的知识库。返回 slug、画布链接 canvasUrl（发给顾客 / 挂服务号的就是它）和实际配上的知识库 kb"},{"name":"list_actions","description":"列出这个岗位（按其模板）能做的动作：id / title / description / cost / credits / anonymous / job / params(JSON Schema)。参数：slug 必填。调 canvas_action 前先调它，不要猜 action 名——各岗位动作集不同，param"},{"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 拿到合法 session_id。隐私边界：只能读自己岗位的记录"},{"name":"query_events","description":"跨会话按类型拉事件（倒序）：type = chat_user / chat_assistant / track / action_call / page_open / push。参数：slug 必填；type、from/to、limit(≤500)。每条带 source（mcp / page / server，看得出谁"},{"name":"push_screen","description":"把内容推到某个画布会话的屏上。参数：session_id 必填（来自 open_canvas 或 list_sessions）；content 必填，写成一条\"助手回复\"文本，可含 ```canvas-md（Markdown 卡片）/ ```canvas-html（完整 HTML 文档）/ ```canvas（JSON"}],"toolCount":18,"toolsHash":"f8ef7bc12bd14cb618cc1e88c1b6c1a543b07895a8089d39838cb51e17350685","serverName":"teamagent-canvas","capabilities":["tools"],"serverVersion":"0.4.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T16:28:13.835Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":300,"error":null,"detail":{"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}——把 s"},{"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}] 主推；look:{brandName,slogan,intro"},{"name":"list_kbs","description":"列出我名下已发布的知识库（库名 / 版本 / 发布时间 / 篇数 / 每页的 path 与标题），以及我名下每个岗位各自配了哪些库。用户问\"我有哪些知识库\"\"这个岗位用的什么资料\"时用。知识库是数字员工回答业务问题的依据：岗位配了库，访客问到时它会先查库再答。"},{"name":"read_kb","description":"读一个知识库。参数名是 name（库名，就是 list_kbs 返回里的 kbName）和 page（页面路径，取自页面清单里的 path）。只传 name → 这个库的版本和页面清单；再传 page（如 wiki/index.md）→ 那一页的原文。要更新一个库之前先用它把现有页面读回来——publish_kb 是整"},{"name":"publish_kb","description":"把一套整理好的 Markdown 发布成知识库（发布到我名下；带 slug 则同时配给那个岗位）。结构：wiki/index.md 是总目录（每篇一行：链接 + 一句摘要 + 更新日期，数字员工靠它挑页，摘要要准）；其余 wiki/<主题>/<文章>.md，一个概念一篇，标题用访客会问的说法，单篇别超过 6000 字。"},{"name":"set_staff_kbs","description":"设定一个岗位用哪些知识库（整体替换）。参数：slug 必填；kbs 是库名数组，只能填我名下已发布的库（list_kbs 里有的），别人的库名会被忽略；传 [] = 这个岗位不用任何库。改完立刻生效。"},{"name":"hire_staff","description":"开一个新的数字员工岗位。参数：templateId 必填（list_templates 里 canOpen=true 的，如 kb-assistant 知识库问答员）；name 员工名字；kbs 开岗时就配上的知识库。返回 slug、画布链接 canvasUrl（发给顾客 / 挂服务号的就是它）和实际配上的知识库 kb"},{"name":"list_actions","description":"列出这个岗位（按其模板）能做的动作：id / title / description / cost / credits / anonymous / job / params(JSON Schema)。参数：slug 必填。调 canvas_action 前先调它，不要猜 action 名——各岗位动作集不同，param"},{"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 拿到合法 session_id。隐私边界：只能读自己岗位的记录"},{"name":"query_events","description":"跨会话按类型拉事件（倒序）：type = chat_user / chat_assistant / track / action_call / page_open / push。参数：slug 必填；type、from/to、limit(≤500)。每条带 source（mcp / page / server，看得出谁"},{"name":"push_screen","description":"把内容推到某个画布会话的屏上。参数：session_id 必填（来自 open_canvas 或 list_sessions）；content 必填，写成一条\"助手回复\"文本，可含 ```canvas-md（Markdown 卡片）/ ```canvas-html（完整 HTML 文档）/ ```canvas（JSON"}],"toolCount":18,"toolsHash":"f8ef7bc12bd14cb618cc1e88c1b6c1a543b07895a8089d39838cb51e17350685","serverName":"teamagent-canvas","capabilities":["tools"],"serverVersion":"0.4.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-08T10:23:51.791Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":960,"error":null,"detail":{"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}——把 s"},{"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}] 主推；look:{brandName,slogan,intro"},{"name":"list_kbs","description":"列出我名下已发布的知识库（库名 / 版本 / 发布时间 / 篇数 / 每页的 path 与标题），以及我名下每个岗位各自配了哪些库。用户问\"我有哪些知识库\"\"这个岗位用的什么资料\"时用。知识库是数字员工回答业务问题的依据：岗位配了库，访客问到时它会先查库再答。"},{"name":"read_kb","description":"读一个知识库。参数名是 name（库名，就是 list_kbs 返回里的 kbName）和 page（页面路径，取自页面清单里的 path）。只传 name → 这个库的版本和页面清单；再传 page（如 wiki/index.md）→ 那一页的原文。要更新一个库之前先用它把现有页面读回来——publish_kb 是整"},{"name":"publish_kb","description":"把一套整理好的 Markdown 发布成知识库（发布到我名下；带 slug 则同时配给那个岗位）。结构：wiki/index.md 是总目录（每篇一行：链接 + 一句摘要 + 更新日期，数字员工靠它挑页，摘要要准）；其余 wiki/<主题>/<文章>.md，一个概念一篇，标题用访客会问的说法，单篇别超过 6000 字。"},{"name":"set_staff_kbs","description":"设定一个岗位用哪些知识库（整体替换）。参数：slug 必填；kbs 是库名数组，只能填我名下已发布的库（list_kbs 里有的），别人的库名会被忽略；传 [] = 这个岗位不用任何库。改完立刻生效。"},{"name":"hire_staff","description":"开一个新的数字员工岗位。参数：templateId 必填（list_templates 里 canOpen=true 的，如 kb-assistant 知识库问答员）；name 员工名字；kbs 开岗时就配上的知识库。返回 slug、画布链接 canvasUrl（发给顾客 / 挂服务号的就是它）和实际配上的知识库 kb"},{"name":"list_actions","description":"列出这个岗位（按其模板）能做的动作：id / title / description / cost / credits / anonymous / job / params(JSON Schema)。参数：slug 必填。调 canvas_action 前先调它，不要猜 action 名——各岗位动作集不同，param"},{"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 拿到合法 session_id。隐私边界：只能读自己岗位的记录"},{"name":"query_events","description":"跨会话按类型拉事件（倒序）：type = chat_user / chat_assistant / track / action_call / page_open / push。参数：slug 必填；type、from/to、limit(≤500)。每条带 source（mcp / page / server，看得出谁"},{"name":"push_screen","description":"把内容推到某个画布会话的屏上。参数：session_id 必填（来自 open_canvas 或 list_sessions）；content 必填，写成一条\"助手回复\"文本，可含 ```canvas-md（Markdown 卡片）/ ```canvas-html（完整 HTML 文档）/ ```canvas（JSON"}],"toolCount":18,"toolsHash":"f8ef7bc12bd14cb618cc1e88c1b6c1a543b07895a8089d39838cb51e17350685","serverName":"teamagent-canvas","capabilities":["tools"],"serverVersion":"0.4.0","protocolVersion":"2025-06-18"}}],"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}——把 s"},{"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}] 主推；look:{brandName,slogan,intro"},{"name":"list_kbs","description":"列出我名下已发布的知识库（库名 / 版本 / 发布时间 / 篇数 / 每页的 path 与标题），以及我名下每个岗位各自配了哪些库。用户问\"我有哪些知识库\"\"这个岗位用的什么资料\"时用。知识库是数字员工回答业务问题的依据：岗位配了库，访客问到时它会先查库再答。"},{"name":"read_kb","description":"读一个知识库。参数名是 name（库名，就是 list_kbs 返回里的 kbName）和 page（页面路径，取自页面清单里的 path）。只传 name → 这个库的版本和页面清单；再传 page（如 wiki/index.md）→ 那一页的原文。要更新一个库之前先用它把现有页面读回来——publish_kb 是整"},{"name":"publish_kb","description":"把一套整理好的 Markdown 发布成知识库（发布到我名下；带 slug 则同时配给那个岗位）。结构：wiki/index.md 是总目录（每篇一行：链接 + 一句摘要 + 更新日期，数字员工靠它挑页，摘要要准）；其余 wiki/<主题>/<文章>.md，一个概念一篇，标题用访客会问的说法，单篇别超过 6000 字。"},{"name":"set_staff_kbs","description":"设定一个岗位用哪些知识库（整体替换）。参数：slug 必填；kbs 是库名数组，只能填我名下已发布的库（list_kbs 里有的），别人的库名会被忽略；传 [] = 这个岗位不用任何库。改完立刻生效。"},{"name":"hire_staff","description":"开一个新的数字员工岗位。参数：templateId 必填（list_templates 里 canOpen=true 的，如 kb-assistant 知识库问答员）；name 员工名字；kbs 开岗时就配上的知识库。返回 slug、画布链接 canvasUrl（发给顾客 / 挂服务号的就是它）和实际配上的知识库 kb"},{"name":"list_actions","description":"列出这个岗位（按其模板）能做的动作：id / title / description / cost / credits / anonymous / job / params(JSON Schema)。参数：slug 必填。调 canvas_action 前先调它，不要猜 action 名——各岗位动作集不同，param"},{"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 拿到合法 session_id。隐私边界：只能读自己岗位的记录"},{"name":"query_events","description":"跨会话按类型拉事件（倒序）：type = chat_user / chat_assistant / track / action_call / page_open / push。参数：slug 必填；type、from/to、limit(≤500)。每条带 source（mcp / page / server，看得出谁"},{"name":"push_screen","description":"把内容推到某个画布会话的屏上。参数：session_id 必填（来自 open_canvas 或 list_sessions）；content 必填，写成一条\"助手回复\"文本，可含 ```canvas-md（Markdown 卡片）/ ```canvas-html（完整 HTML 文档）/ ```canvas（JSON"}],"package":{"name":"@avatargaia/canvas-mcp","registry":"npm","observedAt":"2026-10-10T20:30:44.729Z","publishedAt":"2026-10-03T10:35:05.864Z","latestVersion":"0.1.4","weeklyDownloads":234},"toolSurface":{"id":"ts_53jjtxyv8jcq","endpointId":"ep_xfgb5cw2kqrg","hash":"f8ef7bc12bd14cb618cc1e88c1b6c1a543b07895a8089d39838cb51e17350685","toolCount":18,"serverName":"teamagent-canvas","serverVersion":"0.4.0","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-03T11:26:16.469Z","lastSeenAt":"2026-10-10T20:28:32.425Z","observations":28,"toolNames":["list_templates","list_my_staff","open_canvas","get_staff_config","patch_staff_config","list_kbs","read_kb","publish_kb","set_staff_kbs","hire_staff","list_actions","canvas_action","get_job","get_stats","list_sessions","get_session_log","query_events","push_screen"],"distinctSurfaces":3},"endpointFacts":[{"id":"ep_xfgb5cw2kqrg","url":"https://agent.avatargaia.top/api/mcp/canvas","type":"mcp_streamable_http","factsCheckedAt":"2026-10-10T14:25:17.766Z","auth":{"observedAt":"2026-10-10T14:25:18.287Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://agent.avatargaia.top/.well-known/oauth-protected-resource/api/mcp/canvas","resource":"https://agent.avatargaia.top/api/mcp","authorizationServers":["https://agent.avatargaia.top"],"scopesSupported":["read","write"]},"authorizationServer":{"url":"https://agent.avatargaia.top/.well-known/oauth-authorization-server","issuer":"https://agent.avatargaia.top","grantTypesSupported":["authorization_code","refresh_token"],"codeChallengeMethodsSupported":["S256"],"tokenEndpointAuthMethodsSupported":["none","client_secret_post","client_secret_basic"],"dynamicClientRegistration":true,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":true},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":true,"dynamicClientRegistration":true}},"tls":{"observedAt":"2026-10-10T14:25:18.803Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"agent.avatargaia.top","issuer":{"commonName":"YR2","organization":"Let's Encrypt"},"validFrom":"2026-09-17T12:30:22.000Z","validTo":"2026-12-16T12:30:21.000Z","daysToExpiry":66,"sanCount":1,"fingerprint256":"85:E3:9D:BF:F9:4C:18:06:6B:C2:11:AB:A1:D0:02:A6:1E:32:86:68:A1:43:A3:C2:66:AE:A7:68:FA:99:E1:B9"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"npm","key":"@avatargaia/canvas-mcp","url":"https://www.npmjs.com/package/@avatargaia/canvas-mcp","firstSeenAt":"2026-09-20T17:17:59.302Z","fetchedAt":"2026-10-10T07:17:40.945Z","normalizedAt":"2026-10-10T07:17:40.945Z"},{"source":"mcp_registry","key":"io.github.AvatarGaia/canvas-mcp","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.AvatarGaia%2Fcanvas-mcp","firstSeenAt":"2026-09-14T02:21:30.250Z","fetchedAt":"2026-10-09T17:20:32.852Z","normalizedAt":"2026-10-09T17:20:32.852Z"}]},"firstSeenAt":"2026-09-14T02:21:30.250Z","updatedAt":"2026-10-10T20:30:44.729Z"}