A Claude Code plugin (and marketplace) that bundles frontend-design, context7, and ponytail capabilities, plus MCP servers for vision, web search, and code graph.
⚠️ Configuration in progress — component content (skills/agents/hooks) will be added step by step. Dependencies are already declared.
This plugin depends on three plugins from three different marketplaces:
| Dependency | Marketplace | Version (verified) |
|---|---|---|
frontend-design |
claude-plugins-official (Anthropic official) |
1.1.0 |
context7 |
claude-plugins-official (Anthropic official) |
latest |
ponytail |
ponytail (DietrichGebert/ponytail) |
4.9.0 |
Cross-marketplace dependencies are allowed via allowCrossMarketplaceDependenciesOn in .claude-plugin/marketplace.json.
This plugin ships three MCP servers in .mcp.json. Secrets are never stored in this repo — they are injected at runtime via environment variables. Set them before enabling the plugin, or the server will fail to connect (see Environment variables).
| Server | Transport | Purpose | Needs config? |
|---|---|---|---|
luma-vision |
stdio (npx -y luma-mcp) |
Vision model access via custom gateway | LUMA_API_KEY |
tavily_proxy |
http | Web search API proxy | TAVILY_API_KEY |
codegraph-mcp |
stdio (codegraph serve --mcp) |
Code knowledge graph for agents | ❌ none (needs codegraph CLI installed) |
| Variable | Used by | Required | Default |
|---|---|---|---|
LUMA_API_KEY |
luma-vision | ✅ required | — |
LUMA_BASE_URL |
luma-vision | optional | https://gateway.ijkzen.cn/v1 |
LUMA_MODEL_NAME |
luma-vision | optional | deepseek-v4-flash-vision-exp |
TAVILY_API_KEY |
tavily_proxy | ✅ required | — |
luma-vision also passes fixed values (non-secret): MODEL_PROVIDER=custom, CUSTOM_PATH=/chat/completions.
The tavily_proxy URL embeds the key as a query parameter: https://tavily.ijkzen.cn/mcp?key=${TAVILY_API_KEY} — the key is read from the environment, never hard-coded here.
# Shell (before launching Claude Code)
export LUMA_API_KEY="your-luma-key"
export TAVILY_API_KEY="your-tavily-key"
# Or add to your Claude Code settings env (~/.claude/settings.json)
{
"env": {
"LUMA_API_KEY": "your-luma-key",
"TAVILY_API_KEY": "your-tavily-key"
}
}claude mcp list # all three should appear; missing-variable warnings show if a required env is unset
claude mcp get luma-vision
claude mcp get tavily_proxyIf a required variable is unset, claude mcp list shows a missing-variable warning and the server uses the literal ${VAR} text — set the variable and restart Claude Code.
| Hook | Script | Behavior |
|---|---|---|
SessionStart |
scripts/codegraph-sync.sh |
On session start: if the current project is a git work tree, keep its codegraph index fresh — run codegraph sync if .codegraph/ exists (already initialized), else codegraph init once. Silent (no output); no-op outside git repos or when the codegraph CLI is missing. |
PreToolUse (WebSearch) |
scripts/deny-websearch.sh |
Denies the system WebSearch tool and redirects the model to the Tavily search tool (tavily-search). |
PreToolUse (WebFetch) |
scripts/deny-webfetch.sh |
Denies the system WebFetch tool and redirects the model to the Tavily extract tool (tavily-extract). |
The redirect tool names are intentionally unprefixed (e.g.
tavily-search, notmcp__<server>__tavily-search) so the model resolves the closest matching tool in whatever harness runs this plugin — including non-Claude-Code harnesses that support the plugin format.
# Add this repo as a marketplace
claude plugin marketplace add github:ijkzen/agent-plugin
# Install the plugin (auto-installs dependencies)
claude plugin install agent-plugin
# Or directly
claude plugin add github:ijkzen/agent-pluginagent-plugin/
├── .claude-plugin/
│ ├── plugin.json # manifest (with dependencies)
│ └── marketplace.json # marketplace manifest (allowCrossMarketplaceDependenciesOn)
├── .mcp.json # MCP server definitions (secrets via env vars)
├── hooks/
│ └── hooks.json # SessionStart → codegraph-sync.sh
├── scripts/
│ └── codegraph-sync.sh # silent codegraph init/sync on session start
├── README.md
└── LICENSE
MIT