@agent-native/core 0.22.26 → 0.22.28

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.
@@ -50,7 +50,9 @@ the connector in a chat.
50
50
 
51
51
  OAuth grants are per host and per user. The host stores the tokens and
52
52
  mediates tool/resource calls, so inline MCP App previews never receive raw
53
- OAuth tokens. The scopes are:
53
+ OAuth tokens. ChatGPT can keep a reviewed or published connector's tool
54
+ snapshot until you refresh/review it again, so rescan the connector after MCP
55
+ tool or MCP App metadata changes. The scopes are:
54
56
 
55
57
  | Scope | What it enables |
56
58
  | ----------- | ---------------------------------------------------- |
@@ -170,7 +172,15 @@ When the client requests no explicit scope, the app grants all three so the conn
170
172
 
171
173
  ## What you can do once connected {#what-you-can-do}
172
174
 
173
- Once your agent is connected, the app's full action surface is available as MCP tools, plus the `ask-agent` meta-tool that runs the full agent loop (the same entry point [A2A](/docs/a2a-protocol) uses). Ask your agent to do real work and it hands back a link straight into the running app:
175
+ Once your agent is connected, the available MCP tool surface depends on the
176
+ host. Developer clients and bearer/static-token clients get the app's full
177
+ action surface plus the `ask-agent` meta-tool that runs the full agent loop
178
+ (the same entry point [A2A](/docs/a2a-protocol) uses). OAuth chat hosts that
179
+ request `mcp:apps`, including Claude and ChatGPT, get a compact app-facing
180
+ catalog instead: cross-app verbs such as `list_apps` and `open_app`, app-only
181
+ embed helpers, and actions that explicitly declare `mcpApp`. In both cases,
182
+ ask the agent to do real work and it hands back a link straight into the
183
+ running app:
174
184
 
175
185
  ```
176
186
  > draft an email to John about the Q3 report
@@ -183,12 +193,23 @@ Click that link and Mail opens with the draft restored — focused exactly where
183
193
 
184
194
  ### MCP Apps compatibility {#mcp-apps-compatibility}
185
195
 
186
- Agent-native apps also speak the official MCP Apps extension. When any action declares `mcpApp`, the server advertises `extensions["io.modelcontextprotocol/ui"]`, includes both `_meta.ui.resourceUri` and the legacy-compatible `_meta["ui/resourceUri"]` in `tools/list`, and serves the HTML UI through `resources/list` + `resources/read` as `text/html;profile=mcp-app`.
196
+ Agent-native apps also speak the official MCP Apps extension. When any action
197
+ declares `mcpApp`, the server advertises
198
+ `extensions["io.modelcontextprotocol/ui"]`, includes `_meta.ui.resourceUri` /
199
+ `_meta["ui/resourceUri"]` in `tools/list`, and serves the HTML UI through
200
+ `resources/list` + `resources/read` as `text/html;profile=mcp-app`. Resource
201
+ security metadata such as CSP and sandbox permissions lives on the resource
202
+ entries and `resources/read` content, not on the tool descriptor.
187
203
 
188
204
  That makes the same app surface available to every compatible host rather than building per-client shims. The current official MCP Apps client list includes Claude, Claude Desktop, VS Code GitHub Copilot, Goose, Postman, MCPJam, ChatGPT, and Cursor; host support still varies by plan, release channel, and client version, so check the [MCP extension support matrix](https://modelcontextprotocol.io/extensions/client-matrix). ChatGPT custom MCP apps are available through developer mode for Business and Enterprise/Edu workspaces on ChatGPT web; see OpenAI's [developer mode and MCP apps](https://help.openai.com/en/articles/12584461-developer-mode-and-full-mcp-apps-in-chatgpt-beta) notes.
189
205
 
190
206
  Claude Code and other CLI-first clients still receive the same resources and metadata when they support MCP Apps, but the deep link remains the reliable fallback when a host chooses not to render an iframe. In practice, every agent-native app should be authored with both: MCP Apps for inline review/edit in capable hosts, and `link` for universal round-tripping back to the full app.
191
207
 
208
+ Claude and ChatGPT can cache tool and resource metadata for an existing custom
209
+ connector. After changing MCP App metadata, verify with a fresh tool call; if
210
+ the host still uses the old descriptor, reconnect the Claude connector or
211
+ rescan/review the ChatGPT connector so it refreshes the catalog.
212
+
192
213
  ### First-class MCP App bridge {#mcp-app-bridge}
193
214
 
194
215
  MCP App embeds are route embeds, not separate mini-products. `embedApp()`
@@ -223,13 +244,15 @@ relays the same host actions over `agentNative.mcpHost.*` postMessage
223
244
  requests. Keep the result shape identical for both paths: return a focused
224
245
  `link` and concise structured content.
225
246
 
226
- The resource shell owns the outer host size. Keep embedded app routes
227
- internally scrollable and let the launcher report a bounded intrinsic height
228
- rather than the full document height; otherwise host auto-resize can turn a
229
- normal app page into a very tall chat artifact. A changed shell only affects
230
- new MCP App resources and new tool calls. Old ChatGPT/Claude conversation
231
- frames can keep the previous resource behavior, so verify sizing with a fresh
232
- inline render before judging a fix.
247
+ The resource shell owns the outer host size. `embedApp({ height })` defaults
248
+ to `560px`, clamps the shell to `320-900px`, and reserves `44px` for the small
249
+ toolbar, so the route viewport is `height - 44px`. Keep embedded app routes
250
+ internally scrollable and let the launcher report that bounded intrinsic
251
+ height rather than the full document height; otherwise host auto-resize can
252
+ turn a normal app page into a very tall chat artifact. A changed shell only
253
+ affects new MCP App resources and new tool calls. Old ChatGPT/Claude
254
+ conversation frames can keep the previous resource behavior, so verify sizing
255
+ with a fresh inline render before judging a fix.
233
256
 
234
257
  Claude uses the single-frame transplant path by default. You can also force it
235
258
  in other hosts with `embedMode: "transplant"` or `frame: "transplant"` when
@@ -370,8 +393,11 @@ Keep the existing `link` builder even when adding `mcpApp`. CLI-only clients, ol
370
393
 
371
394
  `embedApp()` includes the MCP request origin in the resource CSP so the launcher
372
395
  can fetch and, when explicitly requested, frame the signed first-party app
373
- route. Only pass additional `frameDomains` for a custom MCP App that truly
374
- embeds a third-party player.
396
+ route. Dispatch adds the exact origins for the granted apps to its `open_app`
397
+ resource so a single Dispatch connector can inline Mail, Calendar, Slides, and
398
+ the rest without allowing every HTTPS origin. Only pass additional frame or
399
+ resource domains for a custom MCP App that truly embeds a third-party player or
400
+ loads third-party assets.
375
401
 
376
402
  Inside those `embedApp()` routes, `sendToAgentChat()` is embed-aware.
377
403
  Auto-submitted prompts relay to the MCP host as `ui/update-model-context` plus
@@ -94,7 +94,9 @@ custom actions can return the same field when they already know the target
94
94
  route.
95
95
 
96
96
  The outer MCP resource reports a bounded inline height to the host and the app
97
- route scrolls internally. Do not rely on host auto-resize measuring the full
97
+ route scrolls internally. `embedApp({ height })` defaults to a `560px` shell,
98
+ clamps to `320-900px`, and subtracts `44px` for the wrapper toolbar before
99
+ sizing the route viewport. Do not rely on host auto-resize measuring the full
98
100
  document; in ChatGPT and Claude this can make a normal full-app route appear as
99
101
  a huge chat artifact. Host conversations also keep already-rendered iframes, so
100
102
  after changing the resource shell or `ui://` version, test a fresh tool call
@@ -129,7 +131,10 @@ relay:
129
131
 
130
132
  `embedApp()` includes the MCP request origin in the resource CSP so the
131
133
  launcher can fetch and, when explicitly requested, frame the signed first-party
132
- route. Pass additional `frameDomains` only for custom third-party frames.
134
+ route. Dispatch's `open_app` resource adds the exact origins for apps granted
135
+ through Dispatch, which keeps the one-connector path narrow while still letting
136
+ Claude/ChatGPT inline target app routes. Pass additional domains only for
137
+ custom third-party frames or assets.
133
138
 
134
139
  Host-mediated open links keep the iframe from choosing its own browser target.
135
140
  Model context updates are opt-in and hidden from the user-facing transcript.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agent-native/core",
3
- "version": "0.22.26",
3
+ "version": "0.22.28",
4
4
  "type": "module",
5
5
  "description": "Framework for agent-native application development — where AI agents and UI share state via files",
6
6
  "license": "MIT",