expert-writing-asmcp

基于 AnyShare 的专家写作助手 - 上传项目文件到文档库,调用全文写作技能生成大纲文档,确认后基于大纲生成正文

Safety Notice

This listing is from the official public ClawHub registry. Review SKILL.md and referenced scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "expert-writing-asmcp" with this command: npx skills add anyshare-aishu/expert-writing-asmcp

安全与排障文档(必读)


Expert Writing ASMCP - 专家写作助手

基于 AnyShare ASMCP 的全文写作工具,采用「大纲 → 确认 → 正文」两阶段流程。


🚀 首次配置

术语说明

术语含义
Access TokenAnyShare 用户访问令牌,用于 API 身份认证
source_ranges写作引用的源文档范围,格式为 [{"id":"短ID","type":"doc"}]
skill_name写作技能标识:__全文写作__3(大纲)、__大纲写作__1(正文)

Step 1: 配置 MCP 服务与 Token

本技能依赖 anyshare-asmcp MCP 服务,Token 须预先配置到 ~/.openclaw/workspace/config/mcporter.json

{
  "mcpServers": {
    "anyshare-asmcp": {
      "type": "Streamable",
      "url": "https://anyshare.aishu.cn/asmcp/",
      "headers": {
        "Authorization": "Bearer <your_token_here>"
      }
    }
  }
}

获取 Token:登录 AnyShare Web → 右上角头像 → MCP授权凭证 → 复制令牌。

Step 2: 验证连通性

mcporter call anyshare-asmcp.doc_lib_owned

返回文档库列表即表示认证成功。

Step 3: 配置 OpenClaw 运行时超时(必须)

正文生成为长耗时调用,必须~/.openclaw/config.toml 中配置超时:

[skills.entries.expert-writing-asmcp]
env.MCPORTER_CALL_TIMEOUT = "300000"  # 5 分钟,毫秒

或使用 gateway config.patch

{
  "skills": {
    "entries": {
      "expert-writing-asmcp": {
        "env": {
          "MCPORTER_CALL_TIMEOUT": "300000"
        }
      }
    }
  }
}


⚠️ 核心流程约束

大纲确认规则

场景处理方式
用户确认大纲进入生成正文阶段
用户要求修改大纲1. 修改大纲内容 2. 保存为"大纲v2.md" 3. 展示给用户确认 4. 等待用户明确确认 5. 才能写正文
用户说"可以了"/"没问题"必须用户说"确认,开始写正文"才算确认
5分钟无响应自动进入写正文环节(不再等待)

关键原则

  1. 大纲确认后才能写正文 - 必须得到用户明确回复"确认,开始写正文"
  2. 修改大纲必须重新确认 - 任何大纲调整都需要新版大纲+用户确认
  3. 大纲微调≠重新生成 - 只修改用户要求的内容,其他章节保持不变
  4. 超时自动执行 - 展示大纲后等待5分钟,如用户无操作则自动进入写正文

⚠️ 关键经验总结(2026-05-08 更新)

1. 正文生成技能区分

任务技能times说明
生成大纲__全文写作__3times=0基于模板生成章节结构
生成正文__大纲写作__1times=1基于大纲生成完整正文内容

重要:生成正文必须用 __大纲写作__1 + times=1,不要用 __全文写作__3(它会把正文需求也输出成提纲"本节将..."格式)

2. 超时问题

  • 默认超时:mcporter 默认 60000ms(60秒),完整正文生成会超时
  • 解决方案:调用时必须加 --timeout 180000(180秒)或设置环境变量 MCPORTER_CALL_TIMEOUT=300000
  • 示例:mcporter call ... --timeout 180000

3. source_ranges JSON 格式

  • 格式必须严格为:[{"id":"短ID","type":"doc"}]
  • 如果 JSON 格式不正确,会报错:cannot unmarshal string into Go struct
  • 建议使用 Python 脚本构建参数,避免 shell 转义问题

4. selection 传大纲内容

  • 生成正文时,selection 参数传入大纲完整内容
  • 大纲内容较长时,建议通过文件读取后传递给脚本(避免 shell 特殊字符冲突)

5. 建议的 Python 脚本方式

复杂参数(大纲内容、超长 query)建议用 Python 构建脚本,避免 shell 转义问题:

# 保存大纲内容到文件
python3 -c "import json; print(json.load(open('/tmp/template_outline.json')).get('document_content',''))" > /tmp/selection.txt

# 通过文件传递
nohup bash -c 'mcporter call ... selection:"$(cat /tmp/selection.txt)" skill_name:__大纲写作__1 times:1 --timeout 180000' &

使用流程

用户:帮我写个技术总结,基于这些项目资料
      ↓
系统:请上传项目文件或提供文件路径
      ↓
用户:[上传文件:技术方案.docx, 会议纪要.pdf]
      ↓
系统:📤 上传中... ⏳ 等待索引... ✅ 完成
      ↓
系统:📄 获取内置写作模板...
      ↓
系统:🔍 正在生成大纲文档...
      ↓
系统:
      ┌─────────────────────────────────────┐
      │ 📄 大纲已生成并保存                  │
      │ 位置:文档库/写作成果/           │
      │        2025-04-22/技术总结/          │
      │        大纲.md                       │
      │                                     │
      │ 内容预览:                          │
      │ 1. 项目背景                         │
      │ 2. 技术方案概述                     │
      │ 3. 实施过程                         │
      │ 4. 成果与总结                       │
      └─────────────────────────────────────┘
      请确认大纲,如需修改请告诉我
      ↓
用户:确认,开始生成正文  ← 5分钟内确认
      ↓
或:5分钟后无响应 → 自动进入写正文
      ↓
系统:✍️ 正在基于大纲生成正文(使用 __大纲写作__1 + times:1)...
      ↓
系统:
      ✅ 写作完成
      📄 大纲:写作成果/2025-04-22/技术总结/大纲.md
      📄 正文:写作成果/2025-04-22/技术总结/正文.md
      📁 原文:写作成果/2025-04-22/技术总结/参考资料/
      🔗 分享链接:https://anyshare.aishu.cn/link/xxx

模板配置

技能支持两种大纲生成方式:

优先级模板类型来源说明
优先内置模板API 获取调用 __全文写作__3 内置模板接口,基于模板结构生成大纲
备用无模板直接生成直接基于项目资料和query生成大纲

方式一:API 获取内置模板(推荐)

# 获取内置全文写作模板
curl -s -X GET \
  "https://anyshare.aishu.cn/api/intelli-search/v1/skills/templates/default?skill_name=__全文写作__3" \
  -H "authorization: $ACCESS_TOKEN" \
  -H "content-type: application/json" > /tmp/template_response.json

TEMPLATE_CONTENT=$(python3 -c "import json; print(json.load(open('/tmp/template_response.json')).get('template',''))")

if [ -z "$TEMPLATE_CONTENT" ]; then
    echo "⚠️ API获取模板失败,使用直接生成方式"
else
    echo "✅ 使用内置模板(API获取),${#TEMPLATE_CONTENT} 字符"
fi

📋 写作场景模板

技能内置了 9 种专业写作场景模板,涵盖常用写作需求。

模板列表

编号模板名称适用场景核心章节
1可行性研究报告项目立项、技术改造项目概述、市场分析、技术方案、投资估算、效益分析、风险分析
2项目建议书立项申请、审批汇报项目概况、必要性分析、建设方案、投资估算、效益分析
3商业计划书创业融资、商务合作执行摘要、市场分析、商业模式、财务预测、融资计划
4技术方案实施方案、技术评审需求分析、总体设计、详细设计、实施计划、风险分析
5项目总结报告项目复盘、经验沉淀项目概述、实施过程、成果交付、经验教训、后续建议
6市场调研报告市场分析、行业研究市场概况、竞争分析、用户分析、市场趋势、结论建议
7产品介绍文档产品宣传、方案展示产品概述、功能介绍、应用场景、技术优势、案例展示
8年度工作报告部门总结、年度汇报年度概述、重点工作、业绩成果、问题分析、下年计划
9解决方案投标文件、客户方案需求理解、方案设计、产品介绍、实施保障、服务保障

如何使用模板

方式一:用户选择模板

用户在写作时指定模板名称(如"用商业计划书写"),技能自动调用对应模板结构生成大纲。

方式二:用户描述场景,技能自动匹配

  • 用户说"帮我写个融资用的计划书" → 自动匹配【商业计划书】
  • 用户说"写个项目立项报告" → 自动匹配【项目建议书】
  • 用户说"做个市场调研" → 自动匹配【市场调研报告】

模板匹配逻辑(内置于技能 prompt)

当用户提到以下关键词时,自动匹配对应模板:
- "融资" / "商业计划" / "BP" → 商业计划书
- "项目立项" / "项目建议" / "可研" → 可行性研究报告 或 项目建议书
- "技术方案" / "实施方案" / "技术设计" → 技术方案
- "项目总结" / "复盘" / "总结报告" → 项目总结报告
- "市场调研" / "行业分析" / "调研报告" → 市场调研报告
- "产品介绍" / "产品宣传" / "产品手册" → 产品介绍文档
- "年度总结" / "年度报告" / "年度汇报" → 年度工作报告
- "投标" / "解决方案" / "客户方案" → 解决方案
- 默认 → 可行性研究报告

模板结构文件

详细模板结构定义保存在:

templates/
├── README.md                    # 模板分类索引
├── 文档类/                      # 项目立项类文档
│   ├── 01_可行性研究报告.md
│   ├── 02_项目建议书.md
│   └── 03_商业计划书.md
├── 报告类/                      # 总结汇报类文档
│   ├── 04_项目总结报告.md
│   ├── 05_年度工作报告.md
│   └── 06_市场调研报告.md
└── 方案类/                      # 技术/商务方案
    ├── 07_技术方案.md
    ├── 08_产品介绍文档.md
    └── 09_解决方案.md

包含 9 种模板的完整章节结构,每种模板独立文件方便维护。


目录结构设计

文档库/
├── 写作成果/                    ← 主目录(复用已存在的)
│   └── 2025-04-22/             ← 日期目录(每天新建)
│       └── 项目名称/           ← 项目专属目录
│           ├── 参考资料/       ← 上传的原始文件
│           │   ├── 技术方案.docx
│           │   └── 会议纪要.pdf
│           ├── 大纲.md         ← 生成的大纲
│           └── 正文.md         ← 生成的正文
└── ...

MCP Tool 调用详解

1. smart_assistant (大纲生成: __全文写作__3 / 正文生成: __大纲写作__1)

用途

  • 调用 __全文写作__3(times=0)生成大纲
  • 调用 __大纲写作__1(times=1)生成完整正文

⚠️ 正文生成必须加 --timeout:默认 60 秒会超时,必须加 --timeout 180000

# 生成大纲 (times=0) - 使用 __全文写作__3
mcporter call anyshare-asmcp.smart_assistant \
    bot_id:smart_assistant \
    query:"写作主题:项目可行性研究报告" \
    skill_name:__全文写作__3 \
    source_ranges:"[{\"id\":\"短ID\",\"type\":\"doc\"}]" \
    times:0

# 生成正文 (times=1, selection=大纲) - 使用 __大纲写作__1(必须加 --timeout)
SHORT_ID=$(cat /tmp/verify_short_id.txt)
OUTLINE=$(python3 -c "import json; print(json.load(open('/tmp/template_outline.json')).get('document_content',''))")

nohup mcporter call anyshare-asmcp.smart_assistant \
    bot_id:smart_assistant \
    query:"基于以下大纲,撰写完整的可行性研究报告正文内容" \
    selection:"$OUTLINE" \
    skill_name:__大纲写作__1 \
    source_ranges:"[{\"id\":\"$SHORT_ID\",\"type\":\"doc\"}]" \
    times:1 \
    --timeout 180000 > /tmp/writing_result.json 2>&1 &

参数说明

参数类型必填说明
bot_idstring固定值 "smart_assistant"
querystring查询文本
skill_namestring大纲用 __全文写作__3,正文用 __大纲写作__1
source_rangesstring文件ID列表,格式: [{"id":"xxx","type":"doc"}]
selectionstring生成正文时传入大纲完整内容
timesint0=大纲,1=正文

返回结构

{
  "code": 0,
  "document_content": "生成的完整内容...",
  "status": "completed"
}

注意:从 document_content 字段获取生成的内容


2. folder_sub_objects (目录复用检查)

用途:列出目录内容,检查是否已存在同名目录

mcporter call anyshare-asmcp.folder_sub_objects \
    access_token="$ACCESS_TOKEN" \
    id="$PARENT_GNS" \
    limit=100

返回

{
  "dirs": [
    {"name": "写作成果", "id": "gns://xxx/yyy"}
  ],
  "files": [...]
}

3. dir_create (创建目录)

mcporter call anyshare-asmcp.dir_create \
    access_token="$ACCESS_TOKEN" \
    docid="$PARENT_GNS" \
    name="目录名"

4. file_osbeginupload / file_osendupload (上传文件)

# 开始上传
UPLOAD=$(mcporter call anyshare-asmcp.file_osbeginupload \
    access_token="$ACCESS_TOKEN" \
    docid="$TARGET_DIR" \
    name="文件名.docx" \
    length=12345)

# 提取凭证
URL=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['authrequest'][1])")
AUTH=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['authrequest'][2])")
DATE=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['authrequest'][4])")
DOCID=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['docid'])")
REV=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['rev'])")

# 上传文件
curl -X PUT -H "$AUTH" -H "Content-Type: application/octet-stream" -H "$DATE" \
    --data-binary @"文件路径" "$URL"

# 确认上传
mcporter call anyshare-asmcp.file_osendupload \
    access_token="$ACCESS_TOKEN" \
    docid="$DOCID" \
    rev="$REV"

5. file_sharedlink_realname_create (生成分享链接)

注意:item.id 需要使用完整的 GNS 路径,不能只使用短 ID

mcporter call anyshare-asmcp.file_sharedlink_realname_create \
    access_token="$ACCESS_TOKEN" \
    item="{\"id\":\"完整GNS路径\",\"type\":\"file\"}"

返回

{
  "code": 0,
  "link_url": "https://anyshare.aishu.cn/link/xxx",
  "id": "xxx"
}

完整执行示例

Phase 0: 配置

ACCESS_TOKEN="$ACCESS_TOKEN"  # 从 mcporter 配置读取,禁止硬编码
# 使用指定的文档库
DOC_LIB_GNS="gns://743EFFF4E4B341E8A14DE5B375401365"

Phase 1: 创建目录

# 检查并复用"写作成果"目录
echo "📁 检查写作成果目录..."
LIST=$(mcporter call anyshare-asmcp.folder_sub_objects \
    access_token="$ACCESS_TOKEN" \
    id="$DOC_LIB_GNS" limit:100)

# 检查是否存在
WRITING_DIR=$(echo "$LIST" | python3 -c "
import sys,json
data=json.load(sys.stdin)
for d in data.get('dirs',[]):
    if d.get('name')=='写作成果':
        print(d.get('id',''))
        break
")

if [ -z "$WRITING_DIR" ]; then
    echo "🆕 创建写作成果目录..."
    RESULT=$(mcporter call anyshare-asmcp.dir_create \
        access_token="$ACCESS_TOKEN" \
        docid="$DOC_LIB_GNS" name="写作成果")
    WRITING_DIR=$(echo "$RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin).get('docid',''))")
else
    echo "📁 复用已有目录: $WRITING_DIR"
fi

# 创建日期目录(复用已存在的)
TODAY=$(date +%Y-%m-%d)
DATE_LIST=$(mcporter call anyshare-asmcp.folder_sub_objects \
    access_token="$ACCESS_TOKEN" \
    id="$WRITING_DIR" limit:100)

DATE_DIR=$(echo "$DATE_LIST" | python3 -c "
import sys,json
data=json.load(sys.stdin)
for d in data.get('dirs',[]):
    if d.get('name')=='$TODAY':
        print(d.get('id',''))
        break
")

if [ -z "$DATE_DIR" ]; then
    echo "🆕 创建日期目录: $TODAY"
    DATE_RESULT=$(mcporter call anyshare-asmcp.dir_create \
        access_token="$ACCESS_TOKEN" docid="$WRITING_DIR" name="$TODAY")
    DATE_DIR=$(echo "$DATE_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin).get('docid',''))")
else
    echo "📁 复用已有日期目录: $TODAY"
fi

# 创建项目目录
PROJECT_NAME="技术总结"
PROJECT_RESULT=$(mcporter call anyshare-asmcp.dir_create \
    access_token="$ACCESS_TOKEN" docid="$DATE_DIR" name="$PROJECT_NAME")
PROJECT_DIR=$(echo "$PROJECT_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin).get('docid',''))")

# 创建参考资料目录
REF_RESULT=$(mcporter call anyshare-asmcp.dir_create \
    access_token="$ACCESS_TOKEN" docid="$PROJECT_DIR" name="参考资料")
REF_DIR=$(echo "$REF_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin).get('docid',''))")

echo "✅ 目录创建完成: $PROJECT_DIR"

Phase 2: 上传文件

echo "📤 上传参考文件..."
for FILE in 技术方案.docx 会议纪要.pdf; do
    SIZE=$(stat -f%z "$FILE")

    # 获取上传凭证
    UPLOAD=$(mcporter call anyshare-asmcp.file_osbeginupload \
        access_token="$ACCESS_TOKEN" \
        docid="$REF_DIR" name="$FILE" length=$SIZE)

    URL=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['authrequest'][1])")
    AUTH=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['authrequest'][2])")
    DATE=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['authrequest'][4])")
    DOCID=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['docid'])")
    REV=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['rev'])")

    # 上传
    curl -X PUT -H "$AUTH" -H "Content-Type: application/octet-stream" -H "$DATE" \
        --data-binary @"$FILE" "$URL"

    # 确认
    mcporter call anyshare-asmcp.file_osendupload \
        access_token="$ACCESS_TOKEN" docid="$DOCID" rev="$REV"

    # 收集短ID
    SHORT_ID=$(echo "$DOCID" | awk -F'/' '{print $NF}')
    echo "✅ 上传完成: $FILE -> $SHORT_ID"
done

# 构建 source_ranges
SOURCE_RANGES="[{\"id\":\"$SHORT_ID1\",\"type\":\"doc\"},{\"id\":\"$SHORT_ID2\",\"type\":\"doc\"}]"

# 等待索引(建议等待30秒以上)
echo "⏳ 等待文件索引..."
sleep 30

Phase 3: 生成大纲

echo "📄 获取内置写作模板..."
curl -s -X GET \
  "https://anyshare.aishu.cn/api/intelli-search/v1/skills/templates/default?skill_name=__全文写作__3" \
  -H "authorization: $ACCESS_TOKEN" \
  -H "content-type: application/json" > /tmp/template_response.json

TEMPLATE_CONTENT=$(python3 -c "import json; print(json.load(open('/tmp/template_response.json')).get('template',''))")

if [ -z "$TEMPLATE_CONTENT" ]; then
    echo "⚠️ API获取模板失败,使用直接生成方式"
    TEMPLATE_CONTENT=""
fi

echo "🔍 生成大纲(基于内置模板)..."

# 使用 Python 构建 query(避免 shell 转义问题)
python3 << PYEOF
import json

template_content = """${TEMPLATE_CONTENT}"""

query = f"""基于以下内置模板的结构格式,为项目撰写一份可行性研究报告大纲。

模板结构参考:
{template_content}

要求:
1. 参考模板的层级结构格式(一级标题、二级标题、表格等)
2. 内容替换为项目的可行性研究报告章节
3. 章节要专业、完整,体现可行性研究报告的标准结构
4. 可以包含项目概述、市场分析、建设方案、技术方案、投资估算、效益分析、风险分析等核心章节"""

with open('/tmp/writing_query.txt', 'w', encoding='utf-8') as f:
    json.dump({"query": query}, f, ensure_ascii=False)
PYEOF

QUERY=$(python3 -c "import json; print(json.load(open('/tmp/writing_query.txt'))['query'])")

OUTLINE_RESULT=$(mcporter call anyshare-asmcp.smart_assistant \
    access_token="$ACCESS_TOKEN" \
    bot_id="smart_assistant" \
    query="$QUERY" \
    skill_name="__全文写作__3" \
    source_ranges="$SOURCE_RANGES" \
    times=0)

# 提取内容
OUTLINE_CONTENT=$(echo "$OUTLINE_RESULT" | python3 -c "
import sys,json
data=json.load(sys.stdin)
print(data.get('document_content',''))
")

if [ -z "$OUTLINE_CONTENT" ]; then
    echo "❌ 获取大纲失败"
    exit 1
fi

# 保存大纲
OUTLINE_MD="# 技术总结大纲

${OUTLINE_CONTENT}

---
*由 OpenClaw 写作助手生成*"

echo "$OUTLINE_MD" > /tmp/大纲.md
SIZE=$(stat -f%z /tmp/大纲.md)

# 上传大纲
UPLOAD=$(mcporter call anyshare-asmcp.file_osbeginupload \
    access_token="$ACCESS_TOKEN" docid="$PROJECT_DIR" name="大纲.md" length=$SIZE)

URL=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['authrequest'][1])")
AUTH=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['authrequest'][2])")
DATE=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['authrequest'][4])")

curl -X PUT -H "$AUTH" -H "Content-Type: application/octet-stream" -H "$DATE" \
    --data-binary @/tmp/大纲.md "$URL"

mcporter call anyshare-asmcp.file_osendupload \
    access_token="$ACCESS_TOKEN" \
    docid="$(echo "$UPLOAD" | python3 -c 'import sys,json; print(json.load(sys.stdin)["docid"])')" \
    rev="$(echo "$UPLOAD" | python3 -c 'import sys,json; print(json.load(sys.stdin)["rev"])')"

echo "✅ 大纲已保存"

Phase 4: 展示大纲等待确认

echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📋 大纲内容预览"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "$OUTLINE_CONTENT"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "请确认大纲,如需修改请告诉我"
echo "确认后请说:确认,开始写正文"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━"

Phase 5: 生成正文(用户确认后执行)

echo "✍️ 生成正文(使用 __大纲写作__1 + times:1,约2-4分钟)..."
SHORT_ID=$(cat /tmp/verify_short_id.txt)

# 大纲内容通过文件传递(避免shell转义问题)
python3 -c "import json; print(json.load(open('/tmp/template_outline.json')).get('document_content',''))" > /tmp/selection.txt

# 后台执行,避免60秒超时
nohup mcporter call anyshare-asmcp.smart_assistant \
    access_token="$ACCESS_TOKEN" \
    bot_id:smart_assistant \
    query:"基于以下大纲,撰写完整的可行性研究报告正文内容" \
    selection:"$(cat /tmp/selection.txt)" \
    skill_name:__大纲写作__1 \
    source_ranges:"[{\"id\":\"$SHORT_ID\",\"type\":\"doc\"}]" \
    times:1 \
    --timeout 180000 > /tmp/writing_result.json 2>&1 &

# 等待生成完成
echo "⏳ 等待正文生成(约2-4分钟)..."
sleep 150

# 提取内容
DOC_CONTENT=$(python3 -c "
import json
data=json.load(open('/tmp/writing_result.json'))
print(data.get('document_content',''))
")

if [ -z "$DOC_CONTENT" ]; then
    echo "❌ 正文生成失败,请检查 /tmp/writing_result.json"
    exit 1
fi

# 保存正文
DOC_MD="# 技术总结

\${DOC_CONTENT}

---
*由 OpenClaw 写作助手生成*"

echo "$DOC_MD" > /tmp/正文.md
SIZE=$(stat -f%z /tmp/正文.md)

# 上传正文
UPLOAD=$(mcporter call anyshare-asmcp.file_osbeginupload \
    access_token="$ACCESS_TOKEN" docid="$PROJECT_DIR" name="正文.md" length=$SIZE)

URL=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['authrequest'][1])")
AUTH=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['authrequest'][2])")
DATE=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['authrequest'][4])")
FULL_GNS=$(echo "$UPLOAD" | python3 -c "import sys,json; print(json.load(sys.stdin)['docid'])")

curl -X PUT -H "$AUTH" -H "Content-Type: application/octet-stream" -H "$DATE" \
    --data-binary @/tmp/正文.md "$URL"

mcporter call anyshare-asmcp.file_osendupload \
    access_token="$ACCESS_TOKEN" \
    docid="$FULL_GNS" \
    rev="$(echo "$UPLOAD" | python3 -c 'import sys,json; print(json.load(sys.stdin)["rev"])'")

echo "✅ 正文已保存"

Phase 6: 生成分享链接

echo "🔗 生成分享链接..."
SHARE_RESULT=$(mcporter call anyshare-asmcp.file_sharedlink_realname_create \
    access_token="$ACCESS_TOKEN" \
    item="{\"id\":\"$FULL_GNS\",\"type\":\"file\"}")

SHARE_URL=$(echo "$SHARE_RESULT" | python3 -c "import sys,json; print(json.load(sys.stdin).get('link_url',''))")
echo "分享链接: $SHARE_URL"

输出结果

━━━━━━━━━━━━━━━━━━━━━━━━━━━━
✅ 写作完成
━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📁 位置:写作成果/2025-04-22/技术总结/
📄 大纲:大纲.md
📄 正文:正文.md
📁 原文:参考资料/
🔗 分享:https://anyshare.aishu.cn/link/xxx
━━━━━━━━━━━━━━━━━━━━━━━━━━━━

依赖

  • MCP: anyshare-asmcp
  • Tools:
    • doc_lib_owned - 获取文档库
    • folder_sub_objects - 检查目录复用
    • dir_create - 创建目录
    • file_osbeginupload/endupload - 文件上传
    • smart_assistant - 大纲/正文生成
    • file_sharedlink_realname_create - 分享链接

版本:2.0.0

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

General

Jetson CUDA Voice Pipeline

Fully offline, CUDA-accelerated local voice assistant pipeline for NVIDIA Jetson. Wake word (openWakeWord) → real-time VAD → whisper.cpp GPU STT → LLM → Pipe...

Registry SourceRecently Updated
General

Triumvirate Protocol

Orchestrates multi-AI debates with identity-aware context, tracking rounds and threads, and synthesizing verdicts and insights across providers.

Registry SourceRecently Updated
General

Maxhub Zhihu

知乎数据采集与分析。当用户提到知乎、zhihu、问答等相关需求时激活此Skill。

Registry SourceRecently Updated
1150xiewxx
General

Maxhub Reddit

Reddit数据采集。当用户提到reddit、社区、帖子等相关需求时激活此Skill。

Registry SourceRecently Updated
1110xiewxx