每个插件都有一份清单,位于 .ohmygame-plugin/plugin.json。把 $schema 指向 https://ohmygame.dev/schema/plugin-2.json,编辑器里就有自动补全和校验。
必填字段
| 字段 | 说明 |
|---|---|
id |
publisher/name。publisher 就是你的 npm scope,不带 @。 |
version |
插件版本,和 package.json 保持一致。 |
engines |
{ "ohmygame-api": "^2.3.0" }:插件适用的插件 API 版本。 |
displayName |
软件里显示的名字。 |
description |
一句话说明它做什么。 |
ohmygame-api 可以写确切版本,也可以写 ^x.y.z、~x.y.z 或 >=x.y.z。插件 API 每新增一项能力,次版本号就加一,所以用到新字段的插件需要申请对应的版本。软件版本太旧时会提示,桌面版还会提供更新。
可选字段
| 字段 | 说明 |
|---|---|
icon |
包内一个 SVG 或 PNG 文件的路径。 |
categories |
可选 engine、art、audio、publishing、provider、theme、workflow、integration。 |
longDescription |
显示在插件详情页的介绍。 |
examples |
最多五条 试一试 提示词。 |
beta |
把插件标记为 Beta。 |
links |
homepage 和 sponsor 链接。 |
projectFiles |
插件会留在项目里的文件或文件夹,最多 20 个,例如 ./.maker/。卸载时会列出来,但不会删除。 |
entrypoints.native |
插件原生代码所在的文件。 |
capabilities |
插件申请的权限,见下文。 |
configuration |
显示在插件详情页的设置项。 |
ui |
major 是插件面板使用的页面组件主版本;preview 允许使用仍在预览中的组件。 |
contributes |
插件添加的功能,见下文。 |
权限
| 字段 | 申请 |
|---|---|
native |
运行 entrypoints.native |
project.files |
插件面板对项目文件的 "read"(读)或 "write"(写)权限 |
project.selection |
查看选中的内容 |
composer |
往输入框里填内容 |
secrets |
读取机密设置 |
network |
插件的 HTTP MCP 服务可以访问的地址列表 |
processes |
插件的本地 MCP 服务可以启动的命令列表 |
game |
像智能体试玩那样打开并操作项目里的游戏 |
插件能添加什么
所有功能都写在 contributes 里:
| 字段 | 添加 |
|---|---|
skills |
一个技能文件夹,每个技能是一个带 SKILL.md 的子文件夹 |
tools |
给智能体用的工具,由原生代码注册。每个工具有 name、description 和 input 参数结构 |
commands |
软件里的命令,包含 id、title、run,以及显示位置 slots |
panels |
对话旁边的面板,包含 id、title、area 和一个 HTML 入口 entry |
mcpServers |
本地或 HTTP 的 MCP 服务,包含 id、title、command 和它提供的 tools |
projectTypes |
新的项目类型,包含模板文件夹 template 和预览方式 preview(web、web-build 或 native) |
themes |
设置 → 外观 里的配色主题 |
providers |
设置 → 服务商 里的对话模型服务商 |
agents |
编程智能体 |
hooks |
响应事件的代码,例如一轮对话结束时 |
canvasNodes、canvasPresets |
画布上新的节点和预设 |
previewDevices、previewFilters、inputMaps |
游戏预览的扩展 |
命令
命令的 run 可以是下面任意一种:
run |
作用 |
|---|---|
{ "prompt": "…" } |
发送一条提示词;加上 "insert": true 则只填进输入框 |
{ "tool": "…" } |
调用一个工具 |
{ "openPanel": "…" } |
打开插件的某个面板 |
{ "openSettings": true } |
打开插件详情页 |
{ "url": "…" } |
打开一个链接 |
{ "native": "…" } |
运行原生代码注册的命令 |
slots 决定命令出现在哪里,包括 project.menu、project.toolbar、project.publish、composer.add、composer.slash、home.starters、canvas.add、canvas.node 和 game.more。
原生代码
原生入口导出一个 activate(context)。它在每个项目单独的 Node 进程里运行,不在软件本身里运行,并且只能注册清单里声明过的工具和命令:
export function activate(context) {
context.registerTool("hello", async (input, options) => {
options.progress("Saying hello…");
return { text: `Hello, ${input.name ?? "there"}` };
});
}context.project.folder 是当前项目,context.dataFolder 是插件自己的数据文件夹。
本地 MCP 服务
"capabilities": { "processes": ["node"] },
"contributes": {
"mcpServers": [
{ "id": "server", "title": "%mcp.title%", "command": "node", "args": ["./mcp/server.mjs"], "tools": ["echo"] }
]
}用到的命令必须同时写进 capabilities.processes,这样在它运行之前你会先确认一次。