feat: 更新一堆 ai 初始化以及 skill
This commit is contained in:
82
.agents/skills/xiaohongshu/scripts/mcp-call.sh
Executable file
82
.agents/skills/xiaohongshu/scripts/mcp-call.sh
Executable file
@@ -0,0 +1,82 @@
|
||||
#!/bin/bash
|
||||
# 通用 MCP 调用脚本(支持 Streamable HTTP + Session ID)
|
||||
|
||||
set -e
|
||||
|
||||
TOOL_NAME="$1"
|
||||
TOOL_ARGS="$2"
|
||||
MCP_URL="${MCP_URL:-http://localhost:18060/mcp}"
|
||||
export no_proxy="${no_proxy:+$no_proxy,}localhost,127.0.0.1"
|
||||
|
||||
# 检查 jq 依赖
|
||||
if ! command -v jq &> /dev/null; then
|
||||
echo "错误: 需要安装 jq (apt-get install jq / brew install jq)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ -z "$TOOL_NAME" ]; then
|
||||
echo "用法: $0 <tool_name> [json_args]"
|
||||
echo ""
|
||||
echo "可用工具:"
|
||||
echo " check_login_status - 检查登录状态"
|
||||
echo " search_feeds - 搜索内容 {\"keyword\": \"...\", \"filters\": {\"sort_by\": \"最新\"}}"
|
||||
echo " list_feeds - 获取首页推荐"
|
||||
echo " get_feed_detail - 获取帖子详情 {\"feed_id\": \"...\", \"xsec_token\": \"...\"}"
|
||||
echo " post_comment_to_feed - 发表评论 {\"feed_id\": \"...\", \"xsec_token\": \"...\", \"content\": \"...\"}"
|
||||
echo " reply_comment_in_feed - 回复评论 {\"feed_id\": \"...\", \"xsec_token\": \"...\", \"content\": \"...\", \"comment_id\": \"...\", \"user_id\": \"...\"}"
|
||||
echo " user_profile - 获取用户主页 {\"user_id\": \"...\", \"xsec_token\": \"...\"}"
|
||||
echo " like_feed - 点赞 {\"feed_id\": \"...\", \"xsec_token\": \"...\"} 取消: {\"unlike\": true}"
|
||||
echo " favorite_feed - 收藏 {\"feed_id\": \"...\", \"xsec_token\": \"...\"} 取消: {\"unfavorite\": true}"
|
||||
echo " get_login_qrcode - 获取登录二维码"
|
||||
echo " delete_cookies - 删除 cookies,重置登录状态"
|
||||
echo " publish_content - 发布图文"
|
||||
echo " publish_with_video - 发布视频"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 校验 tool name,只允许字母数字和下划线
|
||||
if [[ ! "$TOOL_NAME" =~ ^[a-zA-Z_][a-zA-Z0-9_]*$ ]]; then
|
||||
echo "错误: 无效的工具名: $TOOL_NAME"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[ -z "$TOOL_ARGS" ] && TOOL_ARGS="{}"
|
||||
|
||||
# 校验 TOOL_ARGS 是合法 JSON
|
||||
if ! echo "$TOOL_ARGS" | jq empty 2>/dev/null; then
|
||||
echo "错误: 参数不是合法的 JSON: $TOOL_ARGS"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 1. Initialize 并获取 Session ID
|
||||
INIT_RESPONSE=$(curl --noproxy '*' -s -i -X POST "$MCP_URL" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"openclaw","version":"1.0"}}}')
|
||||
|
||||
SESSION_ID=$(echo "$INIT_RESPONSE" | grep -i "Mcp-Session-Id" | awk '{print $2}' | tr -d '\r\n')
|
||||
|
||||
if [ -z "$SESSION_ID" ]; then
|
||||
echo "错误: 无法获取 MCP Session ID"
|
||||
echo "请确保 MCP 服务正在运行: ./start-mcp.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. Initialized notification
|
||||
curl --noproxy '*' -s -X POST "$MCP_URL" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Mcp-Session-Id: $SESSION_ID" \
|
||||
-d '{"jsonrpc":"2.0","method":"notifications/initialized"}' > /dev/null
|
||||
|
||||
# 3. Call tool — 使用 jq 安全构建 JSON,避免 shell 注入
|
||||
CALL_PAYLOAD=$(jq -n \
|
||||
--arg name "$TOOL_NAME" \
|
||||
--argjson args "$TOOL_ARGS" \
|
||||
'{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":$name,"arguments":$args}}')
|
||||
|
||||
RESULT=$(curl --noproxy '*' -s --max-time 120 -X POST "$MCP_URL" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Mcp-Session-Id: $SESSION_ID" \
|
||||
-d "$CALL_PAYLOAD")
|
||||
|
||||
# 输出结果
|
||||
echo "$RESULT" | jq .
|
||||
Reference in New Issue
Block a user