@brander/mcp-tools 0.2.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.
Files changed (57) hide show
  1. package/README.md +126 -0
  2. package/dist/app/index.html +8406 -0
  3. package/dist/server/brand/brand-loader.d.ts +26 -0
  4. package/dist/server/brand/brand-loader.d.ts.map +1 -0
  5. package/dist/server/brand/brand-loader.js +89 -0
  6. package/dist/server/brand/brand-types.d.ts +93 -0
  7. package/dist/server/brand/brand-types.d.ts.map +1 -0
  8. package/dist/server/brand/brand-types.js +32 -0
  9. package/dist/server/config/server-config.d.ts +16 -0
  10. package/dist/server/config/server-config.d.ts.map +1 -0
  11. package/dist/server/config/server-config.js +71 -0
  12. package/dist/server/config/types.d.ts +21 -0
  13. package/dist/server/config/types.d.ts.map +1 -0
  14. package/dist/server/config/types.js +4 -0
  15. package/dist/server/elements/click-behaviors.d.ts +13 -0
  16. package/dist/server/elements/click-behaviors.d.ts.map +1 -0
  17. package/dist/server/elements/click-behaviors.js +71 -0
  18. package/dist/server/elements/element-functions.d.ts +24 -0
  19. package/dist/server/elements/element-functions.d.ts.map +1 -0
  20. package/dist/server/elements/element-functions.js +167 -0
  21. package/dist/server/index.d.ts +9 -0
  22. package/dist/server/index.d.ts.map +1 -0
  23. package/dist/server/index.js +30 -0
  24. package/dist/server/lib-entry.d.ts +16 -0
  25. package/dist/server/lib-entry.d.ts.map +1 -0
  26. package/dist/server/lib-entry.js +14 -0
  27. package/dist/server/register.d.ts +35 -0
  28. package/dist/server/register.d.ts.map +1 -0
  29. package/dist/server/register.js +49 -0
  30. package/dist/server/resource/html-loader.d.ts +9 -0
  31. package/dist/server/resource/html-loader.d.ts.map +1 -0
  32. package/dist/server/resource/html-loader.js +20 -0
  33. package/dist/server/resource/resource-registry.d.ts +15 -0
  34. package/dist/server/resource/resource-registry.d.ts.map +1 -0
  35. package/dist/server/resource/resource-registry.js +45 -0
  36. package/dist/server/server.d.ts +13 -0
  37. package/dist/server/server.d.ts.map +1 -0
  38. package/dist/server/server.js +36 -0
  39. package/dist/server/tools/element-definitions.d.ts +15 -0
  40. package/dist/server/tools/element-definitions.d.ts.map +1 -0
  41. package/dist/server/tools/element-definitions.js +51 -0
  42. package/dist/server/tools/generate-screen-schema.d.ts +262 -0
  43. package/dist/server/tools/generate-screen-schema.d.ts.map +1 -0
  44. package/dist/server/tools/generate-screen-schema.js +227 -0
  45. package/dist/server/tools/tool-handler.d.ts +11 -0
  46. package/dist/server/tools/tool-handler.d.ts.map +1 -0
  47. package/dist/server/tools/tool-handler.js +83 -0
  48. package/dist/server/tools/tool-registry.d.ts +15 -0
  49. package/dist/server/tools/tool-registry.d.ts.map +1 -0
  50. package/dist/server/tools/tool-registry.js +30 -0
  51. package/dist/server/types/element-types.d.ts +37 -0
  52. package/dist/server/types/element-types.d.ts.map +1 -0
  53. package/dist/server/types/element-types.js +22 -0
  54. package/dist/server/types/mcp-types.d.ts +52 -0
  55. package/dist/server/types/mcp-types.d.ts.map +1 -0
  56. package/dist/server/types/mcp-types.js +4 -0
  57. package/package.json +56 -0
package/README.md ADDED
@@ -0,0 +1,126 @@
1
+ # @brander/mcp-tools
2
+
3
+ Add branded, interactive UI to any MCP server in one line.
4
+
5
+ `@brander/mcp-tools` registers a `generate_screen` tool on your MCP server that renders 14 element types (charts, tables, grids, forms, etc.) with your brand's colors, fonts, and styling — directly inside Claude Desktop.
6
+
7
+ ## Quick Start
8
+
9
+ ```bash
10
+ npm install @brander/mcp-tools
11
+ ```
12
+
13
+ ```typescript
14
+ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
15
+ import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
16
+ import { registerBranderTools } from "@brander/mcp-tools";
17
+
18
+ const server = new McpServer({ name: "my-app", version: "1.0.0" });
19
+
20
+ // Register your own business tools...
21
+ // server.registerTool("search_products", { ... }, handler);
22
+
23
+ // One line — adds branded UI rendering
24
+ await registerBranderTools(server, {
25
+ projectId: process.env.BRANDER_PROJECT_ID!,
26
+ betaKey: process.env.BRANDER_BETA_KEY!,
27
+ });
28
+
29
+ await server.connect(new StdioServerTransport());
30
+ ```
31
+
32
+ ## What It Does
33
+
34
+ When you call `registerBranderTools(server, config)`, it adds:
35
+
36
+ 1. **`generate_screen` tool** — Claude uses this to render branded UI instead of writing raw text. Accepts an array of elements with typed props.
37
+ 2. **MCP App resource** — A self-contained HTML renderer (React + MUI) that Claude Desktop loads to display the elements.
38
+
39
+ Your brand settings (colors, fonts, layout, dark mode) are loaded from the BranderUX API at startup and applied to every rendered screen.
40
+
41
+ ## 14 Element Types
42
+
43
+ | Element | Description |
44
+ |---|---|
45
+ | `header` | Page title with subtitle |
46
+ | `chat-bubble` | Text/markdown response |
47
+ | `stats-grid` | KPI cards with trends |
48
+ | `data-table` | Sortable, filterable table |
49
+ | `line-chart` | Time series chart |
50
+ | `pie-chart` | Proportional data |
51
+ | `bar-chart` | Category comparison |
52
+ | `item-grid` | Product/item cards |
53
+ | `item-card` | Single item detail card |
54
+ | `image` | Image display |
55
+ | `details-data` | Key-value detail sections |
56
+ | `form` | Dynamic input form |
57
+ | `button` | Action/link button |
58
+ | `alert` | Notification banner |
59
+
60
+ ## Configuration
61
+
62
+ ```typescript
63
+ interface BranderToolsConfig {
64
+ /** BranderUX project ID */
65
+ projectId: string;
66
+
67
+ /** Beta design partner key (bux_dp_xxx) */
68
+ betaKey: string;
69
+
70
+ /** API base URL (defaults to https://app.branderux.com) */
71
+ apiBaseUrl?: string;
72
+
73
+ /** Path to local brandSettings.json for development */
74
+ brandSettingsPath?: string;
75
+ }
76
+ ```
77
+
78
+ ## Claude Desktop Setup
79
+
80
+ ```json
81
+ {
82
+ "mcpServers": {
83
+ "my-app": {
84
+ "command": "node",
85
+ "args": ["/path/to/your/dist/index.js"],
86
+ "env": {
87
+ "BRANDER_PROJECT_ID": "your_project_id",
88
+ "BRANDER_BETA_KEY": "bux_dp_your_key"
89
+ }
90
+ }
91
+ }
92
+ }
93
+ ```
94
+
95
+ ## How It Works
96
+
97
+ 1. At startup, `registerBranderTools` loads your project's brand settings from the BranderUX API
98
+ 2. It registers the `generate_screen` tool with Zod schemas for all 14 element types
99
+ 3. It registers an MCP App resource — a single-file HTML bundle containing all React components
100
+ 4. When Claude calls `generate_screen`, it returns structured data + a reference to the HTML resource
101
+ 5. Claude Desktop loads the HTML resource and renders branded UI with your data
102
+
103
+ ## Interactive Elements
104
+
105
+ Elements support click interactions via `clickQuery`. When a user clicks a table row, chart segment, or card, the query is sent back to Claude to continue the conversation:
106
+
107
+ ```typescript
108
+ // Claude generates this tool call:
109
+ generate_screen({
110
+ elements: [{
111
+ elementType: "item-grid",
112
+ props: { items: [...] },
113
+ clickQuery: "Show details for [title] including specs and reviews"
114
+ }]
115
+ })
116
+ ```
117
+
118
+ Placeholders like `[title]`, `[id]`, `[name]` are filled with the clicked element's data.
119
+
120
+ ## Example
121
+
122
+ See [BranderUX/mcp-demo](https://github.com/BranderUX/mcp-demo) for a full reference implementation with a fake e-commerce dataset (TechStore Pro).
123
+
124
+ ## License
125
+
126
+ MIT