channels_list — read the account's channel directory
Read one page of channels belonging to the connected account. Use the returned channelCode to select a target and its revision when preparing an archive change. This is an account data read; screens_list instead searches static workflow inventory.
Current response compatibility follows the source channel-code fallback, including explicit null legacy fields. It does not change inputs, normalized revisions or task recovery.
Input
| Field | Type | Required | Default and constraints |
|---|---|---|---|
page |
integer | No | 1; from 1 through 9,007,199,254,740,991. |
limit |
integer | No | 15; from 1 through 100. |
markChannelAs |
enum string | No | RUNNING; choose RUNNING or NO_INTEREST. |
installedPAppCodes |
string array | No | At most 50 distinct feature codes, each matching ^[A-Za-z0-9_]+$. Omitted or empty means no feature filter. |
The object is strict: it accepts no title search, sort, account ID, or channel selector. null is invalid.
{"page":1,"limit":15,"markChannelAs":"RUNNING"}
Use only feature codes established by the relevant source/options. The response lists channels, not all installed features on each channel.
Inputs
| Field | Required here | Contract |
|---|---|---|
page |
No | integer; maximum 10000; greater than 0; default 1 |
limit |
No | 15 or 30 or 50 or 100; default 15 |
markChannelAs |
No | RUNNING, NO_INTEREST; default RUNNING; RUNNING lists channels in use, NO_INTEREST archived channels. |
Result
A verified page returns status:success, code:CHANNEL_DIRECTORY, taskType:channel-directory, and the following fields through the common MCP wrapper:
| Field | Meaning |
|---|---|
channels |
Current page of normalized channel rows; see below. |
pagination |
page, limit, and filtered total. |
nextPage |
The next page number, or null when this filtered list has no later page. |
filters |
Applied markChannelAs and installedPAppCodes (an empty array when omitted). |
environment |
Adapter environment label. |
verification |
confirmed:true, method:account_channel_list, channelAuthenticationVerified:false. |
consoleUrl |
Exact supported list selection, or an explicitly broader parent list in non-demo results; see below. |
nextStep, note |
Target selection and credential limitations. |
Each channel has id, channelCode, title, baseCurrency (KRW or USD), currentPlan, markChannelAs, status, isDeactivated, credentialPresent, and revision. Legacy primitiveInvitationCode is normalized into channelCode if the latter is absent or empty. The legacy field is not returned separately.
RUNNING and NO_INTEREST describe directory classification. A channel can appear without that credential.
The 64-character revision hashes the normalized directory fields excluding credentialPresent. Copy it without recomputing it. A separate credential change does not change this directory revision.
Pagination and verification
Follow nextPage with the same limit and filters. The expected page size is min(limit, max(0, total - (page - 1) * limit)). Wrong pagination, a wrong archive classification, duplicate IDs/codes, or an unexpected short/empty/oversized page produces CHANNEL_DIRECTORY_UNVERIFIED. A genuine zero total or page beyond the total can return an empty list successfully.
Pages from separate calls are not an atomic account snapshot. Do not report an incomplete or unverified page as proof that a channel is absent. The archive workflow performs its own full-directory reads and revision checks.
Access, effects, and failures
The HTTP adapter uses the account bearer for GET /seller/api/v2/channels, with page, limit, classification, and optional comma-separated feature codes. It does not require a channel token for each row. It performs no directory write, credential refresh, shared current-channel switch, analytics event, or job creation. channel-directory classifies this read result and is not an accepted recovery task type.
Authentication, credential permissions/environment, connection locking, HTTP failures, and malformed data can stop the read. Follow the actual failure and repair the relevant connection before reading again; AUTH_REQUIRED is a human-action result. Do not collect credentials in conversation.
In hosted mode this tool belongs to an account resource. The subsequent channel context read requires a separately authorized selected-channel resource; the list result's generic nextStep does not grant that access. Consult scoped discovery on the actual connection.
Implementation: src/channel-directory.ts, src/publ-http.ts::readChannelDirectory, and registration in src/server.ts.
Exact channel-list destination
The response's selection preserves the normalized API request; filters and
pagination keep their existing meanings. consoleView contains exactMatch,
page, limit, markChannelAs and omitted. It describes the browser destination,
not a replacement for the API selection.
The original AllChannels screen accepts page sizes 15, 30, 50 and 100 and reads
page, limit and markChannelAs. Without installed-feature filters, the single
URL preserves that exact selection, using the central console origin. If the API
request uses another valid size or nonempty installedPAppCodes, the URL opens
the same archive classification at page 1 with 15 rows. consoleView.exactMatch
is false, omitted identifies installedPAppCodes where applicable and
pagination, and navigation labels this as a broader parent list. The API result
still contains the originally requested page/filter. The bridge never fabricates
an unsupported UI filter query or claims that this broader list is the same result.
An empty out-of-range API page retains the existing successful-read contract and its requested page when representable; it is not evidence the account is empty.