this repo has no description

Remove custom URI support and add better error messages for feed tool

- Remove feed_uri parameter to prevent agent from using arbitrary URIs
- Add clear error message listing available feed names when invalid name provided
- Update descriptions to explicitly list available feeds for agent guidance
- Simplify function signature and validation logic

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>

+10 -13
+10 -13
tools/feed.py
··· 4 4 5 5 6 6 class FeedArgs(BaseModel): 7 - feed_name: Optional[Literal["home", "discover", "ai-for-grownups", "atmosphere"]] = Field(None, description="Named feed preset. If not provided, returns home timeline") 8 - feed_uri: Optional[str] = Field(None, description="Custom feed URI (e.g., 'at://did:plc:abc/app.bsky.feed.generator/feed-name'). Overrides feed_name if provided") 7 + feed_name: Optional[Literal["home", "discover", "ai-for-grownups", "atmosphere"]] = Field(None, description="Named feed preset. Available feeds: 'home' (timeline), 'discover' (what's hot), 'ai-for-grownups', 'atmosphere'. If not provided, returns home timeline") 9 8 max_posts: int = Field(default=25, description="Maximum number of posts to retrieve (max 100)") 10 9 11 10 12 - def get_bluesky_feed(feed_name: str = None, feed_uri: str = None, max_posts: int = 25) -> str: 11 + def get_bluesky_feed(feed_name: str = None, max_posts: int = 25) -> str: 13 12 """ 14 - Retrieve a Bluesky feed (home timeline or custom feed). 13 + Retrieve a Bluesky feed. 15 14 16 15 Args: 17 - feed_name: Named feed preset (home, discover, ai-for-grownups, atmosphere) 18 - feed_uri: Custom feed URI (overrides feed_name if provided) 16 + feed_name: Named feed preset - available options: 'home', 'discover', 'ai-for-grownups', 'atmosphere' 19 17 max_posts: Maximum number of posts to retrieve (max 100) 20 18 21 19 Returns: ··· 37 35 # Validate inputs 38 36 max_posts = min(max_posts, 100) 39 37 40 - # Resolve feed URI from name or use direct URI 41 - if feed_uri: 42 - # Direct URI provided, use as-is 43 - resolved_feed_uri = feed_uri 44 - feed_display_name = feed_uri.split('/')[-1] if '/' in feed_uri else feed_uri 45 - elif feed_name: 38 + # Resolve feed URI from name 39 + if feed_name: 46 40 # Look up named preset 47 - resolved_feed_uri = feed_presets.get(feed_name) 41 + if feed_name not in feed_presets: 42 + available_feeds = list(feed_presets.keys()) 43 + raise Exception(f"Invalid feed name '{feed_name}'. Available feeds: {available_feeds}") 44 + resolved_feed_uri = feed_presets[feed_name] 48 45 feed_display_name = feed_name 49 46 else: 50 47 # Default to home timeline