feat(messaging): add inbox, conversation, search, and send tools#235
Draft
5queezer wants to merge 654 commits into
Draft
feat(messaging): add inbox, conversation, search, and send tools#2355queezer wants to merge 654 commits into
5queezer wants to merge 654 commits into
Conversation
- Add weekly schedule (Monday 6am) - Group all GitHub Actions and Docker images as 'CI dependencies' - Group all major updates together - Remove automerge (insufficient test coverage)
- Change package name to linkedin-scraper-mcp for PyPI availability - Add PyPI metadata (authors, license, keywords, classifiers, URLs) - Add id-token permission and publish steps to release workflow - Update README with new uvx install commands and PyPI badge - Update AGENTS.md with uvx command - Create py.typed marker for type checker support Users can now install with: uvx linkedin-scraper-mcp
…kerdaniel#133) - Change package name to linkedin-scraper-mcp for PyPI availability - Add PyPI metadata (authors, license, keywords, classifiers, URLs) - Add id-token permission and publish steps to release workflow - Update README with new uvx install commands and PyPI badge - Update AGENTS.md with uvx command - Create py.typed marker for type checker support Users can now install with: uvx linkedin-scraper-mcp
…ependencies chore(deps): update ci dependencies
…ependencies chore(deps): update ci dependencies
Point dependency at stickerdaniel/linkedin_scraper fork (fix/rate-limit-false-positive) to fix detect_rate_limit() false-firing on React RSC payloads. Also update docs with detailed release workflow notes and bump opencode agent models to gpt-5.3-codex. See also: joeyism/linkedin_scraper#278
…el#139) Point dependency at stickerdaniel/linkedin_scraper fork (fix/rate-limit-false-positive) to fix detect_rate_limit() false-firing on React RSC payloads. Also update docs with detailed release workflow notes and bump opencode agent models to gpt-5.3-codex. See also: joeyism/linkedin_scraper#278
Replace Playwright with Patchright (anti-detection fork) and use launch_persistent_context(user_data_dir=...) for full Chromium profile persistence. This fixes cross-platform session issues where sessions created on macOS failed in Docker (Linux, headless). BREAKING CHANGE: Old session.json files and LINKEDIN_COOKIE env var are no longer supported. Users must re-run --get-session to create a new persistent browser profile at ~/.linkedin-mcp/profile/.
…aniel#143) feat!: Switch to patchright with persistent browser context Replace Playwright with Patchright (anti-detection fork) and use launch_persistent_context(user_data_dir=...) for full Chromium profile persistence. This fixes cross-platform session issues where sessions created on macOS failed in Docker (Linux, headless). BREAKING CHANGE: Old session.json files and LINKEDIN_COOKIE env var are no longer supported. Users must re-run --get-session to create a new persistent browser profile at ~/.linkedin-mcp/profile/. polish the implementation
…ocker-bridge-debug Feature/220 docker bridge debug
Search results pages load a placeholder first, then fill in the actual results via JavaScript. The extractor reads innerText before content loads, causing search_people to return empty sections intermittently. Add wait_for_function for /search/results/ URLs (same pattern as the activity feed fix in stickerdaniel#203). Wait up to 10s for main.innerText > 100 chars before extracting. Tested locally: 100% success rate vs ~60% before the fix. Made-with: Cursor
…ts-content-wait fix(scraping): wait for search results content before extracting
…im_agents.md_to_behavioral_guidance_clean_readme_docker_section docs: Trim AGENTS.md to behavioral guidance, clean README Docker section
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [anthropics/claude-code-action](https://redirect.github.com/anthropics/claude-code-action) ([changelog](https://redirect.github.com/anthropics/claude-code-action/compare/26ec041249acb0a944c0a47b6c0c13f05dbc5b44..df37d2f0760a4b5683a6e617c9325bc1a36443f6)) | action | digest | `26ec041` → `df37d2f` | | [astral-sh/setup-uv](https://redirect.github.com/astral-sh/setup-uv) ([changelog](https://redirect.github.com/astral-sh/setup-uv/compare/5a095e7a2014a4212f075830d4f7277575a9d098..37802adc94f370d6bfd71619e3f0bf239e1f3b78)) | action | digest | `5a095e7` → `37802ad` | | ghcr.io/astral-sh/uv | final | digest | `10902f5` → `3472e43` | | [oven-sh/setup-bun](https://redirect.github.com/oven-sh/setup-bun) ([changelog](https://redirect.github.com/oven-sh/setup-bun/compare/ecf28ddc73e819eb6fa29df6b34ef8921c743461..0c5077e51419868618aeaa5fe8019c62421857d6)) | action | digest | `ecf28dd` → `0c5077e` | | python | stage | digest | `5404df0` → `55e465c` | | [softprops/action-gh-release](https://redirect.github.com/softprops/action-gh-release) ([changelog](https://redirect.github.com/softprops/action-gh-release/compare/a06a81a03ee405af7f2048a818ed3f03bbf83c7b..153bb8e04406b158c6c84fc1615b65b24149a1fe)) | action | digest | `a06a81a` → `153bb8e` | --- ### Configuration 📅 **Schedule**: Branch creation - "before 6am on Monday" (UTC), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 👻 **Immortal**: This PR will be recreated if closed unmerged. Get [config help](https://redirect.github.com/renovatebot/renovate/discussions) if that's undesired. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR was generated by [Mend Renovate](https://mend.io/renovate/). View the [repository job log](https://developer.mend.io/github/stickerdaniel/linkedin-mcp-server). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0My42Ni40IiwidXBkYXRlZEluVmVyIjoiNDMuNjYuNCIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOltdfQ==-->
Closes stickerdaniel#234 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Merged
25 tasks
5 tasks
fd80f60 to
7661f43
Compare
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
Adds 4 new messaging tools to the LinkedIn MCP server (#234):
get_inbox— list recent conversations from messaging inboxget_conversation— read a specific thread by username or thread_idsearch_conversations— search messages by keywordsend_message— send a message to a LinkedIn userChecklist
Code
LinkedInExtractor(scraping/extractor.py)messaging.pytool registration (tools/messaging.py)create_mcp_server()(server.py)"messaging"reference kind (scraping/link_metadata.py)Tests
_make_mock_extractor(tests/test_tools.py)TestMessagingToolsclass (tests/test_tools.py)TestMessagingclass (tests/test_scraping.py)tests/test_link_metadata.py)TestToolTimeouts.tool_namestupleDocs
README.mddocs/docker-hub.mdmanifest.jsonVerify
uv run pytest --cov— 297 passed, 74.32% coverageuv run ruff check . && uv run ruff format .uv run ty checkuv run pre-commit run --all-filesget_inboxget_conversationsearch_conversationssend_messageTest plan
uv run -m linkedin_mcp_server --transport streamable-http --log-level DEBUGget_inboxreturns conversation listget_conversationwith a known username returns messagessearch_conversationsreturns filtered resultssend_messagesends to a test account (Notes
send_messageis the first write operation in the server. It usesreadOnlyHint: falseandopenWorldHint: trueto signal MCP clients to confirm before sending.fields.py— each method navigates directly.Generated with Claude Opus 4.6. Prompt:
Implement the following plan: LinkedIn Messaging Tools🤖 Generated with Claude Code