Add skill-bridge plugin (antianqi/skill-bridge) v0.2.0 - #2
Open
antianqi wants to merge 1 commit into
Open
Conversation
A stdio MCP server plugin that converts openclaw (or similar) skills
into mavis/mcode-compatible Skills. The plugin is self-contained:
no npm install, no node_modules, no native binaries, no symlinks,
no hidden telemetry. It declares one stdio MCP server via mcp.json
(node ./server.mjs) and exposes four tools:
detect (source) -> encoding + mojibake status
analyze (source) -> full frontmatter / paths / commands
classify (source) -> pure | pure-wrapped-fix | wrapped-* | abandon
convert (source, target_dir,
force?, run_lint?) -> writes converted skill to target_dir
What changed from v0.1 of this plugin (PR MiniMax-AI#3 on the old
hetaoBackend/MiniMax-Code-Plugins repo, which was lost in the
transfer to MiniMax-AI/MiniMax-Code-Plugins):
- Drop package.json, package-lock.json, and the CLI entry point.
The plugin no longer relies on npm install or a global bin.
- Add mcp.json + server.mjs, a JSON-RPC-over-stdio MCP server
declared as a portable Agent Plugin.
- Drop the iconv-lite and js-yaml dependencies. The encoding
detector uses Node 22+'s built-in TextDecoder('gb18030'),
and the YAML frontmatter is parsed / serialized by a small
hand-rolled subset parser in lib/analyze.js.
- Rewrite skills/skill-bridge/SKILL.md to teach the agent to
call the MCP tools instead of spawning a CLI.
- Atomic-replace: lib/transform-skill.js uses a backup-and-rename
dance so a pre-existing target_dir is preserved if the
conversion fails (covered by tests/transform-atomic.test.mjs).
- Lint failure: lib/lint.js returns ok=false, code!=0 on a
failing lint. The MCP convert tool surfaces that to the caller.
- Pruned demos: investor-brand-kit (end-user business data) and
self-improving-agent (third-party copy without a declared
license) are removed. The only demo shipped is task-tracker,
the author's own content.
Test count: 50 (was 33 in v0.1). All pass. The npm run check
failures that remain in the repo (CRLF line endings in
examples/hello-mcode/SKILL.md; Windows path.separator in
hosted-plugins.test.mjs) are pre-existing and unrelated to this
plugin.
Author
|
This was referenced Aug 17, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
A stdio MCP server plugin that converts
openclaw(or similar) skills into portablemavis/mcode-compatible Skills.Why this PR is being opened on
MiniMax-AI/MiniMax-Code-PluginsA v0.1 of this plugin was opened as PR #3 against the now-superseded
hetaoBackend/MiniMax-Code-Pluginsrepository, which has since been transferred toMiniMax-AI/MiniMax-Code-Plugins. The old PR was lost in the transfer (verified:GET /MiniMax-AI/.../pulls/3returns 404;list pulls?state=allshows only #1).This PR reopens the same plugin against the new official repo. The single commit (
64ede9f) is a clean replacement of the old three-commit series (3c41ee0+3dfa159+1a22b12) onhetaoBackend/main#64bc5dd, in the same direction hetaoBackend had asked for in their round-2 review.What changed from v0.1 (the round-2 blockers)
package.json/package-lock.json/index.jsand the CLI surface. Addedmcp.json+server.mjs, a single stdio MCP server (node ./server.mjs) declared per the portable Agent Plugins 1.0 contract. The plugin needs nonpm installand no global bin to work.TextDecoder('gb18030'); the YAML frontmatter is parsed/serialized by a hand-rolled subset parser inlib/analyze.js.npm run validateandnpm testpass without any package install.lib/transform-skill.jsuses a backup-and-rename dance: a pre-existingoutDiris moved to<outDir>.bak-<pid>-<rand>, the staging dir is renamed ontooutDir, the backup is then removed. If anything fails, the backup is moved back, sooutDiris preserved. Regression test:tests/transform-atomic.test.mjs.lib/lint.jsreturns{ ok: false, code: 2, stdout, stderr }faithfully; the MCPconverttool surfaces that in its response. Callers seelint.ok === falseand act accordingly. Regression test:tests/lint.test.mjs(the fast-path failure case)..gitignore) has been reverted; the plugin-local ignores now live underplugins/antianqi/skill-bridge/.gitignore.Schema
plugin.jsontargetshttps://agent-plugins.org/schemas/1.0.0/plugin.schema.json.mcp.jsondeclares one stdio server.server.mjsexposes four tools:detect(source){ encoding, originalEncoding, replaced, confidence, reason }analyze(source)classify(source){ tier, subTier, reason }inpure/pure-wrapped-fix/wrapped-*/abandonconvert(source, target_dir, force?, run_lint?){ ok, tier, subTier, written, warnings, lint }Tests
node --test plugins/antianqi/skill-bridge/tests/*.test.mjs→ 50/50 pass.npm run validate→OK plugin antianqi/skill-bridge.npm run checkshows two pre-existing failures unrelated to this plugin (CRLF line endings inexamples/hello-mcode/SKILL.md; Windowspath.separatorintest/hosted-plugins.test.mjs). Happy to open a follow-up PR to address either if you want them.Demo
The only demo is
examples/output/task-tracker/, the result of runningconvertonexamples/input/task-tracker/.examples/regen.mjsregenerates it locally.The two upstream-
openclawdemos from v0.1 (investor-brand-kit,self-improving-agent) are removed: the first contained end-user business data; the second was a copy of a third-party repo whose license is not declared in that repo.Data and network
target_dirand to a uniqueos.tmpdir()/sb-lint-<pid>-<rand>/directory that is removed after the lint step completes.Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is disabled.