mcpField
A
alibabacloud-icpba-sucessdata-query

alibabacloud-icpba-sucessdata-query

github.com/aliyun其他28196 次安装1 天前更新
代码仓库

关于 alibabacloud-icpba-sucessdata-query

用于通过 Alibaba Cloud Beian 服务 API 查询 ICP 备案成功信息及相关风险的 Agent Skill。它获取主体、网站和 APP 信息,供用户核查备案情况并处理发现的风险。

主要功能

  1. 01查询 ICP 备案成功数据
  2. 02获取主体与网站详情
  3. 03获取 APP 备案信息
  4. 04返回相关风险信息
  5. 05使用 Python Common SDK

适用场景

  1. 01查看已完成的 ICP 备案记录
  2. 02核对已备案的网站和 APP 信息
  3. 03发现备案风险及处理期限

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/aliyun/alibabacloud-aiops-skills --skill alibabacloud-icpba-sucessdata-query

安装后在 Claude Code 中输入/alibabacloud-icpba-sucessdata-query确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
acceptance-criteria.md
cli-installation-guide.md
common-sdk-usage.md
error-handling.md
ram-policies.md
related-commands.md
verification-method.md
scripts/
query_icp_filing.py
requirements.txt
validate_skill.py

详细介绍

阿里云 ICP 备案成功数据查询

场景说明

在阿里云成功完成 ICP 备案后,用户需要:

  1. 登录备案系统查看备案成功信息
  2. 查询备案详情,包括主体信息、网站信息和 APP 信息
  3. 检查备案是否存在需要关注的风险

此技能可通过阿里云 API 自动查询 ICP 备案成功数据及相关风险信息。

架构:阿里云备案服务 → QuerySuccessIcpData API → 备案信息(主体 + 网站 + APP + 风险)


安装

阿里云 CLI

此技能需要 Aliyun CLI 版本 >= 3.3.3。

预检查:需要 Aliyun CLI >= 3.3.3

运行 aliyun version 验证版本是否 >= 3.3.3。如果尚未安装或版本过低, 运行 curl -fsSL https://aliyuncli.alicdn.com/setup.sh | bash 安装或更新, 或参阅 references/cli-installation-guide.md 获取安装说明。

预检查:需要更新 Aliyun CLI 插件

[必须] 运行 aliyun configure set --auto-plugin-install true 启用自动安装插件。 [必须] 运行 aliyun plugin update 确保所有现有插件始终为最新版本。

Python 依赖项

由于当前插件版本尚未提供 CLI 命令,此技能使用 Python Common SDK:

pip install -r scripts/requirements.txt

身份验证

预检查:需要阿里云凭证

安全规则:

  • 绝不要读取、回显或打印 AK/SK 值(例如,禁止运行 echo $ALIBABA_CLOUD_ACCESS_KEY_ID)
  • 绝不要要求用户在对话或命令行中直接输入 AK/SK
  • 绝不要使用 aliyun configure set 填入明文凭证值
  • 只能使用 aliyun configure list 检查凭证状态
aliyun configure list

检查输出中是否存在有效配置(AK、STS 或 OAuth 身份)。

如果不存在有效配置,请在此处停止。

  1. 从阿里云控制台获取凭证
  2. 在此会话之外配置凭证(在终端中运行 aliyun configure,或在 shell 配置文件中设置环境变量)
  3. 返回后,待 aliyun configure list 显示有效配置时重新运行

RAM 策略

此技能需要 beian:QuerySuccessIcpData 权限。完整的 RAM 策略 JSON 和配置说明,请参阅 references/ram-policies.md。

**[必须] 权限失败处理:**执行期间,任何命令或 API 调用因权限错误而失败时,请按以下流程处理:

  1. 阅读 references/ram-policies.md,获取此 SKILL 所需权限的完整列表
  2. 使用 ram-permission-diagnose 技能指导用户申请所需权限
  3. 暂停操作,等待用户确认已授予所需权限

参数确认

重要:参数确认 — 执行任何命令或 API 调用之前, 必须与用户确认所有可由用户自定义的参数(例如 RegionId、实例名称、CIDR 块、 密码、域名、资源规格等)。未经用户明确同意,不得假定或使用默认值。

参数名称必填/可选说明默认值
Caller必填API 请求的调用方标识符skill(固定值)
Region可选阿里云地域cn-hangzhou

核心工作流

在核心工作流开始时(执行任何 CLI 调用之前): [MUST] 启用 AI-Mode — Agent Skill 执行需要启用 AI-mode。 在执行任何 CLI 调用之前运行以下命令:

aliyun configure ai-mode enable
aliyun configure ai-mode set-user-agent --user-agent "AlibabaCloud-Agent-Skills/alibabacloud-icpba-sucessdata-query"
步骤 1:查询 ICP 备案成功数据

由于当前插件版本尚未提供 CLI 命令 aliyun companyreg query-success-icp-data,我们将使用 Python Common SDK 直接调用 API。

创建 Python 脚本以查询备案数据:

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from alibabacloud_credentials.client import Client as CredentialClient
from alibabacloud_tea_openapi.client import Client as OpenApiClient
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_tea_util import models as util_models
import json

def create_client() -> OpenApiClient:
    """
    Create an OpenAPI client with credential authentication.
    """
    credential = CredentialClient()

    config = open_api_models.Config(
        credential=credential,
        endpoint='companyreg.aliyuncs.com',
        region_id='cn-hangzhou',
        user_agent='AlibabaCloud-Agent-Skills/alibabacloud-icpba-sucessdata-query'
    )

    return OpenApiClient(config)

def query_success_icp_data(caller: str = 'skill') -> dict:
    """
    Query ICP filing success data including entity, website, app, and risk information.

    Args:
        caller: Caller identifier (fixed value: 'skill')

    Returns:
        dict: Filing success data response
    """
    client = create_client()

    params = open_api_models.Params(
        action='QuerySuccessIcpData',
        version='2026-04-23',
        protocol='HTTPS',
        method='POST',
        auth_type='AK',
        style='RPC',
        pathname='/',
        req_body_type='formData',
        body_type='json'
    )

    queries = {
        'Caller': caller
    }

    request = open_api_models.OpenApiRequest(
        query=queries
    )

    runtime = util_models.RuntimeOptions(
        connect_timeout=5000,
        read_timeout=10000
    )

    try:
        response = client.call_api(params, request, runtime)
        return response.get('body', {})
    except Exception as e:
        print(f"Error querying ICP filing data: {str(e)}")
        raise

def main():
    print("Querying ICP Filing Success Data...")
    print("=" * 60)

    # Query filing data
    result = query_success_icp_data(caller='skill')

    # Print formatted result
    print(json.dumps(result, indent=2, ensure_ascii=False))

    # Parse and display summary
    if result.get('Success'):
        ba_list = result.get('BaSuccessDataWithRiskList', [])
        print("\n" + "=" * 60)
        print(f"Total Filing Records: {len(ba_list)}")

        for idx, ba_data in enumerate(ba_list, 1):
            print(f"\n--- Filing Record {idx} ---")
            print(f"ICP Number: {ba_data.get('IcpNumber')}")
            print(f"Entity Name: {ba_data.get('OrganizersName')}")
            print(f"Entity Type: {ba_data.get('OrganizersNature')}")
            print(f"Responsible Person: {ba_data.get('ResponsiblePersonName')}")

            # Website information
            websites = ba_data.get('WebsiteList', [])
            print(f"\nWebsites: {len(websites)}")
            for site in websites:
                print(f"  - {site.get('SiteName')} ({site.get('SiteRecordNum')})")
                print(f"    Domains: {', '.join(site.get('DomainList', []))}")

            # APP information
            apps = ba_data.get('AppList', [])
            if apps:
                print(f"\nAPPs: {len(apps)}")
                for app in apps:
                    print(f"  - {app.get('AppName')} ({app.get('AppRecordNum')})")
                    print(f"    Domains: {', '.join(app.get('DomainList', []))}")

            # Risk information
            risks = ba_data.get('RiskList', [])
            if risks:
                print(f"\n⚠️ Risks: {len(risks)}")
                for risk in risks:
                    print(f"  Deadline: {risk.get('DeadLine')}")
                    for detail in risk.get('RiskDetailList', []):
                        print(f"  Source: {detail.get('RiskSource')}")
                        for suggest in detail.get('rectifySuggest', []):
                            print(f"  Suggestion: {suggest}")
    else:
        print("Query failed or returned no data.")

if __name__ == '__main__':
    main()

将此脚本保存为 query_icp_filing.py 并运行:

python3 query_icp_filing.py
步骤 2:分析结果

API 返回以下信息结构:

  1. 主体信息(主体信息):

    • ICP 备案号(备案号)
    • 主体名称(主体名称)
    • 主体性质(主体性质:企业/个人)
    • 负责人(负责人)
  2. 网站信息(网站信息):

    • 网站备案号(网站备案号)
    • 网站名称(网站名称)
    • 域名列表(域名列表)
    • 网站负责人(网站负责人)
  3. APP 信息(APP 信息):

    • APP 备案号(APP 备案号)
    • APP 名称(APP 名称)
    • 域名列表(域名列表)
    • APP 负责人(APP 负责人)
  4. 风险信息(风险信息):

    • 处理截止日期(处理截止日期)
    • 风险来源(风险来源)
    • 整改建议(整改建议)
响应数据示例

示例 1:包含主体、网站和风险的备案

{
  "RequestId": "79732597-AB14-1341-9131-D94F48D1AFD7",
  "Success": true,
  "BaSuccessDataWithRiskList": [
    {
      "IcpNumber": "粤ICP测50000001号",
      "OrganizersName": "深圳市星澜美容有限公司变更",
      "OrganizersNature": "企业",
      "ResponsiblePersonName": "于婷",
      "WebsiteList": [
        {
          "SiteRecordNum": "粤ICP测50000001号-1",
          "DomainList": ["13011160846019.com"],
          "SiteName": "于婷广东",
          "ResponsiblePersonName": "于婷"
        },
        {
          "SiteRecordNum": "津ICP备2023010907号-1",
          "DomainList": ["uijikoxjsu.com"],
          "SiteName": "920企业变更网站001",
          "ResponsiblePersonName": "于婷"
        }
      ],
      "AppList": [],
      "RiskList": [
        {
          "DeadLine": "2026年04月28日0点",
          "RiskDetailList": [
            {
              "RiskSource": "网站/APP信息 - 津ICP备2023010907号-1 - 网站域名 - uijikoxjsu.com",
              "rectifySuggest": [
                "<span style=\"font-weight:bold;\">网站内容涉及金融业务</span>,请提交<span style=\"font-weight:bold; color: red;\">变更备案</span>上传有效期内的金融前置文件许可,牌照或批文,传到备案系统,或者修改网站内容,与备案主体一致,符合最新备案规则。"
              ]
            }
          ]
        }
      ]
    }
  ]
}

示例 2:包含主体、网站和 APP 的备案

{
  "RequestId": "E36C463A-0869-1318-A851-84C53711984A",
  "Success": true,
  "BaSuccessDataWithRiskList": [
    {
      "IcpNumber": "测BA20251231094500051号",
      "OrganizersName": "LXtest001变更测试",
      "OrganizersNature": "企业",
      "ResponsiblePersonName": "李四",
      "WebsiteList": [
        {
          "SiteRecordNum": "测BA20251231094500051号-1",
          "DomainList": ["lxtest001.com"],
          "SiteName": "测试迁移使用11111111111111111111",
          "ResponsiblePersonName": "张三"
        },
        {
          "SiteRecordNum": "测BA20251230112600098号-2",
          "DomainList": ["test89876868.com"],
          "SiteName": "测试test111",
          "ResponsiblePersonName": "张三"
        }
      ],
      "AppList": [
        {
          "AppRecordNum": "测BA20251231094500051号-2",
          "DomainList": ["lxtest002.com"],
          "AppName": "测试测试11",
          "ResponsiblePersonName": "李四"
        }
      ],
      "RiskList": []
    }
  ]
}

[MUST] 在每个退出点禁用 AI-Mode — 无论出于何种原因,在交付最终响应之前,始终先禁用 AI-mode。这适用于所有退出路径:工作流成功、工作流失败、错误/异常、用户取消、会话结束,或任何不会再执行 CLI 命令的其他情况。 AI-mode 仅用于 Agent Skill 调用场景,且技能停止运行后不得继续保持启用状态。

aliyun configure ai-mode disable

成功验证方法

要验证查询是否成功:

  1. 检查响应中的 Success 字段是否为 true
  2. 确认 BaSuccessDataWithRiskList 包含备案记录
  3. 确认每条记录都包含:
    • 有效的 IcpNumber
    • 主体信息(OrganizersName、OrganizersNature)
    • WebsiteList 中至少有一个网站,或 AppList 中至少有一个应用

有关详细的验证步骤,请参阅 references/verification-method.md。


清理

这是只读查询操作,无需清理任何资源。


最佳实践

  1. 定期监控:定期查询备案数据,及时了解任何新风险
  2. 风险响应:发现风险时,应在截止日期前响应,以避免备案被取消
  3. 数据一致性:确保网站/APP 内容与备案信息一致,避免产生风险
  4. 权限管理:使用 RAM 策略授予最低限度的必要权限
  5. 错误处理:为 API 调用实现适当的错误处理和重试逻辑
  6. 凭证安全:切勿将凭证硬编码;始终使用环境变量或凭证文件
  7. 响应解析:处理 AppList 或 RiskList 为空数组的情况
  8. HTML 内容:注意风险建议可能包含用于格式化的 HTML 标签

参考链接

参考描述
references/ram-policies.mdRAM 权限要求详情
references/related-commands.md所有相关 CLI 命令和 SDK 方法
references/verification-method.md详细的验证步骤
references/cli-installation-guide.mdAlibaba Cloud CLI 安装指南
references/common-sdk-usage.mdPython Common SDK 使用模式
references/error-handling.md常见错误及解决方案

评论

支持 Markdown