<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Hanieh Zahiremami</title>
    <description>The latest articles on DEV Community by Hanieh Zahiremami (@hani__8725b7a).</description>
    <link>https://dev.to/hani__8725b7a</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2954963%2Fb2d6f953-e97b-4b6c-bfad-04470f65c334.jpg</url>
      <title>DEV Community: Hanieh Zahiremami</title>
      <link>https://dev.to/hani__8725b7a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/hani__8725b7a"/>
    <language>en</language>
    <item>
      <title>The Developer's Guide to AI Agent Frameworks in 2025: MCP-Native vs Traditional Approaches</title>
      <dc:creator>Hanieh Zahiremami</dc:creator>
      <pubDate>Fri, 21 Nov 2025 06:41:24 +0000</pubDate>
      <link>https://dev.to/hani__8725b7a/agentic-ai-frameworks-comparison-2025-mcp-agent-langgraph-ag2-pydanticai-crewai-h40</link>
      <guid>https://dev.to/hani__8725b7a/agentic-ai-frameworks-comparison-2025-mcp-agent-langgraph-ag2-pydanticai-crewai-h40</guid>
      <description>&lt;p&gt;&lt;em&gt;A technical comparison of 7 frameworks for building production AI agents, with honest trade-offs and code examples&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;There are too many AI agent frameworks. I've spent the last few months building with most of them at &lt;a href="https://lastmileai.dev" rel="noopener noreferrer"&gt;LastMile AI&lt;/a&gt;, and here's what I've learned: the "best" framework depends entirely on what you're building and how you want to build it.&lt;/p&gt;

&lt;p&gt;This isn't a marketing piece. It's a technical breakdown of what each framework actually does well, where it falls short, and when you should use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Quick Decision Matrix
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Use Case&lt;/th&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP-native development&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;mcp-agent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built for MCP from day one&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Visual debugging&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;LangGraph&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Studio with time-travel debugging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Multi-agent conversations&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;AG2&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agents coordinate autonomously&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Type safety&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;PydanticAI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Full Pydantic validation + A2A support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rapid prototyping&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;CrewAI&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;No-code Studio interface&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI ecosystem&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;OpenAI Agents SDK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Native integration, hosted MCP&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google Cloud / Vertex AI&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;Google ADK&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Powers Agentspace, bidirectional streaming&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  1. mcp-agent
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/lastmile-ai/mcp-agent" rel="noopener noreferrer"&gt;lastmile-ai/mcp-agent&lt;/a&gt; (~7.7k ⭐) | Python&lt;/p&gt;

&lt;p&gt;A framework built specifically for Model Context Protocol. Not an adapter bolted on later—MCP is the foundation.&lt;/p&gt;

&lt;h3&gt;
  
  
  What It Does Well
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full MCP implementation&lt;/strong&gt; — Tools, resources, prompts, notifications, OAuth, sampling, elicitation, roots. The whole spec.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic durable execution&lt;/strong&gt; — One config line switches to Temporal. No manual checkpointing, no workflow DSL to learn.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Implements Anthropic's patterns&lt;/strong&gt; — Every pattern from &lt;a href="https://www.anthropic.com/research/building-effective-agents" rel="noopener noreferrer"&gt;Building Effective Agents&lt;/a&gt; plus OpenAI's Swarm pattern, all composable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud deployment&lt;/strong&gt; — &lt;code&gt;uvx mcp-agent deploy my-agent&lt;/code&gt; and you're running on managed infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mcp_agent.app&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MCPApp&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mcp_agent.agents.agent&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mcp_agent.workflows.llm.augmented_llm_openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAIAugmentedLLM&lt;/span&gt;

&lt;span class="c1"&gt;# Temporal-backed durability in one line
&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MCPApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;researcher&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;execution_engine&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temporal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
        &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;researcher&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;server_names&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;brave-search&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;filesystem&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research and compile reports&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="n"&gt;llm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;attach_llm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OpenAIAugmentedLLM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarize the latest AI news&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use When
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Building for the MCP ecosystem&lt;/li&gt;
&lt;li&gt;You need durable execution without infrastructure complexity&lt;/li&gt;
&lt;li&gt;You want Temporal reliability for long-running tasks&lt;/li&gt;
&lt;li&gt;You prefer writing Python over graph DSLs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Skip If
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You need visual debugging tools (use LangGraph Studio)&lt;/li&gt;
&lt;li&gt;You're not using MCP servers&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. LangGraph
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/langchain-ai/langgraph" rel="noopener noreferrer"&gt;langchain-ai/langgraph&lt;/a&gt; (~21.7k ⭐) | Python, JavaScript&lt;/p&gt;

&lt;p&gt;Graph-based orchestration with best-in-class visual debugging. LangGraph 1.0 shipped in October 2025—the first stable major release in this space.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's New in 1.0
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Node/task caching&lt;/strong&gt; — Cache individual node results to skip redundant computation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deferred nodes&lt;/strong&gt; — Delay execution until all upstream paths complete (great for map-reduce)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre/post model hooks&lt;/strong&gt; — Add logic before/after model calls for guardrails&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LangGraph Platform GA&lt;/strong&gt; — 1-click deployment, memory APIs, human-in-the-loop&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langgraph.graph&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;StateGraph&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langgraph.checkpoint.sqlite&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;SqliteSaver&lt;/span&gt;

&lt;span class="n"&gt;workflow&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;StateGraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AgentState&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;research&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;research_function&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;analyze&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;analyze_function&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_conditional_edges&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;research&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;should_continue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;analyze&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;analyze&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;end&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;END&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Checkpointing for durability
&lt;/span&gt;&lt;span class="n"&gt;checkpointer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SqliteSaver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_conn_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;:memory:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;checkpointer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;checkpointer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use When
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You need visual debugging of workflow execution&lt;/li&gt;
&lt;li&gt;Building complex branching logic&lt;/li&gt;
&lt;li&gt;Your team values explicit state management&lt;/li&gt;
&lt;li&gt;You want mature observability via LangSmith&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Skip If
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simple workflows (LangGraph is overkill)&lt;/li&gt;
&lt;li&gt;You prefer code over graph abstractions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. AG2 (formerly AutoGen)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/ag2ai/ag2" rel="noopener noreferrer"&gt;ag2ai/ag2&lt;/a&gt; (~3.8k ⭐) | Python&lt;/p&gt;

&lt;p&gt;Conversational multi-agent framework. This is where it gets complicated: AG2 is the community-driven continuation of AutoGen 0.2, maintained by the original creators who left Microsoft. Microsoft's AutoGen 0.4 is a complete architectural rewrite heading toward Semantic Kernel integration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important context:&lt;/strong&gt; If you're choosing between AG2 and Microsoft's AutoGen, know they're diverging. AG2 keeps the familiar architecture. Microsoft's version is getting a ground-up rewrite with TypeScript support, distributed agents, and deeper Azure integration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;autogen&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ConversableAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;LLMConfig&lt;/span&gt;

&lt;span class="n"&gt;llm_config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;LLMConfig&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_json&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OAI_CONFIG_LIST&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;coder&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ConversableAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;coder&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;system_message&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You write Python code&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;llm_config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;llm_config&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;reviewer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ConversableAgent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;reviewer&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
    &lt;span class="n"&gt;system_message&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You review code quality&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;coder&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;initiate_chat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;reviewer&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Build a REST API&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use When
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Multi-agent conversations fit your problem&lt;/li&gt;
&lt;li&gt;You want agents to coordinate autonomously&lt;/li&gt;
&lt;li&gt;You need the no-code AutoGen Studio interface&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Skip If
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You need deterministic workflow control&lt;/li&gt;
&lt;li&gt;You want Microsoft ecosystem integration (wait for AutoGen 0.4)&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. PydanticAI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/pydantic/pydantic-ai" rel="noopener noreferrer"&gt;pydantic/pydantic-ai&lt;/a&gt; | Python&lt;/p&gt;

&lt;p&gt;Type-safe agents with Pydantic validation. Built by the Pydantic team—the same validation layer used by OpenAI SDK, Anthropic SDK, LangChain, and basically every Python AI library.&lt;/p&gt;

&lt;h3&gt;
  
  
  What's New
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A2A (Agent-to-Agent) support&lt;/strong&gt; — Not just MCP, but Google's agent interoperability protocol too&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Durable execution&lt;/strong&gt; — Agents preserve progress across API failures and restarts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Human-in-the-loop approval&lt;/strong&gt; — Flag tool calls that need approval before proceeding&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Streamed structured outputs&lt;/strong&gt; — Real-time validation as data generates&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pydantic&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BaseModel&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pydantic_ai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pydantic_ai.mcp&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MCPServerStdio&lt;/span&gt;

&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;SearchResult&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;BaseModel&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;title&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;
    &lt;span class="n"&gt;relevance_score&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;float&lt;/span&gt;

&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MCPServerStdio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;uv&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;run&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;mcp-server-fetch&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;openai:gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;result_type&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;SearchResult&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;toolsets&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run_sync&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Search for AI framework comparisons&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;# result.data is guaranteed to be SearchResult
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use When
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Type safety prevents production bugs in your context&lt;/li&gt;
&lt;li&gt;Building systems requiring schema compliance&lt;/li&gt;
&lt;li&gt;Your team already uses FastAPI/Pydantic&lt;/li&gt;
&lt;li&gt;You need both MCP and A2A protocol support&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Skip If
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Type safety isn't a priority for your use case&lt;/li&gt;
&lt;li&gt;You need visual debugging&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  5. CrewAI
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/crewAIInc/crewAI" rel="noopener noreferrer"&gt;crewAIInc/crewAI&lt;/a&gt; | Python&lt;/p&gt;

&lt;p&gt;Orchestrates agents through Crews (autonomous) and Flows (event-driven). CrewAI has significantly improved their MCP support—it's no longer "limited."&lt;/p&gt;

&lt;h3&gt;
  
  
  MCP Integration (Updated)
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Task&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Crew&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;crewai.mcp&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MCPServerStdio&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MCPServerHTTP&lt;/span&gt;

&lt;span class="n"&gt;research_agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;role&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Research Analyst&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;goal&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Find and analyze information&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;backstory&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Expert researcher with access to multiple data sources&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;mcps&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="c1"&gt;# String reference for quick setup
&lt;/span&gt;        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://mcp.exa.ai/mcp?api_key=your_key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="c1"&gt;# Or structured config for full control
&lt;/span&gt;        &lt;span class="nc"&gt;MCPServerStdio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;local_server.py&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="n"&gt;env&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your_key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;crew&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Crew&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;agents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;research_agent&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;tasks&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;research_task&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;process&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;Process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sequential&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;crew&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;kickoff&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use When
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You need both autonomous agents AND workflow control&lt;/li&gt;
&lt;li&gt;Rapid prototyping with CrewAI Studio&lt;/li&gt;
&lt;li&gt;Team includes non-technical members who need the visual builder&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Skip If
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You need the deepest MCP-native architecture&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  6. OpenAI Agents SDK
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/openai/openai-agents-python" rel="noopener noreferrer"&gt;openai/openai-agents-python&lt;/a&gt; | Python, JavaScript&lt;/p&gt;

&lt;p&gt;OpenAI's official framework, released March 2025. Lightweight and opinionated—provides just enough structure without heavyweight abstractions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Hosted MCP tools&lt;/strong&gt; — OpenAI manages the infrastructure, you just point to a URL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local MCP servers&lt;/strong&gt; — Full control when you need it&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handoffs&lt;/strong&gt; — Agents delegate to specialized sub-agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guardrails&lt;/strong&gt; — Enforce constraints on agent behavior&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in tracing&lt;/strong&gt; — Observability out of the box&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Runner&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;HostedMCPTool&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Assistant&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="nc"&gt;HostedMCPTool&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;tool_config&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mcp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;server_label&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gitmcp&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;server_url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://gitmcp.io/openai/codex&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;require_approval&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;never&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;Runner&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What language is this repo written in?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;final_output&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use When
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You're already in the OpenAI ecosystem&lt;/li&gt;
&lt;li&gt;You want hosted MCP without managing infrastructure&lt;/li&gt;
&lt;li&gt;You need handoffs between specialized agents&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Skip If
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You need model-agnostic architecture&lt;/li&gt;
&lt;li&gt;You want deeper control over MCP server lifecycle&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Google ADK (Agent Development Kit)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/google/adk-python" rel="noopener noreferrer"&gt;google/adk-python&lt;/a&gt; | Python&lt;/p&gt;

&lt;p&gt;Google's open-source framework, announced at Cloud NEXT 2025. This is the same framework powering Agentspace and Google Customer Engagement Suite.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bidirectional streaming&lt;/strong&gt; — Real-time audio and video with agents&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Model agnostic&lt;/strong&gt; — Gemini, Vertex AI Model Garden, or any LiteLLM-supported model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Toolbox for Databases&lt;/strong&gt; — Pre-built, production-ready tools for BigQuery, AlloyDB, Spanner, Cloud SQL&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A2A Protocol support&lt;/strong&gt; — Google's agent interoperability standard&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Code Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google.adk.tools&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MCPToolset&lt;/span&gt;

&lt;span class="c1"&gt;# Connect to MCP server
&lt;/span&gt;&lt;span class="n"&gt;mcp_tools&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MCPToolset&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_server&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;npx&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;-y&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;@anthropic/mcp-server-youtube&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;research_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-2.0-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;tools&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;mcp_tools&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a research assistant with YouTube access&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Find videos about MCP protocol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Use When
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You're building on Google Cloud / Vertex AI&lt;/li&gt;
&lt;li&gt;You need bidirectional audio/video streaming&lt;/li&gt;
&lt;li&gt;You want enterprise database integrations out of the box&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Skip If
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You're not in the Google ecosystem&lt;/li&gt;
&lt;li&gt;You need the simplest possible setup&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Feature Comparison (Updated December 2025)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;mcp-agent&lt;/th&gt;
&lt;th&gt;LangGraph&lt;/th&gt;
&lt;th&gt;AG2&lt;/th&gt;
&lt;th&gt;PydanticAI&lt;/th&gt;
&lt;th&gt;CrewAI&lt;/th&gt;
&lt;th&gt;OpenAI SDK&lt;/th&gt;
&lt;th&gt;Google ADK&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;MCP Native&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;Integration&lt;/td&gt;
&lt;td&gt;Integration&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ Hosted&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;A2A Support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Durability&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Automatic&lt;/td&gt;
&lt;td&gt;Configure&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Automatic&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Visual Debug&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Temporal UI&lt;/td&gt;
&lt;td&gt;✅ Studio&lt;/td&gt;
&lt;td&gt;Studio&lt;/td&gt;
&lt;td&gt;Logfire&lt;/td&gt;
&lt;td&gt;Studio&lt;/td&gt;
&lt;td&gt;Tracing&lt;/td&gt;
&lt;td&gt;Dev UI&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Type Safety&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;✅ Full&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;No-Code&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;Studio&lt;/td&gt;
&lt;td&gt;Studio&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅ Studio&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Streaming&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅ Bidirectional&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Why MCP Matters in 2025
&lt;/h2&gt;

&lt;p&gt;Model Context Protocol launched in November 2024. Here's where we are now:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who's adopted it:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Anthropic&lt;/strong&gt; — Creator, built into Claude&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI&lt;/strong&gt; — Official adoption March 2025, hosted MCP in Agents SDK&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google&lt;/strong&gt; — ADK includes MCP Toolbox, full protocol support&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Microsoft&lt;/strong&gt; — Integrated into Azure AI&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub, Cursor, VS Code&lt;/strong&gt; — MCP support shipped&lt;/li&gt;
&lt;li&gt;Hundreds of community MCP servers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Native vs. Adapter:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Frameworks built for MCP (mcp-agent, PydanticAI, OpenAI SDK, Google ADK) work directly with the protocol. When new MCP capabilities ship, they work immediately.&lt;/p&gt;

&lt;p&gt;Frameworks that added MCP later use adapter layers. They work, but there's an abstraction cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Practical Benefit:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hundreds of MCP servers exist for filesystems, databases, APIs, and internal tools. Native MCP support means you use them without writing integration code.&lt;/p&gt;




&lt;h2&gt;
  
  
  Decision Framework
&lt;/h2&gt;

&lt;h3&gt;
  
  
  By Use Case
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Building with MCP?&lt;/strong&gt; → mcp-agent (native) or PydanticAI (native + A2A)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Need visual debugging?&lt;/strong&gt; → LangGraph Studio&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conversational multi-agent?&lt;/strong&gt; → AG2&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Type safety critical?&lt;/strong&gt; → PydanticAI&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rapid prototyping?&lt;/strong&gt; → CrewAI Studio&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenAI ecosystem?&lt;/strong&gt; → OpenAI Agents SDK&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Cloud?&lt;/strong&gt; → Google ADK&lt;/p&gt;

&lt;h3&gt;
  
  
  By Technical Requirement
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Simplest durable execution:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# mcp-agent - one line
&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MCPApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;execution_engine&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;temporal&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Most control over durability:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# LangGraph - explicit checkpointing
&lt;/span&gt;&lt;span class="n"&gt;checkpointer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;SqliteSaver&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_conn_string&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;:memory:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;workflow&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;checkpointer&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;checkpointer&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Complex workflows:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Graph-based → LangGraph&lt;/li&gt;
&lt;li&gt;Code-based → mcp-agent
&lt;/li&gt;
&lt;li&gt;Conversational → AG2&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  By Team
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Small startup:&lt;/strong&gt; mcp-agent (less boilerplate) or CrewAI (rapid iteration)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise:&lt;/strong&gt; LangGraph (mature observability) or Google ADK (GCP integration)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-technical stakeholders:&lt;/strong&gt; CrewAI Studio or AutoGen Studio&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Production Considerations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Observability Options
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Framework&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What You Get&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;LangGraph&lt;/td&gt;
&lt;td&gt;LangSmith&lt;/td&gt;
&lt;td&gt;Comprehensive tracing, evals&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;PydanticAI&lt;/td&gt;
&lt;td&gt;Logfire&lt;/td&gt;
&lt;td&gt;Real-time monitoring, MCP server included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;mcp-agent&lt;/td&gt;
&lt;td&gt;Temporal UI&lt;/td&gt;
&lt;td&gt;Execution visibility, workflow debugging&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CrewAI&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;td&gt;Monitoring and metrics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI SDK&lt;/td&gt;
&lt;td&gt;Built-in tracing&lt;/td&gt;
&lt;td&gt;Token usage, latency, errors&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google ADK&lt;/td&gt;
&lt;td&gt;Cloud Monitoring&lt;/td&gt;
&lt;td&gt;GCP-native observability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  What to Track
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Token usage and costs&lt;/li&gt;
&lt;li&gt;Latency per tool call&lt;/li&gt;
&lt;li&gt;Tool call success/failure rates&lt;/li&gt;
&lt;li&gt;Decision paths through workflows&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Bottom Line
&lt;/h2&gt;

&lt;p&gt;If you're starting fresh in 2025:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;MCP support matters&lt;/strong&gt; — Less integration code, better interoperability, future-proof as the protocol evolves&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pick based on your constraints&lt;/strong&gt; — Team size, existing stack, debugging needs, and whether you need visual tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Don't over-engineer&lt;/strong&gt; — If a single agent with a few MCP servers solves your problem, you don't need multi-agent orchestration&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The frameworks that will win long-term are the ones building for open protocols (MCP, A2A) rather than proprietary integrations. That's where interoperability lives.&lt;/p&gt;




&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;mcp-agent:&lt;/strong&gt; &lt;a href="https://docs.mcp-agent.com" rel="noopener noreferrer"&gt;docs.mcp-agent.com&lt;/a&gt; | &lt;code&gt;uvx mcp-agent init&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LangGraph:&lt;/strong&gt; &lt;a href="https://langchain-ai.github.io/langgraph" rel="noopener noreferrer"&gt;langchain-ai.github.io/langgraph&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AG2:&lt;/strong&gt; &lt;a href="https://docs.ag2.ai" rel="noopener noreferrer"&gt;docs.ag2.ai&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PydanticAI:&lt;/strong&gt; &lt;a href="https://ai.pydantic.dev" rel="noopener noreferrer"&gt;ai.pydantic.dev&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CrewAI:&lt;/strong&gt; &lt;a href="https://docs.crewai.com" rel="noopener noreferrer"&gt;docs.crewai.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI Agents SDK:&lt;/strong&gt; &lt;a href="https://openai.github.io/openai-agents-python" rel="noopener noreferrer"&gt;openai.github.io/openai-agents-python&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google ADK:&lt;/strong&gt; &lt;a href="https://google.github.io/adk-docs" rel="noopener noreferrer"&gt;google.github.io/adk-docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Building something with these frameworks? I'd love to hear what's working (or not) — find me on &lt;a href="https://linkedin.com" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt; or &lt;a href="https://twitter.com" rel="noopener noreferrer"&gt;Twitter/X&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>python</category>
      <category>mcp</category>
      <category>agents</category>
    </item>
    <item>
      <title>🚀 How to Build and Deploy ChatGPT Apps with MCP Servers</title>
      <dc:creator>Hanieh Zahiremami</dc:creator>
      <pubDate>Wed, 12 Nov 2025 17:46:22 +0000</pubDate>
      <link>https://dev.to/hani__8725b7a/how-to-build-and-deploy-chatgpt-apps-with-mcp-servers-4dda</link>
      <guid>https://dev.to/hani__8725b7a/how-to-build-and-deploy-chatgpt-apps-with-mcp-servers-4dda</guid>
      <description>&lt;p&gt;&lt;strong&gt;Deploy MCP servers to build agentic ChatGPT applications. This guide covers MCP server deployment architecture, best practices, and why specialized infrastructure matters.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MCP servers extend ChatGPT with tools, resources, and custom UI&lt;/li&gt;
&lt;li&gt;Generic platforms require manual WebSocket config, asset bundling, and state management&lt;/li&gt;
&lt;li&gt;MCP Agent Cloud (MCP-C) provides native MCP protocol support with 5-minute deploys&lt;/li&gt;
&lt;li&gt;Follow this guide to deploy your first MCP server and connect it to ChatGPT&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Deploy MCP Servers?
&lt;/h2&gt;

&lt;p&gt;Deploying MCP servers transforms ChatGPT from a conversational interface into an agentic platform capable of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Calling external APIs and databases autonomously&lt;/li&gt;
&lt;li&gt;Rendering interactive UI components inside chat&lt;/li&gt;
&lt;li&gt;Maintaining context across multi-turn conversations&lt;/li&gt;
&lt;li&gt;Executing complex workflows on behalf of users&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The deployment challenge:&lt;/strong&gt; MCP protocol requires WebSocket handling, widget asset optimization, and persistent state management—capabilities not standard in typical hosting platforms.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏗️ ChatGPT App Architecture
&lt;/h2&gt;

&lt;p&gt;ChatGPT Apps consist of two main components:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. MCP Server&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Handles authentication, provides tools/prompts/resources, and serves the app's UI&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Web Client&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
HTML, JavaScript, and CSS that renders inside ChatGPT&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌─────────────┐
│   ChatGPT   │
│  Interface  │
└──────┬──────┘
       │ connects to
       ▼
┌─────────────┐      serves assets
│ MCP Server  │ ───────────────────► Web Client renders
│             │                       inside ChatGPT
└─────────────┘
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The ChatGPT interface connects directly to your MCP Server. The server either sends assets directly or returns a URL to the Web Client. Once loaded, the Web Client's content renders inside ChatGPT for user interaction.&lt;/p&gt;




&lt;h2&gt;
  
  
  🔧 What MCP Servers Provide
&lt;/h2&gt;

&lt;p&gt;MCP servers extend ChatGPT with three key capabilities:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Capability&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Functions ChatGPT can call autonomously&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;UI templates and data that render in chat&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Prompts&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Predefined conversational patterns&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;When you deploy an MCP server, you're giving ChatGPT the ability to interact with external systems while maintaining conversational context.&lt;/p&gt;




&lt;h2&gt;
  
  
  🎯 Design Principles for ChatGPT Apps
&lt;/h2&gt;

&lt;p&gt;The best ChatGPT apps help people accomplish something meaningful through a combination of chat with visual and interactive elements. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good use cases:&lt;/strong&gt; Ride booking, ordering food, tracking deliveries&lt;/p&gt;

&lt;p&gt;According to &lt;a href="https://developers.openai.com/apps-sdk/concepts/design-guidelines" rel="noopener noreferrer"&gt;OpenAI's design guidelines&lt;/a&gt;, successful ChatGPT apps follow these principles:&lt;/p&gt;

&lt;h3&gt;
  
  
  Conversational
&lt;/h3&gt;

&lt;p&gt;Experiences should feel like a natural extension of ChatGPT, fitting seamlessly into the conversational flow and UI.&lt;/p&gt;

&lt;h3&gt;
  
  
  Intelligent
&lt;/h3&gt;

&lt;p&gt;Tools should be aware of conversation context, supporting and anticipating user intent. Responses and UI should feel individually relevant.&lt;/p&gt;

&lt;h3&gt;
  
  
  Simple
&lt;/h3&gt;

&lt;p&gt;Each interaction should focus on a single clear action or outcome. Information and UI should be reduced to the absolute minimum to support the context.&lt;/p&gt;

&lt;h3&gt;
  
  
  Responsive
&lt;/h3&gt;

&lt;p&gt;Tools should feel fast and lightweight, enhancing conversation rather than overwhelming it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Accessible
&lt;/h3&gt;

&lt;p&gt;Designs must support a wide range of users, including those who rely on assistive technologies.&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚠️ MCP Server Deployment Challenges
&lt;/h2&gt;

&lt;p&gt;Deploying MCP servers isn't straightforward on generic platforms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP protocol requires specific WebSocket handling&lt;/li&gt;
&lt;li&gt;ChatGPT widget assets need bundling and CDN delivery&lt;/li&gt;
&lt;li&gt;State management across conversation turns&lt;/li&gt;
&lt;li&gt;Authentication for multi-user scenarios&lt;/li&gt;
&lt;li&gt;Real-time monitoring for agentic behavior&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The problem:&lt;/strong&gt; These aren't standard features in typical hosting platforms.&lt;/p&gt;




&lt;h2&gt;
  
  
  📁 Recommended Project Structure
&lt;/h2&gt;

&lt;p&gt;A production ChatGPT app built with MCP servers typically follows this structure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chatgpt-app/
├── server.py          # MCP server implementation
├── mcp.json           # Deployment configuration
├── widgets/           # HTML templates for ChatGPT UI
│   └── chart.html
├── static/            # JavaScript and CSS assets
│   ├── app.js
│   └── styles.css
└── tools/             # Tool implementations
    └── analytics.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 1: Build the Web Assets
&lt;/h3&gt;

&lt;p&gt;The server serves these assets via FastMCP resources. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; For initial iteration, you can inline HTML/JS inside the MCP resource, but packaging static files yields better caching.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Example widget HTML&lt;/strong&gt; (&lt;code&gt;widgets/chart.html&lt;/code&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="cp"&gt;&amp;lt;!DOCTYPE html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;html&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;head&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;script &lt;/span&gt;&lt;span class="na"&gt;src=&lt;/span&gt;&lt;span class="s"&gt;"/static/app.js"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/script&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;link&lt;/span&gt; &lt;span class="na"&gt;rel=&lt;/span&gt;&lt;span class="s"&gt;"stylesheet"&lt;/span&gt; &lt;span class="na"&gt;href=&lt;/span&gt;&lt;span class="s"&gt;"/static/styles.css"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/head&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;body&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"chart-container"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/body&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/html&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Define Widget Metadata
&lt;/h3&gt;

&lt;p&gt;ChatGPT Apps understand OpenAI-specific tool annotations. When your tool returns &lt;code&gt;EmbeddedResource&lt;/code&gt; metadata, ChatGPT hydrates the widget using the referenced HTML template.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example tool with widget metadata:&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚢 Deploy MCP Servers: Three Approaches
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Option 1: Self-Hosted
&lt;/h3&gt;

&lt;p&gt;Configure everything manually: MCP protocol handlers, WebSocket servers, asset bundling, scaling logic.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Pros:&lt;/strong&gt; Full control&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Cons:&lt;/strong&gt; High setup cost, ongoing maintenance&lt;/p&gt;
&lt;h3&gt;
  
  
  Option 2: Generic PaaS
&lt;/h3&gt;

&lt;p&gt;Use platforms like Heroku or Railway. Still requires manual MCP configuration and ChatGPT-specific optimizations.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Pros:&lt;/strong&gt; Easier than self-hosting&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Cons:&lt;/strong&gt; Moderate setup time, manual optimization needed&lt;/p&gt;
&lt;h3&gt;
  
  
  Option 3: MCP Agent Cloud
&lt;/h3&gt;

&lt;p&gt;Purpose-built for MCP servers. Native protocol support, automatic ChatGPT integration, built-in asset optimization.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Pros:&lt;/strong&gt; 5-minute deploys, built specifically for MCP&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Cons:&lt;/strong&gt; Less customization than self-hosted&lt;/p&gt;


&lt;h2&gt;
  
  
  ☁️ How to Deploy MCP Servers with MCP Agent Cloud
&lt;/h2&gt;

&lt;p&gt;MCP-C is infrastructure designed specifically for MCP server deployment.&lt;/p&gt;
&lt;h3&gt;
  
  
  Configuration
&lt;/h3&gt;

&lt;p&gt;Create a simple &lt;code&gt;mcp.json&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"analytics-agent"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"server.py"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"runtime"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"python:3.11"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"scaling"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"min_instances"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"max_instances"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Deployment
&lt;/h3&gt;

&lt;p&gt;Two commands. That's it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install CLI&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @mcp-agent/cli

&lt;span class="c"&gt;# Deploy&lt;/span&gt;
mcp-c deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What MCP-C handles automatically:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSL certificates for secure connections&lt;/li&gt;
&lt;li&gt;Global CDN for widget assets&lt;/li&gt;
&lt;li&gt;WebSocket connection management&lt;/li&gt;
&lt;li&gt;Auto-scaling based on usage&lt;/li&gt;
&lt;li&gt;Environment variable management&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Monitoring
&lt;/h3&gt;

&lt;p&gt;Stay on top of your app's performance:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Real-time logs&lt;/span&gt;
mcp-c logs your-app &lt;span class="nt"&gt;--follow&lt;/span&gt;

&lt;span class="c"&gt;# Usage metrics&lt;/span&gt;
mcp-c metrics your-app

&lt;span class="c"&gt;# Debug specific interactions&lt;/span&gt;
mcp-c trace &lt;span class="nt"&gt;--request-id&lt;/span&gt; abc123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  💻 Building Your MCP Server
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Core Implementation
&lt;/h3&gt;

&lt;p&gt;Every MCP server needs these components:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Tool registration&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Define functions ChatGPT can call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resource handlers&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Serve UI templates and data&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Widget metadata&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;OpenAI-specific rendering instructions&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Example Structure
&lt;/h3&gt;

&lt;p&gt;Here's a complete example showing how tools and resources work together:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastmcp&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastMCP&lt;/span&gt;

&lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastMCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Analytics Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nd"&gt;@mcp.tool&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_metrics&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;metric_type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Fetch analytics data and return with widget&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;data&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;fetch_from_database&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;metric_type&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
            &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;type&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resource&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;resource&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;uri&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;widget://chart&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mimeType&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text/html&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;generate_chart_html&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;data&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
                &lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;@mcp.resource&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;widget://chart&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;chart_template&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;Serve the chart widget HTML template&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;widgets/chart.html&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Testing Your App
&lt;/h3&gt;

&lt;p&gt;Before deployment, test your MCP server locally using &lt;a href="https://github.com/modelcontextprotocol/inspector" rel="noopener noreferrer"&gt;MCP Inspector&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install dependencies&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @modelcontextprotocol/inspector

&lt;span class="c"&gt;# Start your MCP server&lt;/span&gt;
python server.py  &lt;span class="c"&gt;# Server runs on port 8000&lt;/span&gt;

&lt;span class="c"&gt;# In another terminal, run MCP Inspector&lt;/span&gt;
mcp-inspector http://localhost:8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;In MCP Inspector:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Tools &amp;gt; List Tools&lt;/strong&gt; to see available tools&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Resources &amp;gt; List Resources&lt;/strong&gt; to see widget HTML templates
&lt;/li&gt;
&lt;li&gt;Run a tool to see the widget metadata and structured result&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Verify everything works:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tool discovery works correctly&lt;/li&gt;
&lt;li&gt;Resources load properly&lt;/li&gt;
&lt;li&gt;Widget metadata validates&lt;/li&gt;
&lt;li&gt;Static assets (JS/CSS) serve from &lt;code&gt;http://127.0.0.1:8000/static&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🔒 MCP Server Deployment Best Practices
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Validate all inputs from ChatGPT&lt;/li&gt;
&lt;li&gt;Use environment variables for secrets&lt;/li&gt;
&lt;li&gt;Implement rate limiting&lt;/li&gt;
&lt;li&gt;Configure CORS properly&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Keep widget payloads under 100KB&lt;/li&gt;
&lt;li&gt;Use efficient database queries&lt;/li&gt;
&lt;li&gt;Implement caching where appropriate&lt;/li&gt;
&lt;li&gt;Monitor response times&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Error Handling
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Return user-friendly error messages&lt;/li&gt;
&lt;li&gt;Log errors for debugging&lt;/li&gt;
&lt;li&gt;Provide graceful fallbacks&lt;/li&gt;
&lt;li&gt;Monitor error rates&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  💡 Common Use Cases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Data Analysis Agents
&lt;/h3&gt;

&lt;p&gt;Deploy dashboards and visualizations directly in ChatGPT. Users query data conversationally, see results rendered as interactive charts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Workflow Automation Agents
&lt;/h3&gt;

&lt;p&gt;Connect to project management tools, CRMs, or internal systems. ChatGPT becomes an interface for triggering actions and checking status.&lt;/p&gt;

&lt;h3&gt;
  
  
  Customer Support Agents
&lt;/h3&gt;

&lt;p&gt;Integrate helpdesk systems, knowledge bases, and ticket management. Support queries get resolved within the conversation.&lt;/p&gt;




&lt;h2&gt;
  
  
  📊 MCP Server Deployment Comparison
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Aspect&lt;/th&gt;
&lt;th&gt;Self-Hosted&lt;/th&gt;
&lt;th&gt;Generic PaaS&lt;/th&gt;
&lt;th&gt;MCP-C&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;MCP Protocol Setup&lt;/td&gt;
&lt;td&gt;Manual configuration&lt;/td&gt;
&lt;td&gt;Manual configuration&lt;/td&gt;
&lt;td&gt;Native support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ChatGPT Integration&lt;/td&gt;
&lt;td&gt;Build yourself&lt;/td&gt;
&lt;td&gt;Build yourself&lt;/td&gt;
&lt;td&gt;Automatic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Widget Asset Handling&lt;/td&gt;
&lt;td&gt;DIY bundling + CDN&lt;/td&gt;
&lt;td&gt;DIY bundling + CDN&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WebSocket Management&lt;/td&gt;
&lt;td&gt;Configure yourself&lt;/td&gt;
&lt;td&gt;Configure yourself&lt;/td&gt;
&lt;td&gt;Handled&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Deployment Time&lt;/td&gt;
&lt;td&gt;Hours&lt;/td&gt;
&lt;td&gt;30-60 minutes&lt;/td&gt;
&lt;td&gt;~5 minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ongoing Maintenance&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Low&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  🎬 Getting Started
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Quick Start with Example Projects
&lt;/h3&gt;

&lt;p&gt;The MCP Agent repository includes complete ChatGPT app examples to get you started:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Clone the example repository&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/lastmile-ai/mcp-agent
&lt;span class="nb"&gt;cd &lt;/span&gt;mcp-agent/examples/cloud/chatgpt_apps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 2: Install dependencies&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install
&lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Test locally&lt;/strong&gt; (see Testing section above)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Deploy to MCP Agent Cloud&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @mcp-agent/cli
mcp-c deploy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 5: Connect to ChatGPT&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open ChatGPT GPT Builder&lt;/li&gt;
&lt;li&gt;Add your MCP server URL from deployment&lt;/li&gt;
&lt;li&gt;Test your app's tools and widgets&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Learning Resources
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full Documentation&lt;/strong&gt;: &lt;a href="https://docs.mcp-agent.com" rel="noopener noreferrer"&gt;docs.mcp-agent.com&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Deployment Guide&lt;/strong&gt;: &lt;a href="https://docs.mcp-agent.com/cloud/use-cases/build-chatgpt-apps" rel="noopener noreferrer"&gt;docs.mcp-agent.com/cloud/use-cases/build-chatgpt-apps&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Example Code&lt;/strong&gt;: &lt;a href="https://github.com/lastmile-ai/mcp-agent/tree/main/examples/cloud/chatgpt_apps" rel="noopener noreferrer"&gt;github.com/lastmile-ai/mcp-agent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Inspector&lt;/strong&gt;: Debug and test locally&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🎯 Why This Matters
&lt;/h2&gt;

&lt;p&gt;MCP servers transform ChatGPT from a conversational interface into an agentic platform. The deployment infrastructure determines whether you spend time building features or managing servers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Choose your approach based on:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Control needs&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Self-host if you need custom infrastructure&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Development speed&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use specialized platforms to ship faster&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Maintenance capacity&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Consider long-term operational costs&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Key insight:&lt;/strong&gt; MCP servers have specific requirements—WebSocket handling, widget asset delivery, state management—that generic platforms weren't designed to handle.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  FAQ: Deploy MCP Servers
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q: What is an MCP server?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: An MCP server implements the Model Context Protocol to extend ChatGPT with custom tools, resources, and UI components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Can I deploy MCP servers on any cloud platform?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: Yes, but you'll need to manually configure WebSocket support, asset bundling, and state management. Purpose-built platforms like MCP-C handle this automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How long does it take to deploy an MCP server?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: On MCP Agent Cloud: ~5 minutes. On generic PaaS: 30-60 minutes. Self-hosted: several hours for initial setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: What's the difference between MCP servers and regular APIs?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: MCP servers provide tools (functions), resources (UI templates), and prompts that ChatGPT can use autonomously. Regular APIs just return data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: Do I need to know the MCP protocol to deploy MCP servers?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: Not with frameworks like FastMCP. They handle protocol implementation. You just define tools and resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q: How do I test MCP servers before deploying?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
A: Use MCP Inspector to test locally. It lets you verify tool discovery, resource loading, and widget rendering.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Tags&lt;/strong&gt;: &lt;code&gt;#MCP&lt;/code&gt; &lt;code&gt;#MCPServer&lt;/code&gt; &lt;code&gt;#ChatGPT&lt;/code&gt; &lt;code&gt;#AgenticAI&lt;/code&gt; &lt;code&gt;#Deployment&lt;/code&gt; &lt;code&gt;#ModelContextProtocol&lt;/code&gt;&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>mcp</category>
      <category>apps</category>
      <category>cloud</category>
    </item>
    <item>
      <title>🚀 Hosting ChatGPT Apps on the Cloud</title>
      <dc:creator>Hanieh Zahiremami</dc:creator>
      <pubDate>Tue, 21 Oct 2025 16:36:13 +0000</pubDate>
      <link>https://dev.to/hani__8725b7a/hosting-chatgpt-apps-on-the-cloud-37jm</link>
      <guid>https://dev.to/hani__8725b7a/hosting-chatgpt-apps-on-the-cloud-37jm</guid>
      <description>&lt;p&gt;You can now deploy and host &lt;strong&gt;ChatGPT Apps&lt;/strong&gt; on &lt;strong&gt;mcp-agent cloud&lt;/strong&gt;, our MCP-native platform.&lt;br&gt;&lt;br&gt;
No complex infra. No manual setup. Just write your app, connect it, and deploy in minutes.&lt;/p&gt;




  
  Your browser does not support the video tag.



&lt;h2&gt;
  
  
  💬 What Are ChatGPT Apps
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://openai.com/index/introducing-apps-in-chatgpt/" rel="noopener noreferrer"&gt;ChatGPT Apps&lt;/a&gt; let you create interactive experiences that live inside ChatGPT conversations.&lt;br&gt;&lt;br&gt;
Apps can connect to APIs, databases, or services and respond with in-chat UI elements such as maps, charts, or playlists.&lt;/p&gt;

&lt;p&gt;ChatGPT Apps are powered by the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;, which allows ChatGPT to talk directly to external services through a structured interface.&lt;/p&gt;


&lt;h2&gt;
  
  
  ⚙️ What is mcp-agent
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;mcp-agent&lt;/strong&gt; is an open-source toolkit and hosting platform for developers building &lt;strong&gt;MCP servers&lt;/strong&gt; and &lt;strong&gt;ChatGPT Apps&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It helps you:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build and run MCP servers locally or in the cloud
&lt;/li&gt;
&lt;li&gt;Simplify connection between your ChatGPT App and backend
&lt;/li&gt;
&lt;li&gt;Manage deployment, logging, and configuration automatically&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, &lt;strong&gt;mcp-agent&lt;/strong&gt; is the bridge between your Python app and ChatGPT.&lt;br&gt;&lt;br&gt;
With &lt;strong&gt;mcp-agent cloud&lt;/strong&gt;, you can host your MCP server and get a public endpoint ready for ChatGPT in minutes.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧠 Quick Start: Deploy Your ChatGPT App
&lt;/h2&gt;
&lt;h3&gt;
  
  
  TL;DR
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Create an &lt;code&gt;MCPApp()&lt;/code&gt; in your Python server code
&lt;/li&gt;
&lt;li&gt;Install the &lt;code&gt;mcp-agent&lt;/code&gt; library
&lt;/li&gt;
&lt;li&gt;Deploy with the &lt;code&gt;mcp-agent&lt;/code&gt; CLI&lt;/li&gt;
&lt;/ol&gt;


&lt;h3&gt;
  
  
  1️⃣ Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Python &lt;strong&gt;3.10+&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;h3&gt;
  
  
  2️⃣ Install Dependencies
&lt;/h3&gt;

&lt;p&gt;Using &lt;code&gt;uv&lt;/code&gt; (recommended):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv init
uv &lt;span class="nb"&gt;sync&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or with pip:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;mcp-agent
pip &lt;span class="nb"&gt;install &lt;/span&gt;fastapi
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  3️⃣ Create an MCPApp()
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;MCPApp&lt;/code&gt; is what connects your MCP server to mcp-agent cloud.&lt;br&gt;&lt;br&gt;
Here’s a minimal example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mcp_agent.app&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MCPApp&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;fastmcp&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;FastMCP&lt;/span&gt;  &lt;span class="c1"&gt;# import if your project uses FastMCP
&lt;/span&gt;
&lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;FastMCP&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-app-name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;message_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;/sse/messages&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# aligns with your SSE path
&lt;/span&gt;    &lt;span class="n"&gt;stateless_http&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="c1"&gt;# recommended for cloud hosting
&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;## Register your MCP server as an mcp-agent App
&lt;/span&gt;&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MCPApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-app-name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;description&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-app-description&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;mcp&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;## Your ChatGPT Application code here
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These few lines are what make your app discoverable and deployable by mcp-agent cloud.&lt;/p&gt;




&lt;h3&gt;
  
  
  4️⃣ Add Deployment Config and Secrets
&lt;/h3&gt;

&lt;p&gt;At your repo root, create two files:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;code&gt;mcp_agent.config.yaml&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;execution_engine&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;asyncio&lt;/span&gt;

&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-app-name"&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;your-app-description"&lt;/span&gt;

&lt;span class="na"&gt;logger&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;transports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;console&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="nv"&gt;file&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
  &lt;span class="na"&gt;level&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;info&lt;/span&gt;
  &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;logs/mcp-agent.log&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;&lt;code&gt;mcp_agent.secrets.yaml&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;## Optional: include API keys, tokens, or secrets here&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  5️⃣ Deploy to mcp-agent Cloud
&lt;/h3&gt;

&lt;p&gt;Using &lt;code&gt;uv&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run mcp-agent login
uv run mcp-agent deploy &lt;span class="nt"&gt;--no-auth&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or with &lt;code&gt;venv&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mcp-agent login
mcp-agent deploy &lt;span class="nt"&gt;--no-auth&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Support for OAuth coming soon&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After a successful deploy, you’ll see a cloud URL like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://&amp;lt;deployment-id&amp;gt;.deployments.mcp-agent.com/sse
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  6️⃣ Connect to ChatGPT
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Enable &lt;strong&gt;Developer Mode&lt;/strong&gt; in ChatGPT
&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings → Connectors&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Add your app’s cloud URL (make sure it ends with &lt;code&gt;/sse&lt;/code&gt;)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fandrew-dev-s3.s3.us-east-1.amazonaws.com%2Fchatgpt.com_%28thumbnails%29.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fandrew-dev-s3.s3.us-east-1.amazonaws.com%2Fchatgpt.com_%28thumbnails%29.png" alt="Adding a custom connector to ChatGPT" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;ChatGPT connects to the &lt;code&gt;/sse&lt;/code&gt; endpoint, so that suffix is required.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  🧰 Troubleshooting
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;404 or Connection Errors:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Make sure your URL ends with &lt;code&gt;/sse&lt;/code&gt; and your app’s &lt;code&gt;message_path&lt;/code&gt; is &lt;code&gt;/sse/messages&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auth Errors:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If deploy fails, run &lt;code&gt;mcp-agent login&lt;/code&gt;.&lt;br&gt;&lt;br&gt;
If ChatGPT can’t connect, make sure you deployed with &lt;code&gt;--no-auth&lt;/code&gt; for open access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debugging:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Use &lt;a href="https://modelcontextprotocol.io/docs/tools/inspector" rel="noopener noreferrer"&gt;MCP Inspector&lt;/a&gt; to test and validate your MCP server locally.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧩 Example Projects
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/lastmile-ai/openai-apps-sdk" rel="noopener noreferrer"&gt;Example ChatGPT Apps&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/lastmile-ai/mcp-agent" rel="noopener noreferrer"&gt;mcp-agent GitHub Repo&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  ❤️ Wrapping Up
&lt;/h2&gt;

&lt;p&gt;ChatGPT Apps are a new way to create interactive, conversational tools that live right inside ChatGPT.&lt;br&gt;&lt;br&gt;
With &lt;strong&gt;mcp-agent cloud&lt;/strong&gt;, deploying one is as simple as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mcp-agent deploy &lt;span class="nt"&gt;--no-auth&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And just like that, your ChatGPT App is live and ready for anyone to use.&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>chatgpt</category>
      <category>webdev</category>
      <category>agents</category>
    </item>
    <item>
      <title>Automate Research &amp; Analysis Workflows Across Any Domain with `mcp-agent`</title>
      <dc:creator>Hanieh Zahiremami</dc:creator>
      <pubDate>Tue, 29 Jul 2025 16:17:25 +0000</pubDate>
      <link>https://dev.to/hani__8725b7a/automate-research-analysis-workflows-across-any-domain-with-mcp-agent-35in</link>
      <guid>https://dev.to/hani__8725b7a/automate-research-analysis-workflows-across-any-domain-with-mcp-agent-35in</guid>
      <description>&lt;p&gt;I’ve been using this agentic framework to automate both personal and work-related research, everything from analyzing real estate deals and comparing healthcare options to doing deep dives for product marketing, like competitor analysis or market sizing. It’s saved me tons of time by offloading the data pulling, cross-checking, and report writing to agents that actually get the job done.&lt;/p&gt;

&lt;p&gt;So I built a universal research agent on top of &lt;a href="https://github.com/lastmile-ai/mcp-agent" rel="noopener noreferrer"&gt;&lt;code&gt;mcp-agent&lt;/code&gt;&lt;/a&gt; a framework that lets you coordinate tools, APIs, memory, and LLM calls in one streamlined workflow.&lt;/p&gt;

&lt;p&gt;It’s modular, agentic, and fully customizable for any domain.&lt;/p&gt;




&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzu9mhtpsnb0nnjp7cynq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzu9mhtpsnb0nnjp7cynq.png" alt="System architecture diagram" width="800" height="826"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ What it does
&lt;/h2&gt;

&lt;p&gt;This framework gives you an end-to-end research pipeline:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pluggable MCP Servers for your domain’s APIs (think finance, real estate, PubMed, etc.)&lt;/li&gt;
&lt;li&gt;Automatic elicitation to ask the right questions before researching&lt;/li&gt;
&lt;li&gt;Evaluator agent to make sure the final report meets your quality standards&lt;/li&gt;
&lt;li&gt;Web search fallback when APIs fail or miss something&lt;/li&gt;
&lt;li&gt;Domain-specific analysis with insights, calculations, and summaries&lt;/li&gt;
&lt;li&gt;Markdown report writer that actually sounds smart&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🧠 How it works
&lt;/h2&gt;

&lt;p&gt;Here’s the architecture under the hood and how to run it:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Clone the repo
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/lastmile-ai/mcp-agent.git
&lt;span class="nb"&gt;cd &lt;/span&gt;mcp-agent/examples/usecases/mcp_research_agent
uv init &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; uv &lt;span class="nb"&gt;sync
&lt;/span&gt;uv add mcp-agent fastmcp aiohttp
npm i &lt;span class="nt"&gt;-g&lt;/span&gt; g-search-mcp @modelcontextprotocol/server-filesystem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  2. Set your API keys
&lt;/h3&gt;

&lt;p&gt;Copy the secrets template and add your keys for your preferred domain:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;openai&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;api_key&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;sk-..."&lt;/span&gt;
&lt;span class="na"&gt;environment&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;BLOOMBERG_API_KEY&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;..."&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  3. Configure your servers
&lt;/h3&gt;

&lt;p&gt;In &lt;code&gt;mcp_agent.config.yaml&lt;/code&gt;, set up:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your domain’s custom MCP server&lt;/li&gt;
&lt;li&gt;Web search fallback (&lt;code&gt;g-search&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Filesystem server for saving reports&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Customize agent instructions
&lt;/h3&gt;

&lt;p&gt;Swap in your domain and goals:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;instruction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;You are a {{DOMAIN}} research expert.
Use tools to gather data, fallback to web if needed.
Focus on {{INSIGHT_TYPE}} and make recommendations.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  5. Run it like this:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;uv run main.py &lt;span class="s2"&gt;"Austin real estate"&lt;/span&gt;
uv run main.py &lt;span class="s2"&gt;"AAPL earnings analysis"&lt;/span&gt;
uv run main.py &lt;span class="s2"&gt;"diabetes treatment comparison"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  ✨ Why it’s cool
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Auto-elicitation&lt;/strong&gt;: Agents ask for user preferences up front
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluator agent&lt;/strong&gt;: Iterates until the report meets brand/tone/quality
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Built-in fallback&lt;/strong&gt;: If APIs fail, web search steps in
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composable&lt;/strong&gt;: Plug in any tool or data source, adapt to any industry
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Markdown reports&lt;/strong&gt;: Clean and structured output for your team
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🚀 Build your own agent
&lt;/h2&gt;

&lt;p&gt;Want to do legal research? Healthcare summaries? Market analysis?&lt;br&gt;&lt;br&gt;
All you need to change are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The agent instructions
&lt;/li&gt;
&lt;li&gt;Your custom MCP server
&lt;/li&gt;
&lt;li&gt;API integrations and schemas
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything else stays the same.&lt;/p&gt;




&lt;p&gt;👉 The code is here: &lt;a href="https://github.com/lastmile-ai/mcp-agent/tree/main/examples/usecases/mcp_research_agent" rel="noopener noreferrer"&gt;https://github.com/lastmile-ai/mcp-agent/tree/main/examples/usecases/mcp_research_agent&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you’re into automating research, orchestrating APIs, or just hate writing the same analysis reports over and over, this one’s for you.&lt;/p&gt;

&lt;p&gt;Would love to hear what domain you’d apply this to. Drop it in the comments! 💬&lt;/p&gt;

</description>
    </item>
    <item>
      <title>🛠️ Build Your First AI Agent</title>
      <dc:creator>Hanieh Zahiremami</dc:creator>
      <pubDate>Thu, 29 May 2025 21:17:33 +0000</pubDate>
      <link>https://dev.to/hani__8725b7a/build-your-first-ai-agent-6ig</link>
      <guid>https://dev.to/hani__8725b7a/build-your-first-ai-agent-6ig</guid>
      <description>&lt;p&gt;We’ve seen a lot of excitement around AI agents—but most tutorials focus on text generation and chat interfaces. What if you want your agents to actually &lt;em&gt;do things&lt;/em&gt;? Automate tasks? Connect to tools like GitHub, Slack, or a local database?&lt;/p&gt;

&lt;p&gt;That’s exactly what &lt;a href="https://github.com/lastmile-ai/mcp-agent" rel="noopener noreferrer"&gt;MCP Agent&lt;/a&gt; is built for.&lt;/p&gt;

&lt;p&gt;This blog is for anyone who's been curious about agents and wants to build one—starting from scratch. We'll walk you through the basics using the open-source MCP Agent framework and help you build an agent that uses LLMs to reason and act across multiple tools.&lt;/p&gt;

&lt;p&gt;If you're new to the Model Context Protocol (MCP), no worries. We’ll start simple and explain what matters as we go.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌐 What is MCP?
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt; is an open standard for connecting LLMs to real tools in a structured, consistent way.&lt;/p&gt;

&lt;p&gt;It helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automate real-world tasks using LLMs&lt;/li&gt;
&lt;li&gt;Connect to tools like GitHub, Supabase, Slack, or your filesystem&lt;/li&gt;
&lt;li&gt;Build workflows that span across multiple services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as Zapier, but for AI agents — with native support for LLMs and tool calling.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧰 Why MCP Agent?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/lastmile-ai/mcp-agent" rel="noopener noreferrer"&gt;MCP Agent&lt;/a&gt; is an open-source Python SDK for building apps and agents on top of MCP.&lt;/p&gt;

&lt;p&gt;With it, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build agents that go beyond chat&lt;/li&gt;
&lt;li&gt;Compose and control complex workflows&lt;/li&gt;
&lt;li&gt;Deploy agents locally or as production-ready APIs&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Here's the block diagram of how the app would run:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpt3clakr3fza4lqsexn4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpt3clakr3fza4lqsexn4.png" alt="Block diagram of how the app would run" width="636" height="332"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  ⚙️ Install and Clone
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Option 1 (Recommended)&lt;/span&gt;
uv init
uv add mcp-agent

&lt;span class="c"&gt;# Option 2&lt;/span&gt;
pip &lt;span class="nb"&gt;install &lt;/span&gt;mcp-agent

&lt;span class="c"&gt;# Clone the examples repo&lt;/span&gt;
git clone https://github.com/lastmile-ai/mcp-agent.git
&lt;span class="nb"&gt;cd &lt;/span&gt;mcp-agent/examples
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🛠️ Tutorial: Build a Simple App
&lt;/h2&gt;

&lt;p&gt;We’ll start by calling the &lt;code&gt;filesystem&lt;/code&gt; server to write a local file.&lt;/p&gt;

&lt;h3&gt;
  
  
  📁 Project structure:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;simple_app/
├── main.py
├── mcp_agent.config.yaml
├── mcp_agent.secrets.yaml
└── pyproject.toml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🧾 &lt;code&gt;mcp_agent.config.yaml&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;mcp&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;servers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;filesystem&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;command&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;npx"&lt;/span&gt;
      &lt;span class="na"&gt;args&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;-y"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;@modelcontextprotocol/server-filesystem"&lt;/span&gt;&lt;span class="pi"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_PATH_HERE"&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  🔐 &lt;code&gt;mcp_agent.secrets.yaml&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;secrets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;filesystem&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;root_path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YOUR_PATH_HERE"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Replace &lt;code&gt;YOUR_PATH_HERE&lt;/code&gt; with your actual project directory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  📦 &lt;code&gt;pyproject.toml&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[project]&lt;/span&gt;
&lt;span class="py"&gt;name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"simple-app"&lt;/span&gt;
&lt;span class="py"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"0.1.0"&lt;/span&gt;
&lt;span class="py"&gt;dependencies&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="py"&gt;["mcp-agent&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;0.0&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="s"&gt;"]&lt;/span&gt;&lt;span class="err"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Install dependencies:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  🧪 Example: Adding Intelligence with a Simple Agent
&lt;/h2&gt;

&lt;p&gt;Here’s a simplified example of building an intelligent agent that can browse and write files.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;asyncio&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mcp_agent.app&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MCPApp&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mcp_agent.agents.agent&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Agent&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mcp_agent.mcp.mcp_connection_manager&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;MCPConnectionManager&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mcp_agent.workflows.llm.augmented_llm_openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAIAugmentedLLM&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;mcp_agent.workflows.llm.augmented_llm&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;RequestParams&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;MCPApp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;simple_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;run_agent&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;agent_app&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;context&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent_app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;
        &lt;span class="n"&gt;logger&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;agent_app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;logger&lt;/span&gt;

        &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nc"&gt;MCPConnectionManager&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server_registry&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
            &lt;span class="n"&gt;agent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Agent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;simple_agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;instruction&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;You are a smart agent that opens a browser and saves results to a file.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;server_names&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;playwright&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;filesystem&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="n"&gt;llm&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;attach_llm&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;OpenAIAugmentedLLM&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="n"&gt;request_params&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;RequestParams&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-4o&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"""&lt;/span&gt;&lt;span class="s"&gt;1. Use Playwright to open a site.
2. Extract page title.
3. Save title to a file using Filesystem server.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

            &lt;span class="n"&gt;result&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;llm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;request_params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;request_params&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;✅ Result:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;result&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
            &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="n"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;close&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;asyncio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;run_agent&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;💡 This template can be extended to coordinate multiple tools, add prompt customization, and integrate workflows like scraping, data cleaning, and automated reporting.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  ▶️ Run Your App
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python main.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see &lt;code&gt;output.txt&lt;/code&gt; created in your project directory.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧯 Common Issues
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Problem&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Server not found&lt;/td&gt;
&lt;td&gt;Check the spelling in &lt;code&gt;config.yaml&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Permission errors&lt;/td&gt;
&lt;td&gt;Double-check your root path&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Timeout&lt;/td&gt;
&lt;td&gt;Make sure Node.js is installed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tool not available&lt;/td&gt;
&lt;td&gt;Confirm the tool exists on the server&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  👥 Join the Community
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;⭐ GitHub: &lt;a href="https://github.com/lastmile-ai/mcp-agent" rel="noopener noreferrer"&gt;lastmile-ai/mcp-agent&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;💬 Discord: &lt;a href="https://discord.gg/lastmileai" rel="noopener noreferrer"&gt;Join us&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let us know what you build. We’re excited to see where you take it!&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>devops</category>
      <category>powerfuldevs</category>
      <category>ai</category>
    </item>
    <item>
      <title>Built a stock analyzer using MCP Agents.</title>
      <dc:creator>Hanieh Zahiremami</dc:creator>
      <pubDate>Fri, 23 May 2025 15:21:34 +0000</pubDate>
      <link>https://dev.to/hani__8725b7a/built-a-stock-analyzer-using-mcp-agents-heres-how-i-got-it-to-produce-high-quality-reports-32pm</link>
      <guid>https://dev.to/hani__8725b7a/built-a-stock-analyzer-using-mcp-agents-heres-how-i-got-it-to-produce-high-quality-reports-32pm</guid>
      <description>&lt;p&gt;I built a financial analyzer agent with MCP Agent that pulls stock-related data from the web, verifies the quality of the information, analyzes it, and generates a structured markdown report. (My partner needed one, so I built it to help him make better decisions lol.) It’s fully automated and runs locally using MCP servers for fetching data, evaluating quality, and writing output to disk.&lt;/p&gt;

&lt;p&gt;At first, the results weren’t great. The data was inconsistent, and the reports felt shallow. So I added an EvaluatorOptimizer, a function that loops between the research agent and an evaluator until the output hits a high-quality threshold. That one change made a huge difference.&lt;/p&gt;

&lt;p&gt;In my opinion, the real strength of this setup is the orchestrator. It controls the entire flow: when to fetch more data, when to re-run evaluations, and how to pass clean input to the analysis and reporting agents. Without it, coordinating everything would’ve been a mess. Also, it’s always fun watching the logs and seeing how the LLM thinks!&lt;/p&gt;

&lt;p&gt;Take a look and let me know what you think.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftzzckfqcvsy31fb4ipfr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftzzckfqcvsy31fb4ipfr.png" alt=" " width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>agentaichallenge</category>
    </item>
    <item>
      <title>🤖 5 AI Apps You Can Start Building Using MCP Agents</title>
      <dc:creator>Hanieh Zahiremami</dc:creator>
      <pubDate>Mon, 07 Apr 2025 20:50:45 +0000</pubDate>
      <link>https://dev.to/hani__8725b7a/5-real-world-apps-you-can-start-building-using-mcp-agents-3ecb</link>
      <guid>https://dev.to/hani__8725b7a/5-real-world-apps-you-can-start-building-using-mcp-agents-3ecb</guid>
      <description>&lt;p&gt;&lt;em&gt;(From someone building with mcp_agent and friends)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Hey Devs 👋&lt;/p&gt;

&lt;p&gt;I've been deep in the world of &lt;a href="https://modelcontextprotocol.io/introduction" rel="noopener noreferrer"&gt;Model Context Protocol (MCP)&lt;/a&gt; lately — experimenting, hacking, and exploring what happens when you stop building chatbots... and start building &lt;em&gt;actual agents&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;MCP is one of the most exciting things to emerge in AI infra recently — a clean, open protocol for letting language models interact with tools, data, and environments in a standardized way. It gives you a structure to move beyond one-off API calls and finally treat agents like autonomous reasoning systems with access to real-world context.&lt;/p&gt;

&lt;p&gt;And here’s the best part: there’s already a growing ecosystem of MCP-based agent apps you can &lt;strong&gt;fork, extend, or build on top of&lt;/strong&gt; today.&lt;/p&gt;

&lt;p&gt;The folks at &lt;strong&gt;LastMile AI&lt;/strong&gt; have been doing amazing work open-sourcing examples like &lt;code&gt;mcp_agent_server&lt;/code&gt;, &lt;code&gt;mcp_basic_agent&lt;/code&gt;, and more. I’ve been experimenting with them myself, and wanted to share &lt;strong&gt;5 apps you can start building on top of right now&lt;/strong&gt; 👇&lt;/p&gt;




&lt;h2&gt;
  
  
  1. 🗂️ &lt;a href="https://github.com/lastmile-ai/mcp-agent/tree/main/examples/mcp_basic_agent" rel="noopener noreferrer"&gt;File + URL Finder Agent &lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repo&lt;/strong&gt;: &lt;code&gt;mcp_basic_agent&lt;/code&gt; by LastMile AI&lt;/p&gt;

&lt;p&gt;A smart “Finder” agent that decides whether to fetch data from a URL or read from your local filesystem. It uses the MCP &lt;code&gt;fetch&lt;/code&gt; and &lt;code&gt;filesystem&lt;/code&gt; servers and lets the LLM decide what to use based on the request.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Ideas to build on top:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add PDF, CSV, or Markdown parsing with semantic search
&lt;/li&gt;
&lt;li&gt;Improve retrieval ranking or stream long content
&lt;/li&gt;
&lt;li&gt;Combine local docs with live web data for richer context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Your own personal research assistant that knows where to look.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. 🧠 &lt;a href="https://github.com/lastmile-ai/mcp-agent/tree/main/examples/mcp_basic_bedrock_agent" rel="noopener noreferrer"&gt;Bedrock-Powered Web Intelligence Agent  &lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repo&lt;/strong&gt;: &lt;code&gt;mcp_basic_bedrock_agent&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This example swaps in &lt;strong&gt;AWS Bedrock&lt;/strong&gt; as the LLM engine, and uses the same MCP &lt;code&gt;fetch&lt;/code&gt; server to retrieve content from URLs. Simple, powerful, and easy to plug into a cloud-native workflow.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Ideas to build on top:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add summarization + classification in a single agent loop
&lt;/li&gt;
&lt;li&gt;Integrate Bedrock toolchains (e.g. Titan, Cohere, etc.)
&lt;/li&gt;
&lt;li&gt;Customize model selection based on task type&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; A compliant, scalable research bot for enterprise teams.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. 💬 &lt;a href="https://github.com/lastmile-ai/mcp-agent/tree/main/examples/mcp_basic_slack_agent" rel="noopener noreferrer"&gt;Slack Workflow Agent  &lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repo&lt;/strong&gt;: &lt;code&gt;mcp_basic_slack_agent&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This agent can read and write to &lt;strong&gt;Slack&lt;/strong&gt; and your local &lt;strong&gt;filesystem&lt;/strong&gt; — meaning it can do things like read a file and send it to a Slack channel, or archive Slack messages to disk.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Ideas to build on top:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add Slack thread summarization or channel digests
&lt;/li&gt;
&lt;li&gt;Create alerts triggered by file system events
&lt;/li&gt;
&lt;li&gt;Build a Slack → Notion or Slack → CRM handoff tool&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Build lightweight internal tools without writing frontend code.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. 🔄 &lt;a href="https://github.com/lastmile-ai/mcp-agent/tree/main/examples/mcp_github_to_slack_agent" rel="noopener noreferrer"&gt;GitHub-to-Slack Agent  &lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repo&lt;/strong&gt;: &lt;code&gt;mcp_github_to_slack_agent&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;A full-on dev tool: this agent monitors GitHub pull requests, analyzes them using an LLM, and posts ranked, readable summaries directly into Slack. It helps teams focus on high-priority changes without drowning in GitHub noise.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Ideas to build on top:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Add issue tracking, test coverage, or CI context
&lt;/li&gt;
&lt;li&gt;Flag risky PRs with large diffs or missing reviewers
&lt;/li&gt;
&lt;li&gt;Extend to post weekly digests across multiple repos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; A dev productivity bot that does the reading for you.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. 🎛️ &lt;a href="https://github.com/lastmile-ai/mcp-agent/tree/main/examples/mcp_model_selector" rel="noopener noreferrer"&gt;Model Selector Agent  &lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Repo&lt;/strong&gt;: &lt;code&gt;mcp_model_selector&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;This one uses MCP’s &lt;code&gt;ModelPreferences&lt;/code&gt; to let an agent dynamically choose which LLM to use — based on priorities like speed, cost, and performance.&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;Ideas to build on top:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build a smart router that uses different models mid-task
&lt;/li&gt;
&lt;li&gt;Add tracking for token usage or hallucination risk
&lt;/li&gt;
&lt;li&gt;Create a GUI dashboard to compare runs by model&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use case:&lt;/strong&gt; A foundation for model-routing infrastructure for cost-aware AI apps.&lt;/p&gt;




&lt;h2&gt;
  
  
  👀 Why This Is Worth Building On
&lt;/h2&gt;

&lt;p&gt;All of these examples were built by the team at &lt;strong&gt;LastMile AI&lt;/strong&gt; to showcase what MCP agents are capable of. They’re open source, composable, and ready to be remixed.&lt;/p&gt;

&lt;p&gt;Each app is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Built on top of &lt;a href="https://github.com/lastmile-ai/mcp-agent" rel="noopener noreferrer"&gt;&lt;code&gt;mcp_agent_server&lt;/code&gt;&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Structured using clean context schemas and tool interfaces&lt;/li&gt;
&lt;li&gt;Designed to show practical, real-world AI agent workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And contributions are welcome💥&lt;/p&gt;




&lt;h2&gt;
  
  
  🧠 If You’re Curious About Agents...
&lt;/h2&gt;

&lt;p&gt;This is an awesome time to dive in. The protocol is still young, but the ideas are rock solid. Whether you're building a side project or integrating AI into real workflows, MCP gives you a clear foundation for &lt;strong&gt;context-aware&lt;/strong&gt;, &lt;strong&gt;tool-using&lt;/strong&gt;, and &lt;strong&gt;outcome-oriented&lt;/strong&gt; AI.&lt;/p&gt;

&lt;p&gt;If you’ve got ideas, questions, or want to collab — feel free to ping me.&lt;br&gt;&lt;br&gt;
And if you build something cool, definitely tag the LastMile team or contribute back.&lt;/p&gt;

&lt;p&gt;Let’s go from LLMs to agents — for real.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
