Content Distribution MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DISTRIBUTION_BACKEND | No | State backend (yaml only in v1) | yaml |
| DISTRIBUTION_BACKEND_DIR | No | Directory for YAML state files | ~/.distribution-mcp |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| publishA | Publish one or more channel variants immediately. Side effects: makes external HTTP requests to each channel platform; writes publish state to the local YAML backend; requires valid credentials in the named profile. Idempotent on (content.id, channel) — re-running with the same IDs returns cached state without re-posting. Use publish for immediate-only delivery; use schedule when any variant needs a future schedule_at; use drain to flush a previously built queue. |
| scheduleA | Enqueue channel variants with schedule_at for future publishing; variants without schedule_at are published immediately. Side effects: writes entries to the local YAML schedule store; makes external HTTP requests for any immediately-published variants; requires credentials in the named profile. Idempotent on (content.id, channel). Use schedule when any variant needs a future publish time; use publish for all-immediate delivery; use drain to process the scheduled queue later. |
| drainA | Fire all scheduled posts due at or before the given time boundary. Side effects: makes external HTTP requests for each due entry; writes results to the YAML backend. Idempotent — already-published (content.id, channel) pairs are skipped; no-op when no entries are due. Safe to call from cron. Use drain on a recurring schedule to flush the queue; use publish or schedule to add new content; use status to inspect results after drain runs. |
| statusA | Return publish state for content pieces. Filters by content_id, channel, or both; returns all entries when neither is given. Side effects: read-only; no external HTTP calls; no auth needed. Deterministic given unchanged backend state. Use status to inspect what has been published, what is queued, or what errored; use publish, schedule, or drain to change state. |
| unpublishA | Best-effort delete of a published post on the target platform. Side effects: makes an external HTTP DELETE or update request; DEV.to sets published=false (soft delete); platforms without a delete API return success=false without error. Non-idempotent — calling on an already-deleted URL may return a platform 404. Use unpublish to retract a live post; use status first to obtain the live_url; use publish to re-publish after an unpublish. |
| hintsA | Return static per-channel metadata: character limits, Markdown support flags, tag vocabulary, and CTA placement rules. Side effects: read-only; no external HTTP calls; no auth needed. Fully deterministic — returns compile-time adapter constants. Use hints before composing a variant body to understand channel constraints; use publish or schedule once you have a valid variant. |
| list_profilesA | Return all distribution profile names configured in the YAML backend. Side effects: read-only; no external HTTP calls. Deterministic given backend state. Use list_profiles to discover available profiles before calling publish, schedule, or list_subreddits; then pass the chosen name as profile_name. |
| list_subredditsA | Return all subreddits in the Subreddit Catalog with cooldown windows, flair vocabulary, and last-posted metadata. Optionally filtered to subreddits allowed by the named profile. Side effects: read-only; no external HTTP calls. Deterministic given backend state. Use list_subreddits to select a subreddit and obtain flair IDs before composing a reddit: channel variant; pass flair in variant.extras.flair. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Each tool targets a distinct function: flushing, metadata retrieval, listing, publishing, scheduling, status checking, and deletion. No two tools have overlapping purposes, ensuring clear selection.
Most tools follow a verb pattern (drain, publish, schedule, unpublish) or list_ prefix (list_profiles, list_subreddits), but hints and status are nouns. The inconsistency is minor and does not hinder understanding.
Eight tools is well-scoped for a content distribution server, covering core operations without being overwhelming. Each tool has a clear role.
The tool set covers the full lifecycle: discovery (list_profiles, list_subreddits, hints), publishing (publish, schedule, drain), status checking (status), and deletion (unpublish). No obvious gaps.