A personal marketplace of Claude Code plugins.
Language servers, MCP servers, formatter hooks, and room for future plugin kinds such as slash commands and agents. Tool-backed plugins are wrapped in launchers that probe a runtime fallback chain (bunx / uvx and friends), so nothing has to be installed globally on the host.
Install · Plugins · Design · Layout · Contributing
- No global installs required. Each plugin launches through a runtime fallback chain — JS/TS via
bunx→pnpm dlx→npx, Python viauvx→pipx run. You only need one runtime from each chain onPATH. - On-demand resolution. Packages resolve from the registry at launch time, so there are no pinned global binaries to keep up to date.
- Broad plugin coverage. Current plugins span language servers, MCP servers, and
PostToolUseformatter hooks; the marketplace is structured to add future Claude Code plugin kinds such as slash commands and agents. - Metadata-only folders. One folder per plugin — no vendored binaries, no submodules.
- Personal scope. These are the tools I reach for; expect the roster to drift as my own workflow changes.
Grouped by current plugin kind. The roster is 26 plugins across language servers, MCP servers, and formatter hooks; future categories can be added when they become useful. All plugins live under plugins/ and are registered in .claude-plugin/marketplace.json.
| Plugin | Language | Runtime chain | Notes |
|---|---|---|---|
typescript-lsp |
TypeScript, JavaScript | JS/TS | typescript-language-server, pulls the typescript peer dep fresh |
pyright-lsp |
Python | JS/TS | Microsoft Pyright (npm-distributed) |
basedpyright-lsp |
Python | Python | Stricter community fork of Pyright |
ty-lsp |
Python (beta) | Python | Astral's Rust-based type checker; pre-1.0, expect churn |
biome-lsp |
JS, TS, JSON | JS/TS | Biome language server (lint + format diagnostics) |
bash-lsp |
Bash, shell | JS/TS | bash-language-server; integrates with shellcheck when on PATH |
yaml-lsp |
YAML | JS/TS | Red Hat yaml-language-server |
tombi-lsp |
TOML | Python | tombi LSP (chose over Taplo — Taplo's npm pkg lacks the LSP subcommand) |
vscode-html-lsp |
HTML | JS/TS | vscode-langservers-extracted (HTML binary) |
vscode-css-lsp |
CSS, SCSS, LESS | JS/TS | vscode-langservers-extracted (CSS binary) |
vscode-json-lsp |
JSON, JSONC | JS/TS | vscode-langservers-extracted (JSON binary) |
| Plugin | Purpose | Transport |
|---|---|---|
apple-events |
Native macOS Reminders and Calendar via EventKit (FradSer/mcp-server-apple-events) | Local stdio |
browseros |
Drive the local BrowserOS agentic browser (53 browser tools + 40+ app integrations) | Local HTTP |
context7 |
Up-to-date library documentation lookup (Upstash Context7) | Remote HTTP |
deepwiki |
AI-grounded Q&A over any public GitHub repo's wiki (Devin DeepWiki) | Remote HTTP |
Auto-format on PostToolUse of Write / Edit / MultiEdit. Subset variants exist so you can pick only the languages you want formatted.
| Plugin | Files formatted | Runtime chain |
|---|---|---|
ruff-formatter |
.py |
Python |
biome-formatter |
.js, .jsx, .ts, .tsx, .json, .jsonc |
JS/TS |
biome-js-formatter |
.js, .jsx, .ts, .tsx |
JS/TS |
biome-json-formatter |
.json, .jsonc |
JS/TS |
prettier-formatter |
All prettier-supported extensions | JS/TS |
prettier-js-formatter |
.js, .jsx, .ts, .tsx |
JS/TS |
prettier-json-formatter |
.json |
JS/TS |
prettier-css-formatter |
.css, .scss, .less |
JS/TS |
prettier-html-formatter |
.html, .htm |
JS/TS |
prettier-markdown-formatter |
.md, .mdx |
JS/TS |
prettier-yaml-formatter |
.yaml, .yml |
JS/TS |
Additional plugin kinds (slash commands, agents, specialized hooks) may be added as I start using them.
Inside Claude Code:
/plugin marketplace add yousiki/claude-plugins
/plugin install <plugin-name>@yousiki-claude-plugins
For example, to grab the TypeScript language server and the Ruff formatter hook:
/plugin install typescript-lsp@yousiki-claude-plugins
/plugin install ruff-formatter@yousiki-claude-plugins
Each plugin's folder lists the runtime candidates it probes — at least one of them has to be on your PATH. Recommended baseline: bun for the JS/TS chain and uv for the Python chain.
Three rules shared by plugin categories in this marketplace:
- No global installs. The launcher script probes a runtime chain and runs the tool on demand. Missing one runtime is fine; missing all of them fails loudly with a clear error.
- Fallback by distribution ecosystem, not by language ecosystem. Pyright is a Python tool but ships on npm — so it routes through the JS/TS chain. Basedpyright ships on PyPI — so it uses the Python chain.
- Metadata-only plugin folders.
plugin.jsonwires the launcher path; the launcher resolves the binary. Nothing is vendored, nothing is pinned beyond the tool's own versioning.
Formatter hooks additionally follow a graceful-miss contract: if no runtime on the fallback chain is present, the hook exits 0 silently rather than blocking the write. This is intentional — a missing formatter shouldn't break the edit flow.
.
├── .claude-plugin/
│ └── marketplace.json # authoritative plugin registry
├── plugins/
│ └── <name>/
│ ├── .claude-plugin/
│ │ └── plugin.json # plugin metadata
│ ├── scripts/
│ │ └── launch-<name>.sh # runtime fallback wrapper
│ └── README.md
├── templates/ # copy-paste scaffolds (not executable)
│ ├── js-ts-tool-plugin/
│ ├── python-tool-plugin/
│ └── formatter-hook-plugin/
├── LICENSE
└── README.md
This marketplace is primarily for my own use, and I don't promise any particular support level — but the scaffolding is deliberately general, so feel free to fork and adapt, or open an issue / PR if you spot something broken.
To add a new plugin:
- Pick the runtime chain based on how the tool is distributed, not what it analyzes. Rule of thumb: if it ships on npm (like Pyright), use the JS/TS chain; if it ships on PyPI (like Basedpyright), use the Python chain.
- Copy the matching template from
templates/intoplugins/<name>/and replace every<placeholder>with the concrete value. Formatter hooks start fromtemplates/formatter-hook-plugin/. - Register the plugin by appending an entry to
.claude-plugin/marketplace.json. - Sanity-check the launcher by invoking it directly — and, if you want to confirm the fallback works, try unsetting each runtime in turn (
PATHmanipulation works) and check the launcher still resolves with any single one present.