3.8 KiB
3.8 KiB
socialmag — Social Media MCP Server
One tool, all platforms. Post to Threads, Facebook, Instagram, TikTok (and YouTube when eligible) through a single MCP call. Built on CDP — no API keys, no rate limits, no approval process. Just a browser and a logged-in account.
What It Does
create_post— Post text/media to one or more platforms in one callcheck_login— Verify which platforms are logged inget_status— Last post results + open browser tabs
Architecture
Claude/MCP Client
↓ stdio (JSON-RPC)
socialmag server.py
↓ CDP WebSocket
Brave Browser (dedicated instance, port 9336)
↓ real browser sessions
Threads · Facebook · Instagram · TikTok · YouTube
- Tab reuse — attaches to existing tabs, no cold loads
- Per-platform modules — each platform has its own flow + selectors
- Sequential queue — one platform at a time, no race conditions
- Error screenshots — failed flows capture the page state to
/tmp/socialmag/
Platform Status
| Platform | Text | Media | Tab Reuse | Status |
|---|---|---|---|---|
| Threads | ✅ | 🔲 | ✅ | Live — inline composer |
| ✅ | 🔲 | ✅ | Live — dialog flow | |
| — | ✅ | ✅ | Live — media required | |
| TikTok | — | ✅ | ✅ | Live — video/photo upload |
| YouTube | 🔲 | 🔲 | ✅ | Parked — needs 500 subs |
✅ = tested live · 🔲 = coded but untested · — = not applicable
Stack
- Python 3 (stdlib + websockets)
- Chrome DevTools Protocol (CDP)
- MCP stdio transport
- Brave Browser with
--remote-debugging-port
Browser Setup
# Dedicated Brave instance (separate profile, no interference)
brave --remote-debugging-port=9336 \
--user-data-dir=$HOME/.local/share/brave-socialmag \
--disable-features=BeforeUnloadDialog \
--mute-audio --no-first-run
Log into each platform manually once. socialmag reuses those sessions.
Future Roadmap
v0.2 — Read Side
get_notifications(platform)— pull notifications via CDP scrapingget_comments(platform, post_id?)— read comments on recent postsget_engagement(platform)— likes, shares, reach per post
v0.3 — Monitoring
- Cron/loop polling — periodic checks, dump to JSON
- Unified notification feed across all platforms
- Alert on new comments/DMs
v0.4 — Dashboard
- Web dashboard — one view for all platform activity
- Post scheduler — queue posts for specific times
- Analytics — engagement trends, best posting times
v0.5 — Media Pipeline
- Threads media posting (image + video)
- Facebook media posting
- YouTube video upload (separate from community posts)
- Auto-resize/format media per platform requirements
Later
- Multi-account support
- Platform API integration (where available + worthwhile)
- Content calendar
- AI-assisted caption generation
File Structure
socialmag/
├── __init__.py # package marker
├── __main__.py # python -m socialmag entry
├── server.py # MCP stdio server + tool handlers
├── cdp.py # CDP WebSocket client
├── selectors.py # all platform selectors in one file
├── queue.py # sequential post queue
├── platforms/
│ ├── __init__.py # shared helpers (guard, require_media, etc.)
│ ├── threads.py
│ ├── facebook.py
│ ├── instagram.py
│ ├── tiktok.py
│ └── youtube.py
└── MANIFEST.md # this file
License
Private. Shared among collaborators by invitation.
Born 2026-09-10. Built by the household — Celeste architected, Umbra built the skeleton, abang drove the FAFO.