<?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: Penumbra Ghost</title>
    <description>The latest articles on DEV Community by Penumbra Ghost (@penumbra_ghost).</description>
    <link>https://dev.to/penumbra_ghost</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%2F3961547%2F135b1424-3d10-4d7d-bad0-bf4cd55ea3f4.png</url>
      <title>DEV Community: Penumbra Ghost</title>
      <link>https://dev.to/penumbra_ghost</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/penumbra_ghost"/>
    <language>en</language>
    <item>
      <title>I built an n8n MCP Server so Claude can list, run, and monitor my workflows in plain English</title>
      <dc:creator>Penumbra Ghost</dc:creator>
      <pubDate>Sun, 31 May 2026 18:35:47 +0000</pubDate>
      <link>https://dev.to/penumbra_ghost/i-built-an-n8n-mcp-server-so-claude-can-list-run-and-monitor-my-workflows-in-plain-english-3g1h</link>
      <guid>https://dev.to/penumbra_ghost/i-built-an-n8n-mcp-server-so-claude-can-list-run-and-monitor-my-workflows-in-plain-english-3g1h</guid>
      <description>&lt;p&gt;I got tired of opening the n8n dashboard every time I needed to check on a workflow.&lt;/p&gt;

&lt;p&gt;You know the drill: open browser → navigate to executions → find the right workflow → check status → close. Five clicks for something that should be instant.&lt;/p&gt;

&lt;p&gt;So I built a 9-node n8n workflow that exposes my entire n8n instance to Claude Desktop via the &lt;strong&gt;Model Context Protocol (MCP)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now I just type:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Did my backup automation run successfully last night?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And Claude calls my real n8n API and responds with the execution status. No browser. No clicking.&lt;/p&gt;




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

&lt;p&gt;MCP (Model Context Protocol) is an open standard from Anthropic that lets AI assistants connect to external tools and data sources. Instead of just answering questions from training data, Claude can call real APIs, read live data, and take actions.&lt;/p&gt;

&lt;p&gt;n8n already has an &lt;strong&gt;MCP Server Trigger&lt;/strong&gt; node (available in 1.70+). I used it to expose 4 tools to Claude:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;list_workflows&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Returns all active workflows with IDs and names&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;run_workflow&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Triggers any workflow by ID&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_executions&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Pulls recent execution history with status&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;search_workflows&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Keyword filter across all workflow names&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




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

&lt;p&gt;The architecture is simple:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Claude Desktop → mcp-remote → n8n MCP Server Trigger → Code nodes → n8n REST API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each of the 4 tools is a &lt;strong&gt;Code node&lt;/strong&gt; that calls the n8n REST API internally using &lt;code&gt;X-N8N-API-KEY&lt;/code&gt; authentication.&lt;/p&gt;

&lt;p&gt;The workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;MCP Server Trigger&lt;/strong&gt; — SSE endpoint that Claude connects to&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;list_workflows&lt;/strong&gt; — &lt;code&gt;GET /api/v1/workflows?active=true&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;run_workflow&lt;/strong&gt; — &lt;code&gt;POST /api/v1/workflows/{id}/run&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;get_executions&lt;/strong&gt; — &lt;code&gt;GET /api/v1/executions?workflowId={id}&amp;amp;limit=N&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;search_workflows&lt;/strong&gt; — keyword filter on workflow names&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Credentials are stored in n8n Variables (&lt;code&gt;$vars.N8N_BASE_URL&lt;/code&gt; and &lt;code&gt;$vars.N8N_API_KEY&lt;/code&gt;) — never hardcoded.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Claude Desktop config
&lt;/h2&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;"n8n"&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;"npx"&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;"mcp-remote"&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://your-n8n-instance.com/mcp/your-webhook-id/sse"&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;Restart Claude Desktop. Claude now has access to your n8n instance.&lt;/p&gt;




&lt;h2&gt;
  
  
  Real examples from last week
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Morning check:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"List all my active workflows and tell me which ones ran in the last 24 hours"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude lists them, checks execution history, and flags any that didn't run on schedule.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick trigger:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Run the client invoice workflow"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude finds the workflow by keyword, triggers it, returns execution ID.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Debugging:&lt;/strong&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Show me the last 5 executions of the email automation — did any fail?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Claude pulls execution data and summarizes results including error messages.&lt;/p&gt;




&lt;h2&gt;
  
  
  Requirements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;n8n 1.70+ (cloud or self-hosted)&lt;/li&gt;
&lt;li&gt;Claude Desktop or Claude Code&lt;/li&gt;
&lt;li&gt;n8n API Key (Settings → API Keys)&lt;/li&gt;
&lt;li&gt;Public URL or ngrok for local&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Setup: ~15 minutes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Get the template
&lt;/h2&gt;

&lt;p&gt;Full workflow JSON + Claude Desktop config snippet available on &lt;strong&gt;n8nMarkets&lt;/strong&gt;: &lt;a href="https://www.n8nmarkets.com/en/workflow-templates" rel="noopener noreferrer"&gt;https://www.n8nmarkets.com/en/workflow-templates&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Search "MCP Server".&lt;/p&gt;




&lt;p&gt;&lt;em&gt;All credentials stay in your n8n instance. Claude only sees what the tools return — your API keys never leave your server.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
  </channel>
</rss>
