Overseas Social MCP Server
Allows searching Reddit posts, optionally within a specific subreddit, retrieving hot posts from a subreddit, and fetching top comments from a Reddit post via the official Reddit API.
Allows retrieving recent messages from public Telegram channels, with an optional keyword filter, via the official Telegram MTProto API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Overseas Social MCP Server Search Reddit for recent posts about the new iPhone"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Overseas Social MCP Server
An MCP (Model Context Protocol) server that unifies collection of public data from overseas social platforms behind one set of agent-callable tools, for Claude Code / Codex / Cursor and any MCP-compatible agent:
Platform | Backend | API type | Default |
X / Twitter | unofficial (multi-account rotation) | on | |
official API ✅ | on (needs keys) | ||
Telegram | official MTProto ✅ | on (needs keys) | |
unofficial (high-risk) | off |
Graceful degradation: configure only the platforms you use. If a backend's
dependency or credentials are missing, its tools return a structured
{ok:false, error:"backend_unavailable", details:[...]} payload with setup
instructions — the server never crashes.
⚠️ Personal, low-frequency, research use only. Prefer the official APIs (Reddit, Telegram). Unofficial scraping (X, LinkedIn) may violate ToS and get accounts restricted — use throwaway accounts and keep volumes tiny.
Tools
Tool | Platform | Purpose |
| X | Search recent tweets by query (supports X operators) |
| X | Recent tweets from a user |
| Search posts (optionally in one subreddit) | |
| Hot posts of a subreddit | |
| Top comments of a post | |
| Telegram | Recent messages of a public channel (optional keyword filter) |
| One profile (high-risk) | |
| One company page (high-risk) | |
| – | Capability matrix |
| – | Which backends are installed & configured |
All content tools return the same normalised schema (identical to the mediacrawler-mcp wrapper), so the upstream skill treats every platform uniformly:
{
"ok": true, "platform": "reddit", "count": 12,
"items": [{
"id": "...", "author": "...", "author_id": null,
"content": "...", "like_count": 42, "comment_count": 7,
"publish_time": 1784473477.0, "url": "https://...",
"extra": { "...": "platform-specific fields" }, "raw": null
}],
"warnings": []
}Related MCP server: linkfetch-mcp
Install
# core (always)
pip install --user "mcp>=1.2.0,<2"
# then only the backends you need:
pip install --user twscrape # X
pip install --user praw # Reddit
pip install --user telethon # Telegram
pip install --user linkedin_scraper selenium # LinkedIn (high-risk)
# or everything: pip install --user -e ".[all]"Per-platform setup
Reddit (official — easiest, lowest risk)
Create a script app at https://www.reddit.com/prefs/apps .
Set
OSMCP_REDDIT_CLIENT_ID,OSMCP_REDDIT_CLIENT_SECRET,OSMCP_REDDIT_USER_AGENT.
Telegram (official)
Get
api_id/api_hashat https://my.telegram.org → API development tools.Log in once, yourself, in a terminal (it prompts for api_id / api_hash, phone number, login code and 2FA password):
cd /path/to/overseas-social-mcp && python3 -m overseas_social_mcp.telegram_loginThis writes
OSMCP_TG_API_ID/OSMCP_TG_API_HASH/OSMCP_TG_SESSIONto~/.config/overseas-social-mcp/.env(chmod 600) and creates~/.config/overseas-social-mcp/telegram.session. Every server process loads that env file at startup, so no secrets go into the MCP client config.python3 -m overseas_social_mcp.telegram_login --checkverifies the session without prompting;--resetstarts over.
The session is shared by every server process (one per agent session); a file lock serialises Telegram calls so they don't collide on the SQLite session.
X / Twitter (twscrape)
pip install --user twscrape.Add a logged-in account from browser cookies. Copy
auth_tokenandct0from x.com -> DevTools -> Application -> Cookies, then paste them at the hidden prompt asauth_token=xxx; ct0=yyy:twscrape --db ~/.config/overseas-social-mcp/x_accounts.db add_cookie my_accountAlways pass
--db: the CLI otherwise usesaccounts.dbin the current directory, which the server does not read.OSMCP_X_ACCOUNTS_DBoverrides the path. Use throwaway accounts.
backend_status reports accounts_active. With no active account x_search and
x_user_posts return backend_unavailable, not an empty result.
LinkedIn (high-risk — off by default)
Only enable with a throwaway account, at your own risk:
OSMCP_LINKEDIN_ENABLED=true, OSMCP_LINKEDIN_EMAIL/PASSWORD, OSMCP_CHROMEDRIVER.
See .env.example for all variables.
Register with an MCP client
Claude Code
claude mcp add overseas-social \
--env PYTHONPATH=/path/to/overseas-social-mcp \
--env OSMCP_REDDIT_CLIENT_ID=... \
--env OSMCP_REDDIT_CLIENT_SECRET=... \
-- python -m overseas_social_mcp.serverClaude Desktop / Cursor
Paste examples/claude_desktop_config.snippet.json
into your MCP config and fill in the paths/keys.
Run backend_status first to confirm what's ready.
Test
pip install --user pytest
PYTHONPATH=. pytest -q # no network, no credentials requiredSafety & compliance
Prefer official APIs (Reddit, Telegram); they are the compliant path.
X and LinkedIn backends are unofficial — throwaway accounts, tiny volumes, low frequency; you accept the ToS / account risk.
Do not collect private personal data. Respect platform ToS and local law.
Built-in guardrails: per-call hard cap, local sliding-window rate limit, configurable delays.
License
MIT — see LICENSE. Backends are optional third-party packages that you install yourself and are not bundled here: twscrape (MIT), PRAW (BSD-2-Clause), Telethon (MIT), linkedin_scraper (GPL-3.0 on GitHub). Each is governed by its own license.
Available Tools
10 toolsbackend_statusA
Report which backends are configured & importable (without making calls).
Inputs: no named parameters. Returns: object
linkedin_companyA
Fetch a single LinkedIn company page (industry, size, HQ, about).
HIGH RISK: see linkedin_profile. Disabled by default.
Args: company_url: full https://www.linkedin.com/company/... URL.
Inputs: company_url (required). Returns: object
linkedin_profileA
Fetch a single LinkedIn profile (name, headline, experience, education).
HIGH RISK: violates LinkedIn ToS and may restrict your account. Disabled by default; enable via OSMCP_LINKEDIN_ENABLED=true with a throwaway account.
Args: profile_url: full https://www.linkedin.com/in/... URL.
Inputs: profile_url (required). Returns: object
list_platformsC
List supported platforms and their tools.
Inputs: no named parameters. Returns: object
reddit_post_commentsB
Fetch top-level comments of a Reddit post by its id.
Args: post_id: Reddit submission id (the base36 id, not the full URL). max_count: max comments (default from config, hard-capped).
Inputs: post_id (required), max_count. Returns: object
reddit_searchA
Search Reddit posts (optionally within one subreddit) via the official API.
Args: query: search query. subreddit: optional subreddit name (without r/); searches r/all if omitted. max_count: max posts (default from config, hard-capped).
Inputs: query (required), max_count, subreddit. Returns: object
reddit_subreddit_hotB
Fetch hot posts from a subreddit via the official API.
Args: subreddit: subreddit name (without r/). max_count: max posts (default from config, hard-capped).
Inputs: subreddit (required), max_count. Returns: object
telegram_channel_messagesA
Fetch recent messages from a public Telegram channel or group (optionally filtered).
Args: channel: channel/group username (with or without @), a t.me link (t.me/name, t.me/s/name, t.me/name/123), or a numeric -100… id. query: optional keyword to filter messages server-side. max_count: max messages (default from config, hard-capped).
Items are newest first; publish_time is UTC. Requires telethon +
api_id/api_hash + an authorized session (one-time interactive login:
python3 -m overseas_social_mcp.telegram_login, run by the user).
Inputs: channel (required), query, max_count. Returns: object
x_searchA
Search recent public tweets on X/Twitter matching a query.
Args:
query: X search query (supports X search operators, e.g. from:user,
lang:en, since:2026-01-01).
max_count: max tweets to return (default from config, hard-capped).
Returns normalised items: {id, author, content, like_count, comment_count, publish_time, url, extra:{retweet_count, view_count, lang}}. Requires twscrape installed + X accounts added & logged in.
Inputs: query (required), max_count. Returns: object
x_user_postsA
Fetch recent public tweets from a specific X/Twitter user.
Args: username: handle with or without leading @. max_count: max tweets (default from config, hard-capped).
Inputs: username (required), max_count. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Each tool is generally identifiable by platform + resource/action (reddit_search vs reddit_subreddit_hot, linkedin_profile vs linkedin_company, x_search vs x_user_posts). The only mild overlaps are reddit_search with a subreddit argument versus reddit_subreddit_hot, and list_platforms versus backend_status, both of which are clarified by the descriptions.
Nine of ten tools follow a predictable platform_operation snake_case pattern (reddit_*, telegram_*, linkedin_*, x_*). The two meta tools list_platforms and backend_status break the platform-prefix convention, but the overall scheme remains readable and consistent.
Ten tools is well within the sweet spot for a multi-platform read-only research server, and each tool maps to a distinct platform capability. No tool feels redundant or padded.
Core read operations are covered per platform, but there are notable gaps: no Telegram channel search or discovery, no LinkedIn search (only direct URL fetches), no Reddit user/subreddit listing, and no unified cross-platform search despite the server's 'overseas social' framing. These gaps create dead ends for discovery-style research workflows.
Maintenance
Related MCP Connectors
Scrape X, Reddit, LinkedIn, GitHub, Instagram and TikTok data as tools for AI agents.
Search and read public data from X/Twitter, Reddit, YouTube, Instagram, TikTok, Facebook, Threads, Bluesky, Trustpilot, Amazon, Google Maps, news, forums and the web. 90+ read-only tools plus ready-made research playbooks (lead finding, brand monitoring, review mining). Hosted: connect with an API key; 50 free requests per endpoint each month.
X (Twitter) search, profiles and trends, YouTube search, video stats and comments, TikTok comments.
Give your agent live data from Twitter, Reddit, the web and GitHub. No API keys, no scraping stack.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides AI agents with unified access to 21 social media platforms and 105 endpoints for retrieving profiles, posts, comments, search results, trending content, and analytics without per-platform authentication.4202 npmMIT
- AlicenseBqualityCmaintenanceEnables AI agents to search and retrieve LinkedIn jobs, profiles, companies, people, posts, reactions, groups, and inbox conversations through typed MCP tools, with safety limits and no browser automation.2466 npmMIT
- AlicenseAqualityCmaintenanceEnables agents to retrieve the contents of public social media posts — text, author, date, engagement counts, links, photos, and video frames — from X, Instagram, Threads, Facebook, LinkedIn, Bluesky, Mastodon, YouTube, Vimeo, Tumblr, Pinterest, and Reddit by simply passing a post URL. It works entirely without logins, cookies, or API keys, reading only what each site already exposes publicly.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables unified access to X/Twitter and Reddit for searching and reading posts, profiles, feeds, and comments, plus authenticated actions such as posting, replying, liking, following, bookmarking, subscribing, and saving.MIT