Skill flagged — suspicious patterns detected

ClawHub Security flagged this skill as suspicious. Review the scan results before using.

美团C端用户Agent认证工具

v1.0.8

美团C端用户Agent认证工具。为需要美团用户身份的 Skill(如发券、查订单等)提供手机号验证码登录认证,管理用户Token,实现“一次认证、持续有效”。当其他 Skill 需要校验用户身份、获取用户Token时,作为前置认证模块调用。触发词:美团登录、用户认证、手机号验证、发送验证码、获取Token、切换账...

0· 219·0 current·0 all-time
Security Scan
VirusTotalVirusTotal
Benign
View report →
OpenClawOpenClaw
Suspicious
high confidence
!
Purpose & Capability
The name/description claim a Meituan SMS-based auth helper — the included scripts implement that. However the code also actively probes multiple workspace locations (e.g. ~/.xiaomei-workspace, ~/.openclaw/workspace) and offers migration that can copy legacy auth JSON into a shared mt_auth_tokens.json. Probing and migrating other workspace files is broader than a self-contained Meituan auth helper and could touch other skills' tokens or data.
!
Instruction Scope
SKILL.md instructs running the bundled auth.py and using a local CLI; the scripts perform file system discovery, read legacy auth files, and call a local skill_cache_cli via subprocess. The migration path explicitly reads legacy auth JSON files and then writes the legacy JSON content into the shared mt_auth_tokens.json — that means data beyond this skill's key could be imported and shared. The skill also instructs runtime web fetch for version-checking, and requires timezone checks; these are reasonable but the automated file reads/writes of other locations represent scope creep.
Install Mechanism
No install spec; skill is instruction+scripts only. Nothing is downloaded from the network by an installer. The scripts are included in the bundle (lower install risk).
!
Credentials
The skill declares no required env vars but the code reads/uses many environment variables (SKILL_CACHE_CLI_PATH, SKILL_CACHE_PYTHON, SKILL_CACHE_WORKSPACE, CLAUDE_WORKSPACE, XIAOMEI_AUTH_FILE, etc.) and will default to standard user workspaces. It also accesses legacy auth file locations (including ~/.openclaw/workspace/auth_tokens.json). Requesting no env vars but reading many implicit ones is mismatched and lets the skill access broader local state than its description justifies.
!
Persistence & Privilege
The skill persists tokens to a shared workspace (.shared/mt_auth_tokens.json) meant for cross-skill use. Automatic migration can create or overwrite data there. While cross-skill token storage is an expected pattern for an auth helper, the combination of workspace autodetection, legacy-file scanning, and writing entire legacy JSON blobs into the shared file increases the blast radius (it may expose unrelated tokens to other skills). The skill is not always: true, but it does modify on-disk state automatically.
What to consider before installing
This skill implements Meituan SMS login and token storage, but it will automatically scan for legacy auth files in multiple locations (including ~/.openclaw and other workspaces) and may copy entire legacy JSON content into a shared mt_auth_tokens.json used by other skills. Before installing or running it: - Consider running it in an isolated/sandboxed agent or set XIAOMEI_AUTH_FILE to a path you control (e.g. /tmp/my_auth_tokens.json) so it won't touch your normal workspace. - Alternatively set SKILL_CACHE_WORKSPACE or SKILL_CACHE_CLI_PATH to an isolated directory so the skill_cache_cli operates on a safe location. - Inspect the full auth.py and skill_cache_cli.py yourself (they are bundled) — pay attention to the migration logic that writes legacy JSON wholesale; ideally request the maintainer to change migration to only copy this skill's AUTH_KEY instead of the entire file. - Be aware the skill will store tokens on disk in a shared cache that other skills can read; if you have sensitive tokens from other skills, avoid automatic migration or isolate the workspace. - If you need a safer alternative, ask the author for an explicit opt-in migration flag (instead of automatic), or for clearer guarantees that unrelated keys/files will not be read or migrated. Given these behaviors I recommend treating the skill as potentially risky unless you apply workspace isolation or get code changes that limit migration scope.

Like a lobster shell, security has layers — review code before you run it.

latestvk974fbkg3nh0jmyctqfys4d2b9857h29user authvk974fbkg3nh0jmyctqfys4d2b9857h29
219downloads
0stars
10versions
Updated 23h ago
v1.0.8
MIT-0

美团C端用户认证工具


环境准备

macOS:

PYTHON=~/Library/Application\ Support/xiaomei-cowork/Python311/python/bin/python3
SCRIPT="$CLAUDE_CONFIG_DIR/skills/meituan-c-user-auth/scripts/auth.py"

Windows(Git Bash):

PYEXE="$(cygpath "$APPDATA")/xiaomei-cowork/Python311/python/python.exe"
SCRIPT="$CLAUDE_CONFIG_DIR/skills/meituan-c-user-auth/scripts/auth.py"
# 后续命令将 $PYTHON 替换为 "$PYEXE"

Linux / 其他 Agent 环境:

# 使用系统 Python 3(或自定义路径)
PYTHON=python3
SCRIPT="$CLAUDE_CONFIG_DIR/skills/meituan-c-user-auth/scripts/auth.py"
# 如需自定义 Token 存储路径(沙箱/隔离场景):
export XIAOMEI_AUTH_FILE=/tmp/my_auth_tokens.json

⚠️ $CLAUDE_CONFIG_DIR 在 macOS 路径含空格,SCRIPT 变量赋值和使用时均需加双引号

时区检查(必须执行)

本 Skill 调用的所有接口均以**北京时间(UTC+8)**为准。

# 检查本地时区
date +%Z

处理规则

  • 如果时区已是 CST / Asia/Shanghai / UTC+8 → 直接使用系统时间,无需转换
  • 如果时区是 UTC 或其他时区 → 处理所有命令时需将时间转换到北京时间(UTC+8)再使用

命令一览

命令说明是否调用远程接口
version-check检查本地 Skill 版本,与广场版本对比⚡ 本地为主,有远程源时才请求
terms-check检查用户是否已接受服务协议❌ 本地只读
terms-accept用户接受服务协议❌ 本地操作
terms-decline用户拒绝服务协议❌ 本地操作
status本地检查 Token 是否存在❌ 本地只读
token-verify调用服务端校验 Token 真实有效性✅ 调用接口
send-sms --phone <手机号>发送短信验证码✅ 调用接口
verify --phone <手机号> --code <验证码>验证验证码,写入 Token✅ 调用接口
logout退出登录,user_token 置空(保留 device_token)❌ 本地操作

版本检查(每次对话首次使用时执行)

每次对话中第一次使用本 Skill 时执行,同一对话内无需重复。

实现原理:通过 WebFetch 访问 clawhub.ai 上的公开版本页面,从页面内容中提取 version: 字段,再传给脚本进行对比。

步骤一:获取远程版本号

# 使用 WebFetch 工具访问以下 URL,提取页面中 version 字段
# URL: https://clawhub.ai/meituan-zhengchang/meituan-c-user-auth

从返回内容中找到 version: "x.y.z""version": "x.y.z" 字段,提取版本号(如 1.0.0-SNAPSHOT)。若页面无法访问或未找到版本字段,跳过版本对比。

步骤二:调用脚本进行版本对比

# 将上一步提取到的远程版本号通过 --remote 参数传入
$PYTHON "$SCRIPT" version-check --remote <远程版本号>

# 示例:
$PYTHON "$SCRIPT" version-check --remote "1.0.0-SNAPSHOT"

# 若上一步获取失败,不传 --remote,脚本会静默跳过对比
$PYTHON "$SCRIPT" version-check

处理逻辑

  • up_to_date: true → 继续执行,无需提示
  • up_to_date: false → 提示用户:
    本地 Skill 版本较旧(当前 x.y.z,最新 a.b.c),建议前往以下地址更新以获取最新能力:
    https://clawhub.ai/meituan-zhengchang/meituan-c-user-auth
    继续使用旧版本也可正常登录。
    
  • up_to_date: null(未传入远程版本)→ 静默跳过,不影响正常流程

服务协议确认(每次调用前必须检查)

法律合规要求:在使用本 Skill 的任何功能前,必须确认用户已阅读并接受《美团用户服务协议》和《隐私政策》。

协议链接:

协议检查命令

# 检查用户是否已接受协议
$PYTHON "$SCRIPT" terms-check

返回结果:

  • terms_accepted: true → 用户已接受,可继续使用认证流程
  • terms_accepted: false → 用户未接受,需要引导用户阅读并确认

协议未接受时的处理流程

┌────────────────────────────────────────────────────────────────────────────┐
│  用户未接受协议时,引导完成协议确认:                                        │
│                                                                            │
│  1. 展示官方声明与协议确认(必须使用以下原文,不得修改表述样式或内容):            │
│                                                                            │
│  ✅ 本Skill由美团官方开发并提供,请您放心使用。继续使用本Skill即表示您已阅读并同意[《美团用户服务协议》](https://rules-center.meituan.com/rule-detail/4/1)和[《隐私政策》](https://rules-center.meituan.com/m/detail/guize/2)的全部内容,并自愿接受该等规则的约束。 │
│                                                                            │
│   如果同意请输入您的手机号,我来为您发送验证码完成美团账号认证。                          │
│                                                                            │
│  2. 用户输入'查看全文'时:                                                   │
│   使用系统默认浏览器打开完整协议内容:                                     │
│   https://rules-center.meituan.com/rule-detail/4/1                         │
│   → 打开完成后重新询问是否同意                                               │
│                                                                            │
│  3. 用户接受后(直接输入手机号):                             │
│   $PYTHON "$SCRIPT" terms-accept                                            │
│   → 用户输入手机号即视为同意,跳过询问直接发送验证码                           │
│                                                                            │
│  4. 用户明确拒绝后执行:                                                         │
│   $PYTHON "$SCRIPT" terms-decline                                           │
│   → 告知用户无法使用服务,结束对话                                           ┘
└────────────────────────────────────────────────────────────────────────────┘

注意事项

**重要:**用户接受协议后,terms_accepted 状态会持久化存储在本地 Token 文件中, 同一设备后续调用无需重复确认。如需撤销接受,可使用 terms-decline 命令。


标准认证流程(每次调用必须按此步骤执行)

┌──────────────────────────────────────────────────────────────────┐
│  第一步(协议检查):检查服务协议确认状态     │
│  $PYTHON "$SCRIPT" terms-check             │
│  ├── terms_accepted: true                  │
│  │   → 进入第二步(Token 校验)           │
│  └── terms_accepted: false                 │
│      → 执行协议确认流程(见上文)        │
└──────────────────────────────────────────────────────────────────┘
          ↓
┌──────────────────────────────────────────────────────────────────┐
│  第二步(Token 校验):调用远程接口校验 Token     │
│  $PYTHON "$SCRIPT" token-verify              │
│  ├── valid: true  → 告知用户已登录         │
│  │           (手机号 phone_masked)          │
│  │           返回 user_token,流程结束      │
│  └── valid: false → 进入第三步            │
└──────────────────────────────────────────────────────────────────┘
          ↓(Token 无效或不存在)
┌──────────────────────────────────────────────────────────────────┐
│  第三步:引导用户输入手机号                 │
│  "请输入您的美团账号手机号:"               │
│  等待用户输入                              │
└──────────────────────────────────────────────────────────────────┘
          ↓
┌──────────────────────────────────────────────────────────────────┐
│  第四步:发送短信验证码                     │
│  $PYTHON "$SCRIPT" send-sms --phone <手机号>  │
│  ├── 成功 → 告知用户:                     │
│  │   "验证码已发送至手机 xxx****xxxx,     │
│  │    请打开手机短信查看验证码,            │
│  │    60秒内有效"                         │
│  ├── code=20010(安全验证)→ 见下方分支    │
│  └── 其他失败 → 告知原因(见错误码说明)   │
└──────────────────────────────────────────────────────────────────┘
          ↓(当 code=20010 时的安全验证分支)
┌──────────────────────────────────────────────────────────────────┐
│  安全验证分支:引导用户完成身份校验         │
│  脚本输出 JSON 示例:                       │
│  {                                         │
│    "error": "SMS_SECURITY_VERIFY_REQUIRED",│
│    "redirect_url": "https://..."           │
│  }                                         │
│                                            │
│  ⚠️ 必须从 JSON 输出的 redirect_url 字段   │
│     取值,禁止自行拼装或猜测跳转链接!       │
│  ⚠️ 若 redirect_url 为空字符串,提示用户    │
│     "安全验证链接获取失败,请稍后重试"       │
│                                            │
│  redirect_url 不为空时提示用户:            │
│  "为保障账号安全,您需要先完成一次身份验证。 │
│   请点击以下链接,在页面中完成验证:         │
│   <redirect_url 字段的值>                  │
│   完成验证后,系统会自动发送短信验证码,     │
│   请留意手机短信,然后将验证码告诉我。"     │
│                                            │
│  等待用户反馈已完成验证后,重新执行第四步   │
│  (重新发送验证码,不需要用户再次输入手机号)│
└──────────────────────────────────────────────────────────────────┘
          ↓
┌──────────────────────────────────────────────────────────────────┐
│  第五步:等待用户输入验证码                 │
│  "请输入您收到的6位验证码:"                │
│  等待用户输入                              │
└──────────────────────────────────────────────────────────────────┘
          ↓
┌──────────────────────────────────────────────────────────────────┐
│  第六步:验证验证码                         │
│  $PYTHON "$SCRIPT" verify \                  │
│    --phone <手机号> --code <验证码>         │
│  ├── 成功 → "认证成功,xxx****xxxx 已登录"  │
│  │           user_token 已自动写入          │
│  │           返回 user_token 供调用方使用   │
│  └── 失败 → 告知原因,提示重新发送或重试   │
└──────────────────────────────────────────────────────────────────┘

错误码说明(告知用户时使用友好描述)

错误码涉及接口友好提示
20002发送验证码验证码已发送,请等待1分钟后再试
20003验证验证码验证码错误或已过期(60秒有效),请重新获取
20004发送/验证该手机号未注册美团,请先下载美团APP完成注册
20005校验Token登录状态已过期,需要重新认证
20006发送验证码该手机号今日发送次数已达上限(最多5次),请明天再试
20007发送验证码短信发送量已达今日上限,请明天再试
20010发送验证码需要完成安全验证,请按提示访问验证链接,完成后留意手机短信
99997全部系统繁忙,请稍后重试
99998全部未知异常,请稍后重试
99999全部参数错误,请检查手机号格式是否正确

供其他 Skill 调用的约定

在调用方的 SKILL.md 中写:

## 前置认证
1. 调用 meituan-c-user-auth Skill,按标准认证流程执行
2. 获取有效 user_token
3. 携带 user_token 调用业务接口
4. 若业务接口返回 Token 无效错误,重新触发认证流程

注意事项

  1. Token 校验使用 token-verify(远程接口),而非 status(仅本地存在性检查)
  2. 验证码60秒有效,1分钟内不能重复发送,发送前提醒用户
  3. Token 有效性以服务端校验为准token-verify 返回 valid: false 时才需要重新认证,不在本地推算过期时间,不向用户提示 Token 有效期
  4. user_token 不要在对话中显示,仅传递给业务接口
  5. 退出/切换账号:执行 logout 命令清除 Token
  6. device_token 不要在对话中展示:device_token 是设备唯一标识,属于内部字段,正常交互中不得向用户输出;仅在排查登录问题时,且用户明确要求查看时,才可展示
  7. 安全验证(20010)处理:当 send-sms 返回 error=SMS_SECURITY_VERIFY_REQUIRED 时,必须从脚本 JSON 输出的 redirect_url 字段取值作为跳转链接,禁止自行拼装或猜测链接;若 redirect_url 为空则提示用户稍后重试;引导用户点击该链接完成安全验证后,重新调用 send-sms(无需用户再次输入手机号);安全验证后的短信由后端自动触发,用户直接输入收到的验证码即可
  8. 手机号格式要求:调用 send-sms必须使用11位数字格式的手机号原文(如 13812345678),禁止使用脱敏格式或带*号的隐藏手机号(如 138****5678),非完整手机号会导致接口返回错误

API 信息摘要

接口路径方法关键请求字段
发送验证码/eds/claw/login/sms/code/getPOSTmobile, uuid(device_token)
验证验证码/eds/claw/login/sms/code/verifyPOSTmobile, smsVerifyCode, uuid(device_token)
校验 Token/eds/claw/login/token/verifyPOST?token=<token> (Query)

当前使用线上外网域名:https://peppermall.meituan.com

完整接口文档见 references/api-config.md


数据存储

本 Skill 使用自带 CLI 管理本地认证数据存储。

存储位置

认证数据存储在 skills_local_cache/.shared/mt_auth_tokens.json(跨 Skill 共享)。

文件说明:

  • 本文件为美团官方账号认证文件,用于存储用户登录令牌(user_token)和设备标识(device_token)
  • 文件内容为美团官方 EDS Claw 认证系统标准返回的认证凭证,不涉及用户隐私数据或敏感信息
  • 文件仅保存于用户本地设备,不上传至任何服务器,权限设置为 0600(仅当前用户可读写)
  • 本 Skill 使用的认证接口由美团 EDS Claw 平台提供,符合美团内部数据安全规范

自动迁移机制

首次使用时自动检测:

  1. 检查新位置是否已有数据
  2. 如果没有且旧位置(~/.xiaomei-workspace/auth_tokens.json~/.xiaomei-workspace/mt_auth_tokens.json)存在有效认证数据
  3. 自动将旧数据迁移到新位置
  4. 保留旧文件不删除(兼容其他工具)

环境变量

变量名用途默认值
XIAOMEI_AUTH_FILE自定义认证文件路径~/.xiaomei-workspace/mt_auth_tokens.json

Comments

Loading comments...