gate-exchange-activitycenter
Activity center aggregates platform campaigns (trading competitions, airdrops, newcomer activities, referral activities, etc.), supporting activity recommendations and my activities entry.
General Rules
⚠️ STOP — You MUST read and strictly follow the shared runtime rules before proceeding.
Do NOT select or call any tool until all rules are read. These rules have the highest priority.
→ Read ./references/gate-runtime-rules.md
- - Only call MCP tools explicitly listed in this skill. Tools not documented here must NOT be called, even if they
exist in the MCP server.
Trigger Scenarios: User mentions "recommend activities", "what activities", "airdrop activities", "trading competition", "VIP activities", "my activities", etc.
⚠️ MANDATORY RESPONSE FORMAT: When this skill is triggered, AI responses MUST strictly follow the Response Templates defined in this document. Free-form responses are FORBIDDEN.
MCP Dependencies
Required MCP Servers
| MCP Server | Status |
|---|
| Gate (main) | ✅ Required |
MCP Tools Used
Query Operations (Read-only)
- - cexactivitygetmyactivityentry
- cexactivitylistactivities
- cexactivitylistactivitytypes
Authentication
- - Credentials Source: Local Gate MCP deployment (
GATE_API_KEY, GATE_API_SECRET) - API Key Required: Yes
- Permissions: Activity:Read
- Never ask the user to paste secrets into chat; rely on the configured MCP session only.
- API Key Provisioning Reference: https://www.gate.com/myaccount/profile/api-key/manage (create or rotate keys outside the chat when the local MCP setup requires them).
Installation Check
- - Required: Gate (main)
- Install: Use the local Gate MCP installation flow for the current host IDE before continuing.
- Continue only after the Gate MCP session is configured with the credentials listed above; do not switch to browser auth or ask the user to paste secrets into chat.
MCP Mode
Read and strictly follow references/mcp.md, then execute this skill's activity-center workflow.
- -
SKILL.md keeps routing and recommendation logic. - INLINECODE5 is the authoritative MCP execution layer for entry/list/type queries, filter handling, and degraded output behavior.
Routing Rules
| User Intent | Keywords/Pattern | Action |
|---|
| Hot Recommendation | "recommend activities" "what activities" "recent activities" | Scenario 1.1 Hot Recommendation |
| Type-Based Recommendation |
"airdrop activities" "trading competition" "VIP activities" "earn activities" | Scenario 1.2 Type-Based |
| Scenario-Based Recommendation | "I have GT" "futures activities" "spot activities" | Scenario 1.3 Scenario-Based |
| Search by Name | "{activity name}" "position airdrop" | Scenario 1.4 Search by Name |
| My Activities | "what activities I joined" "my activities" "enrolled activities" | Scenario 2 My Activities |
| Welfare Center/Newcomer Tasks | "claim rewards" "check-in" "newcomer tasks" | ❌ NOT applicable to this skill |
MCP Tools
| MCP Tool | Purpose | action_type |
|---|
| INLINECODE6 | Get activity type list (id, name) for type filtering | query |
| INLINECODE7 |
Query activities by hot/type/scenario/keywords | info-card |
|
cex_activity_get_my_activity_entry | Get "My Activities" entry card | info-card |
API Parameter Constraints
| Parameter | Constraint | Description |
|---|
| INLINECODE9 | MUST be ≤ 3 | ⚠️ HARD LIMIT: Each request MUST NOT exceed 3 activities. Always set page_size=3 or less. |
| INLINECODE11 |
Integer | Page number, default 1. |
|
recommend_type |
hot /
type /
scenario | Query mode: hot (popular), type (by type_ids), scenario (by keywords) |
|
type_ids | String | Activity type IDs, comma-separated. Used with
recommend_type=type |
|
keywords | String | Search keywords for activity name. Used with
recommend_type=scenario |
⚠️ CRITICAL: The page_size parameter is strictly limited to a maximum of 3. Any value greater than 3 is FORBIDDEN.
Scenario 1: Activity Recommendation
1.1 Hot Recommendation (No Type Specified)
Trigger: "recommend activities" "what activities" "recent activities"
API Call:
CODEBLOCK0
Rules:
- - ✅ Do NOT ask for type clarification, call API directly
- ✅ Fixed
page_size=3 (maximum allowed), no pagination
1.2 Type-Based Recommendation
Trigger: "airdrop activities" "trading competition" "VIP activities" "earn activities"
API Call Sequence:
- 1.
cex_activity_list_activity_types → Get type list, match user's type name (case-insensitive) - INLINECODE23
Keyword Extraction Examples:
- - "what airdrop activities are there" → Extract: airdrop
- "VIP activities" → Extract: VIP
- "I'm a VIP, any exclusive activities" → Extract: VIP
- "any low-risk activities" → Extract: earn
1.3 Scenario-Based Recommendation
Trigger: "I have GT, what activities can I join" "futures activities"
API Call:
- - If mappable to type: Use
recommend_type=type with INLINECODE25 - If scenario/asset: Use
recommend_type=scenario with INLINECODE27
CODEBLOCK1
1.4 Search by Name
Trigger: "help me find position airdrop" "where is VIP exclusive activity" "find test activity"
API Call:
CODEBLOCK2
Parameter Notes:
- - Use
recommend_type=scenario with keywords for name search - INLINECODE30 is the activity name or partial name to search
- ⚠️ Language Conversion: If user input contains non-English text, translate keywords to English before passing to the
keywords parameter
Response Template (when results found):
Based on your keywords, I found some possible activities. If you didn't find the activity you're looking for, you can provide a more complete activity name, or click more activities to explore more hot activities.
Scenario 2: My Activities
Trigger: "what activities I joined" "my activities" "enrolled activities"
API Call:
CODEBLOCK3
Rules:
- - ✅ Only show entry card, guide user to click and jump
- ✅ Apply URL Processing Rules (see above) to the
url field - ❌ Do NOT filter activity list in this API
Decision Logic
| Condition | Action |
|---|
| User asks for hot/recommended activities | Call cex_activity_list_activities with recommend_type=hot directly |
| User specifies activity type |
First call
cex_activity_list_activity_types, then
cex_activity_list_activities with
recommend_type=type&type_ids=xxx |
| User mentions asset/scenario (GT, futures) | Use
recommend_type=scenario with
keywords |
| User searches by activity name | Use
recommend_type=scenario with
keywords={activity_name} |
| User asks "my activities" | Call
cex_activity_get_my_activity_entry |
| Activity list returns empty | Use "No Results" template, do NOT use "filtered for you..." |
URL Processing Rules
All activity URLs returned by API must be processed before displaying to users:
| URL Pattern | Processing | Example |
|---|
Relative path (starts with /) | Prepend INLINECODE44 | INLINECODE45 → INLINECODE46 |
Already has host (starts with http:// or https://) |
Keep as-is, no modification |
https://www.gate.com/campaigns/xxx →
https://www.gate.com/campaigns/xxx |
Why relative paths? API returns relative paths for flexibility:
- - Multi-language support: Frontend can dynamically add language prefix (
/zh/, /en/, /ja/) - Multi-environment deployment: Different domains for test/staging/production
- Client flexibility: Web, App, H5 can handle links differently
Display Format: Always use clickable Markdown link: [{activity_title}]({processed_url})
Activity Response Field Specification
For all activity recommendation scenarios (1.1, 1.2, 1.3, 1.4), the response MUST only include the following fields:
| API Field | Display Label | Processing Rule |
|---|
| INLINECODE55 | Activity Title | Display as-is |
| INLINECODE56 |
Activity Link | Apply URL Processing Rules (prepend
https://www.gate.com for relative paths) |
|
type_name | Activity Type | Display the
type_name value directly (NOT
type_id) |
Response Format Example:
| Activity Title | Activity Type | Activity Link |
|---|
| Traditional Assets Limited Edition Event | Traditional Assets | View Details |
Rules:
- - ✅ Only display the 3 fields listed above
- ✅ Use
type_name for activity type (NOT type_id) - ✅ Process URLs according to URL Processing Rules
- ❌ Do NOT display other fields like
id, type_id, hot, img, competition_name, start_at, end_at, etc.
Response Templates
⚠️ MANDATORY: AI responses MUST strictly follow these templates. Free-form or custom responses are FORBIDDEN.
Template Compliance Rules
- 1. REQUIRED: Every response MUST use the exact template structure defined below
- REQUIRED: Include the intro text + activity table + follow-up prompt
- FORBIDDEN: Adding extra commentary, explanations, or custom formatting
- FORBIDDEN: Omitting any part of the template structure
Activity Recommendation (Has Results)
| Scenario | Intro Text (MUST use exactly) |
|---|
| Hot (1.1) | Here are the current hot activities: |
| By Type (1.2) |
Filtered [type] activities for you: |
| By Scenario (1.3) | Filtered activities related to [scenario/asset] for you: |
| By Name (1.4) | Based on your keywords, I found some possible activities: |
Required Response Structure:
CODEBLOCK4
Follow-up Prompts by Scenario:
| Scenario | Follow-up Prompt (MUST include) |
|---|
| Hot (1.1) | Click the link to view details or sign up. Need activities of a specific type? |
| By Type (1.2) |
Click the link to view details and how to participate. |
| By Scenario (1.3) | Click the link to view participation requirements and rewards. |
| By Name (1.4) | If you didn't find what you're looking for, provide a more complete activity name. |
My Activities Template (Scenario 2)
Required Response Structure:
CODEBLOCK5
No Results Template
Required Response Structure:
Currently no [type/keyword] activities are in progress. You can:
- Check the activity center regularly, new activities will be displayed as soon as they launch
- Tell me other activity types you're interested in (e.g., trading, earn, VIP exclusive), and I can filter for you
Error Handling
| Error Type | Response Template |
|---|
| API timeout/failure | Unable to load activities at the moment, please try again later. |
| No matching activities |
Use "No Results" template |
| 401 Unauthorized | Session expired, please log in again to view activities. |
| 400 Bad Request | Unable to process your request. Please try a different search term. |
| 429 Rate Limited | Too many requests. Please wait a moment and try again. |
| 500 Server Error | Service temporarily unavailable. Please try again later. |
| Network Error | Network connection issue. Please check your connection and try again. |
Safety Rules
- 1. No investment advice: Activity rewards are platform benefits, not investment guidance
- No data fabrication: Only show data returned by backend
- Compliance check: Do not show activities unavailable in user's region
- No internal exposure: Never mention technical details to users, including:
- API names (e.g.,
cex_activity_list_activities)
- Parameter names (e.g.,
recommend_type,
type_ids)
- Internal IDs (e.g.,
type_id=34,
id=1499)
- Error codes or technical error messages
- Example of
BAD response: "No Alpha type activities found (type_id=34)"
- Example of
GOOD response: "Currently no Alpha activities are in progress"
Data Integrity Rules
⚠️ MANDATORY: These rules MUST be followed for ALL data processing and display.
1. Never Guess Data
- - ❌ FORBIDDEN: Guessing, estimating, or fabricating any data values
- ❌ FORBIDDEN: Making assumptions about timestamps, numbers, or any computed values
- ✅ REQUIRED: Only display data exactly as returned by API
- ✅ REQUIRED: If data is missing or unclear, state "Data unavailable" instead of guessing
2. Self-Verification Mechanism
Before displaying any processed data, perform self-check:
| Data Type | Verification Method |
|---|
| Timestamps | Verify conversion result is reasonable (year, month, day within expected range) |
| URLs |
Verify URL format is valid after processing |
| Numbers | Verify numeric values match API response exactly |
| Type names | Verify
type_name exists in API response, do NOT derive from
type_id |
3. Proactive Validation (Not Reactive Correction)
- - ✅ REQUIRED: Validate data BEFORE presenting to user
- ✅ REQUIRED: Double-check time-sensitive information (timestamps, dates)
- ❌ FORBIDDEN: Wait for user to point out errors
- ❌ FORBIDDEN: Display data first and correct later
4. Error Handling for Data Issues
If data validation fails:
- 1. Do NOT display the problematic data
- Show a safe fallback message: "Some data is temporarily unavailable"
- Log the issue internally (do NOT expose to user)
Cross-Skill Routing
| User Follow-up Intent | Route To |
|---|
| "I want to buy crypto" | Trading skill |
| "I want to stake" |
Launchpool/Earn skill |
| "Welfare center" "check-in" | Welfare center skill (NOT this skill) |
Additional References
For detailed scenarios and examples, see INLINECODE77
gate-exchange-activitycenter
活动中心聚合平台活动(交易竞赛、空投、新手活动、推荐活动等),支持活动推荐和我的活动入口。
通用规则
⚠️ 停止 — 在继续之前,你必须阅读并严格遵守共享的运行时规则。
在阅读完所有规则之前,请勿选择或调用任何工具。这些规则具有最高优先级。
→ 阅读 ./references/gate-runtime-rules.md
- - 仅调用本技能中明确列出的 MCP 工具。 即使 MCP 服务器中存在未在此处记录的工具,也不得调用。
触发场景:用户提及“推荐活动”、“有什么活动”、“空投活动”、“交易竞赛”、“VIP活动”、“我的活动”等。
⚠️ 强制响应格式:当此技能被触发时,AI 响应必须严格遵循本文档中定义的响应模板。禁止自由形式的响应。
MCP 依赖
必需的 MCP 服务器
使用的 MCP 工具
查询操作(只读)
- - cexactivitygetmyactivityentry
- cexactivitylistactivities
- cexactivitylistactivitytypes
身份验证
- - 凭证来源:本地 Gate MCP 部署(GATEAPIKEY、GATEAPISECRET)
- 需要 API 密钥:是
- 权限:活动:读取
- 切勿要求用户将密钥粘贴到聊天中;仅依赖已配置的 MCP 会话。
- API 密钥配置参考:https://www.gate.com/myaccount/profile/api-key/manage(当本地 MCP 设置需要时,在聊天之外创建或轮换密钥)。
安装检查
- - 必需:Gate (主)
- 安装:在继续之前,使用当前主机 IDE 的本地 Gate MCP 安装流程。
- 仅在 Gate MCP 会话使用上述凭证配置后继续;请勿切换到浏览器身份验证或要求用户将密钥粘贴到聊天中。
MCP 模式
阅读并严格遵守 references/mcp.md,然后执行此技能的活动中心工作流。
- - SKILL.md 包含路由和推荐逻辑。
- references/mcp.md 是用于入口/列表/类型查询、过滤器处理和降级输出行为的权威 MCP 执行层。
路由规则
| 用户意图 | 关键词/模式 | 操作 |
|---|
| 热门推荐 | “推荐活动” “有什么活动” “近期活动” | 场景 1.1 热门推荐 |
| 基于类型的推荐 |
“空投活动” “交易竞赛” “VIP活动” “赚币活动” | 场景 1.2 基于类型 |
| 基于场景的推荐 | “我有GT” “合约活动” “现货活动” | 场景 1.3 基于场景 |
| 按名称搜索 | “{活动名称}” “持仓空投” | 场景 1.4 按名称搜索 |
| 我的活动 | “我参加了什么活动” “我的活动” “已报名活动” | 场景 2 我的活动 |
| 福利中心/新手任务 | “领取奖励” “签到” “新手任务” | ❌ 不适用于此技能 |
MCP 工具
| MCP 工具 | 目的 | actiontype |
|---|
| cexactivitylistactivitytypes | 获取活动类型列表(id, name)用于类型过滤 | query |
| cexactivitylistactivities |
按热门/类型/场景/关键词查询活动 | info-card |
| cex
activityget
myactivity_entry | 获取“我的活动”入口卡片 | info-card |
API 参数约束
| 参数 | 约束 | 描述 |
|---|
| pagesize | 必须 ≤ 3 | ⚠️ 硬性限制:每个请求不得超过 3 个活动。始终设置 pagesize=3 或更少。 |
| page |
整数 | 页码,默认为 1。 |
| recommend
type | hot / type / scenario | 查询模式:hot(热门)、type(按 typeids)、scenario(按关键词) |
| type
ids | 字符串 | 活动类型 ID,逗号分隔。与 recommendtype=type 一起使用 |
| keywords | 字符串 | 活动名称的搜索关键词。与 recommend_type=scenario 一起使用 |
⚠️ 关键:page_size 参数严格限制为最大 3。任何大于 3 的值都是禁止的。
场景 1:活动推荐
1.1 热门推荐(未指定类型)
触发:“推荐活动” “有什么活动” “近期活动”
API 调用:
cexactivitylistactivities?recommendtype=hot&sortby=default&page=1&pagesize=3
规则:
- - ✅ 不要询问类型澄清,直接调用 API
- ✅ 固定 page_size=3(允许的最大值),无分页
1.2 基于类型的推荐
触发:“空投活动” “交易竞赛” “VIP活动” “赚币活动”
API 调用顺序:
- 1. cexactivitylistactivitytypes → 获取类型列表,匹配用户的类型名称(不区分大小写)
- cexactivitylistactivities?recommendtype=type&typeids=matchedid1,matchedid2&sortby=time&page_size=3
关键词提取示例:
- - “有什么空投活动” → 提取:空投
- “VIP活动” → 提取:VIP
- “我是VIP,有什么专属活动” → 提取:VIP
- “有什么低风险活动” → 提取:赚币
1.3 基于场景的推荐
触发:“我有GT,可以参加什么活动” “合约活动”
API 调用:
- - 如果可以映射到类型:使用 recommendtype=type 和 typeids
- 如果是场景/资产:使用 recommend_type=scenario 和 keywords
cexactivitylistactivities?recommendtype=scenario&keywords=GT&page_size=3
1.4 按名称搜索
触发:“帮我找找持仓空投” “VIP专属活动在哪” “找测试活动”
API 调用:
cexactivitylistactivities?recommendtype=scenario&keywords=testactivity&page=1&pagesize=3
参数说明:
- - 使用 recommend_type=scenario 和 keywords 进行名称搜索
- keywords 是要搜索的活动名称或部分名称
- ⚠️ 语言转换:如果用户输入包含非英文文本,请在传递给 keywords 参数之前将关键词翻译成英文
响应模板(找到结果时):
根据你的关键词,我找到了一些可能的活动。如果没有找到你需要的活动,可以提供更完整的活动名称,或者点击更多活动探索更多热门活动。
场景 2:我的活动
触发:“我参加了什么活动” “我的活动” “已报名活动”
API 调用:
cexactivitygetmyactivity_entry
规则:
- - ✅ 仅显示入口卡片,引导用户点击跳转
- ✅ 对 url 字段应用 URL 处理规则(见上文)
- ❌ 不要在此 API 中过滤活动列表
决策逻辑
| 条件 | 操作 |
|---|
| 用户询问热门/推荐活动 | 直接使用 recommendtype=hot 调用 cexactivitylistactivities |
| 用户指定活动类型 |
先调用 cex
activitylist
activitytypes,然后使用 recommend
type=type&typeids=xxx 调用 cex
activitylist_activities |
| 用户提及资产/场景(GT、合约) | 使用 recommend_type=scenario 和 keywords |
| 用户按活动名称搜索 | 使用 recommend
type=scenario 和 keywords={activityname} |
| 用户询问“我的活动” | 调用 cex
activityget
myactivity_entry |
| 活动列表返回为空 | 使用“无结果”模板,不要使用“为你筛选了...” |
URL 处理规则
API 返回的所有活动 URL 在显示给用户之前必须进行处理:
| URL 模式 | 处理方式 | 示例 |
|---|
| 相对路径(以 / 开头) | 添加前缀 https://www.gate.com |
/competition/xxx → https://www.gate.com/