Now supporting Instagram & LinkedIn

You create.
Pennant publishes.

One API for every platform, every format. Connect via MCP or REST and never think about posting schedules again.

Get started

$ claude mcp add --transport http pennant https://pennantpost.com/mcp

Then start OAuth with an email, approve the request from the emailed link, store the returned access_token and refresh_token, and refresh silently later.

Trusted by agents built on

Claude GPT Gemini LangChain CrewAI

How It Works

Three steps. That's it.

Connect your platforms, point your agent at Pennant, and let it handle your social media.

01

Connect your platforms

Link your Instagram, LinkedIn, and more. We handle OAuth so you don't have to. Takes two minutes.

02

Give your agent the tools

Connect via MCP or REST API. Your agent calls get_context, reads your constraints, and knows what's possible.

03

Publish everywhere

Your agent schedules. Pennant validates, converts media, and publishes to every platform at the right time.

Features

Built for agents.
Designed for humans.

Platform constraints are our problem, not yours. Pennant handles the complexity so your agent can focus on the creative decisions.

One post, tailored per platform

Your agent sends content once. Pennant adapts it — right dimensions for Instagram, right character count for LinkedIn.

Smart error messages

"LinkedIn caption is 3,241 characters. Maximum is 3,000. Trim 241 characters." Your agent knows exactly what to fix.

MCP & REST API

Connect however your agent works. Start with MCP auth, then use the full publishing API through the same server. Same formats, same reliability.

Idempotent by design

Network hiccup? Agent retry? No problem. Every request supports idempotency keys. No duplicate posts, ever.

Media processing built in

Upload once. Pennant converts to the right format, size, and aspect ratio for each platform automatically.

Webhooks for everything

Get notified when posts publish, fail, or anything changes. HMAC-signed payloads. Your agent stays in the loop.

The Briefing

One call. Full context.

Your agent calls get_context and gets everything it needs: connected channels, platform constraints, schedule density, and account status. No guessing.

  • Channel info with supported post types
  • Platform constraints per format (character limits, media specs)
  • Schedule density for the next 7 days
  • Account status, plan, and timezone
get_context response
{
  "briefing": "2 active channels. Instagram requires media on every post. 4 open days in the next 7.",
  "channels": [
    {
      "platform": "instagram",
      "account": "@yourcompany",
      "post_types": ["feed", "carousel", "reel"]
    },
    {
      "platform": "linkedin",
      "account": "Your Company",
      "post_types": ["text", "image", "article"]
    }
  ],
  "schedule_density": {
    "next_7_days": 3,
    "open_slots": 4
  }
}

Every platform.
Every format.

Your agent sends content once. Pennant adapts and publishes to every platform you're connected to.

Instagram

Live
Feed Carousel Reel Story

LinkedIn

Live
Text Image Article Document

X (Twitter)

Coming soon
Text Image Thread Poll

Facebook

Coming soon
Post Image Video Reel

TikTok

Coming soon
Video Story Photo

YouTube

Coming soon
Video Short Community

Pinterest

Coming soon
Pin Idea Pin Board

Threads

Coming soon
Text Image Carousel

Bluesky

Coming soon
Text Image

Pricing

Simple pricing.
No surprises.

No per-post fees. No hidden limits. Save with annual billing.

Builder

For teams shipping content daily.

$19/mo

or $15/mo billed annually

  • 10 connected accounts
  • Unlimited scheduled posts
  • Full API + MCP access
  • Webhooks
Get Started
Best Value

Scale

For agencies and high-volume teams.

$39/mo

or $29/mo billed annually

  • Unlimited connected accounts
  • Unlimited scheduled posts
  • Full API + MCP access
  • Webhooks
  • Priority support
Get Started

Stop scheduling.
Start publishing.

Connect your platforms, hand your agent the tools, and move on with your day. Pennant handles the rest.