# 外部 Native 工具提供者 [English](external-provider.md) | 中文 高级插件可通过公开 `registerNativeCapability(ctx, capability)` 加入 OPS Native 发现池, 不修改 OPS 源码,不改名为 `ops_*`。目标预设必须先通过 `dsh-ops/integration` 显式允许该名称。 ```js import { registerNativeCapability } from 'dsh-ops/integration' export async function apply(ctx) { await registerNativeCapability(ctx, { search: 'catalogue lookup acme records', disclosure: 'on-demand', authorize: exec => Boolean(exec.agent?.session?.id), definition: { name: 'acme_lookup', description: 'Look up one Acme record.', parameters: { type: 'object', properties: {} }, output: { schema: { type: 'object' }, render: (_args, value) => [{ type: 'text', text: JSON.stringify(value) }] }, execute: async () => ({ found: false }), }, }) } ``` 名称、参数、结果 schema、渲染和执行均由提供者负责。`ops_` 前缀和 `run_code` 保留;同一作用域 同名提供者拒绝注册。每次注册获得新的实例 token;卸载取消活动调用并使待激活/已选择能力失效。 重装同名工具不继承上个实例的选择与授权。父子作用域最近提供者优先,独立根与兄弟会话的选择隔离。 发现只搜索元数据,不执行动作;`available` 必须是无副作用的可用性谓词。调用时重新检查归属、 存活、可用性和强制 `authorize`。OPS 的允许列表不等于为任意第三方代码提供沙箱;提供者须负责 真正的权限与执行边界,并遵守传入取消信号。 预设的 `externalTools` 是允许列表,默认空;`externalAlwaysLoaded` 选择启动发布, `externalDisabled` 禁用指定名称。提供者可声明 `resident`,但仍须预设允许。Native 原名不会 自动变成类型化 PTC SDK。本阶段不提供第三方 PTC 注册协议。