Skip to main content
Glama

bluesky_get_personal_feed

Retrieve your personalized BlueSky social feed using pagination and customizable item limits via the official API.

Instructions

Get your personalized Bluesky feed

Input Schema

NameRequiredDescriptionDefault
cursorNoPagination cursor for next page of results
limitNoMaximum number of feed items to return (default 50, max 100)

Input Schema (JSON Schema)

{ "properties": { "cursor": { "description": "Pagination cursor for next page of results", "type": "string" }, "limit": { "default": 50, "description": "Maximum number of feed items to return (default 50, max 100)", "type": "integer" } }, "type": "object" }

Implementation Reference

  • Handler implementation for the 'bluesky_get_personal_feed' tool. It extracts limit and cursor parameters from arguments and calls the Bluesky API's get_timeline endpoint via asyncio.to_thread to fetch the personalized feed.
    elif name == "bluesky_get_personal_feed": limit = arguments.get("limit", 50) cursor = arguments.get("cursor") response = await asyncio.to_thread( bluesky.client.app.bsky.feed.get_timeline, {'limit': limit, 'cursor': cursor} )
  • Schema definition and registration of the 'bluesky_get_personal_feed' tool, including input schema for limit and cursor parameters.
    types.Tool( name="bluesky_get_personal_feed", description="Get your personalized Bluesky feed", inputSchema={ "type": "object", "properties": { "limit": { "type": "integer", "description": "Maximum number of feed items to return (default 50, max 100)", "default": 50, }, "cursor": { "type": "string", "description": "Pagination cursor for next page of results", }, }, }, ),
  • Helper class BlueSkyClient used by the tool handler to ensure an authenticated Bluesky client is available before making API calls.
    class BlueSkyClient: def __init__(self): self.client = None async def ensure_client(self): """Ensure we have an authenticated client""" if not self.client: self.client = Client() profile = await asyncio.to_thread( self.client.login, IDENTIFIER, API_KEY ) if not profile: raise ValueError("Failed to authenticate with BlueSky") @server.list_tools()
  • The list_tools handler function that registers all tools including 'bluesky_get_personal_feed' by returning the list of Tool objects.
    async def handle_list_tools() -> list[types.Tool]: """List available tools for BlueSky API integration.""" return [ types.Tool( name="bluesky_get_profile", description="Get a user's profile information", inputSchema={ "type": "object", "properties": {}, }, ), types.Tool( name="bluesky_get_posts", description="Get recent posts from a user", inputSchema={ "type": "object", "properties": { "limit": { "type": "integer", "description": "Maximum number of posts to return (default 50, max 100)", "default": 50, }, "cursor": { "type": "string", "description": "Pagination cursor for next page of results", }, }, }, ), types.Tool( name="bluesky_search_posts", description="Search for posts on Bluesky", inputSchema={ "type": "object", "properties": { "query": { "type": "string", "description": "The search query", }, "limit": { "type": "integer", "description": "Maximum number of posts to return (default 25, max 100)", "default": 25, }, "cursor": { "type": "string", "description": "Pagination cursor for next page of results", }, }, "required": ["query"], }, ), types.Tool( name="bluesky_get_follows", description="Get a list of accounts the user follows", inputSchema={ "type": "object", "properties": { "limit": { "type": "integer", "description": "Maximum number of follows to return (default 50, max 100)", "default": 50, }, "cursor": { "type": "string", "description": "Pagination cursor for next page of results", }, }, }, ), types.Tool( name="bluesky_get_followers", description="Get a list of accounts following the user", inputSchema={ "type": "object", "properties": { "limit": { "type": "integer", "description": "Maximum number of followers to return (default 50, max 100)", "default": 50, }, "cursor": { "type": "string", "description": "Pagination cursor for next page of results", }, }, }, ), types.Tool( name="bluesky_get_liked_posts", description="Get a list of posts liked by the user", inputSchema={ "type": "object", "properties": { "limit": { "type": "integer", "description": "Maximum number of liked posts to return (default 50, max 100)", "default": 50, }, "cursor": { "type": "string", "description": "Pagination cursor for next page of results", }, }, }, ), types.Tool( name="bluesky_get_personal_feed", description="Get your personalized Bluesky feed", inputSchema={ "type": "object", "properties": { "limit": { "type": "integer", "description": "Maximum number of feed items to return (default 50, max 100)", "default": 50, }, "cursor": { "type": "string", "description": "Pagination cursor for next page of results", }, }, }, ), types.Tool( name="bluesky_search_profiles", description="Search for Bluesky profiles", inputSchema={ "type": "object", "properties": { "query": { "type": "string", "description": "Search query string", }, "limit": { "type": "integer", "description": "Maximum number of results to return (default 25, max 100)", "default": 25, }, "cursor": { "type": "string", "description": "Pagination cursor for next page of results", }, }, "required": ["query"], }, ), ]

Other Tools

Related Tools

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/berlinbra/BlueSky-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server