Skip to main content
Glama

search_news_info

Search news articles using Brave News API to find relevant information based on specific keywords, returning titles, sources, dates, and descriptions.

Instructions

使用Brave新闻API搜索新闻

参数:
    query (str): 新闻搜索关键词
    
返回:
    str: 新闻搜索结果,包含标题、来源、日期和描述

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYes

Implementation Reference

  • The handler function for the "search_news_info" MCP tool. Registered with @mcp.tool() decorator. Defines input schema via function signature and docstring (query: str -> str). Delegates execution to the _do_news_search helper.
    def search_news_info(query: str) -> str:
        """使用Brave新闻API搜索新闻
        
        参数:
            query (str): 新闻搜索关键词
            
        返回:
            str: 新闻搜索结果,包含标题、来源、日期和描述
        """
        return _do_news_search(query)
  • Core helper implementing the news search logic: detects language with _detect_language, calls Brave News API, processes results into formatted list with title, source, date, URL, description.
    def _do_news_search(query: str, country: str = "all", search_lang: str = None) -> str:
        """Internal function to handle news search using Brave News API"""
        try:
            query = query.encode('utf-8').decode('utf-8')
            
            # 如果未指定语言,自动检测
            if search_lang is None:
                search_lang = _detect_language(query)
                logger.debug(f"Detected language: {search_lang} for query: {query}")
            
            url = "https://api.search.brave.com/res/v1/news/search"
            
            headers = {
                "Accept": "application/json",
                "Accept-Encoding": "gzip",
                "X-Subscription-Token": API_KEY
            }
            
            params = {
                "q": query,
                "count": 10,
                "country": country,
                "search_lang": search_lang,
                "spellcheck": 1
            }
            
            logger.debug(f"Searching news for query: {query}")
            response = requests.get(url, headers=headers, params=params)
            response.raise_for_status()
            data = response.json()
            
            # 处理新闻搜索结果
            results = []
            if 'results' in data:
                for news in data['results']:
                    title = news.get('title', 'No title').encode('utf-8').decode('utf-8')
                    url = news.get('url', 'No URL')
                    description = news.get('description', 'No description').encode('utf-8').decode('utf-8')
                    date = news.get('published_time', 'Unknown date')
                    source = news.get('source', {}).get('name', 'Unknown source')
                    
                    news_item = [
                        f"- {title}",
                        f"  Source: {source}",
                        f"  Date: {date}",
                        f"  URL: {url}",
                        f"  Description: {description}\n"
                    ]
                    results.append("\n".join(news_item))
            
            if not results:
                return "No news found for your query."
                
            return "News Results:\n\n" + "\n".join(results)
            
        except requests.exceptions.RequestException as e:
            logger.error(f"News API request error: {str(e)}")
            return f"Error searching news: {str(e)}"
        except Exception as e:
            logger.error(f"News search error: {str(e)}")
            logger.exception("Detailed error trace:")
            return f"Error searching news: {str(e)}"
    @mcp.tool()
  • Supporting helper for language detection used in news search to set search_lang parameter automatically.
    def _detect_language(text: str) -> str:
        """检测文本语言并返回对应的语言代码"""
        # 定义语言检测规则
        LANGUAGE_PATTERNS = {
            # 中文 (简体和繁体)
            'zh-hans': ('\u4e00', '\u9fff'),  # 简体中文
            'zh-hant': ('\u4e00', '\u9fff'),  # 繁体中文
            # 日文
            'jp': ('\u3040', '\u309f', '\u30a0', '\u30ff'),  # 平假名和片假名
            # 韩文
            'ko': ('\uac00', '\ud7af'),  # 谚文
            # 俄文
            'ru': ('\u0400', '\u04ff'),  # 西里尔字母
            # 阿拉伯文
            'ar': ('\u0600', '\u06ff'),
            # 希伯来文
            'he': ('\u0590', '\u05ff'),
            # 泰文
            'th': ('\u0e00', '\u0e7f'),
            # 越南文 (使用扩展拉丁字母)
            'vi': ('àáạảãâầấậẩẫăằắặẳẵèéẹẻẽêềếệểễìíịỉĩòóọỏõôồốộổỗơờớợởỡùúụủũưừứựửữỳýỵỷỹđ'),
            # 印地文
            'hi': ('\u0900', '\u097f'),
            # 泰米尔文
            'ta': ('\u0b80', '\u0bff'),
            # 特卢固文
            'te': ('\u0c00', '\u0c7f'),
        }
    
        def contains_chars_in_range(text, *ranges):
            """检查文本是否包含指定Unicode范围内的字符"""
            if len(ranges) % 2 == 0:  # 范围对
                for i in range(0, len(ranges), 2):
                    start, end = ranges[i:i+2]
                    if any(start <= char <= end for char in text):
                        return True
            else:  # 字符列表
                return any(char in ranges[0] for char in text)
            return False
    
        # 检测常见的非拉丁文字系统
        for lang, pattern in LANGUAGE_PATTERNS.items():
            if contains_chars_in_range(text, *pattern):
                # 对中文进行简繁体识别(这里使用简单规则,实际应用可能需要更复杂的逻辑)
                if lang in ['zh-hans', 'zh-hant']:
                    # 这里可以添加更复杂的简繁体识别逻辑
                    return 'zh-hans'  # 默认返回简体中文
                return lang
    
        # 检测拉丁字母语言(简单示例)
        # 注意:这是一个非常简化的实现,实际应用可能需要更复杂的语言检测
        LATIN_PATTERNS = {
            'es': ['ñ', 'á', 'é', 'í', 'ó', 'ú', '¿', '¡'],
            'fr': ['é', 'è', 'ê', 'à', 'ç', 'ù', 'û', 'ï'],
            'de': ['ä', 'ö', 'ü', 'ß'],
            'pt-pt': ['ã', 'õ', 'á', 'é', 'í', 'ó', 'ú', 'â', 'ê', 'ô'],
            'it': ['à', 'è', 'é', 'ì', 'ò', 'ó', 'ù'],
        }
    
        for lang, patterns in LATIN_PATTERNS.items():
            if any(pattern in text.lower() for pattern in patterns):
                return lang
    
        # 默认返回英语
        return "en"

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/mcp2everything/mcp2brave'

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