Skill: thincher/minimax-web-search (version 1.0.7)

--- name: minimax-web-search description: 使用 MiniMax MCP 进行网络搜索。触发条件：(1) 用户要求进行网络搜索、在线搜索、查找信息 (2) 需要查询最新资讯、新闻、资料 (3) 使用 MiniMax 的 web_search 功能 --- # minimax-web-search 使用 MiniMax MCP 服务器进行网络搜索。 ## 执行流程（首次需要安装，后续直接步骤4调用） ### 步骤 1: 检查并安装依赖 #### 1.1 检查 uvx 是否可用 ```bash which uvx ``` 如果不存在，安装 uv： **方法 1: 使用官方安装脚本（推荐）** ```bash curl -LsSf https://astral.sh/uv/install.sh | sh ``` **方法 2: 使用国内镜像加速（如果官方脚本下载失败）** 临时使用清华镜像源安装： ```bash export UV_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple" curl -LsSf https://astral.sh/uv/install.sh | sh ``` 或者临时使用阿里云镜像源： ```bash export UV_INDEX_URL="https://mirrors.aliyun.com/pypi/simple/" curl -LsSf https://astral.sh/uv/install.sh | sh ``` #### 1.2 检查 MCP 服务器是否已安装 ```bash uvx minimax-coding-plan-mcp --help ``` 执行命令判断是否MCP服务器已安装， 如果安装了跳到步骤 2。 #### 1.3 安装 MCP 服务器（如果未安装） **方法 1: 使用默认源安装** ```bash uvx install minimax-coding-plan-mcp ``` **方法 2: 使用国内镜像加速（如果默认源下载失败）** 临时使用清华镜像源： ```bash export UV_INDEX_URL="https://pypi.tuna.tsinghua.edu.cn/simple" uvx install minimax-coding-plan-mcp ``` 或者临时使用阿里云镜像源： ```bash export UV_INDEX_URL="https://mirrors.aliyun.com/pypi/simple/" uvx install minimax-coding-plan-mcp ``` ### 步骤 2: 检查 API Key 配置 ```bash cat ~/.openclaw/config/minimax.json 2>/dev/null | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('api_key', ''))" ``` 如果返回非空的 API Key，跳到步骤 4。 ### 步骤 3: 配置 API Key（如果未配置） #### 3.2 如果没有找到 Key，向用户索要 直接询问用户提供 MiniMax API Key。 如果未购买MiniMax，购买地址为: https://platform.minimaxi.com/subscribe/coding-plan?code=GjuAjhGKqQ&source=link #### 3.3 保存 API Key ```bash mkdir -p ~/.openclaw/config cat > ~/.openclaw/config/minimax.json << EOF { "api_key": "API密钥", "output_path": "~/.openclaw/workspace/minimax-output" } EOF ``` ### 步骤 4: 使用 MCP 进行网络搜索 #### 4.1 调用 web_search 使用脚本调用 MCP 服务： ```bash python3 {curDir}/scripts/web_search.py "<搜索查询>" ``` **示例：** ```bash # 搜索今日新闻 python3 {curDir}/scripts/web_search.py "今天的热点新闻" ``` #### 4.2 API 参数说明 | 参数 | 说明 | 类型 | |------|------|------| | query | 搜索查询字符串 | string (必填) | ## 脚本说明 脚本位置：`{curDir}/scripts/web_search.py` **功能：** - 优先从环境变量 `MINIMAX_API_KEY` 读取 API Key，如果没有则从 `~/.openclaw/config/minimax.json` 读取 - 通过 stdio 模式启动 MCP 服务器 - 发送 JSON-RPC 请求调用 `web_search` 工具 - 返回格式化的 JSON 结果 **错误处理：** - API Key 未配置时提示错误 - uvx 未安装时提示安装命令 - MCP 服务器错误时显示 stderr 输出

path: _meta.json
content: ownerId: kn770tqcyvha41b4ftc482hr1s81b8xs
slug: minimax-web-search
version: 1.0.0
publishedAt: 1771336626107

path: scripts/web_search.py
content: #!/usr/bin/env python3
import subprocess
import json
import sys
import os

def load_api_key():
    config_path = os.path.expanduser('~/.openclaw/config/minimax.json')
    
    [REDACTED_SECRET]'MINIMAX_API_KEY')
    if [REDACTED_SECRET] api_key
    
    try:
        with open(config_path, 'r') as f:
            config = json.load(f)
            return config.get('api_key')
    except (FileNotFoundError, json.JSONDecodeError):
        return None

def call_mcp(query):
    [REDACTED_SECRET])
    if not [REDACTED_SECRET]"Error: API Key not found.", file=sys.stderr)
        sys.exit(1)

    env = {
        'MINIMAX_API_KEY': api_key,
        'MINIMAX_MCP_BASE_PATH': os.path.expanduser('~/.openclaw/workspace/minimax-output'),
        'MINIMAX_API_HOST': 'https://api.minimaxi.com'
    }

    # MCP protocol: send initialize + tool call in one go
    requests = [
        {
            'jsonrpc': '2.0',
            'id': 1,
            'method': 'initialize',
            'params': {
                'protocolVersion': '2024-11-05',
                'capabilities': {},
                'clientInfo': {
                    'name': 'openclaw',
                    'version': '1.0'
                }
            }
        },
        {
            'jsonrpc': '2.0',
            'id': 2,
            'method': 'tools/call',
            'params': {
                'name': 'web_search',
                'arguments': {
                    'query': query
                }
            }
        }
    ]

    try:
        proc = subprocess.Popen(
            ['uvx', 'minimax-coding-plan-mcp'],
            stdin=subprocess.PIPE,
            stdout=subprocess.PIPE,
            stderr=subprocess.PIPE,
            env={**os.environ, **env},
            text=True
        )

        input_data = '\n'.join([json.dumps(r) for r in requests]) + '\n'
        stdout, stderr = proc.communicate(input_data, timeout=120)
        
        if stderr:
            print(f"Stderr: {stderr}", file=sys.stderr)
        
        # Parse the last line (tool call response)
        lines = [l.strip() for l in stdout.strip().split('\n') if l.strip()]
        if lines:
            last_response = lines[-1]
            try:
                response = json.loads(last_response)
                if 'result' in response:
                    result = response['result']
                    if isinstance(result, dict) and 'data' in result:
                        # Print the search results nicely
                        data = result['data']
                        print(json.dumps(data, indent=2, ensure_ascii=False))
                    else:
                        print(json.dumps(result, indent=2, ensure_ascii=False))
                elif 'error' in response:
                    print(f"Error: {response['error']}", file=sys.stderr)
            except json.JSONDecodeError:
                print(last_response)
        
        return proc.returncode

    except subprocess.TimeoutExpired:
        proc.kill()
        print("Error: Request timed out", file=sys.stderr)
        sys.exit(1)
    except Exception as e:
        print(f"Error: {e}", file=sys.stderr)
        sys.exit(1)

if __name__ == '__main__':
    if len(sys.argv) < 2:
        print("Usage: python3 web_search.py <query>", file=sys.stderr)
        sys.exit(1)
    
    query = sys.argv[1]
    sys.exit(call_mcp(query))


Security scan verdicts — ClawScan: suspicious | static analysis: clean | VirusTotal: suspicious | SkillSpector: suspicious (HIGH)