- Brand
- Hive
- Category
- Productivity
- Primary Subcategory
- AI Agent Builders & Deployment Platforms
Integration details
Description
Hive Axyl helps teams develop and operate games by providing SDK integration, service configuration, live operations, and analytics capabilities through one platform. It helps reduce repetitive work and tool switching, so teams can focus more on building and improving their games.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- AI Agent Builders & Deployment Platforms
- Secondary Subcategories
- None listed
- Brand
- Hive
- Access
- Account required
- First tracked
- 2026-10-23
- Tool count
- 135
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is listed.
Your score is coming
ChatGPT now suggests Plugins on its own when they match a user's request.Your Plugin Discovery Score measures how often yours appears, and it will show here as soon as it’s ready.
What discovery looks like

Get alerts for Hive Axyl
Get updates when Hive Axyl’s Discoverability Score or category rank changes.
Competing in ChatGPT AI Agent Builders & Deployment Platforms
View Category135 tools agents can invoke
WRITE OPERATION — before calling, show the user exactly what will change and get their explicit confirmation. Issues a SECONDARY Client Secret to start a secret rotation (rollover). Single-slot model: fails if a SECONDARY already exists (finish the rotation with promote_axyl_client_secret first). Typical flow: add SECONDARY -> the user copies the full SECONDARY value from the Console screen "프로젝트 설정 > 보안 키" and deploys it to the product -> promote. The response keeps the new secret masked (no tool returns the full value). Requires the 'security-key' menu WRITE permission.
유저가 해당 회사의 애널리틱스 관리자인지 확인한다. 애널리틱스 관리자는 조직/워크스페이스 멤버십 검사를 건너뛴다. 다만 MCP 사용 권한과 조직↔프로젝트 범위는 관리자도 건너뛰지 못한다 — 본인이 MCP 사용을 허용받은 조직만 쓸 수 있고, 프로젝트에 연결되지 않은 조직은 거부된다. 그래서 프로젝트가 정해졌다면 관리자도 list_organizations에 appid_group을 넘긴다 (list_workspaces는 appid_group을 받지 않는다 — org_idx가 필수다). list_organizations/list_workspaces 자체도 관리자가 호출해야 한다 — preview_chart 등으로 콘텐츠를 생성할 때 실제로 존재하는 org_idx/workspace_idx(보통 마지막 접속 조직/워크스페이스)가 있어야 하기 때문이다. 권한 체크는 check_analytics_admin → list_organizations → list_workspaces → list_projects 순서로 진행한다. Args: company_cd: 회사 코드 (list_projects의 company_cd) Returns: bool: 해당 회사의 애널리틱스 관리자 여부.
MCP 서버 헬스 체크용. 정상적인 경우 'OK!' 을 반환
Checks whether a projectId is already taken BEFORE creating a project, so you can pick a free one without hitting a creation conflict. Provide only the projectId SUFFIX (same rule as create_axyl_project: lowercase letters and digits only, no dots); the server prepends the company code. Returns available=true when the id is free. This checks BOTH the console and App Center, so an id another service already registered in App Center comes back as taken (creation would fail with 409). Name duplication is separate and not checked here. Requires the 'project-settings' menu.
Checks whether the logged-in Hive account can access a Console menu, and returns the action permissions granted on it. Use this BEFORE console-control operations, or when the user asks what they are allowed to do. On success returns accessible=true plus actionPermission (e.g. ["Edit","Delete"]) — the write actions the account holds. An empty list means view-only: write tools for this menu will be refused before execution (same as a disabled button in the web console). Call without arguments to list the known menu keys. If access is denied, explain the reason to the user and guide them to request the menu permission from their console administrator instead of retrying.
해당 프로젝트에 이 유저의 데이터가 있는지 확인한다. 유저 활동 추적 계열 도구를 쓰기 전 첫 단계다. 오타이거나 다른 프로젝트의 ID를 그대로 조회하면 빈 결과가 돌아오는데, 그걸 "활동이 없다"로 해석하면 틀린 답이 된다. 먼저 이 도구로 가른다. user_group_id를 주면 그 유저 그룹에 속하는지까지 확인한다. Args: company_cd: 회사 코드 (list_projects의 company_cd) org_idx: 조직 idx (list_organizations의 idx) appid_group: 프로젝트 ID (list_projects의 appid_group) user_id: 확인할 유저 ID. 추측하지 않고 사용자가 제시한 값이나 다른 조회 결과에서 가져온다 user_group_id: 유저 그룹 idx. 주면 그 그룹 소속 여부까지 확인한다 Returns: {"user_id", "appid_group", "user_group_id", "exists"} 형태의 dict. exists는 서버가 주는 불리언 그대로다(실측: data=false). exists=False면 이 프로젝트에 해당 유저의 데이터가 없다는 뜻이다 — 활동 조회로 넘어가지 말고 유저 ID를 다시 확인한다. 존재하지 않는 ID를 넣어도 오류가 아니라 false 가 오므로, 오타를 걸러내는 첫 단계로 쓸 수 있다.
WRITE OPERATION — before calling, show the user exactly what will change and get their explicit confirmation. Registers 1-100 app (game) servers in a project in ONE batch, processed PER ITEM: the response splits into 'created' (registered rows) and 'failed' (rows the server excluded, each with a reason code); the request only fails outright (4xx) when the whole request is rejected. Each: serverId (letters/digits/hyphen/underscore, max 50, unique in the project) and serverName (max 100). A serverId already registered in the project is excluded as a failed row (resource_conflict). serverId is IMMUTABLE after registration. Requires the 'app-server' menu WRITE permission.
WRITE OPERATION — before calling, show the user exactly what will change and get their explicit confirmation. Creates 1-20 apps in a Hive Axyl project in one batch. Items are processed PER ITEM: the response splits into 'created' and 'failed' (with each failure's reason), and the request only fails outright (4xx) when the whole request is rejected. Each item needs runtime and store from a combination listed by get_axyl_app_catalogs (e.g. ANDROID+GOOGLE_PLAY). Each item's appIdSuffix is REQUIRED by the schema — pass an EMPTY STRING ("") to let the server derive the console convention '{runtime}.{store}.{n}' (avoiding duplicates), or provide your own. Suffix rules: lowercase/digits/dots, 1-96 chars, no leading/trailing/consecutive dots; full appId (projectId + '.' + suffix) up to 100 chars. New apps start as IN_USE. Requires the 'app-id' menu WRITE permission.
WRITE OPERATION — before calling, show the user exactly what will change and get their explicit confirmation. Creates a Hive Axyl project. In onboarding flows, prefer reusing an EXISTING project (find_axyl_apps / list_axyl_projects) and create a new one only when no suitable project exists. Provide only the projectId SUFFIX — the server prepends the company code automatically (e.g. suffix 'mygame' + company 'com2us' -> projectId 'com2us.mygame'). Suffix rules: lowercase letters and digits ONLY, no dots (unlike app suffixes); full projectId must be 50 chars or less. Name: up to 50 chars, must be unique in the company (duplicate id OR name -> 409). The new project starts as IN_USE. NOTE: unlike the console UI, this does NOT auto-enable default login methods — if web/user login is needed, activate GUEST/USERNAME afterwards via update_axyl_login_provider (USERNAME is required for web user login). Requires the 'project-settings' menu WRITE permission — on 403, tell the user to ask a console owner for the permission instead of retrying.
WRITE OPERATION — before calling, show the user exactly what will change and get their explicit confirmation. Creates a usage-restriction type. Requires projectIndex, code (3 digits, 100-999, unique in the project, IMMUTABLE after creation), name (language-agnostic, <=200 chars), and translations[] (per-language guidance shown to blocked players). Each translation: languageCode, isDefault, content (<=1000 chars). EXACTLY ONE translation must have isDefault=true; languageCode must be unique, one of the 31 supported codes (NOT bare 'zh' — use zh-Hans/zh-Hant), AND one of the languages this project's app supports (its app-meta languages) — the same constraint the console enforces. If the app has no app-meta languages set, configure them first via update_axyl_app_meta — it is REPLACE-ALL, so read the current values with get_axyl_app_meta first and include EVERY existing language (language codes from list_axyl_app_languages). CONFIRM the code and default language with the user first — the code cannot be changed later.
WRITE OPERATION — before calling, show the user exactly what will change and get their explicit confirmation. Issues a project's FIRST security key: Client ID + PRIMARY Client Secret. Fails if a key already exists (one key per project — rotation goes through add_axyl_client_secret + promote_axyl_client_secret instead). The response contains the clientId; the secret stays masked — its full value is viewable only on the Console screen "프로젝트 설정 > 보안 키" (get_axyl_client_secret_suffix returns only the last 4 characters, for identification, if the user asks). Requires the 'security-key' menu WRITE permission — on a permission error, tell the user to ask a console owner instead of retrying.
차트 콘텐츠를 저장(영속화)하고 content_idx를 반환한다. 인자는 preview_chart와 완전히 동일하다(project/chart_type/date_params/event_measures/dimensions/ adhoc_filters/pivot_col_ids/row_group_col_ids/aggregation/hidden_col_ids 의미와 형식 모두 preview_chart 문서 참조). preview_chart가 데이터를 미리보기만 하는 것과 달리, 이 도구는 콘텐츠를 실제로 저장해 대시보드에 붙일 수 있는 content_idx를 만든다. WRITE_APPROVAL: 사용자가 명시적으로 승인한 뒤에만 호출한다. 저장 전 preview_chart로 데이터를 먼저 검증하는 것을 권장한다. chart_type='table'이면 기본 grid_config가 자동 포함된다. Returns: {"content_idx": int, "content_type": "chart", "content_name": str, "url": str}. content_idx는 create_dashboard의 contents 항목에 그대로 넣는다. url은 콘솔 링크(POST_WRITE_LINK).
랭킹(chart_rank) 콘텐츠를 저장(영속화)하고 content_idx를 반환한다. 인자는 preview_chart_rank와 같고(rank_* / dimensions 등 형식은 그 문서 참조), 저장 전용으로 content_description이 추가된다(선택. content_name 기본값은 'rank'). WRITE_APPROVAL: 사용자가 명시적으로 승인한 뒤에만 호출한다. 저장 전 preview_chart_rank로 데이터를 먼저 검증하는 것을 권장한다. Returns: {"content_idx": int, "content_type": "chart_rank", "content_name": str, "url": str}. content_idx는 create_dashboard의 contents 항목에 그대로 넣는다 (배치 크기는 chart_type='table'이면 24×6, 그 밖의 차트면 12×4).
create_chart/create_chart_rank/create_funnel/create_retention으로 저장한 콘텐츠들을 모아 대시보드를 생성한다. 레이아웃(24칸 그리드)은 contents 순서대로 자동 계산된다 — 타입별 기본 크기로 좌→우로 채우고 폭이 넘치면 다음 행으로 내린다(chart: 12×4, scorecard: 6×2, table/retention/chart_rank: 24×6, funnel: 12×4). WRITE_APPROVAL: 사용자가 대시보드 생성을 명시적으로 승인한 뒤에만 호출한다. Args: dashboard_name: 대시보드 이름. contents: 배치할 콘텐츠 목록(표시 순서대로, 1개 이상). 각 항목: {"content_idx": int, -- create_* 반환값 또는 같은 -- 워크스페이스의 기존 콘텐츠 idx "content_type": "chart"|"chart_rank"|"funnel"|"retention", "chart_type": str, -- chart(scorecard/table/그 외)와 chart_rank(table/그 외)의 -- 배치 크기 결정에 사용. 생략 가능. "width": int, -- 선택. 24칸 기준 폭(기본: 유형별 기본값) "height": int, -- 선택. 높이(기본: 유형별 기본값) "memo": str} -- 선택. 셀에 붙는 메모 company_cd: 회사 코드. org_idx: 조직 idx (권한 검증용. 대시보드 바디에는 포함되지 않음). workspace_idx: 워크스페이스 idx (대시보드가 생성될 위치). dashboard_desc: 대시보드 설명 (기본 ''). date_params: 선택. 대시보드 **전역** 기간. 그 안의 모든 콘텐츠에 함께 걸린다(콘텐츠 자체의 기간과는 별개). 형식은 update_dashboard 의 date_params 와 같다 — 고정 기간의 start_date/end_date 는 날짜만 쓴다("2026-10-02"). 시각까지 넘기면 날짜로 자른다. 생략하면 전역 기간 없이 만든다. adhoc_filters: 선택. 대시보드 **전역** 필터 목록. 항목 형식은 preview_chart 의 [index] 필터와 같다. 생략하면 전역 필터 없이 만든다. Returns: {"dashboard_idx": int, "url": str}. url은 콘솔 링크(POST_WRITE_LINK).
퍼널 콘텐츠를 저장(영속화)하고 content_idx를 반환한다. 인자는 preview_funnel과 완전히 동일하다(sections/date_params/compare_type 등 형식은 preview_funnel 문서 참조). preview_funnel이 미리보기만 하는 것과 달리 실제로 저장해 content_idx를 만든다. WRITE_APPROVAL: 사용자 승인 후에만 호출한다. 저장 전 preview_funnel로 검증을 권장한다. Returns: {"content_idx": int, "content_type": "funnel", "content_name": str, "url": str}.
회사 전용 메트릭을 등록하고 metric_idx를 반환한다. 등록한 메트릭은 곧바로 preview_chart/create_chart의 [메트릭 방식](metric_idx/metric_name)으로 쓸 수 있다. 이벤트 기반 메트릭만 만든다(create_type='EVENT'). 같은 집계를 한 번만 쓸 거라면 메트릭을 만들 필요 없이 차트의 [이벤트 방식]으로 조회하면 된다 — 여러 차트에서 반복해서 쓰거나 항별로 기간이 다른 지표(고착도 등)를 고정해 둘 때 등록한다. WRITE_APPROVAL: 사용자가 명시적으로 승인한 뒤에만 호출한다. 등록 전 같은 구성을 preview_chart의 [이벤트 방식]으로 조회해 수치를 먼저 검증하는 것을 권장한다. Args: company_cd: 회사 코드 (list_projects의 company_cd) metric_name: 메트릭 이름. list_metrics의 metric_name으로 노출된다. metric_category: 분류. list_metrics(company_cd)로 기존 메트릭들이 쓰는 값을 먼저 확인해 같은 값을 쓴다(회사에 따라 "Sales" 같은 코드값과 "매출" 같은 표시값이 섞여 있다). 사용자가 직접 기입하는 분류이므로 매출 지표 판정에는 쓰이지 않는다. metric_description: 설명 (선택) decimal_point: 소수점 자리수 (선택. 기본 null) percent: 퍼센트 지표 여부 "Y"|"N" (기본 "N") change_rate: 증감률 지표 여부 "Y"|"N" (기본 "N") measures: 메트릭이 계산할 지표 목록(보통 1개). 각 항목은 preview_chart의 event_measures [이벤트 방식]과 같은 형식이며, 2단 집계 (group_formular/group_format/group_interval)와 계산식 (operands/operators), 항별 filters를 모두 쓸 수 있다. 계산식의 operands에는 숫자 상수(예: 100, 0.6)도 넣을 수 있다(첫 항도 가능). 괄호는 항 자리에 하위 계산식 {"operands", "operators"}를 넣는다. 차이점 2개: - currency/currency_dimension_name은 넣지 않는다(ValidationError). 메트릭은 통화를 담지 않고, 환산은 이 메트릭을 쓰는 차트에서 currency로 지정한다. - 항마다 "measure_date"로 그 항만의 집계 기간을 고정할 수 있다 (아래 [항별 기간]). alias/percent/decimal_point는 measure가 아니라 위 인자로 지정한다. 메트릭 방식(metric_idx)으로 다른 메트릭을 참조하는 형태는 지원하지 않는다(이벤트로 풀어쓴다). [항별 기간] measure_date는 date_params와 형식이 같다(고정 F / 상대 V). 지정하면 그 기간 전체를 하나의 값으로 집계해, 차트가 고른 모든 날짜에 같은 상수로 들어간다(예: 2026-08 한 달의 MAU 한 값을 9월 각 날짜에 동일하게). 생략하면 그 항은 조회하는 차트의 기간(date_params)을 날짜별로 따른다. 저장되는 정의이므로 특정 날짜로 굳지 않게 상대 기간(V)을 권장한다. [예시] 고착도(DAU / MAU) — MAU 항만 최근 30일로 고정: (measure 이름은 metric_name이 담당하므로 alias는 쓰지 않는다) {"operands": [ {"event_idx": <app_login>, "event_name": "app_login", "dimension_idx": <userId>, "dimension_name": "userId", "formular": "COUNT_DISTINCT"}, {"event_idx": <app_login>, "event_name": "app_login", "dimension_idx": <userId>, "dimension_name": "userId", "formular": "COUNT_DISTINCT", "measure_date": {"period": "D", "start_date_type": "V", "end_date_type": "V", "start_value": -29, "end_value": 0, "start_period": "D", "end_period": "D"}}], "operators": ["/"]} percent="Y"로 등록하면 비율로 표시된다. Returns: {"metric_idx": int, "metric_name": str, "metric_category": str, "metric_config": str, "console_url": str}. metric_idx/metric_name은 그대로 preview_chart의 event_measures [메트릭 방식]에 넣고, metric_config는 같은 항목의 metric_config로 넘기면 서버 재조회를 줄일 수 있다. console_url은 등록된 메트릭의 상세 화면 링크다. **쓰기 결과를 보고할 때 함께 준다** (POST_WRITE_LINK).
리텐션 콘텐츠를 저장(영속화)하고 content_idx를 반환한다. 인자는 preview_retention과 완전히 동일하다(base_event/retention_event/identifier 등 형식은 preview_retention 문서 참조). preview_retention이 미리보기만 하는 것과 달리 실제로 저장해 content_idx를 만든다. WRITE_APPROVAL: 사용자 승인 후에만 호출한다. 저장 전 preview_retention으로 검증을 권장한다. Returns: {"content_idx": int, "content_type": "retention", "content_name": str, "url": str}.
조건 기반 세그먼트를 생성하고 segment_idx를 반환한다. 호출 순서: list_segment_meta(속성·값 확인) → simulate_segment(예상 인원 확인·승인) → create_segment. simulate_segment로 조건이 지나치게 좁거나 넓지 않은지 먼저 확인한다. 호출 전 list_segment_meta(company_cd, appid_group)로 사용 가능한 property_category/ property_name과 선택 가능한 값을 반드시 확인한다. 속성명·값은 추측하지 않는다 — 메타에 없는 조합이면 ValidationError가 발생하고, 선택형 속성에 잘못된 값을 넣으면 (오류 없이) 아무도 걸리지 않는 세그먼트가 만들어지므로 서버에서 미리 막는다. property_category_name/property_name_translation/property_data_type은 메타에서 자동으로 채우므로 전달할 필요가 없다. WRITE_APPROVAL: 사용자가 명시적으로 승인한 뒤에만 호출한다. 기본값(set_base_snapshot='')은 세그먼트 정의만 저장하고 스냅샷은 만들지 않는다 — 스냅샷은 시점이 의미를 갖는 별도 작업이므로 create_segment_snapshot으로 따로 승인받는다. set_base_snapshot='set'으로 주면 저장 직후 기본 스냅샷 1개 추출이 함께 시작되며, 그 경우 이어서 create_segment_snapshot을 호출하면 중복 추출이 된다. Args: company_cd: 회사 코드 (필수. list_projects의 company_cd) org_idx: 조직 idx. appid_group 접근 권한을 검증한다. appid_group: 프로젝트 ID (필수. list_projects의 appid_group) game_name: 게임 이름 (필수. list_projects의 game_name). 추측하지 않는다. title: 세그먼트 이름 (필수). 조건을 알 수 있게 구체적으로 짓는다 — 이름이 부실하면 나중에 대상을 판단할 수 없다. property_groups: 추출 조건. 그룹 간 결합은 group_connection_type을 따른다. [{"property_select_type": "LASTEST"|"ALL", -- LASTEST: 최신 시점 값 기준 -- ALL: 전체 기간 중 한 번이라도 해당 "property_connection_type": "AND"|"OR", -- 그룹 내 조건 결합 (기본 "AND") "property_group_name": str, -- 선택. 기본 "속성 그룹 N" "property_fields": [ {"property_category": str, -- 필수. 예: "userInfo" (메타에서 확인) "property_name": str, -- 필수. 예: "language" (메타에서 확인) "start_value": str, -- 선택형(value_type=enum): 메타의 값 중 하나 -- 예: "zh-hans" -- 수치·시각형(range): 기준값. 예: "1" -- include/notinclude는 콤마로 여러 값 지정 -- 예: "ko,en" "end_value": str, -- value_range_type="between"일 때 상한 "value_range_type": str, -- ""(값 일치) | "more"(이상) | "less"(이하) -- "between"(사이, end_value 필수) -- "include"(포함) | "notinclude"(포함하지 않음) "date_type": str, -- ""(기간 조건 없음) -- "recent": start_date에 일수 (예: "0", "7") -- "date": start_date~end_date (YYYY-MM-DD) -- period_yn="Y"인 속성만 사용 가능 "date_range_type": str, -- date_type="date"면 자동으로 "between" "start_date": str, "end_date": str, "property_connection_type": "AND"|"OR"}]}] -- 기본 "AND" description: 세그먼트 설명 (기본 '') group_connection_type: 조건 그룹 간 결합 연산자 "AND"|"OR" (기본 "AND") lang: 조건 레이블 언어 "ko"|"en"|"ja"|"zh_hant"|"th" (기본 "ko") set_base_snapshot: 기본값 ""이면 세그먼트 정의만 만든다(권장). "set"으로 주면 생성 직후 기본 스냅샷 1개를 함께 만든다. snapshot_schedules: 스냅샷 주기 추출 설정 (기본 없음). 지정 형식은 콘솔과 동일하다. Returns: {"segment_idx": int, "title": str, "appid_group": str, "conditions": [str], "url": str, "response": dict} conditions는 실제로 저장된 조건의 사람이 읽을 수 있는 요약이다. 사용자에게 그대로 보여준다. url은 세그먼트 상세 콘솔 링크(POST_WRITE_LINK)다. 저장 후 사용자에게 반환한다.
유저 분류 라벨로 세그먼트를 만들고 segment_idx를 반환한다. get_user_classification으로 분포를 본 뒤 "이 칸에 속한 유저들"을 세그먼트로 떠내는 도구다. 조건을 직접 조립하는 create_segment와 달리 분류 라벨만 고르면 된다. **만들면 MCP로는 지울 수 없다** — 삭제 도구를 제공하지 않으므로 정리는 콘솔에서 해야 한다. 이름을 지정할 수 없어 서버가 자동으로 붙이며, 같은 조건으로 두 번 부르면 **같은 세그먼트가 하나 더 생긴다.** 호출 전에 반드시 사용자 승인을 받고, 기간과 라벨을 먼저 복창해 확인한다. user_labels는 "활동력_구매력" 형식이다. 두 축이 쓰는 값이 다르다. - 활동력: `high`(높음) `average`(보통) `low`(낮음) `new`(신규) - 구매력: `high`(높음) `average`(보통) `low`(낮음) `noPurchase`(비구매) 한 유형은 여러 칸에 걸쳐 있다. 유형 하나를 통째로 뜨려면 아래 라벨을 **모두** 넘긴다. 칸 수를 헷갈려 엉뚱한 라벨을 넣으면 다른 유형이 섞인다. | 유형 | 라벨 | |---|---| | 고래 whale | `high_high` | | 돌고래 dolphin | `high_average` `high_low` `average_high` `low_high` | | 미들 middle | `average_average` `average_low` `low_average` | | 라이트 light | `low_low` | | 무과금 nonPu | `high_noPurchase` `average_noPurchase` `low_noPurchase` | | 신규 newUser | `new_high` `new_average` `new_low` `new_noPurchase` | **`low_low`는 미들이 아니라 라이트다.** 미들은 3칸뿐이다. Args: company_cd: 회사 코드 (list_projects의 company_cd) org_idx: 조직 idx (list_organizations의 idx) appid_group: 프로젝트 ID (list_projects의 appid_group) start_date: 대상 유저를 집계할 시작일 "YYYY-MM-DD" end_date: 대상 유저를 집계할 종료일 "YYYY-MM-DD" user_labels: 분류 라벨 리스트(예: ["average_high"]). 최소 1개 Returns: {"segment_idx", "url", "appid_group", "start_date", "end_date", "user_labels"} 형태의 dict. segment_idx는 생성된 세그먼트의 idx이며 **인원이 아니다.** 이후 regist_user_group 등에서 이 값을 쓴다. url은 생성된 세그먼트의 콘솔 링크다. **쓰기 결과를 보고할 때 반드시 함께 준다** — 직접 조립하지 말고 이 값을 그대로 쓴다(호스트가 환경마다 다르다).
기존 세그먼트로 스냅샷(특정 시점 고정 유저 집합) 추출을 시작한다. 세그먼트 하나에 스냅샷을 여러 개 만들 수 있다(예: 매일 갱신). 세그먼트 정의는 그대로 두고 '지금 이 조건에 해당하는 유저'를 새로 굳히는 작업이다. WRITE_APPROVAL: 사용자가 명시적으로 승인한 뒤에만 호출한다. 서버가 추출 완료까지 응답을 제공하지 않기 때문에 그 안에 응답이 없으면 job_status='start'로 돌려주며 snapshot_idx는 null이다 — 스냅샷 자체의 추출은 진행 중이다. 어느 쪽이든 job_status는 'start'라 대상자 수는 알 수 없다. 완료 여부와 인원은 list_segment_snapshots로 확인한다. **이 도구를 재호출하면 스냅샷이 하나 더 생성**되기 때문에 응답이 기대와 달라도 먼저 list_segment_snapshots로 확인하고 없을 때만 다시 호출한다. Args: company_cd: 회사 코드 (필수. list_projects의 company_cd) org_idx: 조직 idx. 세그먼트 프로젝트 접근 권한을 검증한다. segment_idx: 세그먼트 idx (필수). create_segment의 반환값 또는 list_segment_snapshots의 segment_idx를 사용한다. 추측하지 않는다. title: 스냅샷 이름 (필수). 같은 세그먼트의 스냅샷이 여러 개 쌓이므로 시점을 알 수 있게 짓는다 (예: "260730_중국유저"). Returns: {"segment_idx": int, "segment_title": str, "appid_group": str, "snapshot_title": str, "snapshot_idx": int | None, "job_status": "start", "url": str} url은 콘솔 링크(POST_WRITE_LINK)다. snapshot_idx가 응답에 있으면 스냅샷 상세 링크, 없으면 세그먼트 상세 링크를 준다(snapshot_idx는 추출 완료 후 list_segment_snapshots에서 확인). 추출 완료 여부와 대상 유저 수도 list_segment_snapshots(company_cd, org_idx, appid_group)로 확인한다.
WRITE OPERATION — before calling, show the user exactly what will change and get their explicit confirmation. PERMANENTLY deletes one app server — IRREVERSIBLE. Audit history is kept and the same serverId can be re-registered later. Show the user the exact server (from list_axyl_app_servers) and get confirmation before calling. Requires the 'app-server' menu WRITE permission.
Searches ALL companies the account belongs to for existing apps matching the given criteria — use this FIRST in onboarding flows (e.g. web login) to decide whether to reuse an existing project/app or create new ones. At least one filter is required: runtime (e.g. WEBGL), store (e.g. DIRECT) and/or keyword (partial match on projectId, project name or appId). Returns matches with their company and project context, plus keyword-matched projects that lack a matching app (reuse candidates). Read-only and does NOT change the session's selected company — call select_company after choosing. Companies whose menus the account cannot access are skipped and reported.
Returns the catalog of allowed app runtimes (e.g. Android, iOS) and stores (e.g. Google Play, App Store) and their valid combinations for creating Axyl apps. Use this to answer which runtime/store values are valid. Requires the 'app-id' console menu permission.
Reads a project's app meta info: the default language and, per supported language, the app name, app icon URL and favicon URL. App meta is project-scoped (one set per project) — pass a projectIndex from list_axyl_projects, NOT an appIndex. registered=false (empty contents) is the normal state for a project that has not set app meta yet. appIconUrl/faviconUrl are public URLs (not secret). Requires the 'app-meta' menu permission.
Identifies which Client Secret is set — returns only its LAST 4 characters (e.g. ••••wxyz; values shorter than 12 characters return •••• only). It NEVER returns the full value: the full secret is viewable only on the Console screen "프로젝트 설정 > 보안 키". Call ONLY when the user explicitly asks to check or identify the secret — never proactively or as part of another flow. The console records these lookups for audit. Requires the 'security-key' menu Edit action permission.
Returns the logged-in account's Hive Axyl companyCode: the mandatory prefix of every projectId (e.g. companyCode 'com2us' -> projectId 'com2us.mygame'). Requires the 'project-settings' console menu permission.
Shows a project's login method (provider) settings: which providers are active (isActive), their display order and grant-key enforcement. Returns configured=false when the project has no provider configuration yet (normal for new projects). To enable login, present the available methods and let the user choose — USERNAME (id/password, used by web login), GUEST, CUSTOM_PROVIDER via update_axyl_login_provider, or a social provider registered in the Console — do NOT assume USERNAME. Secrets of social providers are always masked. The socialSetup field names the Console screen where social provider credentials are registered — relay that screen to the user, never ask for a secret in chat. Requires the 'login-setting' menu permission.
Gets one restriction type by code, with its name and the FULL per-language translation list (each: languageCode, isDefault, content). Requires projectIndex and code (100-999). Use this before update_axyl_restriction_type to show the before-state.
Shows a project's Axyl security key status: clientId, the PRIMARY Client Secret (always masked), the SECONDARY rollover slot (masked, absent if empty) and the issue time. Returns issued=false when no key exists yet (that is a normal state, offer create_axyl_security_key). Secret values are NEVER returned by any tool — the full value is viewable only on the Console screen "프로젝트 설정 > 보안 키". If the user explicitly asks which secret is set, get_axyl_client_secret_suffix returns only its last 4 characters. Requires the 'security-key' menu permission.
Gets a project's TCB API credential. secretId (the non-secret API ID) is returned as-is; secretKey is always MASKED — its full value is viewable only on the Console screen "TCB Connector > TCB 설정" (get_axyl_tcb_secret_key_suffix returns only its last 4 characters, and only when the user explicitly asks to identify it). If nothing is stored, registered=false — registering or rotating a credential requires typing the Secret Key on the Console screen "TCB Connector > TCB 설정", which this tool does NOT do. Requires the 'tcb-settings' menu.
Identifies which TCB Secret Key is set — returns only its LAST 4 characters (e.g. ••••wxyz; values shorter than 12 characters return •••• only). It NEVER returns the full value: the full Secret Key is viewable only on the Console screen "TCB Connector > TCB 설정". Call ONLY when the user explicitly asks to check or identify the Secret Key — never proactively or as part of another flow. If no credential is stored, registered=false. Requires the 'tcb-settings' menu Edit action permission.
Gets the ACTIVE restriction detail for a single target (type code+name, period, reason comment). projectIndex, targetType (PLAYER_ID or IP) and targetValue are required. If the target is not currently restricted the response says so. endDate=null means permanent. The target value is personal data — do not store or repeat it.
Gets one restriction release detail (original restriction reason + release reason). Requires projectIndex, targetType, targetValue and releaseId (from list_axyl_usage_restriction_releases). The target value is personal data.
Returns an Axyl console document (markdown) — either a resource spec (fields, identifier rules, state model of a console resource) or an operation guide (which console menu and permission a task needs, which MCP tools to call in what order, and how to resolve a permission failure). Read this before operating the console on the user's behalf. Find document ids with get_doc_tree or list_docs(domain='console').
이미 저장된 콘텐츠 하나의 설정 상세를 조회한다. content_idx 는 list_contents 에서 kind="content" 인 행의 idx, 또는 get_dashboard 의 contents[].content_idx 다. 대시보드는 이 도구가 아니라 get_dashboard 로 조회한다. list_contents 가 찾아낸 중복 후보가 정말 같은 콘텐츠인지(기간·차원·필터·차트 종류까지) 확인할 때 쓴다. 특히 **이벤트로 만든 measure 는 목록 응답의 metrics_name 에 나오지 않으므로** 여기서만 확인할 수 있다 — params.measure[].expressions[].tokens 의 type=event/event_detail 항목이 그것이고, 퍼널·리텐션은 params 의 sections / base_event·retention_event 가 대상이다. params 는 콘솔 저장 형식이라 preview_chart/create_chart 의 인자 형식과 다르다 — 변환 규칙은 get_content_template 의 설명과 같다. 다만 템플릿과 달리 여기 담긴 이벤트·지표 idx 는 같은 회사의 값이므로 다시 조회해 바꿀 필요는 없다. Args: company_cd: 회사 코드 (list_projects의 company_cd) org_idx: 조직 idx (list_organizations의 idx) workspace_idx: 콘텐츠가 속한 워크스페이스 idx content_idx: 콘텐츠 idx include_grid_config: True면 테이블 표시 상태(grid_config) 원본을 그대로 포함한다. 기본값(False)에서는 params.grid_config_summary 로 줄인다. Returns: {"content_idx": int, "content_name": str, "content_type": str, ("chart"|"chart_rank"|"funnel"|"retention") "chart_type": str, ("table"|"line"|"scorecard" 등. 목록에는 없는 값이다) "content_description": str, "workspace_idx": int, "project": [str], (대상 프로젝트 appid_group 목록. 목록에는 없는 값이라, 다른 앱을 보는 동명 콘텐츠인지 여기서 갈린다) "dashboard_idx": int, (특정 대시보드 전용으로 만든 콘텐츠면 그 대시보드 idx, 아니면 0) "permission": str, ("EDITOR" 등) "params": dict, (chart_type/date_params/measure/dimensions/adhoc_filters 등. 리텐션이면 base_event/retention_event/conditions) "url": str} 형태의 dict. API 응답에는 params 와 같은 내용의 chart_params(서버 정규화본)도 오지만 중복이라 반환하지 않는다.
콘텐츠 템플릿 하나의 설정 상세(params)를 조회한다. template_idx는 list_content_templates 또는 get_dashboard_template의 contents[].content_idx다. params는 콘솔에 저장된 형식이라 preview_chart/create_chart의 인자 형식과 다르다. - measure[].expressions[].tokens 의 {"type": "metric", "idx": ...} 는 preview_chart의 event_measures {"metric_idx", "metric_name"} 로, {"type": "event"} + {"type": "event_detail"} 쌍은 {"event_idx", "event_name", "dimension_idx", "dimension_name", "formular"} 로 풀어써야 한다. 토큰의 text(이벤트/메트릭 이름)와 measure_field(차원 이름)가 그 근거다. - dimensions / date_params / adhoc_filters 는 preview_chart의 동명 인자와 형식이 같다. - **params 안의 idx는 이 도구가 이미 company_cd 회사의 값으로 바꿔서 돌려준다.** 템플릿 원본은 플랫폼(company_index=0) 기준 idx라 그대로 쓸 수 없는데, 메타의 common_idx 로 대응 항목을 찾아 치환한다 — 이름으로 다시 조회하지 않아도 되고, 그렇게 해서도 안 된다(템플릿 'Sales'가 회사에서는 '인앱 매출액'처럼 이름이 다르고, 비슷한 이름의 다른 메트릭을 고를 위험이 있다). 치환된 자리에는 원래 플랫폼 idx가 common_idx 로 남고, 토큰의 text/name/field 도 회사 이름으로 바뀐다. - 대응하는 회사 메트릭·이벤트·차원이 없으면 그 자리의 idx는 null, unresolved=true 이고 params.unresolved_idx 에 목록이 모인다. 그 항목은 **이 회사에 정의가 없다는 뜻**이므로 콘텐츠를 그대로 만들 수 없다 — 빼고 만들지, 메타·로그를 먼저 준비할지 사용자에게 확인한다. Args: company_cd: 회사 코드 (list_projects의 company_cd) template_idx: 콘텐츠 템플릿 idx lang: 템플릿 이름/설명 언어 (기본 'ko') include_grid_config: True면 테이블 표시 상태(grid_config) 원본을 그대로 포함한다. 기본값(False)에서는 컬럼 폭·스크롤 위치 등을 버리고 params.grid_config_summary(피벗/행 그룹/집계/숨김 컬럼)만 남긴다. Returns: {"template_idx", "content_name", "content_description", "content_type", "chart_type", "mod_date", "params": dict} 형태의 dict. params에는 chart_type/date_params/measure/dimensions/adhoc_filters 등 콘텐츠 설정이 들어 있고, 리텐션 템플릿이면 base_event/retention_event/conditions가 들어 있다. idx는 모두 company_cd 회사 값으로 치환된 상태이므로 preview_*/create_* 에 그대로 넣을 수 있다. API 응답에는 params와 같은 내용의 chart_params(서버 정규화본)도 오지만 반환하지 않는다.
이미 저장된 대시보드 하나의 구성(어떤 콘텐츠가 어떤 순서·크기로 배치되어 있는지)을 조회한다. dashboard_idx 는 list_contents 에서 kind="dashboard" 인 행의 idx 다. 대시보드 중복 판정은 **구성 콘텐츠의 idx 집합으로 하면 안 된다.** 같은 구성을 다시 만들면 하위 콘텐츠까지 새로 복제되어 idx 가 전부 달라지기 때문이다. contents[].content_name / metrics 집합으로 비교해야 한다. Args: company_cd: 회사 코드 (list_projects의 company_cd) org_idx: 조직 idx (list_organizations의 idx) workspace_idx: 대시보드가 속한 워크스페이스 idx dashboard_idx: 대시보드 idx Returns: {"dashboard_idx": int, "dashboard_name": str, "dashboard_desc": str, "workspace_idx": int, "date_params": dict, (대시보드 전역 기간 설정) "adhoc_filters": list, (대시보드 전역 필터. 보통 null) "published": bool, "permission": str, ("EDITOR" 등) "contents": [{ (표시 순서대로. 행 → 행 안의 셀 순서) "content_idx": int, (get_content 의 content_idx. 텍스트·이미지 패널은 null) "cell_type": str, (셀 종류 "content"|"text"|"image". text·image 는 지표가 아니라 설명·이미지를 붙인 패널이다) "panel_ref": int, (text·image 패널에만 있다. update_dashboard 의 contents 에 {"panel_ref": n} 으로 넘겨 그 패널을 유지·이동한다) "content": str, (text 패널이면 본문, image 패널이면 URL. 콘텐츠 셀은 null) "content_name": str, (목록에 없는 idx면 null) "content_type": str, ("chart"|"chart_rank"|"funnel"|"retention") "chart_type": str, (목록 API 가 주지 않아 항상 null. 필요하면 get_content) "metrics": [str], "row": int, (행 번호. 같은 값이면 한 행에 나란히 배치된다) "order": int, (행 안에서의 셀 순서. 24칸 그리드 x좌표가 아니다) "width": int, (24칸 그리드 기준 폭. 12면 절반, 24면 한 행 전체) "height": int, "memo": str}], "url": str} 형태의 dict.
대시보드 템플릿 하나의 내부 구성(어떤 콘텐츠가 어떤 순서·크기로 배치되는지)을 조회한다. template_idx는 list_dashboard_templates의 template_idx다. 반환된 contents[].content_idx를 get_content_template에 넣으면 콘텐츠별 지표 설정(params)을 확인할 수 있다 — 대시보드 템플릿 응답에는 콘텐츠 설정이 포함되지 않는다. 콘텐츠 이름·타입은 콘텐츠 템플릿 목록을 함께 조회해 붙인다. 그 결과 하위 메타 중 하나라도 null이면서 content_idx가 있으면 해당 idx의 콘텐츠 템플릿 상세를 조회해 null 필드를 채운다. 단건 조회에서도 값을 확인하지 못한 필드만 null로 남는다. Args: company_cd: 회사 코드 (list_projects의 company_cd) template_idx: 대시보드 템플릿 idx (list_dashboard_templates의 template_idx) lang: 템플릿 이름/설명 언어 ('ko'|'en'|'ja'|'zh-TW'|'th'. 기본 'ko') Returns: {"template_idx": int, "dashboard_name": str, "dashboard_desc": str, "date_params": dict, (대시보드 전역 기간 설정. 없으면 null) "adhoc_filters": list, (대시보드 전역 필터. 보통 null) "contents": [{ (표시 순서대로. 행 → 행 안의 셀 순서) "content_idx": int, (get_content_template의 template_idx. 콘텐츠 셀이 아니면 null — 아래 cell_type 참고) "cell_type": str, (셀 종류 "content"|"text"|"image". 콘텐츠 템플릿의 content_type과 다르다. text·image는 지표를 그리는 셀이 아니라 설명·이미지를 붙인 패널이며 content_idx가 없다) "content_name": str, (콘텐츠 템플릿 이름) "content_type": str, ("chart"|"chart_rank"|"funnel"|"retention") "chart_type": str, ("table"|"line"|"scorecard" 등) "row": int, (행 번호. 같은 row 값이면 한 행에 나란히 배치된다) "order": int, (행 안에서의 셀 순서. 24칸 그리드 x좌표가 아니다) "width": int, (24칸 그리드 기준 폭. 12면 절반, 24면 한 행 전체) "height": int, (행 높이) "memo": str, (셀에 붙은 메모. 보통 null) "content": str}] (text 셀이면 본문, image 셀이면 URL. 콘텐츠 셀은 null. memo와 별개 값이다) } create_dashboard는 contents 순서로 배치를 계산하며, 항목마다 width/height를 선택적으로 넘길 수 있다. 템플릿의 폭(12는 절반, 24는 전체)과 높이를 그대로 넘기면 같은 배치를 재현할 수 있다.
Returns the full Axyl document catalog as a tree, with document id and title only. The top level is the domain: 'service' documents help you write code against the Axyl SDK, while 'console' documents describe Axyl console resources and the tools that operate them on the user's behalf. Below that, documents are grouped by product and category. Call this first to discover which documents exist, then use list_docs or the get_* tools for details. Documents under 'common' apply to all products.
Searches Axyl error guide documents by error code (e.g. 'AUTH-1001') or keyword and returns the matching document (markdown). If several documents match, a candidate list is returned instead — retry with the exact document id.
이벤트 1건의 전체 표준 스펙을 요청한 sdk_type 기준으로 반환한다. 코드 생성 전 이 도구 결과의 event_name, attributes[].name, attributes[].data_type으로 전송할 속성명과 타입을 확정한다. 속성 값 규약은 attributes[].desc_ko에 서술되어 있다(예: country는 ISO 3166-1 alpha-2 대문자). appId 값은 list_projects의 app_id_list[]에서 얻는다. os/market/serverId 값은 list_projects가 반환하지 않는다. target_collect='AUTO'이면 SDK가 이미 자동 수집하는 이벤트다. 게임이 같은 eventName으로 또 보내면 이중 집계되고 SDK의 자동 전송은 끌 수 없으므로 코드를 생성하지 않는다. Args: event_name: 조회할 이벤트명. sdk_type: "sdk_v4"|"axyl". SDK마다 수집 책임이 다르므로 반드시 확정해서 전달한다. Returns: 이벤트 스펙 dict 또는 {"error": {...}}. attributes[]의 target_collect='GAME'인 속성이 게임이 채워야 하는 값이다. attributes[].field는 **BigQuery 적재 후의 저장 위치**다(top-level 컬럼 / attributes.hiveAttributes / attributes.eventAttributes). **전송 위치가 아니다.** 전송 payload는 평평한 JSON이며, 필수 속성과 이벤트 속성을 모두 같은 레벨에 넣는다. 'attributes'/'eventAttributes'/'hiveAttributes'는 예약어라 payload에 계층으로 만들거나 속성명으로 사용하면 데이터가 별도의 격리 테이블로 이동한다.
Returns the full API specification document (markdown) for an Axyl product feature: endpoints, request/response schemas and constraints. Find document ids with get_doc_tree or list_docs(category='feature').
조직 1건의 설정 상세를 조회한다 — 연결된 프로젝트와 공개 범위를 포함한다. 애널리틱스 관리자만 사용할 수 있다. list_organizations는 이름·설명만 돌려주므로, 이 조직이 어떤 프로젝트에 접근할 수 있는지, 전체 공개인지 지정 멤버만인지 확인하려면 이 도구를 쓴다. 구성원이 누구인지(계정 ID)는 사내 개인정보라 반환하지 않고 인원 수만 준다. 명단이 필요하면 콘솔 조직 설정 화면에서 확인한다. Args: company_cd: 회사 코드 (list_projects의 company_cd) org_idx: 조직 idx (list_organizations의 idx) Returns: {"org_idx", "org_name", "org_desc", "all_type", "member_all_type", "mcp_member_all_type", "display", "appid_groups", "member_count", "mcp_member_count"} 형태의 dict. all_type='Y'면 회사의 모든 프로젝트에 접근하는 조직이고, 'N'이면 appid_groups에 연결된 프로젝트만 접근한다. member_all_type='Y'면 회사 구성원 누구나 쓰는 전체 공개 조직이고, 'N'이면 지정된 멤버만 쓴다(member_count가 그 인원이다). 전체 공개 조직에는 일반 멤버 명단이 없으므로 member_count는 MCP 사용을 개별 허용받은 사용자처럼 개별 등록된 인원만 센다. mcp_member_all_type='Y'면 이 조직을 쓸 수 있는 사용자 누구나 MCP로도 쓸 수 있고, 'N'이면 MCP 사용이 개별 허용된 사용자만 쓴다(전체 공개 조직에서도 개별 허용할 수 있으며 mcp_member_count가 그 인원이다). appid_groups는 [{"appid_group", "exclude"}] 이며 exclude='Y'는 연결에서 빠진 항목이다. display='N'이면 콘솔 목록에 노출되지 않는 조직이다.
Returns the full sample code document (markdown) for an Axyl product scenario. Find document ids with get_doc_tree or list_docs(category='samples'). If the exact id is unknown, pass the platform (e.g. 'android', 'ios', 'unity') to narrow the suggested candidates.
Returns the Hive Axyl MCP server name, version and status. Use this to verify the connection to the server.
Returns the full setup guide (markdown) for an Axyl product: the steps a developer performs by hand to prepare the environment — provisioning, deploying, and settings configured in the product's own console (for TCB products this means the Tencent CloudBase console, not the Axyl console). Find document ids with get_doc_tree or list_docs(category='setup-guide').
유저 한 명의 기간 내 활동 요약을 조회한다. 활동 상세를 보기 전 전체 그림을 잡는 용도다. **집계 기준이 적용되지 않은 원본 로그다.** 지표 제외 유저·지표 필터·지표 시작일은 지표 조회 (preview_chart)에만 적용되고 여기에는 반영되지 않는다. 그래서 이 도구의 수치와 매출·이용자 지표가 다를 수 있으며, 그건 오류가 아니라 집계 기준 차이다. 수치를 답할 때 어느 기준인지 밝힌다. 활동 상세(list_user_activities)는 건수가 많아 먼저 이 도구로 기간을 좁힌 뒤 호출한다. 호출 전에 check_user_exists로 유저 존재를 확인한다. Args: company_cd: 회사 코드 (list_projects의 company_cd) org_idx: 조직 idx (list_organizations의 idx) appid_group: 프로젝트 ID (list_projects의 appid_group) user_id: 조회할 유저 ID start_date: 조회 시작일 "YYYY-MM-DD". 차트 계열과 달리 시분초가 없다 end_date: 조회 종료일 "YYYY-MM-DD" lang: 라벨 언어. 기본 'ko' Returns: {"user_id", "appid_group", "start_date", "end_date", "summary"} 형태의 dict. summary는 서버 응답 그대로 [{"type", "data"}] 다. type이 "period"면 기간 전체 합계, 날짜("2026-09-11")면 그 일자의 활동이다. data 항목은 {"category", "categoryLabel", "name", "nameLabel", "cnt"} 이며 cnt는 문자열로 온다("1") — 크기를 비교할 때 문자열 정렬이 되지 않게 주의한다. **날짜별 항목으로 활동이 몰린 날을 먼저 찾고**, 그 날짜만 list_user_activities 로 좁혀서 본다.
기간 내 유저가 어떤 분류 유형에 얼마나 분포하는지 조회한다. 유저는 **활동력과 구매력의 조합**으로 유형이 정해진다. 기간 내 마지막 상태를 기준으로 삼으며, 활동력 예측이 불가능한 유저는 집계에서 빠진다. | 활동력 \ 구매력 | 높음(high) | 보통(average) | 낮음(low) | 비구매(noPurchase) | |---|---|---|---|---| | 높음(high) | 고래 whale | 돌고래 dolphin | 돌고래 dolphin | 무과금 nonPu | | 보통(average) | 돌고래 dolphin | 미들 middle | 미들 middle | 무과금 nonPu | | 낮음(low) | 돌고래 dolphin | 미들 middle | 라이트 light | 무과금 nonPu | | 신규(new) | 신규 newUser | 신규 newUser | 신규 newUser | 신규 newUser | 신규는 활동력이 신규면 구매력과 무관하게 신규다. 유형이 기간 중 어떻게 바뀌었는지는 get_user_classification_move로 본다. Args: company_cd: 회사 코드 (list_projects의 company_cd) org_idx: 조직 idx (list_organizations의 idx) appid_group: 프로젝트 ID (list_projects의 appid_group) start_date: 조회 시작일 "YYYY-MM-DD" end_date: 조회 종료일 "YYYY-MM-DD" Returns: {"appid_group", "start_date", "end_date", "user_type", "user_active_type", "country_type", "os_type", "character_type"} 형태의 dict. user_type은 유형별 인원과 비율이다(user_cnt_*/user_rate_*). 서버 응답 그대로이며 인원은 실수로 온다(2329.0). user_active_type은 활동력 × 구매력 교차표로, **행이 구매력(sales_label), 열이 활동력**이다 (user_cnt_activity_high·avg·low·new). 위 매핑표와 함께 읽으면 각 유형이 어느 칸에서 나왔는지 짚을 수 있다. user_*_grade는 인원도 비율도 아니므로 집계에 쓰지 않는다. **user_type의 인원 합과 user_active_type의 인원 합은 같아야 한다** — 어긋나면 한쪽을 잘못 읽은 것이다. country_type·os_type은 [{"name", "data"}] 형태이며, name이 국가·OS이고 data의 각 항목 {"name", "y"}는 그 유형(name) 안에서 차지하는 **비율(%)**이다. 인원이 아니다. 한 유형의 값을 모두 더하면 100이 된다(반올림으로 99.9가 되기도 한다). 국가는 유형별 상위 10개까지만 개별로 나오고 나머지는 'etc'로 묶인다. character_type은 유형별 **마지막 접속일 플레이타임(분, 평균)**이다. 콘솔 기본값인 playTime으로 고정해 호출하기 때문이다. 로그인 일수·누적 과금액·ARPPU 등 다른 지표는 get_user_classification_detail로 조회한다. 비율이 0.0이어도 인원이 0이라는 뜻은 아니다. 소수점 한 자리 반올림이라 1명도 0.0으로 나온다. 인원은 반드시 user_cnt_*로 본다.
유저 분류 유형별로 지표 하나의 평균을 조회한다. "고래는 하루 몇 분이나 하나" 같은 질문용이다. get_user_classification이 유형별 **인원**을 준다면 이 도구는 유형별 **행동·과금 지표**를 준다. 유형 구분 기준은 같으므로 두 도구를 같은 기간으로 불러 함께 읽으면 된다. metric으로 고를 수 있는 지표: | 코드값 | 내용 | |---|---| | `playTime` | 마지막 접속일 플레이타임(분, 평균) | | `loginDay` | 마지막 접속일 포함 이전 3일 로그인 일수(평균) | | `loginCnt` | 마지막 접속일 포함 이전 3일 로그인 횟수(평균) | | `loginHit` | 마지막 접속일 포함 이전 일 평균 로그인 횟수 | | `pushRate` | 마지막 접속일 포함 이전 3일 푸시 반응률(평균) | | `adCnt` | 마지막 접속일 포함 이전 3일 보상형 광고 시청 수(평균) | | `firstDiff` | 유저 진입부터 첫 구매까지 소요 시간 | | `accKrw` | 누적 과금액 합(KRW) | | `arppu` | 구매 유저 1인당 평균 과금액(KRW) | | `lifeTime` | 라이프 타임(일, 평균) | | `accUsd` | 누적 과금액(USD) | | `arppuUsd` | 구매 유저 1인당 과금액(USD) | Args: company_cd: 회사 코드 (list_projects의 company_cd) org_idx: 조직 idx (list_organizations의 idx) appid_group: 프로젝트 ID (list_projects의 appid_group) start_date: 조회 시작일 "YYYY-MM-DD" end_date: 조회 종료일 "YYYY-MM-DD" metric: 위 표의 코드값 하나. 한 번에 하나만 조회된다 Returns: {"appid_group", "start_date", "end_date", "metric", "metric_desc", "values"} 형태의 dict. values는 [{"name", "y"}] 로 name이 유형(고래·돌고래·미들·라이트·무과금·신규), y가 그 유형의 평균값이다. 유형 6종은 해당 유저가 없어도 항상 나오며 그때 y는 0이다. **y=0을 "값이 0인 유저들"로 읽지 않는다** — 그 유형에 유저가 없었을 수도 있어서, 인원은 get_user_classification의 user_type으로 따로 확인한다. 대부분의 지표는 서버에서 소수점을 버리고(floor) 정수로 만든다. 실제 평균이 0.9여도 0으로 나오므로, 0을 "전혀 없음"으로 단정하지 않는다. pushRate·lifeTime·accUsd·arppuUsd는 소수점 두 자리까지 반올림한다.
기간 내 유저 분류 유형이 어떻게 바뀌었는지(유형 간 이동)를 조회한다. 유저는 활동력과 구매력으로 고래·돌고래·미들·라이트·무과금·신규 중 하나로 분류된다. 이 도구는 기간 첫 분류와 마지막 분류를 비교해 **유형이 바뀐 유저만** 집계한다. 유형이 그대로인 유저는 어디에도 세지 않는다. move_from·move_to를 주면 그 경로로 이동한 유저 ID까지 뽑아준다. 숫자 유저 ID를 사람이 떠올릴 수 없으니, 유저 그룹·세그먼트와 함께 **조사 대상을 고르는 출발점**으로 쓴다. 여기서 얻은 ID는 check_user_exists로 확인한 뒤 활동 추적 도구로 넘긴다. Args: company_cd: 회사 코드 (list_projects의 company_cd) org_idx: 조직 idx (list_organizations의 idx) appid_group: 프로젝트 ID (list_projects의 appid_group) start_date: 조회 시작일 "YYYY-MM-DD" end_date: 조회 종료일 "YYYY-MM-DD" move_from: 출발 유형. 코드값('newUser')·한글('신규') 모두 받는다. 생략하면 전체. 미접속(churn)은 최초 분류에 없어 받지 않는다 move_to: 도착 유형. 코드값('nonPu')·한글('무과금') 모두 받는다. 생략하면 전체. 신규(newUser)는 최종 분류에 없어 받지 않는다 limit: 유저 ID를 최대 몇 건 받을지. 1~100, 기본 20 Returns: {"appid_group", "start_date", "end_date", "max_move", "move", "moved_user_count"} 형태의 dict. move_from·move_to를 주면 "movers"가 더해진다. max_move는 가장 많이 일어난 이동 한 건으로 서버 응답 그대로다 {"first_user_type", "last_user_type", "user_cnt", "user_rate"}. move는 출발 유형 6행(whale·dolphin·middle·light·nonPu·newUser)이며 각 행에 도착 유형별 user_cnt_*/user_rate_*가 들어 있다(whale·dolphin·middle·light·non_pu·churn). **-1은 이동 대상이 아닌 칸이다** — 같은 유형끼리라 이동이 성립하지 않는 자리로, 콘솔에서는 빗금으로 비워둔다. 0과 구분해서 읽는다(0은 이동이 가능한데 없었다는 뜻). user_cnt는 실수로 오고(869.0), user_rate는 출발 유형 전체 대비 비율(%)을 소수점 한 자리로 반올림한 값이라 1명이어도 0.0으로 나올 수 있다. **churn(미접속)은 조회 종료일 기준으로 3일 이상 활동이 없는 상태다** — 마지막 활동일이 종료일로부터 3일 이상 이전이면 여기로 분류된다(종료일 포함 최근 3일간 활동 없음). 이탈 확정이 아니므로 복귀 가능성을 배제한 값으로 읽지 않는다. moved_user_count는 유형이 바뀐 유저 총수이며, 미접속으로 빠진 유저도 포함한다. **미접속으로 이동한 유저도 ID를 뽑을 수 있다** — move_to='churn'으로 조회한다. 유형별 인원은 move의 user_cnt_churn에서, 개별 ID는 movers에서 본다. movers.users는 {"first_type", "last_type", "user_id"}의 리스트이며 서버가 준 차트 툴팁 문자열 그대로다 — user_id는 "유저 Id:80935285" 처럼 접두사가 붙어 있으므로 콜론 뒤 숫자가 실제 유저 ID다. count는 필터에 걸린 전체, returned는 실제로 담은 수이고 count > returned면 limit에서 잘린 것이다.
Hive Axyl ChatGPT Plugin FAQ
How the directory, categories and Discoverability Score work.
Read the methodologyHow do I improve Hive Axyl's ChatGPT Plugin discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are Hive Axyl alternatives on ChatGPT?
As of 2026-10-23, Hive Axyl competes with Agentic Atlas, Agentplace, AI Teacher, Auto-building agents, Autosheet, Botpress, Brainbase MCP, Camber and 35 more in ChatGPT AI Agent Builders & Deployment Platforms, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.