#structuredcontent
love types 💜
August 28, 2025 at 10:31 PM
Huh! Apparently, very recently:

Version 2.0.21:
• Support MCP `structuredContent` field in tool responses
• Added an interactive question tool…
October 18, 2025 at 4:06 PM
Introducing mcp-tada: typed MCP tool calls for TypeScript.

Snapshot a server's tools/list and every call gets a narrowed tool name, args inferred from inputSchema, and structuredContent typed from outputSchema.

github.com/JoviDeCroock...
GitHub - JoviDeCroock/mcp-tada: Compile-time typed MCP tool calls for TypeScript
Compile-time typed MCP tool calls for TypeScript. Contribute to JoviDeCroock/mcp-tada development by creating an account on GitHub.
github.com
September 10, 2026 at 5:36 PM
June 18, 2025 at 2:00 PM
Tôi mới nâng cấp Custom Tools cho Claude Agent SDK cực mượt! 🚀
🛠️ Đừng để sập loop, hãy bắt lỗi với isError.
📸 Gửi ảnh dạng Base64 và dùng structuredContent.
🐍 Nhớ lưu ý khác biệt giữa Python và TypeScript nhé.
September 14, 2026 at 4:05 AM
If you're building #MCP developers in TS and are setting a `outputSchema` to your tools, then you MUST provide a `structuredContent` to your CallToolResult (unless it's an error).

You're Welcome!
September 10, 2025 at 1:54 PM
OpenAI just launched agentic AI, tools that plan meals, shop recipes, and take action across apps.

Free preview of Blueberri Pi is live. Full strategy for paid subscribers.

#BlueberriPi #AgenticAI #StructuredContent #FoodTech #ReimagineWhatsPossible
July 21, 2025 at 10:27 AM
📦 Looking beyond CKEditor?

The ProseMirror module stores Drupal content as structured JSON—ideal for headless and omnichannel delivery.

Open source, CKEditor-compatible, and frontend-flexible.

🔗 https://bit.ly/4qdHzZc
##Drupal #ProseMirror #HeadlessCMS #StructuredContent
October 13, 2025 at 6:09 PM
Fixity on a shelf: when CDs became legal time machines. Set your reminders for Rule-breakers Ep3➡️ lnkd.in/eqsCqZJ6

Check out the clip from our next episode below!

#RuleBreakersPodcast #rulebreakers #tech #technology #podcast #AI #structureddata #structuredcontent #publishing #fixity #STEM
May 2, 2025 at 9:29 AM
#ContentStrategy and #MetadataStrategy go hand-in-hand. Ilse Jonker and Joyce van Aalten team up to combine their #StructuredContent and #Taxonomy expertise to give organizations a solid scaffolding for their #ContentOperations. A VERY fun conversation - enjoy!

ellessmedia.com/csi/ilse-and...
Ilse Jonker & Joyce van Aalten: content structure and meaning
Ilse Jonker and Joyce van Aalten are independent consultants who collaborate on content strategy and taxonomy projects in the Netherlands.
ellessmedia.com
September 11, 2024 at 10:46 AM
How Technical Documentation Teams Manage and Deliver Customer Support Content: A Report is out!

Sign up for the free #whitepaper below for the research provided by @scottabel.bsky.social Rebecca Schneider & Kevin Nichols.
ow.ly/QJsp50UgmEt

#SelfServiceContent #StructuredContent #ContentStrategy
B2B Tech Docs Self-Service Support Content Survey 2024
We surveyed B2B Tech Docs teams on Self-Service Support Content: Here are our findings and our recommendations for most effective help content.
avenuecx.com
November 26, 2024 at 10:47 PM
outputのschema定義できるようになっていたのか、知らなかった / MCP の Structured tool output を試してみる
#MCP
MCP の Structured tool output を試してみる
MCP の 2025-06-18 バージョンでは Structured tool output がサポートされました。ツールの定義で `outputSchema` を出力のスキーマを定義し、`structuredContent` フィールドに構造化された出力を返すことができます。この記事では MCP の TypeScript SDK を使用して Structured tool output を試してみます。
azukiazusa.dev
June 30, 2025 at 4:50 AM
Droptica’s Maciej Lukianski warns that text-heavy images weaken Drupal SEO, accessibility, translation, and AI visibility.

TDT summary: rebuild high-value sections as structured HTML components, not JPEG or PNG copy blocks.

https://bit.ly/3QVAb7R
##Drupal #SEO #Accessibility #StructuredContent
July 1, 2026 at 7:34 PM
Structured content isn’t a trend, it’s infrastructure.
If your recipes aren’t readable by machines, they’re not discoverable by people either.

No fluff, just facts.
#foodtech #structuredcontent

blueberripi.blueberri.co
Blueberri Pi | Sandie Markle | Substack
Blueberri Pi explores the intersection of content engineering, recipe optimization, and food tech, helping creators and businesses scale with smarter content strategies. Click to read Blueberri Pi, by...
blueberripi.blueberri.co
May 9, 2025 at 8:22 AM
MCP Apps in ChatGPT are fundamentally broken - 2 critical bugs Nope _meta is still missing from ontoolresult in chatgpt host. only content and structuredContent are available to the ui

Origin | Interest | Match
Awakari App
awakari.com
May 27, 2026 at 9:25 PM
Bug Report: ChatGPT strips _meta from tool results and breaks MCP Apps viewUUID state persistence pattern We could just pass the viewUUID in structuredContent, but I wonder if it’s a bug or if _m...

Origin | Interest | Match
Awakari App
awakari.com
March 10, 2026 at 1:09 PM
Widget receives toolOutput: null despite tool returning valid structuredContent (model sees data, widget doesn't) Widget receives toolOutput: null despite tool returning valid structuredContent...

Origin | Interest | Match
Widget receives toolOutput: null despite tool returning valid structuredContent (model sees data, widget doesn't)
# Widget receives `toolOutput: null` despite tool returning valid `structuredContent` ## Summary When my MCP tool returns `structuredContent`, the ChatGPT model correctly receives and responds to the data, but the widget’s `window.openai.toolOutput` is `null`. The data reaches the model but does not get injected into the widget runtime. ## Environment * Platform: ChatGPT web (desktop) * MCP Server: Cloudflare Workers with `@modelcontextprotocol/sdk` * Widget: React 19 + Vite, served as `text/html+skybridge` ## Steps to Reproduce 1. Register an MCP resource with `mimeType: "text/html+skybridge"` 2. Register a tool that returns `structuredContent` 3. Connect the app to ChatGPT 4. Invoke the tool via conversation 5. Observe that the model responds correctly using the data 6. Check `window.openai.toolOutput` in the widget — it’s `null` ## Expected Behavior `window.openai.toolOutput` should contain the `structuredContent` returned by the tool. ## Actual Behavior `window.openai.toolOutput` is `null`, even though: * The tool call succeeds (visible in ChatGPT’s tool explorer) * The model narrates the response using the returned data ## Evidence **Tool Response (from ChatGPT tool explorer):** { "type": "list", "items": [ { "id": 1, "title": "Item 1", "description": "..." }, { "id": 2, "title": "Item 2", "description": "..." } ], "total": 20 } **Model Response:** The model correctly lists the items with titles and descriptions — proving it received `structuredContent`. **Widget’s`window.openai` (logged via console):** { "displayMode": "inline", "maxWidth": 768, "theme": "dark", "locale": "en-US", "userAgent": { "device": { "type": "desktop", "platform": "web" }, "capabilities": { "hover": true, "touch": false } }, "view": { "mode": "inline" }, "widget": { "state": null, "props": null }, "toolInput": {}, "toolOutput": null, "toolResponseMetadata": null, "widgetState": null, "subjectId": null, "safeArea": { "insets": { "top": 0, "bottom": 0, "left": 0, "right": 0 } } } ## Server Code (simplified) // Resource registration server.registerResource( "my-widget", "ui://widgets/my-widget.html", {}, async () => ({ contents: [{ uri: "ui://widgets/my-widget.html", mimeType: "text/html+skybridge", text: htmlContent, _meta: { "openai/widgetPrefersBorder": true, "openai/widgetCSP": { connect_domains: ["https://my-domain.com"], resource_domains: ["https://my-domain.com"], }, }, }], }) ); // Tool registration server.registerTool( "get-items", { title: "Get Items", description: "Returns a list of items", inputSchema: {}, _meta: { "openai/outputTemplate": "ui://widgets/my-widget.html", }, }, async () => { const data = await fetchItems(); return { content: [{ text: `Found ${data.length} items`, type: "text" }], structuredContent: { type: "list", items: data }, }; } ); ## Widget Code (simplified) function App() { console.log("window.openai:", JSON.stringify(window.openai, null, 2)); console.log("toolOutput:", window.openai?.toolOutput); const toolOutput = window.openai?.toolOutput; if (toolOutput?.type === "list") { return <ItemList items={toolOutput.items} />; } return <div>toolOutput is null</div>; } ## What I’ve Tried * Verified `mimeType` is `"text/html+skybridge"` * Confirmed `outputTemplate` URI matches registered resource URI exactly * Used static version strings to avoid cache mismatches * Disconnected and reconnected the app * Started fresh conversations * Tested on multiple browsers ## Question Is there a known issue or additional configuration required for `structuredContent` to be injected into `window.openai.toolOutput`? The docs indicate this should happen automatically when the widget loads.
community.openai.com
January 15, 2026 at 12:16 PM

I look forward to attending the "How Tech Doc Teams Manage and Deliver Customer Support Content."

Join me this Thursday at 11:00 am EST by registering below:
www.brighttalk.com/webcast/9273...

#StructuredContent #CustomerExperience #Webinar #ContentStrategy #Content #TechnicalDocumentation #B2B
How Tech Docs Teams Manage And Deliver Support Content
Rescheduled from October 24, 2024 — Discover the latest technical documentation management and delivery trends that are setting new standards for customer support experiences. Kevin Nichols, Executive...
www.brighttalk.com
January 7, 2025 at 5:29 PM
見てる: "`2025-06-18` Discrepancy: `structuredContent` does not support full `outputSchema` JSON Schema · Issue #834 · modelcontextprotocol/modelcontextprotocol" https://github.com/modelcontextprotocol/modelcontextprotocol/issues/834
June 29, 2025 at 3:38 PM
MCP Apps: "Error loading app / Runtime error" on all resource widgets in developer mode
Resource-bound widgets (MCP Apps using resources/read with mimeType: text/html;profile=mcp-app) fail to render in ChatGPT’s developer mode. The error is consistent and affects all MCP apps, including Booking[.]com’s official integration. What happens When a tool call returns structuredContent tied to a resource widget, ChatGPT shows: Error loading app Runtime error [Retry] Clicking Retry does not resolve it. The tool call itself succeeds, the server returns valid data, but the widget iframe never connects to the host. Reproduction 1. Open ChatGPT in developer mode 2. Connect any MCP server that exposes a resource with mimeType: text/html;profile=mcp-app 3. Trigger a tool call that returns structuredContent bound to that resource 4. The widget shows “Error loading app / Runtime error” This also reproduces with Booking[.]com — ask it to search for a hotel. The tool executes, results come back, but the Booking[.]com widget fails with the same error. In non-developer (production) ChatGPT, the same Booking[.]com widget renders correctly. What we’ve verified * Not app-specific. Tested across three independent MCP apps (2 custom apps built with sunpeak[.]ai, plus Booking[.]com). All produce the identical error. * Server-side is correct. Tool calls succeed, structuredContent is returned, resource HTML is served. Server logs show no errors. * The widget HTML is valid. The same HTML renders correctly in local testing environments and in production ChatGPT (non-developer mode). * The error comes from ChatGPT’s host-side error boundary. The “Error loading app / Runtime error” text does not exist in any of the app code — it’s rendered by the ChatGPT client. Likely cause The resource iframe uses postMessage to establish a JSON-RPC bridge with the ChatGPT parent window. In developer mode, the host-side listener for this bridge appears to be missing or misconfigured, so the iframe’s connection handshake times out and throws. Additional observations from server logs While investigating, we logged the developer mode’s MCP session behavior per user message: * 7-8 MCP sessions opened per turn, when 4 are sufficient (tools/list + resources/list + resources/read + tools/call). Re-discovering tools and resources per turn is expected with streamable HTTP, but the extra 3-4 sessions are not. * 3 sessions abandoned every turn — initialize sent, handshake never completed * Race condition — at least once, tools/call was sent before notifications/initialized, causing “Error: Bad Request: Server not initialized” These may be developer-mode-specific behaviors. Environment * ChatGPT: production (chat[.]openai[.]com), developer mode enabled * Date observed: April 23, 2026 * Tested MCP servers: custom apps (Node.js / sunpeak 0.20.7) + Booking[.]com Ask Is this a known issue with a timeline for a fix, as we can’t test our widgets at the moment? Are OpenAI developers using the developer mode internally, too?
community.openai.com
April 23, 2026 at 11:57 AM
ChatGPT MCP Apps bridge drops custom _meta from tool results in ui/notifications/tool-result
Hi people, I’m seeing an inconsistency between documented behavior and runtime behavior in ChatGPT Dev for MCP Apps. According to docs, tool results should include structuredContent + _meta, where _meta is widget-only data (not added to model context). Docs references: * developers.openai. com/apps-sdk/build/mcp-server * github. com/modelcontextprotocol/ext-apps/blob/main/specification/2026-01-26/apps.mdx My server returns this from load_project: `{` ` "content": [{ "type": "text", "text": "Loaded project \"test\"." }],` ` "structuredContent": {` ` "project": {` ` "id": "yeu5lfsg36nfzpcp65mvvhyt",` ` "name": "test",` ` "type": "email",` ` "createdAt": "2026-03-28T10:33:56.832Z",` ` "updatedAt": "2026-03-28T10:33:56.832Z"` ` },` ` "projectUrl": "https://.../project/yeu5lfsg36nfzpcp65mvvhyt"` ` },` ` "_meta": {` ` "projectData": { "...large json..." }` ` }` `}` Inside the MCP app (onToolResult), ChatGPT delivers: `{` ` "content": [` ` {` ` "type": "text",` ` "text": "{\"project\":{...},\"projectUrl\":\"https://...\"}"` ` }` ` ],` ` "structuredContent": {` ` "project": { ... },` ` "projectUrl": "https://..."` ` }` `}` Observed problems: 1. Custom _meta is missing entirely in ui/notifications/tool-result. 2. content[0].text appears rewritten to a JSON string of structuredContent instead of the original text. We intentionally keep large projectData in _meta to avoid inflating model-visible context. Duplicating projectData into structuredContent is not viable (payload can be MBs). Expected behavior: * ui/notifications/tool-result should preserve custom _meta fields from the MCP tool result (eg _meta.projectData) as documented. Can you confirm whether this is a known limitation/regression in ChatGPT MCP Apps, and whether custom _meta forwarding is expected to be supported? Also, an important note, the same app works correctly in a regular MCP App inspector based on MCP App standard. I’m using the official bridge (`@modelcontextprotocol/sdk` and `@modelcontextprotocol/ext-apps`)
community.openai.com
March 28, 2026 at 8:33 PM