Loading source
Pulling the file list, source metadata, and syntax-aware rendering for this listing.
Source from repo
Search, analyze, and interact with Xiaohongshu (RedNote/小红书) content via a local MCP server and shell scripts.
Files
Skill
Size
Entrypoint
Format
Open file
Syntax-highlighted preview of this file as included in the skill package.
scripts/mcp-call.sh
1#!/bin/bash2# 通用 MCP 调用脚本(支持 Streamable HTTP + Session ID)34set -e56TOOL_NAME="$1"7TOOL_ARGS="$2"8MCP_URL="${MCP_URL:-http://localhost:18060/mcp}"9export no_proxy="${no_proxy:+$no_proxy,}localhost,127.0.0.1"1011# 检查 jq 依赖12if ! command -v jq &> /dev/null; then13echo "错误: 需要安装 jq (apt-get install jq / brew install jq)"14exit 115fi1617if [ -z "$TOOL_NAME" ]; then18echo "用法: $0 <tool_name> [json_args]"19echo ""20echo "可用工具:"21echo " check_login_status - 检查登录状态"22echo " search_feeds - 搜索内容 {\"keyword\": \"...\", \"filters\": {\"sort_by\": \"最新\"}}"23echo " list_feeds - 获取首页推荐"24echo " get_feed_detail - 获取帖子详情 {\"feed_id\": \"...\", \"xsec_token\": \"...\"}"25echo " post_comment_to_feed - 发表评论 {\"feed_id\": \"...\", \"xsec_token\": \"...\", \"content\": \"...\"}"26echo " reply_comment_in_feed - 回复评论 {\"feed_id\": \"...\", \"xsec_token\": \"...\", \"content\": \"...\", \"comment_id\": \"...\", \"user_id\": \"...\"}"27echo " user_profile - 获取用户主页 {\"user_id\": \"...\", \"xsec_token\": \"...\"}"28echo " like_feed - 点赞 {\"feed_id\": \"...\", \"xsec_token\": \"...\"} 取消: {\"unlike\": true}"29echo " favorite_feed - 收藏 {\"feed_id\": \"...\", \"xsec_token\": \"...\"} 取消: {\"unfavorite\": true}"30echo " get_login_qrcode - 获取登录二维码"31echo " delete_cookies - 删除 cookies,重置登录状态"32echo " publish_content - 发布图文"33echo " publish_with_video - 发布视频"34exit 135fi3637# 校验 tool name,只允许字母数字和下划线38if [[ ! "$TOOL_NAME" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then39echo "错误: 无效的工具名: $TOOL_NAME"40exit 141fi4243[ -z "$TOOL_ARGS" ] && TOOL_ARGS="{}"4445# 校验 TOOL_ARGS 是合法 JSON46if ! echo "$TOOL_ARGS" | jq empty 2>/dev/null; then47echo "错误: 参数不是合法的 JSON: $TOOL_ARGS"48exit 149fi5051# 1. Initialize 并获取 Session ID52INIT_RESPONSE=$(curl --noproxy '*' -s -i -X POST "$MCP_URL" \53-H "Content-Type: application/json" \54-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"openclaw","version":"1.0"}}}')5556SESSION_ID=$(echo "$INIT_RESPONSE" | grep -i "Mcp-Session-Id" | awk '{print $2}' | tr -d '\r\n')5758if [ -z "$SESSION_ID" ]; then59echo "错误: 无法获取 MCP Session ID"60echo "请确保 MCP 服务正在运行: ./start-mcp.sh"61exit 162fi6364# 2. Initialized notification65curl --noproxy '*' -s -X POST "$MCP_URL" \66-H "Content-Type: application/json" \67-H "Mcp-Session-Id: $SESSION_ID" \68-d '{"jsonrpc":"2.0","method":"notifications/initialized"}' > /dev/null6970# 3. Call tool — 使用 jq 安全构建 JSON,避免 shell 注入71CALL_PAYLOAD=$(jq -n \72--arg name "$TOOL_NAME" \73--argjson args "$TOOL_ARGS" \74'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":$name,"arguments":$args}}')7576RESULT=$(curl --noproxy '*' -s --max-time 120 -X POST "$MCP_URL" \77-H "Content-Type: application/json" \78-H "Mcp-Session-Id: $SESSION_ID" \79-d "$CALL_PAYLOAD")8081# 输出结果82echo "$RESULT" | jq .83