O EmDash inclui um servidor Model Context Protocol (MCP) integrado em /_emdash/api/mcp que expõe operações de gerenciamento de conteúdo como ferramentas para assistentes de IA.
Esta página aborda os detalhes do protocolo: autenticação, transporte, especificações da ferramenta, descoberta OAuth e tratamento de erros.
Autenticação
O servidor MCP suporta três métodos de autenticação:
| Método | Como funciona |
|---|---|
| Código de autorização OAuth 2.1 + PKCE | Fluxo padrão para clientes MCP. O usuário aprova escopos no navegador. |
| Token de acesso pessoal (PAT) | Tokens ec_pat_* de longa duração criados no painel de administração. |
| Fluxo do dispositivo | Fluxo estilo CLI onde você aprova um código no navegador. Usado por emdash login. |
Os cookies de sessão (da UI administrativa) também funcionam, mas não são práticos para clientes MCP externos.
Escopos
Os tokens têm como escopo limitar quais operações um cliente pode realizar. Os escopos são solicitados durante a autorização do OAuth e aplicados em cada chamada de ferramenta.
| Escopo | Concede acesso a |
|---|---|
content:read | Liste, obtenha, compare e pesquise conteúdo. Liste taxonomias, termos de taxonomia e menus. |
content:write | Crie, atualize, exclua, publique, cancele a publicação, agende, cancele a programação, duplique e restaure conteúdo. Concede implicitamente taxonomies:manage e menus:manage para compatibilidade retroativa com tokens emitidos antes da existência desses escopos. |
media:read | Liste e obtenha itens de mídia. |
media:write | Registre (crie), atualize e exclua metadados de mídia. |
schema:read | Liste coleções e obtenha esquemas de coleção. |
schema:write | Crie e exclua coleções e campos. |
taxonomies:manage | Crie, atualize e exclua termos de taxonomia. |
menus:manage | Crie, atualize e exclua menus de navegação e seus itens. |
settings:read | Leia as configurações de todo o site. |
settings:manage | Atualize as configurações de todo o site. |
admin | Acesso total a todas as operações. |
O escopo admin concede acesso a tudo. A autenticação baseada em sessão (sem token) também tem acesso total com base na função do usuário.
content:write concede implicitamente taxonomies:manage e menus:manage para que os tokens de acesso pessoal emitidos antes da divisão desses escopos continuem a funcionar sem reemissão. Novos tokens devem solicitar escopos granulares.
Requisitos de função
Além dos escopos, algumas ferramentas exigem uma função mínima de RBAC. Ambos devem ser satisfeitos – um token com o escopo correto ainda falhará se a função do usuário chamador for muito baixa.
| Operação | Função mínima |
|---|---|
| Conteúdo lido | Assinante (10) para itens publicados; Colaborador (20) para rascunhos, agendados, lixo e revisões |
| Criar/editar conteúdo próprio/excluir conteúdo próprio | Autor (30) |
| Publicação de conteúdo | Autor (30) para itens próprios; Editor (40) atuará em itens de terceiros |
| Esquema lido | Editor (40) |
| Esquema de gravação | Administrador (50) |
| Gerenciamento de taxonomias | Editor (40) |
| Gerenciamento de menus | Editor (40) |
| Configurações lidas | Editor (40) |
| Gerenciar configurações | Administrador (50) |
Carregamento de mídia (media_create) | Autor (30) |
Consulte o Guia de autenticação para definições de funções.
Transporte
O servidor usa o transporte HTTP Streamable em modo sem estado. Cada solicitação é independente – não há sessões ou conexões de longa duração.
POST /_emdash/api/mcp— Enviar chamadas de ferramenta JSON-RPCGET /_emdash/api/mcp— Retorna 405 (sem SSE no modo sem estado)DELETE /_emdash/api/mcp— Retorna 405 (nenhuma sessão para fechar)
As respostas seguem o formato JSON-RPC 2.0. Os erros usam códigos de erro JSON-RPC padrão, com códigos específicos do MCP para falhas de escopo e permissão.
Ferramentas
O servidor expõe 43 ferramentas em oito domínios: conteúdo, esquema, mídia, pesquisa, taxonomias, menus, revisões e configurações. Cada ferramenta retorna resultados como conteúdo de texto JSON ou uma mensagem de erro com isError: true em caso de falha.
Ferramentas de conteúdo
content_list
Liste itens de conteúdo em uma coleção com filtragem e paginação opcionais.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Slug de coleção (por exemplo, posts, pages) |
status | string | Não | Filtro: draft, published ou scheduled |
limit | integer | Não | Máximo de itens a serem retornados (1-100, padrão 50) |
cursor | string | Não | Cursor de paginação de uma resposta anterior |
orderBy | string | Não | Campo para classificar (por exemplo, created_at, updated_at) |
order | string | Não | Direção de classificação: asc ou desc (padrão desc) |
locale | string | Não | Filtre por localidade (por exemplo, en, fr). Relevante apenas com i18n. |
Escopo: content:read | Somente leitura: Sim
content_get
Obtenha um único item de conteúdo por ID ou slug. Retorna todos os valores de campo, metadados e um token _rev para simultaneidade otimista.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo (ULID) ou slug |
locale | string | Não | Local para pesquisa de slug. Os IDs são globalmente exclusivos. |
Escopo: content:read | Somente leitura: Sim
content_create
Crie um novo item de conteúdo. O objeto data deve conter valores de campo que correspondam ao esquema da coleção – use schema_get_collection para verificar quais campos estão disponíveis. Os itens são criados como draft por padrão.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
data | object | Sim | Valores de campo como pares de valores-chave |
slug | string | Não | Slug de URL (gerado automaticamente a partir do título, se omitido) |
status | string | Não | Status inicial: draft ou published (padrão draft) |
locale | string | Não | Localidade deste conteúdo (o padrão é o padrão do site) |
translationOf | string | Não | ID do item do qual esta é uma tradução |
Escopo: content:write
content_update
Atualize um item de conteúdo existente. Inclua apenas os campos que você deseja alterar – os campos não especificados permanecem inalterados.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo ou slug |
data | object | Não | Valores de campo a serem atualizados |
slug | string | Não | Novo slug de URL |
status | string | Não | Novo status: draft ou published |
_rev | string | Não | Token de revisão de content_get para detecção de conflitos |
Escopo: content:write
content_delete
Exclua um item de conteúdo de forma reversível, movendo-o para a lixeira. Use content_restore para desfazer ou content_permanent_delete para removê-lo permanentemente.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo ou slug |
Escopo: content:write | Destrutivo: Sim
content_restore
Restaure um item de conteúdo excluído da lixeira.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo ou slug |
Escopo: content:write
content_permanent_delete
Exclua permanente e irreversivelmente um item de conteúdo da lixeira. O item deve estar na lixeira primeiro.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo ou slug |
Escopo: content:write | Destrutivo: Sim
content_publish
Publique um item de conteúdo, disponibilizando-o no site. Cria uma revisão publicada a partir do rascunho atual. Edições posteriores criam um novo rascunho sem afetar a versão ativa até ser republicada.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo ou slug |
Escopo: content:write
content_unpublish
Reverter um item publicado para o status de rascunho. Ele não estará mais visível no site ativo, mas seu conteúdo será preservado.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo ou slug |
Escopo: content:write
content_schedule
Agende um item de conteúdo para publicação futura. Ele será publicado automaticamente na data/hora especificada.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo ou slug |
scheduledAt | string | Sim | Data e hora ISO 8601 (por exemplo, 2026-06-01T09:00:00Z) |
Escopo: content:write
content_unschedule
Cancele uma publicação previamente agendada. O item mantém seu status atual; apenas o carimbo de data/hora scheduledAt é apagado. Idempotente – chamar um item que não está programado é um ambiente autônomo.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo ou slug |
Escopo: content:write
content_compare
Compare a versão publicada (ao vivo) de um item de conteúdo com seu rascunho atual. Retorna ambas as versões e um sinalizador indicando se há alterações.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo ou slug |
Escopo: content:read | Somente leitura: Sim
content_discard_draft
Descarte o rascunho atual e reverta para a última versão publicada. Funciona apenas em itens que foram publicados pelo menos uma vez.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo ou slug |
Escopo: content:write | Destrutivo: Sim
content_list_trashed
Lista itens de conteúdo excluídos de forma reversível na lixeira de uma coleção.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
limit | integer | Não | Máximo de itens (1-100, padrão 50) |
cursor | string | Não | Cursor de paginação |
Escopo: content:read | Somente leitura: Sim
content_duplicate
Crie uma cópia de um item de conteúdo existente. A duplicata é criada como um rascunho com “(Cópia)” anexado ao título e um slug gerado automaticamente.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo ou slug a ser duplicado |
Escopo: content:write
content_translations
Obtenha todas as variantes de localidade de um item de conteúdo. Retorna o grupo de tradução e um resumo de cada versão de localidade. Relevante apenas quando i18n está habilitado.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo ou slug |
Escopo: content:read | Somente leitura: Sim
Ferramentas de esquema
schema_list_collections
Liste todas as coleções de conteúdo definidas no CMS. Retorna slug, rótulo, recursos suportados e carimbos de data/hora.
Sem parâmetros.
Escopo: schema:read | Função mínima: Editor | Somente leitura: Sim
schema_get_collection
Obtenha informações detalhadas sobre uma coleção, incluindo todas as definições de campo. Os campos descrevem o modelo de dados: nome, tipo, restrições e regras de validação. Use isso para entender o que content_create e content_update esperam.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
slug | string | Sim | Slug de coleção (por exemplo, posts) |
Escopo: schema:read | Função mínima: Editor | Somente leitura: Sim
schema_create_collection
Crie uma nova coleção de conteúdo. Isso cria uma tabela de banco de dados e uma definição de esquema. O slug deve ser alfanumérico minúsculo com sublinhados, começando com uma letra.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
slug | string | Sim | Identificador único (/^[a-z][a-z0-9_]*$/) |
label | string | Sim | Nome de exibição (plural, por exemplo, “Postagens de blog”) |
labelSingular | string | Não | Nome de exibição único |
description | string | Não | Descrição desta coleção |
icon | string | Não | Nome do ícone para a UI do administrador |
supports | string[] | Não | Recursos: drafts, revisions, preview, scheduling, search (padrão: ['drafts', 'revisions']) |
Escopo: schema:write | Função mínima: Administrador
schema_delete_collection
Exclua uma coleção e sua tabela de banco de dados. Isso é irreversível e exclui todo o conteúdo da coleção.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
slug | string | Sim | Slug de coleção para excluir |
force | boolean | Não | Forçar exclusão mesmo que a coleção tenha conteúdo |
Escopo: schema:write | Função mínima: Administrador | Destrutivo: Sim
schema_create_field
Adicione um novo campo ao esquema de uma coleção. Isso adiciona uma coluna à tabela do banco de dados.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
slug | string | Sim | Identificador de campo (/^[a-z][a-z0-9_]*$/) |
label | string | Sim | Nome de exibição |
type | string | Sim | Tipo de dados (ver abaixo) |
required | boolean | Não | Se o campo é obrigatório |
unique | boolean | Não | Se os valores devem ser únicos |
defaultValue | any | Não | Valor padrão para novos itens |
validation | object | Não | Restrições: min, max, minLength, maxLength, pattern, options |
options | object | Não | Configuração do widget: collection (para referências), rows (para área de texto) |
searchable | boolean | Não | Incluir no índice de pesquisa de texto completo |
translatable | boolean | Não | Se este campo é traduzível (padrão verdadeiro) |
Tipos de campo: string, text, number, integer, boolean, datetime, select, multiSelect, portableText, image, file, reference, json, slug.
Para os tipos select e multiSelect, forneça valores permitidos em validation.options.
Escopo: schema:write | Função mínima: Administrador
schema_delete_field
Remova um campo de uma coleção. Isso descarta a coluna e exclui todos os dados desse campo. Irreversível.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
fieldSlug | string | Sim | Slug de campo a ser removido |
Escopo: schema:write | Função mínima: Administrador | Destrutivo: Sim
Ferramentas de mídia
media_list
Liste os arquivos de mídia carregados com filtragem e paginação de tipo MIME opcionais.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
mimeType | string | Não | Filtrar por prefixo de tipo MIME (por exemplo, image/, application/pdf) |
limit | integer | Não | Máximo de itens (1-100, padrão 50) |
cursor | string | Não | Cursor de paginação |
Escopo: media:read | Somente leitura: Sim
media_create
Registre um arquivo de mídia que já foi carregado para armazenamento. O chamador é responsável por colocar o arquivo em storageKey (normalmente usando um URL de upload assinado da UI administrativa ou uma API separada). Esta ferramenta persiste o registro de metadados para que o arquivo possa ser descoberto via media_list / media_get e possa ser referenciado por conteúdo.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
filename | string | Sim | Nome do arquivo original (por exemplo, logo.png) |
mimeType | string | Sim | Tipo MIME (por exemplo, image/png) |
storageKey | string | Sim | Caminho/chave de armazenamento para o qual o arquivo foi carregado |
size | integer | Não | Tamanho do arquivo em bytes |
width | integer | Não | Largura da imagem em pixels |
height | integer | Não | Altura da imagem em pixels |
contentHash | string | Não | Hash do conteúdo do arquivo (para desduplicação) |
blurhash | string | Não | Blurhash para espaços reservados de imagem |
dominantColor | string | Não | Seqüência de cores hexadecimais para a cor dominante da imagem |
Escopo: media:write | Função mínima: Autor
media_get
Obtenha detalhes de um único arquivo de mídia por ID. Retorna metadados incluindo nome do arquivo, tipo MIME, tamanho, dimensões, texto alternativo e URL.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | ID do item de mídia |
Escopo: media:read | Somente leitura: Sim
media_update
Atualize os metadados de um arquivo de mídia carregado. O arquivo em si não pode ser alterado.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | ID do item de mídia |
alt | string | Não | Texto alternativo para acessibilidade |
caption | string | Não | Texto da legenda |
width | integer | Não | Largura da imagem em pixels |
height | integer | Não | Altura da imagem em pixels |
Escopo: media:write
media_delete
Exclua permanentemente um arquivo de mídia. Remove o registro do banco de dados e o arquivo do armazenamento. O conteúdo que faz referência a esta mídia terá referências quebradas.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
id | string | Sim | ID do item de mídia |
Escopo: media:write | Destrutivo: Sim
Ferramenta de pesquisa
search
Pesquisa de texto completo em coleções de conteúdo. As coleções devem ter search em sua lista supports e os campos devem ser marcados como searchable.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
query | string | Sim | Texto da consulta de pesquisa |
collections | string[] | Não | Limitar a pesquisa a slugs de coleção específicos |
locale | string | Não | Filtrar resultados por localidade |
limit | integer | Não | Resultados máximos (1-50, padrão 20) |
Escopo: content:read | Somente leitura: Sim
Ferramentas de taxonomia
taxonomy_list
Liste todas as definições de taxonomia (por exemplo, categorias, tags). Retorna nome, rótulo, se hierárquico e coleções associadas.
Sem parâmetros.
Escopo: content:read | Somente leitura: Sim
taxonomy_list_terms
Liste os termos em uma taxonomia com paginação.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
taxonomy | string | Sim | Nome da taxonomia (por exemplo, categories, tags) |
limit | integer | Não | Máximo de itens (1-100, padrão 50) |
cursor | string | Não | Cursor de paginação |
Escopo: content:read | Somente leitura: Sim
taxonomy_create_term
Crie um novo termo em uma taxonomia. Para taxonomias hierárquicas, especifique parentId para criar um termo filho. A cadeia ancestral do pai não deve exceder 100 níveis.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
taxonomy | string | Sim | Nome da taxonomia |
slug | string | Sim | Identificador seguro de URL |
label | string | Sim | Nome de exibição |
parentId | string | Não | ID do termo pai (para taxonomias hierárquicas) |
description | string | Não | Descrição do termo |
Escopo: taxonomies:manage | Função mínima: Editor
taxonomy_update_term
Atualize um termo existente em uma taxonomia. Qualquer campo pode ser omitido para deixá-lo inalterado. A renomeação de um slug não deve colidir com outro termo da mesma taxonomia. Defina parentId como null para desconectar de um pai. O novo pai deve existir, pertencer à mesma taxonomia e não introduzir um ciclo.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
taxonomy | string | Sim | Nome da taxonomia |
termSlug | string | Sim | Slug atual do termo a ser atualizado |
slug | string | Não | Novo slug (deve ser único na taxonomia) |
label | string | Não | Novo nome de exibição |
parentId | string | null | Não | ID do novo termo pai; null para separar |
description | string | Não | Nova descrição |
Escopo: taxonomies:manage | Função mínima: Editor
taxonomy_delete_term
Exclua permanentemente um termo de uma taxonomia. Qualquer conteúdo marcado com o termo perde a associação. Não é possível excluir um termo que tenha filhos. Exclua os filhos primeiro.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
taxonomy | string | Sim | Nome da taxonomia |
termSlug | string | Sim | Slug do termo a ser excluído |
Escopo: taxonomies:manage | Função mínima: Editor | Destrutivo: Sim
Menu Ferramentas
menu_list
Liste todos os menus de navegação. Retorna nome, rótulo e carimbos de data/hora.
Sem parâmetros.
Escopo: content:read | Somente leitura: Sim
menu_get
Obtenha um menu por nome incluindo todos os itens em ordem. Os itens têm rótulo, URL, tipo e pai opcional para aninhamento.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do menu (por exemplo, main, footer) |
Escopo: content:read | Somente leitura: Sim
menu_create
Crie um novo menu de navegação. O name é o identificador estável usado pelos modelos de site; label é o nome legível mostrado no admin. Adicione itens posteriormente com menu_set_items.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Identificador estável (/^[a-z][a-z0-9_]*$/) |
label | string | Sim | Nome de exibição do administrador |
Escopo: menus:manage | Função mínima: Editor
menu_update
Atualize o rótulo de um menu. O name (identificador estável) não pode ser alterado.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do menu a ser atualizado |
label | string | Sim | Nova etiqueta de exibição |
Escopo: menus:manage | Função mínima: Editor
menu_delete
Exclua um menu e todos os seus itens. Não pode ser desfeito.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do menu a ser excluído |
Escopo: menus:manage | Função mínima: Editor | Destrutivo: Sim
menu_set_items
Substitua toda a lista de itens de um menu em uma chamada. Atômica: os itens existentes são excluídos e a nova lista é inserida na ordem fornecida. Use isso em vez de operações de adição/remoção por item para que a ordem resultante e os links pai sejam inequívocos.
Os itens são posicionados por índice de array. O aninhamento é expresso por meio de parentIndex - um item com parentIndex: 0 é aninhado sob o item no índice 0. O pai deve aparecer no início da lista. Itens sem parentIndex são de nível superior.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
name | string | Sim | Nome do menu a ser atualizado |
items | MenuItem[] | Sim | Lista ordenada de itens do menu (veja abaixo) |
Cada MenuItem tem:
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
label | string | Sim | Texto de exibição do item |
type | string | Sim | Um de custom, page, post, taxonomy, collection |
customUrl | string | Não | URL para itens type: "custom" (caso contrário, ignorados) |
referenceCollection | string | Não | Slug de coleção de destino para referências de conteúdo |
referenceId | string | Não | Conteúdo alvo/ID do termo para referências |
titleAttr | string | Não | Atributo HTML title |
target | string | Não | Atributo HTML target (por exemplo, _blank) |
cssClasses | string | Não | Classes CSS separadas por espaço |
parentIndex | integer | Não | Índice de matriz do item pai. Omitir para itens de nível superior. |
Escopo: menus:manage | Função mínima: Editor
Ferramentas de revisão
revision_list
Lista o histórico de revisões de um item de conteúdo, o mais recente primeiro. Requer que a coleção suporte revisions.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
collection | string | Sim | Lesma de coleta |
id | string | Sim | ID do item de conteúdo ou slug |
limit | integer | Não | Revisões máximas (1-50, padrão 20) |
Escopo: content:read | Somente leitura: Sim
revision_restore
Restaure um item de conteúdo para uma revisão anterior. Substitui o rascunho atual pelos dados da revisão especificada. Não publicado automaticamente - use content_publish posteriormente, se necessário.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
revisionId | string | Sim | ID de revisão para restaurar |
Escopo: content:write
Ferramentas de configurações
Configurações de todo o site – título, slogan, logotipo, favicon, URL canônico, tamanho de página padrão, formatação de data e hora, identificadores sociais e padrões de SEO.
settings_get
Obtenha todas as configurações de todo o site. As referências de mídia (logo, favicon, seo.defaultOgImage) incluem URLs resolvidos junto com o mediaId subjacente. Os valores não definidos são omitidos da resposta.
Sem parâmetros.
Escopo: settings:read | Função mínima: Editor | Somente leitura: Sim
settings_update
Atualize uma ou mais configurações em todo o site. Atualização parcial: apenas os campos fornecidos são alterados; os campos omitidos são deixados como estão. Retorna o objeto de configurações completo após a atualização.
Para definir uma referência de mídia (logo, favicon, seo.defaultOgImage), passe um objeto com mediaId (e opcional alt). O item de mídia já deve existir – use media_create primeiro.
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
title | string | Não | Título do site |
tagline | string | Não | Breve descrição mostrada ao lado do título |
logo | MediaRef | Não | Referência de mídia do logotipo ({ mediaId, alt? }) |
favicon | MediaRef | Não | Referência de mídia Favicon |
url | string | Não | URL canônico do site (http ou https). A string vazia limpa isso. |
postsPerPage | integer | Não | Tamanho de página padrão para listagens de conteúdo (1-100) |
dateFormat | string | Não | Sequência de token de formato de data |
timezone | string | Não | Identificador de fuso horário IANA |
social | object | Não | Identificadores sociais - twitter, github, facebook, instagram, linkedin, youtube |
seo | object | Não | Padrões de SEO (veja abaixo) |
O objeto seo aceita:
| Campo | Tipo | Descrição |
|---|---|---|
titleSeparator | string | Separador entre o título da página e o título do site (por exemplo, " | " para uma barra vertical) |
defaultOgImage | MediaRef | Imagem padrão do Open Graph quando o conteúdo não tem nenhuma |
robotsTxt | string | Corpo robots.txt personalizado. Omita o uso do padrão EmDash. |
googleVerification | string | Token de verificação do Google Search Console |
bingVerification | string | Token de verificação do Bing Webmaster Tools |
Escopo: settings:manage | Função mínima: Administrador
Descoberta OAuth
Os clientes MCP que suportam OAuth 2.1 podem descobrir automaticamente como autenticar. O servidor publica dois documentos de metadados:
Metadados de recursos protegidos
GET /.well-known/oauth-protected-resource
{
"resource": "https://example.com/_emdash/api/mcp",
"authorization_servers": ["https://example.com/_emdash"],
"scopes_supported": [
"content:read", "content:write",
"media:read", "media:write",
"schema:read", "schema:write",
"taxonomies:manage", "menus:manage",
"settings:read", "settings:manage",
"admin"
],
"bearer_methods_supported": ["header"]
}
Metadados do servidor de autorização
GET /.well-known/oauth-authorization-server/_emdash
{
"issuer": "https://example.com/_emdash",
"authorization_endpoint": "https://example.com/_emdash/oauth/authorize",
"token_endpoint": "https://example.com/_emdash/api/oauth/token",
"scopes_supported": ["content:read", "content:write", "..."],
"response_types_supported": ["code"],
"grant_types_supported": [
"authorization_code",
"refresh_token",
"urn:ietf:params:oauth:grant-type:device_code"
],
"code_challenge_methods_supported": ["S256"],
"token_endpoint_auth_methods_supported": ["none"],
"device_authorization_endpoint": "https://example.com/_emdash/api/oauth/device/code"
}
Quando uma solicitação não autenticada atinge o endpoint MCP, o servidor retorna:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Bearer resource_metadata="https://example.com/.well-known/oauth-protected-resource"
Isso aciona o fluxo padrão de descoberta do cliente MCP.
Tratamento de erros
Erros de ferramenta são retornados como conteúdo de texto com isError: true:
{
"content": [{ "type": "text", "text": "Collection 'nonexistent' not found" }],
"isError": true
}
Erros de escopo e permissão geram erros de protocolo MCP:
{
"jsonrpc": "2.0",
"error": {
"code": -32600,
"message": "Insufficient scope: requires content:write"
},
"id": 1
}
Erros no nível de transporte (configuração incorreta do servidor, exceções não tratadas) retornam o código de erro JSON-RPC -32603 (erro interno) sem vazar detalhes de implementação.