agentleFS
engine9-aiengine9-ai/skills/e9-plugin/SKILL.md

e9-plugin

Skill1 starsChanged 48 days agoApache-2.0View on GitHub

Install, list, and configure engine9 account plugins via native MCP `plugin` (listAvailable, install, settings, setSetting). Fast path for deploying a package onto one account or every child of a parent. Use when the user says install a plugin, deploy a package, listAvailable, plugin settings, setSetting, or asks to install `@engine9/plugins`, `@engine9/schemas`, or a models deployment path on accounts. Do not use create-engine9-plugin (authoring) or MCP `task` for install.

We split this skill into the rules it gives an agent

8 rules. About 0 are common, 2 are distinctive, and 6 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 6

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Rule: Prefer MCP plugin. Never schedule PluginWorker.install via MCP task.

    line 29
  2. Very specific:

    Follow e9-mcp Step 0. If user already succeeded this session, skip.

    line 63
  3. Very specific:

    Call plugin listAvailable with any account_id the user can access (session id, parent, or a child).

    line 67
  4. Very specific:

    Do not call account plugins (or any other per-child DB probe) before install.

    line 87
  5. Very specific:

    Run in parallel batches of about 10.

    line 101
  6. Distinctive:

    After e9-cli login:

    line 123
  7. Distinctive:

    Rule: Do not load create-engine9-plugin for an install request.

    line 138
  8. Very specific:

    Rule: Do not call account plugins once per child to decide whether to install.

    line 140

≈ “Common” is an estimate: at least 1 in 5 of the 308,232 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

engine9 plugin install

Plugins are first-class on a connected engine9 MCP server. Installing a package onto accounts is a native plugin tool call, not a worker task and not local PluginWorker / e9 pluginworker. Use this skill for deploy, listAvailable, settings catalog, and setSetting. Use create-engine9-plugin when authoring or versioning a package (including third-party packages such as acme-plugins).

Quick reference

NeedCall
Sign inmcp_auth {}, then ok / user — e9-mcp
Catalog of installable paths (this server)plugin { "command": "listAvailable", "account_id": "<any accessible id>" }
Install on one accountplugin { "command": "install", "account_id": "<account_id>", "path": "<package>" }
Find children of a parentaccount { "command": "search", "parents": ["<parent_account_id>"], "limit": 500 }
Verify a path is installedaccount { "command": "search", "parents": ["<parent_account_id>"], "plugins": ["<path substring>"], "limit": 500, "max_scan": 500 }
Settings catalog / updateplugin settings / setSetting
Author / version a packagecreate-engine9-plugin (not this skill)

Rule: Prefer MCP plugin. Never schedule PluginWorker.install via MCP task. Never invent paths from local plugins/ or schemas/.

Rule: listAvailable is the installable catalog for the connected server. If the path is absent, stop and report it — do not read workspace packages as a workaround. For third-party paths (e.g. acme-plugins/loyalty), the host must already npm install that package and list it in engine9.pluginPackages, then redeploy; otherwise it will never appear in the catalog.

Concepts

plugin install writes a plugin row (and schema / settings) into that account's warehouse. There is no bulk-install RPC: one MCP call per account_id. Account search stays one call.

The version of code that runs is the host’s npm package pin (e.g. acme-plugins@1.4.0), not a per-account plugin version. Install does not choose a version; it applies whatever the host has loaded. Dependency failures name the host package version. See create-engine9-plugin — Creating and versioning (Acme).

Path formExample
Full path (preferred)@engine9/plugins/models/deployment/v2026_09_16, acme-plugins/loyalty
Shorthand from catalogmodels/deployment/v2026_09_16, e9email, loyalty (only if unambiguous in listAvailable)
User omits @engine9/plugins/... → match listAvailable (@engine9/plugins/...)

Unique packages (metadata.unique, typical @engine9/plugins/* and most @engine9/schemas/*) reuse the existing row. Reinstall is idempotent for that path. Third-party packages often default to non-unique unless they set metadata.unique: true.

Declared settings are inserted on first install only. Changing a value later is setSetting, not reinstall. Marketplace auth_fields are not settings.

Workflow

Copy this checklist:

- [ ] mcp_auth → user
- [ ] listAvailable once; resolve path
- [ ] Resolve account ids (one id, or account search)
- [ ] plugin install per account_id (parallel batches)
- [ ] Verify with one account search (plugins filter)

1. Log in

Follow e9-mcp Step 0. If user already succeeded this session, skip.

2. Resolve the package path

Call plugin listAvailable with any account_id the user can access (session id, parent, or a child). Catalog is server-wide.

{ "command": "listAvailable", "account_id": "<account_id>" }

Match the user's string to a returned path (exact, or add @ / treat as suffix). If nothing matches, stop.

3. Resolve target accounts

User saidAccounts
One idThat account_id only
"all clients of <parent>" / childrenaccount search parents: ["<parent_account_id>"] (direct children). Do not install on the parent unless named
Nested descendantsSame plus "recursive": true
Prefix / tags / typeaccount search with those filters
Session parent/all (engine9.account_ids)Every id in that list

Rule: Discover ids only via MCP user / account search. If count is 0, stop. Do not resolve the account by any other mechanism: no second search, no accounts.d, account-config.json, frakture-account-config.json, or e9 CLI.

Do not call account plugins (or any other per-child DB probe) before install. Install does not need the method catalog.

4. Install

For each target account_id:

{
  "command": "install",
  "account_id": "<account_id>",
  "path": "@engine9/plugins/models/deployment/v2026_09_16"
}

Run in parallel batches of about 10. Success looks like { ok: true, command: "install", result: { id, path, name, deployedVersion, tablePrefix, included } }.

Rule: Fleet install is the exception to the global MCP "stop on first isError" rule. A per-account Cannot connect / Not authorized / unmet dependencies is a skip for that id. Continue the remaining accounts. Session-level auth failure and getPluginMetadata is not a function still stop the whole job. Report a success/fail table at the end.

5. Verify

One account search — do not fan out command: plugins:

{
  "command": "search",
  "parents": ["<parent_account_id>"],
  "plugins": ["models/deployment/v2026_09_16"],
  "limit": 500,
  "max_scan": 500
}

count should equal the child list. matched_plugins should include the installed path. Retry only the missing ids.

/e9 plugin commands

After e9-cli login:

CommandMCP
/e9 plugin listAvailableplugin listAvailable (account_id from session)
/e9 plugin install <path>Resolve path, then install on engine9.account_ids if set (parent/all), else engine9.account_id
/e9 plugin settings [path]plugin settings
/e9 plugin setSetting <plugin_id> <name> <value>plugin setSetting

Natural language ("install <path> on all <parent> clients") is the same workflow without requiring /e9a first: search, then install.

Rules

Rule: Native MCP plugin only. Do not use task, local PluginWorker, or e9 pluginworker when the connected server exposes plugin.

Rule: Do not load create-engine9-plugin for an install request.

Rule: Do not call account plugins once per child to decide whether to install. Unique-path reinstall is safe; verify afterward with one search.

Rule: listAvailable missing the path means it is not installable on this server. Local checkout of the package is not sufficient.

Troubleshooting

SymptomAction
Path not in listAvailableReport the catalog; stop. The MCP host must ship the package
Cannot install … unmet plugin dependenciesInstall listed dependency paths first on that account, then retry
Cannot install … excluded byAn installed stack forbids the path; do not force
Cannot connect to the <account_id> databaseSkip that account; continue the fleet
Not authorized for accountSkip that id; do not look it up on disk
getPluginMetadata is not a functionAbort the job (server plugin metadata is broken)
Search count below child countReinstall only the missing ids; check warnings on the search

Related documentation

  • MCP tools
  • PII-free accounts (exclude_pii)
  • CLI / account scope
  • Author a plugin or schema plugin
  • Plugin settings authoring
  • Add custom fields to a pull

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.