Cut Social Media Time 60%: Automate It with Claude Desktop, NocoDB, and Postiz
How I connected Claude Desktop to Postiz, NocoDB, and Immich via MCP servers to automate drafting, photo selection, and scheduling. Saves 5-8 hours a week.
Edward Chalupa
Founder, Whtnxt · Dallas, TX
I was spending 8-10 hours per week on social media content creation. Between drafting posts, finding photos, scheduling across platforms, and tracking performance, it was consuming time I needed for actual client work.
So I built a system that cut that time by 60% while actually improving content quality.

Here’s exactly how I did it, and how you can replicate this setup for your own content workflow.
The Problem: Social Media Is a Time Sink
If you’re creating professional content across multiple platforms, you know the drill. You draft a LinkedIn post, realize it needs a photo, dig through your camera roll for 15 minutes, resize it, upload it to your scheduler, copy the post to Twitter but reformat it for character limits, find a different photo that works better for Instagram, write a caption, add hashtags, and finally schedule everything.
Thirty minutes later, you’ve published one piece of content.
Multiply that by 10-15 posts per week, and you’re looking at 5-10 hours of repetitive work that doesn’t require your expertise. It’s exactly the kind of operational bottleneck that should be automated.
The Approach: AI-Powered Content Creation with Smart Integrations

Instead of replacing myself with a scheduling tool, I built a conversational AI system that handles the entire workflow. Claude Desktop acts as my content strategist and executor, connected to:
- Postiz for multi-platform publishing
- NocoDB for content planning and brand management
- Immich for photo library management
- Pexels for stock imagery when needed
The result is a system where I can say “create a LinkedIn post about that HubSpot workflow I built last week,” and Claude handles drafting, photo selection, hashtag optimization, and scheduling.
What You’ll Build
By the end of this guide, you’ll have:
- Claude Desktop configured with MCP servers for social media management
- A NocoDB database storing your brand guidelines, platform specs, and content history
- Immich connected for instant photo access
- Postiz integrated for multi-platform publishing
- A conversational workflow that feels like working with a human strategist
Total setup time: 2-3 hours. Time saved per week: 5-8 hours.
Prerequisites
Required:
- Claude Desktop (free or Pro subscription)
- Basic familiarity with JSON configuration files
- A Postiz account (self-hosted or cloud)
- Terminal/command line comfort
Optional but recommended:
- NocoDB instance (self-hosted or cloud)
- Immich photo library (self-hosted)
- Pexels API key (free)
Technical note: This guide assumes you’re comfortable editing configuration files and using command-line tools. If you can install npm packages and edit JSON, you’re good to go.
Architecture Overview
Here’s how the pieces connect:
You → Claude Desktop → MCP Servers → External Services
├─ Postiz MCP → Social platforms
├─ NocoDB MCP → Content database
├─ Immich MCP → Photo library
└─ Pexels MCP → Stock photos
Claude Desktop uses the Model Context Protocol (MCP) to connect with external services. Each MCP server acts as a bridge, giving Claude the ability to query databases, search photo libraries, and publish content directly.
Step 1: Set Up Your Infrastructure
1.1 Deploy Postiz
Postiz is your multi-platform publishing engine. You can self-host or use their cloud service.
Self-hosted option (Docker):
git clone https://github.com/gitroomhq/postiz-app.git
cd postiz-app
docker-compose up -d
Access Postiz at http://localhost:5000 and connect your social accounts (LinkedIn, Twitter, Facebook, Instagram).
Cloud option: Sign up at postiz.app and connect accounts through their interface.
Critical step: Note your Postiz API URL and create an API key in Settings → API Keys.
1.2 Set Up NocoDB (Optional but Recommended)
NocoDB serves as your content management system, storing brand guidelines, platform specifications, and content history.
Self-hosted (Docker):
docker run -d \
--name nocodb \
-p 8080:8080 \
-v nocodb:/usr/app/data \
nocodb/nocodb:latest
Cloud option: Use nocodb.com for hosted version.
Database structure to create:
- Platform_Specs table:
- Channel (text): LinkedIn, Twitter, Instagram, Facebook
- Preferences (long text): Posting times, character limits, hashtags, etc.
- Preferences table:
- Channel (text): Platform name
- Preferences (long text): Voice/tone guidelines
- Published Posts table:
- Platform (text)
- Content (long text)
- Scheduled Time (datetime)
- Scheduling Type (text): optimal or immediate
- Engagement (number)
- Images table:
- Asset ID (text)
- Immich URL (text)
- Description (text)
- Platform (text)
Create a base called “Social” and generate an API token in Settings → API Tokens.
1.3 Configure Immich (Optional)
Immich is a self-hosted photo management system. If you already use Google Photos or iCloud, Immich gives you API access to your library.
Docker deployment:
wget https://github.com/immich-app/immich/releases/latest/download/docker-compose.yml
docker-compose up -d
Access at http://localhost:2283, create an account, upload your photo library.
Generate API key: User Settings → API Keys → New API Key
Important: Note your Immich URL (e.g., https://immich.yourdomain.com) and use the /api endpoint for MCP configuration.
Step 2: Configure Claude Desktop with MCP Servers
Claude Desktop stores configuration in a JSON file. Location varies by OS:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
2.1 Postiz MCP Configuration
The Postiz MCP server is community-built and available on npm.
Install and configure:
{
"mcpServers": {
"postiz": {
"command": "npx",
"args": ["-y", "@anotherworldai/postiz-mcp-server"],
"env": {
"POSTIZ_API_URL": "https://your-postiz-url.com",
"POSTIZ_API_KEY": "your-api-key-here"
}
}
}
}
Test it: Restart Claude Desktop, then ask: “Can you list my connected social accounts in Postiz?”
If configured correctly, Claude will return your connected platforms.
2.2 NocoDB MCP Configuration
NocoDB MCP connects Claude to your content database.
Installation:
npm install -g @woahboi/nocodb-mcp-server
Configuration:
{
"mcpServers": {
"postiz": { "..." : "..." },
"nocodb": {
"command": "nocodb-mcp-server",
"env": {
"NOCODB_API_URL": "https://your-nocodb-url.com",
"NOCODB_API_TOKEN": "your-api-token",
"NOCODB_WORKSPACE_ID": "your-workspace-id",
"NOCODB_BASE_ID": "your-base-id"
}
}
}
}
Finding IDs:
- Workspace ID: Check NocoDB URL when viewing your workspace
- Base ID: Open your “Social” base, copy ID from URL
Test it: Ask Claude: “What tables are in my NocoDB Social base?“
2.3 Immich MCP Configuration
Immich MCP gives Claude access to your photo library.
Configuration:
{
"mcpServers": {
"postiz": { "..." : "..." },
"nocodb": { "..." : "..." },
"immich": {
"command": "npx",
"args": ["-y", "@bestcodes/immich-stdio-mcp"],
"env": {
"IMMICH_BASE_URL": "https://immich.yourdomain.com/api",
"IMMICH_API_KEY": "your-immich-api-key"
}
}
}
}
Critical detail: Use the /api endpoint, not the base URL. This was my stumbling block during setup.
Test it: Ask Claude: “Show me 5 random photos from my Immich library.”
2.4 Pexels MCP Configuration (Optional)
For stock photography when your personal library doesn’t have the right image.
Get API key: Sign up at pexels.com/api, create free API key.
Configuration:
{
"mcpServers": {
"postiz": { "..." : "..." },
"nocodb": { "..." : "..." },
"immich": { "..." : "..." },
"pexels": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-pexels"],
"env": {
"PEXELS_API_KEY": "your-pexels-api-key"
}
}
}
}
Test it: Ask Claude: “Search Pexels for workspace photos.”
Step 3: Populate Your NocoDB Database
Your content database serves as Claude’s knowledge base. Here’s what to include:
Platform_Specs Records
Create records in the Preferences table with Channel=“Platform_Specs”:
LinkedIn example:
Channel: Platform_Specs
Preferences: Platform: LinkedIn | Spec: Posting Times | Value: Tuesday-Thursday, 8-10 AM or 12-2 PM EST
Additional specs to add:
- Character limits (LinkedIn: 1,300-1,600 for engagement)
- Hashtag count (LinkedIn: 3-5, Twitter: 2-3, Instagram: 5-10)
- Content format (Hook → Value → CTA)
- Photo types (Professional shots, workspace, data viz)
- Posting frequency (3-5 posts/week)
Voice/Tone Preferences
Create records with Channel matching each platform:
LinkedIn voice example:
Channel: LinkedIn
Preferences: Sardonic but professional tone. No emojis, no markdown, no em dashes. Hook must be one sentence followed by a break. Focus on real-world experiences with data-driven insights.
Add platform-specific preferences for each social channel you use.
Keywords/Hashtags
Create a Keywords table with common hashtag sets:
Marketing automation set:
Category: Marketing Automation
Hashtags: #MarketingAutomation #MarketingOps #GrowthMarketing #HubSpot #MarTech
Growth marketing set:
Category: Growth Marketing
Hashtags: #GrowthMarketing #DataDriven #ConversionOptimization #LeadGen #Analytics
Step 4: Create Your Claude Desktop Project Instructions
This is where the magic happens. Claude Projects let you configure custom instructions that persist across conversations.
Create a new project in Claude Desktop and add this system prompt:
You are my personal brand strategist and social media partner. You help me create authentic social media content across LinkedIn, Twitter, Instagram, and Facebook.
## Your Toolkit
**NocoDB Social** - Content planning and brand knowledge
- Query Platform_Specs (Channel="Platform_Specs") for posting times, character limits, hashtags
- Query Preferences (by Channel) for platform-specific voice/tone
- Store published content in Published Posts table
- Reference Images table for reusable assets
**Immich** - My photo library
- Search by date, location, or theme
- Present 3-5 photo options with context
- Create shareable links with this URL format: https://immich.yourdomain.com/api/assets/{asset_id}/thumbnail?key={share_key}
**Postiz MCP** - Multi-platform publishing
- Schedule for optimal times OR post immediately
- Convert Mountain Time to UTC for "post now" requests
- Confirm scheduling and log to NocoDB
## Workflow
1. Discuss content idea with me
2. Draft platform-optimized copy
3. Search Immich for relevant photos, present options
4. Wait for my photo selection
5. Create Immich shared link and generate thumbnail URL
6. Ask: "Post now or schedule for optimal time?"
7. Schedule via Postiz (immediate or optimal)
8. Log to NocoDB Published Posts
## Timing Options
**Optimal Schedule:** Query Platform_Specs for best posting times, suggest slot
**Post Now:** Convert current Mountain Time to UTC, schedule within 1-2 minutes
Always ask my preference unless the content is clearly time-sensitive (breaking news, trending topics).
## Voice Guidelines
Reference NocoDB Preferences table for my voice on each platform. General principles:
- Professional but conversational
- Data-driven with storytelling
- No emojis, markdown, or em dashes
- One-sentence hook followed by break
- Real experiences over generic advice
Adjust the timezone reference (I’m in Mountain Time) to match your location.
Step 5: Build Your First Post
Now for the proof of concept. Let’s create a LinkedIn post from scratch.
You: “I want to create a LinkedIn post about the time I automated 240 hours of manual work with a weekend coding project.”
Claude will:
- Query NocoDB Platform_Specs for LinkedIn best practices
- Check Preferences for your voice/tone
- Draft a post in your style
- Search Immich for workspace/coding photos
- Present 3-5 options with thumbnails
- Wait for your selection
- Ask about timing preference
You: “Use photo 2, and let’s schedule for tomorrow at 8 AM MT.”
Claude will:
- Create Immich shared link for photo 2
- Generate thumbnail URL
- Convert 8 AM MT to UTC
- Schedule via Postiz
- Log to NocoDB with metadata
Total time: 3-4 minutes for a fully scheduled, branded post.
The Results: What This Actually Saves

After three months using this system, here’s what changed:
Time metrics:
- Content creation: 8-10 hours/week → 3-4 hours/week (60% reduction)
- Time per post: 30 minutes → 5-8 minutes (73% reduction)
- Photo selection: 15 minutes → 2 minutes (87% reduction)
Quality improvements:
- Brand consistency: 100% (vs. ~70% manual)
- Posting schedule adherence: 95% (vs. ~60% manual)
- Platform optimization: Automatic (vs. “I should probably check that”)
Unexpected benefits:
- Better content variety (Claude suggests diverse content pillars)
- Faster iteration (edit and republish in minutes)
- Performance tracking (all posts logged with metadata)
- Cross-platform adaptation (automatic reformatting per platform)
The system paid for itself in the first week.
Advanced Workflows
Once you have the basics running, here are some advanced use cases:
Batch Content Creation
You: “Let’s create 5 LinkedIn posts for next week. Three about marketing automation, one personal story, one industry commentary.”
Claude will draft all five, help you select photos for each, and schedule them at optimal times throughout the week.
Breaking News Reactions
You: “Meta just announced major changes to their ad platform. I want to post my take on LinkedIn and Twitter immediately.”
Claude will draft platform-specific versions, skip photo selection if not needed, and schedule both for immediate posting (1-2 minutes from now).
Cross-Platform Campaigns
You: “Turn this blog post into social content for all platforms.”
Claude will create LinkedIn (long-form), Twitter (thread), Instagram (visual + caption), and Facebook (discussion starter) versions, each optimized for that platform’s specs.
Troubleshooting Common Issues
”Claude can’t connect to Postiz”
Check:
- Is Postiz URL correct in config? (Include https://)
- Did you restart Claude Desktop after config changes?
- Is API key valid? (Test in Postiz API settings)
“Photo thumbnails won’t load”
Fix: Ensure Immich shared links are set to “Allow public download” and “Never expire.” Check that thumbnail URL uses this format:
https://immich.yourdomain.com/api/assets/{asset_id}/thumbnail?key={share_key}
”Posts aren’t auto-publishing at scheduled time”
This was my exact issue initially. The problem is usually:
- Postiz configuration issue (check provider connection)
- Timezone conversion error (verify MT to UTC conversion)
- Insufficient permissions on API key
Current workaround: Posts scheduled via Claude may require manual trigger in Postiz UI. I’m working with the Postiz team on a fix.
”Claude doesn’t remember platform preferences”
Solution: Make sure preferences are in NocoDB with correct Channel names. Claude queries by exact Channel match, so “LinkedIn” works but “linkedin” might not.
Cost Breakdown
Here’s what this setup actually costs:
Required:
- Claude Pro: $20/month (or use free tier with rate limits)
- Postiz Cloud: $29/month (or free self-hosted)
Optional:
- NocoDB Cloud: $15/month (or free self-hosted)
- Immich: Free (self-hosted only)
- Pexels API: Free (rate limited)
Self-hosted total: $20/month (just Claude Pro)
Fully hosted total: $64/month
Compare to hiring a VA for 10 hours/month at $25/hour: $250/month.
ROI is obvious.
What I’d Do Differently
If I were starting from scratch today:
- Start with cloud services first. I went straight to self-hosting, which added complexity. Validate the workflow with hosted tools, then self-host if you want more control.
- Simplify the NocoDB schema. My initial database had 12 tables. I use 5 regularly. Start minimal, expand as needed.
- Set up Immich earlier. I added this last and realized it’s the most valuable integration. Having instant access to my photo library is a game-changer.
- Test each MCP server individually. I configured everything at once and spent hours debugging. Add one server at a time, test it, then move to the next.
- Document your provider IDs immediately. Each social account has a unique provider ID in Postiz. Save these in NocoDB when you first connect them.
Key Takeaways

This system works because it automates repetitive operational tasks while keeping you in control of strategy and voice. You’re not replacing yourself with AI. You’re building a system that handles the boring stuff so you can focus on what actually requires your expertise.
The workflow feels like working with a human assistant who knows your brand, understands your audience, and handles all the technical execution. You provide the ideas and strategic direction. Claude handles everything else.
If you’re spending more than 5 hours per week on social media content creation, this system will pay for itself immediately. The setup takes an afternoon. The time savings compound every week.
Resources
MCP Server Documentation:
- Postiz MCP: github.com/anotherworldai/postiz-mcp-server
- NocoDB MCP: github.com/woahboi/nocodb-mcp-server
- Immich MCP: github.com/bestcodes/immich-stdio-mcp
- Pexels MCP: modelcontextprotocol.io/servers/pexels
Self-Hosting Guides:
- Postiz: docs.postiz.com/self-hosting
- NocoDB: docs.nocodb.com/getting-started
- Immich: immich.app/docs/install/docker-compose
My Configuration:
If you want to see my exact setup, DM me. I can share sanitized config files and NocoDB schema exports.
What’s Next
I’m actively working on:
- Automated performance tracking (pull engagement metrics back into NocoDB)
- Content calendar view (visual planning interface)
- A/B testing framework (test different hooks, photos, posting times)
- Voice cloning integration (generate short video content)
The foundation is built. Now it’s about optimization and scale.
If you build this system, I want to hear about it. What worked? What broke? What would you add?
This is the kind of marketing automation that actually matters. Not chasing AI trends. Building systems that free humans for strategic work.
About the author: Edward Chalupa is a Growth Marketing Manager at iPEC and founder of Whtnxt, a digital marketing and automation consultancy. He specializes in building human-centric automation systems that connect marketing operations directly to revenue. When he’s not automating workflows, he’s probably vibe coding something new over a weekend.