本页以 MiniMax Code v3.1.6 为基准,描述宿主传给 Node 入口的公开接口。运行时无需安装 SDK;入口必须导出命名函数 四个方法的参数和返回值相同,区别仅在日志级别。这里用
miniapp-api.ts 只是 Skill 提供的类型快照。完整示例见 Node 运行时,Agent 方法见 Agent API 参考。start 与 dispose
start。类型快照推荐 async start(context): Promise<void | MiniAppLifecycle>;运行时也接受同步返回 undefined 或包含 dispose 函数的对象。返回其他值会使启动失败。- 参数:
context由宿主创建,不能由插件构造或替换宿主客户端。 - 就绪:先在
context.listen上用node:http监听并安装路由,再完成start。宿主还会检查端口鉴权;仅完成start不代表整个服务已就绪。 - 返回:没有资源要清理时允许不返回值;有监听、子进程、定时器、订阅等资源时,应返回
{ dispose }。不要在start里发起 Agent 或工具业务调用,把它们放在激活后的请求处理里。 - 停止:宿主先中止
context.signal,再等待dispose()。同一次停止不会重复执行此清理函数;清理失败或进程不退出时,宿主仍会按回收流程处理。
Error.message 错误码,见运行时错误及运行与更新。MiniAppContext
以下字段由宿主提供,不要修改。hostConnector、tool、agent 的注入取决于 manifest。用户关闭相应权限后,对象仍存在,但新调用会被拒绝或受到下文所述限制;对象存在不表示调用已获准。声明方式见 miniapp.json 字段。context.signal 与单次调用的 options.signal 不是同一个参数:前者表示运行生命周期,后者由调用方传入,用于取消特定请求。需要时可将生命周期信号传给请求选项。请求预算
每个 Node 进程最多有 16 个普通在途请求,Connector 的list / call、工具的 list / call / request,以及 Agent 的 run / answer / models / agents / create / sessions / session 共用这些名额。达到预算时,新请求会在派发前被拒绝。Agent reply 另有 16 个名额,observe 另有 4 个名额,因此普通请求占满时仍可回答审批。这些进程通信预算与 agentConcurrency 的回合名额分别计算,详见 Agent 并发与取消限制。Node 发给宿主的每个请求,包括请求 ID、方法名和参数,序列化为 UTF-8 JSON 后不能超过 256 KiB。Connector 或工具调用超过此限制时,会在本地以 INVALID_ARGUMENTS 拒绝,disposition: 'not_dispatched'、retryable: false,且可能没有 diagnostic。缩小参数、分页或拆分后再重试。此请求大小限制与 8 MiB 的响应帧上限分别计算。JSON 类型
Connector 和工具的参数、schema、结果使用以下 JSON 类型;不能传函数、undefined 或循环引用。logger
message 应是稳定的事件名称或不含业务内容的诊断文字;fields 可省略。v3.1.6 会将 message 截到前 4096 个 UTF-16 码元,只向宿主传递 fields 的键名,不保留字段值。这些日志只作有限的诊断记录,不能保证完整保留,也不能作为完整的结构化业务日志存储。不要写入凭据、原始输入或用户数据。hostConnector
此接口仅供 Node 使用,通过用户已授权的第三方账号访问服务。声明示例:miniapp/miniapp.json
list(options?)
list() 在激活前后都可用,不执行业务工具。引用绑定当前运行和账号;重新列举会替换本进程的 Connector 清单。不要自行构造、持久化或把 toolRef 传给页面;启动后、引用失效或账号变化后重新列举。call(toolRef, arguments_, options?)
只在服务激活后的请求处理里调用,不能在
start 中调用。成功时 Promise 正常返回;provider 报告错误时,以 CONNECTOR_PROVIDER_ERROR 拒绝请求。请求默认限时 30 秒。取消、超时或连接丢失后,应按错误中的 disposition 判断是否可能已执行。关闭某个 provider 权限后,它不出现在新清单中,调用其引用返回 CONNECTOR_NOT_PERMITTED。退出登录会撤销工具清单和引用;同一账号重新登录后重新 list(),换账号后旧引用不可继续使用。解析 value 前先验证真实返回结构,不要把任意 content、text、value 字段当成宿主包装。完整处理示例见接入数据,错误码见 Host Connector 错误。tool
声明toolAccess: ["call"] 后,Node 可以调用宿主已挂载的插件 MCP、用户 MCP、宿主内置 MCP 和用户连接的 Connector。Agent 内置的文件、Shell、浏览器工具不通过此接口提供。list(options?)
options.signal可取消此次列举;list()在激活前也可用。name是运行时调用名;tool是 provider 或 MCP 服务器里的工具名。用kind、server/provider、tool匹配,从清单读取name,不要拼接它。permission是列举时的权限快照。每次call都会重新判定,不能凭先前的allow跳过权限检查。partial: true表示清单不完整,可能有来源不可用或工具因元数据问题被省略;已列出的工具仍按当前权限调用。所有来源均失败时,列举可能拒绝。- 用户关闭
tool:call时仍可列举,但每项permission都为deny。
call(name, arguments_, options?)
只在激活后的请求处理里调用。不要通过此接口绕回本 Mini App 自己的托管 MCP 端点,直接复用本地业务函数。每次调用按用户的全局工具规则和全局权限模式判定,不继承某个 Agent 或会话的规则。
deny 拒绝,ask 由宿主显示允许一次/始终允许/拒绝的确认框;只有用户在宿主选择始终允许才写全局规则。宿主内置工具沿用宿主原有放行行为。Agent 的工具 Hook 不在这条调用链运行。无人可以确认时返回 TOOL_APPROVAL_REQUIRED;审批最多等待 5 分钟。审批结束后的 Connector 调用默认最多 30 秒,MCP 调用最多 120 秒,也可能先达到 MCP 服务器自身的时限。返回结果必须放进一个 8 MiB 帧;超过限制会以 TOOL_RESULT_TOO_LARGE 拒绝,即使工具已经执行。关闭工具权限后,新的 call 被拒绝;已发出的调用可以继续完成。宿主不自动重试已派发的业务操作;Connector 引用在派发前失效时,会重新列举并尝试一次。对于超时、取消和未知结果,先检查下文的 disposition,不要仅根据错误名决定是否重复写操作。request(names, options?)
names 必须是 1–10 个不同的运行时名称,从 list() 取得;options.signal 可取消请求。此方法提前询问需要用户确认的工具,不调用工具本身。- 宿主只询问仍为
ask的工具,已经是allow或deny的工具不会再次询问。用户勾选后可将对应工具设为全局始终允许。 - resolve 的对象包含每个请求名称当前的
allow、ask或deny;它只是用于界面显示的权限快照,后续调用仍重新判定。 - 无人可以确认时,Node 以
TOOL_APPROVAL_REQUIRED拒绝请求,错误另带permissions属性,保存未变更的权限映射。 tool:call关闭时不弹框,直接返回所有名称为deny。请求名不合法时仍会失败。- 页面也可请求授权,但没有列出和调用工具的方法,见页面工具授权。Node 不受页面用户手势要求限制;宿主仍需能联系到用户,才能显示确认框。
context.tool 与 context.hostConnector 共用本进程的 Connector 清单。通过 hostConnector 重新列举可能使统一工具入口的旧 Connector 引用失效,tool 会重新列举一次;直接保存的 hostConnector 引用不会自动刷新。Node 工具错误对象
Host Connector 和统一工具入口以以下错误对象拒绝请求,不要跨进程依赖instanceof:string 展示 code 的读取方式;已知码值分别列在 Connector 错误和工具错误中。如果存在,diagnostic.issues 会描述 schema 校验问题,不包含被拒绝的参数值;本地输入或请求大小校验也可能返回 INVALID_ARGUMENTS,且不带这个字段。request() 的 TOOL_APPROVAL_REQUIRED 还可携带 permissions 映射。agent
context.agent 的运行、审批、问卷、模型、会话读取和观察接口见 Agent API 参考。Node 用 options.signal 取消;页面的 cancel、open 不属于 Node 接口。capabilities
has 是同步探测。宿主能力表按版本固定,Node 和页面共用;返回 true 不表示 manifest 已声明、用户已授权,或该接口在 Node 端存在。旧宿主可能没有该对象。合法名称、适用端和声明条件见能力表。