@anaella/mcp
v0.2.2
Published
MCP server for anaella.com — schedule and publish social posts via the /v1 API.
Readme
@anaella/mcp
An MCP (Model Context Protocol) server for anaella.com — schedule and
publish social posts to your connected channels via the anaella /v1 API, from any MCP client
(Claude, Claude Code, Cursor, etc.).
It's hosted at https://api.anaella.com/mcp (Streamable HTTP), or you can run it locally over
stdio.
Client configuration
Remote (recommended):
{ "mcpServers": { "anaella": {
"url": "https://api.anaella.com/mcp",
"headers": { "Authorization": "Bearer ana_..." }
}}}Local (stdio):
{ "mcpServers": { "anaella": {
"command": "npx", "args": ["-y", "@anaella/mcp"],
"env": { "ANAELLA_API_KEY": "ana_..." }
}}}Get an API key (ana_...) from your anaella organization settings.
Tools
- list_channels — List the connected social channels for your organization. Call this
first to get the channel ids you pass to
create_post. - create_post — Create and (optionally) publish a post to one or more channels.
channels: string[](required) — channel ids fromlist_channelstext?: string— post text / captionwhen?: string—"now"publishes immediately,"draft"(default) saves without publishing, or an ISO-8601 timestamp schedules itmedia?: { url: string }[]— public file URLs the API downloadstype?: "post" | "reel" | "thread" | "story"— defaults to"post"firstComment?: string- Publishing is asynchronous — poll
get_postfor the final per-channel status.
- list_posts — List recent posts for your organization with their per-channel status.
limit?: number(1-100),cursor?: number
- get_post — Get one post by id, including its per-channel publish status.
id: string
- delete_post — Delete a draft or cancel a scheduled post by id.
id: string
Environment variables
ANAELLA_API_KEY— required for stdio mode; yourana_...API key.ANAELLA_API_URL— base URL for the anaella API. Defaults tohttps://api.anaella.com.
In remote (Streamable HTTP) mode the API key is instead passed per-request as an
Authorization: Bearer ana_... header.
Local development
bun install
bun run build # tsup -> dist/index.js (stdio) + dist/http.js (Streamable HTTP)
bun run dev # tsup --watch
bun testSmoke test
bun run smoke runs an opt-in, live smoke test against a real anaella API: it lists your
channels, creates a draft post (never publishes), then deletes it. It's a no-op unless
ANAELLA_SMOKE_KEY is set to a real ana_... key.
ANAELLA_SMOKE_KEY=ana_... ANAELLA_API_URL=https://api.anaella.com bun run smokeDocker
Build context is this package directory (packages/mcp) — the image is self-contained and has
no @anaella/* workspace dependencies to resolve.
cd packages/mcp
docker build -t anaella-mcp:local .
docker run -d -p 3000:3000 -e ANAELLA_API_URL=https://api.anaella.com anaella-mcp:local
curl http://localhost:3000/health # -> okThe container runs the Streamable HTTP server (node dist/http.js), exposing GET /health
and POST /mcp (requires Authorization: Bearer ana_...).
