publ betaReference (MCP guide)
Open publ console

channel_seo_get

[Migration map](../reference/tool-name-migration.md).

# channel_seo_get

Read the selected channel's SEO metadata observation and revision before preparing a change. The record ID is distinct from the channel ID.

## Access and input

Requires OWNER or DELEGATEE with MANAGE_SEO_TOOLS for the selected channel. Discover the channel first. The source-defined hosted selected-channel resource admits this tool only for its exact channelCode; an account resource does not. These rules are implementation scope, not deployed authentication or isolation evidence.

The strict object accepts only channelCode, a required string of 1–512 characters. Literal dot/double dot, slash, backslash, ASCII control characters and DEL are rejected. No domain, credentials, request ID, save fields or dry-run flag is accepted.

```json
{"channelCode":"selected-channel-code"}
```

Fresh observations use the final verified current credential context when producing their revision. Renewal verified within one port may preserve an in-progress read, but the returned revision is usable by the next request with the same data and persisted credentials. External token replacement still conflicts; do not calculate, rewrite or transplant a revision to bypass that boundary.

## Inputs

This tool takes no input fields.

## Results

The projected record contains id, title, description, thumbnailSrc, insertedAt and updatedAt. Strings, blanks, whitespace and image references are retained without editor defaults, translations, length limits or thumbnail fallbacks. References are untrusted data; the reader fetches no image or page.

The workflow reads the record twice, then checks the channel and current operator/credential context. With a positive numeric id, all six fields must match. A success returns CHANNEL_SEO_INFORMATION, channelSeoInformation, revision and verification.confirmed:true for those observations. Repeated reads are not an atomic snapshot.

When both reads have explicit id:null, only id/title/description/thumbnailSrc are compared; both timestamps are retained from the last response but excluded from comparison and the revision. The result is action_required / SEO_RECORD_STATE_UNVERIFIED, with observedChannelSeoInformation, revision and verification.confirmed:false. Do not report those values as saved settings. A null-to-number identity transition, or changing compared content, returns SEO_INFORMATION_CHANGED.

Missing, null or malformed enclosing records return SEO_RESPONSE_UNVERIFIED. They are not empty inventories. Shared scope, role, connection and authentication errors remain failures or their declared human action. A returned console destination identifies the selected SEO screen; it proves neither access nor completion. Demo omits a live destination.

## Preparing changes and limits

Use the current revision and exact channel with [channel_seo_apply](publ_channel_seo_apply.md). The writer separately verifies an ACTIVATED connected domain and configured services; this reader performs no domain eligibility check. Even the unidentified observation's revision is only an input to those further checks, not permission to save or proof of existing persistence.

This call performs no upload, save, recache, DNS change or task journaling. It does not verify rendered metadata, crawler indexing, preview, image availability or cache freshness. No status/resume flow applies to this read. See the [SEO workflow guide](../guides/channel-seo.md).

This page documents source behavior and checked inputs.

SEO retains its independent domain prerequisites and unverified positive-write scope.

This corrects the earlier strict-metadata boundary failure shared with widget uploads.