search
Search Zipp's news catalogue for recent stories on a topic, ordered by recency. Ideal for finding crypto news like updates on Bitcoin ETFs or Solana hacks.
Instructions
Full-text search across Zipp's news catalogue. Returns recent matching stories ordered by recency (with relevance as a tiebreaker). Use for questions like 'what's happening with Bitcoin ETFs?' or 'find news about Solana hacks'.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| lang | No | en-US | |
| category | No | ||
| limit | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- src/zipp_mcp/server.py:65-91 (handler)MCP tool handler for 'search'. Decorated with @mcp.tool(name='search'), accepts query, lang, category, limit params, delegates to ZippClient.search().
@mcp.tool( name="search", description=( "Full-text search across Zipp's news catalogue. Returns recent " "matching stories ordered by recency (with relevance as a " "tiebreaker). Use for questions like 'what's happening with " "Bitcoin ETFs?' or 'find news about Solana hacks'." ), ) async def search( query: str, lang: str = _DEFAULT_LANG, category: str | None = None, limit: int = _DEFAULT_LIMIT, ) -> dict[str, Any]: """Search Zipp news. Args: query: Search query string (free text, supports ticker synonyms like BTC ↔ Bitcoin). lang: BCP-47 language tag. Search is language-locked — TR query → TR results only. category: Optional category slug to scope results (see list_categories). limit: Max results (1-30, default 10). """ async with ZippClient() as client: return await client.search( query=query, lang=lang, category=category, limit=limit ) - src/zipp_mcp/client.py:82-93 (helper)ZippClient.search() — builds query params and calls _get('/search', ...) which sends GET /api/v1/news/search to the Zipp REST API.
async def search( self, *, query: str, lang: str = "en-US", category: str | None = None, limit: int = 10, ) -> dict[str, Any]: params: dict[str, Any] = {"query": query, "lang": lang, "limit": limit} if category: params["category"] = category return await self._get("/search", params=params) - src/zipp_mcp/server.py:65-72 (registration)Tool registration via FastMCP @mcp.tool() decorator with name='search' and description.
@mcp.tool( name="search", description=( "Full-text search across Zipp's news catalogue. Returns recent " "matching stories ordered by recency (with relevance as a " "tiebreaker). Use for questions like 'what's happening with " "Bitcoin ETFs?' or 'find news about Solana hacks'." ),