<?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: Developer Harsh</title>
    <description>The latest articles on DEV Community by Developer Harsh (@developer_harsh).</description>
    <link>https://dev.to/developer_harsh</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%2F2924015%2F5bfc3142-aa86-4ba7-b393-41368fe2dc5a.jpg</url>
      <title>DEV Community: Developer Harsh</title>
      <link>https://dev.to/developer_harsh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/developer_harsh"/>
    <language>en</language>
    <item>
      <title>9 Ways to Cut Token Consumption in Claude Code</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Sat, 30 May 2026 11:40:56 +0000</pubDate>
      <link>https://dev.to/developer_harsh/9-ways-to-cut-token-consumption-in-claude-code-3jpd</link>
      <guid>https://dev.to/developer_harsh/9-ways-to-cut-token-consumption-in-claude-code-3jpd</guid>
      <description>&lt;p&gt;After using Claude Code for serious coding work, the biggest lesson is simple: token consumption is not mainly a pricing issue. It is a workflow problem.&lt;/p&gt;

&lt;p&gt;When my Claude Code session gets messy, performance drops. It starts rereading irrelevant files, remembering failed attempts, carrying old logs, and wasting context on things that no longer matter.&lt;/p&gt;

&lt;p&gt;So my workflow is built around one principle:&lt;/p&gt;

&lt;p&gt;Keep Claude's active context small, clean, and useful.&lt;/p&gt;

&lt;p&gt;These are the 9 best ways to reduce token consumption in Claude Code that I use every day and can probably help you too.&lt;/p&gt;

&lt;h3&gt;
  
  
  tldr;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Don't send raw logs or full test results. Use filters and simple command wrappers to show only what matters: the error, the stack trace, the key details.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sonnet handles most coding work fine and costs less. Use Opus for the really hard problems. For helper tasks and exploration, use Haiku.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Don't run expensive models on simple edits, and turn off extended thinking when you don't need deep reasoning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use &lt;code&gt;/compact&lt;/code&gt; during a cleanup task while keeping what's important.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use /clear with a handoff file when switching to something completely different. This doesn’t let old failed attempts pile up in context memory.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Only put instructions that Claude needs most of the time (how to run tests, build commands, folder structure, main rules). Keep everything else in separate skill files and only load them when you actually need them, saving your tokens.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use Composio MCP to manage 1000+ tools as a single system instead of juggling 30+ active servers. When tasks are simple enough to use shell commands, use the composio CLI.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;ol&gt;
&lt;li&gt;Filter the tool output before Claude sees it
Raw logs are garbage for context. Claude does not need a 10,000-line test output. Instead, it needs the failing test, the stack trace, the expected vs. received values, and maybe the changed files.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So I avoid this:&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;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And use filtered commands:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm test2&amp;gt;&amp;amp;1 |grep-A5-E&lt;span class="s2"&gt;"FAIL|ERROR|Error|Expected|Received"&lt;/span&gt; | head-100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In my ideal setup, I create small wrappers like below and use them when needed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;cc-test
cc-lint
cc-typecheck
cc-log
cc-ci
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bottom line here is, I let Claude consume summaries, not terminal noise.&lt;/p&gt;

&lt;p&gt;This one change saves the most tokens because it prevents context pollution before it even starts.&lt;/p&gt;




&lt;ol&gt;
&lt;li&gt;Match the model to the task
Not every task needs the same horsepower, and running Opus on everything is one of the most expensive habits in Claude Code. Most coding work does not need Opus. Sonnet handles it at a fraction of the cost.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;My setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/model sonnet   → default for most coding work
/model opus     → complex architecture, deep reasoning, tricky bugs
/model haiku    → repetitive tasks, boilerplate, quick lookups
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I switch to Opus when I genuinely need deeper reasoning, and switch back as soon as the hard part is done.&lt;/p&gt;

&lt;p&gt;For subagents specifically, I set:&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="nv"&gt;CLAUDE_CODE_SUBAGENT_MODEL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;haiku
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means exploration agents, log inspectors, and doc-lookup agents all run on Haiku. The main thread stays on Sonnet.&lt;/p&gt;

&lt;p&gt;Extended thinking is another hidden cost - it burns output tokens for internal reasoning. For simple edits, I disable 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="nv"&gt;MAX_THINKING_TOKENS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0      → trivial tasks
&lt;span class="nv"&gt;MAX_THINKING_TOKENS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;10000  → architectural reasoning
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In fact, this approach is so effective that it rarely lets my context memory fill up before it resets the 5-hour limit. Basically unlimited usage!&lt;/p&gt;

&lt;p&gt;Bottom line: Using Opus for everything is like running every database query on your most expensive production server. Match the model to the work.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Don't let one session run forever with &lt;code&gt;/clear&lt;/code&gt; + &lt;code&gt;/compact&lt;/code&gt; + &lt;code&gt;handoffs&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;After enough turns, the context fills with old attempts, wrong theories, stale file reads, and outdated decisions. Even if Claude still remembers everything, much of that memory is now toxic.&lt;/p&gt;

&lt;p&gt;So I use &lt;code&gt;/clear&lt;/code&gt;, but with a different workflow. I create a &lt;a href="http://handoff.md/" rel="noopener noreferrer"&gt;handoff.md&lt;/a&gt; file, include all the relevant details required, like goal, changed file, decisions made, and so on&lt;/p&gt;

&lt;p&gt;Here is how you can do it too.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Before clearing:
Ask Claude to write .claude/session-handoff.md

Include:
&lt;span class="p"&gt;-&lt;/span&gt; current goal
&lt;span class="p"&gt;-&lt;/span&gt; changed files
&lt;span class="p"&gt;-&lt;/span&gt; decisions made
&lt;span class="p"&gt;-&lt;/span&gt; failing tests
&lt;span class="p"&gt;-&lt;/span&gt; root cause
&lt;span class="p"&gt;-&lt;/span&gt; next step
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then I run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/clear
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And restart with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Read .claude/session-handoff.md and continue.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This gives me the best of both worlds: fresh context without lost progress.&lt;/p&gt;

&lt;p&gt;For mid-task cleanup without a full reset, I use &lt;code&gt;/compact&lt;/code&gt; instead. But I never run it blindly. Before compacting, I tell Claude exactly what to preserve:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/compact Preserve: optimistic locking &lt;span class="k"&gt;for &lt;/span&gt;user updates, no schema changes this session.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/compact
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This shapes what the summary will capture. In short, critical decisions gets added to context, while removing the noise.&lt;/p&gt;

&lt;p&gt;The difference (a must-know):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;/compact&lt;/code&gt;: summarize and continue, for tasks that require a lighter context.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;/clear&lt;/code&gt;: full reset with handoff file, for tasks that require switching or starting fresh.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;: Don't treat &lt;code&gt;/clear&lt;/code&gt; as a reset button. Treat it as context garbage collection. Use &lt;code&gt;/compact&lt;/code&gt; for garbage collection mid-flight with instructions.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Keep &lt;code&gt;CLAUDE.md&lt;/code&gt; minimal
&lt;/h2&gt;

&lt;p&gt;Most people overload &lt;code&gt;CLAUDE.md&lt;/code&gt;. They add architecture notes, deployment steps, PR rules, debugging checklists, style guides, testing philosophy, and random project history.&lt;/p&gt;

&lt;p&gt;That feels organized, but it silently burns context every session.&lt;/p&gt;

&lt;p&gt;My rule:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If Claude does not need it in 80% of sessions, it does not belong in &lt;code&gt;CLAUDE.md&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My &lt;code&gt;CLAUDE.md&lt;/code&gt; only includes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; package manager
&lt;span class="p"&gt;-&lt;/span&gt; test command
&lt;span class="p"&gt;-&lt;/span&gt; build command
&lt;span class="p"&gt;-&lt;/span&gt; repo layout
&lt;span class="p"&gt;-&lt;/span&gt; core architecture constraints
&lt;span class="p"&gt;-&lt;/span&gt; forbidden patterns
&lt;span class="p"&gt;-&lt;/span&gt; naming conventions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything else goes into &lt;code&gt;skills&lt;/code&gt; or separate &lt;code&gt;docs&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.claude/skills/db-migration/SKILL.md
.claude/skills/pr-review/SKILL.md
.claude/skills/prod-debugging/SKILL.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bottom Line: Keep the base context light. loads the long workflow only when it's needed, keeping context quality intact.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Use plan mode before touching any code
&lt;/h2&gt;

&lt;p&gt;Most context waste happens because Claude jumps straight into implementation without a clear plan.&lt;/p&gt;

&lt;p&gt;It reads files speculatively, tries an approach, backtracks, and reads more files. By the time it reaches a working solution, the session is already polluted with failed attempts.&lt;/p&gt;

&lt;p&gt;Plan mode separates thinking from doing by restricting access to the write-and-modify tool.&lt;/p&gt;

&lt;p&gt;I press &lt;code&gt;Shift+Tab&lt;/code&gt; twice before doing anything non-trivial&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Shift+Tab → plan mode on
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In plan mode, Claude reads files and reasons through the problem without making any changes. I let it map dependencies and surface unknowns.&lt;/p&gt;

&lt;p&gt;Then I press &lt;code&gt;Ctrl+G&lt;/code&gt; to open and edit the plan directly before Claude writes a single line of code.&lt;/p&gt;

&lt;p&gt;Bad prompt (no plan):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add Google OAuth to the login system.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better workflow:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;[plan mode on]
I want to add Google OAuth. What files need to change?
What is the session flow? Create a plan.

[review plan, edit if needed]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;plan mode off]
Now implement from the plan.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bottom line: Claude solving the right problem the first time is always cheaper than rework. Let it plan, verify, and then execute.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Use bounded subagents for noisy exploration
&lt;/h2&gt;

&lt;p&gt;Subagents are useful, but only when tightly controlled, as they tend to wander off.&lt;/p&gt;

&lt;p&gt;I don't prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Investigate the repo.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Inspect only src/auth and tests/auth.
Return max 15 bullets.
Include exact files.
No implementation.
No broad repo scan.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In general, I use Claude subagents for noisy work, such as log analysis, test failure inspection, dependency search, doc lookup, and blast radius analysis.&lt;/p&gt;

&lt;p&gt;This multi-agent collaboration yields a cleaner workflow than a single-agent approach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bottom Line:&lt;/strong&gt; The main Claude session should not carry all the exploration. It should only receive the compressed result from each agent.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Force surgical repo navigation
&lt;/h2&gt;

&lt;p&gt;I don't ask Claude to "understand the codebase and explain it to me."&lt;/p&gt;

&lt;p&gt;That usually causes broad scanning of wrong files, leading to unnecessary context usage, not to mention agents creating docs in the native repo (recent times)&lt;/p&gt;

&lt;p&gt;Instead, I create a &lt;code&gt;docs/repo_map.md&lt;/code&gt;   with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="p"&gt;-&lt;/span&gt; main entrypoints
&lt;span class="p"&gt;-&lt;/span&gt; key modules
&lt;span class="p"&gt;-&lt;/span&gt; test commands
&lt;span class="p"&gt;-&lt;/span&gt; auth/data/payment flows
&lt;span class="p"&gt;-&lt;/span&gt; generated folders to avoid
&lt;span class="p"&gt;-&lt;/span&gt; files Claude should read first
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and then prompt accordingly. Here is an example of what I mean.&lt;/p&gt;

&lt;p&gt;Bad prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Understand the auth system and fix the bug.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Better prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find the login entrypoint. Read only the files needed to explain token validation. Do not scan unrelated directories.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This saves a lot of tokens because Claude starts from a map instead of wandering through the repo and figuring the repo out.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bottom line&lt;/strong&gt;: Repo Maps leads to fewer incorrect file reads, reducing context usage.&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Lean on skills and plugins for progressive disclosure
&lt;/h2&gt;

&lt;p&gt;Pulling stuff out of &lt;code&gt;CLAUDE.md&lt;/code&gt; only helps if the place you move it to isn't also loaded every session. That is exactly what skills are for.&lt;/p&gt;

&lt;p&gt;A skill is just a folder with a &lt;code&gt;SKILL.md&lt;/code&gt; (a short name + description, then instructions, plus any reference files or scripts). The win is how it loads: at session start Claude only sees the name and description of each &lt;a href="https://composio.dev/content/top-claude-skills" rel="noopener noreferrer"&gt;Claude skill&lt;/a&gt;, roughly 30 to 100 tokens each. &lt;/p&gt;

&lt;p&gt;The full &lt;code&gt;SKILL.md&lt;/code&gt; body loads only when Claude decides the skill is relevant, and any bundled reference files or scripts load only if they're actually needed.&lt;/p&gt;

&lt;p&gt;So I can keep deep workflows around without paying for them upfront:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;claude&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;skills&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;migration&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;SKILL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;md&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;claude&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;skills&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;pr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;review&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;SKILL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;md&lt;/span&gt;
&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;claude&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;skills&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;prod&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;debugging&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;SKILL&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;md&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Eight of these sitting in the project might cost a few hundred tokens at startup instead of dumping thousands of lines into context before any work begins. &lt;/p&gt;

&lt;p&gt;The description is doing all the heavy lifting here, so I write it specific. "Helps with documents" never triggers. "Use when filling PDF forms and extracting table data" does.&lt;/p&gt;

&lt;p&gt;Plugins are the next layer up. A plugin bundles skills, slash commands, subagents, hooks, and MCP servers into one installable unit, and you enable or disable the whole bundle on demand:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="sr"&gt;/plugin marketplace add &amp;lt;marketplace&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;span class="sr"&gt;/plugin add &amp;lt;plugin&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The point is the same as everything else in this post: keep dormant capability out of the active context. Install the plugin when a project needs it, disable it when it doesn't, and you never carry tooling you aren't using.&lt;/p&gt;

&lt;p&gt;Bad setup:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Everything stuffed into CLAUDE.md so it's "always available."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Better setup:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Tiny CLAUDE.md. Long workflows as skills with sharp descriptions. Capability sets as plugins you toggle per project.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  9. Using &lt;a href="https://dashboard.composio.dev" rel="noopener noreferrer"&gt;Composio MCP and CLI&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;One of the top bottlenecks for me with the introduction of MCP was managing 30+ MCP integrations.  Use fewer MCP servers, and the work won't be done. Use more, and it will add to the context memory.&lt;/p&gt;

&lt;p&gt;Composio solved this for me by offering a universal MCP server that plugs into any MCP-supported agents and lets it connect to 1000+ services and tools, with on-demand tool loading, remote workbench for composing tools, and bash tool for handling edge cases with scripting.&lt;/p&gt;

&lt;p&gt;Here is a brief breakdown of token savings with Composio MCP and without it for tasks that use tools such as &lt;a href="https://composio.dev/toolkits/linear" rel="noopener noreferrer"&gt;Linear&lt;/a&gt;, &lt;a href="https://composio.dev/toolkits/github" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, &lt;a href="https://composio.dev/toolkits/sentry/framework/vscode" rel="noopener noreferrer"&gt;Sentry&lt;/a&gt;, &lt;a href="https://composio.dev/toolkits/supabase" rel="noopener noreferrer"&gt;Supabase&lt;/a&gt;, and &lt;a href="https://composio.dev/toolkits/context7_mcp" rel="noopener noreferrer"&gt;Context7&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Without Composio MCP&lt;/strong&gt;&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%2Fg6vuwknsq909a7qulft1.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%2Fg6vuwknsq909a7qulft1.png" alt="Token Consumption without composio mcp" width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;With Composio MCP&lt;/strong&gt;&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%2Fm5g3jhzewu2ufa6inley.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%2Fm5g3jhzewu2ufa6inley.png" alt="Token Consumption with composio mcp" width="799" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, Composio used fewer tokens than the raw approach. It uses only seven meta tools and gets’ you the best bang for token used.&lt;/p&gt;

&lt;p&gt;When I need even more reduction on top of that, I use the &lt;a href="https://composio.dev/cli" rel="noopener noreferrer"&gt;Composio CLI&lt;/a&gt; directly.&lt;/p&gt;

&lt;p&gt;LLMs understand and parse shell commands better than tool schemas, they can be combined with multiple commands (composable), and has less to and from between servers and the LLM. It’s faster.&lt;/p&gt;

&lt;p&gt;My rule: I start with Composio MCP to consolidate integrations, then move to CLI when the task is simple enough for a shell command.&lt;/p&gt;

&lt;p&gt;Bottom line: Active MCP is added as a context tax that compounds across every chat. Every active tool adds overhead to the schema, description, and result. So use fewer, smarter integrations, not more.&lt;/p&gt;




&lt;h2&gt;
  
  
  My actual Claude Code workflow
&lt;/h2&gt;

&lt;p&gt;If I were setting this up for daily development, my stack would look like this (in no particular order):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start with tiny &lt;code&gt;CLAUDE.md&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Keep long workflows in &lt;code&gt;skills&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;repo-map.md&lt;/code&gt; for navigation&lt;/li&gt;
&lt;li&gt;Use &lt;code&gt;cc-test&lt;/code&gt; / &lt;code&gt;cc-log&lt;/code&gt; / &lt;code&gt;cc-diff&lt;/code&gt; wrappers&lt;/li&gt;
&lt;li&gt;Use Composio MCP to consolidate integrations, and CLI when a shell command will do&lt;/li&gt;
&lt;li&gt;Use subagents for exploration, the Haiku model for agents&lt;/li&gt;
&lt;li&gt;Write &lt;code&gt;handoff.md&lt;/code&gt; before clearing context&lt;/li&gt;
&lt;li&gt;Enter plan mode before any non-trivial implementation&lt;/li&gt;
&lt;li&gt;/compact with explicit preservation instructions at task boundaries&lt;/li&gt;
&lt;li&gt;/clear aggressively between unrelated tasks&lt;/li&gt;
&lt;li&gt;Switch to Opus only for deep reasoning, back to Sonnet after&lt;/li&gt;
&lt;li&gt;Keep the main thread clean&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The real mindset shift for you is this:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Claude Code works best when you treat it like a powerful engineer with limited working memory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Don't dump everything on it. Don't make it read garbage. Don't let old context pile up. Give it the right files, the right errors, the right constraints, and a clean session.&lt;/p&gt;

&lt;p&gt;That is where token savings actually come from. Perform better harness engineering.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>ai</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>I Took Cursor Agents Out of the IDE and It Got Weirdly Powerful 🤯</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Tue, 19 May 2026 10:05:31 +0000</pubDate>
      <link>https://dev.to/composiodev/i-took-cursor-agents-out-of-the-ide-and-it-got-weirdly-powerful-286i</link>
      <guid>https://dev.to/composiodev/i-took-cursor-agents-out-of-the-ide-and-it-got-weirdly-powerful-286i</guid>
      <description>&lt;p&gt;Cursor recently released their &lt;a href="https://cursor.com/blog/typescript-sdk" rel="noopener noreferrer"&gt;cursor agents SDK&lt;/a&gt; to the public, and it's quietly powering many teams to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;invoke agents directly from CI/CD pipelines,&lt;/li&gt;
&lt;li&gt;create automations for end-to-end workflows,&lt;/li&gt;
&lt;li&gt;and embedding agents into core products.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Basically, the SDK lets developers deploy agents without overthinking building and maintaining the entire agent stack&lt;/p&gt;

&lt;p&gt;in this blog I give a glimpse of what is possible with the cursor agents SDK and how to overcome the restrictions of limited tool access.&lt;/p&gt;

&lt;p&gt;Let's start with a brief overview of cursor agents.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Primer On Cursor Agents SDK
&lt;/h2&gt;

&lt;p&gt;Building an agent from scratch is a massive headache. Cursor SDK skips the&lt;br&gt;
plumbing.&lt;/p&gt;

&lt;p&gt;Before the SDK, &lt;a href="https://cursor.com" rel="noopener noreferrer"&gt;Cursor&lt;/a&gt; was strictly an interactive IDE, but its newly released SDK turns that&lt;br&gt;
agentic power into headless infrastructure. &lt;/p&gt;

&lt;p&gt;It uses the same &lt;strong&gt;harness&lt;/strong&gt; that powers the desktop app, meaning you get IDE-grade code generation programmatically.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Harness: context engine, workspace management, and routing&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In fact, the cursor harness matters more than the model. &lt;a href="https://www.endorlabs.com/learn/gpt-5-5-sets-a-new-code-security-record-with-cursor-not-codex-in-agent-security-league" rel="noopener noreferrer"&gt;Endor Labs&lt;/a&gt; benched&lt;br&gt;
GPT-5.5 natively at 61.5% functional correctness. Then, dropping the same model into Cursor's harness, it scored 87.2%.&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%2Faa4jgbjxm262koapm9nm.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%2Faa4jgbjxm262koapm9nm.png" alt="Proof" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cursor spent years tuning the context management and tool dispatch; the SDK hands you that refined engine.&lt;/p&gt;

&lt;p&gt;Here is the spec list for those who care:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Spec / Feature&lt;/th&gt;
&lt;th&gt;Technical Detail&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The Harness&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Built-in codebase indexing, semantic search, &amp;amp; instant grep.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Execution&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cloud (sandboxed VMs with durable state), Self-Hosted, Local.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Models&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Agnostic. Uses &lt;code&gt;composer-2/composer-3&lt;/code&gt; (default), Claude, or OpenAI.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Integrations&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Deep MCP support, auto-loaded &lt;code&gt;.cursor/skills/&lt;/code&gt;, &amp;amp; hooks.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Subagents&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Main agent can spawn subagents with distinct prompts/models.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This means we have a perfect stack to build our agent. Let’s get started with the setup.&lt;/p&gt;


&lt;h2&gt;
  
  
  How to Set Up Cursor Agents SDK
&lt;/h2&gt;

&lt;p&gt;You can install it using &lt;code&gt;npm&lt;/code&gt; to get started, then use Cursor's native &lt;code&gt;cursor SDK skill&lt;/code&gt; for guidance.&lt;/p&gt;

&lt;p&gt;So open your terminal and type:&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; @cursor/sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Output&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once done, install the cursor skill for guiding the cursor / Claude Code. In the same terminal, run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm add skills /cursor-sdk
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But there is a catch: by default, the Cursor SDK agents ship with a few default tools + MCP support.&lt;/p&gt;

&lt;p&gt;However, this means connecting to or configuring multiple MCP servers is such a hassle for a production-grade product.&lt;/p&gt;

&lt;p&gt;So let's automate it with Composio as the orchestrator, connect and configure it once, and you get secure access to 1000+ tools with optimized tool calls and context.&lt;/p&gt;




&lt;h2&gt;
  
  
  Building a Production Agent With Composio MCP + Cursor Agent SDK
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Why Composio?
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://composio.dev/" rel="noopener noreferrer"&gt;Composio&lt;/a&gt; offers a single MCP server you can plug into with the Cursor SDK to access &lt;a href="https://composio.dev/toolkits" rel="noopener noreferrer"&gt;1000+ apps&lt;/a&gt; instantly. &lt;/p&gt;

&lt;p&gt;When you’re building an agent that requires interacting with external applications, let’s say a Sales agent with &lt;a href="https://composio.dev/toolkits/gong" rel="noopener noreferrer"&gt;Gong&lt;/a&gt;, &lt;a href="https://composio.dev/toolkits/hubspot" rel="noopener noreferrer"&gt;HubSpot&lt;/a&gt;, &lt;a href="https://composio.dev/toolkits/salesforce" rel="noopener noreferrer"&gt;Salesforce connectors&lt;/a&gt;, etc., you’d spend weeks on partnerships and integrations. Composio completely removes this friction, so you build what matters&lt;/p&gt;

&lt;p&gt;So, let’s explore one example of a GitHub agent that pulls the repository, analyzes it, creates a dev branch, performs automatic refactoring, pushes the code, and opens a PR for review - a simple but powerful use case.&lt;/p&gt;

&lt;p&gt;Let's begin!&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup Workspace
&lt;/h3&gt;

&lt;p&gt;Head to the terminal and run the following commands&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="nb"&gt;mkdir &lt;/span&gt;cursor-agent
&lt;span class="nb"&gt;cd &lt;/span&gt;cursor-agent
npm init &lt;span class="nt"&gt;-y&lt;/span&gt;
npm &lt;span class="nb"&gt;install &lt;/span&gt;typescript ts-node @types/node &lt;span class="nt"&gt;--save-dev&lt;/span&gt;
npx tsc &lt;span class="nt"&gt;--init&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command will create a new project named &lt;code&gt;cursor_agent&lt;/code&gt; , switch to the folder, initialize a blank &lt;code&gt;npm&lt;/code&gt; project (ensure &lt;code&gt;package.json&lt;/code&gt; gets created), install typescript support for development, and initialize the typescript compiler and linter.&lt;/p&gt;

&lt;p&gt;Since our repository is set up, let’s configure environment variables.&lt;/p&gt;

&lt;h3&gt;
  
  
  Set up Environment Variables
&lt;/h3&gt;

&lt;p&gt;Add a &lt;code&gt;.env&lt;/code&gt; file to keep secrets secure and add the following values:&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="nv"&gt;CURSOR_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-cursor-api-key
&lt;span class="nv"&gt;COMPOSIO_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;your-composio-api-key
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can get the &lt;code&gt;CURSOR_API_KEY&lt;/code&gt; by going to the &lt;a href="https://cursor.com/dashboard/integrations" rel="noopener noreferrer"&gt;Cursor integration&lt;/a&gt; page and creating a new API key.&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%2Feddl8myiiaj88t15jurd.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%2Feddl8myiiaj88t15jurd.png" alt="Step 1" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For COMPOSIO_API_KEY  , visit the &lt;a href="https://dashboard.composio.dev/" rel="noopener noreferrer"&gt;Composio Dashboard (Platform)&lt;/a&gt;, log in/sign up to the account, and head to the default project (or create one) → profile→ API KEY.&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%2Fv4drqq50yjgm04dz5pdu.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%2Fv4drqq50yjgm04dz5pdu.png" alt="Step 2" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click “Create One”, it creates one, copy and then paste it into .env . Make sure it starts with ak_ .&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%2Fpusjo38ewzyorboce28i.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%2Fpusjo38ewzyorboce28i.png" alt="Step 3" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Time to write the code.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Code
&lt;/h3&gt;

&lt;p&gt;Now, create a new &lt;code&gt;index.ts&lt;/code&gt; file and paste the following code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// imports&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;dotenv/config&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;readline&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;node:readline/promises&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;stdin&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;stdout&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;node:process&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;SDKAgent&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;@cursor/sdk&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;DEFAULT_USER_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;disposeAllAgents&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;getComposioApiKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;getOrCreateRuntime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;requireEnv&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;./runtime.ts&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// log tool calls to stdout&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;logToolCall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;unknown&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nx"&gt;status&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;running&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;completed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;running&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`\n[tool: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;JSON&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stringify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;)}&lt;/span&gt;&lt;span class="s2"&gt;`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;completed&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`[tool: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;] done`&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="c1"&gt;// stream assistant text and tool events - act as streaming handler&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;runAgentChatStreaming&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;SDKAgent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;send&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;agent &amp;gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;await &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;stream&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;assistant&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;block&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;text&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="k"&gt;else&lt;/span&gt; &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tool_call&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nf"&gt;logToolCall&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;args&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&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="nx"&gt;run&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;error&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;throw&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`Agent run failed (&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;)`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;stdout&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// runs the chat loop, adds a readline interface and disposes agents on exit&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="k"&gt;void&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nf"&gt;requireEnv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;CURSOR_API_KEY&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nf"&gt;getComposioApiKey&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;

  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Setting up Composio session...&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;runtime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;getOrCreateRuntime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;DEFAULT_USER_ID&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="s2"&gt;`Ready (user: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;userId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, session: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;sessionId&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;, tools: &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;toolsCount&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;).`&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Type a message, or 'exit' to quit.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;rl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;readline&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;createInterface&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;input&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;try&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;while &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;userInput&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;rl&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;question&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;you &amp;gt; &lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)).&lt;/span&gt;&lt;span class="nf"&gt;trim&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;userInput&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;continue&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
      &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;userInput&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;exit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;userInput&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;quit&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;runAgentChatStreaming&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;agent&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;userInput&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="k"&gt;finally&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;rl&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;await&lt;/span&gt; &lt;span class="nf"&gt;disposeAllAgents&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="nf"&gt;main&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;error&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exit&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's look at the code: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We start by loading dependencies from &lt;code&gt;.env&lt;/code&gt;, &lt;code&gt;readline&lt;/code&gt;, and shared helpers from &lt;a href="https://github.com/DevloperHS/cursor_agents/blob/main/runtime.ts" rel="noopener noreferrer"&gt;&lt;code&gt;runtime.ts&lt;/code&gt;&lt;/a&gt; (&lt;code&gt;getOrCreateRuntime&lt;/code&gt;, API key checks, and cleanup)&lt;/li&gt;
&lt;li&gt;For a sanity check, we validate &lt;code&gt;CURSOR_API_KEY&lt;/code&gt; and &lt;code&gt;COMPOSIO_API_KEY&lt;/code&gt; before the chat loop starts (Composio is also checked when &lt;code&gt;runtime.ts&lt;/code&gt; loads).&lt;/li&gt;
&lt;li&gt;Next, we create a Composio session for the default user and spin up a Cursor agent on &lt;code&gt;composer-2&lt;/code&gt; with the Composio MCP server for tools (handled in &lt;code&gt;runtime.ts&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;We keep the same agent in the loop for every message, so tools and sessions stay wired throughout the CLI session.&lt;/li&gt;
&lt;li&gt;We run a terminal chat loop with readline: read input → send to agent → stream assistant text and tool status → repeat until &lt;code&gt;exit&lt;/code&gt; or &lt;code&gt;quit&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;While streaming, we log tool calls on &lt;code&gt;running&lt;/code&gt; and &lt;code&gt;completed&lt;/code&gt;, and throw if the agent run ends in error.&lt;/li&gt;
&lt;li&gt;On exit, we close readline, dispose of agents via &lt;code&gt;runtime.ts&lt;/code&gt;, and log any failure from &lt;code&gt;main()&lt;/code&gt; before exiting with code 1.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you encounter an issue, refer to the codebase in the project's &lt;a href="https://github.com/DevloperHS/cursor_agents" rel="noopener noreferrer"&gt;GitHub repo&lt;/a&gt;.  Feel free to clone it, tweak it to your liking, or use it as it is.&lt;/p&gt;

&lt;p&gt;And that's it, all set, time to run the agent!&lt;/p&gt;




&lt;h2&gt;
  
  
  Run the agent
&lt;/h2&gt;

&lt;p&gt;To run the agent in the terminal and at the project root, type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx ts-node index.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and an interactive chat opens up where you can prompt it step by step / direct it to do the entire task at once. Here is a demo of me using it in chat mode (step by step)&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/k4wfe4pJS_0"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;As you can see, the cursor agent acts as the brain, calling the &lt;a href="https://composio.dev/toolkits/github" rel="noopener noreferrer"&gt;Composio GitHub tools&lt;/a&gt; to clone the repo, check for changes, create a dev branch, refactor the code, commit to the dev branch, and finally open a PR.&lt;/p&gt;

&lt;p&gt;Usually, this takes many human hours, but with a cursor-agent, it takes only 5 minutes.&lt;/p&gt;

&lt;p&gt;Also, with the new update, you need to add a GitHub token to use GitHub with the cursor/agent. Using Composio fixes this need as well.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: For simplicity I have used terminal , but you can add a ui layer on top of the agent.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;With this, we have reached the end of the article. Here is my closing note.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;In this article, we learned how to use the Cursor SDK and Composio MCP to build a GitHub chatbot while keeping it optimized for asynchronous operations and following best practices, such as masking sensitive variables.&lt;/p&gt;

&lt;p&gt;But this is just the tip of the iceberg with what's possible with the cursor agent SDK. Feel free to experiment and build your own assistant/chatbot. You can explore more in the &lt;a href="https://github.com/cursor/cookbook" rel="noopener noreferrer"&gt;cursor-cookbook&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At the end of the day, building agents / multi-agent systems is not hard; planning and orchestrating them to work efficiently, collaboratively, and securely is. In fact, it's the next valuable skill in 2026.&lt;/p&gt;

&lt;p&gt;So what are you waiting for? Get started with Cursor Agents while &lt;a href="https://composio.dev/" rel="noopener noreferrer"&gt;Composio MCP&lt;/a&gt; handles the tooling layer.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>agents</category>
    </item>
    <item>
      <title>Building Streamable HTTP MCP Servers from Scratch using FastMCP in 2026</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Mon, 18 May 2026 14:50:04 +0000</pubDate>
      <link>https://dev.to/composiodev/building-streamable-http-mcp-servers-from-scratch-using-fastmcp-in-2026-5fh9</link>
      <guid>https://dev.to/composiodev/building-streamable-http-mcp-servers-from-scratch-using-fastmcp-in-2026-5fh9</guid>
      <description>&lt;p&gt;If you've spent any time wiring up tools for an AI agent, you know the pain: every model vendor has its own function-calling format, every integration is bespoke glue code, and every model upgrade breaks something downstream. &lt;/p&gt;

&lt;p&gt;MCP changes this by providing a shared interface for tools, data sources, and AI clients. Instead of rebuilding integrations for every model or app, you expose capabilities once through an MCP server and let compatible clients connect to them.&lt;/p&gt;

&lt;p&gt;Anthropic released the Model Context Protocol in November 2024, and by spring 2025, OpenAI, Microsoft, and Google had adopted it. It has quickly become the de facto standard for connecting AI systems to external tools and data. That makes MCP worth learning now.&lt;/p&gt;

&lt;p&gt;This guide teaches you how to build an MCP server from scratch, expose it over two transports: &lt;strong&gt;stdio&lt;/strong&gt; and &lt;strong&gt;streamable HTTP&lt;/strong&gt;, connect it to Claude Desktop and Cursor.  and provide you with a production checklist for hardening the production MCP servers before shipping them. The full code is available in the companion repo at the end&lt;/p&gt;

&lt;h3&gt;
  
  
  tl; dr
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;What is MCP&lt;/li&gt;
&lt;li&gt;MCP Components in Nutshell&lt;/li&gt;
&lt;li&gt;Build a Local MCP server (tools, resources, and prompts)&lt;/li&gt;
&lt;li&gt;Connect to Hosted MCP Server (HTTP Streamable)&lt;/li&gt;
&lt;li&gt;MCP Server Advance Use Case&lt;/li&gt;
&lt;li&gt;Deployment Notes for Production MCP Servers&lt;/li&gt;
&lt;li&gt;Conclusion&lt;/li&gt;
&lt;li&gt;Frequently Asked Questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's Begin!&lt;/p&gt;




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

&lt;p&gt;An MCP server is a JSON-RPC 2.0 process that exposes three primitives to any compliant &lt;a href="https://composio.dev/content/mcp-client-step-by-step-guide-to-building-from-scratch" rel="noopener noreferrer"&gt;MCP client&lt;/a&gt; over stdio or streamable HTTP. Those primitives are &lt;strong&gt;tools&lt;/strong&gt; (functions the model can call), &lt;strong&gt;resources&lt;/strong&gt; (data the model can read), and &lt;strong&gt;prompts&lt;/strong&gt; (reusable templates). That's the whole protocol. &lt;/p&gt;

&lt;p&gt;Everything else is an implementation detail as given in the comparison table.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Traditional API (REST / GraphQL / gRPC)&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary purpose&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Give LLM-based agents a &lt;em&gt;single&lt;/em&gt; way to fetch context &lt;strong&gt;and&lt;/strong&gt; invoke side-effecting tools.&lt;/td&gt;
&lt;td&gt;General machine-to-machine data exchange &amp;amp; business logic.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Integration effort&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Once an agent speaks MCP, it can talk to any compliant server; only one SDK/wire-spec to learn.&lt;/td&gt;
&lt;td&gt;Each API exposes its own spec/SDK; you integrate them one by one.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Interaction model&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Stateful sessions + bidirectional messaging; supports long-running tasks and mid-job progress callbacks.&lt;/td&gt;
&lt;td&gt;Stateless request/response; usually unidirectional.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Streaming support&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Standardised via “Streamable HTTP” (SSE/WebSocket).&lt;/td&gt;
&lt;td&gt;Not part of the REST spec; developers bolt on WebSockets/SSE ad hoc.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Extensibility (adding new capabilities)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The server can add new tools/resources without breaking clients; the agent discovers them at runtime.&lt;/td&gt;
&lt;td&gt;Breaking changes need versioning, or clients must update to use new endpoints/types.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Standardisation/wire format&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;One JSON-Schema-driven spec for inputs &amp;amp; outputs, plus defined transports.&lt;/td&gt;
&lt;td&gt;Multiple styles (REST, GraphQL, gRPC) with differing auth headers, error shapes, and media types.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Maturity &amp;amp; tooling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Rapidly growing, but still early; dozens of open-source servers and early commercial support.&lt;/td&gt;
&lt;td&gt;Decades of best-practice guides, gateways, SDKs, APM, and monitoring.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Performance path length&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Extra hop (agent → MCP → underlying API) adds a bit of latency; streaming mitigates waiting for large payloads.&lt;/td&gt;
&lt;td&gt;Direct call; generally lower overhead for high-QPS, deterministic workloads.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Typical sweet-spot use-cases&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Autonomous agents chaining multiple tools, dynamic workflows, and user-in-the-loop&lt;/td&gt;
&lt;td&gt;CRUD data services, stable integrations, high-throughput micro-services.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you want a deeper conceptual primer, check out the &lt;a href="https://composio.dev/blog/what-is-model-context-protocol-mcp-explained/" rel="noopener noreferrer"&gt;Model Context Protocol explainer&lt;/a&gt;, which covers the architecture in detail. For primer, here is how this all works!&lt;/p&gt;




&lt;h2&gt;
  
  
  MCP Components in Nutshell
&lt;/h2&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%2Fs0n3rpcv1z9e5dubyxjb.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%2Fs0n3rpcv1z9e5dubyxjb.png" alt="MCP Component" width="800" height="541"&gt;&lt;/a&gt; %}&lt;/p&gt;

&lt;h3&gt;
  
  
  The Architecture
&lt;/h3&gt;

&lt;p&gt;The MCP architecture consists of several key components that work together to enable seamless integration:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;MCP Hosts&lt;/strong&gt;: Applications that want to use tools or data through MCP. Examples include Claude Desktop, Cursor, or any AI app that supports MCP.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Clients&lt;/strong&gt;: Client instances created by the host. Each client maintains a dedicated one-to-one connection with a single MCP server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP Servers&lt;/strong&gt;: Lightweight programs that expose tools, resources, and prompts through the MCP protocol.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local Data Sources&lt;/strong&gt;: Files, databases, codebases, or local services that an MCP server can access on the user’s machine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remote Services&lt;/strong&gt;: External APIs or cloud services that an MCP server can call, such as Google Sheets, GitHub, Slack, or Postgres hosted in the cloud.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At a high level, the host does not talk directly to your database, file system, or API. Instead, it talks to an MCP client, which talks to an MCP server, which then talks to the actual data source or service. &lt;/p&gt;

&lt;p&gt;This simple diagram might help you understand the flow better:&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%2Fhtr5ddgaqrh6fdn93k6x.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%2Fhtr5ddgaqrh6fdn93k6x.png" alt="MCP FLOW" width="800" height="893"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The key point is that MCP servers serve as the integration layer. They hide the messy parts of authentication, API calls, file access, and business logic behind a clean protocol interface.&lt;/p&gt;

&lt;p&gt;This separation of concerns makes MCP servers modular and maintainable. The AI app does not need to know how Google Sheets, GitHub, or a local database works. It only needs to know how to call the MCP server.&lt;/p&gt;

&lt;p&gt;So how does this all connect?&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;How The Components Work Together&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Let's understand this with a practical example:&lt;/p&gt;

&lt;p&gt;Say you're using Claude Code (an MCP host) to manage your project's budget. You want to update a budget report in Google Sheets and send a summary of the changes to your team via Slack.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://code.claude.com/docs/en/mcp" rel="noopener noreferrer"&gt;Claude Code&lt;/a&gt; (MCP host) initiates a request to the MCP client to update the budget report in Google Sheets and send a Slack notification.&lt;/li&gt;
&lt;li&gt;The MCP client connects to two MCP servers: one for Google Sheets and one for Slack.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://composio.dev/toolkits/googlesheets" rel="noopener noreferrer"&gt;Google Sheets MCP&lt;/a&gt; server calls the Google Sheets API (remote service) to update the budget report.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://composio.dev/toolkits/slack" rel="noopener noreferrer"&gt;Slack MCP&lt;/a&gt; server interacts with the Slack API (remote service) to send a notification.&lt;/li&gt;
&lt;li&gt;MCP servers send responses back to the MCP client.&lt;/li&gt;
&lt;li&gt;The MCP client forwards these responses to Cursor, which displays the result to the user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This process happens seamlessly, allowing Cursor to integrate with multiple services through a standardized interface.&lt;/p&gt;

&lt;p&gt;That's the working in a nutshell. From here on, we will focus on building.&lt;/p&gt;




&lt;h2&gt;
  
  
  Build Local Stremable HTTP MCP Servers
&lt;/h2&gt;

&lt;p&gt;We'll build something you'd actually deploy: a &lt;strong&gt;GitHub issue search server&lt;/strong&gt; that lets your AI assistant search issues, fetch issue details, and pull recent pull requests from any repository. [subject to change]&lt;/p&gt;

&lt;p&gt;We will follow a series of steps to make sure things go smoothly. This is also industry standard, so it's best to follow along. &lt;/p&gt;

&lt;h3&gt;
  
  
  Prequires
&lt;/h3&gt;

&lt;p&gt;Before anything else, ensure you complete the prerequisites, as they will be the foundation for any MCP implementation we do.&lt;/p&gt;

&lt;p&gt;You'll need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Python 3.10+&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Node.js 18+&lt;/strong&gt; for TypeScript (if you choose to build with TypeScript)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Desktop&lt;/strong&gt; or &lt;strong&gt;Cursor&lt;/strong&gt; for testing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A common question users often ask: when should you pick Python vs. TypeScript? Here is an honest review:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.python.org/downloads/" rel="noopener noreferrer"&gt;Python&lt;/a&gt; with &lt;a href="https://gofastmcp.com/getting-started/welcome" rel="noopener noreferrer"&gt;FastMCP&lt;/a&gt; is faster for prototyping and works well for stdio servers.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.typescriptlang.org/" rel="noopener noreferrer"&gt;TypeScript&lt;/a&gt; shines for HTTP servers deployed to Cloudflare Workers, Vercel Edge, or any Node-based stack due to its type safety.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In case you are wondering, Composio is the ultimate integration platform, empowering developers to seamlessly connect AI agents with external tools, servers, and APIs with just a single line of code.&lt;/p&gt;

&lt;p&gt;With the fully managed &lt;a href="https://composio.dev/blog/best-mcp-servers-for-chatgpt" rel="noopener noreferrer"&gt;&lt;strong&gt;MCP Server&lt;/strong&gt;s&lt;/a&gt;, developers can rapidly build powerful AI applications without the hassle of managing complex integrations. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In a nutshell: Composio handles the infrastructure so developers can focus on innovation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Next, let's set up the working environment.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Work Environment Setup&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We start by creating a project directory.&lt;/p&gt;

&lt;p&gt;Navigate to your working folder and create a folder named &lt;strong&gt;MCP,&lt;/strong&gt; or u can use the terminal command:&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="nb"&gt;mkdir &lt;/span&gt;mcp_servers
&lt;span class="nb"&gt;cd &lt;/span&gt;mcp_servers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, create a virtual environment using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv .venv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now activate the environment with:&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;# Windows:&lt;/span&gt;
.venv&lt;span class="se"&gt;\S&lt;/span&gt;cripts&lt;span class="se"&gt;\a&lt;/span&gt;ctivate

&lt;span class="c"&gt;# Linux/Mac:&lt;/span&gt;
&lt;span class="nb"&gt;source&lt;/span&gt; .venv/bin/activate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ensure you see (.venv) in Front of the terminal cwd path.&lt;/p&gt;

&lt;p&gt;Finally, install the FastMCP package&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;FastMCP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Writing Server Code
&lt;/h3&gt;

&lt;p&gt;Server code is where the entire MCP server logic lives. Create a new &lt;code&gt;server.py&lt;/code&gt;  file and inside it paste the code below:&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;# server.py
&lt;/span&gt;
&lt;span class="c1"&gt;# imports
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;uuid&lt;/span&gt;

&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;typing&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;List&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="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;Utility MCP Server&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# generate password utility
&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;def&lt;/span&gt; &lt;span class="nf"&gt;generate_password&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;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;
    Generate a pseudo-random password for development use.

    This function creates a password by encoding a UUID4 string in base64
    and then reversing the resulting string. It&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s intended for use in
    development or testing environments where cryptographic security is not
    critical.

    Returns:
        str: A reversed base64-encoded UUID4 string, typically around 48 characters.
        May include alphanumeric characters, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;+&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;, and &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt; padding.

    Security Notes:
        - Uses the string form of UUID4 (not raw bytes), so effective entropy is lower (~190 bits of input chars)
        - Suitable for temporary or development credentials.
        - NOT recommended for production use.
        - For higher security, consider using secrets.token_urlsafe().

    Example:
&lt;/span&gt;&lt;span class="gp"&gt;        &amp;gt;&amp;gt;&amp;gt;&lt;/span&gt; &lt;span class="nf"&gt;generate_password&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;==dGM0ZTcwLTI0ZTUtNDJlZC05Y2I1LTk3OGJjODAxMDAwNw==&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="n"&gt;uuid_string&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uuid&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;uuid4&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;encode&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;base64_encoded&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;base64&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;b64encode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;uuid_string&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;decode&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;base64_encoded&lt;/span&gt; &lt;span class="p"&gt;[::&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="c1"&gt;# list all the files in the directory
&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;def&lt;/span&gt; &lt;span class="nf"&gt;list_files&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;List&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;
    List all files and directories in a specified path.

    This tool allows the AI to explore the file system by returning a list 
    of names of the entries in the directory given by path.

    Args:
        directory (str): The path to the directory to list. Defaults to the 
        current working directory (&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;).

    Returns:
        List[str]: A list of filenames and directory names. If an error 
        occurs (e.g., directory not found), returns a list containing 
        the error message.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;try&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;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;listdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;directory&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&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="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;


&lt;span class="c1"&gt;# read the given file
&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;def&lt;/span&gt; &lt;span class="nf"&gt;read_file&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;filename&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="o"&gt;-&amp;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;
    Read and return the full text content of a file.

    This tool enables the AI to analyze the contents of specific text files 
    within the accessible file system.

    Args:
        filename (str): The path to the file that needs to be read.

    Returns:
        str: The complete string content of the file encoded in UTF-8. 
        If the file cannot be read, returns an error message starting 
        with &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Error reading file:&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&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="n"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;r&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;utf-8&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="nb"&gt;file&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
            &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;file&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;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;return&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;Error reading file: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

&lt;span class="c1"&gt;# system info (resource)
&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;data://sys-info&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;get_system_info&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;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;
    Get a comprehensive system snapshot including time, hardware specs, 
    and real-time health metrics.
    &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;platform&lt;/span&gt;
    &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;psutil&lt;/span&gt;
    &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;
    &lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

    &lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;timestamp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strftime&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-%m-%d %H:%M:%S&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;day_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;%A&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;


    &lt;span class="n"&gt;boot_time&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromtimestamp&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;psutil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;boot_time&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
    &lt;span class="n"&gt;uptime&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;now&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;boot_time&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;.&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="n"&gt;sys_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;system&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;machine&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;platform&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;machine&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;cpu_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;psutil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cpu_count&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;logical&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;gpu_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subprocess&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;check_output&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;nvidia-smi&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;--query-gpu=gpu_name&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;--format=csv,noheader&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; 
            &lt;span class="n"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;utf-8&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="nb"&gt;Exception&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;gpu_info&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;N/A (NVIDIA-SMI not found)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="n"&gt;cpu_usage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;psutil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;cpu_percent&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interval&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;memory&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;psutil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;virtual_memory&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;disk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;psutil&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;disk_usage&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;C:&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;return&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;
             --- Hardware Specs ---
            OS:        &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;sys_type&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;machine&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)
            CPU:       &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;cpu_count&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; Physical Cores
            GPU:       &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;gpu_info&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

            --- Temporal Context ---
            Date/Time: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;timestamp&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
            Day:       &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;day_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
            Uptime:    &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;uptime&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

            --- Resource Utilization ---
            CPU Load:  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;cpu_usage&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;%
            RAM Usage: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;percent&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;% (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;used&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;MB / &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;memory&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;MB)
            Disk (C:): &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;disk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;percent&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;% Used (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;disk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;free&lt;/span&gt; &lt;span class="o"&gt;//&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1024&lt;/span&gt;&lt;span class="o"&gt;**&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;GB Free)
            &lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="c1"&gt;# general prompt
&lt;/span&gt;&lt;span class="nd"&gt;@mcp.prompt&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;helper_prompt&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="nb"&gt;str&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="nb"&gt;str&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;""&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;-&amp;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;General purpose prompt for any task with optional context.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="n"&gt;base_prompt&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;
Task: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;task&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

Please approach this systematically:
1. Break down the problem
2. Consider multiple solutions
3. Explain your reasoning
4. Provide clear, actionable steps
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

    &lt;span class="k"&gt;if&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;base_prompt&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="se"&gt;\n\n&lt;/span&gt;&lt;span class="s"&gt;Additional context: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;base_prompt&lt;/span&gt;

&lt;span class="c1"&gt;# api-design rules prompt
&lt;/span&gt;&lt;span class="nd"&gt;@mcp.prompt&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;api_endpoint_design_prompt&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint_name&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="n"&gt;purpose&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="o"&gt;-&amp;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;Specific prompt for designing RESTful API endpoints.&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;
    &lt;span class="k"&gt;return&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;
Design a RESTful API endpoint: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;endpoint_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;
Purpose: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;purpose&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;

Please provide:
1. HTTP method and URL pattern
2. Request/response schemas with examples
3. Status codes and error handling
4. Authentication requirements
5. Rate limiting considerations
6. OpenAPI/Swagger documentation snippet

Follow REST conventions and include proper validation.
Use JSON for data exchange and meaningful HTTP status codes.
&lt;/span&gt;&lt;span class="sh"&gt;"""&lt;/span&gt;

&lt;span class="c1"&gt;# Run MCP server
# if __name__ == "__main__":
&lt;/span&gt;    &lt;span class="c1"&gt;# mcp.run()
&lt;/span&gt;
&lt;span class="c1"&gt;# Run stremable http MCP Server (can be deployed / hosted)
&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;mcp&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;transport&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;streamable-http&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;0.0.0.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;8000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Key points from the code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;mcp&lt;/code&gt; : It's the Fast MCP object named as provided. Important to initialize at the start.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@mcp.tool()&lt;/code&gt; : Decorator wraps the entire function underneath and exposes it as a tool to the MCP client. Docstrings are very important; a good docstring leads to fewer model failures. Includes &lt;code&gt;generate_password&lt;/code&gt; , &lt;code&gt;list_files&lt;/code&gt;, &lt;code&gt;read_file&lt;/code&gt;tools.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@mcp.resource("data://sys-info")&lt;/code&gt; : Decorator wraps the entire function and exposes it as a resource file that the client can use to fetch data. The path to the created resource is defined in &lt;code&gt;()&lt;/code&gt; . Includes &lt;code&gt;get_system_info&lt;/code&gt; resource&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;@mcp.prompt()&lt;/code&gt; : Decorator wraps the entire function and exposes it to the client as a prompt builder, useful when the task requires a specific use-case prompt. Docstrings are important here. Includes &lt;code&gt;helper_prompt&lt;/code&gt; , &lt;code&gt;api_endpoint_design_prompt&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;mcp.run(transport="streamable-http", host="0.0.0.0", port=8000)&lt;/code&gt; : Runs the MCP server.in a streamable HTTP mode. For stdio MCP server, use &lt;code&gt;mcp.run()&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Overall, we are wrapping different functions and exposing them to the client as the MCP tool, resources, and server.&lt;/p&gt;

&lt;p&gt;However, to use it with the client, additional config is required, so let's set that up. I am using a cursor for the demo.&lt;/p&gt;

&lt;p&gt;Head to the Cursor and create a new folder &lt;code&gt;.cursor&lt;/code&gt; , inside it creates a new file &lt;code&gt;mcp.json&lt;/code&gt; (the config file) and paste the following setup.&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="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mcpServers&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;utility-server&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;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;http://localhost:8000/mcp&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In case you have used &lt;code&gt;mcp.run()&lt;/code&gt; then you will see the below configuration&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="p"&gt;{&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;mcpServers&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;utility_server&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;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;stdio&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;command&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-python-exe-path&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;args&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;your file path&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In general I use local &lt;code&gt;stdio&lt;/code&gt; based servers and then when all test and specifications are met, I switch to &lt;code&gt;Streamble HTTP&lt;/code&gt; approach.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Quick Tip: To verify this works is by pasting the command and args together; if they start the server, you are good to go; else, provide the full path. I usually go for path of .venv’s &lt;code&gt;python.exe&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Open &lt;strong&gt;Cursor Settings,&lt;/strong&gt; then click &lt;strong&gt;Tools &amp;amp; MCPs&lt;/strong&gt;. You will see your local MCP name. Click Enable, &lt;/p&gt;

&lt;p&gt;To check, open the terminal, switch to the Output tab, select the MCP server, and check for the connected message.&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%2F3tup4lsejnoux9pnw2ws.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%2F3tup4lsejnoux9pnw2ws.png" alt="CURSOR" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we can test our MCP Server by opening the chat/agents window and invoking any of the defined tools via the prompt. I invoked the password-generator, as I often find myself asking Claude to "think of a 16-character password" (which is terrible).&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;Generate&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;show&lt;/span&gt; &lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="n"&gt;tool&lt;/span&gt; &lt;span class="n"&gt;usage&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here is the output:&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%2Fprrko7rhtl069aqb9qjg.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%2Fprrko7rhtl069aqb9qjg.png" alt="MCP" width="800" height="265"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Saw that Ran command, it means the MCP server asked me for permission. I kept it that way, as you never want to let an agent touch your system files. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: If docstring is poor, the mcp client might fall back to cli approach, the easiest way to fix this is add a rule to only use mcp servers for the task. You will find a similar approach in the project github repo as well.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;All this is great, but setting it up for testing a local MCP server is a hassle. Let's look at an easier approach, MCP Inspector.&lt;/p&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;Test with MCP Inspector&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To test the MCP server's functionality, we will use the Fast MCP Inspector, a browser-based tool that connects to the server and lets us call tools directly, without an LLM layer. &lt;/p&gt;

&lt;p&gt;Run MCP Inspector, with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx @modelcontextprotocol/inspector python server.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll see a localhost URL. Open it in your browser, click &lt;strong&gt;Connect&lt;/strong&gt;, and you should see your server respond.&lt;/p&gt;

&lt;p&gt;Now you can run and test your tools, resources, prompts, and more right from the browser, quite handy for developers testing MCP servers' performance and understanding response schemas. Check out the &lt;a href="https://modelcontextprotocol.io/docs/tools/inspector" rel="noopener noreferrer"&gt;MCP Inspector Guide&lt;/a&gt; to learn more.&lt;/p&gt;

&lt;p&gt;Personally, I find it best for testing prompts’ responses. Here is the response it generated:&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%2F4vlqxiftlh4s5jx2qqm1.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%2F4vlqxiftlh4s5jx2qqm1.png" alt="MCP INSPECTOR" width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Local servers are great for simple use cases, but for most industry use cases, they don't provide the required infrastructure. Let's explore better use cases.&lt;/p&gt;




&lt;h2&gt;
  
  
  Connect to Hosted Streamable HTTP MCP Server
&lt;/h2&gt;

&lt;p&gt;Having a local server is good, but not as great as the one used in production. Usually, these are hosted, secured by design, and optimized for multiple tool calls. &lt;/p&gt;

&lt;p&gt;Usually, these are servers written by expert developers, integrated with the app's internal mechanisms, and intended to serve as connectors. &lt;/p&gt;

&lt;p&gt;But here lies the issue: connecting to 30+ MCP servers for a single project is a pain. Composio solves this.&lt;/p&gt;

&lt;p&gt;Let's look at how you can connect to the hosted Composio MCP server. You connect it once and use 1K+ tools directly, all secure, optimized tool calls.&lt;/p&gt;




&lt;h3&gt;
  
  
  Connect to Composio MCP Servers (Streamable HTTP )
&lt;/h3&gt;

&lt;p&gt;Integrating with &lt;strong&gt;Composio MCP&lt;/strong&gt; is incredibly simple and takes just 5 steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Visit the &lt;a href="https://dashboard.composio.dev/" rel="noopener noreferrer"&gt;Composio MCP&lt;/a&gt; page. Ensure you are logged in, or else sign up&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0927enm97uwl0f7n50jk.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%2F0927enm97uwl0f7n50jk.png" alt="step1" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the dashboard, head to the Install Section&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0c27tywfcxieu44jbfn.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%2Fi0c27tywfcxieu44jbfn.png" alt="step2" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Select Cursor from the list, and click on Install.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsxwj0ye9pv006o7kgfaz.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%2Fsxwj0ye9pv006o7kgfaz.png" alt="step3" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In the redirected page, click on "Install in Cursor".&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqyp4ar0wxdo9pa1c7pqb.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%2Fqyp4ar0wxdo9pa1c7pqb.png" alt="step4" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You will be redirected to Cursor, and in the MCP server Page, click Install&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh79a70tod8hccs3liiw2.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%2Fh79a70tod8hccs3liiw2.png" alt="step5" width="800" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once installed, click on Needs Authentication, then Authorize at redirect, and done!&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%2Fynux23lf9ww8tjxif6zn.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%2Fynux23lf9ww8tjxif6zn.png" alt="step6" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can connect to apps in advance in the Connect Apps section; most of them use OAuth. (optional). If you don't, the agent will prompt you to connect at runtime.&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%2Febp6k5s8r0jxb2pn9klk.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%2Febp6k5s8r0jxb2pn9klk.png" alt="step7" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To test the integration, open the Composer, establish a connection to the app, and ask it to perform actions.&lt;/p&gt;

&lt;p&gt;But how did all this happen?&lt;/p&gt;

&lt;p&gt;It turns out that if you go to your cursor MCP &amp;amp; Tools Page, select the ✏️ icon, and see the configuration as:&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;"mcpServers"&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;"composio"&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;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"http"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"url"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://connect.composio.dev/mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&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="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="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The &lt;strong&gt;http&lt;/strong&gt; here means a streamable HTTP server. This allows the MCP server to operate as a normal web server (accessible via a URL) rather than as a local subprocess on your machine (for local MCP servers)&lt;/p&gt;

&lt;p&gt;And interestingly, for any MCP to run in HTTP streamable mode, you have to replace:&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="err"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;__name__&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&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="err"&gt;mcp.run()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to&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="err"&gt;if&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;__name__&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&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="err"&gt;mcp.run(transport=&lt;/span&gt;&lt;span class="s2"&gt;"streamable-http"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;host=&lt;/span&gt;&lt;span class="s2"&gt;"0.0.0.0"&lt;/span&gt;&lt;span class="err"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;port=&lt;/span&gt;&lt;span class="mi"&gt;8000&lt;/span&gt;&lt;span class="err"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And you are done, pretty handy, isn’t it?&lt;/p&gt;

&lt;p&gt;Now, let's look at an advanced use case to see where Composio MCP helps.&lt;/p&gt;




&lt;h2&gt;
  
  
  Using HTTP Streamable MCP Servers for Advanced Use Case (Financial Agent)
&lt;/h2&gt;

&lt;p&gt;Current financial institutions struggle with manual, time-intensive investment research that keeps analysts buried in data entry for weeks, delays critical decisions by days, lacks real-time risk visibility, creates compliance blind spots, and demands hiring more analysts just to manage portfolio volume - all while losing talent and clients&lt;/p&gt;

&lt;p&gt;Let's see how the analyst can build financial agents and leverage Composio MCP to connect to 10-15 financial data sources (Yahoo Finance, SEC filings, Google Sheets, Bloomberg, etc.) and enrich their analysis by aggregating structured APIs, unstructured web scraping, and internal data warehouses.&lt;/p&gt;

&lt;p&gt;The financial analyst agent will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Aggregate financial data (Yahoo Finance, Google Sheets with company data, SEC filings via web scraping),&lt;/li&gt;
&lt;li&gt;Run Claude analysis to generate investment thesis.&lt;/li&gt;
&lt;li&gt;Create formatted reports in Google Docs,&lt;/li&gt;
&lt;li&gt;Track portfolio changes (pull from Excel sheet),&lt;/li&gt;
&lt;li&gt;and send Executive Summaries to stakeholders via email with embedded tables. (HTML format)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All done in parallel!&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;Web&lt;/span&gt; &lt;span class="nc"&gt;Scraping &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;composio&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;search&lt;/span&gt; &lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;Google&lt;/span&gt; &lt;span class="nc"&gt;Sheets &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;composio&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;Claude&lt;/span&gt; &lt;span class="n"&gt;Analysis&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="n"&gt;Google&lt;/span&gt; &lt;span class="nc"&gt;Docs &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;composio&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="err"&gt;→&lt;/span&gt; &lt;span class="nc"&gt;Gmail &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;composio&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Prerequisites
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code / Cursor / VS Code. I am going with Claude&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://dashboard.composio.dev/login" rel="noopener noreferrer"&gt;Composio Account&lt;/a&gt;, login/signup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Assuming you have pre-requisites met, let's set up Composio on Claude.&lt;/p&gt;

&lt;h3&gt;
  
  
  Set up Composio MCP in Claude
&lt;/h3&gt;

&lt;p&gt;To get started: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Visit the &lt;a href="https://dashboard.composio.dev/" rel="noopener noreferrer"&gt;Composio MCP&lt;/a&gt; page. Ensure you are logged in, or else sign up&lt;/li&gt;
&lt;li&gt;In the dashboard, head to the Install Section&lt;/li&gt;
&lt;li&gt;Select Claude from the list, and click on Install.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;On the next page, select the MCP tab, then copy the command &amp;amp; paste it into the shell/terminal.&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;claude&lt;/span&gt; &lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="n"&gt;add&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt; &lt;span class="n"&gt;user&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="n"&gt;transport&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt; &lt;span class="n"&gt;composio&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;composio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;mcp&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ensure &lt;code&gt;/mcp&lt;/code&gt;  shows composio as an option. It might require authentication, so authenticate once&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%2Fr1iskit9iof67v7z3kto.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%2Fr1iskit9iof67v7z3kto.png" alt="terminal-mcp" width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;(Optional ) Once done, head to the Connect Apps page and click on Connect to connect Gmail, Google Drive, Google Sheets, and Google Docs. In case you ignore, agent will ask for these connections on runtime.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Perfect, we only need to configure the document in the workspace&lt;/p&gt;

&lt;h3&gt;
  
  
  Set up Workspace for Agent
&lt;/h3&gt;

&lt;p&gt;We will use Google Drive as our workspace to make the file accessible from everywhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Head to drive, create a new folder named &lt;code&gt;financial_data&lt;/code&gt;  &amp;amp; from the URL, copy the folder ID.&lt;/li&gt;
&lt;li&gt;Inside, add an Excel file in the format &amp;amp; fill the data as:

&lt;ul&gt;
&lt;li&gt;Companies: List of all targeted companies with their analysis&lt;/li&gt;
&lt;li&gt;Portfolio Performance: How the portfolio is performing over time, all metrics for targeted companies&lt;/li&gt;
&lt;li&gt;Contact: List of all internal contacts: Portfolio Managers, Limited Partners, Investors,  Board Managers, and more&lt;/li&gt;
&lt;li&gt;Report Archive: Past report filing (sec)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Then add a Google Doc template for an investment report.&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Make sure to copy the ID / URL of both files&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Easiest way is to use the template given in the GitHub Repo and let any AI Agent turn them in the above given format. Then copy paste that in newly created google sheet &amp;amp; google doc file.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now is the time to run the agent.&lt;/p&gt;

&lt;h3&gt;
  
  
  Run Financial Analyst Agent
&lt;/h3&gt;

&lt;p&gt;To run the agent, open Claude Code and paste the &lt;a href="https://gist.github.com/DevloperHS/06982896ddfc20c8ace1af213dff2ebf" rel="noopener noreferrer"&gt;financial_agent_prompt&lt;/a&gt;. You will be prompted to fill in the details with the copied values from earlier, and add your email address:&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;GOOGLE_SHEETS_ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;GOOGLE_DOC_TEMPLATE_ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;value&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;GOOGLE_DRIVE_FOLDER_ID&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;optional&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="n"&gt;GMAIL_SENDER_ADDRESS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;your&lt;/span&gt; &lt;span class="n"&gt;gmail&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once done, the agent handles the rest. Here is a demo of what it looks like, in production.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/_PTeGESx6Nk"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;The agent also works on multiple portfolio reports. I am testing it with six different portfolios; you can adjust the count as needed.&lt;/p&gt;

&lt;p&gt;Same setup, but with multiple portfolio data. Make sure to copy each one's ID, and use the financial_agent_prompt_for_multiple portfolio for the job.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/oJzYSJ3Y6T4"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Note that, despite explicitly stating that Claude never created a subagent, this is because composio already has parallel execution enabled and, behind the scenes, uses subagents.&lt;/p&gt;

&lt;p&gt;Hope this gave you an idea of how hosted MCP servers work, and tools like Composio MCP provide a universal tooling layer.&lt;/p&gt;

&lt;p&gt;However, deploying a hosted MCP server for production is a different game. Let's look at a few rules to help ensure the servers don't break in real-world use.&lt;/p&gt;




&lt;h2&gt;
  
  
  Deployment Notes for Production MCP Servers
&lt;/h2&gt;

&lt;p&gt;Though we didn't cover a hosted MCP server build, if you want to build your hosted MCP server (local + later deployed), follow the production checklist before you deploy &amp;amp; put an MCP server in front of real users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Logging to stderr or files only&lt;/strong&gt;, never stdout for stdio servers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Errors caught on every tool&lt;/strong&gt;: return a clean error message, don't let exceptions kill the connection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inputs validated&lt;/strong&gt;: type hints (Python) or Zod (TypeScript) catch most issues; add explicit checks for things like SQL injection or path traversal if you're doing database/file operations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;External API calls are rate-limited / Use Composio MCP&lt;/strong&gt;: your tool runs whenever the LLM decides to call it, which can be a lot. Let Composio MCP handle it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secrets in environment variables&lt;/strong&gt;, never hardcode in servers, never commit in production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tool descriptions for the LLM&lt;/strong&gt;: Write specific, one-purpose per tool. Five small tools beat one giant tool. The approach we followed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Schema versioning&lt;/strong&gt;: when you change a tool's signature, bump your server's version so clients can adapt. Think API versioning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Health check endpoint&lt;/strong&gt;: for HTTP servers, expose &lt;code&gt;/health&lt;/code&gt; for your load balancer. Provides transparency to users.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth on production HTTP servers&lt;/strong&gt;: Use Bearer for internal, OAuth for public. But never both for the same for public/internal (private)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With this, we have come to the end of this comprehensive guide. Here is what matters the most.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;As AI transforms software development, MCP will play an increasingly important role in creating seamless, integrated experiences.&lt;/p&gt;

&lt;p&gt;Whether you're building custom MCP servers or leveraging pre-built solutions like stremable http servers like Composio MCP, the protocol enables powerful enhancements to AI capabilities through external tools and data sources.  &lt;/p&gt;

&lt;p&gt;In case you need a few ideas, check out how to build an &lt;a href="https://composio.dev/blog/mcp-client-step-by-step-guide-to-building-from-scratch/" rel="noopener noreferrer"&gt;MCP client&lt;/a&gt; that talks to your server, or move up the stack and build an &lt;a href="https://composio.dev/blog/the-complete-guide-to-building-mcp-agents/" rel="noopener noreferrer"&gt;MCP-powered agent&lt;/a&gt; that orchestrates multiple servers at once. Happy building.&lt;/p&gt;

&lt;p&gt;I hope you had a great learning experience - happy building with Composio! 🚀&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Top Marketing Skills For Claude Code, OpenClaw &amp; Hermes</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Fri, 24 Apr 2026 06:18:47 +0000</pubDate>
      <link>https://dev.to/composiodev/top-marketing-skills-for-claude-code-openclaw-hermes-1n59</link>
      <guid>https://dev.to/composiodev/top-marketing-skills-for-claude-code-openclaw-hermes-1n59</guid>
      <description>&lt;p&gt;With tools like &lt;a href="https://composio.dev/content/how-to-better-your-claude-cowork-experience-with-mcps" rel="noopener noreferrer"&gt;Claude Cowork&lt;/a&gt; and &lt;a href="https://composio.dev/content/how-to-use-composio-mcp-with-openclaw" rel="noopener noreferrer"&gt;OpenClaw&lt;/a&gt;, the marketing and GTM stack is evolving fast. People are spinning up SEO pages, firing UGC videos, automating ads at an industrial scale. And GTM and marketing is going to blow up in next few months.&lt;/p&gt;

&lt;p&gt;So, I have curated some great skills that community has built and some of them I personally use.&lt;/p&gt;

&lt;p&gt;So I spent last week testing and collating everything. Here are the 10 marketing skills for Claude Code/ Cowork and OpenClaw that are actually worth using.&lt;/p&gt;




&lt;h2&gt;
  
  
  Quick Summary
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;GEO / AEO (AI Search Optimization) Skill&lt;/strong&gt; - Audits and optimizes pages to get cited in AI search (ChatGPT, Perplexity, Google AI Overviews) with fixes, llms.txt, and schema.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO + GEO Full-Stack Skill&lt;/strong&gt; - An end-to-end workflow that does keyword research, drafting, and optimization for both traditional SEO and AI discovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paid Ads Audit Skill&lt;/strong&gt; - Runs deep multi-platform checks to find wasted spend, diagnose performance issues, and generate new creative and copy variants.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Firecrawl Web Intelligence Skill&lt;/strong&gt; - Gives agents live web scraping and crawling to extract clean markdown and structured data for competitive research.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design Skill&lt;/strong&gt; - Extracts design systems from UI references and outputs design tokens and specs to keep builds consistent and non-generic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Remotion Video Skill&lt;/strong&gt; - Turns a video brief into Remotion-ready React code so you can ship programmatic product videos reliably.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Marketing Page Generation (Frontend) Skill&lt;/strong&gt; - Generates bold, conversion-focused landing pages with production-ready code instead of generic SaaS templates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Content Ops Skill&lt;/strong&gt; - Runs the editorial pipeline end-to-end: audit, briefs, drafting, repurposing, and distribution from one workflow.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Humanizer Skill&lt;/strong&gt; - Removes AI-writing tells through multi-pass editing so posts sound opinionated, natural, and genuinely human.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;--&lt;/p&gt;

&lt;p&gt;For using all these skills effectively you’ll need access to data stored in multiple different applications. &lt;/p&gt;

&lt;p&gt;For example, for full SEO data you’d need access to Google Search Console, Ahref, etc. And for scheduling posts for social medias you’d need to connect Claude or OpenClaw with Tiktok, Youtube, LinkedIn, Reddit, and Twitter. &lt;/p&gt;

&lt;p&gt;For Ads and conversion pipeline monitoring yo’d need Google Ads, MetaAds, Posthog, Mixpanel, etc. &lt;/p&gt;

&lt;p&gt;Check Out the &lt;a href="https://composio.dev/toolkits/" rel="noopener noreferrer"&gt;full catalog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Composio is the single place to get all these apps using a single MCP server and it’s super easy to set it up. Just log in to &lt;a href="https://dashboard.composio.dev" rel="noopener noreferrer"&gt;dashboard.composio.dev&lt;/a&gt; and click on the client app you want.&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%2Fah9gjfg34ys4c12pclq1.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%2Fah9gjfg34ys4c12pclq1.png" alt="Composio Dashboard" width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you need some guides, here’s how you can do it in OpenClaw and &lt;a href="https://composio.dev/content/how-to-better-your-claude-cowork-experience-with-mcps" rel="noopener noreferrer"&gt;Claude Cowork&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For starters, let’s schedule a week of launch posts for social media - one of the grueling pain point for any content team. &lt;/p&gt;

&lt;p&gt;Pre-requires (authenticate):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://composio.dev/toolkits/notion" rel="noopener noreferrer"&gt;Notion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://composio.dev/toolkits/typefully" rel="noopener noreferrer"&gt;Typefully&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://composio.dev/toolkits/linkedin" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;once all done, let’s create a 7 days launch post. This uses Claude Code.&lt;/p&gt;

&lt;p&gt;/to-be-added&lt;/p&gt;




&lt;h2&gt;
  
  
  Top 10 Marketing Skills
&lt;/h2&gt;

&lt;p&gt;Here are the list of top 10 marketing skills, that can 10 your marketing. For each I have shared:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What each skills does,&lt;/li&gt;
&lt;li&gt;Why use it.&lt;/li&gt;
&lt;li&gt;Prompt templates you can follow,&lt;/li&gt;
&lt;li&gt;The link to get you started&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s begin:)&lt;/p&gt;




&lt;h3&gt;
  
  
  1. GEO / AEO SKILL - AI SEARCH OPTIMIZATION
&lt;/h3&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%2F7pee86km31zq4jcjk1f5.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%2F7pee86km31zq4jcjk1f5.png" alt="AI Search Optimisation" width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AEO has become quite popular now a day’s, but not many are good at handling it. &lt;/p&gt;

&lt;p&gt;This skill optimizes the content to get cited by ChatGPT, Perplexity, Google AI Overviews, and Gemini. Furthermore, it scores citability, generates llms.txt, adds schema markup, and outputs a client-ready PDF audit report.&lt;/p&gt;

&lt;p&gt;Usage&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run a full GEO audit on any URL → get citability score + prioritized fix list across 13 dimensions.&lt;/li&gt;
&lt;li&gt;Generate an llms.txt file so AI crawlers understand the product site structure and index it correctly.&lt;/li&gt;
&lt;li&gt;Optimizes existing blog posts for AI citation with E-E-A-T signals, entity clarity, and FAQ schema injection&lt;/li&gt;
&lt;li&gt;Produce a branded PDF GEO report ready to send to a client or CMO, for contrast agencies charge $2K–$12K for this&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Run a GEO audit on [URL]. Score: citability, AI crawler access, brand mention presence, schema markup, content factual density, and E-E-A-T signals. Output a full report with prioritized fixes. Then generate an llms.txt file and FAQ schema JSON-LD for the top 3 pages.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To learn more , checkout  &lt;a href="https://github.com/zubair-trabzada/geo-seo-claude" rel="noopener noreferrer"&gt;https://github.com/zubair-trabzada/geo-seo-claude&lt;/a&gt; by zubair.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. SEO + GEO FULL STACK SKILL
&lt;/h3&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%2Fcpxe0elh0i3av2t5rhoe.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%2Fcpxe0elh0i3av2t5rhoe.png" alt="SEO + GEO FULL STACK SKILL" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;your entire SEO + GEO workflow packaged into 20 skills covering: keyword research, content writing, technical audits, and rank tracking for both traditional search and AI platforms using claude code, openclaw , hermes.&lt;/p&gt;

&lt;p&gt;All scored against the CORE-EEAT benchmark (80 items) and CITE domain rating (40 items).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs keyword research on Ahref → content gap analysis → full draft → AEO/GEO optimization in a single chained workflow&lt;/li&gt;
&lt;li&gt;Audit any page against 80 CORE-EEAT quality criteria and get a scored report with line-level fixes&lt;/li&gt;
&lt;li&gt;Generate programmatic SEO pages at scale from a keyword list and a content template&lt;/li&gt;
&lt;li&gt;Optimize for AI citations across ChatGPT Search, Perplexity, and Google AI Overviews simultaneously&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Run the full SEO + GEO workflow for [topic/URL]. 

Step 1: keyword research and gap analysis vs [competitor]. 
Step 2: write a 1,500-word article scored against CORE-EEAT. 
Step 3: apply AEO optimization - add FAQ schema, HowTo markup, and question-phrased headings. 
Step 4: output a GEO readiness score.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can explore more at: &lt;a href="https://github.com/aaron-he-zhu/seo-geo-claude-skills" rel="noopener noreferrer"&gt;https://github.com/aaron-he-zhu/seo-geo-claude-skills&lt;/a&gt; by arron&lt;/p&gt;




&lt;h3&gt;
  
  
  3. PAID ADS AUDIT SKILL
&lt;/h3&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%2Fju5z6mczxg0qkp4kvw4h.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%2Fju5z6mczxg0qkp4kvw4h.png" alt="PAID ADS AUDIT SKILL" width="800" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Running a successful paid campaigns and auditing is a struggle point for many growth team, this skills fixes that.&lt;/p&gt;

&lt;p&gt;It first runs 250+ checks across Google, Meta, YouTube, LinkedIn, TikTok, and Microsoft Ads. Based on the result, invoke's parallel agents per platform that scores accounts with weighted rubrics, flags wasted spend, and generates AI-powered creative variants.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Audit a Google Ads account → get wasted spend breakdown by campaign, ad group, and keyword in one pass&lt;/li&gt;
&lt;li&gt;Detect creative fatigue across Meta campaigns → auto-generate 5 replacement hooks per underperforming ad set&lt;/li&gt;
&lt;li&gt;Run a CPA spike diagnosis → trace root cause to bid strategy, audience overlap, or landing page mismatch&lt;/li&gt;
&lt;li&gt;Get a CMO-ready performance report with scores, benchmarks, and an action plan - all from the terminal&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Audit this Google Ads account data [attach export]. Run: wasted spend analysis, quality score breakdown, bid strategy assessment, and creative fatigue check. Score each area 0–100 using 2026 benchmarks. Output a prioritized fix list and generate 3 replacement ad copy variants for the lowest-scoring ad groups.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can learn more at  &lt;a href="https://github.com/AgriciDaniel/claude-ads" rel="noopener noreferrer"&gt;https://github.com/AgriciDaniel/claude-ads&lt;/a&gt; by Daniel.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. FIRECRAWL WEB INTELLIGENCE SKILL
&lt;/h3&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%2Fkiqkw6ad5sifqp5x37jv.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%2Fkiqkw6ad5sifqp5x37jv.png" alt="FIRECRAWL WEB INTELLIGENCE SKILL" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not something new, similar to &lt;code&gt;firecrawl-claude-plugin&lt;/code&gt;,  but help’s content team hours by providing claude code / openclaw/ hermes access to live web.&lt;/p&gt;

&lt;p&gt;This allows the agent to scrape any page as clean markdown, take full-page screenshots, extract structured data via JSON schema, and crawl entire doc sites. Handles JS rendering and anti-bot automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scrape competitor pricing pages weekly → output structured comparison to a Sheet with zero manual copying&lt;/li&gt;
&lt;li&gt;Crawl a competitor's entire blog → extract all topics covered → identify content gaps in your own strategy&lt;/li&gt;
&lt;li&gt;Pull product reviews from G2, Capterra, or Reddit → auto-summarize into a customer voice report&lt;/li&gt;
&lt;li&gt;Run firecrawl x competitor-analysis [URL] in one command to get a full messaging teardown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Use Firecrawl to scrape [competitor URL]. Extract: headline, value prop, pricing tiers, key feature claims, and CTA copy. Then scrape [second competitor URL] and output a side-by-side comparison table with a 'gap for us' column."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can learn more at &lt;a href="https://github.com/firecrawl/firecrawl-claude-plugin" rel="noopener noreferrer"&gt;https://github.com/firecrawl/firecrawl-claude-plugin&lt;/a&gt; by firecrawl.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. DESIGN SKILL
&lt;/h3&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%2Fj4fr1tg9jm1pnmtfbvy4.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%2Fj4fr1tg9jm1pnmtfbvy4.png" alt="DESIGN SKILL" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Design is essential aspect of conversion flow, it all starts there. Having a great design that tells a story of the product leads to better conversions. But ai-generated design’s are slop.&lt;/p&gt;

&lt;p&gt;This skills fixes that. It extracts design systems from reference UI images and generates implementation-ready design tokens, component specs, and style guides.&lt;/p&gt;

&lt;p&gt;This kills the back-and-forth between designer and agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Feed a screenshot of any UI → get a full design system extracted with colors, spacing, typography, and component patterns.&lt;/li&gt;
&lt;li&gt;Generate brand-consistent design tokens for a new product from a single reference image.&lt;/li&gt;
&lt;li&gt;Audit existing UI for design consistency issues and get a structured fix list.&lt;/li&gt;
&lt;li&gt;Bootstrap a complete design system from scratch using decision-tree prompts before a single line of code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Extract the design system from this UI screenshot [attach image]. Output: color palette with hex values, typography scale, spacing system, component inventory, and border/shadow tokens. Then generate a DESIGN_SYSTEM.md I can reference in all future builds.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This one I use almost every weeks. Learn more at: &lt;a href="https://github.com/daymade/claude-code-skills" rel="noopener noreferrer"&gt;https://github.com/daymade/claude-code-skills&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  6. REMOTION VIDEO SKILL
&lt;/h3&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%2F2ll59d4z8a2rpgivfjmk.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%2F2ll59d4z8a2rpgivfjmk.png" alt="REMOTION VIDEO" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Product launch videos can make or break a product lead generation strategy and launch videos are in high demands so charges very high. With this skills you can build your own one, practically for 0$&lt;/p&gt;

&lt;p&gt;This skills is official Remotion guidance baked into a &lt;a href="http://skill.md/" rel="noopener noreferrer"&gt;SKILL.md&lt;/a&gt;.  It gives Claude Code the knowledge to generate React-based programmatic videos without hallucinating the API. &lt;/p&gt;

&lt;p&gt;Describe a video, get production code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate a launch announcement video from your product copy - hook, feature highlights, CTA- fully coded in React&lt;/li&gt;
&lt;li&gt;Build a weekly metrics video that pulls live data and renders as an MP4 automatically&lt;/li&gt;
&lt;li&gt;Create social-ready short-form video assets (16:9, 9:16) from existing blog content&lt;/li&gt;
&lt;li&gt;Render music videos from audio files and lyrics using the acestep-simplemv pattern&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Using Remotion, build a 30-second product launch video for [product name]. 

Scene 1: bold headline on dark background. 
Scene 2: 3 feature callouts with staggered animations. 
Scene 3: CTA with logo. 

Export at 1080x1920 for Instagram Reels. Follow Remotion best practices throughout."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can learn more at: &lt;a href="https://github.com/mxyhi/ok-skills/tree/main/remotion-best-practices" rel="noopener noreferrer"&gt;https://github.com/mxyhi/ok-skills&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  7. MARKETING PAGE GENERATION SKILL - FRONTEND
&lt;/h3&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%2F20cmp1e00g1e3ad7fh3r.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%2F20cmp1e00g1e3ad7fh3r.png" alt="MARKETING PAGE GENERATION" width="800" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is another design skill but tailored to marketing page generations, which surprisingly Gemini 3.1 pro does the best, but lacks the color and aesthetic.&lt;/p&gt;

&lt;p&gt;This skills instructs Claude / OpenClaw to skip safe, generic aesthetics and commit to bold design decisions. 277,000+ installs. &lt;/p&gt;

&lt;p&gt;Best part? Automatically triggers for any frontend task - landing pages, campaign pages, dashboards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I use it to :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate a full SaaS landing page with hero, features, social proof, pricing, and CTA sections in one pass.&lt;/li&gt;
&lt;li&gt;Build campaign-specific microsites from a brief - product, ICP, and tone - without touching Webflow.&lt;/li&gt;
&lt;li&gt;Rebuild an underperforming landing page with a distinct visual identity from a reference URL.&lt;/li&gt;
&lt;li&gt;Scaffold a complete marketing site with dark mode, responsive layout, and conversion-optimized structure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Its a great one and I personally use it to build landing pages for product that leads to high conversion rate. Really a must have!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Build a landing page for [product]. Target audience: [ICP]. Tone: [direct/editorial/minimal]. Must include: hero with headline + subhead + CTA, 3-feature section, social proof strip, and pricing table. Choose a bold, distinctive aesthetic - not generic SaaS. Output production-ready HTML/CSS/JS or React + Tailwind.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Give it a try at &lt;a href="https://github.com/anthropics/claude-code/tree/main/plugins/frontend-design" rel="noopener noreferrer"&gt;https://github.com/anthropics/claude-code/tree/main/plugins/frontend-design&lt;/a&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  8. CONTENT OPS SKILL
&lt;/h3&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%2F96i62purdy9qova9q65d.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%2F96i62purdy9qova9q65d.png" alt="CONTENT OPS" width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your entire content operations workflow under one skill. &lt;/p&gt;

&lt;p&gt;It contains 8 skills that covers: production, audit, repurposing, and distribution. Works as a full editorial pipeline: from brief to published inside Claude Code or OpenClaw.&lt;/p&gt;

&lt;p&gt;Simply put, its a swiss army knife for content and growth team as well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Run a full content audit: feed your sitemap → agent scores each page by intent, keyword alignment, and conversion potential → outputs prioritized fix list&lt;/li&gt;
&lt;li&gt;Repurpose one long-form piece → 5 tweet threads + 3 LinkedIn posts + 1 newsletter section in one command&lt;/li&gt;
&lt;li&gt;Generate a 12-week content calendar from your ICP, product pillars, and keyword list&lt;/li&gt;
&lt;li&gt;Auto-draft blog posts from raw notes or voice transcripts, following your brand voice file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Prompt&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Run a content ops workflow for [topic/URL]. Step 1: audit existing content for gaps vs [keyword cluster]. Step 2: generate 4 new content briefs targeting missed keywords. Step 3: draft post #1 in full using our brand voice [attach]. Step 4: repurpose it into 3 LinkedIn posts and a tweet thread
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Get your content pipeline started: &lt;a href="https://github.com/superamped/ai-marketing-skills" rel="noopener noreferrer"&gt;https://github.com/superamped/ai-marketing-skills&lt;/a&gt; by superramped.&lt;/p&gt;

&lt;p&gt;While the content pipeline works, but it may still feel ai-generated, so pair it with last skill and see the organic growth.&lt;/p&gt;




&lt;h3&gt;
  
  
  9. HUMANIZER SKILL - DE-SLOP YOUR CONTENT
&lt;/h3&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%2Fk483f7yp8lkcywun0w3q.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%2Fk483f7yp8lkcywun0w3q.png" alt="DE-SLOP" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The biggest problem right now with social media is AI generated slop. If you are someone who use ai to generate post and directly post, you need to stop!&lt;/p&gt;

&lt;p&gt;Instead use the Humanizer Skill.&lt;/p&gt;

&lt;p&gt;It’s a 8-pass editing system that detects and kills AI writing patterns before your content goes live. Strips banned vocabulary (delve, tapestry, foster), breaks structural tells, and forces organization &amp;amp; soul back into the copy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Usage&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Paste any AI-generated blog post → get a rewrite that sounds like a person with opinions wrote it, not a language model.&lt;/li&gt;
&lt;li&gt;Run on cold email sequences before sending → eliminates the "this was clearly written by AI" reply-killing patterns.&lt;/li&gt;
&lt;li&gt;Match a specific human voice by feeding 2-3 paragraphs of your own writing as a style reference before humanizing.&lt;/li&gt;
&lt;li&gt;Use after every content ops skill output. This makes the pair unstoppable for publishing-ready content at scale.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Prompt&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Humanize this text: [paste]. First, scan for AI vocabulary, structural tells, and rhythm patterns. Then rewrite in 3 passes: 
&lt;span class="p"&gt;-&lt;/span&gt; kill AI words, break parallel structures, add human texture and opinion. 
&lt;span class="p"&gt;-&lt;/span&gt; Run an audit pass 
&lt;span class="p"&gt;-&lt;/span&gt; list everything still obviously AI then do a final rewrite. 
Match this voice sample: 

[paste 2 paragraphs of your own writing].
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Link: &lt;a href="https://github.com/jpeggdev/humanize-writing" rel="noopener noreferrer"&gt;https://github.com/jpeggdev/humanize-writing&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus Skills - A Toolbox for Marketing Teams
&lt;/h2&gt;

&lt;p&gt;Here are some additional skills with a brief one liner of what they do. Often good to pair with other skills output.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.notion.so/Top-10-Marketing-Skills-for-Claude-Code-Open-Claw-344f261a6dfe806fbf20d7ae1875c2de?pvs=21" rel="noopener noreferrer"&gt;create-viral-content&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Encodes the refinement process that separates forgettable posts from ones that generate discussion and shares.&lt;/li&gt;
&lt;li&gt;Runs AI-tell detection after every draft, then auto-invokes the humanizer for the final pass&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/VoltAgent/awesome-openclaw-skills" rel="noopener noreferrer"&gt;awesome-openclaw-skills&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;lead-gen-crm + lead-scorer-free&lt;/li&gt;
&lt;li&gt;Two OpenClaw skills that chain into a full outbound pipeline.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lead-scorer-free&lt;/code&gt; scores any domain 0–100 by analyzing its website, DNS, sitemap, and social presence. No database subscription needed.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;lead-gen-crm&lt;/code&gt; handles the full CRM pipeline from that point.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://clawskills.sh/skills/staybased-cold-outreach" rel="noopener noreferrer"&gt;cold-outreach&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Uses Alex Hormozi Frameworks for cold-outreach.&lt;/li&gt;
&lt;li&gt;Generates high-converting cold outreach across email, SMS, and LinkedIn DM.&lt;/li&gt;
&lt;li&gt;Uses battle-tested Hormozi offer frameworks baked directly into the skill.&lt;/li&gt;
&lt;li&gt;Not generic copy - structured around irresistible offer construction.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;a href="https://github.com/coreyhaines31/marketingskills/tree/main/skills/marketing-psychology" rel="noopener noreferrer"&gt;marketing-psychology&lt;/a&gt;

&lt;ul&gt;
&lt;li&gt;Applies cognitive biases, mental models, and behavioral science frameworks directly to marketing copy, CRO, and funnel design.&lt;/li&gt;
&lt;li&gt;Cialdini, Kahneman, and Ariely strategy and research baked into a skill.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;That marks the end of this article. Here are some hidden insights that  I discovered while using these.&lt;/p&gt;




&lt;h3&gt;
  
  
  Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Use chain of skills to get the output that makes the product position unique and well framed.&lt;/p&gt;

&lt;p&gt;Simple example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use content ops skill to draft the long-form piece&lt;/li&gt;
&lt;li&gt;Pass it to psychological persuasion skill rewrites every headline and CTA against 12 cognitive bias principles&lt;/li&gt;
&lt;li&gt;Humanizer strips every AI tell across 8 passes → what's left sounds like your sharpest human writer, not a model hitting word count&lt;/li&gt;
&lt;li&gt;Cold Outreach pulls the strongest pain observations and proof points from that copy → lands in your ICP's inbox as a Hormozi-framed 5-email sequence and 3 LinkedIn DMs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The hard part isn't the skills -  it's orchestrating the flow between them. That's where &lt;a href="https://www.notion.so/20df261a6dfe80d6aa55fca03849a949?pvs=21" rel="noopener noreferrer"&gt;Composio&lt;/a&gt; comes handy. &lt;/p&gt;

&lt;p&gt;It handles the auth layer, manages tool calls across every integration, and keeps context intact as output moves from one skill to the next. No glue code. No dropped state. No manual handoffs.&lt;/p&gt;

&lt;p&gt;Install it once. Let it run the pipeline while you focus on what AI still can't do - knowing your customer well enough to say something worth reading.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>marketing</category>
      <category>claude</category>
      <category>openclawchallenge</category>
    </item>
    <item>
      <title>Building a Financial Agent That Actually Works: Composio MCP + Hermes</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Thu, 16 Apr 2026 04:30:09 +0000</pubDate>
      <link>https://dev.to/composiodev/building-a-financial-agent-that-actually-works-composio-mcp-hermes-93k</link>
      <guid>https://dev.to/composiodev/building-a-financial-agent-that-actually-works-composio-mcp-hermes-93k</guid>
      <description>&lt;p&gt;I recently explored Hermes Agent to see how far I could push autonomous workflows in a real-world use case. &lt;/p&gt;

&lt;p&gt;Instead of just experimenting, &lt;br&gt;
I wanted something practical, so I decided to build a financial analyst agent that could fetch, process, reason over financial data and suggest me stocks in this era of war.&lt;/p&gt;

&lt;p&gt;This blog post walks through exactly how we:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Securely Set up Hermes Agent&lt;/li&gt;
&lt;li&gt;Integrated Composio MCP for tool access (Google Sheet, Google Doc, Exa)&lt;/li&gt;
&lt;li&gt;Built a functional financial analyst agent that captures the market trends &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Along the way, I’ll also share what broke, what worked, and what I’d do differently.&lt;/p&gt;


&lt;h2&gt;
  
  
  What is Hermes Agent
&lt;/h2&gt;

&lt;p&gt;Hermes Agent an open source AI agent that can learn and evolve as you interact in real-time , something that open-claw lacked.&lt;/p&gt;

&lt;p&gt;It does so by using a persistent cross-session memory and closed learning loop (write docs → save tools → update memory) that converts completed task into reusable skills. This allows it become more efficient over time.&lt;/p&gt;

&lt;p&gt;The agent has following key capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;S*&lt;em&gt;elf Improving Loop&lt;/em&gt;* : Unlike standard chatbot wrappers, Hermes agent refines its own skills from completed task&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Persistent Memory&lt;/strong&gt;: Maintains a persistent model of the user and past interactions across sessions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Autonomous Agent tools&lt;/strong&gt;: Agent offers over 40+ built in tools, support sub agent delegation and code execution&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Multi-Platform Integration&lt;/strong&gt;: Works from anywhere , from terminal to plethora of social media service (though little buggy)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Model Agnostic&lt;/strong&gt;: Supports multiple LLM providers and LLMS including open source and closed source models.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Think of it as a programmable agent that can reason + act + self improve , not just respond.&lt;/p&gt;

&lt;p&gt;This means its a perfect candidate for a financial analyst agent.&lt;/p&gt;


&lt;h2&gt;
  
  
  Securely Setup Hermes Agent
&lt;/h2&gt;

&lt;p&gt;Prerequisites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker - Install docker desktop&lt;/li&gt;
&lt;li&gt;Optional- WSL2 for Windows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;First install herms in docker, open terminal and run one by one:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://raw.githubusercontent.com/NousResearch/hermes-agent/main/scripts/install.sh | bash
&lt;span class="nb"&gt;source&lt;/span&gt; ~/.bashrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fkk7ibp2iev9ca6z9ca0y.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%2Fkk7ibp2iev9ca6z9ca0y.png" alt="Install Hermes" width="800" height="471"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next configure the Hermes Agent, here is the setting I choose, feel free to choose your preferred:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provider : OpenAI Codex. Make sure to authenticate&lt;/li&gt;
&lt;li&gt;Model : GPT 5.4 / GPT 5.4 mini ( for faster inference)&lt;/li&gt;
&lt;li&gt;TTS: Keep Current&lt;/li&gt;
&lt;li&gt;Terminal Backend: Docker (make sure either docker is installed / docker desktop running)&lt;/li&gt;
&lt;li&gt;Docker image : default&lt;/li&gt;
&lt;li&gt;Max Iterations : Default. Set this to higher for complex task (cost more token)&lt;/li&gt;
&lt;li&gt;Context Compression Threshold: Default. Higher threshold compresses later and lower does it faster&lt;/li&gt;
&lt;li&gt;Messaging Platform (optional) : Choose Telegram and follow the instructions. Rest same , but I kept only telegram.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If done all this you will be greeted with following screen&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%2Fam7qrjehbve94vke6qa8.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%2Fam7qrjehbve94vke6qa8.png" alt="Hermes Start" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now time to add Composio MCP!&lt;/p&gt;




&lt;p&gt;Hermes by default provide ~40 tools, which is ok for daily tasks.&lt;/p&gt;

&lt;p&gt;But it starts feels pretty limited when you start building complex agentic workflows where you need to connect multiple third party SaaS apps (Google Doc, Sheets, Web seach tools, etc) with prod grade security and calling them at need.&lt;/p&gt;

&lt;p&gt;Composio is the tooling layer that sits between Hermes Agent and third party applications and let you connect to 1000+ tools with secure auth and intelligent tool calling.&lt;/p&gt;

&lt;p&gt;Installing Composio MCP is quite straightforward. Follow these steps:&lt;/p&gt;

&lt;p&gt;Head to the &lt;a href="https://dashboard.composio.dev/" rel="noopener noreferrer"&gt;https://dashboard.composio.dev/&lt;/a&gt; &amp;amp; login. You will be greeted with this dashboard&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%2Fywbqrbfexlke4as2tg2y.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%2Fywbqrbfexlke4as2tg2y.png" alt="Composio Home" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Head to the Install &amp;amp; copy the MCP Url and X-CONSUMER-API-KEY value&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%2F0ee8jcwgrwegwyzoq68n.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%2F0ee8jcwgrwegwyzoq68n.png" alt="Composio Install" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once done head to the terminal and type :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;nano ~/.hermes/config.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;and at the end add these lines:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mcp_servers:
  composio:
    url: &lt;span class="s2"&gt;"https://connect.composio.dev/mcp"&lt;/span&gt;
    headers:
      x-consumer-api-key: &lt;span class="s2"&gt;"YOUR_COMPOSIO_API_KEY"&lt;/span&gt;
    connect_timeout: 60
    &lt;span class="nb"&gt;timeout&lt;/span&gt;: 180
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add your own api key you copied &amp;amp; save the file&lt;/p&gt;

&lt;p&gt;Now, head back to Hermes Agent and restart it using &lt;code&gt;hermes&lt;/code&gt;, and it will detect the mcp.&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%2F7yqf2qa96lx5r8jr6sav.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%2F7yqf2qa96lx5r8jr6sav.png" alt="MCP" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you can use Hermes Agent with MCP like any other agent, even though code runs in the sandbox:).&lt;/p&gt;

&lt;p&gt;Alright now that we have agent &amp;amp; mcp in place, let’s try to see how it performs.&lt;/p&gt;




&lt;h2&gt;
  
  
  Add MCP using Composio CLI (Optional)
&lt;/h2&gt;

&lt;p&gt;Composio also has a CLI, which let’s any agent to communicate with all the tools through commands. The CLI allows composability of workflows. The agent can chain tools and accomplish complex tasks with relatively lesser tokens than MCPs.&lt;/p&gt;

&lt;p&gt;Using it is straight forward. Open your Hermes agent and paste the prompt mentioned on &lt;a href="https://composio.dev/cli" rel="noopener noreferrer"&gt;https://composio.dev/cli&lt;/a&gt; :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;INSTALL (run in user's terminal)
  curl -fsSL https://composio.dev/install | bash

You have access to 1000+ app integrations through these commands.
search → find tools. execute → run them. link → connect accounts.
proxy → raw API access. run → inline scripts.

Bias toward action: run &lt;span class="sb"&gt;`composio search &amp;lt;task&amp;gt;`&lt;/span&gt;, then &lt;span class="sb"&gt;`composio execute &amp;lt;slug&amp;gt;`&lt;/span&gt;.
Input validation, auth checks, and error messages are built in — just try it.

USAGE
  composio &lt;span class="nt"&gt;&amp;lt;command&amp;gt;&lt;/span&gt; [options]

CORE COMMANDS
  search
    Find tools. Use this first — describe what you need in natural language.
    Usage: composio search &lt;span class="nt"&gt;&amp;lt;query&amp;gt;&lt;/span&gt; [--toolkits text] [--limit integer]
      &lt;span class="nt"&gt;&amp;lt;query&amp;gt;&lt;/span&gt;             Semantic use-case query (e.g. "send emails")
      --toolkits          Filter by toolkit slugs, comma-separated
      --limit             Number of results per page (1-1000)

  execute
    Run a tool. Handles input validation and auth checks automatically.
    If auth is missing, the error tells you what to run. Use aggressively.
    Usage: composio execute &lt;span class="nt"&gt;&amp;lt;slug&amp;gt;&lt;/span&gt; [-d, --data text] [--dry-run] [--get-schema]
      &lt;span class="nt"&gt;&amp;lt;slug&amp;gt;&lt;/span&gt;              Tool slug (e.g. "GITHUB_CREATE_ISSUE")
      -d, --data          JSON or JS-style object arguments, e.g. -d '{ repo: "foo" }', @file, or - for stdin
      --dry-run           Validate and preview the tool call without executing it
      --get-schema        Fetch and print the raw tool schema

  link
    Connect an account. Only needed when execute tells you to — don't preemptively link.
    Usage: composio link [&lt;span class="nt"&gt;&amp;lt;toolkit&amp;gt;&lt;/span&gt;] [--no-browser]
      &lt;span class="nt"&gt;&amp;lt;toolkit&amp;gt;&lt;/span&gt;           Toolkit slug to link (e.g. "github", "gmail")

  run
    Run inline TS/JS code with shimmed CLI commands; injected execute(), search(), proxy(), subAgent(), and z (zod).
    Usage: composio run &lt;span class="nt"&gt;&amp;lt;code&amp;gt;&lt;/span&gt; [-- ...args] | run [-f, --file text] [-- ...args] [--dry-run]
      &lt;span class="nt"&gt;&amp;lt;code&amp;gt;&lt;/span&gt;              Inline Bun ESNext code to evaluate
      -f, --file          Run a TS/JS file instead of inline code
      --dry-run           Preview execute() calls without running remote actions

  proxy
    curl-like access to any toolkit API through Composio using your linked account.
    Usage: composio proxy &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&lt;/span&gt; --toolkit text [-X method] [-H header]... [-d data]
      &lt;span class="nt"&gt;&amp;lt;url&amp;gt;&lt;/span&gt;               Full API endpoint URL
      --toolkit           Toolkit slug whose connected account should be used
      -X, --method        HTTP method (GET, POST, PUT, DELETE, PATCH)
      -H, --header        Header in "Name: value" format. Repeat for multiple.
      -d, --data          Request body as raw text, JSON, @file, or - for stdin

  artifacts
    Inspect the cwd-scoped session artifact directory and history.
    Usage: composio artifacts cwd
      cwd                 Print the current session artifact directory path

  Workflow: search → execute. If execute fails with an auth error, run link, then retry.

TOOLS
  tools info &lt;span class="nt"&gt;&amp;lt;slug&amp;gt;&lt;/span&gt;     Print tool summary and cache its schema
  tools list &lt;span class="nt"&gt;&amp;lt;toolkit&amp;gt;&lt;/span&gt;  List tools available in a toolkit
  artifacts cwd         Print the cwd-scoped session artifact directory

EXAMPLES
  # 1. User asks you to "create a GitHub issue"
  composio search "create github issue"
  # → returns GITHUB_CREATE_ISSUE

  # 2. Execute it (will error if not linked — that's fine)
  composio execute GITHUB_CREATE_ISSUE -d '{ repo: "owner/repo", title: "Bug" }'
  # → if auth missing: "Run &lt;span class="sb"&gt;`composio link github`&lt;/span&gt; first"

  # 3. Link only when told to
  composio link github

  # 4. Raw API access when no tool exists
  composio proxy https://gmail.googleapis.com/gmail/v1/users/me/profile --toolkit gmail

  # 5. Run a script with injected helpers
  composio run 'const me = await execute("GITHUB_GET_THE_AUTHENTICATED_USER"); console.log(me)'

DEVELOPER COMMANDS
  dev       Developer workflows: init, playground execution, triggers, and logs.
  generate  Generate type stubs for toolkits, tools, and triggers (TypeScript | Python).
  manage    Manage orgs, toolkits, connected accounts, triggers, auth configs, and projects.

ACCOUNT
  login    Log in to Composio
  logout   Log out from Composio
  whoami   Show current account info
  version  Display CLI version
  upgrade  Upgrade CLI to the latest version

FLAGS
  -h, --help     Show help for command
  --version      Show composio version

LEARN MORE
  Use &lt;span class="sb"&gt;`composio &amp;lt;command&amp;gt; --help`&lt;/span&gt; for more information about a command.
  Documentation: https://docs.composio.dev

GETTING STARTED
  When your user asks you to do something with an external app:
&lt;span class="p"&gt;  1.&lt;/span&gt; composio search "&lt;span class="nt"&gt;&amp;lt;what&lt;/span&gt; &lt;span class="na"&gt;they&lt;/span&gt; &lt;span class="na"&gt;want&lt;/span&gt; &lt;span class="na"&gt;done&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;"
&lt;span class="p"&gt;  2.&lt;/span&gt; composio execute &lt;span class="nt"&gt;&amp;lt;slug&lt;/span&gt; &lt;span class="na"&gt;from&lt;/span&gt; &lt;span class="na"&gt;search&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt; -d '&lt;span class="nt"&gt;&amp;lt;params&amp;gt;&lt;/span&gt;'
&lt;span class="p"&gt;  3.&lt;/span&gt; If auth error → composio link &lt;span class="nt"&gt;&amp;lt;toolkit&amp;gt;&lt;/span&gt;, then retry step 2.

  Do not assume we lack coverage. Search first — we likely support it.
  Do not preemptively link accounts or ask your user what to connect.
  Just try. Auth and validation errors are self-descriptive.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This set’s agent to use Composio cli and do all the task, rather than using direct mcp - infact this approach much simpler as no dependency is required.&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%2Far36vjedj9ca8o0g2w0l.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%2Far36vjedj9ca8o0g2w0l.png" alt="Composio CLI with Hermes Usage" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Alright now that we have agent &amp;amp; mcp in place, time to build the financial agent&lt;/p&gt;




&lt;h2&gt;
  
  
  Building A Financial Analyst Agent
&lt;/h2&gt;

&lt;p&gt;Head to the Hermes Agent, if not active - enable it using Hermes , ensure the MCP section have Composio and all other relevant MCP’s showing up (Gmail, Google Sheet, Google Docs , Exa Search). This is essential.&lt;/p&gt;

&lt;p&gt;Now in the prompt box, paste the following prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are my personal Indian stock market financial analyst. Start by asking me exactly 5 screening questions one at a time to assess my risk appetite (cover: risk tolerance, investment horizon, capital range, sectors of interest, and reaction to loss). Once done, analyze my answers and begin your analyst workflow:

**Setup:** Attempt to use Google Docs, Google Sheets, and Gmail via your Composio tools. If any are not connected, Composio will automatically generate a sign-in link — share it with me, wait for me to authenticate, then resume once all connections are active.

**Every 5 minutes, run this loop:**

1. **Data Gathering:** Pull live Indian stock market data from multiple sources in parallel:
   - **Exa Search Tool:** Use composio Exa tool to search for latest Indian stock market news, analyst reports, earnings updates, sector trends, and breaking financial events. Query terms like "NSE BSE India stocks today", "Indian market sentiment", "Nifty Sensex analysis", top sector movements, and any stock-specific news relevant to my risk profile.
   - **Free Financial APIs &amp;amp; Web Sources:** NSE India API, BSE India, Yahoo Finance India, Moneycontrol, Tickertape, Economic Times Markets, and any other authoritative free real-time Indian market feeds available to you.
   - Cross-reference and reconcile data from both sources for accuracy before analysis.

2. Analyze all gathered data against my risk profile.

3. **Google Doc:** Search for an existing doc named "Hermes Financial Report - India". If found, append a new report section separated by `---`. If not, create it. Each report must be clean, well-structured with proper headings, and include: timestamp, market summary, macro indicators, top picks with clear reasoning, what to avoid and why, and a decisive final recommendation paragraph. Use proper spacing, bold headers, and bullet points for readability.

4. **Google Sheet:** Search for an existing sheet named "Hermes Stock Tracker - India". If found, append new rows. If not, create it. Format the sheet with bold column headers, frozen top row, and color-coded sentiment (Bullish = green, Bearish = red, Neutral = yellow where possible). Columns: Stock Name | Ticker | Exchange (NSE/BSE) | Sector | Market Sentiment (Bullish/Bearish/Neutral) | My Prediction (Yes/No) | Confidence % | Min Investment (INR) | Last Updated.

5. **Hourly Email via Gmail:** After every report cycle, send me a well-formatted email with:
   - **Subject:** 📊 Hermes Market Report — [Date &amp;amp; Time IST]
   - **Body:** A brief 3–5 line market summary, top 3 stock picks with one-line reasoning each, one key risk to watch, and direct clickable links to the updated Google Doc and Google Sheet.
   - Keep the email clean, scannable, and professional — use spacing, bold labels, and short paragraphs.

**Urgent Signal Alert (send immediately, outside the hourly loop):** If at any point you detect a strong buy or sell signal (significant price movement, breaking news from Exa or any financial source, sentiment shift, or macro event affecting Indian markets), instantly send a separate alert email with:
   - **Subject:** 🚨 URGENT: [BUY/SELL] Signal — [Stock Name] — [Time IST]
   - **Body:** Stock name, ticker, exchange, signal type (Buy/Sell), reason in 2–3 crisp lines, recommended action, and link to the Google Doc &amp;amp; Google Sheet for full context.

Never stop the loop unless I say stop. Be decisive, data-driven, and always flag urgency clearly.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With this prompt:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You get asked 5 questions, and it builds a personal risk profile tailored to your investment style.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Every hour, it automatically scans NSE, BSE, Exa, Yahoo Finance, Moneycontrol and more for live Indian market data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It writes a detailed investment report (what to buy, what to avoid, why) into a Google Doc - appending fresh analysis every cycle.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It maintains a live Google Sheet tracking top Indian stocks with sentiment, prediction, confidence, and minimum investment amount.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;It emails you a clean market summary every hour, and fires an instant alert the moment it spots an urgent buy or sell signal.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: For demo i set the 1 hour duration to 5 minutes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now wait for execution to finish and cron job to be created. This is what my flow looked like:&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/7nteuv1QA5c"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;




&lt;p&gt;Agent by default didn’t had access to Gmail, Sheet, Docs &amp;amp; EXA, and manually adding them was a pain (if say 20+ tools) and it bloats the context window as well.&lt;/p&gt;

&lt;p&gt;Composio solves the issue. You add it once, and it takes care of: - OAuth (one time link- did beforehand), &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;calling right tool at runtime when needed, &lt;/li&gt;
&lt;li&gt;performing all the actions in sandbox and &lt;/li&gt;
&lt;li&gt;deliver the result, 
while Hermes Agent handled the orchestration and reasoning.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note : If you haven’t connected any tool, while running agent, agent will ask you to connect, authenticate. Also for EXA - use a api key.&lt;/p&gt;

</description>
      <category>tutorial</category>
      <category>ai</category>
      <category>productivity</category>
      <category>hermes</category>
    </item>
    <item>
      <title>Best Agents SDK in 2026</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Fri, 03 Apr 2026 14:59:51 +0000</pubDate>
      <link>https://dev.to/composiodev/best-agents-sdk-in-2026-7gg</link>
      <guid>https://dev.to/composiodev/best-agents-sdk-in-2026-7gg</guid>
      <description>&lt;p&gt;AI agents are no longer experimental. They are being shipped in production systems right now, and the SDKs powering them have matured dramatically.&lt;/p&gt;

&lt;p&gt;If you're building with AI in 2026, understanding the tools available to you is no longer optional.&lt;/p&gt;

&lt;p&gt;OpenAI, Claude, and Google are providing their SDKs to build these agents in minimal code for production. With their own quirks, they can make it harder for businesses and developers alike.&lt;/p&gt;

&lt;p&gt;I just did a comparison between the top most used frameworks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Claude Agent SDK&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;OpenAI Agents SDK&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Google ADK&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All source code at the end!&lt;/p&gt;

&lt;p&gt;Let’s begin.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Comparison?
&lt;/h2&gt;

&lt;p&gt;First thing’s first, why this comparison, while many others already existed, here is the deal:&lt;/p&gt;

&lt;p&gt;I’ve been building agents across these SDKs, and the reality is they all promise “minimal code” but behave very differently once you go beyond demos.&lt;/p&gt;

&lt;p&gt;So I compared them the only way that matters: by actually building with them.&lt;/p&gt;

&lt;p&gt;I looked at:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;how quickly I could get something working,&lt;/li&gt;
&lt;li&gt;how much control I had when things got complex, and&lt;/li&gt;
&lt;li&gt;how they handled real-world workflows like multi-agent coordination, tool usage, and state management.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here are all my findings.&lt;/p&gt;




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

&lt;p&gt;The OpenAI Agents SDK is an open-source framework and a significant upgrade over Swarm. It is designed to simplify orchestrating &lt;strong&gt;multi-agent workflows&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It is &lt;strong&gt;Python &amp;amp; TS-first&lt;/strong&gt;. Developers use built-in language features to orchestrate and chain agents rather than learning new abstractions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Primitives
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Agents&lt;/strong&gt;: LLMs with instructions, tools, guardrails, and handoffs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handoffs&lt;/strong&gt;: Delegating tasks to other agents.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tools&lt;/strong&gt;: Functions, MCP, and hosted tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Guardrails&lt;/strong&gt;: Safety checks for input/output validation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sessions&lt;/strong&gt;: Automatic conversation history management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tracing&lt;/strong&gt;: Built-in visualization for debugging.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Use It
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Language Support&lt;/strong&gt;: Provider-agnostic. Supports OpenAI APIs and 100+ other LLMs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Realtime &amp;amp; TTS Voice&lt;/strong&gt;: Build voice agents with interruption detection and context management.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Observability&lt;/strong&gt;: Robust tracing exports to &lt;code&gt;Logfire&lt;/code&gt;, &lt;code&gt;AgentOps&lt;/code&gt;, or &lt;code&gt;OpenTelemetry&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced Connectivity&lt;/strong&gt;: Supports WebSocket transport for Responses API and SIP protocol connections.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GPT-5.x Ready&lt;/strong&gt;: Updated reasoning effort and cleaner handoff history for downstream context.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ease of Getting Started
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Minimal setup&lt;/strong&gt;: Requires just a few lines of code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quick install&lt;/strong&gt;: &lt;code&gt;pip install openai-agents&lt;/code&gt;. Runs in under 10 lines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Suited for&lt;/strong&gt;: Teams wanting rapid prototyping and simple agent coordination.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Developer Experience
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Python-first&lt;/strong&gt;: Express complex relationships with a small set of primitives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Type Safety&lt;/strong&gt;: Zod-powered validation for TypeScript/JavaScript.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visual Tooling&lt;/strong&gt;: Agent Builder provides a drag-and-drop canvas for composing logic.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I used OpenA Agents SDK to build me a job search agent, that fetches me jobs based on the user persona it created by asking me relevant questions.&lt;/p&gt;

&lt;p&gt;By default, openai agents is unable to use exa search, google sheets, this is where composio handle’s that, not only that, but you can also connect it to over 850+ tools and integrations.&lt;/p&gt;

&lt;p&gt;This is the code that handled all the heavy lifting&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;# imports 
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;composio&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Composio&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;composio_openai_agents&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAIAgentsProvider&lt;/span&gt;

&lt;span class="c1"&gt;# Initialize Composio
&lt;/span&gt;&lt;span class="n"&gt;composio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Composio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;provider&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;OpenAIAgentsProvider&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;

&lt;span class="c1"&gt;# Create Tool Router session (connection tools + wait so OAuth can finish before continuing)
&lt;/span&gt;&lt;span class="n"&gt;session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;composio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;toolkits&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;GITHUB&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;exa&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;googlesheets&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;browser_tool&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="n"&gt;manage_connections&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;enable&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;wait_for_connections&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;mcp_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;

&lt;span class="c1"&gt;# add tool_configs
&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;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-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;instructions&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;...&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;tool_router&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="n"&gt;mcp_url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;headers&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;x-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;api_key&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One thing that stand out was, not only agent created a right persona based on screening question, but also fetched me list of relevant job description along with my skills relevancy, without explicitly told to do so.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/X9IGm9lkSUE"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  Claude Agent SDK
&lt;/h2&gt;

&lt;p&gt;The Claude Agent SDK is Anthropic's open-source framework for building agents that interact with a &lt;strong&gt;real computer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;It evolved from Claude Code. The core principle is simple: &lt;strong&gt;give your agent a computer.&lt;/strong&gt; It uses a shell, a file system, and the web just like a human.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Primitives
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bash tool&lt;/strong&gt;: Executes shell commands directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read / Write / Edit&lt;/strong&gt;: Native file system access.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Glob &amp;amp; Search&lt;/strong&gt;: File discovery across project directories.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subagents&lt;/strong&gt;: Spawn parallel or nested agents for subtasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MCP servers&lt;/strong&gt;: Standardized integrations (Slack, GitHub, Google Drive).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Permission modes&lt;/strong&gt;: Fine-grained control via &lt;code&gt;allowed_tools&lt;/code&gt; and &lt;code&gt;permission_mode&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Use It
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Native OS Access&lt;/strong&gt;: The only SDK where agents directly control a computer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;In-Process Tools&lt;/strong&gt;: Custom tools run inside your Python app. No separate process needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Cloud&lt;/strong&gt;: Supports AWS Bedrock, Google Vertex AI, and Microsoft Azure AI Foundry.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Xcode 26 Integration&lt;/strong&gt;: Full Claude Code power inside the IDE, including capturing Xcode Previews.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ease of Getting Started
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Minimal entry point&lt;/strong&gt;: Built-in tools mean no manual plumbing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Quick install&lt;/strong&gt;: &lt;code&gt;pip install claude-agent-sdk&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best for&lt;/strong&gt;: Developers needing deep OS access or agentic coding workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Production Readiness
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Battle-proven&lt;/strong&gt;: Powers Anthropic’s internal research and video creation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Compaction&lt;/strong&gt;: Automatic management for long-running tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cost Controls&lt;/strong&gt;: &lt;code&gt;max_budget_usd&lt;/code&gt; parameter caps spend per session.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I used Claude Agent’s SDK to build an open-source contributor, which takes a repo name, fetches a good issue listed, reads the contribution file, fork’s the repo, create the code fix that matches orignal repo style, push the code to forked repo and raises a PR.&lt;/p&gt;

&lt;p&gt;By default, calude agents is unable to use github, this is where composio handle’s that, not only that, but you can also connect it to over 850+ tools and integrations.&lt;/p&gt;

&lt;p&gt;This is the code that handled all the heavy lifting&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;# imports
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;composio&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Composio&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;claude_agent_sdk&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ClaudeSDKClient&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ClaudeAgentOptions&lt;/span&gt;

&lt;span class="c1"&gt;# fetch all composio toolkits name
&lt;/span&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;_toolkits&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="nb"&gt;list&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="n"&gt;raw&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OSS_COMPOSIO_TOOLKITS&lt;/span&gt;&lt;span class="sh"&gt;"&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;raw&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="n"&gt;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;t&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;raw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&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;t&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;()]&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;DEFAULT_TOOLKITS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# create a async chat, connect to composio, fetch user id, define toolkits and mcp server url + configs.
&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;chat_with_oss_stack&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMPOSIO_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMPOSIO_API_KEY is not set&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;composio&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Composio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;user_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMPOSIO_USER_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;USER_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;RuntimeError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Set COMPOSIO_USER_ID (or USER_ID) in the environment or .env — Composio needs a stable user id string.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;kits&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;_toolkits&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;mcp_server&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;composio&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;toolkits&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;kits&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;mcp_server&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="k"&gt;raise&lt;/span&gt; &lt;span class="nc"&gt;ValueError&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Session URL not found&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;options&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ClaudeAgentOptions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;permission_mode&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bypassPermissions&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_servers&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;composio&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;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;http&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;url&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;headers&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;x-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMPOSIO_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="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;system_prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;OSS_SYSTEM_PROMPT&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;max_turns&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;OSS_MAX_TURNS&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;40&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I asked it to operate on “gemini-cli” repository, and it create a pr for me.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/G-3V20m8L-w"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;




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

&lt;p&gt;Google's ADK is a code-first framework. It applies engineering principles like &lt;strong&gt;versioning, testing, and modularity&lt;/strong&gt; to AI.&lt;/p&gt;

&lt;p&gt;While optimized for Gemini, it is model-agnostic and built for compatibility with third-party tools.&lt;/p&gt;

&lt;h3&gt;
  
  
  Core Primitives
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LLM Agents&lt;/strong&gt;: Use LLMs as the reasoning core.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sequential/Parallel/Loop Agents&lt;/strong&gt;: Predictable pipeline execution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Graph-based workflows&lt;/strong&gt;: (ADK 2.0 Alpha) Conditional, branching pipelines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent2Agent (A2A)&lt;/strong&gt;: Secure protocol for agent-to-agent delegation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ADK Web UI&lt;/strong&gt;: Browser-based interface for inspecting traces and artifacts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Use It
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Widest Language Support&lt;/strong&gt;: Python, TypeScript, Java, and &lt;strong&gt;Go&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complex Orchestration&lt;/strong&gt;: Graph-based logic for branching and retry paths.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secure Interoperability&lt;/strong&gt;: A2A allows delegation without exposing internal memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vertex AI Integration&lt;/strong&gt;: Deploy directly to Google Cloud’s managed enterprise runtime.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Ease of Getting Started
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Under 100 lines&lt;/strong&gt;: Build production agents with bidirectional audio/video.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agent Starter Pack&lt;/strong&gt;: Accelerated deployment path for Google Cloud services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best for&lt;/strong&gt;: Enterprise-grade systems requiring tight Google ecosystem integration.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Developer Experience
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Advanced State Management&lt;/strong&gt;: Restores state from failure and allows context "rewinding."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise Governance&lt;/strong&gt;: Integration with Cloud API Registry to curate approved tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-built Connectors&lt;/strong&gt;: 100+ connectors via Composio.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;For demos these are cool, heard people say, can be used in production, but it failed most of tool calls, racked me up a bill of 5$ due to repeated tool call (was stuck in thinking loop). Also the rate limit on free tier is real pain.&lt;/p&gt;

&lt;p&gt;Yes, its developer friendly, but really lacks a lot in terms of performance and newbies can easily stuck with &lt;code&gt;adk web&lt;/code&gt;  or &lt;code&gt;adk cli&lt;/code&gt;  as it requires a specific folder structure.&lt;/p&gt;

&lt;p&gt;However for simpler task it did quite well. Built an email agent that maps promotional education mails (like coursera, deeplearning) to well optimised developer roadmap, which beginner devs can use  to learn in a structured manner.  &lt;/p&gt;

&lt;p&gt;Suprisingly code to use composio tools here is quite simple and easy to use:&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;# imports
&lt;/span&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;composio&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Composio&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;composio_google&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;GoogleProvider&lt;/span&gt;

&lt;span class="c1"&gt;# load envs
&lt;/span&gt;&lt;span class="n"&gt;COMPOSIO_API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMPOSIO_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;COMPOSIO_USER_ID&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMPOSIO_USER_ID&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# create composio client
&lt;/span&gt;&lt;span class="n"&gt;composio_client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Composio&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;COMPOSIO_API_KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;provider&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;GoogleProvider&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;120&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_retries&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# create a client session with tools
&lt;/span&gt;&lt;span class="n"&gt;composio_session&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;composio_client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;user_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;COMPOSIO_USER_ID&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;toolkits&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;gmail&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="c1"&gt;# store sessiom url
&lt;/span&gt;&lt;span class="n"&gt;COMPOSIO_MCP_URL&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;composio_session&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mcp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;url&lt;/span&gt;

&lt;span class="c1"&gt;# add composio mcp server connection
&lt;/span&gt;&lt;span class="n"&gt;composio_toolset&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;McpToolset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;connection_params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nc"&gt;StreamableHTTPConnectionParams&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;COMPOSIO_MCP_URL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;headers&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;x-api-key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;COMPOSIO_API_KEY&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;30.0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;sse_read_timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mf"&gt;600.0&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="c1"&gt;# include it in the agents
&lt;/span&gt;&lt;span class="n"&gt;root_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;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.5-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;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;composio_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;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;An agent that uses Composio tools to perform actions.&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="p"&gt;(&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You are a helpful assistant connected to Composio. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;You have the following tools available: &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMPOSIO_SEARCH_TOOLS, COMPOSIO_MULTI_EXECUTE_TOOL, &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;COMPOSIO_MANAGE_CONNECTIONS, COMPOSIO_REMOTE_BASH_TOOL, COMPOSIO_REMOTE_WORKBENCH. &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Use these tools to help users with GMAIL operations.&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;composio_toolset&lt;/span&gt;&lt;span class="p"&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;iframe src="https://www.youtube.com/embed/vGYQy3wp42A"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;




&lt;h2&gt;
  
  
  Comparison Table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;strong&gt;Feature&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;OpenAI Agents SDK&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Claude Agent SDK&lt;/strong&gt;&lt;/th&gt;
&lt;th&gt;&lt;strong&gt;Google ADK&lt;/strong&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Primary Language&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Python, TypeScript&lt;/td&gt;
&lt;td&gt;Python, TypeScript&lt;/td&gt;
&lt;td&gt;Python, TS, Java, Go&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Model Agnostic&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ (100+ LLMs)&lt;/td&gt;
&lt;td&gt;⚠️ (Claude-first)&lt;/td&gt;
&lt;td&gt;✅ (Gemini-optimized)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Multi-Agent&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Handoffs&lt;/td&gt;
&lt;td&gt;✅ Subagents&lt;/td&gt;
&lt;td&gt;✅ Graph (2.0 Alpha)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;OS Access&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;❌ No native control&lt;/td&gt;
&lt;td&gt;✅ Native Bash/File&lt;/td&gt;
&lt;td&gt;❌ No native control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Voice/Realtime&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;✅ Built-in&lt;/td&gt;
&lt;td&gt;⚠️ Via API&lt;/td&gt;
&lt;td&gt;⚠️ Via API&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Best For&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Voice &amp;amp; LLM diversity&lt;/td&gt;
&lt;td&gt;OS/File automation&lt;/td&gt;
&lt;td&gt;Enterprise/Google Cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Which One to Choose?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI Agents SDK&lt;/strong&gt;: Choose if you want a lightweight framework with strong voice support and the ability to swap LLMs freely.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Claude Agent SDK&lt;/strong&gt;: Choose if your agents need deep OS access (developer assistants) or follows a "give the agent a computer" paradigm.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google ADK&lt;/strong&gt;: Choose if you are building enterprise-grade systems on Google Cloud or need multi-language support (Python/Java/Go). Requires lot of manual plumbing and security.&lt;/li&gt;
&lt;li&gt;For better&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;OpenAI, Claude, and Gemini are all key players. However, the real competitive edge isn't knowing &lt;em&gt;that&lt;/em&gt; these SDKs exist. It's the &lt;strong&gt;hands-on mastery&lt;/strong&gt; of architectural decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When to use a handoff versus a subagent.&lt;/li&gt;
&lt;li&gt;How to design tools that don't bloat the context window.&lt;/li&gt;
&lt;li&gt;When to insert a human checkpoint.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Frameworks evolve quickly. The deeper intuition for architecting reliable systems only comes through repeated experimentation.&lt;/p&gt;

&lt;p&gt;All agents source code can be seen at &lt;a href="https://github.com/DevloperHS/agents-sdk-tests" rel="noopener noreferrer"&gt;https://github.com/DevloperHS/agents-sdk-tests&lt;/a&gt;. Feel free to fork and raise pr’s :)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy Building.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>programming</category>
      <category>automation</category>
    </item>
    <item>
      <title>Top 10 OpenClaw Plugins to Supercharge Your OpenClaw Workflows</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Wed, 18 Mar 2026 05:03:35 +0000</pubDate>
      <link>https://dev.to/composiodev/top-10-openclaw-plugins-to-supercharge-your-openclaw-workflows-4fpc</link>
      <guid>https://dev.to/composiodev/top-10-openclaw-plugins-to-supercharge-your-openclaw-workflows-4fpc</guid>
      <description>&lt;h2&gt;
  
  
  The Rise of OpenClaw Plugins
&lt;/h2&gt;

&lt;p&gt;If you've worked with OpenClaw, you already know Skills, the task-level instructions that let your agent send emails, query APIs, or pull live data. &lt;/p&gt;

&lt;p&gt;But plugins operate at a deeper layer. They hook into the agent's lifecycle, reshape how it reasons, authenticates, and interacts with the outside world.&lt;/p&gt;

&lt;p&gt;Though OpenClaw currently has a very limited set of official plugins, many independent devs have built some really cool plugins. &lt;/p&gt;

&lt;p&gt;And it seems OpenClaw plugins are going to get a huge push from OpenClaw.&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%2F3aom1p2kwz94hz9b19rc.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%2F3aom1p2kwz94hz9b19rc.png" alt="X Post" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Top OpenClaw Plugins
&lt;/h2&gt;

&lt;p&gt;As an OpenClaw enthusiast, I collated some of the actually useful plugins for OpenClaw.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Composio - Connect OpenClaw with 850+ on-demand SaaS Apps&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;memU (Memory Framework) - Hierarchical Knowledge Graph That Makes Your Agent Proactive&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;SecureClaw - OWASP-Aligned Security Auditing and Runtime Hardening&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Lobster - Typed Workflow Pipelines with Approval Gates for Reliable Automation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Memory LanceDB - Vector-Backed Long-Term Memory with Auto-Recall and Auto-Capture&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MemOS Cloud - Cloud-Hosted Cross-Agent Memory with Async Recall and Isolation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;OpenClaw Foundry - Self-Writing Meta-Extension That Learns and Builds Its Own Tools&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Better Gateway - Auto-Reconnect, Embedded IDE, and Browser Terminal for Stable Ops&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Voice Call - Outbound Phone Calls and Multi-Turn Voice Conversations via Twilio&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  1. Composio
&lt;/h2&gt;

&lt;p&gt;Connect OpenClaw with 850+ on-demand SaaS Apps&lt;/p&gt;

&lt;p&gt;nstead of installing individual skills for every app (Gmail, GitHub, Outlook, Notion), this single plugin connects to Composio’s managed MCP server and handles all OAuth and authentication logic automatically.&lt;/p&gt;

&lt;p&gt;This plugin is the official bridge that allows your OpenClaw agent to discover and call any SaaS tools dynamically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-requisites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Log in at dashboard.composio.dev&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose your preferred client (choose OpenClaw)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Copy your consumer key (ck_...)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2Fbbcbnrtu3fr9swo67c6u.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%2Fbbcbnrtu3fr9swo67c6u.png" alt="Install the Composio plugin" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Set OpenClaw Config&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then, allow Composio tools in your agent's tool list. This works with any tool profile (coding, minimal, messaging, etc.). Without this step, Composio tools will only be available on the full tool profile:&lt;/p&gt;

&lt;p&gt;After setting your key and allowing the tools, restart the gateway:&lt;/p&gt;

&lt;p&gt;Result (in ~/openclaw/openclaw.json file):&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%2Fgn47kl6xmm8vh989rolm.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%2Fgn47kl6xmm8vh989rolm.png" alt="Change the json file" width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repo: &lt;a href="https://github.com/ComposioHQ/openclaw-composio-plugin" rel="noopener noreferrer"&gt;https://github.com/ComposioHQ/openclaw-composio-plugin&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;npm: &lt;a href="https://www.npmjs.com/package/@composio/openclaw-plugin" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/@composio/openclaw-plugin&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  2. memU (Memory Framework)
&lt;/h2&gt;

&lt;p&gt;Hierarchical Knowledge Graph That Makes Your Agent Proactive&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%2Fubbhmmotwcaeyw5scvkr.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%2Fubbhmmotwcaeyw5scvkr.png" alt="MemU" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A proactive long-term memory plugin that replaces standard flat-file memory.&lt;/p&gt;

&lt;p&gt;It builds a hierarchical knowledge graph of your preferences and projects, allowing the agent to anticipate needs rather than just reacting to prompts.&lt;/p&gt;

&lt;p&gt;Simple examples include: "You have a meeting in 10 minutes; should I pull the latest briefing?"&lt;/p&gt;

&lt;p&gt;If you want to add a robust memory layer for the agent to handle missing context, go for it.&lt;/p&gt;

&lt;p&gt;GitHub Repo: &lt;a href="https://github.com/duxiaoxiong/memu-engine-for-OpenClaw" rel="noopener noreferrer"&gt;https://github.com/duxiaoxiong/memu-engine-for-OpenClaw&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation&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;openclaw plugins &lt;span class="nb"&gt;install&lt;/span&gt; @memu/memu-engine
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  3. SecureClaw
&lt;/h2&gt;

&lt;p&gt;OWASP-Aligned Security Auditing and Runtime Hardening&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%2F6w1qk2nlghcyabi18l63.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%2F6w1qk2nlghcyabi18l63.png" alt="SecureClaw Github" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The industry-standard security plugin.&lt;/p&gt;

&lt;p&gt;It hardens the agent's runtime by mapping actions to the OWASP Top 10 for Agents. It provides real-time auditing and prevents prompt injection attacks from reaching your system shell.&lt;/p&gt;

&lt;p&gt;If you are concerned about OpenClaw security while running on vm’s or locals (not recommended), this plugin can give you a sigh of relief.&lt;/p&gt;

&lt;p&gt;GitHub Repo: &lt;a href="https://github.com/adversa-ai/secureclaw" rel="noopener noreferrer"&gt;https://github.com/adversa-ai/secureclaw&lt;/a&gt;&lt;/p&gt;




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

&lt;p&gt;Typed Workflow Pipelines with Approval Gates for Reliable Automation&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%2Fvb3299xtdjpzbsge5mdk.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%2Fvb3299xtdjpzbsge5mdk.png" alt="Lobster" width="800" height="383"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A powerful scripting plugin that turns complex multi-step skills into repeatable, typed pipelines.&lt;/p&gt;

&lt;p&gt;This means, instead of the agent "guessing" the next step, Lobster ensures high-reliability execution for production-grade automations.&lt;/p&gt;

&lt;p&gt;It does it through typed JSON-first pipelines, jobs, and approval gates &amp;amp; let OpenClaw call the workflows in one step.&lt;/p&gt;

&lt;p&gt;If you like to automate tasks using your skills, this will make your job easier than ever.&lt;/p&gt;

&lt;p&gt;GitHub Repo: &lt;a href="https://github.com/openclaw/lobster" rel="noopener noreferrer"&gt;https://github.com/openclaw/lobster&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lobster is a bundled tool — enable it in your configuration.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Memory LanceDB
&lt;/h2&gt;

&lt;p&gt;Vector-Backed Long-Term Memory with Auto-Recall and Auto-Capture&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%2Fi6edij32fmdv6w0w4si5.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%2Fi6edij32fmdv6w0w4si5.png" alt="Memory Lance DB" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The default memory-core plugin stores memory as flat Markdown files. memory-lancedb replaces it with a proper vector-backed long-term memory store using LanceDB.&lt;/p&gt;

&lt;p&gt;Set plugins.slots.memory = "memory-lancedb" and your agent gets auto-recall (relevant memories injected before every turn) and auto-capture (important facts stored after every turn) — without you having to manually write to MEMORY.md.&lt;/p&gt;

&lt;p&gt;It supports multiple embedding providers (OpenAI, Gemini, Ollama), includes prompt-injection detection for captured memories, and provides a CLI for searching and managing stored memories.&lt;/p&gt;

&lt;p&gt;If your agent keeps "forgetting" things between sessions or after context compaction, this is the first plugin you should install.&lt;/p&gt;

&lt;p&gt;GitHub Repo: &lt;a href="https://github.com/noncelogic/openclaw-memory-lancedb" rel="noopener noreferrer"&gt;https://github.com/noncelogic/openclaw-memory-lancedb&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6. MemOS Cloud
&lt;/h2&gt;

&lt;p&gt;Cloud-Hosted Cross-Agent Memory with Async Recall and Isolation&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%2Fhqs2rt5f9sxq878i4l6c.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%2Fhqs2rt5f9sxq878i4l6c.png" alt="MemOS Cloud" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MemOS Cloud is a lifecycle plugin that recalls relevant memories from the MemOS Cloud API before each agent run and saves new conversation data after each run.&lt;/p&gt;

&lt;p&gt;It works asynchronously, supports cross-agent memory isolation via agent_id, and lets you configure limits on how many memories are injected per turn.&lt;/p&gt;

&lt;p&gt;Where memory-lancedb stores everything locally, MemOS Cloud is the right choice when you need cloud-hosted memory that persists across devices, or when you're running multi-agent setups where agents need isolated but centrally managed memory.&lt;/p&gt;

&lt;p&gt;It's a great complement to LanceDB — use LanceDB for local-first setups, and MemOS Cloud when you need cloud persistence or multi-agent coordination.&lt;/p&gt;

&lt;p&gt;GitHub Repo: &lt;a href="https://github.com/MemTensor/MemOS-Cloud-OpenClaw-Plugin" rel="noopener noreferrer"&gt;https://github.com/MemTensor/MemOS-Cloud-OpenClaw-Plugin&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  7. OpenClaw Foundry
&lt;/h2&gt;

&lt;p&gt;Self-Writing Meta-Extension That Learns and Builds Its Own Tools&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%2Fbjil2t3rp5aj96dh5pmi.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%2Fbjil2t3rp5aj96dh5pmi.png" alt="OpenClaw Foundry" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Foundry is a self-writing meta-extension. It observes your workflows, researches the OpenClaw docs, and writes new skills, extensions, hooks, and tools directly into your setup.&lt;/p&gt;

&lt;p&gt;The self-modification loop actually works: Foundry validates generated code in a sandbox before deploying it, records patterns from successes and failures, and can even extend its own capabilities.&lt;/p&gt;

&lt;p&gt;It includes tools like&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;foundry_implement&lt;/code&gt; (end-to-end research + build),&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;foundry_write_skill&lt;/code&gt;, &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;foundry_write_hook&lt;/code&gt;, &lt;/li&gt;
&lt;li&gt;and &lt;code&gt;foundry_extend_self&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;making it the closest thing to an agent that builds its own tools.&lt;/p&gt;

&lt;p&gt;GitHub Repo: &lt;a href="https://github.com/lekt9/openclaw-foundry" rel="noopener noreferrer"&gt;https://github.com/lekt9/openclaw-foundry&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  8. Better Gateway
&lt;/h2&gt;

&lt;p&gt;Auto-Reconnect, Embedded IDE, and Browser Terminal for Stable Ops&lt;/p&gt;

&lt;p&gt;The stock OpenClaw gateway drops WebSocket connections under load. &lt;/p&gt;

&lt;p&gt;Better Gateway fixes this with automatic reconnection, configurable retry intervals, and a status indicator that shows connection health in real time.&lt;/p&gt;

&lt;p&gt;Beyond stability, it adds a Monaco-based IDE and a full xterm.js terminal directly into the gateway UI — no extra ports, no SSH tunneling needed. Everything runs on the main gateway port.&lt;/p&gt;

&lt;p&gt;It also exposes a file API for workspace read/write/list/delete operations, making it a practical all-in-one development environment for your OpenClaw setup.&lt;/p&gt;

&lt;p&gt;If you run OpenClaw on a remote server or VPS, this plugin is essential for a smooth development experience.&lt;/p&gt;

&lt;p&gt;GitHub Repo: &lt;a href="https://github.com/ThisIsJeron/openclaw-better-gateway" rel="noopener noreferrer"&gt;https://github.com/ThisIsJeron/openclaw-better-gateway&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Voice Call
&lt;/h2&gt;

&lt;p&gt;Outbound Phone Calls and Multi-Turn Voice Conversations via Twilio&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%2F4x2gxvlq7oors59f6nwq.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%2F4x2gxvlq7oors59f6nwq.png" alt="Voice Call " width="800" height="356"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have kept the best one for the last, and it's the most transformative plugin of the year.&lt;/p&gt;

&lt;p&gt;Voice Call moves OpenClaw beyond text by enabling outbound phone calls and multi-turn voice conversations via Twilio or Telnyx.&lt;/p&gt;

&lt;p&gt;It’s widely used for "reach me anywhere" notifications and for real-world tasks like booking appointments, as shown in YouTube/Twitter demo videos.&lt;/p&gt;

&lt;p&gt;Throw it leads, client, follow up, it handles all, with just a single setup. Game changer in voice call automations.&lt;/p&gt;

&lt;p&gt;So, if you are a business owner who has to call a lot of people, this plugin is for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub Repo: &lt;a href="https://github.com/openclaw/openclaw/tree/main/extensions/voice-call" rel="noopener noreferrer"&gt;https://github.com/openclaw/openclaw/tree/main/extensions/voice-call&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In case you want speed, you can check community one: &lt;a href="https://github.com/deepgram/deepclaw" rel="noopener noreferrer"&gt;VoiceClaw- DeepGram Plugin&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And with that, we have reached the end of this short, definitive plugin list.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Plugins run silently in the background, shaping how your agent thinks and responds at a system level. It’s really a more integrated experience than just skills.&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>ai</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to unlock 850+ tools in OpenClaw</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Wed, 11 Mar 2026 12:48:25 +0000</pubDate>
      <link>https://dev.to/composiodev/how-to-unlock-850-tools-in-openclaw-516g</link>
      <guid>https://dev.to/composiodev/how-to-unlock-850-tools-in-openclaw-516g</guid>
      <description>&lt;h2&gt;
  
  
  OpenClaw Limitations Unlocked
&lt;/h2&gt;

&lt;p&gt;Openclaw comes with pretty limited set of tools. They are powerful but restricts a lot of functionality.&lt;/p&gt;

&lt;p&gt;What if a single one can give you access to plethora of tools that works at your command. &lt;/p&gt;

&lt;p&gt;There is a hidden benefit too - you don't have to share your credentials with open claw, making your OpenClaw workflows secure.&lt;/p&gt;

&lt;p&gt;Enter's Composio - a tool layer for OpenClaw and all ai agents that offer self-tool discovery and selection, e2e authentication and no vendor lock in.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why use it?
&lt;/h2&gt;

&lt;p&gt;Composio expand's capabilities while keeping authentication secure and data under your control. &lt;/p&gt;

&lt;p&gt;So, it's just plug and play - you plug in, connect your tools, and start building things that actually matter.&lt;/p&gt;

&lt;p&gt;Now Let's look at how to connect composio with OpenClaw in this short guide.&lt;/p&gt;




&lt;h2&gt;
  
  
  3 Ways to connect opne claw
&lt;/h2&gt;

&lt;p&gt;Here are 3 ways to connect openclaw:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Direct prompt&lt;/li&gt;
&lt;li&gt;Composio npm package&lt;/li&gt;
&lt;li&gt;MCP Porter&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's look at how to set it up&lt;/p&gt;




&lt;h3&gt;
  
  
  1. Direct Prompt
&lt;/h3&gt;

&lt;p&gt;Best part about open claw is - it can auto execute tools and setup your tools using a single prompt. &lt;/p&gt;

&lt;p&gt;You can use that to your advantage and open up the OpenClaw dashboard chat and paste the following prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add a new MCP server called "composio" with transport type HTTP. Use the URL https://connect.composio.dev/mcp and add the header "x-consumer-api-key: your-api-key".
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure to replace your-api-key with actual composio api key. You can get that by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Visiting to &lt;a href="https://dashboard.composio.dev/" rel="noopener noreferrer"&gt;Composio Dashboard&lt;/a&gt; and sign up / login.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then heading to the &lt;strong&gt;Connect to OpenClaw&lt;/strong&gt; and copy the prompt.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&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%2F0rcx4luggqapnn5ewwdv.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%2F0rcx4luggqapnn5ewwdv.png" alt="Reference Image" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If first time login and authenticate and you are done!&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Composio npm package
&lt;/h3&gt;

&lt;p&gt;Composio recently released their open claw plugin, this mean's, no config headache, simple one liner command does it all!&lt;/p&gt;

&lt;p&gt;So, head to terminal and type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw plugins &lt;span class="nb"&gt;install&lt;/span&gt; @composio/openclaw-plugin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once done, setup your api key, following the steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log in at &lt;a href="https://dashboard.composio.dev/" rel="noopener noreferrer"&gt;**dashboard.composio.dev&lt;/a&gt;.**&lt;/li&gt;
&lt;li&gt;Choose your preferred client (OpenClaw, Claude Code, Cursor, etc.).&lt;/li&gt;
&lt;li&gt;Copy your consumer key (&lt;code&gt;ck_...&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In terminal run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw config &lt;span class="nb"&gt;set &lt;/span&gt;plugins.entries.composio.config.consumerKey &lt;span class="s2"&gt;"ck_your_key_here"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally restart the gateway:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;openclaw gateway restart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;All this does is setup the open claw configuration with consumer key in the Composio MCP.&lt;/p&gt;

&lt;p&gt;Or alternatively, you can directly setup the mcp server, for more granular control.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Using MCP Porter
&lt;/h3&gt;

&lt;p&gt;MCP Porter is OpenClaw way to use mcp-server and comes inbuild. You can activate by going to: OpenClaw Dashboard -&amp;gt; Skills -&amp;gt; Search MCP -&amp;gt; MCP Porter (Install)&lt;/p&gt;

&lt;p&gt;Note: if it doesn't open, restart the OpenClaw server.&lt;/p&gt;

&lt;p&gt;Once you do that:&lt;/p&gt;

&lt;p&gt;→ Go to home folder where OpenClaw is installed: &lt;code&gt;/home/username/.openclaw/workspace/config&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;→ Open the &lt;code&gt;mcporter.json&lt;/code&gt; in any ide and paste the following &amp;amp; save:&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;"mcpServers"&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;"composio"&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;"baseUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"url_from"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"headers"&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;"x-api-key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"api_key"&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;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"imports"&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="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;The &lt;strong&gt;url&lt;/strong&gt; and &lt;strong&gt;api&lt;/strong&gt; key are the one from the pre-require step.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;or if you want a standard input output (stdio) server setup you can use:&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; composio-mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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;"mcpServers"&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;"composio"&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;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"composio-mcp"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&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="s2"&gt;"--api-key"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"api_key"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"transport"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"stdio"&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;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;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx mcporter call &lt;span class="nt"&gt;--stdio&lt;/span&gt; &lt;span class="s2"&gt;"npx @composio/mcp@latest setup https://backend.composio.dev/tool_router/&amp;lt;api-key&amp;gt;/mcp"&lt;/span&gt; &amp;lt;tool_name&amp;gt; &amp;lt;arg1&amp;gt;&lt;span class="o"&gt;=&lt;/span&gt;&amp;lt;value1&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now to make sure agent pick up the composio mcp servers perfectly you need to setup the skills file!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx skills add https://github.com/composiohq/skills &lt;span class="nt"&gt;--skill&lt;/span&gt; composio &lt;span class="nt"&gt;--yes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you are all setup to experience OpenClaw seamlessly.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡Fact: Though you can do all the steps in section through prompt in OpenClaw Dashboard (section 1), but it causes security concerns as as it stores logs that are accessible to other, if they have your agent id!&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;Tools like open-claw seem amazing at first glance but can easily become a nightmare if not handled right - especially around security. &lt;/p&gt;

&lt;p&gt;The moment you hand broad permissions or API keys to an agent; you've opened a door you might forget, but it is even there. It doesn't know what's sensitive, it just acts. &lt;/p&gt;

&lt;p&gt;That’s where tool like &lt;a href="https://composio.dev/" rel="noopener noreferrer"&gt;Composio&lt;/a&gt; sidesteps this quietly by handling scoped access and managed credentials under the hood, so the agent does its job without holding the master keys to everything.&lt;/p&gt;

&lt;p&gt;What other approach you find safeguards your privacy and sensitive data, do share in comments!&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>opensource</category>
      <category>ai</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Top 10 OpenClaw Skills to Take Your Productivity Up a Notch!</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Thu, 05 Mar 2026 12:43:15 +0000</pubDate>
      <link>https://dev.to/composiodev/top-10-openclaw-skills-to-take-your-productivity-up-a-notch-kg</link>
      <guid>https://dev.to/composiodev/top-10-openclaw-skills-to-take-your-productivity-up-a-notch-kg</guid>
      <description>&lt;p&gt;OpenClaw is growing fast and if you've used it for anything beyond general tasks, you've probably noticed the gap. &lt;/p&gt;

&lt;p&gt;It handles most things, but specialized work like research, UI/UX design, writing, or reverse engineering? The output quality just isn't there. &lt;/p&gt;

&lt;p&gt;That's the problem SKILLS solves!&lt;/p&gt;

&lt;p&gt;It's a single file that plugs into OpenClaw and gives it deep, domain-specific context - purpose-built instructions for doing one thing exceptionally well. Better context in, better output out.&lt;/p&gt;

&lt;p&gt;The catch? OpenClaw's own ClawdHub has hundreds of these skills, and roughly 80% are garbage or outright malicious. Finding the good ones takes time. &lt;/p&gt;

&lt;p&gt;Last week I did that work and here's what's actually worth using.&lt;/p&gt;




&lt;h3&gt;
  
  
  TL DR;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;OpenClaw skils are single-file plugins that give OpenClaw deep, domain-specific context to go from generic output to expert-level results.&lt;/li&gt;
&lt;li&gt;80% of ClawHub skills are garbage or malicious, so vet carefully; the ones listed here are already filtered for quality (even though some show malignant, most are vetted by security teams).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Composio&lt;/strong&gt; - One integration that unlocks 860+ external tools (GitHub, Slack, Gmail, etc.) so you can build full AI agents without touching auth pipelines.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reverse Engineering&lt;/strong&gt; - Turns OpenClaw into a network analyst that captures traffic, decodes binary protocols, and spits out clean parsers and docs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Frontend Design&lt;/strong&gt; - Forces OpenClaw past generic purple-gradient output into bold, production-grade UI with real aesthetic intent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-Improving Agent&lt;/strong&gt; - Logs errors, learnings, and preferences into memory so OpenClaw gets smarter and more personalized over time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eleven Labs Agent&lt;/strong&gt; - Gives OpenClaw a real voice and a failsafe: if email or text fails, it literally calls someone instead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;N8N Workflow&lt;/strong&gt; - Chat-driven control over your local N8N instance - trigger complex automations without subscriptions or a dashboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exa Search&lt;/strong&gt; - Replaces generic browsing with a developer-focused index pulling from actual docs, GitHub repos, and coding forums.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vercel&lt;/strong&gt; - Plain English commands that translate directly into Vercel CLI actions - deploy, rollback, debug, no terminal needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI Whisper&lt;/strong&gt; - Runs Whisper locally so you get fast, accurate transcriptions without your audio ever hitting a third-party server.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Home Assistant&lt;/strong&gt; - Natural language control over your entire smart home, fully local, zero cloud dependency.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;How To Install Skills in Openclaw?&lt;/p&gt;

&lt;h2&gt;
  
  
  How To Install Skills in Openclaw?
&lt;/h2&gt;

&lt;p&gt;Before moving forward we need to load skills in openclaw, and here is how to do it in 2 way’s.&lt;/p&gt;

&lt;h3&gt;
  
  
  ClawdHub
&lt;/h3&gt;

&lt;p&gt;Clawdhub is central repository offered by open claw community, to load skills. Follow these steps to get up and running. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://clawhub.ai/" rel="noopener noreferrer"&gt;ClawHub&lt;/a&gt; and head to skills section.&lt;/li&gt;
&lt;li&gt;Select the skills you want by filtering as per needs / directly searching for them and open its page.&lt;/li&gt;
&lt;li&gt;Navigate down and copy the command given after verifying Security Scan says Benign for Openclaw (vvi)&lt;/li&gt;
&lt;li&gt;Head to the terminal where open claw is installed and paste it. For me its docker and its the same skill I will install!
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="n"&gt;installs&lt;/span&gt; &lt;span class="n"&gt;clawhub&lt;/span&gt;
&lt;span class="n"&gt;npx&lt;/span&gt; &lt;span class="n"&gt;clawhub@latest&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt; &lt;span class="n"&gt;sonoscli&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="n"&gt;you&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;github&lt;/span&gt;
&lt;span class="n"&gt;git&lt;/span&gt; &lt;span class="n"&gt;clone&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//github.com/peterskoett/self-improving-agent.git ~/.openclaw/workspace/skills/self-improving-agent&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Caution&lt;/strong&gt;: Never install the calwdhub skills directly with clawdhub directly, without visiting the clawdhub website and verifying security&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You can ensure it is active, by going to calwdbot dashboard and checking skills section!&lt;/p&gt;

&lt;h3&gt;
  
  
  Skills.sh
&lt;/h3&gt;

&lt;p&gt;&lt;a href="http://Skills.sh" rel="noopener noreferrer"&gt;Skills.sh&lt;/a&gt; is a website, recently released by vercel to curate highly vetted skills. Here is how to install skills using it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Head over to &lt;a href="http://skills.sh" rel="noopener noreferrer"&gt;skills.sh&lt;/a&gt; (by vercel) and find the skill needed.&lt;/li&gt;
&lt;li&gt;Open the page and install the same skill using npm: &lt;code&gt;npx skills add &amp;lt;owner/repo&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Let’s go with same skills as above.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;cd&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;openclaw&lt;/span&gt;
&lt;span class="n"&gt;npx&lt;/span&gt; &lt;span class="n"&gt;skills&lt;/span&gt; &lt;span class="k"&gt;add&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//github.com/charon-fan/agent-playbook --skill self-improving-agent&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Select openclaw from the list

&lt;ul&gt;
&lt;li&gt;Press &lt;code&gt;space&lt;/code&gt; to select and &lt;code&gt;enter&lt;/code&gt; to finalize.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;a href="" class="article-body-image-wrapper"&gt;&lt;img alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once done, verify by revisiting the dashboard’s skills section:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="" class="article-body-image-wrapper"&gt;&lt;img alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With this understanding, we are ready to explore all the plugins I found out to be good. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Spoiler: you already installed 1 of them!&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;Top 10 Skills to use with OpenClaw&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Composio
&lt;/h3&gt;

&lt;p&gt;This one personally I use the most and it genuinely delivers. &lt;/p&gt;

&lt;p&gt;It gives OpenClaw access to 860+ external tools through a single integration framework, meaning you can build AI agents that talk to GitHub, Slack, Gmail, and hundreds of other services without writing a single custom authentication pipeline. &lt;/p&gt;

&lt;p&gt;Whether you're building autonomous agents or traditional apps, this skill handles all the heavy lifting.&lt;/p&gt;

&lt;p&gt;To install this skill, &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;in terminal navigate to &lt;code&gt;/home/&amp;lt;username&amp;gt;/.openclaw/skills&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;and run &lt;code&gt;npx skills add composiohq/skills&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;select Openclaw, rest keep default.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once done you will see composio folder under skills section.&lt;/p&gt;

&lt;p&gt;This is also a good example of how open claw keep their skills and what happens under the hood when you use clawdhub to install skills.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Building interactive, chat-based AI agents that securely access external services like Gmail or Slack via isolated MCP sessions.

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Create an agent that monitors my Gmail and summarizes unread emails every morning."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Developing multi-tenant SaaS applications that require programmatic execution of external tools and manual authentication management.

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;prompt: "Set up a direct execution flow for managing GitHub repos across multiple user accounts."&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Setting up event-driven automation workflows that listen for real-time triggers and process verified incoming webhooks.

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Create a workflow that triggers whenever a new Stripe payment is received."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;3. Self-Improving Agent&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Clawdbot already has some self-improvement capability, this skill takes it to the next level.&lt;/p&gt;

&lt;p&gt;It dynamically tracks interactions, logging errors, active learnings, and feature requests into a dedicated memory folder.&lt;/p&gt;

&lt;p&gt;This gives the bot a structured layer of intelligence that makes it more accurate over time, not just responsive.&lt;/p&gt;

&lt;p&gt;Can be dowloaded from clawdhub at &lt;a href="https://clawhub.ai/pskoett/self-improving-agent" rel="noopener noreferrer"&gt;Self-Improving-Agent - ClawHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Continuously logging errors to prevent the bot from repeating past mistakes

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Remember this error and avoid it next time."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Storing user preferences and learnings for a tailored experience over time

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Remember I prefer concise responses"&lt;/em&gt; or &lt;em&gt;"Log this as a learning."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  2. Reverse Engineering
&lt;/h3&gt;

&lt;p&gt;Ever wanted to reverse engineer a tool, app, or web service to understand exactly how it communicates under the hood - this skill is built for that. &lt;/p&gt;

&lt;p&gt;It turns OpenClaw into an elite network analyst, capable of capturing raw traffic, dissecting unknown protocols, and translating binary data into clean documentation and custom parsers. &lt;/p&gt;

&lt;p&gt;Whether it's security research, debugging, or system interoperability, this skill gives you full visibility into any network communication.&lt;/p&gt;

&lt;p&gt;Use with caution &amp;amp; you can install it at: &lt;a href="https://skills.sh/wshobson/agents/protocol-reverse-engineering" rel="noopener noreferrer"&gt;Reverse Engineering&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Capturing and analyzing raw network traffic to uncover vulnerabilities or undocumented features in proprietary communication protocols.

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Capture and analyze traffic from this app and identify any undocumented endpoints."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Developing custom Wireshark dissectors (Lua) and Python parsers to map out complex binary structures and fixed headers.

&lt;ul&gt;
&lt;li&gt;prompt: “&lt;em&gt;Write a Wireshark Lua dissector for this binary protocol sample."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Performing entropy analysis and TLS fingerprinting (JA3/JA3S) to identify encryption methods and extract hidden metadata.

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;prompt: "Run entropy analysis on this packet capture and identify the encryption layer."&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;But use cases are infinite, for e.g my friend reverse engineered entire product to build it better.&lt;/p&gt;




&lt;p&gt;OpenClaw can build frontend apps out of the box, but the output is generic at best - the usual Inter font, purple gradients, and safe layouts.&lt;/p&gt;

&lt;p&gt;If you're a frontend developer or UI/UX designer, this skill is non-negotiable. &lt;/p&gt;

&lt;p&gt;It forces OpenClaw into a master-level design mindset, demanding bold aesthetic direction, intentional typography, and production-grade interfaces before a single line of code is written.&lt;/p&gt;

&lt;p&gt;You can install this skill at: &lt;a href="https://skills.sh/anthropics/skills/frontend-design" rel="noopener noreferrer"&gt;frontend-design by anthropics/skills&lt;/a&gt; (yup its by anthropic!)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rapidly prototyping highly distinctive landing pages that immediately stand out from competitor templates.

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Build me a landing page with a brutalist aesthetic for a SaaS product."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Translating abstract brand vibes into fully functional, production-ready frontend code

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;prompt: "Design a site that feels like an editorial fashion magazine, dark and high contrast."&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Breaking out of cookie-cutter design ruts by forcing unexpected layout choices and non-standard typography pairings

&lt;ul&gt;
&lt;li&gt;prompt:  &lt;em&gt;"Redesign this hero section, avoid any standard layouts or default fonts."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;and more!&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Eleven Labs Agent
&lt;/h3&gt;

&lt;p&gt;If you are into voice-ai and tooling / your job requires ai calling services, this skill is a game changer.&lt;/p&gt;

&lt;p&gt;It integrates directly with the 11Labs CLI, giving OpenClaw an actual voice and bridging the gap between text-based AI operations and real-world audio interactions.&lt;/p&gt;

&lt;p&gt;Most interesting is fail safe mechanism: if clawbot failed to send text message or email fails, the bot automatically pivots to making a real phone call instead.&lt;/p&gt;

&lt;p&gt;You can install the skills from at &lt;a href="https://clawhub.ai/PennyroyalTea/elevenlabs-agents" rel="noopener noreferrer"&gt;ElevenLabs Agents - ClawHub&lt;/a&gt; . Make sure you have your Eleven Lab’s API Key&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Acting as a fallback to physically call people or businesses if text-based emails or messages fail to send

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"If the email fails, call them instead."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Automating voice-based tasks like making reservations or handling customer service inquiries on your behalf.

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Call and book a table for 2 at 7pm"&lt;/em&gt; or &lt;em&gt;"Call support and follow up on my order."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Generating voiced summaries or updates for hands-free productivity

&lt;ul&gt;
&lt;li&gt;prompt:  &lt;em&gt;"Read out my task list for today"&lt;/em&gt; or &lt;em&gt;"Give me a voice update on pending emails.&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  5. N8N Workflow
&lt;/h3&gt;

&lt;p&gt;You've probably used N8N - and if so, you already know that running enterprise-level automations burns cash fast. &lt;/p&gt;

&lt;p&gt;This skill connects OpenClaw directly to your N8N instance, letting you spin up, manage, and trigger complex multi-step workflows using cron jobs &amp;amp; plain chat  &lt;/p&gt;

&lt;p&gt;This means no expensive subscriptions, no manual dashboard, just automation on demand &amp;amp; best part - entire process runs on local version, so data remins private.&lt;/p&gt;

&lt;p&gt;You can install it at: &lt;a href="https://clawhub.ai/KOwl64/n8n-workflow-automation" rel="noopener noreferrer"&gt;n8n workflow automation - ClawHub&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Triggering an automated sequence to create and post LinkedIn updates the moment a new podcast goes live.

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;prompt: "When a new podcast episode drops, draft and post a LinkedIn update automatically."&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Setting up complex, multi-app workflows entirely through conversational commands

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Create a workflow that saves every Gmail attachment to Dropbox and notifies me on Slack."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Automating repetitive data tasks like scraping, formatting, and sending weekly reports

&lt;ul&gt;
&lt;li&gt;prompt:&lt;em&gt;"Every Monday at 9am, pull last week's analytics and email me a summary."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;6. Exa Search&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;OpenClaw supports browsing, but for technical work, general search just doesn't cut it as it surfaces SEO blogs over actual documentation. &lt;/p&gt;

&lt;p&gt;Exa fixes that by connecting OpenClaw directly to a search index built for developers, pulling from GitHub repos, technical docs, and coding forums instead. &lt;/p&gt;

&lt;p&gt;If you write code regularly, this is the skill that cuts hallucinations and gets you accurate answers fast.&lt;/p&gt;

&lt;p&gt;You can install the skill at: &lt;a href="https://clawhub.ai/fardeenxyz/exa" rel="noopener noreferrer"&gt;Exa - ClawHub&lt;/a&gt; &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You require an EXA_API_KEY while setup&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pulling the most up-to-date coding documentation and API references for web development.

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Find the latest React 19 docs on server components."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Searching the web specifically for highly technical programming solutions and developer resources.

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Search Exa for the best open-source alternatives to Stripe's API."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Finding real-world code examples and GitHub repos for a specific implementation.

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Find me a GitHub repo that implements JWT authentication in Node.js."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  7. Vercel
&lt;/h3&gt;

&lt;p&gt;If deploying sites to Vercel is second nature to you, this skill just makes it faster and automated. &lt;/p&gt;

&lt;p&gt;It connects OpenClaw directly to the Vercel CLI, translating plain conversational commands into the exact terminal scripts needed to deploy, manage, and update your projects. &lt;/p&gt;

&lt;p&gt;No manual terminal work required anymore&lt;/p&gt;

&lt;p&gt;You can install this skill at: &lt;a href="https://clawhub.ai/TheSethRose/vercel" rel="noopener noreferrer"&gt;Vercel Platform - ClawHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploying new websites, applications, and web projects using simple natural language prompts.

&lt;ul&gt;
&lt;li&gt;prompt*: "Deploy this project to Vercel."*&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Managing cloud hosting environments and triggering project builds without typing complex terminal commands.

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Trigger a new build for my production environment"&lt;/em&gt; or &lt;em&gt;"Roll back to the last stable deployment."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Checking deployment status and debugging failed builds on the fly

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Why did my last deployment fail?"&lt;/em&gt; or &lt;em&gt;"Show me the build logs for my latest push."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  &lt;strong&gt;8. OpenAI Whisper&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;If you're a developer and content creator, you already know how valuable accurate transcriptions are, and uploading sensitive audio to third-party services isn't always an option. &lt;/p&gt;

&lt;p&gt;This skill runs OpenAI's Whisper model locally on your machine, giving you fast, accurate transcriptions without your audio ever leaving your system.&lt;/p&gt;

&lt;p&gt;This means anyone can turn spoken word into text regularly. It requires an OpenAI API key and relies on a local installation.&lt;/p&gt;

&lt;p&gt;You can install this skill at: &lt;a href="https://clawhub.ai/steipete/openai-whisper" rel="noopener noreferrer"&gt;Openai Whisper - ClawHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Transcribing audio and video files completely offline for maximum privacy

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Transcribe this audio file locally."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Quickly converting meeting recordings or voice notes into highly accurate text documents

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Convert this meeting recording to text"&lt;/em&gt; or &lt;em&gt;"Transcribe my voice note and clean it up."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Generating subtitles or captions for video content without a paid tool

&lt;ul&gt;
&lt;li&gt;prompt: just say &lt;em&gt;"Transcribe this video and format the output as subtitles."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  9. Home Assistant &amp;amp; Extras
&lt;/h3&gt;

&lt;p&gt;Personally, I haven’t used it, but few of my friends say its game changing in home automation.&lt;/p&gt;

&lt;p&gt;It connects OpenClaw directly to a local Home Assistant setup, letting you control your entire home through fluid natural language.&lt;/p&gt;

&lt;p&gt;This means no rigid routines, no cloud dependency, no data leaving your network. &lt;/p&gt;

&lt;p&gt;You can install it at: &lt;a href="https://clawhub.ai/iAhmadZain/home-assistant" rel="noopener noreferrer"&gt;Home Assistant - ClawHub&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Controlling smart lights, locks, and appliances locally via natural language commands

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Turn off all the lights in the living room"&lt;/em&gt; or &lt;em&gt;"Lock the front door."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Creating dynamic, AI-driven home automation routines without complex coding

&lt;ul&gt;
&lt;li&gt;prompt:  &lt;em&gt;"Every night at 10pm, dim the bedroom lights and lock all doors."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Checking and managing the status of all connected devices in one place

&lt;ul&gt;
&lt;li&gt;prompt: &lt;em&gt;"Which devices are currently on?"&lt;/em&gt; or &lt;em&gt;"Show me everything that's active in the house right now."&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Isn’t this one insane? Turning a conversational ai bot into a localized, privacy-first smart home hub.&lt;/p&gt;

&lt;p&gt;This wraps up most of the skills I found useful, some extra includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Model Usage:&lt;/strong&gt; Monitors and reports API token consumption and usage statistics across various AI providers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WhatsApp CLI:&lt;/strong&gt; Allows you to draft, approve, and send WhatsApp messages hands-free using natural language prompts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bird (Twitter/X):&lt;/strong&gt; Interacts with X (formerly Twitter) to search for keywords, check feeds, and pull social data directly into the chat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;YouTube Summarizer:&lt;/strong&gt; Extracts and summarizes YouTube video transcripts to help generate descriptions, headlines, and social copy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GA4 Analysis:&lt;/strong&gt; Connects to Google Analytics 4 to provide automated, natural language summaries of your website's traffic and performance data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GNO:&lt;/strong&gt; Acts as a local document search indexer that uses BM25 vector hybrid search to retrieve AI-generated answers from your personal files.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;OpenClaw skills are &lt;strong&gt;plugins that add tools, knowledge, and workflows&lt;/strong&gt; to enhance the capabilities of the OpenClaw AI agent. Here are some key points about OpenClaw skills:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Installation&lt;/strong&gt;: Skills can be installed using the CLI, by editing files, or through ClawHub. You can browse and install skills with one command.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Types of Skills&lt;/strong&gt;: OpenClaw skills can include tools for automating workflows, interacting with   external services, and performing specialized tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Community Skills&lt;/strong&gt;: There are over 2,868 community-built skills available on ClawHub, organized by category for easier discovery.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security&lt;/strong&gt;: Always review a skill's SKILL.md and scripts before installing, as some skills may have security risks. For more detailed information, you can explore the OpenClaw Skills Directory.&lt;/li&gt;
&lt;li&gt;Alternative: You can use &lt;a href="http://skills.sh" rel="noopener noreferrer"&gt;skills.sh&lt;/a&gt; to find and load all the non-malignant skills, but make sure to check all the files.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, installing all skills separately, calling the right tools, invoking right methods in cli are such a hassle.  &lt;/p&gt;

&lt;p&gt;Composio Skill simples that and provides you access to 860+ services without worrying about tool selection, tool calls and context rot. &lt;/p&gt;

&lt;p&gt;So, install it once and keep using Openclaw as normal with superpowers.&lt;/p&gt;

</description>
      <category>openclaw</category>
      <category>ai</category>
      <category>automation</category>
      <category>mcp</category>
    </item>
    <item>
      <title>10 top Claude Code plugins to use in 2026</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Tue, 17 Feb 2026 10:06:44 +0000</pubDate>
      <link>https://dev.to/composiodev/10-top-claude-code-plugins-to-use-in-2026-4gn6</link>
      <guid>https://dev.to/composiodev/10-top-claude-code-plugins-to-use-in-2026-4gn6</guid>
      <description>&lt;p&gt;If you're building MVPs or production-grade apps with Claude Code, plugin’s is your secret weapon.&lt;/p&gt;

&lt;p&gt;Instead of Claude guessing based on its training data, plugins give it eyes and hands to interact with live documentation, real-time databases, and your entire DevOps stack.&lt;/p&gt;

&lt;p&gt;But with over 1,000 servers in the ecosystem, choosing the right ones is a hassle. Here are the top 10 MCP plugins you can plug into Claude Code to get work done right away.&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;*&lt;em&gt;Awesome Claude Plugins *&lt;/em&gt;(ComposioHQ): Curated plugin registry + tool router that turns Claude into a workflow orchestrator across many services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Claude-Mem&lt;/strong&gt;: Adds long-term memory so Claude can carry context and preferences across sessions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Superpowers&lt;/strong&gt;: Structured lifecycle planning + skills framework for brainstorming, TDD, debugging, and code review.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Local-Review&lt;/strong&gt;: Parallel local diff code reviews (multiple agents) to catch issues before you commit.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plannotator:&lt;/strong&gt; Makes planning mode clearer with structured, annotated plans you can review and share.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ralph Wiggum Plugin&lt;/strong&gt;: Visual testing for apps (notably Swift) by driving the Xcode simulator to check how things look.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Shipyard&lt;/strong&gt;: Superpowers-style lifecycle plus IaC validation and security auditing for more “production” workflows.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Dev-Browser Plugin&lt;/strong&gt;: Lightweight, faster browsing/testing alternative to Playwright-style flows with lower context overhead.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;TypeScript &amp;amp; Rust LSP Plugins&lt;/strong&gt;: Runs real type checks via LSP to surface type/lint errors inside the Claude workflow.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agent-Peer-Review&lt;/strong&gt;: Let's have Claude and Codex critique each other’s work and escalate to web search tools when needed.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Top 10 Plugins for Claude Code
&lt;/h2&gt;

&lt;p&gt;Here are the top plugins that enhance your Claude Code experience as a user.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Awesome Claude Plugins
&lt;/h3&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%2Ftheu15dqkh9drd76n28i.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%2Ftheu15dqkh9drd76n28i.png" alt="compisio plugins" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Awesome Claude Plugins by ComposioHQ is a curated registry and toolkit that extends Claude Code’s native capabilities.&lt;/p&gt;

&lt;p&gt;It provides a central hub for custom slash commands, specialized agents, automated hooks, and MCP (Model Context Protocol) servers.&lt;/p&gt;

&lt;p&gt;By leveraging the Composio Tool Router, it transforms Claude from a code-writer into a workflow orchestrator capable of interacting with hundreds of external services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Clone and run Claude with any connect-apps plugin (for easy setup)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/composio/awesome-claude-plugins.git
cd awesome-claude-plugins
claude --plugin-dir ./connect-apps
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run the setup&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/connect-apps:setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It will ask for an API key. Paste your API key when asked. (Get a free key at platform.composio.dev)&lt;/p&gt;

&lt;p&gt;If you are curious about the directory structure, you can check it out in the official repo.&lt;/p&gt;

&lt;p&gt;In case you are wondering, why should you use the repository for plugins, here are the key features.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supports both Python (FastMCP) and Node/TypeScript (MCP SDK) implementations.&lt;/li&gt;
&lt;li&gt;Provides deep research and planning methodology for agent-centric design.&lt;/li&gt;
&lt;li&gt;Emphasizes building for workflows, not just API endpoints.&lt;/li&gt;
&lt;li&gt;Optimizes for limited context windows.&lt;/li&gt;
&lt;li&gt;Includes actionable error message design patterns.&lt;/li&gt;
&lt;li&gt;Implements systematic tool development with proper validation (Pydantic/Zod schemas).&lt;/li&gt;
&lt;li&gt;Follows the MCP Protocol specification (2025-11-25 version).&lt;/li&gt;
&lt;li&gt;Includes best practices for tool annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint).&lt;/li&gt;
&lt;li&gt;Provides code quality review and refinement guidance.&lt;/li&gt;
&lt;li&gt;Powered by composio tool router&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Case&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating a bridge between Claude and a proprietary or niche API using the latest MCP standards.&lt;/li&gt;
&lt;li&gt;Building projects requiring multi-step actions, such as Read a Jira ticket → Debug code → Open a PR → Notify Slack.&lt;/li&gt;
&lt;li&gt;Managing context for large codebases, where minimising token burn while still providing Claude with powerful external tools is important.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A Few Must Explore’s&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;mcp-builder&lt;/strong&gt;: A comprehensive skill that guides you through designing and implementing high-quality, agent-optimised MCP servers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;connect-apps&lt;/strong&gt;: Instantly links Claude to 500+ SaaS applications (GitHub, Slack, Gmail, Notion) to perform real-world actions directly from the CLI.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ship&lt;/strong&gt;: A robust PR automation system that handles the entire pipeline, from linting and testing to review and production deployment, with one command.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Explore more at: &lt;a href="https://github.com/ComposioHQ/awesome-claude-plugins" rel="noopener noreferrer"&gt;Awesome Claude Plugins for Claude Code | Composio HQ&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Claude Mem
&lt;/h2&gt;

&lt;p&gt;Claude-Mem helps Claude remember context across sessions, reducing the need to re-explain their codebase and preferences each time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Captures and compresses Claude’s actions and injects relevant context into future sessions.&lt;/li&gt;
&lt;li&gt;Uses SQLite and Chroma for hybrid search with vector embeddings.&lt;/li&gt;
&lt;li&gt;Supports privacy by allowing you to exclude specific information from storage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managing large codebases where Claude needs to maintain context across multiple sessions.&lt;/li&gt;
&lt;li&gt;Reducing the time spent on re-explaining project details.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learn more at :  [Calude-Mem | Github (&lt;a href="https://github.com/thedotmack/claude-mem" rel="noopener noreferrer"&gt;https://github.com/thedotmack/claude-mem&lt;/a&gt;)&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Superpowers
&lt;/h2&gt;

&lt;p&gt;Superpowers combine lifecycle management with a skill framework, offering a comprehensive solution for development workflows.&lt;/p&gt;

&lt;p&gt;Infact Claude learns brainstorming, subagent development with code review, debugging, TDD, and skill authoring through Superpowers itself&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrates with Get Stuff Done (GSD) structured lifecycle and phase-based planning.&lt;/li&gt;
&lt;li&gt;Provides composable skills and Test-Driven Development (TDD) discipline.&lt;/li&gt;
&lt;li&gt;Includes Infrastructure as Code (IaC), such as validation, security auditing, and code simplification.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managing complex development projects with detailed planning and execution phases.&lt;/li&gt;
&lt;li&gt;Ensuring code quality and security through automated checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Learn more at: &lt;a href="https://claude.com/plugins/superpowers" rel="noopener noreferrer"&gt;Superpowers – Claude Plugin | Anthropic&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Local-Review
&lt;/h2&gt;

&lt;p&gt;Local-Review allows Claude to perform code reviews on uncommitted local changes, running multiple agents in parallel to provide thorough feedback.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Runs 5 agents in parallel to conduct comprehensive code reviews.&lt;/li&gt;
&lt;li&gt;Rates issues and only flags those scored 80 or above.&lt;/li&gt;
&lt;li&gt;Works on local git diffs, making it useful for immediate feedback.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conducting quick and thorough code reviews before committing changes.&lt;/li&gt;
&lt;li&gt;Identifying potential issues and edge cases in your code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Explore more at : &lt;a href="https://www.claudepluginhub.com/plugins/agent-3-7-local-review-plugins-local-review" rel="noopener noreferrer"&gt;Local Review&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: Since this plugin runs 5 agents in parallel, cost might go up, so prepare to loosen your pocket&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Plannotator
&lt;/h2&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%2Fckd4ddlrtoixzueyczli.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%2Fckd4ddlrtoixzueyczli.png" alt="Planotator Plugin" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Plannotator enhances the planning mode in Claude Code by providing a structured way to manage and annotate plans.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Improves the planning mode with detailed annotations.&lt;/li&gt;
&lt;li&gt;Helps organise and manage complex project plans.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detailed project planning and management.&lt;/li&gt;
&lt;li&gt;Organising complex tasks and sub-tasks.&lt;/li&gt;
&lt;li&gt;A UI for reviewing, sharing, and approve plan, similar to Google’s Antigravity’s artefacts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Explore more at  &lt;a href="https://plannotator.ai/" rel="noopener noreferrer"&gt;Plannotator - Visual Plan Review for Claude Code&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Ralph Wiggum Plugin
&lt;/h2&gt;

&lt;p&gt;This one is quite famous, at least on the name front, as an insider joke in the software development community.&lt;/p&gt;

&lt;p&gt;Essentially, this plugin is designed for visual testing, especially useful for developing Swift apps.&lt;/p&gt;

&lt;p&gt;While standard testing (like the TDD we discussed) checks if the code "thinks" correctly, this plugin checks if the app "looks" correct.&lt;/p&gt;

&lt;p&gt;It uses the Xcode MCP to bridge the gap between Claude and your running simulator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conducts visual tests of the app using an Xcode MCP.&lt;/li&gt;
&lt;li&gt;Ensures that the app meets specific criteria and behaves as expected.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developing applications where visual testing is crucial.&lt;/li&gt;
&lt;li&gt;Automating UI and functionality checks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Explore more at: &lt;a href="https://claude.com/plugins/ralph-loop" rel="noopener noreferrer"&gt;Ralph Loop – Claude Plugin | Anthropic&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: It can be costly to use, as my friend shared , he wiped out all his quota while on 20$ plan in one single loop of Ralph Wingum.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  7. Shipyard
&lt;/h2&gt;

&lt;p&gt;Shipyard combines lifecycle management from GSD with the Superpowers skill framework, adding support for infrastructure-as-code and security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Supports IaC validation for Terraform, Ansible, Docker, Kubernetes, and CloudFormation.&lt;/li&gt;
&lt;li&gt;Includes a dedicated auditor agent for security checks.&lt;/li&gt;
&lt;li&gt;Simplifies code by catching cross-task duplication and AI-generated bloat.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Managing full development lifecycles with a focus on IaC and security.&lt;/li&gt;
&lt;li&gt;Ensuring code quality and security in complex projects.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Explore more at: &lt;a href="https://shipyard.build/agents/claude-code/" rel="noopener noreferrer"&gt;Shipyard | Claude Code&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can think of shipyard as an extension of superpowers but for enterprise&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  8. Dev-Browser Plugin
&lt;/h2&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%2Fp2p10ol8iihugkg95cj8.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%2Fp2p10ol8iihugkg95cj8.png" alt="Dev Browser Plugin" width="800" height="211"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Dev-Browser plugin is a faster alternative to the Playwright MCP, reducing context load per pass.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster than Playwright MCP.&lt;/li&gt;
&lt;li&gt;Reduces context load, improving performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web development for when quick, efficient browsing is needed.&lt;/li&gt;
&lt;li&gt;Reducing the computational load on Claude.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I use it for frontend testing &amp;amp; backend data validation.&lt;/p&gt;

&lt;p&gt;You can explore more at: &lt;a href="https://github.com/SawyerHood/dev-browser" rel="noopener noreferrer"&gt;Dev Browser | Claude&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  9. Typescript &amp;amp; Rust LSP Plugins
&lt;/h2&gt;

&lt;p&gt;The plugins allow Claude to run proper type checks for TypeScript and Rust code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrates with Language Server Protocol (LSP) for type checking.&lt;/li&gt;
&lt;li&gt;Ensures code correctness and reduces errors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use Cases&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developing in Typescript or Rust, where type checking is essential.&lt;/li&gt;
&lt;li&gt;Improving code quality and reducing debugging time.&lt;/li&gt;
&lt;li&gt;My friend uses it to test for linting and type errors.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Explore more at:&lt;a href="https://claude.com/plugins/typescript-lsp" rel="noopener noreferrer"&gt;TypeScript LSP – Claude Plugin | Anthropic&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A must have if developing apps in typescript / rust.&lt;/p&gt;




&lt;h2&gt;
  
  
  10. Agent-Peer-Review
&lt;/h2&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%2Fl1wfw8rnm26ag8xcgxt5.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%2Fl1wfw8rnm26ag8xcgxt5.png" alt="Agent Peer Review Plugin" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This plugin provides peer reviews between Claude and Codex, allowing them to debate disagreements and escalate to external tools if needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Features:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enables direct communication between Claude and Codex for peer reviews.&lt;/p&gt;

&lt;p&gt;Supports escalation to Perplexity/WebSearch for additional context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Cases:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conducting comprehensive code reviews with multiple AI perspectives.&lt;/li&gt;
&lt;li&gt;Reducing the manual effort of copying and pasting code reviews.&lt;/li&gt;
&lt;li&gt;Benchmarking coding models across councils of models (Codex &amp;amp; Claude)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I felt this one was a joke till I tried. But it really gets work done!&lt;/p&gt;

&lt;p&gt;I used it to validate Claude’s work using codex across varied perspectives on a research project code, and it helped me fix a critical bug that Claude missed during code generation.&lt;/p&gt;

&lt;p&gt;Explore more at: &lt;a href="https://github.com/jcputney/agent-peer-review" rel="noopener noreferrer"&gt;Agent Peer Review | Claude&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That concludes it, but it’s no use if you don’t follow these best practices for claude code!&lt;/p&gt;




&lt;h2&gt;
  
  
  Best Practices for Using Claude Code
&lt;/h2&gt;

&lt;p&gt;To get the most out of Claude Code, consider these best practices:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Minimise the Provided Context&lt;/strong&gt;: Keep the context concise to improve performance. Start fresh conversations for new topics and use tools like git diff to minimize the context.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solve Problems Step by Step&lt;/strong&gt;: Break down large problems into smaller, manageable steps. This helps Claude handle complex tasks more effectively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Claude for Non-Coding Tasks&lt;/strong&gt;: Claude is excellent for understanding codebases, brainstorming, and architectural discussions. Use it to prepare thoroughly before jumping into coding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Leverage Git and GitHub CLI&lt;/strong&gt;: Let Claude handle your Git and GitHub CLI tasks, such as committing, branching, pulling, and pushing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate Code Reviews&lt;/strong&gt;: Use plugins like Turingmind Claude Code Reviewer Skill to automate code reviews and catch subtle bugs and missed edge cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Subagents for Complex Tasks:&lt;/strong&gt; For multi-step plans, use subagents to execute different parts of the task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Be Strategic About Token Usage&lt;/strong&gt;: Clear context after every user story and use the /compact command to manage token usage efficiently.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design with Specificity&lt;/strong&gt;: Provide detailed design specifications and use design systems like Shadcn UI to ensure consistent and high-quality output.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use External Tools for UX/UI:&lt;/strong&gt; Combine Claude Code with external design tools like Gemini or Uizard to generate UX/UI designs, then use Claude to implement them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous Learning and Adaptation:&lt;/strong&gt; Stay up to date with the latest Claude Code features and practices. Regularly review and adjust your workflow to optimize performance.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Not all but, following even 1/3 of best practices can significantly improve your experience with Claude Code.&lt;br&gt;
But here is the final takeaway from the blog!&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Claude Code is a powerful tool that can significantly enhance your coding efficiency and quality.&lt;/p&gt;

&lt;p&gt;By integrating the right plugins and following these best practices, you can unlock its full potential and streamline your development workflow.&lt;/p&gt;




&lt;h2&gt;
  
  
  Frequently Asked Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;What are MCP plugins in Claude Code, and why do they matter?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;MCP plugins (servers) let Claude Code interact with real systems like docs, repos, databases, browsers, and DevOps tools, so it can verify things and take actions instead of guessing.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Which plugins should I install first to get quick wins?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Start with a plugin hub/router (Awesome Claude Plugins), then add one for memory (Claude-Mem) and one for quality checks (Local-Review or TS/Rust LSP). After that, add planning/workflow (Superpowers or Shipyard) based on your needs.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Are these plugins safe to use with private code and credentials?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;They can be, but treat them like any tool with access. Prefer least-privilege API keys, limit scopes, avoid storing secrets in prompts, and review what a plugin can read or write before enabling it.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;How do I keep costs and token usage under control?&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Keep context tight (use diffs, targeted files, and /compact), run tools only when needed, and be careful with multi-agent reviewers or visual testing loops since they can multiply usage fast.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>resources</category>
      <category>programming</category>
    </item>
    <item>
      <title>How to Use MCP in OpenAI Code (IDE, CLI, App, Cloud)</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Tue, 10 Feb 2026 08:59:12 +0000</pubDate>
      <link>https://dev.to/composiodev/how-to-use-mcp-in-openai-code-ide-cli-app-cloud-16c0</link>
      <guid>https://dev.to/composiodev/how-to-use-mcp-in-openai-code-ide-cli-app-cloud-16c0</guid>
      <description>&lt;h2&gt;
  
  
  The Rise of Codex
&lt;/h2&gt;

&lt;p&gt;OpenAI's Codex has taken AI coding by storm, powering IDE, CLI, and cloud agents that write out code, fix bugs, and handle PRs at lightning speed. &lt;/p&gt;

&lt;p&gt;Developers everywhere are buzzing about its game-changing potential for faster builds. Recently saw an X tweet claiming they will not go with Claude's code because Codex is better at planning first.&lt;/p&gt;

&lt;p&gt;But here's the catch with MCP integrations: Codex shines when pulling real-time context from external tools, yet wiring up each MCP server for GitHub, docs, or databases one by one is a tedious config nightmare that kills momentum.&lt;/p&gt;

&lt;p&gt;What if you could plug in one MCP server that instantly unlocks 500+ apps, auto-selecting the perfect tools and methods for any task?&lt;/p&gt;

&lt;p&gt;Enter Rube, the universal MCP hub. In this short blog, let's see how you can use it to supercharge your OpenAI Codex workflow across IDE, CLI, and the cloud.&lt;/p&gt;




&lt;h2&gt;
  
  
  How to set up MCP for Codex
&lt;/h2&gt;

&lt;p&gt;The benefit of Codex is that it can run in all 3 modes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GUI Mode&lt;/strong&gt;: You can uninstall the Codex extension in VS Code, Cursor, or Windsurf. It reads your workspace, edits code, and runs tasks right in your favourite IDE.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CLI Mode&lt;/strong&gt;: Terminal fans can install Codex CLI via &lt;code&gt;npm install -g @openai/codex&lt;/code&gt;, then run &lt;code&gt;codex&lt;/code&gt; In their project for local agentic coding.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud Mode&lt;/strong&gt;: Power users can delegate heavy tasks to Codex Cloud from the IDE or GitHub (&lt;a class="mentioned-user" href="https://dev.to/codex"&gt;@codex&lt;/a&gt; tags), freeing them to focus while it handles builds remotely. This is a unique edge over rivals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Codex App&lt;/strong&gt;: The new Codex app. A very beautiful UI that's very intuitive to work with.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But to use rube, all requires a bit of setup, here is how to do it for all modes!&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Set up MCP in Codex GUI Mode
&lt;/h3&gt;

&lt;p&gt;I thought connecting remote MCP servers to the Codex extension was easy, but it's a major &lt;a href="https://github.com/openai/codex/issues/6465" rel="noopener noreferrer"&gt;issue&lt;/a&gt;, an open one right now on GitHub.&lt;br&gt;
So, here's the clean workaround I found to use MCP with extension:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to &lt;a href="https://rube.app/" rel="noopener noreferrer"&gt;Rube&lt;/a&gt;, sign up/log in, or whatever MCP servers you want to use.&lt;/li&gt;
&lt;li&gt;Head to &lt;a href="https://rube.app/chat" rel="noopener noreferrer"&gt;Rube Chat&lt;/a&gt; → Use Rube → MCP URL → Generate Token. (You can use any other MCP URL)&lt;/li&gt;
&lt;/ul&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%2Fhesje2i251yy9edneweb.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%2Fhesje2i251yy9edneweb.png" alt="Rube MCP"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Copy the token&lt;/li&gt;
&lt;li&gt;Install the &lt;a href="https://marketplace.visualstudio.com/items?itemName=OpenAI.chatgpt" rel="noopener noreferrer"&gt;Codex extension&lt;/a&gt; for VS Code and log in.&lt;/li&gt;
&lt;li&gt;Then: ⚙️ → MCP Settings → + Add servers → &lt;strong&gt;Streamable&lt;/strong&gt; &lt;strong&gt;HTTP&lt;/strong&gt;:&lt;/li&gt;
&lt;li&gt;Put in the following details:

&lt;ul&gt;
&lt;li&gt;Name: rube&lt;/li&gt;
&lt;li&gt;URL: &lt;a href="https://rube.app/mcp" rel="noopener noreferrer"&gt;https://rube.app/mcp&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Headers:

&lt;ul&gt;
&lt;li&gt;Key: Authorisation&lt;/li&gt;
&lt;li&gt;Value: Bearer &lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Save → Refresh → Authenticate → Done!&lt;/li&gt;
&lt;/ul&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%2Fyr49h27k1wmfjmn72nss.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%2Fyr49h27k1wmfjmn72nss.png" alt="MCP Dashbaoard"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To verify if mcp server is enabled or not, paste the following in the prompt box:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Do you have access to [mcp-server]? Tell me all the task it can perform.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If it fetches the result with all tasks it can do or mcp details, you are all set.&lt;/p&gt;

&lt;p&gt;You can check out the &lt;a href="https://gist.github.com/DevloperHS/0bd80665579d80fccac163192c5b6448#file-config-toml" rel="noopener noreferrer"&gt;config.toml&lt;/a&gt; file for same, by going to ⚙️ → MCP Settings → Open config.toml file.&lt;/p&gt;

&lt;p&gt;Now let’s set up the same for CLI.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Set up MCP in Codex CLI Mode
&lt;/h3&gt;

&lt;p&gt;Terminal lovers, in the codex, we have 2 ways to setup mcp in the codex CLI:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Config file - &lt;code&gt;config.toml&lt;/code&gt; (manual, explicit)&lt;/li&gt;
&lt;li&gt;CLI commands (faster, recommended)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, I find the &lt;strong&gt;config file&lt;/strong&gt; offers full control in a single file and feels native.&lt;/p&gt;

&lt;p&gt;Here is how to use the config file approach:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the codex CLI using: &lt;code&gt;npm i -g @openai/codex&lt;/code&gt;  (Make sure you have &lt;code&gt;npm&lt;/code&gt; install)&lt;/li&gt;
&lt;li&gt;Initialise a project root directory. I used &lt;code&gt;codex-test&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Create a folder named &lt;code&gt;codex&lt;/code&gt; using &lt;code&gt;mkdir&lt;/code&gt; .&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Inside it creates a new file called &lt;code&gt;config.toml&lt;/code&gt; and paste the following text from below and save it!&lt;br&gt;
&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[projects."/home/devloper_hs/codex-tests"]
trust_level = "untrusted"

[mcp_servers.rube]
enabled = true
url = "https://rube.app/mcp"

[mcp_servers.rube.http_headers]
Authorization = "Bearer &amp;lt;auth-token&amp;gt;"
&lt;/code&gt;&lt;/pre&gt;

&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Notes&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace the project path with your actual absolute path&lt;/li&gt;
&lt;li&gt;Replace &lt;code&gt;&amp;lt;auth-token&amp;gt;&lt;/code&gt; with the token you already generated earlier&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;trust_level = "untrusted"&lt;/code&gt; is the safe default&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But those tied to terminal commands you can use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;codex&lt;/span&gt; &lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="n"&gt;login&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;for streamable-http based mcp servers*. &lt;strong&gt;Make sure to authenticate!&lt;/strong&gt;*&lt;/p&gt;

&lt;p&gt;or stdio  based mcp servers&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;codex&lt;/span&gt; &lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="k"&gt;add&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;--&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt; &lt;span class="n"&gt;VAR1&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;VALUE1&lt;/span&gt; &lt;span class="p"&gt;--&lt;/span&gt;&lt;span class="n"&gt;env&lt;/span&gt; &lt;span class="n"&gt;VAR2&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="n"&gt;VALUE2&lt;/span&gt; &lt;span class="p"&gt;--&lt;/span&gt; &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;stdio&lt;/span&gt; &lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;command&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight csharp"&gt;&lt;code&gt;&lt;span class="n"&gt;codex&lt;/span&gt; &lt;span class="n"&gt;mcp&lt;/span&gt; &lt;span class="k"&gt;add&lt;/span&gt; &lt;span class="n"&gt;context7&lt;/span&gt; &lt;span class="p"&gt;--&lt;/span&gt; &lt;span class="n"&gt;npx&lt;/span&gt; &lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="n"&gt;@upstash&lt;/span&gt;&lt;span class="p"&gt;/&lt;/span&gt;&lt;span class="n"&gt;context7&lt;/span&gt;&lt;span class="p"&gt;-&lt;/span&gt;&lt;span class="n"&gt;mcp&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next head to the root of the file and run &lt;code&gt;codex&lt;/code&gt;, login and run &lt;code&gt;/mcp&lt;/code&gt;&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%2Fhr506byozmw58xjzt2ib.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%2Fhr506byozmw58xjzt2ib.png" alt="/mcp results"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To ensure it uses the MCP server, you can use the following prompt validation flow:&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%2Flzwo07m1rzkq3i7cmpls.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%2Flzwo07m1rzkq3i7cmpls.png" alt="MCP Connected"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I liked the fact that instead of giving me rouge output, its actually gave me steps to validate. Btw I already validated the gmail earlier.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now is the time to set up MCP for the codex using cloud mode.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Set up MCP in Codex Cloud Mode
&lt;/h3&gt;

&lt;p&gt;Codex allows delegating tasks to a cloud instance, letting developers focus on other tasks.&lt;/p&gt;

&lt;p&gt;Sadly, this has been long planned but not shipped. The blockers being: secure tool proxying, credential forwarding, deterministic replays and more.&lt;/p&gt;

&lt;p&gt;A smart approach is to use the MCP process locally, then delegate responses and the rest of the work to the cloud.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Set up MCP in the Codex App
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Click on the Settings gear icon on the bottom left.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Go to MCP Servers. You’ll see some servers that you can authenticate and use.&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%2Frbcr96mtswofh0w0ov4k.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%2Frbcr96mtswofh0w0ov4k.png" alt="Codex App MCP Dashboard"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Or, add server&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Choose STDIO or Streamable HTTP&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Add your MCP server&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%2F9qd0wcr5r333kysxhn67.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%2F9qd0wcr5r333kysxhn67.png" alt="MCP Server Connected"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And you’re done.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So, with this, we are all set to look at a few use cases of Codex!&lt;/p&gt;




&lt;h2&gt;
  
  
  Use Cases of Codex + MCP
&lt;/h2&gt;

&lt;p&gt;Codex is mainly meant for coding, but with &lt;a href="https://www.notion.so/25df261a6dfe804791b6fe4a3709d774?pvs=21" rel="noopener noreferrer"&gt;Rube MCP&lt;/a&gt; it can handle a variety of tasks. Here are 3 use cases I like to use as a developer.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Organizing Old Project Commits into an Existing Sheet for Refresher
&lt;/h3&gt;

&lt;p&gt;Integrations: &lt;a href="https://composio.dev/toolkits/googlesheet" rel="noopener noreferrer"&gt;Google Sheet&lt;/a&gt; + &lt;a href="https://composio.dev/toolkits/gitlab" rel="noopener noreferrer"&gt;GitLab&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a new googlesheet and add last 10 code activity summary (PRs, commits, stale branches) from my [project] GitHub and local repository. Also give me the sheet link at the last.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&amp;amp; here is the output:&lt;/p&gt;

&lt;p&gt;[pr_agent.mp4]

  &lt;iframe src="https://www.youtube.com/embed/sVDdn5n2waU"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;This gives me a rough idea of where I left off and start from there.  No more mundane checks.&lt;/p&gt;

&lt;p&gt;But the use cases don’t stop here.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Creating Changelogs / Project Report on the fly
&lt;/h3&gt;

&lt;p&gt;Integrations used: &lt;a href="https://composio.dev/toolkits/github" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;, &lt;a href="https://composio.dev/toolkits/googledoc" rel="noopener noreferrer"&gt;Google Doc&lt;/a&gt;s&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a new Google Doc and generate a clean changelog report for my [project] GitHub repository using the all merged commits in anice formatted way and give me doc link.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&amp;amp; here is the output&lt;/p&gt;

&lt;p&gt;[commit_agent.mp4]

  &lt;iframe src="https://www.youtube.com/embed/vD7Tz4nMcOQ"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;This allows me to turn my project changelogs into a well-formatted Google Doc and send them the pdf / Doc. They can use it to verify the progress, ask for further clarification or suggest some changes&lt;/p&gt;

&lt;p&gt;By far, I have shared productivity stuff; it's time for an actual development use case!&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Extracting Design Tokens from Figma File
&lt;/h3&gt;

&lt;p&gt;Integrations used: &lt;a href="https://composio.dev/toolkits/figma" rel="noopener noreferrer"&gt;Figma&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This one has been game changer for me.&lt;/p&gt;

&lt;p&gt;To be frank, I am not good with frontend, so I take inspiration form figma designs. However, manually converting the design to code was a headache.&lt;/p&gt;

&lt;p&gt;But now I fire up Codex and ask it to extract design tokens I can use to replicate the frontend in a similar style.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;Analyze the Figma design file at https://www.figma.com/design/ZoE3NGZObwwNBr9Iyv8X9G/Shopping-Website -- Community -? node-id=2-
tokens), and generate a markdown file named design.md at root of project containing a professional design system reference.
Include token definitions, usage guidelines, naming conventions, and example mappings suitable for engineers to directly
implement in code.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here’s the output&lt;/p&gt;

&lt;p&gt;[design_token_extraction_agent.mp4] 

  &lt;iframe src="https://www.youtube.com/embed/hVX5x4an8b0"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;Ofc, I make a few changes here and there before implementing, but this now codex + rube combo makes life so easier.&lt;/p&gt;

&lt;p&gt;And here is a bonus one for content creators!&lt;/p&gt;

&lt;h3&gt;
  
  
  Turning Codex into your Content Creator Devlogs in Medium Blogs Draft
&lt;/h3&gt;

&lt;p&gt;Integrations used: &lt;a href="https://composio.dev/toolkits/figma" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;a href="https://composio.dev/toolkits/googledocs" rel="noopener noreferrer"&gt;Google Docs&lt;/a&gt;, &lt;a href="https://composio.dev/toolkits/notion" rel="noopener noreferrer"&gt;Notion&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Many developers love writing devlogs (summaries of what they did) while building a product. But with Codex + mcp, you can analyse each dev log on a day-by-day basis and create a blog that you can then share with the world. Similar to how big companies. &lt;/p&gt;

&lt;p&gt;Here is the prompt I used:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are tasked with creating an SEO-optimized blog post from development logs for Medium publication.

**Requirements:**
1. Read the @devlog file content based on chronological order (earliest to latest based on days)
2. Transform technical devlogs into a narrative-driven blog post with personal storytelling
3. Use Rube MCP's googledocs tool to create and format the document
4. Follow this structure:
   - Engaging title with primary keyword
   - Compelling hook/introduction
   - Main body with 3-5 naturally flowing sections
   - Personal insights and lessons learned
   - Conclusion with takeaways
   - Call-to-action

**Writing Style:**
- First-person perspective ("I discovered...", "My journey with...")
- Story-driven narrative that connects technical milestones
- Natural transitions between sections (avoid forced segmentation)
- Balance technical detail with accessibility
- Include challenges, breakthroughs, and reflections

**SEO Optimization:**
- Include relevant keywords naturally in headers and content
- Use H2/H3 headings for structure
- Add meta description (150-160 characters)
- Include 3-5 tags for Medium
- Optimize readability (short paragraphs, varied sentence length)

**Formatting in Google Docs:**
- Bold for emphasis and subheadings
- Italics for technical terms or emphasis
- Bullet points for key takeaways
- Code blocks where appropriate
- Proper spacing between sections

Execute the task by:
1. Analyzing devlog files chronologically
2. Creating the narrative structure
3. Applying proper formatting
4. Writing the blog post with Rube MCP googledocs tool

Output the Google Docs URL when complete.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And here is the output it created: &lt;/p&gt;

&lt;p&gt;[content_creator_agent.mp4] 

  &lt;iframe src="https://www.youtube.com/embed/qutSvCamXSk"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;By default, Codex doesn’t have access to Google Docs, but MCP can help with that. So, we let Codex handle the generation process, and rube handled the Google Docs. &lt;/p&gt;

&lt;p&gt;In short, this process allows anyone to turn their weekly builds into a full-fledged blogpost or content worth sharing.&lt;/p&gt;

&lt;p&gt;I hope you got an idea of what’s all possible.&lt;/p&gt;

&lt;p&gt;Now let’s look at the final lesson!&lt;/p&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Even with vibe coding pushing software development forward, most people still treat Codex/MCP like a magic box. That’s the actual problem.&lt;/p&gt;

&lt;p&gt;These tools don’t work magically. They need &lt;strong&gt;clear, structured prompts&lt;/strong&gt; to give good output. Most people don’t have that skill yet, so results fall apart.&lt;/p&gt;

&lt;p&gt;That’s where tools like Rube help - by enforcing structure and combining prompts with real tool support, instead of guesswork.&lt;/p&gt;

&lt;p&gt;Going forward, this becomes the new normal. Using these tools well won’t be optional.&lt;/p&gt;

&lt;p&gt;So, don’t waste time. Go to &lt;a href="http://rube.app" rel="noopener noreferrer"&gt;&lt;strong&gt;rube.app&lt;/strong&gt;&lt;/a&gt;, connect it with Codex, and start building or automating your work.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>openai</category>
      <category>code</category>
      <category>mcp</category>
    </item>
    <item>
      <title>How to use Fix MCP issue in LangSmith Agent Builder to Build Specialized Agents</title>
      <dc:creator>Developer Harsh</dc:creator>
      <pubDate>Tue, 20 Jan 2026 10:19:43 +0000</pubDate>
      <link>https://dev.to/composiodev/how-to-use-fix-mcp-issue-in-langsmith-agent-builder-to-build-specialised-agents-2ggj</link>
      <guid>https://dev.to/composiodev/how-to-use-fix-mcp-issue-in-langsmith-agent-builder-to-build-specialised-agents-2ggj</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;How to leverage the Model Context Protocol to give your LangChain agents production-grade tool access without manually piping toools&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;LangChain recently introduced &lt;a href="https://smith.langchain.com/" rel="noopener noreferrer"&gt;LangSmith Agent Builder&lt;/a&gt;, a no-code tool to build agents with natural languages and it's making quite the buzz.&lt;/p&gt;

&lt;p&gt;Instead of relying on the user to set up nodes and edges, it allows chat-based interactions, where the user just needs to define the goal, and the system generates the prompt, connects tools, and sets up triggers automatically.&lt;/p&gt;

&lt;p&gt;It built on top of &lt;a href="https://docs.langchain.com/oss/python/deepagents/overview" rel="noopener noreferrer"&gt;LangChain’s deep agent’s&lt;/a&gt; framework and supports planning, persistent memory, and multi-step tasks for complex workflow.&lt;/p&gt;

&lt;p&gt;However, when it comes to tool’s I felt it pretty limited, even connecting mcp was not straightforward, I had to struggle a bit to use remote MCPs.&lt;/p&gt;

&lt;p&gt;So, I did a manual digging and found the issues to both problems, and this blog covers the fix along with few use cases.&lt;/p&gt;

&lt;p&gt;Let’s get started!&lt;/p&gt;




&lt;h3&gt;
  
  
  TL; DR
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;LangSmith&lt;/strong&gt; Agent Builder lets you build AI agents through chat instead of wrestling with nodes and edges, but the MCP connection is secretly broken.&lt;/li&gt;
&lt;li&gt;Rube MCP unlocks 900+ tools instantly-Gmail, Calendar, LinkedIn, Exa-without auth headaches or tool selection chaos once you apply the manual fix.&lt;/li&gt;
&lt;li&gt;Email triage becomes autopilot when agents fetch unread Gmail, categorize by urgency, and send consolidated summaries without you lifting a finger.&lt;/li&gt;
&lt;li&gt;Calendar briefings turn intelligent when agents pull today's schedule, research external contacts via LinkedIn, and email you a personalized day-ahead report.&lt;/li&gt;
&lt;li&gt;LinkedIn candidate sourcing gets surgical precision as agents calibrate with 5 samples, refine criteria iteratively, then deliver 30 qualified profiles matching your exact requirements.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Set Up MCP Server in LangSmith Agent Builder
&lt;/h2&gt;

&lt;p&gt;For demonstration, we will go with hosted &lt;a href="https://rube.app/" rel="noopener noreferrer"&gt;Rube MCP&lt;/a&gt; server as it allows me to access 900+ tools without worrying about auth, tool selection, query management and tool calling orchestration. &lt;/p&gt;

&lt;p&gt;Here is what to do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Head over to &lt;a href="https://rube.app/chat" rel="noopener noreferrer"&gt;Rube&lt;/a&gt; &amp;amp; Login / Create Account&lt;/li&gt;
&lt;li&gt;In left side panel select Use Rube → MCP URL → Copy it!&lt;/li&gt;
&lt;li&gt;Now head to LangSmith agent builder and Login / Create Account (important that you select no-code experience)&lt;/li&gt;
&lt;li&gt;Within LangSmith Agent Builder, click ⚙️ Settings → MCP Servers → Add MCP Servers&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;In the new modal put&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;name: rube,&lt;/li&gt;
&lt;li&gt;URL: &lt;a href="https://mcp.notion.com/mcp" rel="noopener noreferrer"&gt;https://mcp.notion.com/mcp&lt;/a&gt;,&lt;/li&gt;
&lt;li&gt;Select OAuth 2.1 &amp;amp; hit save.&lt;/li&gt;
&lt;/ul&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%2Fm26h6wvoqd1z8qrg4498.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%2Fm26h6wvoqd1z8qrg4498.png" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;After few seconds, a pop up will appear asking to verify, hit verify and you need to re-login to rube / the tool.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;However, it’s not over yet, you can’t use the tool yet!&lt;/p&gt;

&lt;p&gt;If you go now to agent builder workspace, select &lt;em&gt;Create manually instead,&lt;/em&gt; you will only see default tools (probably a bug), so to fix it, you need to click on MCP → fill in same details and revalidate. &lt;/p&gt;

&lt;p&gt;After few seconds you will see tools listed under the mcp server name you added, in our case it’s RUBE. &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%2Fikg5jcnnyqisfx74vbrv.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%2Fikg5jcnnyqisfx74vbrv.png" alt="Rube MCP Server Showing Tools"&gt;&lt;/a&gt;&lt;br&gt;
Rube MCP Server Showing Tools&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: Though I used rube mcp server for demo, you can use any other using same technique, till they don’t fix the issue!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now let’s see how mcp server work together with LangSmith Agent Builder to handle daily odd jobs.&lt;/p&gt;


&lt;h2&gt;
  
  
  How to Use MCP server with LangSmith Agent Builder
&lt;/h2&gt;

&lt;p&gt;The process at Agent Builder is slightly different than rest of the tool you might have used!&lt;/p&gt;

&lt;p&gt;It actually a single &lt;a href="http://agent.md" rel="noopener noreferrer"&gt;agent.md&lt;/a&gt; file behind the scenes, with addition of folders like tools and skills as needed. &lt;/p&gt;

&lt;p&gt;When you create agent, these file changes in real time based on instructions and can later be reviewed.&lt;/p&gt;

&lt;p&gt;However, the above complexity is hidden behind a chat interface that allow user to prompt what they want to build, and the system take care of the rest. &lt;/p&gt;

&lt;p&gt;So, let’s use it for ease of understanding, by building 3 agents (easy, medium, complex).&lt;/p&gt;


&lt;h3&gt;
  
  
  1. Email Triage Agent
&lt;/h3&gt;

&lt;p&gt;The 1st agent will be a simple one, use the agent to fetch all the emails and triage them into Important, General &amp;amp; Rubbish.&lt;/p&gt;

&lt;p&gt;Put in the following prompt to in the chat window &amp;amp; hit enter.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build a agent that uses Rube MCP to fetch only unread emails from Gmail. For each email, analyze the sender, subject, and content, then triage into exactly three labels: Important, General, Ignore based on urgency, relevance, and action required. After processing all unread emails, return a single consolidated summary with bullet points grouped by label, including sender, subject, and a one-line intent per email. Do not modify, reply, or archive emails. Output the summary only after the task fully completes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the agent builder will ask you few clarifying questions:&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%2Fxo3g6qofprf78vme9vui.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%2Fxo3g6qofprf78vme9vui.png" alt="image.png"&gt;&lt;/a&gt;&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%2F1el598s54oncktyc4kwf.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%2F1el598s54oncktyc4kwf.png" alt="image.png"&gt;&lt;/a&gt;&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%2Fz7pz2wl9vwg78i4dxu1y.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%2Fz7pz2wl9vwg78i4dxu1y.png" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you answer these, like I have done, it will combine metadata, toolbox, instructions and generate an agent overview. &lt;/p&gt;

&lt;p&gt;Hit create and your agent is created just like that!&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%2Ffykpz1adxer3lezk5tyk.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%2Ffykpz1adxer3lezk5tyk.png" alt="image.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To test the agent, in the left chat window enter:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Triage my unread Gmail emails using and email me the summary
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result:&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/IcwhnsgY9dg"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;As can be seen, it calls the gmail tool via rube mcp we added and did the task for us!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: To keep things simple, I have kept the text in markdown (apparently no rendering support in Gmail). Feel free to optimize it further.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Next up let’s spin up an agent that fetches the calendar and other tools, generates a daily briefer and send it to gmail. &lt;/p&gt;

&lt;p&gt;Enter the following prompt in the chat window:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are a daily calendar assistant. Each morning, get today’s date (dd-mm-yyyy), fetch all events for the day, sort them by time and importance, and identify busy periods, gaps, and back-to-back meetings. Briefly research external meetings if needed using tavily_linkedin_search accessed via rube mcp. Send a concise email summary of the day via Gmail.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Ensure you add the TAVILY_API_KEY &amp;amp; GEMINI_API_KEY by selecting ⚙️ at top as well, for it work fine.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now to test:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;send me 21/01/2016 briefing please
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Results:&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/sQJd_aGHYsI"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;As can be seen, it calls the rube calendar &amp;amp; Gmail tool via rube mcp we added and sent me a email. It seems I have a scheduled travel, so it wrote a customized message for me. (ignore markdowns)&lt;/p&gt;




&lt;h3&gt;
  
  
  3. LinkedIn Candidate Sourcing Agent
&lt;/h3&gt;

&lt;p&gt;As for last agent, let’s make an agent that can filter out / source candidate from LinkedIn based on provided criteria. &lt;/p&gt;

&lt;p&gt;We will use rube mcp to call exa-tool and pass in the inputs and let it handle the rest. &lt;/p&gt;

&lt;p&gt;Paste the following prompt in chat window:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;You are an expert LinkedIn candidate sourcing agent. When a user requests candidates, first gather role requirements (skills, seniority, location, constraints) and ask clarifying questions if needed. Begin with a calibration search of exactly 5 candidates using the Exa search protocol via Rube MCP, returning real LinkedIn profiles only (name, role, company, qualifications, LinkedIn URL). 

Never fabricate data. Ask for feedback and refine criteria iteratively until the user confirms alignment. Only after explicit confirmation, run a full-scale Exa search via Rube MCP (default 30 candidates), list candidates in chat. Exclude candidates already at the hiring company. Clearly state limitations if results are sparse. Prioritize precision, transparency, and iteration over volume.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Ensure you add EXA_API_KEY and GEMINI_API_KEY in ⚙️ at top. Also select Gemini 3.0 Model from Model Selector&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Let’s test it out:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Source LinkedIn candidates for a Senior Backend Engineer. Focus on Python, Django, AWS, 5–8 years' experience, based in India.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Results:&lt;/p&gt;

&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/1aq6kXdRBc8"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;Amazing it called the exa tool via rube mcp, we added earlier and showed potential candidate in chat based on criteria's.&lt;/p&gt;

&lt;p&gt;This is just a glimpse of what is automations are possible with LangSmith Agent Builder &amp;amp; and rube mcp.  Feel free to expand these base examples as per your liking and get rid of those boring mundane task.&lt;/p&gt;

&lt;p&gt;Time to look at the final take!&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;LangSmith Agent Builder paired with Rube MCP turns complex agent workflows into effortless no-code magic, handling everything from email triage to candidate sourcing.&lt;/p&gt;

&lt;p&gt;Though the toolset starts limited, a quick MCP server like rube unlocks 900+ tools, letting you automate daily mundane task with chat-based prompts.&lt;/p&gt;

&lt;p&gt;So, connect Rube to LangSmith, drop in a goal like "build me a reseach agent…” add API keys, connect to tools/ mcp’s and watch it build, run, and deliver - while you reclaim your time for high-impact work.&lt;/p&gt;

&lt;p&gt;Happy Automating.&lt;/p&gt;




&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Q1: How do I fix LangSmith Agent Builder not showing MCP tools after connection?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: Click "Create manually" in Agent Builder workspace, select MCP, re-enter server details and revalidate -tools will appear under your MCP server name after verification.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q2: What is Rube MCP and why use it with LangSmith Agent Builder?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: Rube MCP is a hosted server providing 900+ pre-authenticated tools (Gmail, Calendar, LinkedIn, Exa) that integrate with LangSmith through OAuth 2.1 without manual auth configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q3: Can LangSmith Agent Builder create agents without coding experience?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: Yes, LangSmith uses chat-based prompts to auto-generate system prompts, connect tools, and build agents—no node setup required, built on LangChain's Deep Agents framework.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Q4: What agents can I build with LangSmith and Rube MCP integration?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A: You can build email triage agents, calendar briefing bots, LinkedIn candidate sourcing tools, and any automation combining 900+ tools through natural language instructions.&lt;/p&gt;

</description>
      <category>langchain</category>
      <category>automation</category>
      <category>python</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
