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
- Very specific: line 29
Rule: Prefer MCP plugin. Never schedule PluginWorker.install via MCP task.
- Very specific: line 63
Follow e9-mcp Step 0. If user already succeeded this session, skip.
- Very specific: line 67
Call plugin listAvailable with any account_id the user can access (session id, parent, or a child).
- Very specific: line 87
Do not call account plugins (or any other per-child DB probe) before install.
- Very specific: line 101
Run in parallel batches of about 10.
- Distinctive: line 123
After e9-cli login:
- Distinctive: line 138
Rule: Do not load create-engine9-plugin for an install request.
- Very specific: line 140
Rule: Do not call account plugins once per child to decide whether to install.
≈ “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.
Files
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
| Need | Call |
| Sign in | mcp_auth {}, then ok / user — e9-mcp |
| Catalog of installable paths (this server) | plugin { "command": "listAvailable", "account_id": "<any accessible id>" } |
| Install on one account | plugin { "command": "install", "account_id": "<account_id>", "path": "<package>" } |
| Find children of a parent | account { "command": "search", "parents": ["<parent_account_id>"], "limit": 500 } |
| Verify a path is installed | account { "command": "search", "parents": ["<parent_account_id>"], "plugins": ["<path substring>"], "limit": 500, "max_scan": 500 } |
| Settings catalog / update | plugin settings / setSetting |
| Author / version a package | create-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 form | Example |
| Full path (preferred) | @engine9/plugins/models/deployment/v2026_09_16, acme-plugins/loyalty |
| Shorthand from catalog | models/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 said | Accounts |
| One id | That account_id only |
"all clients of <parent>" / children | account search parents: ["<parent_account_id>"] (direct children). Do not install on the parent unless named |
| Nested descendants | Same plus "recursive": true |
| Prefix / tags / type | account 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:
| Command | MCP |
/e9 plugin listAvailable | plugin 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
| Symptom | Action |
Path not in listAvailable | Report the catalog; stop. The MCP host must ship the package |
Cannot install … unmet plugin dependencies | Install listed dependency paths first on that account, then retry |
Cannot install … excluded by | An installed stack forbids the path; do not force |
Cannot connect to the <account_id> database | Skip that account; continue the fleet |
Not authorized for account | Skip that id; do not look it up on disk |
getPluginMetadata is not a function | Abort the job (server plugin metadata is broken) |
Search count below child count | Reinstall 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
In this repository24 other files it gives its agents.
- .cursor/rules/no-client-names.mdcCursor rule
- .cursor/rules/skill-writing-standard.mdcCursor rule
- create-engine9-pluginSkill
- e9-api-keySkill
- e9-cliSkill
- e9-custom-fieldsSkill
- e9-delegate-domainSkill
- e9-dev-tasksSkill
- e9-eqlSkill
- e9-exportSkill
- e9-funnelSkill
- e9-global-messageSkill
- e9-inputSkill
- e9-inventorySkill
- e9-mcpSkill
- e9-modelSkill
- e9-person-idSkill
- e9-person-remoteSkill
- e9-pii-freeSkill
- e9-reportsSkill
- e9-source-codeSkill
- e9-tasks-apiSkill
- e9-timelineSkill
- e9-upgradeSkill
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
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.

