{"name":"io.github.AutomateLab-tech/content-distribution","slug":"automatelab-tech-content-distribution","title":null,"description":"Publish content to DEV.to, Hashnode, GitHub Discussions, Reddit, Bluesky, LinkedIn, and Medium.","url":"https://mcp.market/server/automatelab-tech-content-distribution","rating":null,"grade":"B","score":71,"certified":false,"status":"active","category":"sales","tags":["sales","devtools"],"presence":{"score":23,"stars":5,"forks":2,"downloads_week":71,"last_push_at":"2026-06-08T11:02:13.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/AutomateLab-tech/content-distribution-mcp","website":null,"version":"2.2.1","remotes":[],"packages":[{"registryType":"npm","identifier":"@automatelab/content-distribution-mcp","version":"2.2.1","transport":{"type":"stdio"},"environmentVariables":[{"description":"DEV.to API key for publishing articles","format":"string","isSecret":true,"name":"DEV_TO_API_KEY"},{"description":"Hashnode personal access token","format":"string","isSecret":true,"name":"HASHNODE_TOKEN"},{"description":"Hashnode publication ID","format":"string","name":"HASHNODE_PUBLICATION_ID"},{"description":"GitHub personal access token for GitHub Discussions","format":"string","isSecret":true,"name":"GITHUB_TOKEN"},{"description":"GitHub repo for Discussions in owner/repo format","format":"string","name":"GITHUB_DISCUSSION_REPO"},{"description":"Reddit OAuth app client ID","format":"string","isSecret":true,"name":"REDDIT_CLIENT_ID"},{"description":"Reddit OAuth app client secret","format":"string","isSecret":true,"name":"REDDIT_CLIENT_SECRET"},{"description":"Reddit account username","format":"string","name":"REDDIT_USERNAME"},{"description":"Reddit account password","format":"string","isSecret":true,"name":"REDDIT_PASSWORD"},{"description":"Bluesky handle (e.g. you.bsky.social)","format":"string","name":"BLUESKY_IDENTIFIER"},{"description":"Bluesky app password","format":"string","isSecret":true,"name":"BLUESKY_PASSWORD"},{"description":"State backend (default: yaml)","format":"string","name":"DISTRIBUTION_BACKEND"},{"description":"Directory for YAML state files (default: ~/.distribution-mcp)","format":"string","name":"DISTRIBUTION_BACKEND_DIR"}]}],"tools":[{"name":"channel.hints","description":"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 channel.hints before composing a variant body to understand channel constraints; use post.publish or post.schedule once you have a valid variant.","write_action":false,"price_micros":0,"input_schema":null},{"name":"post.drain","description":"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 post.drain on a recurring schedule to flush the queue; use post.publish or post.schedule to add new con","write_action":true,"price_micros":0,"input_schema":null},{"name":"post.publish","description":"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 post.publish for immediate-only delivery; use post.schedule when any var","write_action":true,"price_micros":0,"input_schema":null},{"name":"post.schedule","description":"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 post.schedule when any variant needs a future publish time; use","write_action":true,"price_micros":0,"input_schema":null},{"name":"post.status","description":"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 post.status to inspect what has been published, what is queued, or what errored; use post.publish, post.schedule, or post.drain to change state.","write_action":true,"price_micros":0,"input_schema":null},{"name":"post.unpublish","description":"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 post.unpublish to retract a live post; use post.status first to obtain the live_ur","write_action":true,"price_micros":0,"input_schema":null},{"name":"profile.list","description":"Return all distribution profile names configured in the YAML backend. Side effects: read-only; no external HTTP calls. Deterministic given backend state. Use profile.list to discover available profiles before calling post.publish, post.schedule, or subreddit.list; then pass the chosen name as profile_name.","write_action":false,"price_micros":0,"input_schema":null},{"name":"subreddit.list","description":"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 subreddit.list to select a subreddit and obtain flair IDs before composing a reddit: channel variant; pass flair in variant.extras.fla","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":71,"grade":"B","scanned_at":"2026-09-27T17:08:14.179Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-27T17:08:14.190Z","components":{"code":{"score":25,"max":25,"notes":["29 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":8,"max":15,"notes":["last push 111 days ago"]},"identity":{"score":7,"max":10,"notes":["registry namespace matches repository owner"]}},"findings":[],"inputs":{"packages":[{"registryType":"npm","identifier":"@automatelab/content-distribution-mcp","version":"2.2.1","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":3,"publishedAt":"2026-05-21T14:16:43.728Z","repositoryUrl":"git+https://github.com/AutomateLab-tech/content-distribution-mcp.git","weeklyDownloads":71}],"repo":{"found":true,"owner":"AutomateLab-tech","repo":"content-distribution-mcp","archived":false,"pushedAt":"2026-06-08T11:02:13Z","stars":5,"forks":2,"openIssues":3,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/284312388?v=4","ownerCreatedAt":"2026-05-13T12:26:52Z","license":"MIT"},"icon":{"url":"https://avatars.githubusercontent.com/u/284312388?v=4&s=128","source":"github"},"presence":{"stars":5,"forks":2,"downloadsWeek":71,"license":"MIT","lastPushAt":"2026-06-08T11:02:13.000Z","score":23}}}},"grade_history":[],"reviews":[]}