vybsly_news
Retrieve recent news articles with publish dates. Input a search query and optionally set a maximum age in hours to get time-sensitive results.
Instructions
Recent news articles with publish dates. Use for time-sensitive queries.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query | |
| hours | No | Max article age in hours (default 24) |
Implementation Reference
- index.js:476-478 (handler)Handler case for vybsly_news — calls the Vybsly API /news endpoint with query (q) and hours parameters.
case 'vybsly_news': result = await vybslyCall('/news', { q: args.query, hours: args.hours || 24 }); break; - index.js:126-137 (schema)Input schema definition for vybsly_news tool — accepts a required query string and optional hours number (default 24).
{ name: 'vybsly_news', description: 'Recent news articles with publish dates. Use for time-sensitive queries.', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Search query' }, hours: { type: 'number', description: 'Max article age in hours (default 24)', default: 24 } }, required: ['query'] } }, - index.js:34-172 (registration)The vybsly_news tool is registered as part of the TOOLS array at line 127, which is returned via ListToolsRequestSchema handler at line 417.
const TOOLS = [ { name: 'vybsly_search', description: 'Full-content web search across 29M+ pages. Returns up to 30K chars per result — perfect for RAG and agent context. Supports strict-mode filters (research/news/educational) and federation with encyclopedia.', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Search query (required)' }, limit: { type: 'number', description: 'Max results (1-50, default 10)', default: 10 }, mode: { type: 'string', enum: ['default', 'agent'], description: 'agent = structured output with key_facts and entities' }, strict: { type: 'boolean', description: 'Enforce filter allowlists instead of fuzzy matching' }, research: { type: 'boolean', description: 'Only research papers (arxiv, nature, pubmed)' }, news: { type: 'boolean', description: 'Only news outlets (Reuters, AP, BBC)' }, educational: { type: 'boolean', description: 'Only tutorials/docs (MDN, MIT OCW)' }, source: { type: 'string', description: 'Restrict to a specific domain, e.g. wikipedia.org' }, lang: { type: 'string', description: 'Language filter (en, es, fr, de, ja, zh)' }, strict_fallback: { type: 'string', enum: ['relaxed'], description: 'Auto-retry relaxed when strict returns too few' } }, required: ['query'] } }, { name: 'vybsly_knowledge', description: 'Federated search: web index + structured encyclopedia in one call. Returns results tagged by source (vybsly/vybpedia). Best for factual questions needing both breadth (web) and authority (encyclopedia).', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Search query (required)' }, limit: { type: 'number', description: 'Total max results (default 10)', default: 10 }, strict: { type: 'boolean' }, research: { type: 'boolean' } }, required: ['query'] } }, { name: 'vybsly_extract', description: 'Extract full content from any URL with JavaScript rendering. Returns clean markdown/text, title, description, images, and links. Works on React/Vue SPAs. Use when you need content from a specific URL.', inputSchema: { type: 'object', properties: { url: { type: 'string', description: 'URL to extract (required)' }, format: { type: 'string', enum: ['markdown', 'text', 'html'], description: 'Output format' } }, required: ['url'] } }, { name: 'vybsly_ask', description: 'Ask a question, get a sourced AI answer (like Perplexity). Returns a synthesized answer plus the source URLs used.', inputSchema: { type: 'object', properties: { question: { type: 'string', description: 'The question to answer' }, max_sources: { type: 'number', description: 'How many sources to cite (default 5)', default: 5 } }, required: ['question'] } }, { name: 'vybsly_stocks', description: 'Live stock prices for one or more ticker symbols. Auto-saves to historical almanac for trend lookups.', inputSchema: { type: 'object', properties: { symbols: { type: 'string', description: 'Comma-separated tickers, e.g. AAPL,TSLA,NVDA' } }, required: ['symbols'] } }, { name: 'vybsly_crypto', description: 'Live cryptocurrency prices and market data.', inputSchema: { type: 'object', properties: { symbol: { type: 'string', description: 'Crypto ticker, e.g. BTC, ETH, SOL' } }, required: ['symbol'] } }, { name: 'vybsly_weather', description: 'Current weather and 5-day forecast for a city.', inputSchema: { type: 'object', properties: { city: { type: 'string', description: 'City name, e.g. Miami or "New York"' } }, required: ['city'] } }, { name: 'vybsly_news', description: 'Recent news articles with publish dates. Use for time-sensitive queries.', inputSchema: { type: 'object', properties: { query: { type: 'string', description: 'Search query' }, hours: { type: 'number', description: 'Max article age in hours (default 24)', default: 24 } }, required: ['query'] } }, { name: 'vybsly_odds', description: 'Live sports betting odds from multiple bookmakers (FanDuel, DraftKings, BetMGM). Useful for sports analysis.', inputSchema: { type: 'object', properties: { sport: { type: 'string', description: 'nba, nfl, mlb, nhl, ufc, mma' }, team: { type: 'string', description: 'Filter by team or fighter name' } } } }, { name: 'vybsly_geocode', description: 'Convert a street address or place name into latitude/longitude coordinates.', inputSchema: { type: 'object', properties: { address: { type: 'string', description: 'Address or place name' } }, required: ['address'] } }, { name: 'vybsly_directions', description: 'Get turn-by-turn driving directions between two places.', inputSchema: { type: 'object', properties: { from: { type: 'string' }, to: { type: 'string' } }, required: ['from', 'to'] } } ]; - index.js:21-32 (helper)Generic helper function vybslyCall used to make all API requests, including the /news endpoint call from the vybsly_news handler.
async function vybslyCall(path, params = {}) { const qs = new URLSearchParams(params).toString(); const url = `${VYBSLY_BASE}${path}${qs ? '?' + qs : ''}`; const headers = { 'Accept': 'application/json' }; if (API_KEY) headers['X-API-Key'] = API_KEY; const res = await fetch(url, { headers }); if (!res.ok) { const text = await res.text(); throw new Error(`Vybsly API ${res.status}: ${text.slice(0, 300)}`); } return res.json(); }