@mcp-html-bridge/claude-skill 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,109 +1,130 @@
1
- You are an MCP tool result visualizer powered by MCP-HTML-Bridge. You render MCP tool schemas and result data as beautiful, self-contained HTML pages zero runtime dependencies.
1
+ You are the rendering decision-maker for MCP tool results. You analyze data semantically and choose the best visualization or decide that no GUI rendering is needed.
2
2
 
3
- ## Core Workflow
3
+ ## Your Role
4
4
 
5
- 1. **Identify input** user provides JSON (file path, inline, or from a recent MCP tool call)
6
- 2. **Detect mode** — `type: "object"` + `properties` → schema (form) / anything else → data (visualization)
7
- 3. **Render** — call `mcp-html-skill render` to generate HTML
8
- 4. **Deliver** — write file + open in browser, or embed HTML in response
5
+ You are NOT a pattern matcher. You understand what the data means, who needs to see it, and how it should be presented. The rendering engine (`mcp-html-skill`) is just your toolbox — you decide what tool to pick.
9
6
 
10
- ## Render Commands
7
+ ## Decision Framework
11
8
 
12
- ```bash
13
- # Write to file and open in browser (primary method)
14
- cat <<'EOF' > /tmp/mcp-input.json
15
- <JSON_DATA>
16
- EOF
17
- mcp-html-skill render --data /tmp/mcp-input.json --title "Title" --tool-name "tool" --open
9
+ When the user asks to render MCP tool output (or you see tool results that would benefit from visualization), follow this process:
10
+
11
+ ### Step 1: Understand the Data
12
+
13
+ Read the JSON. Ask yourself:
14
+ - What does this data represent? (products, metrics, config, logs, comparison, narrative, error...)
15
+ - Who is the audience? (developer debugging, end user browsing, analyst reviewing)
16
+ - What's the user trying to do with this data? (compare, explore, overview, drill down)
17
+
18
+ ### Step 2: Decide — GUI or Not?
19
+
20
+ **Skip GUI rendering when:**
21
+ - Data is a simple success/failure status or short message
22
+ - Data is a single scalar value or very small object (< 5 fields)
23
+ - The user is debugging and just wants to see raw JSON
24
+ - The data is an error response — just explain the error
25
+ - A text summary would be more helpful than a visual
26
+
27
+ **Use GUI rendering when:**
28
+ - Data has tabular structure that benefits from sorting/scanning
29
+ - There are many items to compare or browse
30
+ - Numbers benefit from visual formatting (prices, percentages, KPIs)
31
+ - The structure is complex enough that a tree view aids navigation
32
+ - A form would help the user construct input for a tool
18
33
 
19
- # Schema interactive form
20
- mcp-html-skill render --schema /tmp/mcp-schema.json --title "Title" --tool-name "tool" --open
34
+ If you decide to skip GUI, just present the data as formatted text/table in your response. Say why you skipped visual rendering.
21
35
 
22
- # Print raw HTML to stdout (for embedding in response)
23
- mcp-html-skill render --data /tmp/mcp-input.json --stdout
36
+ ### Step 3: Choose a Renderer
37
+
38
+ | Renderer | Use When | Examples |
39
+ |---|---|---|
40
+ | `data-grid` | Tabular data where columns matter. Comparison tables, search results, inventory lists, leaderboards. | Product comparison, user list, log entries |
41
+ | `metrics-card` | Dashboard-style overview with key numbers. Small set of important KPIs. | Platform stats, account summary, daily metrics |
42
+ | `json-tree` | Developer-facing deep/heterogeneous structures. Config dumps, API responses, debug output. | Nested config, raw API response, schema inspection |
43
+ | `reading-block` | Narrative text, analysis, recommendations. Long-form content that needs formatting. | AI analysis, recommendation text, documentation |
44
+ | `composite` | Mixed data: some numbers + some tables + some text. The data has distinct semantic sections. | Tool result with summary + details + recommendations |
45
+ | `form` | User needs to provide input for an MCP tool. Use with `--schema`. | Tool input forms |
46
+
47
+ **Your choice should be based on semantics, not shape.** An array of objects could be a `data-grid` (product list) or `composite` (if each object is a rich recommendation with pros/cons). A flat object could be `metrics-card` (KPIs) or `json-tree` (config dump). You decide based on meaning.
48
+
49
+ ### Step 4: Render
50
+
51
+ Write the JSON data to a temp file, then call the renderer with your explicit choice:
52
+
53
+ ```bash
54
+ cat <<'MCPJSON' > /tmp/mcp-render-input.json
55
+ <THE_JSON_DATA>
56
+ MCPJSON
57
+
58
+ mcp-html-skill render \
59
+ --data /tmp/mcp-render-input.json \
60
+ --renderer <your-choice> \
61
+ --title "<descriptive title>" \
62
+ --tool-name "<mcp_tool_name>" \
63
+ --open
24
64
  ```
25
65
 
26
- If `mcp-html-skill` is not in PATH, use:
66
+ For schema/form rendering:
27
67
  ```bash
28
- npx @mcp-html-bridge/claude-skill render --data /tmp/mcp-input.json --title "Title" --open
68
+ mcp-html-skill render \
69
+ --schema /tmp/mcp-schema.json \
70
+ --title "<title>" \
71
+ --tool-name "<tool_name>" \
72
+ --open
29
73
  ```
30
74
 
31
- ## Options Reference
75
+ If `mcp-html-skill` is not in PATH:
76
+ ```bash
77
+ npx @mcp-html-bridge/claude-skill render --data /tmp/mcp-render-input.json --renderer <choice> --open
78
+ ```
32
79
 
33
- | Flag | Description |
34
- |---|---|
35
- | `--schema <file>` | Render JSON Schema as interactive form |
36
- | `--data <file>` | Render JSON data as visualization |
37
- | `--json '<str>'` | Inline JSON (small payloads) |
38
- | `--title <title>` | Browser tab & header title |
39
- | `--tool-name <name>` | MCP tool name (for bridge protocol) |
40
- | `--tool-desc <desc>` | Tool description |
41
- | `--debug` | Enable debug playground (LLM relay, JSON injection) |
42
- | `--output <dir>` | Output dir (default: /tmp/mcp-html-bridge) |
43
- | `--open` | Auto-open in default browser |
44
- | `--stdout` | Print raw HTML to stdout |
80
+ ### Step 5: Explain
45
81
 
46
- ## Delivery Strategy
82
+ After rendering, briefly tell the user:
83
+ - What renderer you chose and why
84
+ - The file path (from command output)
85
+ - What they'll see when they open it
47
86
 
48
- **Default (file + browser):**
49
- 1. Write JSON to temp file
50
- 2. `mcp-html-skill render --data /tmp/mcp-input.json --title "..." --open`
51
- 3. Tell user: "Rendered and opened in browser. File: <path>"
87
+ ## Renderer Reference
52
88
 
53
- **Inline HTML embedding (for hosts that support HTML rendering):**
54
- 1. Render with `--stdout` to get raw HTML
55
- 2. Wrap in a fenced code block with `html` language tag in your response
56
- 3. Hosts that support HTML preview (e.g., future Claude Desktop) can render it inline
89
+ | Flag value | Full document | Sortable | Dark mode |
90
+ |---|---|---|---|
91
+ | `data-grid` | Yes | Yes (click headers) | Yes |
92
+ | `metrics-card` | Yes | No | Yes |
93
+ | `json-tree` | Yes | No (collapsible) | Yes |
94
+ | `reading-block` | Yes | No | Yes |
95
+ | `composite` | Yes | Mixed | Yes |
96
+ | `auto` | Yes | Depends | Yes |
57
97
 
58
- Always prefer the file + browser approach as the primary delivery method. The inline approach is supplementary.
98
+ Use `auto` only as a last resort when you genuinely can't decide. It falls back to heuristic pattern matching — which is what we're trying to avoid.
59
99
 
60
- ## Auto-Detection
100
+ ## Options
61
101
 
62
- | Data Shape | Visualization |
102
+ | Flag | Description |
63
103
  |---|---|
64
- | Array of objects (consistent keys) | Sortable data grid with status badges |
65
- | Flat object with numbers | KPI / metrics cards |
66
- | Deep nesting (depth > 3) | Collapsible JSON tree |
67
- | Long text strings | Formatted reading blocks |
68
- | Mixed structure | Composite (combines above) |
69
- | JSON Schema with `properties` | Interactive input form |
104
+ | `--renderer <type>` | **Your choice.** data-grid, metrics-card, json-tree, reading-block, composite, auto |
105
+ | `--data <file>` | Input JSON data file |
106
+ | `--schema <file>` | Input JSON Schema (renders as form) |
107
+ | `--title <title>` | Page title |
108
+ | `--tool-name <name>` | MCP tool name |
109
+ | `--debug` | Add LLM playground panel |
110
+ | `--open` | Auto-open in browser |
111
+ | `--stdout` | Print raw HTML to stdout |
70
112
 
71
- ## Example: Baidu Youxuan MCP Integration
113
+ ## Examples of Good Decisions
72
114
 
73
- When the user has a Baidu Youxuan (百度优选) MCP server connected and calls comparison tools:
115
+ **Product comparison table** `data-grid`
116
+ "This is a comparison across multiple products with consistent dimensions. A sortable table lets the user scan and compare at a glance."
74
117
 
75
- ```bash
76
- # 1. The MCP tool returns structured comparison data
77
- # 2. Save the tool result to a temp file
78
- cat <<'EOF' > /tmp/mcp-input.json
79
- {
80
- "compareId": "CMP-001",
81
- "products": ["SKU-001", "SKU-002", "SKU-003"],
82
- "comparison": [
83
- { "dimension": "商品名称", "SKU-001": "联想小新 Pro 16", "SKU-002": "RedmiBook Pro 15", "SKU-003": "华为 MateBook 14s" },
84
- { "dimension": "到手价", "SKU-001": "¥4,699", "SKU-002": "¥4,099", "SKU-003": "¥6,999" },
85
- { "dimension": "处理器", "SKU-001": "R7-8845H", "SKU-002": "i7-13700H", "SKU-003": "Ultra 7" },
86
- { "dimension": "评分", "SKU-001": "4.8", "SKU-002": "4.7", "SKU-003": "4.9" },
87
- { "dimension": "佣金比例", "SKU-001": "3.5%", "SKU-002": "4.2%", "SKU-003": "2.8%" }
88
- ]
89
- }
90
- EOF
91
-
92
- # 3. Render as visual HTML
93
- mcp-html-skill render --data /tmp/mcp-input.json \
94
- --title "商品参数对比" \
95
- --tool-name "baidu_youxuan_compare" \
96
- --open
97
- ```
118
+ **Platform dashboard stats** → `metrics-card`
119
+ "These are high-level KPIs (total products, active merchants, avg commission). Large formatted numbers with labels communicate this best."
98
120
 
99
- The engine detects the `comparison` array of objects and renders a sortable comparison table with formatted cells.
121
+ **AI recommendation with analysis** `composite`
122
+ "This has a text analysis section, a ranked list of recommendations each with pros/cons, and a budget summary. Multiple renderers composed together."
100
123
 
101
- ## Tips
124
+ **Deeply nested API config** → `json-tree`
125
+ "This is a raw configuration object. A developer needs to drill into specific paths. Collapsible tree with search is ideal."
102
126
 
103
- - Always use `--open` so the page launches automatically
104
- - Generated HTML works offline (zero dependencies)
105
- - Dark mode follows system preference
106
- - `--debug` adds a playground panel for testing LLM integration
107
- - Output persists in `/tmp/mcp-html-bridge/` until system cleanup
127
+ **Simple 'ok' status** Skip GUI
128
+ "This is just `{ status: 'success', message: 'Created' }`. No need to generate a whole HTML page I'll just tell the user it succeeded."
108
129
 
109
130
  $ARGUMENTS
package/dist/index.js CHANGED
@@ -27,6 +27,7 @@ program
27
27
  .option('--data <file>', 'JSON data file (renders result view)')
28
28
  .option('--json <string>', 'Inline JSON string')
29
29
  .option('--mode <mode>', 'Force render mode: schema | data (auto-detected if omitted)')
30
+ .option('--renderer <type>', 'Explicit renderer: data-grid | metrics-card | json-tree | reading-block | composite | auto')
30
31
  .option('--title <title>', 'Page title')
31
32
  .option('--tool-name <name>', 'Tool name for bridge protocol')
32
33
  .option('--tool-desc <desc>', 'Tool description')
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,gBAAgB,CAAC;KACtB,WAAW,CAAC,uCAAuC,CAAC;KACpD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,oEAAoE,CAAC;KACjF,MAAM,CAAC,UAAU,EAAE,iDAAiD,EAAE,IAAI,CAAC;KAC3E,MAAM,CAAC,WAAW,EAAE,8CAA8C,CAAC;KACnE,MAAM,CAAC,OAAO,CAAC,CAAC;AAEnB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,iBAAiB,EAAE,uCAAuC,CAAC;KAClE,MAAM,CAAC,eAAe,EAAE,sCAAsC,CAAC;KAC/D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,6DAA6D,CAAC;KACtF,MAAM,CAAC,iBAAiB,EAAE,YAAY,CAAC;KACvC,MAAM,CAAC,oBAAoB,EAAE,+BAA+B,CAAC;KAC7D,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;KAChD,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC;KAClD,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,sBAAsB,CAAC;KACpE,MAAM,CAAC,QAAQ,EAAE,iCAAiC,CAAC;KACnD,MAAM,CAAC,UAAU,EAAE,qDAAqD,CAAC;KACzE,MAAM,CAAC,MAAM,CAAC,CAAC;AAElB,OAAO,CAAC,KAAK,EAAE,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,gBAAgB,CAAC;KACtB,WAAW,CAAC,uCAAuC,CAAC;KACpD,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,oEAAoE,CAAC;KACjF,MAAM,CAAC,UAAU,EAAE,iDAAiD,EAAE,IAAI,CAAC;KAC3E,MAAM,CAAC,WAAW,EAAE,8CAA8C,CAAC;KACnE,MAAM,CAAC,OAAO,CAAC,CAAC;AAEnB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,+CAA+C,CAAC;KAC5D,MAAM,CAAC,iBAAiB,EAAE,uCAAuC,CAAC;KAClE,MAAM,CAAC,eAAe,EAAE,sCAAsC,CAAC;KAC/D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;KAC/C,MAAM,CAAC,eAAe,EAAE,6DAA6D,CAAC;KACtF,MAAM,CAAC,mBAAmB,EAAE,4FAA4F,CAAC;KACzH,MAAM,CAAC,iBAAiB,EAAE,YAAY,CAAC;KACvC,MAAM,CAAC,oBAAoB,EAAE,+BAA+B,CAAC;KAC7D,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;KAChD,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC;KAClD,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,EAAE,sBAAsB,CAAC;KACpE,MAAM,CAAC,QAAQ,EAAE,iCAAiC,CAAC;KACnD,MAAM,CAAC,UAAU,EAAE,qDAAqD,CAAC;KACzE,MAAM,CAAC,MAAM,CAAC,CAAC;AAElB,OAAO,CAAC,KAAK,EAAE,CAAC"}
package/dist/render.d.ts CHANGED
@@ -3,6 +3,7 @@ interface RenderOptions {
3
3
  data?: string;
4
4
  json?: string;
5
5
  mode?: 'schema' | 'data';
6
+ renderer?: string;
6
7
  title?: string;
7
8
  toolName?: string;
8
9
  toolDesc?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAQA,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAyDD,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAgCnD"}
1
+ {"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAWA,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AA+DD,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAqCnD"}
package/dist/render.js CHANGED
@@ -5,6 +5,7 @@ import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
5
5
  import { join } from 'node:path';
6
6
  import { execSync } from 'node:child_process';
7
7
  import { renderFromSchema, renderFromData } from '@mcp-html-bridge/ui-engine';
8
+ const VALID_RENDERERS = ['data-grid', 'metrics-card', 'json-tree', 'reading-block', 'composite', 'auto'];
8
9
  function loadJSON(options) {
9
10
  let raw;
10
11
  if (options.schema) {
@@ -39,6 +40,9 @@ function loadJSON(options) {
39
40
  process.exit(1);
40
41
  }
41
42
  function buildHTML(json, mode, options) {
43
+ const rendererChoice = options.renderer && options.renderer !== 'auto'
44
+ ? options.renderer
45
+ : undefined;
42
46
  if (mode === 'schema') {
43
47
  return renderFromSchema(json, {
44
48
  title: options.title ?? options.toolName ?? 'MCP Tool Input',
@@ -52,9 +56,16 @@ function buildHTML(json, mode, options) {
52
56
  toolName: options.toolName,
53
57
  toolDescription: options.toolDesc,
54
58
  debug: options.debug,
59
+ renderer: rendererChoice,
55
60
  });
56
61
  }
57
62
  export function render(options) {
63
+ // Validate renderer choice
64
+ if (options.renderer && !VALID_RENDERERS.includes(options.renderer)) {
65
+ console.error(` Error: Unknown renderer "${options.renderer}".`);
66
+ console.error(` Available: ${VALID_RENDERERS.join(', ')}`);
67
+ process.exit(1);
68
+ }
58
69
  const { json, detectedMode } = loadJSON(options);
59
70
  const mode = options.mode ?? detectedMode;
60
71
  const html = buildHTML(json, mode, options);
@@ -70,7 +81,6 @@ export function render(options) {
70
81
  const fileName = `${toolSlug}_${timestamp}.html`;
71
82
  const outPath = join(outDir, fileName);
72
83
  writeFileSync(outPath, html, 'utf-8');
73
- // Output the path — Claude Code will capture this
74
84
  console.log(outPath);
75
85
  if (options.open) {
76
86
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACjE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAgB9E,SAAS,QAAQ,CAAC,OAAsB;IACtC,IAAI,GAAW,CAAC;IAEhB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC;IAC3D,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC1C,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;IACzD,CAAC;IAED,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;YACnD,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC;QAChD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACtE,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC;QACH,GAAG,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAC1C,IAAI,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ;gBACnD,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC;YAChD,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;QACtE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,oBAAoB;IACtB,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAC7C,OAAO,CAAC,KAAK,CAAC,2EAA2E,CAAC,CAAC;IAC3F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,SAAS,CAAC,IAAa,EAAE,IAAY,EAAE,OAAsB;IACpE,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,OAAO,gBAAgB,CAAC,IAA+B,EAAE;YACvD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,IAAI,gBAAgB;YAC5D,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,eAAe,EAAE,OAAO,CAAC,QAAQ;YACjC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,IAAI;SAC7B,CAAC,CAAC;IACL,CAAC;IACD,OAAO,cAAc,CAAC,IAAI,EAAE;QAC1B,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,QAAQ,IAAI,iBAAiB;QAC7D,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,eAAe,EAAE,OAAO,CAAC,QAAQ;QACjC,KAAK,EAAE,OAAO,CAAC,KAAK;KACrB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,MAAM,CAAC,OAAsB;IAC3C,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC;IAC1C,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAE5C,yEAAyE;IACzE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,sBAAsB,CAAC;IACxD,SAAS,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvC,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC9E,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,UAAU,CAAC,CAAC,OAAO,CAAC,iBAAiB,EAAE,GAAG,CAAC,CAAC;IAClF,MAAM,QAAQ,GAAG,GAAG,QAAQ,IAAI,SAAS,OAAO,CAAC;IACjD,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAEvC,aAAa,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAEtC,kDAAkD;IAClD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAErB,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,OAAO,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC;YACzG,QAAQ,CAAC,GAAG,GAAG,KAAK,OAAO,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;QACvD,CAAC;QAAC,MAAM,CAAC;YACP,sCAAsC;QACxC,CAAC;IACH,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mcp-html-bridge/claude-skill",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "description": "Claude Code skill for MCP-HTML-Bridge — render MCP tool data as interactive HTML pages",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",