Social media calendar for AI agents: read channels, create drafts, request approval.
Runs on your machine from its package; the steps are below.

At most: creates or changes data: records, files, settings.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
npx -y @postsider/mcp
MCP client config
{
"mcpServers": {
"postsider": {
"command": "npx",
"args": [
"-y",
"@postsider/mcp"
]
}
}
}
Open-source social media scheduling for humans, teams, and AI agents.
Schedule and publish across 33 built-in connectors from one calendar.
Self-host with Docker, automate through the REST API and Node.js SDK, or connect AI agents through MCP.
Website · Documentation · Quick Start · MCP · API & SDK
PostSider is an open-source social media management and scheduling platform built around four ways of working:
| Use PostSider as | What you get |
|---|---|
| Social media scheduler | One calendar for planning, composing, approving, scheduling, and publishing content |
| Self-hosted platform | A Docker-based deployment you can run on your own infrastructure |
| Automation backend | A public REST API plus the @postsider/node SDK |
| AI-agent bridge | An MCP server that lets compatible agents work with PostSider through structured tools |
PostSider ships with 33 active connectors registered in the application. You configure credentials only for the platforms you actually use.
AI features are optional. PostSider works without an OpenAI API key.
For a local evaluation, the fastest path is Docker Compose.
git clone https://github.com/lumizone/postsider.git
cd postsider
docker compose up -d
The default Compose stack pulls:
ghcr.io/lumizone/postsider-app:latest
and starts PostSider with PostgreSQL, Redis, and Temporal.
Open:
http://localhost:4007
Create the first administrator account:
docker exec -it postsider pnpm bootstrap
The bootstrap command prints a one-time password. Sign in with:
admin@setup.local
and the generated password. PostSider then prompts you to set your real email address and password.
The root
docker-compose.yamlis convenient for local evaluation. For an internet-facing deployment, use the production setup and the self-hosting guide.
@postsider/node@postsider/mcpOPENAI_API_KEYhttpOnly cookiesThe list below mirrors the active providers registered in:
libraries/nestjs-libraries/src/integrations/integration.manager.ts
| Category | Platforms |
|---|---|
| Social & creator platforms | X, LinkedIn Profile, LinkedIn Page, Facebook, Instagram via Facebook, Instagram Standalone, Threads, YouTube, TikTok, Pinterest, Bluesky, Mastodon, Nostr, Farcaster, Lemmy, Twitch, Dribbble, Google Business Profile, Whop, Moltbook |
| Chat & community | Discord, Slack, Telegram |
| Blogs & publishing | Dev.to, Hashnode, Medium, WordPress, Ghost, Blogger, Notion, Mataroa, Write.as, Listmonk |
That is 33 active connectors in the current integration registry.
You only need OAuth/API credentials for the providers you intend to use. See:
Mastodon supports custom instances through the standard Mastodon provider.
Provider integrations live in:
libraries/nestjs-libraries/src/integrations/social/
A new connector typically:
SocialAbstractSocialProvidersocialIntegrationList in integration.manager.tsNew provider integrations are especially welcome as pull requests.
PostSider includes an MCP server for compatible AI clients and agents.
The package is:
@postsider/mcp
The MCP layer is a thin interface over PostSider's public API and exposes 19 tools for workflows such as:
The intended workflow is read-first and draft-first: an agent can prepare work inside the same PostSider workflow used by humans, while publishing remains a deliberate action.
pnpm --filter @postsider/mcp build
For a local/stdio connection, configure:
POSTSIDER_API_KEY
POSTSIDER_API_URL
POSTSIDER_API_URL points the MCP server at the PostSider instance you want to use.
Full MCP documentation:
This repository also contains the Claude Code plugin metadata and the postsider-workflow skill.
claude plugin marketplace add lumizone/postsider
claude plugin install postsider@postsider
A safe read-only connection check:
List my connected PostSider channels. Do not create or modify anything.
PostSider exposes a public REST API for external applications and automation.
Authenticate with your organization's API key.
The published SDK package is:
npm install @postsider/node
Example:
import Postsider from '@postsider/node';
const client = new Postsider(
'your-api-key',
'https://your-instance.com'
);
// Schedule a post
await client.post({
type: 'schedule',
date: '2025-01-15T10:00:00',
posts: [
{
integration: { id: 'channel-id' },
value: [{ content: 'Hello!' }],
},
],
});
// List posts
const posts = await client.postList({
page: 0,
limit: 20,
});
// List connected channels
const channels = await client.integrations();
The public API is exposed under /public/v1.
PostSider is a TypeScript pnpm monorepo.
postsider/
├── apps/
│ ├── backend/ # NestJS REST API
│ ├── orchestrator/ # Temporal workers
│ ├── frontend/ # Next.js dashboard
│ ├── commands/ # CLI/bootstrap utilities
│ ├── sdk/ # @postsider/node
│ └── mcp/ # @postsider/mcp
├── libraries/
│ ├── nestjs-libraries/ # Shared backend, database, integrations
│ └── helpers/ # Shared utilities
├── docker-compose.yaml
├── docker-compose.production.yaml
└── .env.example
| Layer | Technology |
|---|---|
| Backend API | NestJS 11, TypeScript |
| Frontend | Next.js 15, React 19 |
| Database | PostgreSQL + Prisma 6.5 |
| Cache | Redis |
| Workflow engine | Temporal |
| AI | OpenAI, optional |
| Billing | Polar.sh, optional |
| Storage | Local filesystem, Cloudflare R2, or MinIO |
| Authentication | JWT, GitHub OAuth, Google OAuth, Generic OIDC |
| Monitoring | Sentry |
Temporal for durable scheduling
Scheduled publishing and token-refresh work run through Temporal workflows so background jobs are not tied to one web-process lifetime.
Provider-based integrations
Each social platform is implemented behind a common provider interface. The active registry lives in integration.manager.ts.
Public API first
External tools can use /public/v1, while Node.js consumers can use @postsider/node.
One codebase for hosted and self-hosted deployments
Optional capabilities are controlled through environment configuration. Billing and AI are not required for a self-hosted installation.
Start from the example environment file:
cp .env.example .env
The primary local-development settings are:
| Variable | Purpose |
|---|---|
DATABASE_URL | PostgreSQL connection string |
REDIS_URL | Redis connection string |
JWT_SECRET | JWT signing secret |
BACKEND_URL | URL used to reach the backend |
FRONTEND_URL | URL used to reach the frontend |
NEXT_PUBLIC_BACKEND_URL | Public backend URL embedded in the frontend |
BACKEND_INTERNAL_URL | Backend URL used by internal services |
For production, set a dedicated ENCRYPTION_KEY as documented in .env.example.
The full reference is maintained in:
Local storage is the default:
STORAGE_PROVIDER=local
UPLOAD_DIRECTORY=./uploads
Cloudflare R2 and MinIO are also supported through environment configuration.
Social providers have their own API/OAuth settings. You do not need to configure all 33 providers.
Configure only the services you plan to connect.
PostSider is designed to run on your own infrastructure.
Two Compose files are included:
| File | Purpose |
|---|---|
docker-compose.yaml | Simple local/evaluation stack using the published GHCR image |
docker-compose.production.yaml | Production-oriented stack built from the repository |
The production stack includes the PostSider application, PostgreSQL, Redis, MinIO, Temporal, and supporting services used by the deployment.
For production, use the dedicated guide:
The production Compose file intentionally expects production secrets and deployment-specific values rather than shipping usable defaults.
>=20.17.0 <23.0.010.6.xClone and install:
git clone https://github.com/lumizone/postsider.git
cd postsider
pnpm install
Create your environment file:
cp .env.example .env
Apply database migrations:
pnpm prisma-migrate-deploy
Create the initial admin:
pnpm bootstrap
Start the backend and orchestrator:
pnpm dev
In another terminal, start the frontend:
pnpm dev:frontend
Default development URLs:
Backend: http://localhost:3000
Frontend: http://localhost:4200
# Backend only
pnpm dev:backend
# Orchestrator only
pnpm dev:orchestrator
# Frontend only
pnpm dev:frontend
# Generate Prisma client
pnpm prisma-generate
# Create a Prisma migration
pnpm prisma-migrate-dev
# Apply migrations
pnpm prisma-migrate-deploy
# Build backend + orchestrator
pnpm build
# Build the Node.js SDK
pnpm build:sdk
Contributions are welcome.
Good places to contribute include:
Typical workflow:
git checkout -b feature/my-feature
# make changes
pnpm run build:backend
Then open a pull request with a clear explanation of the change.
For provider-specific contribution steps, see CONTRIBUTING.md.
strictNullChecks across the codebaseIf PostSider is useful to you, consider starring the repository. It helps other developers discover the project.
Bug reports, feature requests, and pull requests are also appreciated.
PostSider is licensed under the GNU Affero General Public License v3.0.
You may use, modify, and distribute PostSider under the terms of the AGPL-3.0. If you run a modified version as a network service, the license requires the corresponding source code to be made available to users of that service.
PostSider
Open-source social media scheduling for humans, teams, and AI agents.