@mcp-html-bridge/claude-skill 0.4.0 → 0.5.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.
- package/commands/mcp-render.md +31 -20
- package/dist/config-cmd.d.ts +10 -0
- package/dist/config-cmd.d.ts.map +1 -0
- package/dist/config-cmd.js +55 -0
- package/dist/config-cmd.js.map +1 -0
- package/dist/config.d.ts +27 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +54 -0
- package/dist/config.js.map +1 -0
- package/dist/index.js +28 -13
- package/dist/index.js.map +1 -1
- package/dist/render.d.ts +5 -1
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +52 -27
- package/dist/render.js.map +1 -1
- package/package.json +1 -1
package/commands/mcp-render.md
CHANGED
|
@@ -2,7 +2,10 @@ You are the rendering decision-maker for MCP tool results. You analyze data and
|
|
|
2
2
|
|
|
3
3
|
## Your Role
|
|
4
4
|
|
|
5
|
-
MCP-HTML-Bridge is a **generic MCP GUI wrapper**. It
|
|
5
|
+
MCP-HTML-Bridge is a **generic MCP GUI wrapper**. It supports two rendering modes:
|
|
6
|
+
|
|
7
|
+
1. **LLM-powered semantic rendering** — An LLM analyzes the JSON, understands what the data *means* (SVG, markdown, images, charts, code, etc.), and produces the best HTML visualization.
|
|
8
|
+
2. **Structural fallback** — When no LLM is configured, renders JSON mechanically (tables for arrays of objects, key-value pairs for flat objects, etc.)
|
|
6
9
|
|
|
7
10
|
## Decision Framework
|
|
8
11
|
|
|
@@ -15,17 +18,16 @@ MCP-HTML-Bridge is a **generic MCP GUI wrapper**. It renders any JSON data as cl
|
|
|
15
18
|
- The data is an error response — just explain the error
|
|
16
19
|
|
|
17
20
|
**Use GUI rendering when:**
|
|
18
|
-
- Data has tabular structure
|
|
21
|
+
- Data has tabular structure, nested objects, or complex content
|
|
19
22
|
- There are many items to compare or browse
|
|
20
|
-
- The
|
|
23
|
+
- The data contains rich content (SVG, markdown, HTML, images, code)
|
|
21
24
|
- The user explicitly asks for a visual/HTML rendering
|
|
22
25
|
|
|
23
|
-
If you decide to skip GUI, just present the data as formatted text in your response.
|
|
24
|
-
|
|
25
26
|
### Step 2: Render
|
|
26
27
|
|
|
27
|
-
Write the JSON data to a temp file, then call the renderer
|
|
28
|
+
Write the JSON data to a temp file, then call the renderer.
|
|
28
29
|
|
|
30
|
+
**With LLM semantic rendering (recommended for rich data):**
|
|
29
31
|
```bash
|
|
30
32
|
cat <<'MCPJSON' > /tmp/mcp-render-input.json
|
|
31
33
|
<THE_JSON_DATA>
|
|
@@ -34,16 +36,25 @@ MCPJSON
|
|
|
34
36
|
mcp-html-skill render \
|
|
35
37
|
--data /tmp/mcp-render-input.json \
|
|
36
38
|
--title "<descriptive title>" \
|
|
37
|
-
--
|
|
39
|
+
--api-url "https://api.openai.com/v1" \
|
|
40
|
+
--api-key "$OPENAI_API_KEY" \
|
|
41
|
+
--model "gpt-4o-mini" \
|
|
42
|
+
--open
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Without LLM (structural fallback):**
|
|
46
|
+
```bash
|
|
47
|
+
mcp-html-skill render \
|
|
48
|
+
--data /tmp/mcp-render-input.json \
|
|
49
|
+
--title "<descriptive title>" \
|
|
38
50
|
--open
|
|
39
51
|
```
|
|
40
52
|
|
|
41
|
-
For schema/form rendering
|
|
53
|
+
**For schema/form rendering:**
|
|
42
54
|
```bash
|
|
43
55
|
mcp-html-skill render \
|
|
44
56
|
--schema /tmp/mcp-schema.json \
|
|
45
57
|
--title "<title>" \
|
|
46
|
-
--tool-name "<tool_name>" \
|
|
47
58
|
--open
|
|
48
59
|
```
|
|
49
60
|
|
|
@@ -58,20 +69,17 @@ After rendering, briefly tell the user:
|
|
|
58
69
|
- The file path (from command output)
|
|
59
70
|
- What they'll see when they open it
|
|
60
71
|
|
|
61
|
-
##
|
|
72
|
+
## LLM Providers
|
|
62
73
|
|
|
63
|
-
The
|
|
74
|
+
The `--api-url` flag accepts any OpenAI-compatible endpoint:
|
|
64
75
|
|
|
65
|
-
|
|
|
76
|
+
| Provider | API URL |
|
|
66
77
|
|---|---|
|
|
67
|
-
|
|
|
68
|
-
|
|
|
69
|
-
|
|
|
70
|
-
|
|
|
71
|
-
|
|
|
72
|
-
| JSON Schema | Interactive form with smart widgets |
|
|
73
|
-
|
|
74
|
-
**No business logic is applied.** No status badges, no price formatting, no regex-based field guessing. All data is rendered structurally. Formatting decisions are the caller's responsibility.
|
|
78
|
+
| OpenAI | `https://api.openai.com/v1` |
|
|
79
|
+
| Baidu ERNIE | `https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop` |
|
|
80
|
+
| Anthropic (via proxy) | `https://api.anthropic.com/v1` |
|
|
81
|
+
| Ollama (local) | `http://localhost:11434/v1` |
|
|
82
|
+
| vLLM (local) | `http://localhost:8000/v1` |
|
|
75
83
|
|
|
76
84
|
## Options
|
|
77
85
|
|
|
@@ -85,5 +93,8 @@ The renderer applies **pure structural rendering** based on JSON data shape:
|
|
|
85
93
|
| `--debug` | Add debug playground panel |
|
|
86
94
|
| `--open` | Auto-open in browser |
|
|
87
95
|
| `--stdout` | Print raw HTML to stdout |
|
|
96
|
+
| `--api-url <url>` | LLM API base URL |
|
|
97
|
+
| `--api-key <key>` | LLM API key |
|
|
98
|
+
| `--model <model>` | LLM model name |
|
|
88
99
|
|
|
89
100
|
$ARGUMENTS
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-cmd.d.ts","sourceRoot":"","sources":["../src/config-cmd.ts"],"names":[],"mappings":"AAMA,UAAU,aAAa;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAgB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,IAAI,CAmDnD"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mcp-html-skill config` subcommand.
|
|
3
|
+
*/
|
|
4
|
+
import { loadConfig, saveConfig, getConfigPath } from './config.js';
|
|
5
|
+
export function config(options) {
|
|
6
|
+
if (options.show) {
|
|
7
|
+
const cfg = loadConfig();
|
|
8
|
+
const path = getConfigPath();
|
|
9
|
+
if (cfg.llm) {
|
|
10
|
+
console.log(`Config: ${path}`);
|
|
11
|
+
console.log(` API URL: ${cfg.llm.apiUrl}`);
|
|
12
|
+
console.log(` API Key: ${cfg.llm.apiKey ? cfg.llm.apiKey.slice(0, 8) + '...' : '(not set)'}`);
|
|
13
|
+
console.log(` Model: ${cfg.llm.model}`);
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
console.log(`No LLM configured. Config path: ${path}`);
|
|
17
|
+
console.log('Run: mcp-html-skill config --api-url <url> --model <model>');
|
|
18
|
+
}
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
if (options.clear) {
|
|
22
|
+
saveConfig({});
|
|
23
|
+
console.log('Config cleared.');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
if (!options.apiUrl && !options.model && !options.apiKey) {
|
|
27
|
+
console.error('Usage:');
|
|
28
|
+
console.error(' mcp-html-skill config --api-url <url> --model <model> [--api-key <key>]');
|
|
29
|
+
console.error(' mcp-html-skill config --show');
|
|
30
|
+
console.error(' mcp-html-skill config --clear');
|
|
31
|
+
console.error('');
|
|
32
|
+
console.error('Examples:');
|
|
33
|
+
console.error(' mcp-html-skill config --api-url http://localhost:11434/v1 --model qwen2');
|
|
34
|
+
console.error(' mcp-html-skill config --api-url https://api.deepseek.com/v1 --api-key sk-xxx --model deepseek-chat');
|
|
35
|
+
process.exit(1);
|
|
36
|
+
}
|
|
37
|
+
const existing = loadConfig();
|
|
38
|
+
const llm = existing.llm ?? { apiUrl: '', model: '' };
|
|
39
|
+
if (options.apiUrl)
|
|
40
|
+
llm.apiUrl = options.apiUrl;
|
|
41
|
+
if (options.apiKey)
|
|
42
|
+
llm.apiKey = options.apiKey;
|
|
43
|
+
if (options.model)
|
|
44
|
+
llm.model = options.model;
|
|
45
|
+
if (!llm.apiUrl || !llm.model) {
|
|
46
|
+
console.error('Both --api-url and --model are required.');
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
saveConfig({ ...existing, llm });
|
|
50
|
+
console.log(`Saved to ${getConfigPath()}`);
|
|
51
|
+
console.log(` API URL: ${llm.apiUrl}`);
|
|
52
|
+
console.log(` Model: ${llm.model}`);
|
|
53
|
+
console.log(` API Key: ${llm.apiKey ? llm.apiKey.slice(0, 8) + '...' : '(not set)'}`);
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=config-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-cmd.js","sourceRoot":"","sources":["../src/config-cmd.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export interface BridgeConfig {
|
|
2
|
+
llm?: {
|
|
3
|
+
apiUrl: string;
|
|
4
|
+
apiKey?: string;
|
|
5
|
+
model: string;
|
|
6
|
+
};
|
|
7
|
+
}
|
|
8
|
+
/** Read config from ~/.mcp-html-bridge/config.json */
|
|
9
|
+
export declare function loadConfig(): BridgeConfig;
|
|
10
|
+
/** Write config to ~/.mcp-html-bridge/config.json */
|
|
11
|
+
export declare function saveConfig(config: BridgeConfig): void;
|
|
12
|
+
/** Get config file path */
|
|
13
|
+
export declare function getConfigPath(): string;
|
|
14
|
+
/**
|
|
15
|
+
* Resolve LLM config from all sources.
|
|
16
|
+
* Priority: CLI flags > env vars > config file
|
|
17
|
+
*/
|
|
18
|
+
export declare function resolveLLMConfig(cliFlags: {
|
|
19
|
+
apiUrl?: string;
|
|
20
|
+
apiKey?: string;
|
|
21
|
+
model?: string;
|
|
22
|
+
}): {
|
|
23
|
+
apiUrl: string;
|
|
24
|
+
apiKey?: string;
|
|
25
|
+
model: string;
|
|
26
|
+
} | undefined;
|
|
27
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE;QACJ,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED,sDAAsD;AACtD,wBAAgB,UAAU,IAAI,YAAY,CAUzC;AAED,qDAAqD;AACrD,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CAGrD;AAED,2BAA2B;AAC3B,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE;IACzC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAkBjE"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration management for MCP-HTML-Bridge.
|
|
3
|
+
*
|
|
4
|
+
* Config file: ~/.mcp-html-bridge/config.json
|
|
5
|
+
* Env vars: MCP_HTML_LLM_API_URL, MCP_HTML_LLM_API_KEY, MCP_HTML_LLM_MODEL
|
|
6
|
+
* CLI flags: --api-url, --api-key, --model (highest priority)
|
|
7
|
+
*/
|
|
8
|
+
import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'node:fs';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
import { homedir } from 'node:os';
|
|
11
|
+
const CONFIG_DIR = join(homedir(), '.mcp-html-bridge');
|
|
12
|
+
const CONFIG_FILE = join(CONFIG_DIR, 'config.json');
|
|
13
|
+
/** Read config from ~/.mcp-html-bridge/config.json */
|
|
14
|
+
export function loadConfig() {
|
|
15
|
+
try {
|
|
16
|
+
if (existsSync(CONFIG_FILE)) {
|
|
17
|
+
const raw = readFileSync(CONFIG_FILE, 'utf-8');
|
|
18
|
+
return JSON.parse(raw);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
catch {
|
|
22
|
+
// Corrupt config, ignore
|
|
23
|
+
}
|
|
24
|
+
return {};
|
|
25
|
+
}
|
|
26
|
+
/** Write config to ~/.mcp-html-bridge/config.json */
|
|
27
|
+
export function saveConfig(config) {
|
|
28
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
29
|
+
writeFileSync(CONFIG_FILE, JSON.stringify(config, null, 2) + '\n', 'utf-8');
|
|
30
|
+
}
|
|
31
|
+
/** Get config file path */
|
|
32
|
+
export function getConfigPath() {
|
|
33
|
+
return CONFIG_FILE;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Resolve LLM config from all sources.
|
|
37
|
+
* Priority: CLI flags > env vars > config file
|
|
38
|
+
*/
|
|
39
|
+
export function resolveLLMConfig(cliFlags) {
|
|
40
|
+
const file = loadConfig();
|
|
41
|
+
const apiUrl = cliFlags.apiUrl
|
|
42
|
+
?? process.env['MCP_HTML_LLM_API_URL']
|
|
43
|
+
?? file.llm?.apiUrl;
|
|
44
|
+
const model = cliFlags.model
|
|
45
|
+
?? process.env['MCP_HTML_LLM_MODEL']
|
|
46
|
+
?? file.llm?.model;
|
|
47
|
+
if (!apiUrl || !model)
|
|
48
|
+
return undefined;
|
|
49
|
+
const apiKey = cliFlags.apiKey
|
|
50
|
+
?? process.env['MCP_HTML_LLM_API_KEY']
|
|
51
|
+
?? file.llm?.apiKey;
|
|
52
|
+
return { apiUrl, apiKey, model };
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAElC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAC;AACvD,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAUpD,sDAAsD;AACtD,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC;QACH,IAAI,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAiB,CAAC;QACzC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,aAAa,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;AAC9E,CAAC;AAED,2BAA2B;AAC3B,MAAM,UAAU,aAAa;IAC3B,OAAO,WAAW,CAAC;AACrB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAIhC;IACC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAE1B,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM;WACzB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;WACnC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IAEtB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK;WACvB,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;WACjC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC;IAErB,IAAI,CAAC,MAAM,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAExC,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM;WACzB,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC;WACnC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;IAEtB,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC;AACnC,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -2,38 +2,53 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* @mcp-html-bridge/claude-skill
|
|
4
4
|
*
|
|
5
|
-
* CLI
|
|
6
|
-
* mcp-html-skill
|
|
7
|
-
* mcp-html-skill render
|
|
5
|
+
* CLI for MCP-HTML-Bridge:
|
|
6
|
+
* mcp-html-skill config — configure LLM provider
|
|
7
|
+
* mcp-html-skill render — render JSON to HTML
|
|
8
|
+
* mcp-html-skill install — install /mcp-render into Claude Code
|
|
8
9
|
*/
|
|
9
10
|
import { Command } from 'commander';
|
|
10
11
|
import { install } from './install.js';
|
|
11
12
|
import { render } from './render.js';
|
|
13
|
+
import { config } from './config-cmd.js';
|
|
12
14
|
const program = new Command();
|
|
13
15
|
program
|
|
14
16
|
.name('mcp-html-skill')
|
|
15
|
-
.description('
|
|
16
|
-
.version('0.
|
|
17
|
+
.description('MCP-HTML-Bridge — render any JSON as self-contained HTML')
|
|
18
|
+
.version('0.5.0');
|
|
17
19
|
program
|
|
18
|
-
.command('
|
|
19
|
-
.description('
|
|
20
|
-
.option('--
|
|
21
|
-
.option('--
|
|
22
|
-
.
|
|
20
|
+
.command('config')
|
|
21
|
+
.description('Configure LLM provider (saved to ~/.mcp-html-bridge/config.json)')
|
|
22
|
+
.option('--api-url <url>', 'LLM API base URL')
|
|
23
|
+
.option('--api-key <key>', 'LLM API key')
|
|
24
|
+
.option('--model <model>', 'LLM model name')
|
|
25
|
+
.option('--show', 'Show current config')
|
|
26
|
+
.option('--clear', 'Clear saved config')
|
|
27
|
+
.action(config);
|
|
23
28
|
program
|
|
24
29
|
.command('render')
|
|
25
30
|
.description('Render MCP tool schema or result data as HTML')
|
|
26
31
|
.option('--schema <file>', 'JSON Schema file (renders input form)')
|
|
27
32
|
.option('--data <file>', 'JSON data file (renders result view)')
|
|
28
33
|
.option('--json <string>', 'Inline JSON string')
|
|
29
|
-
.option('--mode <mode>', 'Force render mode: schema | data
|
|
34
|
+
.option('--mode <mode>', 'Force render mode: schema | data')
|
|
30
35
|
.option('--title <title>', 'Page title')
|
|
31
|
-
.option('--tool-name <name>', 'Tool name
|
|
36
|
+
.option('--tool-name <name>', 'Tool name')
|
|
32
37
|
.option('--tool-desc <desc>', 'Tool description')
|
|
33
38
|
.option('--debug', 'Enable debug playground panel')
|
|
34
39
|
.option('--output <dir>', 'Output directory', '/tmp/mcp-html-bridge')
|
|
35
40
|
.option('--open', 'Open in browser after rendering')
|
|
36
|
-
.option('--stdout', 'Print raw HTML to stdout
|
|
41
|
+
.option('--stdout', 'Print raw HTML to stdout')
|
|
42
|
+
.option('--api-url <url>', 'LLM API URL (overrides config)')
|
|
43
|
+
.option('--api-key <key>', 'LLM API key (overrides config)')
|
|
44
|
+
.option('--model <model>', 'LLM model (overrides config)')
|
|
45
|
+
.option('--no-llm', 'Force structural rendering, skip LLM')
|
|
37
46
|
.action(render);
|
|
47
|
+
program
|
|
48
|
+
.command('install')
|
|
49
|
+
.description('Install /mcp-render command into Claude Code')
|
|
50
|
+
.option('--global', 'Install to global ~/.claude/commands/ (default)', true)
|
|
51
|
+
.option('--project', 'Install to current project .claude/commands/')
|
|
52
|
+
.action(install);
|
|
38
53
|
program.parse();
|
|
39
54
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AACH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAEzC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,gBAAgB,CAAC;KACtB,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,kEAAkE,CAAC;KAC/E,MAAM,CAAC,iBAAiB,EAAE,kBAAkB,CAAC;KAC7C,MAAM,CAAC,iBAAiB,EAAE,aAAa,CAAC;KACxC,MAAM,CAAC,iBAAiB,EAAE,gBAAgB,CAAC;KAC3C,MAAM,CAAC,QAAQ,EAAE,qBAAqB,CAAC;KACvC,MAAM,CAAC,SAAS,EAAE,oBAAoB,CAAC;KACvC,MAAM,CAAC,MAAM,CAAC,CAAC;AAElB,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,kCAAkC,CAAC;KAC3D,MAAM,CAAC,iBAAiB,EAAE,YAAY,CAAC;KACvC,MAAM,CAAC,oBAAoB,EAAE,WAAW,CAAC;KACzC,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,0BAA0B,CAAC;KAC9C,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;KAC3D,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,CAAC;KAC3D,MAAM,CAAC,iBAAiB,EAAE,8BAA8B,CAAC;KACzD,MAAM,CAAC,UAAU,EAAE,sCAAsC,CAAC;KAC1D,MAAM,CAAC,MAAM,CAAC,CAAC;AAElB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,8CAA8C,CAAC;KAC3D,MAAM,CAAC,UAAU,EAAE,iDAAiD,EAAE,IAAI,CAAC;KAC3E,MAAM,CAAC,WAAW,EAAE,8CAA8C,CAAC;KACnE,MAAM,CAAC,OAAO,CAAC,CAAC;AAEnB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
package/dist/render.d.ts
CHANGED
|
@@ -10,7 +10,11 @@ interface RenderOptions {
|
|
|
10
10
|
output?: string;
|
|
11
11
|
open?: boolean;
|
|
12
12
|
stdout?: boolean;
|
|
13
|
+
apiUrl?: string;
|
|
14
|
+
apiKey?: string;
|
|
15
|
+
model?: string;
|
|
16
|
+
llm?: boolean;
|
|
13
17
|
}
|
|
14
|
-
export declare function render(options: RenderOptions): void
|
|
18
|
+
export declare function render(options: RenderOptions): Promise<void>;
|
|
15
19
|
export {};
|
|
16
20
|
//# sourceMappingURL=render.d.ts.map
|
package/dist/render.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAYA,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;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAiED,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA4ClE"}
|
package/dist/render.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Render MCP tool schema or data as a self-contained HTML page.
|
|
3
|
+
*
|
|
4
|
+
* LLM config resolution order:
|
|
5
|
+
* CLI flags > env vars > ~/.mcp-html-bridge/config.json > no LLM (structural)
|
|
3
6
|
*/
|
|
4
7
|
import { readFileSync, writeFileSync, mkdirSync } from 'node:fs';
|
|
5
8
|
import { join } from 'node:path';
|
|
6
9
|
import { execSync } from 'node:child_process';
|
|
7
|
-
import { renderFromSchema, renderFromData } from '@mcp-html-bridge/ui-engine';
|
|
10
|
+
import { renderFromSchema, renderFromData, renderFromDataSync } from '@mcp-html-bridge/ui-engine';
|
|
11
|
+
import { resolveLLMConfig } from './config.js';
|
|
8
12
|
function loadJSON(options) {
|
|
9
13
|
let raw;
|
|
10
14
|
if (options.schema) {
|
|
@@ -21,7 +25,6 @@ function loadJSON(options) {
|
|
|
21
25
|
parsed.type === 'object' && parsed.properties;
|
|
22
26
|
return { json: parsed, detectedMode: isSchema ? 'schema' : 'data' };
|
|
23
27
|
}
|
|
24
|
-
// Try reading from stdin if piped
|
|
25
28
|
try {
|
|
26
29
|
raw = readFileSync('/dev/stdin', 'utf-8');
|
|
27
30
|
if (raw.trim()) {
|
|
@@ -32,33 +35,12 @@ function loadJSON(options) {
|
|
|
32
35
|
}
|
|
33
36
|
}
|
|
34
37
|
catch {
|
|
35
|
-
// Not piped
|
|
38
|
+
// Not piped
|
|
36
39
|
}
|
|
37
|
-
console.error('
|
|
38
|
-
console.error(' Use --schema <file>, --data <file>, --json <string>, or pipe via stdin.');
|
|
40
|
+
console.error('Error: No input. Use --schema, --data, --json, or pipe via stdin.');
|
|
39
41
|
process.exit(1);
|
|
40
42
|
}
|
|
41
|
-
function
|
|
42
|
-
if (mode === 'schema') {
|
|
43
|
-
return renderFromSchema(json, {
|
|
44
|
-
title: options.title ?? options.toolName ?? 'MCP Tool Input',
|
|
45
|
-
toolName: options.toolName,
|
|
46
|
-
toolDescription: options.toolDesc,
|
|
47
|
-
debug: options.debug ?? true,
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
return renderFromData(json, {
|
|
51
|
-
title: options.title ?? options.toolName ?? 'MCP Tool Result',
|
|
52
|
-
toolName: options.toolName,
|
|
53
|
-
toolDescription: options.toolDesc,
|
|
54
|
-
debug: options.debug,
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
export function render(options) {
|
|
58
|
-
const { json, detectedMode } = loadJSON(options);
|
|
59
|
-
const mode = options.mode ?? detectedMode;
|
|
60
|
-
const html = buildHTML(json, mode, options);
|
|
61
|
-
// --stdout: print raw HTML to stdout (for embedding in response streams)
|
|
43
|
+
function writeAndOpen(html, options) {
|
|
62
44
|
if (options.stdout) {
|
|
63
45
|
process.stdout.write(html);
|
|
64
46
|
return;
|
|
@@ -77,8 +59,51 @@ export function render(options) {
|
|
|
77
59
|
execSync(`${cmd} "${outPath}"`, { stdio: 'ignore' });
|
|
78
60
|
}
|
|
79
61
|
catch {
|
|
80
|
-
//
|
|
62
|
+
// Can't open browser
|
|
81
63
|
}
|
|
82
64
|
}
|
|
83
65
|
}
|
|
66
|
+
export async function render(options) {
|
|
67
|
+
const { json, detectedMode } = loadJSON(options);
|
|
68
|
+
const mode = options.mode ?? detectedMode;
|
|
69
|
+
if (mode === 'schema') {
|
|
70
|
+
const html = renderFromSchema(json, {
|
|
71
|
+
title: options.title ?? options.toolName ?? 'MCP Tool Input',
|
|
72
|
+
toolName: options.toolName,
|
|
73
|
+
toolDescription: options.toolDesc,
|
|
74
|
+
debug: options.debug ?? true,
|
|
75
|
+
});
|
|
76
|
+
writeAndOpen(html, options);
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
// Resolve LLM config (CLI flags > env vars > config file)
|
|
80
|
+
// --no-llm forces structural rendering
|
|
81
|
+
const llm = options.llm === false
|
|
82
|
+
? undefined
|
|
83
|
+
: resolveLLMConfig({
|
|
84
|
+
apiUrl: options.apiUrl,
|
|
85
|
+
apiKey: options.apiKey,
|
|
86
|
+
model: options.model,
|
|
87
|
+
});
|
|
88
|
+
if (llm) {
|
|
89
|
+
console.error(` LLM: ${llm.model} @ ${llm.apiUrl}`);
|
|
90
|
+
const html = await renderFromData(json, {
|
|
91
|
+
title: options.title ?? options.toolName ?? 'MCP Tool Result',
|
|
92
|
+
toolName: options.toolName,
|
|
93
|
+
toolDescription: options.toolDesc,
|
|
94
|
+
debug: options.debug,
|
|
95
|
+
llm,
|
|
96
|
+
});
|
|
97
|
+
writeAndOpen(html, options);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
const html = renderFromDataSync(json, {
|
|
101
|
+
title: options.title ?? options.toolName ?? 'MCP Tool Result',
|
|
102
|
+
toolName: options.toolName,
|
|
103
|
+
toolDescription: options.toolDesc,
|
|
104
|
+
debug: options.debug,
|
|
105
|
+
});
|
|
106
|
+
writeAndOpen(html, options);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
84
109
|
//# sourceMappingURL=render.js.map
|
package/dist/render.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../src/render.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED