<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Maniruzzaman's Blog]]></title><description><![CDATA[Maniruzzaman's Blog]]></description><link>https://akash.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Mon, 21 Sep 2026 03:04:12 GMT</lastBuildDate><atom:link href="https://akash.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[MCP for Everyday CMS Work: Stop Being the Copy-Paste Bridge]]></title><description><![CDATA[You open the admin. Then chat. Then email. Then the form inbox. Then the CRM.
By mid-morning you have ten tabs and three half-finished tasks. Nothing is hard. Everything is slow. You are the integrati]]></description><link>https://akash.hashnode.dev/mcp-for-everyday-cms-work-stop-being-the-copy-paste-bridge</link><guid isPermaLink="true">https://akash.hashnode.dev/mcp-for-everyday-cms-work-stop-being-the-copy-paste-bridge</guid><category><![CDATA[mcp]]></category><category><![CDATA[AI]]></category><category><![CDATA[Laravel]]></category><category><![CDATA[cms]]></category><category><![CDATA[Productivity]]></category><dc:creator><![CDATA[Maniruzzaman Akash]]></dc:creator><pubDate>Sat, 19 Sep 2026 07:58:16 GMT</pubDate><content:encoded><![CDATA[<p>You open the admin. Then chat. Then email. Then the form inbox. Then the CRM.</p>
<p>By mid-morning you have ten tabs and three half-finished tasks. Nothing is hard. Everything is slow. You are the integration layer.</p>
<p>That is the part most "AI for CMS" demos skip. They rewrite a paragraph in a chat window. Your real work still lives in drafts, tickets, media uploads, and publish buttons.</p>
<p><strong>MCP (Model Context Protocol)</strong> is the boring fix for that gap.</p>
<h2>What MCP actually is</h2>
<p>MCP is an open standard for connecting AI clients to apps and data. A server describes tools with schemas. The assistant discovers them and calls them. It does not guess your API shape.</p>
<p>A chatbot that only talks ends at text. You still own every paste.</p>
<p>An MCP-connected assistant can list tickets, draft a post, search docs, or prepare an email <em>inside</em> your real systems. The win is not "smarter prose." The win is structured access.</p>
<p>You still write. You still decide. You stop acting as the only bridge between chat and the admin UI.</p>
<h2>Where the day goes without it</h2>
<table>
<thead>
<tr>
<th>Task</th>
<th>Manual today</th>
<th>With MCP + a small approval loop</th>
</tr>
</thead>
<tbody><tr>
<td>Publish a blog draft</td>
<td>Find draft, edit, set status, save</td>
<td>Assistant updates draft; you confirm publish</td>
</tr>
<tr>
<td>Triage tickets</td>
<td>Scan list, open threads, assign</td>
<td>Assistant lists open items; you approve assigns</td>
</tr>
<tr>
<td>Form inbox</td>
<td>Open each submission, mark viewed</td>
<td>Assistant lists unviewed; you approve marks</td>
</tr>
<tr>
<td>Daily "what needs me?"</td>
<td>Hop across modules</td>
<td>Assistant returns one briefing list</td>
</tr>
<tr>
<td>Attach a featured image</td>
<td>Upload, open post, attach</td>
<td>Assistant uploads or finds media; you confirm</td>
</tr>
<tr>
<td>Clear cache after a change</td>
<td>Ops screen or SSH</td>
<td>Assistant calls clear after you confirm</td>
</tr>
</tbody></table>
<p>Notice what stays manual on the right: confirmation, tone, judgment. Busywork moves. Responsibility does not vanish.</p>
<h2>The pattern that keeps production safe</h2>
<p>Full autopilot fails for boring reasons. Wrong IDs. Tone misfires. Deletes that stick. Secrets in the wrong place.</p>
<p>Use three defaults:</p>
<h3>1. Read, then propose</h3>
<p>List first. Propose the next action in plain language. Fix the plan before any write runs.</p>
<h3>2. Draft, then approve</h3>
<p>Create posts as <strong>draft</strong>. Draft the public reply. Prepare the email fields. Humans confirm publish, send, and delete.</p>
<h3>3. Dry-run, then apply</h3>
<p>Prefer tools that show what <em>would</em> change. Apply only after a human yes.</p>
<p>Map your tools to those stages so the team shares a vocabulary:</p>
<ul>
<li><p><strong>Read:</strong> list posts, list tickets, list form submissions, search docs, daily briefing, site health</p>
</li>
<li><p><strong>Draft:</strong> create-post as draft, draft reply text, prepare send fields</p>
</li>
<li><p><strong>Approve write:</strong> publish, reply, send email, clear cache, delete</p>
</li>
</ul>
<h2>Security is part of the product, not a footnote</h2>
<p>Treat an MCP connection like any other privileged integration.</p>
<p><strong>Scoped tokens.</strong> One token per agent or host. Not one forever token shared across laptops and CI. Rotate when people leave.</p>
<p><strong>Least privilege.</strong> Start read-only. Add write abilities when you have an approval habit and an audit path. Separate read from write when the host allows it.</p>
<p><strong>Skip MCP when:</strong></p>
<ul>
<li><p>You do not trust the system yet</p>
</li>
<li><p>There is no staging twin and no audit log for a production database</p>
</li>
<li><p>The flow is highly regulated and legal has not reviewed write tools</p>
</li>
<li><p>The job is an angry public customer reply (draft is fine; send still needs a human)</p>
</li>
<li><p>Personal mail with broad send rights on day one</p>
</li>
</ul>
<p>If you cannot explain who may call a tool and how you will audit it, do not expose that tool yet.</p>
<h2>Failure modes that bite teams</h2>
<p><strong>Vague tools.</strong> <code>doStuff</code> helps no one. <code>list-form-submissions</code> with filters for form and unviewed state helps immediately. Fix the catalog before you blame the model.</p>
<p><strong>Over-permission.</strong> A token with every ability turns a prompt mistake into a wide outage. Expand with intent, not "just make it work."</p>
<p><strong>Silent success.</strong> A tool that returns success while doing nothing is worse than a loud error. Prefer clear failures. Watch partial success: post created, image attach failed.</p>
<p><strong>Confused identity.</strong> Shared tokens blur audit trails. Give people their own tokens tied to their permissions when you can. Shared robots for CI are fine. Shared robots for human editors are not.</p>
<h2>A starter set (week one)</h2>
<p>Three tools beat thirty.</p>
<p><strong>Content teams</strong></p>
<ol>
<li><p>Daily briefing</p>
</li>
<li><p>Create post as draft</p>
</li>
<li><p>Update post (publish only after review)</p>
</li>
</ol>
<p><strong>Support teams</strong></p>
<ol>
<li><p>List open tickets</p>
</li>
<li><p>Summarize a thread</p>
</li>
<li><p>Draft a reply (do not send until confirmed)</p>
</li>
</ol>
<p>Measure progress without fake ROI charts. Count tab switches during a publish. Count minutes from "please draft this" to a reviewable draft. If those fall across two weeks, the setup is working. If not, fix the catalog or the approval habit.</p>
<h2>How this looks on LaraDashboard (disclosure)</h2>
<p><strong>Disclosure:</strong> I work on <a href="https://laradashboard.com">LaraDashboard</a>, an open-source Laravel CMS and admin with an optional built-in MCP server. Steal the workflow even if you wire your own server.</p>
<p>On LaraDashboard, MCP lives under <strong>Settings → MCP</strong>. You create agent tokens and attach abilities. Tools cover posts, media, daily briefing, email templates, CRM/tickets, forms, docs, cache, and logs — filtered by token abilities and the linked user's permissions.</p>
<p>A practical getting-started checklist:</p>
<ol>
<li><p>Enable MCP</p>
</li>
<li><p>Create a dedicated agent token (do not reuse a browser session)</p>
</li>
<li><p>Grant least-privilege abilities (start read-only)</p>
</li>
<li><p>Connect Cursor, Claude Desktop, or another MCP client</p>
</li>
<li><p>Call <code>list-mcp-tools</code> and verify the catalog</p>
</li>
<li><p>Run a read-only test (<code>list-posts</code> or daily briefing)</p>
</li>
<li><p>Run a draft write test (<code>create-post</code> as draft)</p>
</li>
<li><p>Practice an approval loop on publish or send</p>
</li>
<li><p>Add media upload only when needed</p>
</li>
<li><p>Document who approves which writes; expand abilities only after the first workflow feels stable</p>
</li>
</ol>
<p>Most "MCP is broken" reports are scope issues: token abilities, module status, or site health — not the protocol itself.</p>
<h2>What "done" looks like for a pilot</h2>
<ul>
<li><p>One read workflow used daily for two weeks</p>
</li>
<li><p>One write workflow with confirmations and zero surprise publishes</p>
</li>
<li><p>Tokens named, scoped, and stored outside chat</p>
</li>
<li><p>A short internal doc with house rules and starter tools</p>
</li>
<li><p>A known owner for catalog changes</p>
</li>
<li><p>A rollback plan: revoke token, disable MCP, continue in the admin UI</p>
</li>
</ul>
<h2>Ending note</h2>
<p>You do not need a larger chatbot. You need fewer tab hops between intent and a reviewable action.</p>
<p>MCP gives assistants a clear door into your systems. A small human loop keeps publish, send, and delete under your control.</p>
<p>Start narrow. Read first. Add one write workflow. Keep confirmations on the actions you would hate to undo.</p>
<p>The longer original (with more LaraDashboard-specific tool mapping) lives here — this Dev.to version is adapted from it, and that URL is the canonical source:</p>
<p><a href="https://laradashboard.com/blog/how-mcp-makes-everyday-work-easier-with-a-small-human-in-the-loop"><strong>How MCP Makes Everyday Work Easier (With a Small Human in the Loop)</strong></a></p>
<p>Try the product at <a href="https://laradashboard.com">laradashboard.com</a> if you want that door inside a Laravel CMS you can own.</p>
]]></content:encoded></item></channel></rss>