---
title: "Comment by Tarun Sharma on \"MCP Apps: When AI Agents Hand You an Interface, Not Just Text\" | Hashnode"
description: "Making decide_expense app-only is the part I liked most. One small catch in the View code: decide() wraps both the server call and shareContextWithModel in the"
url: "https://hashnode.com/posts/mcp-apps-when-ai-agents-hand-you-an-interface-not-just-text/6af701b74a54c6faf91a4d32/comment/6af72e5d6de7ba9a52434e06"
---

[Discussion](https://hashnode.com/posts/mcp-apps-when-ai-agents-hand-you-an-interface-not-just-text/6af701b74a54c6faf91a4d32)

Comment [MCP Apps: When AI Agents Hand You an Interface, Not Just Text](https://hashnode.com/posts/mcp-apps-when-ai-agents-hand-you-an-interface-not-just-text/6af701b74a54c6faf91a4d32)

[Tarun Sharma](https://hashnode.com/@101beardo)

[22h ago](https://hashnode.com/posts/mcp-apps-when-ai-agents-hand-you-an-interface-not-just-text/6af701b74a54c6faf91a4d32/comment/6af72e5d6de7ba9a52434e06)

Making decide\_expense app-only is the part I liked most. One small catch in the View code: decide() wraps both the server call and shareContextWithModel in the same try. If updateModelContext throws after the decision is already saved, the user sees Could not reach the server, may click again, and then gets an already decided error. Giving the context update its own catch avoids that misleading message.
