Add Hermes Tweet Twitter/X adapter#2
Open
kriptoburak wants to merge 15 commits into
Open
Conversation
…flow - adapters/linkedin.py: wraps LinkedIn Posts API (rest/posts, YYYYMM versioning), handles personal + org-page channels, auto-rotates expired access tokens via refresh token, 429 retry, idempotency, canonical-URL footer, unpublish via DELETE - adapters/linkedin_oauth.py: OAuth 2.0 helper — is_token_expired, refresh_access_token, run_install_flow (local HTTP redirect capture, userinfo person-URN resolution) - cli.py: `linkedin install` subcommand — browser OAuth dance, tokens merged into named distribution profile - tests/test_linkedin_adapter.py: 40 tests covering all non-OAuth paths Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
All five browser adapters (linkedin, medium, twitter, hashnode, coderlegion) and the reddit adapter had optional Playwright pre-fill blocks that are no longer needed. Browser automation is out of scope: non-API platforms are supported by draft generation + compose URL only. The operator pastes manually. Changes: - Strip _playwright_prefill() function from all five browser adapter files - Remove prefill/playwright_prefill profile-extras blocks from publish() - Simplify open-pending CLI command (remove --no-prefill flag, drop asyncio.run) - Remove playwright optional-dep entries from pyproject.toml - Replace stale PRAW-based reddit tests with browser-fallback tests (203 pass) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- LinkedIn: Manual (browser) → Auto (OAuth 2.0 Posts API via `linkedin install`) - Reddit: Auto-gated (PRAW) → Manual (browser, draft + pre-filled submit URL) - Remove [browser] extra and `playwright install chromium` from Install section - Remove stale "Reddit gate logic" reference from spec.md pointer Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces the Python/pip implementation with a TypeScript/Node.js MCP
server published to npm as @ratamaha/content-distribution-mcp.
Install: npx @ratamaha/content-distribution-mcp
Config: { "command": "npx", "args": ["-y", "@ratamaha/content-distribution-mcp"] }
- All 8 MCP tools preserved (publish, schedule, drain, status, unpublish,
hints, list_profiles, list_subreddits)
- Adapters: devto, hashnode, github-discussions, reddit, bluesky,
browser-fallback for medium/linkedin/twitter
- YAML backend unchanged in behaviour; stored in ~/.distribution-mcp/
- Pure fetch() — no Python, no pip, no virtualenv
- Requires Node.js 18+
Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
Marketing improvements: - Lead with outcome: publish everywhere without platform friction - Add 'The Problem It Solves' section addressing pain points: * Format differences across platforms (Reddit, Twitter, DEV.to) * Platform rules (cooldowns, flair, automoderator gates) * State management chaos * Auth friction (OAuth, credentials, browser automation) - Add 'How It Works' section explaining solution simply - Reframe benefits: write once, adapt per-channel, scale safely Company branding: - Change @ratamaha → @automatelab throughout (install, config examples, n8n docs) - Align with official company organization
Marketing improvements: - Lead with outcome: publish everywhere without platform friction - Add 'The Problem It Solves' section addressing 3 core pain points: * Format differences across platforms (Reddit, Twitter, DEV.to) * Platform rules (cooldowns, flair, automoderator gates) * State management chaos - Add 'How It Works' section explaining solution simply - Reframe benefits: write once, adapt per-channel, scale safely Company branding: - Change @ratamaha → @automatelab throughout (install, config examples, n8n docs) - Align with official company organization
…t-selection improvements
- Add glama.json with maintainer claim - Add .describe() to every ContentSchema and VariantSchema field - Rewrite all 8 tool descriptions to cover: what it does, side effects, determinism, and when to use vs sibling tools (Glama quality-score gates) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Replace startCommand-only config with commandFunction (JS expression) so Smithery's scanner can probe tool capabilities - Conditionally pass DISTRIBUTION_BACKEND_DIR only when set - Add icon.svg (indigo hub-and-spoke) for listing thumbnail
- Migrate from server.tool() to server.registerTool() so each tool can declare an outputSchema (callers type-check responses) and MCP annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint, title). - Rename all 8 tools to dot-notation forming a navigable tree: post.publish, post.schedule, post.drain, post.status, post.unpublish, channel.hints, profile.list, subreddit.list. - Tools now return structuredContent alongside text content, matching the declared outputSchema. - Update README to document the new surface and mark v2.2.0 as a breaking change for callers using the old flat names.
2.2.1 was published to npm without committing the bump to git, leaving package.json drifted at 2.2.0. Bumping git to match closes the drift. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
twitterandxchannels.Validation
npm cinpm testgit diff --cached --check