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
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Pagination cursor for next page of results | |
| limit | No | Maximum 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
- src/bluesky_mcp/server.py:246-252 (handler)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} )
- src/bluesky_mcp/server.py:142-159 (schema)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", }, }, }, ),
- src/bluesky_mcp/server.py:19-35 (helper)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()
- src/bluesky_mcp/server.py:36-183 (registration)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"], }, ), ]