@openwop/openwop-conformance 2.35.1 → 2.36.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 (120) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/README.md +3 -3
  3. package/coverage.md +13 -1
  4. package/dist/spec-artifacts.lock.json +2 -2
  5. package/fixtures/a2ui-v09/negative-event-name-deleteall.json +139 -0
  6. package/fixtures/a2ui-v09/negative-extra-property.json +140 -0
  7. package/fixtures/a2ui-v09/negative-foreign-catalog.json +139 -0
  8. package/fixtures/a2ui-v09/negative-formatstring-label.json +145 -0
  9. package/fixtures/a2ui-v09/negative-functioncall-openurl.json +129 -0
  10. package/fixtures/a2ui-v09/negative-image-component.json +145 -0
  11. package/fixtures/a2ui-v09/negative-textfield-obscured.json +140 -0
  12. package/fixtures/a2ui-v09/negative-theme-iconurl.json +142 -0
  13. package/fixtures/a2ui-v09/positive-approve-brief.json +139 -0
  14. package/fixtures/conformance-artifact-emit.json +28 -0
  15. package/fixtures/conformance-clarification-nested.json +53 -0
  16. package/fixtures/conformance-clarification-sensitive.json +49 -0
  17. package/fixtures/conformance-credential.json +25 -0
  18. package/fixtures/conformance-mcp-client.json +28 -0
  19. package/fixtures/interrupt-payloads/interrupt-payload-approval.json +1 -0
  20. package/fixtures/interrupt-payloads/interrupt-payload-clarification.json +1 -0
  21. package/fixtures/interrupt-payloads/interrupt-payload-conversation-close.json +1 -0
  22. package/fixtures/interrupt-payloads/interrupt-payload-conversation-exchange.json +1 -0
  23. package/fixtures/interrupt-payloads/interrupt-payload-conversation-start.json +1 -0
  24. package/fixtures/interrupt-payloads/interrupt-payload-custom.json +1 -0
  25. package/fixtures/interrupt-payloads/interrupt-payload-external-event.json +1 -0
  26. package/fixtures/interrupt-payloads/interrupt-payload-low-confidence.json +1 -0
  27. package/fixtures/interrupt-payloads/negative-approval-with-clarification-data.json +1 -0
  28. package/fixtures/interrupt-payloads/negative-conversation-close-with-conversation-start-data.json +1 -0
  29. package/fixtures/interrupt-payloads/negative-conversation-start-with-conversation-exchange-data.json +1 -0
  30. package/fixtures/interrupt-payloads/negative-custom-with-conversation-start-data.json +1 -0
  31. package/fixtures/interrupt-payloads/negative-low-confidence-with-custom-data.json +1 -0
  32. package/fixtures/node-pack-runtime/negative-entry-mismatch.json +31 -0
  33. package/fixtures/node-pack-runtime/negative-headers.json +37 -0
  34. package/fixtures/node-pack-runtime/negative-http.json +31 -0
  35. package/fixtures/node-pack-runtime/negative-icons.json +37 -0
  36. package/fixtures/node-pack-runtime/negative-meta.json +36 -0
  37. package/fixtures/node-pack-runtime/negative-non-remote-language.json +31 -0
  38. package/fixtures/node-pack-runtime/negative-packages.json +41 -0
  39. package/fixtures/node-pack-runtime/negative-sse.json +31 -0
  40. package/fixtures/node-pack-runtime/negative-templated-url.json +31 -0
  41. package/fixtures/node-pack-runtime/negative-two-remotes.json +35 -0
  42. package/fixtures/node-pack-runtime/negative-variables.json +38 -0
  43. package/fixtures/node-pack-runtime/negative-version-range.json +31 -0
  44. package/fixtures/node-pack-runtime/positive-every-optional-member.json +40 -0
  45. package/fixtures/node-pack-runtime/positive-rfc-example.json +31 -0
  46. package/fixtures/node-pack-runtime/upstream/mcp-registry-server-2025-12-11.schema.json +574 -0
  47. package/fixtures/oauth-providers/synthetic.json +36 -4
  48. package/fixtures/upstream/a2a-v1.0.1/README.md +24 -0
  49. package/fixtures/upstream/a2a-v1.0.1/a2a.proto +811 -0
  50. package/fixtures/upstream/a2ui-v0.9/README.md +33 -0
  51. package/fixtures/upstream/a2ui-v0.9/catalog.json +1383 -0
  52. package/fixtures/upstream/a2ui-v0.9/common_types.json +305 -0
  53. package/fixtures/upstream/a2ui-v0.9/server_to_client.json +132 -0
  54. package/fixtures.md +139 -0
  55. package/package.json +2 -2
  56. package/requirements.json +4480 -97
  57. package/scenario-majors.json +93 -6
  58. package/schemas/CORPUS-STAMP.json +103 -89
  59. package/src/lib/localized-content.ts +53 -0
  60. package/src/lib/mcp-fake-server.ts +105 -4
  61. package/src/lib/node-pack-runtime.ts +41 -0
  62. package/src/lib/oauth-as-double.ts +316 -0
  63. package/src/lib/protected-resource.ts +88 -0
  64. package/src/lib/standard-webhooks.ts +120 -0
  65. package/src/lib/toolCatalog.ts +54 -4
  66. package/src/lib/trace-context.ts +98 -0
  67. package/src/lib/v2.ts +6 -0
  68. package/src/lib/webhook-receiver.ts +201 -1
  69. package/src/scenarios/artifact-type-pack-manifest-validation.test.ts +10 -1
  70. package/src/scenarios/auth-challenge-no-oracle.test.ts +122 -0
  71. package/src/scenarios/auth-oauth2-client-credentials.test.ts +46 -5
  72. package/src/scenarios/cross-host-traceparent-propagation.test.ts +92 -58
  73. package/src/scenarios/debugBundle.test.ts +41 -0
  74. package/src/scenarios/fixtures-valid.test.ts +72 -0
  75. package/src/scenarios/inbound-credential-no-passthrough.test.ts +115 -0
  76. package/src/scenarios/interrupt-approver-routing.test.ts +3 -0
  77. package/src/scenarios/localized-content-delivery.test.ts +26 -15
  78. package/src/scenarios/mcp-current-auth-boundary.test.ts +38 -0
  79. package/src/scenarios/mcp-tool-roundtrip.test.ts +29 -0
  80. package/src/scenarios/otel-mcp-semconv-projection.test.ts +85 -0
  81. package/src/scenarios/tool-catalog-compact-projection.test.ts +28 -14
  82. package/src/scenarios/tool-catalog-projection.test.ts +48 -12
  83. package/src/scenarios/tool-descriptor-shape.test.ts +34 -13
  84. package/src/scenarios/v2-a2a-agent-cards.test.ts +305 -0
  85. package/src/scenarios/v2-a2a-operation-map.test.ts +310 -0
  86. package/src/scenarios/v2-a2ui-v09-surface.test.ts +283 -0
  87. package/src/scenarios/v2-advertised-fixtures-exist.test.ts +2 -2
  88. package/src/scenarios/v2-artifact-a2a-shape.test.ts +122 -0
  89. package/src/scenarios/v2-auth-challenge.test.ts +119 -0
  90. package/src/scenarios/v2-bound-id-kinds.test.ts +1 -1
  91. package/src/scenarios/v2-callback-url-guarded.test.ts +2 -2
  92. package/src/scenarios/v2-capability-maturity-bounded.test.ts +108 -0
  93. package/src/scenarios/v2-configurable-closed.test.ts +1 -1
  94. package/src/scenarios/v2-content-locale-keys.test.ts +92 -0
  95. package/src/scenarios/v2-conversation-turn-parts.test.ts +74 -0
  96. package/src/scenarios/v2-credential-interrupt.test.ts +253 -0
  97. package/src/scenarios/v2-effect-identity-business-key.test.ts +2 -2
  98. package/src/scenarios/v2-fork-a-v1-run.test.ts +1 -1
  99. package/src/scenarios/v2-implementation-informational.test.ts +33 -0
  100. package/src/scenarios/v2-interop-trace-context.test.ts +351 -0
  101. package/src/scenarios/v2-lane-exp-only-bound.test.ts +236 -0
  102. package/src/scenarios/v2-lane-issuer-advertised.test.ts +52 -3
  103. package/src/scenarios/v2-mcp-client-results.test.ts +202 -0
  104. package/src/scenarios/v2-mcp-mount-map.test.ts +308 -0
  105. package/src/scenarios/v2-mcp-tasks.test.ts +503 -0
  106. package/src/scenarios/v2-oauth-client-pkce-state-iss.test.ts +203 -0
  107. package/src/scenarios/v2-oauth-mcp-reach-discovery.test.ts +186 -0
  108. package/src/scenarios/v2-oidc-id-token-audience.test.ts +108 -0
  109. package/src/scenarios/v2-protected-resource-metadata.test.ts +145 -0
  110. package/src/scenarios/v2-run-cancel.test.ts +1 -1
  111. package/src/scenarios/v2-run-fork-prefix.test.ts +4 -4
  112. package/src/scenarios/v2-run-pause-resume.test.ts +1 -1
  113. package/src/scenarios/v2-tool-catalog-annotations.test.ts +100 -0
  114. package/src/scenarios/v2-unmapped-type-refused.test.ts +1 -1
  115. package/src/scenarios/v2-v1-events-translated.test.ts +1 -1
  116. package/src/scenarios/v2-webhook-egress-refusal.test.ts +5 -5
  117. package/src/scenarios/v2-webhook-endpoint-verification.test.ts +124 -0
  118. package/src/scenarios/v2-webhook-message-id-stable.test.ts +124 -0
  119. package/src/scenarios/v2-webhook-secret-rotation.test.ts +132 -0
  120. package/src/scenarios/v2-webhook-standard-webhooks-delivery.test.ts +195 -0
@@ -0,0 +1,139 @@
1
+ {
2
+ "version": "v0.9",
3
+ "catalogId": "https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json",
4
+ "surfaceId": "approve-brief",
5
+ "messages": [
6
+ {
7
+ "version": "v0.9",
8
+ "createSurface": {
9
+ "surfaceId": "approve-brief",
10
+ "catalogId": "https://a2ui.org/specification/v0_9/catalogs/basic/catalog.json"
11
+ }
12
+ },
13
+ {
14
+ "version": "v0.9",
15
+ "updateComponents": {
16
+ "surfaceId": "approve-brief",
17
+ "components": [
18
+ {
19
+ "id": "root",
20
+ "component": "Column",
21
+ "children": [
22
+ "h",
23
+ "name",
24
+ "when",
25
+ "region",
26
+ "agree",
27
+ "submit"
28
+ ]
29
+ },
30
+ {
31
+ "id": "h",
32
+ "component": "Text",
33
+ "text": "Launch brief",
34
+ "variant": "h2"
35
+ },
36
+ {
37
+ "id": "name",
38
+ "component": "TextField",
39
+ "label": "Product name",
40
+ "value": {
41
+ "path": "/name"
42
+ },
43
+ "checks": [
44
+ {
45
+ "condition": {
46
+ "call": "required",
47
+ "args": {
48
+ "value": {
49
+ "path": "/name"
50
+ }
51
+ }
52
+ },
53
+ "message": "Required"
54
+ }
55
+ ]
56
+ },
57
+ {
58
+ "id": "when",
59
+ "component": "DateTimeInput",
60
+ "label": "Launch date",
61
+ "value": {
62
+ "path": "/when"
63
+ },
64
+ "enableDate": true
65
+ },
66
+ {
67
+ "id": "region",
68
+ "component": "ChoicePicker",
69
+ "label": "Region",
70
+ "options": [
71
+ {
72
+ "label": "EU",
73
+ "value": "eu"
74
+ },
75
+ {
76
+ "label": "US",
77
+ "value": "us"
78
+ }
79
+ ],
80
+ "value": {
81
+ "path": "/region"
82
+ },
83
+ "variant": "mutuallyExclusive"
84
+ },
85
+ {
86
+ "id": "agree",
87
+ "component": "CheckBox",
88
+ "label": "I agree",
89
+ "value": {
90
+ "path": "/agree"
91
+ }
92
+ },
93
+ {
94
+ "id": "submit_label",
95
+ "component": "Text",
96
+ "text": "Submit"
97
+ },
98
+ {
99
+ "id": "submit",
100
+ "component": "Button",
101
+ "child": "submit_label",
102
+ "variant": "primary",
103
+ "action": {
104
+ "event": {
105
+ "name": "resume",
106
+ "context": {
107
+ "name": {
108
+ "path": "/name"
109
+ },
110
+ "when": {
111
+ "path": "/when"
112
+ },
113
+ "region": {
114
+ "path": "/region"
115
+ },
116
+ "agree": {
117
+ "path": "/agree"
118
+ }
119
+ }
120
+ }
121
+ }
122
+ }
123
+ ]
124
+ }
125
+ },
126
+ {
127
+ "version": "v0.9",
128
+ "updateDataModel": {
129
+ "surfaceId": "approve-brief",
130
+ "value": {
131
+ "name": "",
132
+ "when": "",
133
+ "region": [],
134
+ "agree": false
135
+ }
136
+ }
137
+ }
138
+ ]
139
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "id": "conformance-artifact-emit",
3
+ "name": "Conformance: Artifact Emit",
4
+ "version": "1.0",
5
+ "description": "RFC 0205 (register G2). One conformance.artifact.emit node produces one artifact and emits artifact.created naming it, so the suite can read it back through getArtifact (GET /runs/{runId}/artifacts/{artifactId}). Opt-in: a host advertises this fixture only when it implements getArtifact. See conformance/fixtures.md and v2-artifact-a2a-shape.test.ts.",
6
+ "nodes": [
7
+ {
8
+ "id": "emit",
9
+ "typeId": "conformance.artifact.emit",
10
+ "name": "Emit artifact",
11
+ "position": { "x": 0, "y": 0 },
12
+ "config": {
13
+ "artifactType": "conformance.artifact.brief",
14
+ "name": "Conformance brief",
15
+ "summary": "The one artifact RFC 0205's read legs name.",
16
+ "data": { "title": "Conformance brief", "items": ["one", "two"] }
17
+ },
18
+ "inputs": {}
19
+ }
20
+ ],
21
+ "edges": [],
22
+ "triggers": [
23
+ { "id": "manual", "type": "manual", "enabled": true }
24
+ ],
25
+ "variables": [],
26
+ "metadata": { "tags": ["conformance", "artifacts", "rfc-0205"] },
27
+ "settings": { "timeout": 10000 }
28
+ }
@@ -0,0 +1,53 @@
1
+ {
2
+ "id": "conformance-clarification-nested",
3
+ "name": "Conformance: Clarification (nested schema)",
4
+ "version": "1.0",
5
+ "description": "RFC 0199 \u00a7D.2(d) probe. Suspends on a clarification whose one answer is an OBJECT. Bridged as MCP requestedSchema { q1: { type: object, \u2026 } } it is not a flat object of primitive properties, so an MCP mount MUST NOT bridge it in form mode (URL mode when the client declared it, else CallToolResult isError). See v2-mcp-mount-map.test.ts.",
6
+ "nodes": [
7
+ {
8
+ "id": "ask",
9
+ "typeId": "core.clarificationGate",
10
+ "name": "Clarification Gate (nested)",
11
+ "position": {
12
+ "x": 0,
13
+ "y": 0
14
+ },
15
+ "config": {
16
+ "questions": [
17
+ {
18
+ "id": "q1",
19
+ "question": "Where should the parcel go?",
20
+ "schema": {
21
+ "type": "object",
22
+ "properties": {
23
+ "street": {
24
+ "type": "string"
25
+ }
26
+ }
27
+ }
28
+ }
29
+ ]
30
+ },
31
+ "inputs": {}
32
+ }
33
+ ],
34
+ "edges": [],
35
+ "triggers": [
36
+ {
37
+ "id": "manual",
38
+ "type": "manual",
39
+ "enabled": true
40
+ }
41
+ ],
42
+ "variables": [],
43
+ "metadata": {
44
+ "tags": [
45
+ "conformance",
46
+ "hitl",
47
+ "rfc-0199"
48
+ ]
49
+ },
50
+ "settings": {
51
+ "timeout": 0
52
+ }
53
+ }
@@ -0,0 +1,49 @@
1
+ {
2
+ "id": "conformance-clarification-sensitive",
3
+ "name": "Conformance: Clarification (sensitive field)",
4
+ "version": "1.0",
5
+ "description": "RFC 0199 \u00a7D.2(d) probe. Suspends on a clarification whose one answer is a string marked format: password. Bridged as MCP requestedSchema { q1: { type: string, format: password } } it is flat but sensitive, so an MCP mount MUST NOT bridge it in form mode (URL mode when the client declared it, else CallToolResult isError). This fixture exists to be REFUSED by the bridge: authoring such a clarification is itself forbidden by RFC 0199 \u00a7C.6, and it ships only as the machine-checkable probe. See v2-mcp-mount-map.test.ts.",
6
+ "nodes": [
7
+ {
8
+ "id": "ask",
9
+ "typeId": "core.clarificationGate",
10
+ "name": "Clarification Gate (sensitive)",
11
+ "position": {
12
+ "x": 0,
13
+ "y": 0
14
+ },
15
+ "config": {
16
+ "questions": [
17
+ {
18
+ "id": "q1",
19
+ "question": "Probe only \u2014 never answered with a real value.",
20
+ "schema": {
21
+ "type": "string",
22
+ "format": "password"
23
+ }
24
+ }
25
+ ]
26
+ },
27
+ "inputs": {}
28
+ }
29
+ ],
30
+ "edges": [],
31
+ "triggers": [
32
+ {
33
+ "id": "manual",
34
+ "type": "manual",
35
+ "enabled": true
36
+ }
37
+ ],
38
+ "variables": [],
39
+ "metadata": {
40
+ "tags": [
41
+ "conformance",
42
+ "hitl",
43
+ "rfc-0199"
44
+ ]
45
+ },
46
+ "settings": {
47
+ "timeout": 0
48
+ }
49
+ }
@@ -0,0 +1,25 @@
1
+ {
2
+ "id": "conformance-credential",
3
+ "name": "Conformance: Credential",
4
+ "version": "1.0",
5
+ "description": "RFC 0199 §C. One conformance.oauth.use node declaring auth { type: oauth2, provider: synthetic, scopes: [openwop.read] }. Run by a Subject with no credential for synthetic: under oauth.credentialInterrupt the node suspends on a credential interrupt (waiting-input); without the facet the host fails the node (RFC 0047 §C.3). Opt-in: a host advertises it only when it advertises oauth with the synthetic provider. See conformance/fixtures.md and v2-credential-interrupt.test.ts.",
6
+ "nodes": [
7
+ {
8
+ "id": "use-credential",
9
+ "typeId": "conformance.oauth.use",
10
+ "name": "Use a synthetic OAuth credential",
11
+ "position": { "x": 0, "y": 0 },
12
+ "config": {
13
+ "auth": { "type": "oauth2", "provider": "synthetic", "scopes": ["openwop.read"] }
14
+ },
15
+ "inputs": {}
16
+ }
17
+ ],
18
+ "edges": [],
19
+ "triggers": [
20
+ { "id": "manual", "type": "manual", "enabled": true }
21
+ ],
22
+ "variables": [],
23
+ "metadata": { "tags": ["conformance", "oauth", "hitl", "rfc-0199"] },
24
+ "settings": { "timeout": 0 }
25
+ }
@@ -0,0 +1,28 @@
1
+ {
2
+ "id": "conformance-mcp-client",
3
+ "name": "Conformance: v2 ctx.mcp client",
4
+ "version": "1.0",
5
+ "description": "RFC 0204 fixture for `v2-mcp-client-results.test.ts`. One node, `core.conformance.mcp-client` (conformance-RESERVED, like `core.conformance.mcp-invoke`): a host that advertises `mcp.client` maps it to a node that calls its own `ctx.mcp.<method>` with the run's inputs (`method` ∈ callTool | listTools | readResource | serverHealth; `serverId`; `name`, `arguments` for callTool; `cursor` for listTools; `uri` for readResource) and completes with `outputs.result` equal to the resolved value VERBATIM, recorded on its `node.completed` event. A rejection fails the node with the rejection's code (`not_found` for an unknown `serverId`). Operator contract: the host binds `serverId: \"conformance\"` to the suite's fake MCP server and `\"conformance.down\"` to an address nothing answers. A host that does not advertise `mcp.client` MUST NOT advertise this fixture.",
6
+ "nodes": [
7
+ {
8
+ "id": "mcp-client",
9
+ "typeId": "core.conformance.mcp-client",
10
+ "name": "Call ctx.mcp",
11
+ "position": { "x": 0, "y": 0 },
12
+ "config": {},
13
+ "inputs": {}
14
+ }
15
+ ],
16
+ "edges": [],
17
+ "triggers": [{ "id": "manual", "type": "manual", "enabled": true }],
18
+ "variables": [
19
+ { "name": "method", "type": "string", "defaultValue": "serverHealth" },
20
+ { "name": "serverId", "type": "string", "defaultValue": "conformance" },
21
+ { "name": "name", "type": "string" },
22
+ { "name": "arguments", "type": "object" },
23
+ { "name": "cursor", "type": "string" },
24
+ { "name": "uri", "type": "string" }
25
+ ],
26
+ "metadata": { "tags": ["conformance", "mcp", "rfc-0204"] },
27
+ "settings": { "timeout": 0 }
28
+ }
@@ -0,0 +1 @@
1
+ { "kind": "approval", "key": "run-1:gate:0", "data": { "artifactId": "art-1", "artifactType": "document", "title": "Review the draft", "actions": ["accept", "reject"] } }
@@ -0,0 +1 @@
1
+ { "kind": "clarification", "key": "run-1:clarify:0", "data": { "questions": [{ "id": "q1", "question": "Which region?" }] } }
@@ -0,0 +1 @@
1
+ { "kind": "conversation.close", "key": "run-1:conv:2", "data": { "conversationId": "conv-1" } }
@@ -0,0 +1 @@
1
+ { "kind": "conversation.exchange", "key": "run-1:conv:1", "data": { "conversationId": "conv-1", "prompt": "What should the headline say?" } }
@@ -0,0 +1 @@
1
+ { "kind": "conversation.start", "key": "run-1:conv:0", "data": { "conversationId": "conv-1" } }
@@ -0,0 +1 @@
1
+ { "kind": "custom", "key": "run-1:custom:0", "data": { "customKind": "vendor.example.signature" } }
@@ -0,0 +1 @@
1
+ { "kind": "external-event", "key": "run-1:wait:0", "data": { "eventType": "stripe.checkout.completed", "correlation": { "sessionId": "cs_1" } } }
@@ -0,0 +1 @@
1
+ { "kind": "low-confidence", "key": "run-1:supervisor:0", "data": { "agentId": "core.orchestrator.supervisor", "threshold": 0.7, "observed": 0.42 } }
@@ -0,0 +1 @@
1
+ { "kind": "approval", "key": "run-1:gate:0", "data": { "questions": [{ "id": "q1", "question": "Which region?" }] } }
@@ -0,0 +1 @@
1
+ { "kind": "conversation.close", "key": "run-1:conv:2", "data": { "conversationId": "conv-1", "title": "Headline review" } }
@@ -0,0 +1 @@
1
+ { "kind": "conversation.start", "key": "run-1:conv:0", "data": { "conversationId": "conv-1", "prompt": "What should the headline say?" } }
@@ -0,0 +1 @@
1
+ { "kind": "custom", "key": "run-1:custom:0", "data": { "conversationId": "conv-1" } }
@@ -0,0 +1 @@
1
+ { "kind": "low-confidence", "key": "run-1:supervisor:0", "data": { "customKind": "vendor.example.signature" } }
@@ -0,0 +1,31 @@
1
+ {
2
+ "kind": "node",
3
+ "name": "vendor.acme.salesforce-tools",
4
+ "version": "1.4.2",
5
+ "engines": {
6
+ "openwop": ">=2.0 <3.0.0"
7
+ },
8
+ "nodes": [
9
+ {
10
+ "typeId": "vendor.acme.salesforce.upsert",
11
+ "version": "1.4.2",
12
+ "category": "integration",
13
+ "role": "side-effect"
14
+ }
15
+ ],
16
+ "runtime": {
17
+ "language": "remote",
18
+ "entry": "https://other.acme.example/mcp",
19
+ "mcpServer": {
20
+ "name": "io.github.acme/salesforce",
21
+ "description": "Salesforce objects as MCP tools",
22
+ "version": "1.4.2",
23
+ "remotes": [
24
+ {
25
+ "type": "streamable-http",
26
+ "url": "https://mcp.acme.example/salesforce"
27
+ }
28
+ ]
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "kind": "node",
3
+ "name": "vendor.acme.salesforce-tools",
4
+ "version": "1.4.2",
5
+ "engines": {
6
+ "openwop": ">=2.0 <3.0.0"
7
+ },
8
+ "nodes": [
9
+ {
10
+ "typeId": "vendor.acme.salesforce.upsert",
11
+ "version": "1.4.2",
12
+ "category": "integration",
13
+ "role": "side-effect"
14
+ }
15
+ ],
16
+ "runtime": {
17
+ "language": "remote",
18
+ "entry": "https://mcp.acme.example/salesforce",
19
+ "mcpServer": {
20
+ "name": "io.github.acme/salesforce",
21
+ "description": "Salesforce objects as MCP tools",
22
+ "version": "1.4.2",
23
+ "remotes": [
24
+ {
25
+ "type": "streamable-http",
26
+ "url": "https://mcp.acme.example/salesforce",
27
+ "headers": [
28
+ {
29
+ "name": "Authorization",
30
+ "value": "Bearer sk-live-example"
31
+ }
32
+ ]
33
+ }
34
+ ]
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "kind": "node",
3
+ "name": "vendor.acme.salesforce-tools",
4
+ "version": "1.4.2",
5
+ "engines": {
6
+ "openwop": ">=2.0 <3.0.0"
7
+ },
8
+ "nodes": [
9
+ {
10
+ "typeId": "vendor.acme.salesforce.upsert",
11
+ "version": "1.4.2",
12
+ "category": "integration",
13
+ "role": "side-effect"
14
+ }
15
+ ],
16
+ "runtime": {
17
+ "language": "remote",
18
+ "entry": "http://mcp.acme.example/salesforce",
19
+ "mcpServer": {
20
+ "name": "io.github.acme/salesforce",
21
+ "description": "Salesforce objects as MCP tools",
22
+ "version": "1.4.2",
23
+ "remotes": [
24
+ {
25
+ "type": "streamable-http",
26
+ "url": "http://mcp.acme.example/salesforce"
27
+ }
28
+ ]
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,37 @@
1
+ {
2
+ "kind": "node",
3
+ "name": "vendor.acme.salesforce-tools",
4
+ "version": "1.4.2",
5
+ "engines": {
6
+ "openwop": ">=2.0 <3.0.0"
7
+ },
8
+ "nodes": [
9
+ {
10
+ "typeId": "vendor.acme.salesforce.upsert",
11
+ "version": "1.4.2",
12
+ "category": "integration",
13
+ "role": "side-effect"
14
+ }
15
+ ],
16
+ "runtime": {
17
+ "language": "remote",
18
+ "entry": "https://mcp.acme.example/salesforce",
19
+ "mcpServer": {
20
+ "name": "io.github.acme/salesforce",
21
+ "description": "Salesforce objects as MCP tools",
22
+ "version": "1.4.2",
23
+ "remotes": [
24
+ {
25
+ "type": "streamable-http",
26
+ "url": "https://mcp.acme.example/salesforce"
27
+ }
28
+ ],
29
+ "icons": [
30
+ {
31
+ "src": "https://acme.example/icon.png",
32
+ "mimeType": "image/png"
33
+ }
34
+ ]
35
+ }
36
+ }
37
+ }
@@ -0,0 +1,36 @@
1
+ {
2
+ "kind": "node",
3
+ "name": "vendor.acme.salesforce-tools",
4
+ "version": "1.4.2",
5
+ "engines": {
6
+ "openwop": ">=2.0 <3.0.0"
7
+ },
8
+ "nodes": [
9
+ {
10
+ "typeId": "vendor.acme.salesforce.upsert",
11
+ "version": "1.4.2",
12
+ "category": "integration",
13
+ "role": "side-effect"
14
+ }
15
+ ],
16
+ "runtime": {
17
+ "language": "remote",
18
+ "entry": "https://mcp.acme.example/salesforce",
19
+ "mcpServer": {
20
+ "name": "io.github.acme/salesforce",
21
+ "description": "Salesforce objects as MCP tools",
22
+ "version": "1.4.2",
23
+ "remotes": [
24
+ {
25
+ "type": "streamable-http",
26
+ "url": "https://mcp.acme.example/salesforce"
27
+ }
28
+ ],
29
+ "_meta": {
30
+ "io.modelcontextprotocol.registry/publisher-provided": {
31
+ "tool": "publisher-cli"
32
+ }
33
+ }
34
+ }
35
+ }
36
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "kind": "node",
3
+ "name": "vendor.acme.salesforce-tools",
4
+ "version": "1.4.2",
5
+ "engines": {
6
+ "openwop": ">=2.0 <3.0.0"
7
+ },
8
+ "nodes": [
9
+ {
10
+ "typeId": "vendor.acme.salesforce.upsert",
11
+ "version": "1.4.2",
12
+ "category": "integration",
13
+ "role": "side-effect"
14
+ }
15
+ ],
16
+ "runtime": {
17
+ "language": "wasm",
18
+ "entry": "dist/salesforce.wasm",
19
+ "mcpServer": {
20
+ "name": "io.github.acme/salesforce",
21
+ "description": "Salesforce objects as MCP tools",
22
+ "version": "1.4.2",
23
+ "remotes": [
24
+ {
25
+ "type": "streamable-http",
26
+ "url": "https://mcp.acme.example/salesforce"
27
+ }
28
+ ]
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,41 @@
1
+ {
2
+ "kind": "node",
3
+ "name": "vendor.acme.salesforce-tools",
4
+ "version": "1.4.2",
5
+ "engines": {
6
+ "openwop": ">=2.0 <3.0.0"
7
+ },
8
+ "nodes": [
9
+ {
10
+ "typeId": "vendor.acme.salesforce.upsert",
11
+ "version": "1.4.2",
12
+ "category": "integration",
13
+ "role": "side-effect"
14
+ }
15
+ ],
16
+ "runtime": {
17
+ "language": "remote",
18
+ "entry": "https://mcp.acme.example/salesforce",
19
+ "mcpServer": {
20
+ "name": "io.github.acme/salesforce",
21
+ "description": "Salesforce objects as MCP tools",
22
+ "version": "1.4.2",
23
+ "remotes": [
24
+ {
25
+ "type": "streamable-http",
26
+ "url": "https://mcp.acme.example/salesforce"
27
+ }
28
+ ],
29
+ "packages": [
30
+ {
31
+ "registryType": "npm",
32
+ "identifier": "@acme/salesforce-mcp",
33
+ "version": "1.4.2",
34
+ "transport": {
35
+ "type": "stdio"
36
+ }
37
+ }
38
+ ]
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,31 @@
1
+ {
2
+ "kind": "node",
3
+ "name": "vendor.acme.salesforce-tools",
4
+ "version": "1.4.2",
5
+ "engines": {
6
+ "openwop": ">=2.0 <3.0.0"
7
+ },
8
+ "nodes": [
9
+ {
10
+ "typeId": "vendor.acme.salesforce.upsert",
11
+ "version": "1.4.2",
12
+ "category": "integration",
13
+ "role": "side-effect"
14
+ }
15
+ ],
16
+ "runtime": {
17
+ "language": "remote",
18
+ "entry": "https://mcp.acme.example/salesforce",
19
+ "mcpServer": {
20
+ "name": "io.github.acme/salesforce",
21
+ "description": "Salesforce objects as MCP tools",
22
+ "version": "1.4.2",
23
+ "remotes": [
24
+ {
25
+ "type": "sse",
26
+ "url": "https://mcp.acme.example/salesforce"
27
+ }
28
+ ]
29
+ }
30
+ }
31
+ }