# Reported issues for bluesky-mcp-server

Pod holds 17 of 20 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to [bluesky-mcp-server](/mcp/bluesky-mcp-server).

## Most discussed

### bug(bsky_search_posts): search is refused without credentials — add app-password auth and gate the tool

### Server version

0.3.0

### mcp-ts-core version

0.11.0

### Runtime

Bun

### Runtime version

Bun 1.3.x

### Transport

HTTP (Streamable HTTP)

### Description

Related: #3

Bluesky's edge now refuses unauthenticated `app.bsky.feed.searchPosts` with a 403 HTML page on both `api.bsky.app` and `public.api.bsky.app`, first pages included (24 of 25 probes on 2026-09-25), and the [`searchPosts` lexicon](https://github.com/bluesky-social/atproto/blob/main/lexicons/app/bsky/feed/searchPosts.json)…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/32) · 2026-08-21 · closed · 4 comments

### feat(bsky_search_posts): add mentions, domain, and url filters

### Use case

Researchers, journalists, and community teams need posts that mention one account, or that link to a domain or an exact URL. Bluesky search supports all three filters, but `bsky_search_posts` exposes none of them. Filtering broad results on the client cannot substitute: it spends result slots before filtering, and the normalized post output carries no rich-text facets to filter on.

### Proposed behavior

```typescript
// bsky_search_posts
mentions?: string; // handle or DID, same…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/29) · 2026-08-11 · closed · 3 comments

### bug(discovery): exhausted results can be reported as truncated

### Server version

0.3.0

### mcp-ts-core version

^0.11.0

### Runtime

Bun

### Runtime version

Bun 1.3.14

### Transport

HTTP (Streamable HTTP)

### OS

macOS 26.1

### Description

`bsky_get_trending` and `bsky_get_follows` set `truncated: true`, with guidance for getting more, when nothing more can be fetched. Trending keys on `trends.length >= limit`: it always fires at `limit: 25`, the endpoint's maximum, and below that whenever the trending pool equals the limit. The follows tool…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/25) · 2026-08-11 · closed · 3 comments

### bug(output): server metadata after a quoted post renders inside the user's blockquote

### Server version

0.5.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### Description

In `renderPostLines()` and `renderEmbedLines()`, the server line that follows a user-text blockquote comes right after the last `> ` line, with no blank line between them. Examples: `*3 likes · …*`, `*Created: …*`, `🔗 Link card:`, `💬 Quoted post:`, `**Labels:**`. CommonMark reads that line as a lazy continuation of the quote's paragraph, so a…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/47) · 2026-09-25 · closed · 1 comment

### bug(output): an empty page that carries a cursor drops it from content[]

### Server version

0.4.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### Description

When a page comes back empty but still carries a cursor, `bsky_get_follows`, `bsky_get_feed`, `bsky_get_author_feed` and `bsky_search_actors` render only a one-line notice in `content[]`. `structuredContent.cursor` and the `truncated` guidance ("pass the returned cursor") are still present. A client that reads only `content[]` is told to page and…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/45) · 2026-09-25 · closed · 1 comment

### bug(bsky_search_actors): a malformed cursor fails as a bare Status: 400 with no reason

### Server version

0.4.0

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

stdio

### Description

`app.bsky.actor.searchActors` answers a cursor it cannot decode with HTTP 400 `InvalidRequest` / `Invalid request`, which names no parameter. `bsky_search_actors` passes that through as the generic fetch failure, with no `reason` and no recovery. A caller can't tell a bad cursor from a bad query. #41 maps the 500 that `getAuthorFeed` and…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/44) · 2026-09-25 · closed · 1 comment

### feat(bsky_get_follows): rank the follow graph with sort

### Use case

Finding the most prominent accounts in a large follow graph means paging the whole list, although Bluesky can rank it itself. `bsky_get_follows` has no way to ask for that ranking.

Related: #29

### Proposed behavior

```typescript
// bsky_get_follows
sort?: 'latest' | 'top'; // omitted sends nothing; Bluesky's default is latest
```

Forward `sort` to `app.bsky.graph.getFollows` and `app.bsky.graph.getFollowers` in both directions.

Measured 2026-09-25 on keyless `getFollows` /…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/43) · 2026-09-25 · closed · 1 comment

### feat(bsky_get_author_feed): posts_with_video filter and include_pins

### Use case

Callers want an account's video posts, or its pinned post alongside its recent ones. `bsky_get_author_feed`'s `filter` enum lacks `posts_with_video`, and the tool never requests pins.

Related: #29

### Proposed behavior

```typescript
// bsky_get_author_feed
filter?: 'posts_with_replies' | 'posts_no_replies' | 'posts_with_media'
       | 'posts_and_author_threads' | 'posts_with_video';
include_pins?: boolean; // default false, sent as includePins
```

Measured 2026-09-25, keyless…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/42) · 2026-09-25 · closed · 1 comment

## Most recent

### bug(bsky_get_author_feed): a malformed cursor becomes a retried upstream 500 with no reason

### Server version

0.3.2

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

A `cursor` the AppView can't decode makes `app.bsky.feed.getAuthorFeed` answer HTTP 500 (the same holds for `app.bsky.feed.getQuotes`; `getFeed` and `getFollowers` ignore a bad cursor and answer 200). The service treats the 500 as transient, retries it three times, and `bsky_get_author_feed` then fails with a bare `Fetch failed ……

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/41) · 2026-09-25 · closed · 1 comment

### feat(bsky_get_post_quotes): read the quote posts behind a post's quoteCount

### Use case

Every post these tools return carries `quoteCount`, and on Bluesky quote posts are where most of the commentary on a post lives. Nothing retrieves them: `bsky_get_post_thread` returns replies only, and `bsky_search_posts` matches text and needs an app password. So for "how is this post being received" the count is where the analysis stops.

### Proposed behavior

New read-only tool over…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/39) · 2026-09-25 · closed · 1 comment

### feat(input): accept bsky.app post and profile URLs and a leading @ for AT-URI and actor inputs

### Use case

People share Bluesky content as web URLs, so that's what a caller usually has in hand: `https://bsky.app/profile/bsky.app/post/3l6oveex3ii2l`, `https://bsky.app/profile/bsky.app`, or `@bsky.app`. Each maps one-to-one onto a value the tools accept, but today each is rejected at the schema, so the agent has to rewrite the value and call again.

Related: #4

### Proposed behavior

Accept these forms and rewrite them in the handler, before any request:

| Input | Fields | Rewritten to…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/38) · 2026-09-25 · closed · 1 comment

### bug(bsky_search_actors): working cursor pagination is described as 403-prone

### Server version

0.3.2

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

Related: #25

The `cursor` input and output descriptions on `bsky_search_actors` say an unauthenticated cursor "may return a 403" and that cursor pagination is reliable only for the author-feed and follows tools. The truncation notice tells the caller to refine the query instead of paging. The 403 in #3 was reproduced on…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/37) · 2026-09-25 · closed · 1 comment

### bug(bsky_search_actors,bsky_get_follows): follower and following counts are declared but never populated

### Server version

0.3.2

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

`app.bsky.actor.searchActors`, `graph.getFollows`, and `graph.getFollowers` return [`app.bsky.actor.defs#profileView`](https://github.com/bluesky-social/atproto/blob/main/lexicons/app/bsky/actor/defs.json) for every actor and for the follows `subject`. That view has no `followersCount` or `followsCount`; only `profileViewDetailed`…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/36) · 2026-09-25 · closed · 1 comment

### feat(bsky_get_feed): read posts from a feed generator by AT-URI

### Use case

An agent has no keyless way to read posts on a topic. `bsky_search_posts` is refused without credentials (#32), trends resolve to feed generators rather than search terms (#34), and a quoted record with `recordKind: "generator"` or a shared `bsky.app/.../feed/...` link hands the agent a feed it cannot open. `app.bsky.feed.getFeed` answers 200 without credentials for trend feeds and custom feeds such as `whats-hot`.

### Proposed behavior

New read-only tool `bsky_get_feed`:

```ts…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/35) · 2026-09-25 · closed · 1 comment

### bug(bsky_get_trending): trend topics are opaque feed IDs, so the documented drill-down is a dead end

### Server version

0.3.2

### mcp-ts-core version

0.13.6

### Runtime

Bun

### Runtime version

Bun 1.4.0

### Transport

HTTP (Streamable HTTP)

### Description

`app.bsky.unspecced.getTrends` returns each `topic` as a 12-hex feed-generator record key (e.g. `1d558a3bc9ff`), and `link` points at that feed, `/profile/<did>/feed/<topic>`, owned by `trending.bsky.app`. All 25 trends returned on 2026-09-25 had that shape, and `app.bsky.feed.getFeed` answered 200 without credentials for all 25…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/34) · 2026-09-25 · closed · 1 comment

### enhancement(output): escape Markdown and raw HTML in rendered user text

### Use case

Bluesky-authored text must stay visibly data in `content[]`, including in clients that render CommonMark or raw HTML. The blockquote keeps a post's headings inside the quote, but Markdown stays live there: emphasis, links, images, code, lists, setext headings, and raw HTML are interpreted. Inline values — display names, label values, trend names inside `###` and `**…**` — have the same gap.

### Proposed behavior

```typescript
quoteUserText('**###…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/31) · 2026-08-11 · closed · 1 comment

### enhancement(identity): surface Bluesky verification state on profiles, actor lists, and post authors

### Use case

Identity-sensitive workflows need to tell an account Bluesky has verified from a similar handle before citing its posts or walking its graph. The AppView returns `verification` on every actor view, and every tool drops it: `searchActors?q=nytimes` returns `nytimes.com` (verified, and a trusted verifier) beside unverified `nytimes.wtf`, and `bsky_search_actors` gives nothing to tell them apart.

Related: #22, #23

### Proposed behavior

```typescript
// bsky_get_profile and…

[Read the thread](https://github.com/cyanheads/bluesky-mcp-server/issues/30) · 2026-08-11 · closed · 1 comment

The remaining reports are on [the project's issue tracker](https://github.com/cyanheads/bluesky-mcp-server/issues).
