Fediverse MCP Server
Pricing
from $3.00 / 1,000 read operations
Fediverse MCP Server
Fediverse MCP server for Claude, ChatGPT and Cursor: 16 read-only tools fetch public posts, threads, profiles and trends from Bluesky, 9 Mastodon and 7 Lemmy instances, and search hashtags and communities. No login needed, author opt-outs honored, every answer links the original.
Pricing
from $3.00 / 1,000 read operations
Rating
0.0
(0)
Developer
MrBridge
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
5 days ago
Last modified
Categories
Share
Fediverse MCP Server
Fediverse MCP Server connects Claude, ChatGPT, Cursor and any other MCP client to public posts on Bluesky, Mastodon and Lemmy. Its 16 read-only tools search posts, hashtags and communities, open threads and profiles, and read what is trending. You need no account on any of the three networks, only your Apify token.
Ask Claude what the selfhosted community on lemmy.world talked about this week. It calls fedi_list_lemmy_posts with sort: top_week, gets the top posts with their titles, scores, comment counts and links, then opens the one you pick with fedi_get_lemmy_post to read the comments underneath. Every answer names its source, links the original post and says what it left out.
What this server exposes
This server gives an MCP client read-only access to public posts on three decentralised networks: the Bluesky public AppView (https://public.api.bsky.app), nine Mastodon instances and seven Lemmy instances whose terms were read before the build. Its 16 tools search posts, accounts, hashtags and communities, read threads, profiles and trends, and describe the instances themselves. Two of them are the search and fetch pair that ChatGPT deep research expects. No credentials are needed and no account is used anywhere: every request is an anonymous read of a public API, and nothing is written upstream.
Tools
| Tool | What it answers | Billed event |
|---|---|---|
fedi_search_bluesky | Search Bluesky posts or accounts | tool-read |
fedi_get_bluesky_profile | Get a Bluesky profile | tool-read |
fedi_get_bluesky_author_posts | Get recent posts of a Bluesky account | tool-read |
fedi_get_bluesky_thread | Get a Bluesky post with its thread | tool-read |
fedi_get_bluesky_trending | Get Bluesky trending topics | tool-read |
fedi_get_mastodon_trends | Get Mastodon trends | tool-read |
fedi_get_mastodon_hashtag_posts | Get Mastodon posts with a hashtag | tool-read |
fedi_search_mastodon | Search Mastodon hashtags or accounts | tool-read |
fedi_get_mastodon_account | Get a Mastodon account and its recent posts | tool-read |
fedi_get_mastodon_thread | Get a Mastodon post with its thread | tool-read |
fedi_get_instance_info | Get reviewed instances and their rules | tool-read |
fedi_search_lemmy | Search Lemmy posts or communities | tool-read |
fedi_list_lemmy_posts | List Lemmy posts of a community or an instance | tool-read |
fedi_get_lemmy_post | Get a Lemmy post with its comments | tool-read |
search | Search | tool-read |
fetch | Fetch | tool-read |
fedi_search_bluesky: Search Bluesky posts or accounts
Use this when you need public Bluesky posts about a topic (what people say about X), or Bluesky accounts matching a name or interest. Do not use for one known account (use fedi_get_bluesky_profile or fedi_get_bluesky_author_posts) or for Mastodon and Lemmy. Bluesky sometimes refuses post search without a login: the tool then answers UPSTREAM_BLOCKED, and account search still works. Parameters: query (text, supports quoted phrases and #hashtags, e.g. "rust borrow checker"), type ("posts" default or "accounts"), sort ("latest" default or "top", posts only), since and until (YYYY-MM-DD, posts only), language (ISO 639-1 code, e.g. "en", posts only), limit (1-40, default 20), offset (default 0, within the first 100 hits), response_format ("concise" default, or "detailed" for languages, tags, links, image alt texts, quoted post and labels). Accounts that ask not to be shown to logged-out viewers and content hidden by Bluesky moderation are left out and counted in omitted.
| Parameter | Type | Required | Example |
|---|---|---|---|
query | string | yes | "rust borrow checker" |
type | "posts" or "accounts" | no | "posts" |
sort | "latest" or "top" | no | "top" |
since | string | no | "2026-09-01" |
until | string | no | "2026-09-28" |
language | string | no | "en" |
limit | integer | no | 20 |
offset | integer | no | 0 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { query, type, posts[], accounts[], hits_total, notice, pagination, omitted, attribution }. Upstream: Bluesky AppView. Cache: live (30 seconds). Read-only.
fedi_get_bluesky_profile: Get a Bluesky profile
Use this when you need the public profile of one Bluesky account: display name, bio, website, follower, following and post counts, creation date. Do not use for the account posts (use fedi_get_bluesky_author_posts) or to find an account by topic (use fedi_search_bluesky with type "accounts"). Parameter: actor (handle, DID or profile link, e.g. "bsky.app"). An account that asks not to be shown to logged-out viewers answers NOT_FOUND.
| Parameter | Type | Required | Example |
|---|---|---|---|
actor | string | yes | "bsky.app" |
Returns { handle, did, display_name, description, pronouns, website, followers, following, posts, created_at, url, attribution }. Upstream: Bluesky AppView. Cache: live (30 seconds). Read-only.
fedi_get_bluesky_author_posts: Get recent posts of a Bluesky account
Use this when you need what one Bluesky account posted recently (newest first, up to its latest 100 feed items). Do not use for a topic across accounts (use fedi_search_bluesky) or for one post and its replies (use fedi_get_bluesky_thread). Parameters: actor (handle, DID or profile link, e.g. "bsky.app"), filter ("posts" default without replies, "posts_and_replies", "media", "threads"), include_reposts (boolean, default false), limit (1-40, default 20), offset (default 0), response_format ("concise" default, or "detailed" for languages, tags, links, image alt texts, quoted post and labels). An account that asks not to be shown to logged-out viewers answers NOT_FOUND.
| Parameter | Type | Required | Example |
|---|---|---|---|
actor | string | yes | "bsky.app" |
filter | "posts" or "posts_and_replies" or "media" or "threads" | no | "posts" |
include_reposts | boolean | no | false |
limit | integer | no | 20 |
offset | integer | no | 0 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { account, posts[], notice, pagination, omitted, attribution }. Upstream: Bluesky AppView. Cache: live (30 seconds). Read-only.
fedi_get_bluesky_thread: Get a Bluesky post with its thread
Use this when you need one Bluesky post with the posts it replies to and the replies it received. Do not use for a topic search (use fedi_search_bluesky) or for an account timeline (use fedi_get_bluesky_author_posts). Parameters: post (post link or AT URI, e.g. "https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l"), depth (reply levels 0-4, default 2), parent_height (parent levels 0-10, default 3), max_replies (1-50, default 20), response_format ("concise" default, or "detailed" for languages, tags, links, image alt texts, quoted post and labels). Replies from accounts that ask not to be shown to logged-out viewers, hidden or deleted posts are left out and counted in omitted.
| Parameter | Type | Required | Example |
|---|---|---|---|
post | string | yes | "https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l" |
depth | integer | no | 2 |
parent_height | integer | no | 3 |
max_replies | integer | no | 20 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { post, parents[], replies[], notice, omitted, attribution }. Upstream: Bluesky AppView. Cache: live (30 seconds). Read-only.
fedi_get_bluesky_trending: Get Bluesky trending topics
Use this when you need the topics trending on Bluesky right now, with a link to follow each one. Do not use for the posts about a topic (use fedi_search_bluesky) or for Mastodon trends (use fedi_get_mastodon_trends). Relies on an unspecced Bluesky method that may change without notice. Parameter: limit (1-25, default 10).
| Parameter | Type | Required | Example |
|---|---|---|---|
limit | integer | no | 10 |
Returns { topics[], attribution }. Upstream: Bluesky AppView. Cache: intraday (5 minutes). Read-only.
fedi_get_mastodon_trends: Get Mastodon trends
Use this when you need what is trending on one reviewed Mastodon instance: hashtags, shared news links or popular posts. Do not use for the posts under one hashtag (use fedi_get_mastodon_hashtag_posts) or for Bluesky trends (use fedi_get_bluesky_trending). Parameters: kind ("tags" default, "links" or "posts"), instance (reviewed Mastodon instance, default "mastodon.social"), limit (1-40, default 20), offset (default 0), response_format ("concise" default, or "detailed" for daily history, link descriptions and post details). Tags and links cover the top 20 of the instance with their 7-day totals. Posts cover its top 40, local public posts only.
| Parameter | Type | Required | Example |
|---|---|---|---|
kind | "tags" or "links" or "posts" | no | "tags" |
instance | string | no | "mastodon.social" |
limit | integer | no | 20 |
offset | integer | no | 0 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { instance, kind, tags[], links[], posts[], notice, pagination, omitted, attribution }. Upstream: Mastodon (reviewed instances). Cache: intraday (5 minutes). Read-only.
fedi_get_mastodon_hashtag_posts: Get Mastodon posts with a hashtag
Use this when you need recent public Mastodon posts carrying a hashtag, written on one reviewed instance (newest first). Do not use for keyword search in post text (Mastodon does not offer it without a login), for Bluesky (use fedi_search_bluesky) or Lemmy (use fedi_search_lemmy). Parameters: hashtag (with or without #, e.g. "opensource"), instance (reviewed Mastodon instance, default "mastodon.social"), older_than_id (optional post id, reads the window of 40 posts older than it, use the returned next_older_than_id), limit (1-40, default 20), offset (default 0, within the window of 40), response_format ("concise" default, or "detailed" for language, tags, link card, media alt texts, poll and edit date). Only public posts from local accounts that did not opt out of indexing are returned, the others are counted in omitted.
| Parameter | Type | Required | Example |
|---|---|---|---|
hashtag | string | yes | "opensource" |
instance | string | no | "mastodon.social" |
older_than_id | string | no | "115260000000000001" |
limit | integer | no | 20 |
offset | integer | no | 0 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { instance, hashtag, posts[], next_older_than_id, notice, pagination, omitted, attribution }. Upstream: Mastodon (reviewed instances). Cache: live (30 seconds). Read-only.
fedi_search_mastodon: Search Mastodon hashtags or accounts
Use this when you need Mastodon hashtags matching a word (with their 7-day use) or accounts of one reviewed instance matching a name or topic. Do not use for post text search (Mastodon does not offer it without a login, use fedi_get_mastodon_hashtag_posts) or for one known account (use fedi_get_mastodon_account). Parameters: query (text, e.g. "climate"), type ("accounts" default or "hashtags"), instance (reviewed Mastodon instance, default "mastodon.social"), limit (1-40, default 20), offset (default 0, within the first 40 matches), response_format ("concise" default, or "detailed" for counts, creation dates and daily history). Accounts from other servers, outside the profile directory or opted out of indexing are left out and counted in omitted.
| Parameter | Type | Required | Example |
|---|---|---|---|
query | string | yes | "climate" |
type | "accounts" or "hashtags" | no | "hashtags" |
instance | string | no | "mastodon.social" |
limit | integer | no | 20 |
offset | integer | no | 0 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { instance, query, type, accounts[], hashtags[], notice, pagination, omitted, attribution }. Upstream: Mastodon (reviewed instances). Cache: live (30 seconds). Read-only.
fedi_get_mastodon_account: Get a Mastodon account and its recent posts
Use this when you need the public profile of one Mastodon account on a reviewed instance, with its recent public posts. Do not use for finding accounts by topic (use fedi_search_mastodon) or for Bluesky accounts (use fedi_get_bluesky_profile). Parameters: account (username, full handle or profile link, e.g. "@Gargron@mastodon.social"), instance (reviewed Mastodon instance, default "mastodon.social", a full handle selects its own instance), include_posts (boolean, default true), exclude_replies (boolean, default true), posts_limit (1-40, default 10), response_format ("concise" default, or "detailed" for post details). Accounts that opted out of indexing answer NOT_FOUND. Profile fields (which can hold contact details) are never returned.
| Parameter | Type | Required | Example |
|---|---|---|---|
account | string | yes | "@Gargron@mastodon.social" |
instance | string | no | "mastodon.social" |
include_posts | boolean | no | true |
exclude_replies | boolean | no | true |
posts_limit | integer | no | 10 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { account, posts[], notice, omitted, attribution }. Upstream: Mastodon (reviewed instances). Cache: live (30 seconds). Read-only.
fedi_get_mastodon_thread: Get a Mastodon post with its thread
Use this when you need one Mastodon post from a reviewed instance with the posts it answers and the replies written on the same instance. Do not use for posts under a hashtag (use fedi_get_mastodon_hashtag_posts) or for Bluesky threads (use fedi_get_bluesky_thread). Parameters: post (post link or id, e.g. "https://mastodon.social/@Gargron/109318195540000000"), instance (reviewed Mastodon instance for a bare id, default "mastodon.social", a link selects its own instance), max_replies (1-50, default 20), response_format ("concise" default, or "detailed" for language, tags, link card, media alt texts and poll). Replies from other servers or from accounts that opted out of indexing are left out and counted in omitted.
| Parameter | Type | Required | Example |
|---|---|---|---|
post | string | yes | "https://mastodon.social/@Gargron/109318195540000000" |
instance | string | no | "mastodon.social" |
max_replies | integer | no | 20 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { instance, post, ancestors[], replies[], notice, omitted, attribution }. Upstream: Mastodon (reviewed instances). Cache: live (30 seconds). Read-only.
fedi_get_instance_info: Get reviewed instances and their rules
Use this when you need the Mastodon or Lemmy instances this server reads, or the name, description, rules, size and version of one of them. Do not use for posts or accounts (use the Mastodon or Lemmy tools) or for Bluesky, which is a single service. Parameters: network ("mastodon" or "lemmy"), instance (optional hostname of a reviewed instance, e.g. "mastodon.social"). Without instance, the answer lists the reviewed instances with the terms page read for each, and makes no upstream call.
| Parameter | Type | Required | Example |
|---|---|---|---|
network | "mastodon" or "lemmy" | yes | "mastodon" |
instance | string | no | "mastodon.social" |
Returns { network, instances[], instance, attribution }. Upstream: Mastodon (reviewed instances), Lemmy (reviewed instances). Cache: hourly (1 hour). Read-only.
fedi_search_lemmy: Search Lemmy posts or communities
Use this when you need Lemmy discussions (link-aggregator posts with comments) about a topic, or Lemmy communities about it, on one reviewed instance. Do not use for a community front page (use fedi_list_lemmy_posts) or for one post with its comments (use fedi_get_lemmy_post). Lemmy throttles searches strictly: prefer fedi_list_lemmy_posts when you know the community. Parameters: query (text, e.g. "reverse proxy"), type ("posts" default or "communities"), instance (reviewed Lemmy instance, default "lemmy.world"), sort (default "top_all", see the enum), page (upstream page of 50, 1-10, default 1), limit (1-40, default 20), offset (default 0, within the page), response_format ("concise" default, or "detailed" for longer bodies, votes, edit date and flags). Only content written on the instance, safe for work and not deleted is returned, the rest is counted in omitted.
| Parameter | Type | Required | Example |
|---|---|---|---|
query | string | yes | "reverse proxy" |
type | "posts" or "communities" | no | "posts" |
instance | string | no | "lemmy.world" |
sort | "hot" or "active" or "new" or "top_day" or "top_week" or "top_month" or "top_year" or "top_all" or "most_comments" | no | "top_all" |
page | integer | no | 1 |
limit | integer | no | 20 |
offset | integer | no | 0 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { instance, query, type, posts[], communities[], next_page, notice, pagination, omitted, attribution }. Upstream: Lemmy (reviewed instances). Cache: live (30 seconds). Read-only.
fedi_list_lemmy_posts: List Lemmy posts of a community or an instance
Use this when you need the front page of a Lemmy community (hot, new or top posts) or of a whole reviewed instance. Do not use for a keyword search (use fedi_search_lemmy) or for one post with its comments (use fedi_get_lemmy_post). Parameters: community (optional, e.g. "selfhosted", "!selfhosted@lemmy.world" or a community link, a handle selects its instance), instance (reviewed Lemmy instance, default "lemmy.world"), sort (default "hot", or "active", "new", "top_day", "top_week", "top_month", "top_year", "top_all", "most_comments"), page (upstream page of 50, 1-10, default 1), limit (1-40, default 20), offset (default 0, within the page), response_format ("concise" default, or "detailed" for longer bodies, votes, edit date and flags). Only posts written on the instance, safe for work and not deleted are returned, the rest is counted in omitted.
| Parameter | Type | Required | Example |
|---|---|---|---|
community | string | no | "selfhosted" |
instance | string | no | "lemmy.world" |
sort | "hot" or "active" or "new" or "top_day" or "top_week" or "top_month" or "top_year" or "top_all" or "most_comments" | no | "hot" |
page | integer | no | 1 |
limit | integer | no | 20 |
offset | integer | no | 0 |
response_format | "concise" or "detailed" | no | "concise" |
Returns { instance, community, posts[], next_page, notice, pagination, omitted, attribution }. Upstream: Lemmy (reviewed instances). Cache: live (30 seconds). Read-only.
fedi_get_lemmy_post: Get a Lemmy post with its comments
Use this when you need one Lemmy post from a reviewed instance with its body and the comments written on the same instance. Do not use for listing or searching posts (use fedi_list_lemmy_posts or fedi_search_lemmy). Parameters: post (post link or id, e.g. "https://lemmy.world/post/3200001"), instance (reviewed Lemmy instance for a bare id, default "lemmy.world", a link selects its own instance), max_comments (1-50, default 20), comment_sort ("top" default, "new", "hot" or "old"), response_format ("concise" default, or "detailed" for longer texts, votes and flags). Comments from other servers, deleted or removed ones are left out and counted in omitted.
| Parameter | Type | Required | Example |
|---|---|---|---|
post | string | yes | "https://lemmy.world/post/3200001" |
instance | string | no | "lemmy.world" |
max_comments | integer | no | 20 |
comment_sort | "top" or "new" or "hot" or "old" | no | "top" |
response_format | "concise" or "detailed" | no | "concise" |
Returns { instance, post, comments[], notice, omitted, attribution }. Upstream: Lemmy (reviewed instances). Cache: live (30 seconds). Read-only.
search: Search
Use this when ChatGPT needs public fediverse posts about a topic: Bluesky posts, Lemmy discussions and, for a one-word query, posts with that Mastodon hashtag. Do not use for a person or an account (handles, DIDs and from: or author: operators are refused), use the network-specific tools instead. Parameter query (text), e.g. "reverse proxy".
| Parameter | Type | Required | Example |
|---|---|---|---|
query | string | yes | "reverse proxy" |
Returns { results[], notices[] }. Upstream: Bluesky AppView, Lemmy (reviewed instances), Mastodon (reviewed instances). Cache: live (30 seconds). Read-only.
fetch: Fetch
Use this when ChatGPT needs the full text of one result returned by search: the post, the post it answers and its replies or comments. Do not use for ids that did not come from search. Parameter id (from search), e.g. "lemmy:lemmy.world:3200001".
| Parameter | Type | Required | Example |
|---|---|---|---|
id | string | yes | "lemmy:lemmy.world:3200001" |
Returns { id, title, text, url, metadata, notices[] }. Upstream: Bluesky AppView, Lemmy (reviewed instances), Mastodon (reviewed instances). Cache: live (30 seconds). Read-only.
Connect
Endpoint (Streamable HTTP): https://mrbridge--fediverse-mcp.apify.actor/mcp
Every client authenticates with your Apify API token, found in Apify Console > Settings > API & Integrations. Clients that support custom headers send it as Authorization: Bearer <token>. The others use the ?token= URL variant, which must be treated as a secret: keep it out of commits, screenshots and shared logs.
Claude Code
$claude mcp add --transport http fediverse "https://mrbridge--fediverse-mcp.apify.actor/mcp" --header "Authorization: Bearer ${APIFY_TOKEN}"
Cursor, VS Code and other JSON configurations
{"mcpServers": {"fediverse": {"type": "http","url": "https://mrbridge--fediverse-mcp.apify.actor/mcp","headers": {"Authorization": "Bearer ${APIFY_TOKEN}"}}}}
claude.ai and Claude Desktop
Add a custom connector with the URL https://mrbridge--fediverse-mcp.apify.actor/mcp?token=YOUR_APIFY_TOKEN and no authentication. Prefilled link (replace the token placeholder before saving): add Fediverse MCP Server to Claude.
ChatGPT (developer mode)
Settings > Apps > Create, URL https://mrbridge--fediverse-mcp.apify.actor/mcp?token=YOUR_APIFY_TOKEN, authentication "No authentication". ChatGPT snapshots the tool list: after a server update, an admin has to click Refresh on the app.
OpenAI Responses API
{"type": "mcp","server_label": "fediverse","server_url": "https://mrbridge--fediverse-mcp.apify.actor/mcp","headers": {"Authorization": "Bearer YOUR_APIFY_TOKEN"},"require_approval": "never"}
Add allowed_tools to restrict the tool list. Tool calls must finish within about 60 seconds on this API, and every tool of this server answers in under 50 seconds.
Anthropic Messages API
{"mcp_servers": [{"type": "url","url": "https://mrbridge--fediverse-mcp.apify.actor/mcp","name": "fediverse","authorization_token": "YOUR_APIFY_TOKEN"}],"tools": [{"type": "mcp_toolset","mcp_server_name": "fediverse"}]}
Send the beta header anthropic-beta: mcp-client-2025-11-20.
One-click OAuth alternative
https://mcp.apify.com/?tools=mrbridge/fediverse-mcp connects through Apify OAuth without a token. It exposes the Actor as a single tool rather than the granular tools listed above.
Cost control
Each Standby run has a spending limit (maxTotalChargeUsd). When a call uses the last of it, the result is still returned, and later calls in that run answer CHARGE_LIMIT_REACHED until the limit is raised.
Why this server
Three networks, one connection. Bluesky, nine Mastodon instances and seven Lemmy instances share the same 16 tools, and the search and fetch pair lets ChatGPT deep research quote fediverse posts with a link back to them.
We read the terms of 32 instances before writing any code and kept 16. Instances that forbid scraping, data mining or machine-learning use of their content were left out, along with the ones whose terms were unclear. fedi_get_instance_info lists every instance served and the terms page read for it.
- Author choices are respected. Bluesky accounts hidden from logged-out visitors, Mastodon accounts that opted out of indexing, and deleted or NSFW Lemmy content stay out of every answer.
- Posts and profiles live in memory only. They are cached for 30 seconds, kept as a fallback for up to 5 minutes while a source is down, and never written to the key-value store. A post deleted at its source leaves the answers within 5 minutes.
- An
omittedblock counts what was left out and why. A short list never passes for a complete one. - No credentials to manage, since each call is an anonymous read of a public API and nothing is ever written upstream.
This is an independent server. It is not affiliated with or endorsed by Bluesky Social PBC, Mastodon GmbH, Mastodon Inc., the Lemmy project or any instance operator.
Pricing (Pay-per-Event)
| Event | Charged when | Price |
|---|---|---|
apify-actor-start | run start (platform default) | see the Store page |
tool-read (primary event) | each successful read tool call | see the Store page |
Never charged: initialize, tools/list, pings, readiness probes, and any call that ends in an error (invalid input, not found, upstream failure, timeout, spending limit).
Platform usage comes on top of these events. This server runs in Apify Standby mode, and you also pay the platform usage of your own Standby run, billed to your Apify account like any other run: the memory set for the Standby run, for as long as the server is up, idle time included, until the run stops at its idle timeout. The Apify pay-per-event documentation says so: "For runs in Standby mode, users always pay the platform usage costs in addition to the event charges."
Limits, caveats and attribution
- Reviewed instances only. Mastodon: mastodon.social (default), mastodon.online, hachyderm.io, piaille.fr, mastodon.world, troet.cafe, mastodon.uno, techhub.social, universeodon.com. Lemmy: lemmy.world (default), lemmy.zip, lemmy.ml, feddit.org, lemmy.dbzer0.com, programming.dev, sopuli.xyz. Any other host is refused, even a valid one. Several large instances were left out because their terms forbid scraping, data mining or machine-learning use of their content.
- Local content only. On Mastodon and Lemmy, the tools return what was written on the instance you ask. Posts, replies and comments that arrived from other servers are left out, because the terms of those servers were not reviewed. Each answer counts what it left out in
omitted. - Author choices. Bluesky accounts that ask apps not to show them to logged-out visitors are never returned, and neither is content Bluesky moderation hides from them. Mastodon accounts that opted out of search engine indexing are left out everywhere, and accounts outside the profile directory are left out of account search. Only public Mastodon posts are read. Deleted, removed and NSFW Lemmy content is left out too.
- No storage of posts. Posts, profiles and search results are cached in memory only and never written to storage. A cached answer is reused for 30 seconds, and for up to 5 minutes when the source is down, slow or rate limiting, never longer. A post deleted at the source drops out of answers once that cached copy expires. Only aggregates (trending tags and links, trending topics, hashtag counts) and instance metadata are cached longer. E-mail addresses in bios and instance texts are replaced by
[e-mail removed]. - Bluesky post search. Bluesky refuses unauthenticated post search from time to time to shed load. The tool then answers
UPSTREAM_BLOCKED, and the hint points to the author, hashtag and Lemmy tools. Account search, profiles, author feeds and threads are not affected. - Closed feeds. A Mastodon instance can close its hashtag feeds or trends to visitors without a login. The tool answers
UPSTREAM_BLOCKEDand names the instance: try another one fromfedi_get_instance_info. - Rate limits. Mastodon allows 300 requests per 5 minutes per IP address on each instance, and this server keeps to half. Lemmy instances set their own limits and throttle search hard, so this server keeps to 15 searches per 10 minutes per instance. Bluesky publishes no figure for its public API, and this server keeps to 500 requests per 5 minutes. Past these, a call answers
UPSTREAM_RATE_LIMITEDwith the wait in the hint. - Windows. Bluesky search and author feeds read the latest 100 items, Mastodon hashtag feeds 40 posts at a time (
older_than_idgoes further back), Lemmy lists 50 posts per page (page). - Trending topics.
fedi_get_bluesky_trendingrelies on an unstable Bluesky method (app.bsky.unspecced.getTrendingTopics), which may change without notice. - No profiles across networks. No tool takes a person and looks them up on several networks. The ChatGPT
searchtool finds posts by topic only and refuses handles, DIDs and author operators. - Attribution. Every answer with posts, profiles or instance data carries an
attributionblock with the source, the terms page read for it and the notices: each post belongs to its author, quote it with a link to the original. This server is not affiliated with or endorsed by Bluesky Social PBC, Mastodon gGmbH, the Lemmy project or any instance operator. - Removal requests and reports. The operator can exclude any account or post from every answer without a new build. Open an issue in the Issues tab of the Actor.
Data terms
By calling this server you receive public posts and profiles written by people who keep their rights to them. You agree to:
- use them for reading, research, topic monitoring or quotation with a link to the original, and never republish them in bulk, sell them as a dataset or use them to train a model,
- not build profiles of individuals from them, within one network or across several,
- respect the terms of the source you read: the Bluesky terms at https://bsky.social/about/support/tos, and for each instance the terms page given in the
attributionblock of every answer (also listed byfedi_get_instance_info), - treat them as personal data where data protection law applies (the GDPR in the European Union): you are the controller of whatever you do with them after they reach you.
Use cases
Research a technical question in community threads. Ask for Lemmy discussions about a reverse proxy setup. fedi_search_lemmy finds the posts on programming.dev or lemmy.world, and fedi_get_lemmy_post reads the top comments.
See what one server is talking about today. fedi_get_mastodon_trends returns the top hashtags or shared news links of mastodon.social, or of another reviewed instance, with their 7-day totals. For Bluesky, fedi_get_bluesky_trending lists the current topics.
Read a thread someone sent you. Paste the link and ask for a summary of the replies.
Cite the fediverse in ChatGPT deep research. search and fetch return the post text with its original URL, which ChatGPT turns into a citation.
Find where a topic lives before you join. Ask which Lemmy communities cover home servers, with their subscriber counts, or which Mastodon hashtags about climate people used this week.
Frequently asked questions
How much does a call cost?
You pay per successful call. Each tool answer that succeeds is one tool-read event at $0.005, and Apify charges its standard apify-actor-start event each time your Standby run starts. As an example, 100 successful calls come to $0.50 in tool-read events, and that figure covers the events only. These are the FREE plan prices: Apify plan discounts lower them, and the Pricing tab shows the price on your plan.
Failed calls are free: invalid input, nothing found, an upstream that refuses or times out, a rate-limit wait, a reached spending limit. So are protocol messages.
The events are not the whole bill. On top of them you pay the platform usage of your own Standby run, charged to your Apify account at your plan's rate like any other run: the memory set for the run (256 MB by default), for as long as the server is up, idle time included, until it stops at its idle timeout (about 5 minutes without a call by default). To cap the event charges of one run, set maxTotalChargeUsd. Event prices are on the Pricing tab.
Why was my first call slow?
That was the cold start of your Standby run, measured at 5.3 seconds once and 10.5 seconds another time in the platform tests. Later calls came back in a quarter of a second to 3.5 seconds, the Lemmy front page being the slowest. After about 5 minutes without a call the run stops. The next call starts it again.
What can't it do?
It only reads. It cannot post, reply, like or follow, and it never logs in, so private posts and direct messages are out of reach. On Mastodon and Lemmy it returns only what was written on the reviewed instance you ask: replies that came from other servers are counted, not shown.
Mastodon gives logged-out visitors no full-text post search, which is why the Mastodon tools work by hashtag and by account. Bluesky sometimes refuses post search without a login. The tool then answers UPSTREAM_BLOCKED at no charge, while account search, profiles, feeds and threads keep working. Images never come back, only their alt text.
Can I use it to look someone up?
No. No tool takes a person and searches several networks, and the ChatGPT search refuses handles, DIDs and from: or author: operators. You can open one public profile you already know, on one network. Building profiles of individuals is ruled out by the Data terms, and e-mail addresses found in bios come back as [e-mail removed].
Can I store or republish the posts?
Quote them, with a link. Each post carries its original URL, and the attribution block names the source and its terms page. The authors keep their rights, and the Data terms above exclude bulk republication, selling the posts as a dataset and training a model on them. Where the GDPR applies, you are the controller of whatever you do with them once they reach you.
Why can't I pick my own instance?
Because each instance writes its own terms, and some of them forbid automated reading or machine-learning use of what their members post. The server only calls instances whose terms were read and found compatible: nine on Mastodon, with mastodon.social as the default, and seven on Lemmy, with lemmy.world as the default. Any other host is refused, even a valid one. Ask fedi_get_instance_info for the list.
How do I get a post or an account removed from answers?
Open an issue on the Issues tab with the link to the post or the account. The operator can exclude it from every answer without a new build. Deleting the post at its source works too.
Your feedback
Found a bug or a wrong answer? Open an issue on the Issues tab. More MCP servers and data tools from the same team are on mr-bridge.com.
Changelog
- 0.1.4: Output, dataset and key-value store schemas, as Apify asks for publication: the Output tab of a run started from the Console shows the connection details and one row per tool.
- 0.1.3: the Input tab shows the endpoint and how to connect an AI client, and a run started from the Console outputs the connection details and the tool list
- 0.1.2: pricing events tool-read and tool-action
- 0.1.1: the README says a cached answer can be served for up to 5 minutes when the source fails, and sends removal requests and reports to the Actor's Issues tab
- 0.1.0: initial build (private, unpublished)