<?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: rarora2026-gif</title>
    <description>The latest articles on DEV Community by rarora2026-gif (@rarora2026gif).</description>
    <link>https://dev.to/rarora2026gif</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4126384%2F31029f1c-7f63-4754-b11d-cb9aada45f44.png</url>
      <title>DEV Community: rarora2026-gif</title>
      <link>https://dev.to/rarora2026gif</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rarora2026gif"/>
    <language>en</language>
    <item>
      <title>Can Claude or ChatGPT post to your social media accounts? Yes, and here's how (MCP, CLI and REST)</title>
      <dc:creator>rarora2026-gif</dc:creator>
      <pubDate>Sun, 25 Oct 2026 10:30:18 +0000</pubDate>
      <link>https://dev.to/rarora2026gif/can-claude-or-chatgpt-post-to-your-social-media-accounts-yes-and-heres-how-mcp-cli-and-rest-4gha</link>
      <guid>https://dev.to/rarora2026gif/can-claude-or-chatgpt-post-to-your-social-media-accounts-yes-and-heres-how-mcp-cli-and-rest-4gha</guid>
      <description>&lt;p&gt;Ask an AI assistant to "post this to LinkedIn and X" and most of the time it writes you a nice caption and stops there. It can't press the button, because nothing has given it a way to.&lt;/p&gt;

&lt;p&gt;That changes once you hand it a tool. This post walks through the three ways I wire publishing into an AI or developer workflow: an &lt;strong&gt;MCP server&lt;/strong&gt; your assistant calls directly, a &lt;strong&gt;CLI&lt;/strong&gt; for scripts and cron, and a &lt;strong&gt;REST API&lt;/strong&gt; for everything else (n8n, Zapier, Make, your own backend). The examples use &lt;a href="https://postwharf.com" rel="noopener noreferrer"&gt;PostWharf&lt;/a&gt;, the tool I build, but the pattern is the same whatever you use.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer
&lt;/h2&gt;

&lt;p&gt;An assistant like Claude or ChatGPT can publish to your social accounts when it's connected to an MCP server that has access to them. The assistant drafts the post, calls a &lt;code&gt;publish&lt;/code&gt; or &lt;code&gt;schedule&lt;/code&gt; tool, and gets a receipt back per network. You stay in control: you connect the accounts once, and the assistant acts through a key you can revoke.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 1: an MCP server for posting to social media
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://modelcontextprotocol.io" rel="noopener noreferrer"&gt;MCP (Model Context Protocol)&lt;/a&gt; is the standard way to give an AI assistant tools. A social media MCP server exposes tools like "list my channels", "draft a post", "schedule this for Tuesday 9am" and "how did yesterday's post do".&lt;/p&gt;

&lt;p&gt;PostWharf's &lt;a href="https://postwharf.com/mcp" rel="noopener noreferrer"&gt;hosted MCP server&lt;/a&gt; lives at &lt;code&gt;https://mcp.postwharf.com/mcp&lt;/code&gt; (Streamable HTTP). In &lt;strong&gt;Claude Code&lt;/strong&gt; it's one command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;claude mcp add &lt;span class="nt"&gt;--transport&lt;/span&gt; http &lt;span class="se"&gt;\&lt;/span&gt;
  wharf https://mcp.postwharf.com/mcp &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--header&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$POSTWHARF_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;strong&gt;Cursor&lt;/strong&gt;, the same address and header go under &lt;code&gt;mcpServers&lt;/code&gt;:&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;"wharf"&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;"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://mcp.postwharf.com/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="nl"&gt;"Authorization"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Bearer YOUR_WORKSPACE_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="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;Claude and ChatGPT apps&lt;/strong&gt; don't have a field for a header, so they use a connect link from the dashboard instead (under Agent &amp;amp; MCP). Once it's connected you just ask:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Turn this changelog into a LinkedIn post and a shorter X post, and schedule both for tomorrow at 9am."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The assistant checks which channels you have, adapts the text to each network's limits, schedules it, and tells you what went out where. Setup guides for each client are at &lt;a href="https://postwharf.com/ai/chatgpt" rel="noopener noreferrer"&gt;postwharf.com/ai/chatgpt&lt;/a&gt; and &lt;a href="https://postwharf.com/mcp" rel="noopener noreferrer"&gt;postwharf.com/mcp&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 2: a CLI tool to schedule social media posts
&lt;/h2&gt;

&lt;p&gt;Sometimes you don't want a chat window, you want a line in a script. A &lt;a href="https://postwharf.com/cli" rel="noopener noreferrer"&gt;social media CLI&lt;/a&gt; is the simplest way to post from a terminal, a cron job or a CI pipeline:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm i &lt;span class="nt"&gt;-g&lt;/span&gt; postwharf
&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;POSTWHARF_API_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;wf_live_…

wharf &lt;span class="nb"&gt;whoami&lt;/span&gt;                                   &lt;span class="c"&gt;# plan, posts left, channels&lt;/span&gt;
wharf post &lt;span class="s2"&gt;"Shipping today."&lt;/span&gt; &lt;span class="nt"&gt;--all&lt;/span&gt;             &lt;span class="c"&gt;# every connected account&lt;/span&gt;
wharf post &lt;span class="s2"&gt;"New reel"&lt;/span&gt; &lt;span class="nt"&gt;--media&lt;/span&gt; ./out/reel.mp4 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--to&lt;/span&gt; instagram,tiktok &lt;span class="nt"&gt;--type-for&lt;/span&gt; instagram:reel &lt;span class="nt"&gt;--at&lt;/span&gt; &lt;span class="s2"&gt;"tue 9am"&lt;/span&gt;
wharf status &lt;span class="nt"&gt;--since&lt;/span&gt; 7d                        &lt;span class="c"&gt;# what went out, what didn't&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few things that matter when it runs unattended:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Local files just work.&lt;/strong&gt; &lt;code&gt;--media ./clip.mp4&lt;/code&gt; uploads the file for you; nothing needs hosting first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--dry-run&lt;/code&gt;&lt;/strong&gt; runs every check the real call would (text length per network, file formats) and writes nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It exits non-zero when a delivery fails&lt;/strong&gt;, so cron and CI fail loudly instead of quietly not posting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;--idempotency-key&lt;/code&gt;&lt;/strong&gt; means a retried job doesn't double-post.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This also makes the CLI a great tool for coding agents. Claude Code or Codex can call &lt;code&gt;wharf&lt;/code&gt; like any other command, with no prompts and no config file needed beyond the environment variable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Option 3: a REST API for posting to multiple platforms
&lt;/h2&gt;

&lt;p&gt;For n8n, Zapier, Make or your own app, it's one HTTP call. Give &lt;code&gt;publish_at&lt;/code&gt; to schedule, or leave it out to publish now. Per-channel overrides let one request carry a different caption for each network:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;POST https://api.postwharf.com/v1/posts
Authorization: Bearer wf_live_…
Content-Type: application/json

{
  "text": "Most founders think they have a marketing problem.",
  "channels": ["ch_x_main", "ch_li_main", "ch_ig_main"],
  "publish_at": "2026-11-03T09:00:00Z",
  "overrides": {
    "ch_x_main": { "text": "Short version for X →" }
  }
}
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get a post id back, then delivery receipts per network via &lt;code&gt;GET /v1/events&lt;/code&gt; or webhooks. The full reference is in the &lt;a href="https://postwharf.com/developers" rel="noopener noreferrer"&gt;developer docs&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which networks?
&lt;/h2&gt;

&lt;p&gt;Today PostWharf publishes to &lt;strong&gt;Instagram, TikTok, X, LinkedIn, YouTube, Facebook, Threads, Pinterest, Bluesky and Telegram&lt;/strong&gt;. Reddit, Discord, Snapchat and WordPress are on the request list but can't publish yet. For most networks you also get the post's figures back (views, reach, likes, comments, shares, saves), so your assistant can tell you what worked.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built it this way: no per-channel fees
&lt;/h2&gt;

&lt;p&gt;Most schedulers charge per connected channel, which hurts the moment you run more than one brand or a handful of client accounts. PostWharf is &lt;a href="https://postwharf.com/pricing" rel="noopener noreferrer"&gt;priced per workspace with unlimited channels&lt;/a&gt;, starting at $15/month with a seven-day free trial. Connect ten accounts or forty; the price doesn't change.&lt;/p&gt;

&lt;p&gt;What it deliberately doesn't do: social listening, an engagement inbox, link-in-bio pages or a visual grid planner. It publishes, it tells you what happened, and it lets your tools and your AI do the posting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Sign up at &lt;a href="https://postwharf.com" rel="noopener noreferrer"&gt;postwharf.com&lt;/a&gt; and connect your accounts.&lt;/li&gt;
&lt;li&gt;Copy your workspace key.&lt;/li&gt;
&lt;li&gt;Pick a door: &lt;a href="https://postwharf.com/mcp" rel="noopener noreferrer"&gt;MCP&lt;/a&gt;, &lt;a href="https://postwharf.com/cli" rel="noopener noreferrer"&gt;CLI&lt;/a&gt; or &lt;a href="https://postwharf.com/developers" rel="noopener noreferrer"&gt;REST&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you wire it into an agent or a pipeline, I'd love to hear what you build. Drop it in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>mcp</category>
      <category>productivity</category>
      <category>api</category>
    </item>
    <item>
      <title>I built an MCP server that tells you why ChatGPT never mentions your product</title>
      <dc:creator>rarora2026-gif</dc:creator>
      <pubDate>Tue, 15 Sep 2026 17:06:10 +0000</pubDate>
      <link>https://dev.to/rarora2026gif/i-built-an-mcp-server-that-tells-you-why-chatgpt-never-mentions-your-product-5chj</link>
      <guid>https://dev.to/rarora2026gif/i-built-an-mcp-server-that-tells-you-why-chatgpt-never-mentions-your-product-5chj</guid>
      <description>&lt;p&gt;Your rank tracker measures Google. It says nothing about the moment a buyer asks ChatGPT "what's the best X" and gets three names back. If you're not one of them, you lost the deal before your site loaded, and nothing in the classic SEO stack sees it happen.&lt;/p&gt;

&lt;p&gt;So I built Cituna: it asks the same buyer prompts across all seven answer engines (ChatGPT, Perplexity, Gemini, Claude, Grok, Google AI Overviews and Google AI Mode) every day, records who each one cited, then generates the fix. And because I live in Claude, I exposed it over the Model Context Protocol.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wire it into Claude
&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;"cituna"&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;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cituna-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;"env"&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;"CITUNA_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;"cituna_sk_..."&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;Run &lt;code&gt;npx cituna-mcp&lt;/code&gt; and you're live. Generate a key in the app under Integrations.&lt;/p&gt;

&lt;h2&gt;
  
  
  A real first conversation
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;You:&lt;/strong&gt; We sell scheduling software. Why does ChatGPT never mention us?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude:&lt;/strong&gt; (get_visibility) You're cited in 3 of 18 prompt x engine cells. (get_engine_answers) For "best scheduling software for clinics" ChatGPT cites Calendly, Acuity and a Capterra roundup. Every citation is a third-party list you are absent from. (gsc_query) Google already sends you 1,240 impressions for that intent. So you are Google-visible and AI-invisible.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That is the whole point of answer engine optimization: a perfect page does not matter if the engines build their answer out of roundups, Reddit threads and comparison pages you are not on.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tools
&lt;/h2&gt;

&lt;p&gt;Sixteen tools, twelve read and four write:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;get_visibility&lt;/code&gt;: the daily prompt x engine grid&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;get_engine_answers&lt;/code&gt;: what each engine actually said, and who it cited instead&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;list_gaps&lt;/code&gt; / &lt;code&gt;set_gap_status&lt;/code&gt;: the fix queue&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;gsc_*&lt;/code&gt;: Search Console joined to the answers&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;queue_article&lt;/code&gt;: hand a gap to the content generator&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The same data is available over a REST API if you would rather build on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why an MCP and not just a dashboard
&lt;/h2&gt;

&lt;p&gt;Because the reasoning happens where you already are. I do not want to open a tab to learn why I am invisible; I want to ask the model that is ignoring me.&lt;/p&gt;

&lt;p&gt;The first scan is free and runs on your real domain: &lt;a href="https://cituna.com" rel="noopener noreferrer"&gt;https://cituna.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>chatgpt</category>
      <category>llm</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
