@mcp-native/a2ui 0.0.1 → 0.0.3

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/README.md CHANGED
@@ -1,5 +1,103 @@
1
+ <div align="center">
2
+
1
3
  # @mcp-native/a2ui
2
4
 
3
- Part of MCP Native — a native UI runtime for Model Context Protocol applications.
5
+ ### Strict parsing for declarative MCP Native surfaces
6
+
7
+ [![npm](https://img.shields.io/npm/v/@mcp-native/a2ui)](https://www.npmjs.com/package/@mcp-native/a2ui)
8
+ [![downloads](https://img.shields.io/npm/dm/@mcp-native/a2ui)](https://www.npmjs.com/package/@mcp-native/a2ui)
9
+ [![license](https://img.shields.io/npm/l/@mcp-native/a2ui)](https://github.com/pablospaniard/mcp-native/blob/main/LICENSE)
10
+
11
+ [GitHub](https://github.com/pablospaniard/mcp-native) · [Architecture](https://github.com/pablospaniard/mcp-native/blob/main/docs/RFC-0001-architecture.md) · [Security](https://github.com/pablospaniard/mcp-native/blob/main/SECURITY.md)
12
+
13
+ </div>
14
+
15
+ > **Experimental:** this package implements MCP Native's deliberately small `0.1` proof-of-concept surface. It is not a claim of complete A2UI specification compatibility.
16
+
17
+ `@mcp-native/a2ui` parses untrusted JSON or JavaScript values into a validated, typed surface before a host renders anything. Unknown versions, node types, action types, and invalid JSON values fail closed with an `A2uiParseError`.
18
+
19
+ ## Install
20
+
21
+ ```bash
22
+ npm install @mcp-native/a2ui
23
+ ```
24
+
25
+ `@mcp-native/core` is installed as a dependency. The package is ESM-only and includes TypeScript declarations.
26
+
27
+ ## Quick start
28
+
29
+ ```ts
30
+ import { parseA2uiSurface } from "@mcp-native/a2ui";
31
+
32
+ const surface = parseA2uiSurface({
33
+ version: "0.1",
34
+ root: {
35
+ id: "welcome",
36
+ type: "container",
37
+ children: [
38
+ { id: "title", type: "text", text: "Welcome" },
39
+ {
40
+ id: "name",
41
+ type: "text-input",
42
+ label: "Display name",
43
+ binding: "profile.displayName",
44
+ },
45
+ {
46
+ id: "save",
47
+ type: "button",
48
+ label: "Save",
49
+ action: {
50
+ type: "tool",
51
+ name: "save_profile",
52
+ arguments: { source: "onboarding" },
53
+ },
54
+ },
55
+ ],
56
+ },
57
+ });
58
+ ```
59
+
60
+ The parser also accepts a JSON string:
61
+
62
+ ```ts
63
+ const surface = parseA2uiSurface(
64
+ '{"version":"0.1","root":{"id":"title","type":"text","text":"Hello"}}',
65
+ );
66
+ ```
67
+
68
+ ## Supported surface
69
+
70
+ | Node | Required fields | Purpose |
71
+ | ------------ | ----------------------- | ------------------------------------------------------ |
72
+ | `container` | `id`, `children` | Groups nested surface nodes. |
73
+ | `text` | `id`, `text` | Declares trusted text content. |
74
+ | `button` | `id`, `label`, `action` | Declares a tool action for host-controlled dispatch. |
75
+ | `text-input` | `id`, `label` | Declares an input with optional `value` and `binding`. |
76
+
77
+ The only supported action is `{ type: "tool", name, arguments? }`. Arguments must contain JSON-safe values.
78
+
79
+ ## Public API
80
+
81
+ | Export | Purpose |
82
+ | ------------------------- | ---------------------------------------------------- |
83
+ | `parseA2uiSurface` | Validates input and returns a typed `A2uiSurface`. |
84
+ | `A2uiParseError` | Error thrown for malformed or unsupported input. |
85
+ | `A2UI_VERSION` | Current proof-of-concept wire version, `"0.1"`. |
86
+ | `A2uiSurface`, `A2uiNode` | Validated surface and node unions. |
87
+ | Node interfaces | Typed container, text, button, and text-input nodes. |
88
+
89
+ ## Security behavior
90
+
91
+ - Input is treated as untrusted at the parser boundary.
92
+ - Unknown surface versions, nodes, and actions are rejected.
93
+ - Tool arguments are recursively constrained to JSON values.
94
+ - Parsing never resolves components or executes server-provided code.
95
+ - Successful parsing does not grant device capabilities or permission to call a tool; the host still owns those decisions.
96
+
97
+ ## Next layer
98
+
99
+ Use [`@mcp-native/react-native`](https://www.npmjs.com/package/@mcp-native/react-native) to convert a validated surface into a trusted native render plan, or install [`mcp-native`](https://www.npmjs.com/package/mcp-native) for the complete public API.
100
+
101
+ ## License
4
102
 
5
- Early development.
103
+ [MIT](https://github.com/pablospaniard/mcp-native/blob/main/LICENSE)
@@ -0,0 +1,35 @@
1
+ import type { ToolAction } from "@mcp-native/core";
2
+ export declare const A2UI_VERSION: "0.1";
3
+ interface A2uiNodeBase {
4
+ readonly id: string;
5
+ }
6
+ export interface A2uiContainerNode extends A2uiNodeBase {
7
+ readonly type: "container";
8
+ readonly children: readonly A2uiNode[];
9
+ }
10
+ export interface A2uiTextNode extends A2uiNodeBase {
11
+ readonly type: "text";
12
+ readonly text: string;
13
+ }
14
+ export interface A2uiButtonNode extends A2uiNodeBase {
15
+ readonly type: "button";
16
+ readonly label: string;
17
+ readonly action: ToolAction;
18
+ }
19
+ export interface A2uiTextInputNode extends A2uiNodeBase {
20
+ readonly type: "text-input";
21
+ readonly label: string;
22
+ readonly value?: string;
23
+ readonly binding?: string;
24
+ }
25
+ export type A2uiNode = A2uiButtonNode | A2uiContainerNode | A2uiTextInputNode | A2uiTextNode;
26
+ export interface A2uiSurface {
27
+ readonly version: typeof A2UI_VERSION;
28
+ readonly root: A2uiNode;
29
+ }
30
+ export declare class A2uiParseError extends Error {
31
+ constructor(message: string);
32
+ }
33
+ export declare function parseA2uiSurface(input: string | unknown): A2uiSurface;
34
+ export {};
35
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAyB,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE1E,eAAO,MAAM,YAAY,EAAG,KAAc,CAAC;AAE3C,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAC3B,QAAQ,CAAC,QAAQ,EAAE,SAAS,QAAQ,EAAE,CAAC;CACxC;AAED,MAAM,WAAW,YAAa,SAAQ,YAAY;IAChD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,cAAe,SAAQ,YAAY;IAClD,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;CAC7B;AAED,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,QAAQ,CAAC,IAAI,EAAE,YAAY,CAAC;IAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,QAAQ,GAAG,cAAc,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,YAAY,CAAC;AAE7F,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,OAAO,YAAY,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CACzB;AAED,qBAAa,cAAe,SAAQ,KAAK;IACvC,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,WAAW,CAsBrE"}
package/dist/index.js ADDED
@@ -0,0 +1,121 @@
1
+ export const A2UI_VERSION = "0.1";
2
+ export class A2uiParseError extends Error {
3
+ constructor(message) {
4
+ super(message);
5
+ this.name = "A2uiParseError";
6
+ }
7
+ }
8
+ export function parseA2uiSurface(input) {
9
+ let value = input;
10
+ if (typeof input === "string") {
11
+ try {
12
+ value = JSON.parse(input);
13
+ }
14
+ catch (error) {
15
+ const message = error instanceof Error ? error.message : "unknown JSON error";
16
+ throw new A2uiParseError(`Invalid JSON: ${message}`);
17
+ }
18
+ }
19
+ const surface = expectObject(value, "surface");
20
+ const version = expectString(surface.version, "surface.version");
21
+ if (version !== A2UI_VERSION) {
22
+ throw new A2uiParseError(`Unsupported A2UI version: ${version}`);
23
+ }
24
+ return {
25
+ version: A2UI_VERSION,
26
+ root: parseNode(surface.root, "surface.root"),
27
+ };
28
+ }
29
+ function parseNode(value, path) {
30
+ const node = expectObject(value, path);
31
+ const id = expectString(node.id, `${path}.id`);
32
+ const type = expectString(node.type, `${path}.type`);
33
+ switch (type) {
34
+ case "container":
35
+ return {
36
+ id,
37
+ type,
38
+ children: expectArray(node.children, `${path}.children`).map((child, index) => parseNode(child, `${path}.children[${index}]`)),
39
+ };
40
+ case "text":
41
+ return { id, type, text: expectString(node.text, `${path}.text`) };
42
+ case "button":
43
+ return {
44
+ id,
45
+ type,
46
+ label: expectString(node.label, `${path}.label`),
47
+ action: parseToolAction(node.action, `${path}.action`),
48
+ };
49
+ case "text-input": {
50
+ const label = expectString(node.label, `${path}.label`);
51
+ const valueField = optionalString(node.value, `${path}.value`);
52
+ const binding = optionalString(node.binding, `${path}.binding`);
53
+ return {
54
+ id,
55
+ type,
56
+ label,
57
+ ...(valueField === undefined ? {} : { value: valueField }),
58
+ ...(binding === undefined ? {} : { binding }),
59
+ };
60
+ }
61
+ default:
62
+ throw new A2uiParseError(`Unsupported node type at ${path}: ${type}`);
63
+ }
64
+ }
65
+ function parseToolAction(value, path) {
66
+ const action = expectObject(value, path);
67
+ const type = expectString(action.type, `${path}.type`);
68
+ if (type !== "tool") {
69
+ throw new A2uiParseError(`Unsupported action type at ${path}: ${type}`);
70
+ }
71
+ const arguments_ = action.arguments;
72
+ return {
73
+ type,
74
+ name: expectString(action.name, `${path}.name`),
75
+ ...(arguments_ === undefined
76
+ ? {}
77
+ : { arguments: expectJsonObject(arguments_, `${path}.arguments`) }),
78
+ };
79
+ }
80
+ function expectObject(value, path) {
81
+ if (value === null || typeof value !== "object" || Array.isArray(value)) {
82
+ throw new A2uiParseError(`Expected an object at ${path}`);
83
+ }
84
+ return value;
85
+ }
86
+ function expectArray(value, path) {
87
+ if (!Array.isArray(value)) {
88
+ throw new A2uiParseError(`Expected an array at ${path}`);
89
+ }
90
+ return value;
91
+ }
92
+ function expectString(value, path) {
93
+ if (typeof value !== "string") {
94
+ throw new A2uiParseError(`Expected a string at ${path}`);
95
+ }
96
+ return value;
97
+ }
98
+ function optionalString(value, path) {
99
+ return value === undefined ? undefined : expectString(value, path);
100
+ }
101
+ function expectJsonObject(value, path) {
102
+ const object = expectObject(value, path);
103
+ const result = {};
104
+ for (const [key, child] of Object.entries(object)) {
105
+ result[key] = expectJsonValue(child, `${path}.${key}`);
106
+ }
107
+ return result;
108
+ }
109
+ function expectJsonValue(value, path) {
110
+ if (value === null ||
111
+ typeof value === "boolean" ||
112
+ typeof value === "number" ||
113
+ typeof value === "string") {
114
+ return value;
115
+ }
116
+ if (Array.isArray(value)) {
117
+ return value.map((child, index) => expectJsonValue(child, `${path}[${index}]`));
118
+ }
119
+ return expectJsonObject(value, path);
120
+ }
121
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,12 +1,42 @@
1
1
  {
2
2
  "name": "@mcp-native/a2ui",
3
- "version": "0.0.1",
4
- "main": "index.js",
5
- "scripts": {
6
- "test": "echo \"Error: no test specified\" && exit 1"
3
+ "version": "0.0.3",
4
+ "description": "A2UI parsing and bindings for MCP Native.",
5
+ "keywords": [
6
+ "a2ui",
7
+ "declarative-ui",
8
+ "mcp",
9
+ "model-context-protocol",
10
+ "typescript"
11
+ ],
12
+ "homepage": "https://github.com/pablospaniard/mcp-native#readme",
13
+ "bugs": {
14
+ "url": "https://github.com/pablospaniard/mcp-native/issues"
7
15
  },
8
- "keywords": [],
9
- "author": "",
10
16
  "license": "MIT",
11
- "description": "MCP Native - a2ui package"
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/pablospaniard/mcp-native.git",
20
+ "directory": "packages/a2ui"
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "README.md"
25
+ ],
26
+ "type": "module",
27
+ "sideEffects": false,
28
+ "main": "./dist/index.js",
29
+ "types": "./dist/index.d.ts",
30
+ "exports": {
31
+ ".": {
32
+ "types": "./dist/index.d.ts",
33
+ "import": "./dist/index.js"
34
+ }
35
+ },
36
+ "publishConfig": {
37
+ "access": "public"
38
+ },
39
+ "dependencies": {
40
+ "@mcp-native/core": "^0.0.3"
41
+ }
12
42
  }
package/index.js DELETED
@@ -1 +0,0 @@
1
- module.exports = {};