Optional local-mode extension for
@omni-skills/server-mcpthat adds filesystem-aware tools for client detection, skill management, and MCP config generation around the Awesome Omni Skills catalog.
| Feature | State |
|---|---|
| ✅ Read-only catalog tools | Implemented |
| ✅ Filesystem-aware local tools | Implemented |
| ✅ 3 transports (stdio/stream/sse) | Implemented |
| ✅ Allowlisted writes | Implemented |
| ✅ Preview-before-write defaults | Implemented |
| ✅ Client-aware MCP config writing | Implemented |
| ✅ HTTP auth + rate limiting | Implemented |
| ✅ Release-time signatures and checksums | Implemented for generated archives and surfaced by API/MCP |
| 🟡 Local write-time signature enforcement | Not enforced yet; local mode previews and writes from the trusted local checkout |
| 🟢 Current client coverage | 9 install-capable clients, 16 config-capable clients, 33 config targets, 20 config profiles |
Local mode adds filesystem-aware tools on top of the existing read-only MCP catalog surface. Use it when an agent needs to:
- 🕵️ Detect compatible local AI clients
- 📋 Inspect installed skills
- 👁️ Preview skill installation or removal (dry-run)
- 📦 Apply local skill installation or removal
- ⚙️ Write a local MCP config file after preview
It deliberately separates two concerns:
- skill installation targets
clients with a stable skills directory that can use
install_skills - MCP config targets clients or IDEs with a stable documented MCP config format, even if they do not have a skills directory
| Transport | Protocol | Use Case |
|---|---|---|
stdio |
Pipe | Direct client integration |
stream |
Streamable HTTP | Modern HTTP clients |
sse |
Server-Sent Events | Legacy clients |
npm run mcp:local
npm run mcp:stream:local
npm run mcp:sse:localnpm run cli -- mcp stdio --local
npm run cli -- mcp stream --local
npm run cli -- mcp sse --local
npm run cli -- config-mcp --list-targets
npm run cli -- config-mcp --target continue-workspace --transport stream --url http://127.0.0.1:3334/mcp
npm run cli -- config-mcp --target junie-project --transport stream --url http://127.0.0.1:3334/mcp
npm run cli -- config-mcp --target goose-user --transport stream --url http://127.0.0.1:3334/mcpnpx awesome-omni-skills mcp stdio --local
npx awesome-omni-skills mcp stream --local
npx awesome-omni-skills mcp sse --local
npx awesome-omni-skills config-mcp --list-targets
npx awesome-omni-skills config-mcp --target junie-project --transport stream --url http://127.0.0.1:3334/mcp
npx awesome-omni-skills config-mcp --target windsurf-user --transport sse --url http://127.0.0.1:3335/sse --write
npx awesome-omni-skills config-mcp --target goose-user --transport stream --url http://127.0.0.1:3334/mcp --writeAll commands set
OMNI_SKILLS_MCP_MODE=localautomatically.
When local mode is enabled, these extra tools become available:
| Tool | Description | Default |
|---|---|---|
🕵️ detect_clients |
Scan for AI clients and their skill/config paths | — |
📋 list_installed_skills |
Inspect installed skills for a specific client | — |
📦 install_skills |
Install skills into a client's skills directory | 🔍 dry-run |
🗑️ remove_skills |
Remove installed skills from a client | 🔍 dry-run |
⚙️ configure_client_mcp |
Write MCP config for a specific client | 🔍 dry-run |
⚠️ install_skills,remove_skills, andconfigure_client_mcpdefault to dry-run whendry_runis omitted.
| Client | Path |
|---|---|
| 🔵 Claude Code | ~/.claude/skills |
| 🔵 Cursor | ~/.cursor/skills |
| 🟡 Gemini CLI | ~/.gemini/skills |
| 🟣 Antigravity | ~/.gemini/antigravity/skills |
| 🟢 Kiro | ~/.kiro/skills |
| 🔴 Codex CLI | ~/.codex/skills or $CODEX_HOME/skills |
| ⚪ OpenCode | <workspace>/.opencode/skills |
| 🪿 Goose | ~/.agents/skills |
| 🟠 Qwen Code | <workspace>/.qwen/skills |
These 9 targets are the only first-class install destinations today.
| Target | Format |
|---|---|
~/.claude/settings.json |
Claude Code settings JSON |
<workspace>/.claude/settings.json |
Claude project settings JSON |
~/.claude.json |
Legacy Claude JSON (mcpServers) |
~/Library/Application Support/Claude/claude_desktop_config.json |
Claude Desktop JSON (OS-specific) |
~/.cursor/mcp.json |
JSON (mcpServers) |
<workspace>/.cursor/mcp.json |
Cursor workspace JSON (mcpServers) |
~/.gemini/settings.json |
Gemini user JSON (mcpServers) |
<workspace>/.gemini/settings.json |
Gemini project JSON (mcpServers) |
~/.gemini/antigravity/mcp.json |
Antigravity JSON (mcpServers) |
~/.kiro/settings/mcp.json |
Kiro user JSON (mcpServers) |
<workspace>/.kiro/settings/mcp.json |
Kiro project JSON (mcpServers) |
~/.codex/config.toml |
TOML ([mcp_servers]) |
<workspace>/.mcp.json |
JSON (mcpServers) |
<workspace>/opencode.json |
OpenCode workspace JSON (mcp) |
~/.config/opencode/opencode.json |
OpenCode user JSON (mcp) |
~/.cline/data/settings/cline_mcp_settings.json |
Cline JSON (mcpServers) |
~/.copilot/mcp-config.json |
GitHub Copilot CLI JSON (mcpServers) |
<workspace>/.github/mcp.json |
GitHub Copilot repository JSON (mcpServers) |
~/.config/kilo/kilo.json |
Kilo CLI user JSON (mcp) |
<workspace>/kilo.json |
Kilo CLI project JSON (mcp) |
<workspace>/.kilocode/mcp.json |
Kilo Code workspace JSON (mcpServers) |
<workspace>/.continue/mcpServers/omni-skills.yaml |
Continue workspace YAML (mcpServers) |
<workspace>/.junie/mcp/mcp.json |
Junie project JSON (mcpServers) |
~/.junie/mcp/mcp.json |
Junie user JSON (mcpServers) |
~/.codeium/windsurf/mcp_config.json |
Windsurf JSON (mcpServers) |
~/.config/goose/config.yaml |
Goose YAML (extensions) |
<workspace>/.zed/settings.json |
Zed workspace JSON (context_servers) |
<workspace>/.vscode/mcp.json |
JSON (servers) |
~/.config/Code/User/mcp.json |
VS Code user JSON (servers) |
~/.config/Code - Insiders/User/mcp.json |
VS Code Insiders user JSON (servers) |
<workspace>/.devcontainer/devcontainer.json |
Nested Dev Container JSON (customizations.vscode.mcp.servers) |
Client root mcp.json |
JSON (per-client format) |
That gives the sidecar:
- 16 config-capable clients or IDEs
- 33 first-class target paths
- 20 format profiles
Current first-class config coverage spans:
- Claude Code and Claude Desktop
- Cursor
- VS Code and Dev Containers
- Gemini CLI
- Antigravity
- Kiro
- Codex CLI
- Continue
- Junie
- Windsurf
- Goose
- OpenCode
- Cline
- GitHub Copilot CLI
- Kilo Code
- Zed
Manual or snippet-only candidates are still intentionally outside the first-class writer set until their public config contracts are stable enough.
Awesome Omni Skills now treats client support as a three-level model:
- install-capable A stable skills directory exists, so the CLI and sidecar can install skills directly.
- config-capable
A stable, documented MCP config format exists, so
config-mcpcan preview and write a first-class file. - manual or snippet-only The product clearly supports MCP in some form, but the public docs do not justify a safe automatic writer yet.
This is why clients such as JetBrains AI Assistant remain manual/snippet-only, while Roo Code and Postman stay outside the first-class writer set until their safe automatic merge story is strong enough for this project.
The local sidecar only writes under an explicit allowlist.
- Known client roots under
$HOME ~/.codeiumfor Windsurf user config~/.copilotfor GitHub Copilot CLI~/.clinefor Cline CLI~/.config/goosefor Goose config~/.config/kiloand~/.config/opencodefor Kilo/OpenCode CLI config$CODEX_HOME(or~/.codexif unset)- Current workspace root
<workspace>/.agents<workspace>/.github<workspace>/.kilocode<workspace>/.opencode<workspace>/.zed<workspace>/.continue<workspace>/.vscode
export OMNI_SKILLS_LOCAL_ALLOWLIST=/absolute/path/one:/absolute/path/two{
"mcpServers": {
"omni-skills": {
"type": "http",
"url": "http://127.0.0.1:3334/mcp"
}
}
}{
"mcpServers": {
"omni-skills": {
"type": "http",
"url": "http://127.0.0.1:3334/sse"
}
}
}{
"mcpServers": {
"omni-skills": {
"type": "http",
"url": "http://127.0.0.1:3334/mcp",
"headers": {
"Authorization": "Bearer example"
}
}
},
"mcp": {
"allowed": ["omni-skills"]
}
}{
"mcpServers": {
"omni-skills": {
"type": "http",
"url": "http://127.0.0.1:3334/mcp",
"disabledTools": ["install_skills"],
"autoApprove": ["search_skills", "get_skill"]
}
}
}{
"mcpServers": {
"omni-skills": {
"url": "http://127.0.0.1:3334/mcp"
}
}
}{
"mcp": {
"omni-skills": {
"type": "local",
"command": ["/path/to/node", "/path/to/packages/server-mcp/src/server.js"],
"environment": {
"OMNI_SKILLS_MCP_MODE": "local"
},
"enabled": true
}
}
}{
"mcpServers": {
"omni-skills": {
"type": "streamable-http",
"url": "http://127.0.0.1:3334/mcp"
}
}
}{
"mcpServers": {
"omni-skills": {
"type": "http",
"url": "http://127.0.0.1:3334/mcp",
"tools": ["*"]
}
}
}{
"mcp": {
"omni-skills": {
"type": "remote",
"url": "http://127.0.0.1:3334/mcp",
"enabled": true
}
}
}name: 'Awesome Omni Skills'
version: '<current-package-version>'
schema: 'v1'
mcpServers:
- name: 'omni-skills'
transport:
type: 'streamable-http'
url: 'http://127.0.0.1:3334/mcp'The sidecar-backed CLI wrapper keeps MCP config generation accessible without direct JSON-RPC calls:
npx awesome-omni-skills config-mcp --list-targets
npx awesome-omni-skills config-mcp --target cline-user --transport stream --url http://127.0.0.1:3334/mcp
npx awesome-omni-skills config-mcp --target copilot-user --transport stream --url http://127.0.0.1:3334/mcp
npx awesome-omni-skills config-mcp --target zed-workspace --transport sse --url http://127.0.0.1:3335/sse
npx awesome-omni-skills config-mcp --target continue-workspace --transport stream --url http://127.0.0.1:3334/mcp
npx awesome-omni-skills config-mcp --target junie-project --transport stream --url http://127.0.0.1:3334/mcp
npx awesome-omni-skills config-mcp --target windsurf-user --transport sse --url http://127.0.0.1:3335/sse --writeDefault behavior is preview-only. --write applies the config to the resolved target path under the allowlist.
{
"mcpServers": {
"omni-skills": {
"serverUrl": "http://127.0.0.1:3334/mcp"
}
}
}{
"context_servers": {
"omni-skills": {
"url": "http://127.0.0.1:3334/sse"
}
}
}{
"servers": {
"omni-skills": {
"type": "stdio",
"command": "/path/to/node",
"args": ["/path/to/packages/server-mcp/src/server.js"],
"env": {
"OMNI_SKILLS_MCP_MODE": "local"
}
}
}
}{
"customizations": {
"vscode": {
"mcp": {
"servers": {
"omni-skills": {
"type": "stdio",
"command": "/path/to/node",
"args": ["/path/to/packages/server-mcp/src/server.js"],
"env": {
"OMNI_SKILLS_MCP_MODE": "local"
}
}
}
}
}
}
}[mcp_servers.omni-skills]
url = "http://127.0.0.1:3334/mcp"{
"mcpServers": {
"omni-skills": {
"command": "/path/to/node",
"args": ["/path/to/packages/server-mcp/src/server.js"],
"env": {
"OMNI_SKILLS_MCP_MODE": "local"
}
}
}
}The configure_client_mcp tool can also write Claude-specific settings when you pass:
allowed_mcp_serversdenied_mcp_serverspermissions_denyenable_all_project_mcp_servers
For VS Code and Dev Container targets, configure_client_mcp can also write:
sandboxEnabledsandbox.filesystem.allowWritesandbox.network.allowHostsdev.watchdev.debug.type
This maps to the current VS Code guidance for sandboxing local stdio MCP servers.
configure_client_mcp now supports richer entry metadata across supported profiles:
headersenvenv_filecwdtimeout_msdescriptioninclude_toolsexclude_toolsdisabledtrust
Profile-specific options:
- Claude:
allowed_mcp_servers,denied_mcp_servers,permissions_deny,enable_all_project_mcp_servers - Gemini:
mcp_allowed_servers,mcp_excluded_servers - Kiro:
disabled_tools,auto_approve - VS Code and Dev Containers:
dev_watch,dev_debug_type
configure_client_mcp returns recipes alongside the preview or applied config.
These recipes are client-aware guidance blocks, for example:
claude mcp add ... --scope user|projectgemini mcp add ... --scope user|projectcodex mcp add ...- manual file-edit recipes for Cursor, VS Code, Kiro, and Claude Desktop
The overall strategy is now intentionally conservative:
- reuse a small set of canonical config families where possible
- keep bespoke writers only when official docs require a distinct shape
- avoid inventing automatic writers for undocumented targets
The HTTP transports support the same env-driven controls as the catalog API:
| Variable | Purpose |
|---|---|
OMNI_SKILLS_HTTP_BEARER_TOKEN |
Bearer token auth |
OMNI_SKILLS_HTTP_API_KEYS |
Comma-separated API keys |
OMNI_SKILLS_HTTP_ADMIN_TOKEN |
Admin-only runtime introspection |
OMNI_SKILLS_RATE_LIMIT_MAX |
Max requests per window |
OMNI_SKILLS_RATE_LIMIT_WINDOW_MS |
Rate limit window in ms |
OMNI_SKILLS_HTTP_AUDIT_LOG |
Enable audit logging |
OMNI_SKILLS_HTTP_AUDIT_LOG_PATH |
Write audit log to a file |
OMNI_SKILLS_HTTP_ALLOWED_ORIGINS |
Restrict browser origins |
OMNI_SKILLS_HTTP_ALLOWED_IPS |
Restrict allowed source IPs |
OMNI_SKILLS_HTTP_MAINTENANCE_MODE |
Return 503 for non-admin, non-health routes |
🟢
/healthzremains open./mcp,/sse, and/messagesrequire auth when enabled./admin/runtimerequires the admin token when configured.
The current writer set and manual-only boundaries were checked against official product docs, including:
- Anthropic Claude Code MCP
- OpenAI Codex CLI and OpenAI Docs MCP
- Cursor MCP docs
- Continue MCP docs
- Kiro MCP docs
- OpenCode MCP docs
- Cline MCP docs
- Kilo Code MCP docs
- GitHub Copilot CLI docs
- Zed MCP docs
- VS Code MCP docs
- JetBrains AI Assistant MCP docs
Those docs are why some clients receive first-class automatic writers while others remain snippet-only for now.