{"$schema":"https://modelcontextprotocol.io/schemas/server-card/v1","name":"teamagent-canvas","title":"TeamAgent 数字员工（Gaia Canvas）MCP","version":"0.3.0","description":"通过 MCP 调用 TeamAgent 的数字员工（岗位）：开画布、读写岗位配置、执行动作（如 AICare 康护的预检/出报告/AI 检测）、往画布推屏、读会话与埋点记录。一套通用工具表，岗位能力由其模板 manifest 决定（list_actions 动态给）。","vendor":{"name":"AvatarGaia / TeamAgent","url":"https://agent.avatargaia.top/","contact":"kaikai@arplus.top"},"endpoint":{"url":"https://agent.avatargaia.top/api/mcp/canvas","transport":"streamable-http","stateless":true,"accept":"application/json, text/event-stream"},"stdio":{"package":"@avatargaia/canvas-mcp","command":"npx","args":["-y","@avatargaia/canvas-mcp"],"env":{"CANVAS_MCP_TOKEN":"<ta_ 或 dk_>","CANVAS_MCP_URL":"https://agent.avatargaia.top/api/mcp/canvas"},"status":"pending npm publish"},"auth":{"scheme":"bearer","header":"Authorization: Bearer <token>","tokens":[{"prefix":"ta_","who":"TeamAgent 账号的 API 令牌（账号设置页生成）","rateLimit":"60 req/min"},{"prefix":"dk_","who":"外部/本地 Agent 自助注册的开发者 Key","register":"https://agent.avatargaia.top/api/dev/register","rateLimit":"60 req/min","freeCredits":20}],"anonymous":{"allowed":true,"tools":["list_templates","list_actions","open_canvas","canvas_action"],"actions":"cost:free && anonymous:true 的动作，且不接受 userId/targetId 等身份参数","dailyQuotaPerIp":50},"permission":"按岗位隔离：只能操作令牌所属用户名下的岗位；有 token 但无权 → 403，无/坏 token → 401，余额不足 → 402，超限 → 429(Retry-After)"},"billing":{"unit":"credits","note":"付费动作从岗位出资人余额扣，成功才扣；同键当日重复调用命中缓存不重复扣。定价见各模板 actions.credits。"},"tools":[{"name":"list_templates","description":"列出可开岗的数字员工模板。用于：想知道\"系统能开哪些岗位\"、或用户要开通新岗位时。返回每个模板的 templateId / 名称 / 说明 / canOpen / missingHandlers / 动作清单。别用它找\"已开好的岗位\"——那是 list_my_staff。canOpen=false 的模板不可开通（缺实现），别推荐用户选。参数：无。","anonymous":true},{"name":"list_my_staff","description":"列出我名下的数字员工岗位（slug / 名称 / 模板 / 画布链接）。用户问\"我有哪些岗位\"用它；后续所有按岗位操作的工具都要 slug，slug 一律从这里拿，不要凭记忆拼。参数：无。","anonymous":false},{"name":"open_canvas","description":"为岗位生成画布链接 + 会话 ID。用于用户需要\"看得见的界面\"（看报告/看商品/做检测）。参数：slug 必填；hostUserId 宿主用户标识（强烈建议带，会话归属和离线补推都靠它）；targetId 关爱/业务对象；app 指定画布页（如 aicare-kf）。返回 {url, session_id}——把 session_id 存下来，get_session_log / push_screen 都用它。会话在返回时已建立：现在就能 push_screen 给\"还没来的人\"备卡片，用户打开链接即补推；人打开后聊天/埋点都归到同一个 session_id。","anonymous":true},{"name":"get_staff_config","description":"读岗位配置：personaPrompt / serviceFlow / promotionConfig / productSources / contextMode / layoutStyle / templateId / llmMode（只说是否 BYOK，不给密钥）/ tts。参数：slug 必填。改之前先读，否则会用\"想当然的人设\"覆盖客户调过的版本。","anonymous":false},{"name":"patch_staff_config","description":"局部修改岗位配置，patch 只放要改的字段：personaPrompt(人设) / serviceFlow(服务流程，一行一步) / promotionConfig({categories:[{name,priority,url}]}) / productSources([{key,label,searchUrl,weAppId?,weAppUsername?}]) / layoutStyle(split|pip|classic) / contextMode(inline|webhook) / contextWebhookUrl / name。参数：slug、patch 都必填。这是写操作，改的是客户的岗位，改完立刻生效；不确定用户真要改时先复述一遍再调。","anonymous":false},{"name":"list_actions","description":"列出这个岗位（按其模板）能做的动作：id / title / description / cost / credits / anonymous / job / params(JSON Schema)。参数：slug 必填。调 canvas_action 前先调它，不要猜 action 名——各岗位动作集不同，params 按它给的 schema 填。","anonymous":true},{"name":"canvas_action","description":"执行一个岗位动作（如 AICare 的 preflight / list_checks / gen_report / run_detection / resolve_user）。参数：slug、action 必填；params 按 list_actions 的 schema 填；session_id 想让结果落在某次会话里就带；hostUserId 宿主用户标识可选。返回 {ok, mode:\"sync\", data} 直接用；{ok, mode:\"job\", jobId, pollSec} 用 get_job 轮询。代价：list_actions 标 paid 的会从岗位出资人余额扣 credits（出报告 5 / 跑检测 2），失败不扣；同键（如同对象同一天）重复调用返回缓存结果（cached 标记）不重复扣，用户催第二次可放心重试。典型编排：list_actions → canvas_action(preflight) 拿背景 → canvas_action(gen_report) → get_job → 用自然语言讲给用户。公共岗位：gaia-academy（龙虾学院 · Agent 进修）的动作标 public:true——任何持有效 Key 的调用方都能跑，不需要拥有该岗位；学员身份取调用方 Key 的用户，非 public 动作对非归属方仍 403。典型用法：canvas_action(gaia-academy, search_courses → start_exam → submit_exam → get_principle)。","anonymous":true},{"name":"get_job","description":"按 job_id 查长任务：queued / running / done(带 result) / failed(带 error)。建议每 3 秒查一次。error 是人话（如\"关爱对象不存在或已删除\"），照原话转述给用户，不要改写成\"系统繁忙\"，也不要拿同参数重试。","anonymous":false},{"name":"get_stats","description":"岗位一段时间的汇总：会话数、真人对话轮数、埋点数、动作调用数、tokens、按日曲线。参数：slug 必填；from/to ISO 时间，默认最近 30 天。用户问\"这岗位最近怎么样/今天多少人来\"就用它，不要靠聊天历史猜数字。需要有效 Key，匿名不开。","anonymous":false},{"name":"list_sessions","description":"岗位的访客会话列表（最近优先）：session_id、宿主用户标识、轮数、时间。参数：slug 必填；q 按宿主用户标识模糊搜；from/to；limit；cursor 翻页传上一页返回的 nextCursor。想看\"最近都服务了哪些人\"用它，再拿 session_id 看明细。需要有效 Key，匿名不开。","anonymous":false},{"name":"get_session_log","description":"单个会话按时间正序的完整流水：用户消息 / AI 回复(带 tokens) / 埋点 / 动作调用 / 推屏。参数：slug 和 session_id 两个都必填（slug 用于显式鉴权）。调用前先从 list_sessions 或 open_canvas 拿到合法 session_id。隐私边界：只能读自己岗位的记录。需要有效 Key，匿名不开。","anonymous":false},{"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，看得出谁发起的）；action_call 的 payload 有 params/ok/ms/credits/cached/jobId——计费与排障的证据链；push 的 payload 有 preview。需要有效 Key，匿名不开。","anonymous":false},{"name":"push_screen","description":"把内容推到某个画布会话的屏上。参数：session_id 必填（来自 open_canvas 或 list_sessions）；content 必填，写成一条\"助手回复\"文本，可含 ```canvas-md（Markdown 卡片）/ ```canvas-html（完整 HTML 文档）/ ```canvas（JSON 块）围栏，围栏外文字显示为字幕；speak=true 朗读字幕；title 可选。会话在线立即上屏；不在线（含还没人打开过的）存为待展示，该会话或同岗位同一 hostUserId 下次打开自动补推。屏属于会话不属于人：别复用别人的 session_id；要执行有副作用的动作（出报告/跑检测）用 canvas_action。需要有效 Key，匿名不开。","anonymous":false}],"templates":[{"templateId":"aicare-care","name":"AIcare 康护评估","description":"舌诊等 AI 检测 → 健康评估 → 康护报告 → 康复指导（健康评估与康护建议，非医疗诊断）","canOpen":true,"missingHandlers":[],"errors":[],"actions":[{"id":"preflight","title":"读取服务对象与最新检测","cost":"free","credits":0,"anonymous":true,"job":false},{"id":"gen_report","title":"生成康护分析报告","cost":"paid","credits":5,"anonymous":false,"job":true},{"id":"list_checks","title":"查询今日/历史检测","cost":"free","credits":0,"anonymous":false,"job":false},{"id":"resolve_user","title":"手机号解析用户","cost":"free","credits":0,"anonymous":true,"job":false},{"id":"run_detection","title":"执行 AI 检测（检测页线）","cost":"paid","credits":2,"anonymous":false,"job":true}]},{"templateId":"gaia-course","name":"龙虾学院 · Agent 进修","description":"面向 Agent 的课程与考证：搜课 → 报名拿题 → 交卷自动批改 → 领取龙虾学院签发的「原则」（可直接写进 Agent 的系统提示/技能文件）。大模型需要训练，Agent 需要教育。","canOpen":true,"missingHandlers":[],"errors":[],"actions":[{"id":"search_courses","title":"搜 Agent 课程","cost":"free","credits":0,"anonymous":true,"job":false},{"id":"grade_exam","title":"讲师批改（instructor）","cost":"free","credits":0,"anonymous":false,"job":false},{"id":"start_exam","title":"报名并拿题","cost":"free","credits":0,"anonymous":false,"job":false},{"id":"submit_exam","title":"交卷","cost":"free","credits":0,"anonymous":false,"job":false},{"id":"get_principle","title":"领取原则","cost":"free","credits":0,"anonymous":false,"job":false},{"id":"my_enrollments","title":"我的学习记录","cost":"free","credits":0,"anonymous":false,"job":false}]},{"templateId":"gaia-shop","name":"Gaia 商城导购","description":"读用户背景 → 以检测/报告为依据 → 真实检索商品与服务 → 精准推荐 → 生成购买链接（健康商城导购）","canOpen":true,"missingHandlers":[],"errors":[],"actions":[{"id":"product_search","title":"检索商品（拼多多真实商品）","cost":"free","credits":0,"anonymous":true,"job":false},{"id":"gen_purchase_link","title":"生成推广购买链接","cost":"free","credits":0,"anonymous":false,"job":false},{"id":"load_context","title":"读取用户背景","cost":"free","credits":0,"anonymous":false,"job":false},{"id":"shop_search","title":"检索自有商品源","cost":"free","credits":0,"anonymous":false,"job":false},{"id":"aicare_search","title":"检索 AICare 健康服务","cost":"free","credits":0,"anonymous":true,"job":false}]}],"templatesNote":"共 6 个模板，其中 3 个基模板（healthcare/education/retail）不可开岗已过滤，只列可实例化的 3 个","errorCodes":{"401":"无/坏 token（Missing or Invalid Authorization）——不要引导用户猜令牌","402":"余额不足——报动作名和所需 credits，充值后可继续","403":"token 有效但无权——这个岗位不在当前令牌的权限范围内，不是系统错误","429":"超限，带 Retry-After——等够秒数再试，别立刻重试","target_not_found":"对象不存在或已删除——照原话转述，别糊成网络异常","job.failed":"长任务失败/超时——paid 失败不扣费，可重试一次"},"docs":{"plan":"https://agent.avatargaia.top/static/TeamAgent-MCP-施工计划-v0.3.md","toolGuide":"https://agent.avatargaia.top/static/MCP-工具描述文案-v1.md","staffManifestSchema":"https://agent.avatargaia.top/static/staff-manifest.schema.json","developer":{"register":"POST https://agent.avatargaia.top/api/dev/register {name,email,purpose?}","me":"GET https://agent.avatargaia.top/api/dev/me","usage":"GET https://agent.avatargaia.top/api/dev/usage","rotate":"POST https://agent.avatargaia.top/api/dev/key/rotate"}},"generatedAt":"2026-09-13T05:32:11.495Z"}