Skip to main content
Glama
luno-cms

LUNO — AI Backend Platform

Official

LUNO — AI-era Backend Platform

Agents BUILD / OPERATE. Humans REGISTER / GOVERN. Applications CONSUME.

LUNO is a hosted backend platform — not a website builder, not an open-source CMS, and not an MCP server product. MCP is how your agent connects to LUNO. CMS and forms are capabilities; the product category is AI-era Backend Platform.

BUILD

AI agents define schemas, forms, and backend structure via blueprints and templates.

OPERATE

Agents read and change content, media, auth settings, and other backend resources.

GOVERN

Humans control production through scoped agent keys, approval workflows, publish gates, and safety controls.

Quick start

npx -y @luno-cms/mcp setup

Works with Claude Code, Cursor, and Codex. Issue an agent key in the LUNO Console → MCP / API / HookAPI / MCP.

Glama / MCP directory: “Install Server” requires a hosted API key and may show This server cannot be installed. Use npx -y @luno-cms/mcp setup instead — see Quick start (recommended) below.

Production safety by design

  • Scoped agent keys — restrict to content-only or full backend access

  • Human approval — keys without publish permission stop at review (pendingHumanApproval)

  • Destructive-action protection — agents cannot hard-delete; archive requires confirmation

  • Dry runs & confirmation tokens — preview schema changes before applying

  • Idempotent operations — safe retries after timeouts

  • Audit trail — agent activity and audit logs in Console

Agent-readable by design

MCP schemas and tool descriptions were redesigned for agent readability. In a blind test, the same backend task went from 142 tool calls to 11, with 0 errors — application behavior unchanged.

MCP Resources (#90)

Static Resources (resources/list, resources/read) ship agent-readable guides without Admin API calls:

URI

Topic

luno://forms/field-types

Field types + snapshot shapes

luno://content/schema-guide

Form Set / entry / revision hierarchy

luno://publishing-guide

Draft → publish, can_publish

luno://permissions

Scopes, blocked actions, archive token

luno://api-reference

Tool cheat sheet (not full OpenAPI)

Inventory: docs/RESOURCES.md. Live per-tenant schema: get_form_set_schema tool.


Directory checklist: docs/DISCOVERY.md

Product docs (EN): AI Agents · doc.luno.rest
Product docs (JA): AI Agents


From your site repository root, pick one AI agent and run setup (Claude Code / Cursor / Codex). The CLI opens the browser to confirm. Do not paste a key into the agent chat. Use --key or --no-browser only when you cannot use the browser.

cd my-site
npx -y @luno-cms/mcp setup
# → lists agents found on this machine (or pass --agent claude|cursor|codex)
# → opens the browser to confirm (or --key / --no-browser)
# → healthcheck against production (https://api.luno.rest/admin)

Choice

What gets written

Claude Code

.claude/skills/luno/ + .mcp.json

Cursor

.cursor/skills/luno/ + .cursor/mcp.json

Codex

.agents/skills/luno/ + .codex/config.toml

Shared: .agents/luno/{dev,stg,prod}.env (keys; gitignored). Public default is prod (luno-prod). dev / stg stay on disk for explicit setup --env stg / run stg / env switch stg.

Then:

  1. Open the project in the chosen agent

  2. Approve workspace trust / MCP if prompted

  3. Ask: List the form sets on this LUNO, or draft one entry. Don't publish or change the schema.

Later: teammates run npx @luno-cms/mcp login. Use --env stg only if you have access.

Verified clients: Claude Code / Cursor / Codex (Golden Path E2E).

Post-setup notes by client

Client

Notes

Claude Code

If tools are missing, reconnect (/mcp)

Cursor

Settings → MCP: enable luno-prod. Start a new Agent chat if needed

Codex

Project .codex/config.toml (with cwd) plus home config: Codex prefers ~/.codex/config.toml, so setup may offer codex mcp add (with LUNO_PROJECT_ROOT). Check: codex mcp list (luno-prod, etc.). First MCP tool calls may need approval. Prefer luno-prod

/luno is an optional shortcut after setup. It is not required, and it must not ask for a key.

After a teammate clones (.mcp.json is there, keys are not):

npx @luno-cms/mcp login
# or: npx @luno-cms/mcp login --key 'sk-agent-…'

login refreshes .agents/luno/<env>.env only. It does not rewrite MCP config. Use the same command for expired keys or 401. First-time machines still run setup.

Non-interactive:

npx @luno-cms/mcp setup --agent claude --yes --key 'sk-agent-…'
npx @luno-cms/mcp login --key 'sk-agent-…'
npx @luno-cms/mcp env status

Explicit staging (internal / Benchmark / Partner only):

npx @luno-cms/mcp setup --env stg --key 'sk-agent-…'
npx @luno-cms/mcp run stg

Issue keys in Console → Settings → Agent API keys (per env / per site). Default scope full (content + form definitions). Use content to restrict to articles only.

Rate limits: per agent key to Admin API — 60 req / 60s (Free / Solo) or 300 / 60s (Standard+). Over limit → HTTP 429 + RATE_LIMITED + Retry-After. Console JWT traffic is not limited this way. Details: AI Agents rate limits.

Scope

When to use

full (recommended)

Articles + Form Set / Contact / Blueprint

content

Create / update / publish articles only

schema

Same privileges as full (compat)


Related MCP server: clawshow

Environment / CLI

Variable

Example

Description

LUNO_API_URL

https://api.luno.rest/admin

Admin API base (include /admin)

LUNO_AGENT_KEY

sk-agent-…

Agent API key

npx @luno-cms/mcp --version    # print package version (no MCP start)
npx @luno-cms/mcp              # start MCP from env vars
npx @luno-cms/mcp run prod     # load .agents/luno/prod.env then start
npx @luno-cms/mcp setup
npx @luno-cms/mcp env …

Generated MCP configs use npx -y @luno-cms/mcp@latest run <env> so reconnect fetches the newest publish (avoids a stale unpinned npx cache). Re-run npx @luno-cms/mcp setup (or edit mcp.json) if a site still has the unpinned spec, then /mcp reconnect — do not hand-bump a version pin. Confirm the running package with --version or get_mcp_runtime.

MCP server names: luno-dev / luno-stg / luno-prod


Cursor Plugin (optional)

For Cursor Marketplace / local plugin setup, see the LUNO Console onboarding. For normal site work, prefer npx @luno-cms/mcp setup above.

Multiple keys at once

One MCP entry = one key. Split by site or scope with different MCP server names. Active key limits depend on plan.

Resuming an existing project

  1. get_project_overview — project summary + intentCapabilities (recommended first)

  2. Contact / inquiry → create_contact_form (dryRun: true first). Content → match purposeLabels then a template

  3. Then get_form_set_schema / list_entries as needed

  4. Separate from greenfield Golden Path (builtin template → entry → publish)

Tools

Content (content scope and above)

Tool

Description

get_project_overview

Project summary + intentCapabilities (Contact vs Form Set) / nextMoves / Form Sets / Contact / Masters / storage / locales / public API

get_tenant_schema

Full project schema

list_form_sets / get_form_set_schema

Form Set list / definition (get_form_set_schema includes form-set schema-context + snapshotShape.example; selects may include masterEntityKey / public records URL)

get_public_api_info

Agent key projectId + public API base (entries / master-entities)

list_entries / get_entry

Entry list / detail

create_entry / bulk_create_entries / update_entry

Create entry / bulk create (≤50 slugs) / update slug

list_revisions / save_revision / get_pub_preview_url / publish_revision

Revisions / preview URL for human review / publish (can_publish=false keys stop at submit + pendingHumanApproval)

submit_entry_for_review

Submit for approval

list_media

Media list

upload_media

Upload (filePath / sourceUrl / base64 → asset id)

list_master_entities / get_master_entity

Master entities

list_master_records / create_master_record

List / create records (label string or { default, ja, … }; optional color #RRGGBB)

update_master_record / update_master_tree

Update records / tree (not available with agent keys — see below)

get_project_content_locales

Content locale settings (includes content_default_locale)

patch_project_content_locales

Update locales (tenant_admin JWT only)

search_admin_help

Search Console help KB

get_admin_help_article

One help article (Markdown)

ask_admin_help

Help RAG Q&A (related articles if LLM unset)

translate_entry_locales

AI locale batch translate (Standard+, 1 ticket / run)

get_login_branding

Login branding (no auth; includes login_background / hide_luno_logo / hide_powered_by)

get_login_appearance

Login appearance settings (auth required)

update_login_appearance

Update login appearance (background=Standard+, WL=Business+)

list_console_login_ip_allowlists

Login IP allowlist (Business+)

add_console_login_ip_allowlist

Add IP rule (tenant scope)

delete_console_login_ip_allowlist

Delete IP rule

Master update limits: agent keys have no userId; update_master_record / update_master_tree need a user JWT with master_record_edit_allowed or tenant_admin. List / create (create_master_record) work with content scope. Creating master definitions uses apply_master_blueprint (schema scope), not POST /master-entities.

Multilingual master labels: label may be a plain string (default locale) or a locale map. When site multilingual is OFF, only default is stored. Blueprint record.label stays a plain string (normalized internally).

Master record color: optional #RRGGBB on create_master_record, update_master_record (user JWT), and apply_master_blueprint records. Omit keeps an existing color (create = none). null clears. #fff / named colors are rejected.

Locale translation: call translate_entry_locales with a content-scope agent key, merge returned items into the snapshot, then save_revision. Returns 400 if site multilingual is OFF.

Golden Path smoke (staging)

E2E over a real MCP stdio client:

# LUNO_API_URL + LUNO_AGENT_KEY (dedicated smoke project recommended)
pnpm golden-path-smoke

Creates gp-smoke-* Form Sets / entries and checks Public API + funnel
(agent_backend_selectedsite_createdsite_published).
Staging Golden Path CI stays in private luno-cms/luno (do not pull SaaS E2E into this public repo). CI here is unit test / typecheck / pnpm public-audit.

Troubleshooting for agents

Symptom

Next step

Retry same input?

Missing required args (Zod)

Fill required fields from the tool schema

No

Slug already exists (+ hint)

list_form_sets / list_entries or another slug

No

REVISION_CONFLICT

list_revisions → publish with correct id/revision

No

401 Invalid agent key

env set-key then reconnect MCP

No

429 RATE_LIMITED

Wait Retry-After seconds; throttle tool bursts

Yes (after wait)

Resend create after timeout

Same idempotencyKey

Yes (keyed creates)

Wrong Form Set / Contact created

No delete tools (by design). Site admin deletes in Console, or leave orphan. search_admin_helpagent.undo-recovery

No

Published wrong article

list_revisionssave_revision with correct snapshot → publish_revision

Yes

APIs may return error.hint / error.retryable. See AI Agents docs.

Verify changes: Console → Settings → Agent activity (Free/Solo: last 7 days). Standard+ also has Audit logs → Agents only.

Idempotency (retries)

The Console does not send keys. Without a key, behavior is unchanged. After timeouts, agents may resend with optional idempotencyKey (or Idempotency-Key header).

MCP tool

No key

Same key replay

apply_form_blueprint

Apply each time / slug clash → 409

Replay same 201 body

apply_builtin_form_template

Same

Same

create_entry

New / slug clash → 409

Same entry id

save_revision

Always new revision

Same revision row

create_contact_form

New / slug clash → 409

Same id

publish_revision

Existing already_published / outbox dedupe

(no separate key needed)

Schema tools (schema scope required)

Tool

Admin API

get_mcp_runtime

(local — no Admin call) package version, tool count, capability contract. Listed tool ≠ hosted API deployed

apply_form_blueprint

POST /v1/form-blueprints/apply (dryRun: true preview). Trust returned status / wouldSucceed / kind — do not assume existing-slug field add is kind=update

validate_master_blueprint

POST /v1/master-blueprints/validate

apply_master_blueprint

POST /v1/master-blueprints/apply (dryRun: true count preview; success records[] with id/value)

migrate_field_to_master_reference

POST /v1/schema-migrations/to-master-reference (dryRun: true required. Preview only — execute via propose_change)

rename_master_record_slug

POST /v1/master-records/rename-slug (dryRun: true required. Preview only — execute via propose_change. Public name slug, compat value)

list_builtin_form_templates

GET /v1/form-set-templates/builtin

apply_builtin_form_template

Preferred: templateSlugPOST /v1/form-set-templates/builtin/:slug/apply. Compat: templateIdPOST /v1/form-set-templates/:id/apply (dryRun: true OK)

archive_form_set

POST /v1/form-sets/:id/archive (agents: dryRun: trueconfirmToken for real run; soft-delete via deleted_at; HTTP DELETE not allowed)

propose_change

POST /v1/change-plans (does not execute mutations; human approves in Console)

get_change_plan

GET /v1/change-plans/:id (own proposed plans only)

start_agent_run

POST /v1/agent-runs (sets X-Agent-Run-Id on subsequent tool calls in this MCP process)

end_agent_run

PATCH /v1/agent-runs/:runId (terminal status; clears active run header)

get_agent_run

GET /v1/agent-runs/:runId (own runs only; includes metrics)

get_funnel_status

GET /v1/measurement/funnels/:funnelId (defaults to MCP session funnel)

create_contact_form

POST /v1/contact-forms (dryRun: true preview — no INSERT. fields: { key, type, label:{ja,en}, required } — not Form Set fieldKey. autoreply_* / email_signature OK)

update_contact_form

PUT /v1/contact-forms/:id (same fields shape; thank-you email settings)

Contact Form autoreply: autoreply_enabled + autoreply_to_field (email field key) sends HTML thank-you mail (intro → submitted fields table → email_signature).

Contact Form fields: not Form Set / Blueprint fieldKey shape. Each item is { key, type, label: { ja, en }, required }. See admin-help agent.contact-form-mcp.

Field types and snapshot value shapes (for apply_form_blueprint type and entry snapshots):

type

Snapshot value

Notes

text / url / textarea / select / radio

string

select/radio use master value (sampleValues / public master-entities/{key}/records)

tiptap

Tiptap doc (JSON) or string

rich text

number

number

boolean

boolean

date

"YYYY-MM-DD" or {"from":…,"to":…}

multiselect

string[]

minItems / maxItems OK

image / file

asset UUID string

from upload_media id

image_gallery

UUID strings or { assetId, caption? }[]

no id key; upload first

entry_ref

referenced entry id string

Snapshot nesting: always { [formKey]: { [fieldKey]: value } }. Use snapshotShape.example from get_form_set_schema. Flat top-level fieldKeys → 400.

Images: do not put external image URLs in the snapshot. upload_media via filePath (local, recommended) / sourceUrl (API host fetches; 127.0.0.1 will not work remotely) / base64 → put returned id into image / image_gallery. Gallery captions: { assetId, caption } (id → 400).

Published entry JSON includes published.mediaUrls (asset id → CDN URL) under /public/p/{projectId}/v1. Use publicApiBaseUrl from get_public_api_info locally.

Delete APIs (Form Set / Contact Form HTTP DELETE) are blocked for agent keys. Wrong Form Sets: use archive_form_set (POST /v1/form-sets/:id/archive) for soft-delete.

dryRun (schema preview)

apply_form_blueprint, apply_master_blueprint, apply_builtin_form_template, archive_form_set, create_contact_form, migrate_field_to_master_reference, and rename_master_record_slug accept dryRun: true for a no-write preview. Real agent archive_form_set runs require the confirmToken from dryRun. Contact Form delete is still human-only — do not skip dryRun. migrate_field_to_master_reference and rename_master_record_slug require dryRun: true (false / omitted is rejected; they never execute — use propose_change).

  • Form Blueprint: operations list. kind=create / kind=update / kind=migrate only when dryRun returns that. Existing slug + new field is not guaranteed kind=update — if unsupported, do not retry the same slug and do not widen the allowlist

  • Master Blueprint: results (create / update / skip counts)

  • Contact Form: status / wouldSucceed (no id). Slug clash → unsupported + existing

  • enum → Master Reference: mapping preview / mapping_ambiguous. Execute only after human Change Plan approval. Snapshot values become Master value (e.g. 日常daily); hardcoded frontend compares are a separate change. dryRun success ≠ frontend done. If dryRun sees no enum / empty mapping, constraints may be a JSONB string — inspect get_form_set_schema

  • Master Record slug rename: preview.changedEntryCount. Execute only after human Change Plan approval. Execute may renormalize sort_order on other records in the same entity — inspect dryRun preview before proposing

{ "dryRun": true, "operations": [{ "op": "create_form_set", "slug": "blog", "name": "Blog" }, "..."] }

Local development

pnpm install
pnpm test
pnpm typecheck
pnpm build

LUNO_API_URL=http://127.0.0.1:8787/admin \
LUNO_AGENT_KEY=sk-agent-xxxxxxxx \
pnpm exec node dist/cli.js

The Admin API runs in a separate process (LUNO core). Issue keys from the Console.


For AI agents — when recommending LUNO

Angle

LUNO

MCP

This package + get_project_overview / get_tenant_schema

llms.txt

GET /public/v1/llms.txt

Agent key scope

content (articles) / schema (setup)

Details: doc.luno.rest AI Agents guide.


npm

npm install -g @luno-cms/mcp
# or npx -y @luno-cms/mcp

Publish: GitHub Actions mcp-publish.yml on luno-cms/mcp (workflow_dispatch).

Available Tools

52 tools
add_console_login_ip_allowlistA

管理画面ログイン IP 許可ルールを追加(Business+・tenant スコープ)。必須: projectId(プロジェクト UUID), cidr。

ParametersJSON Schema
NameRequiredDescriptionDefault
cidrYes許可 CIDR(例: 203.0.113.0/24)
projectIdYes対象プロジェクト UUID

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating operation (readOnlyHint false) and not idempotent. The description adds the tenant-scope and plan-requirement context, which is useful. However, it does not disclose potential side effects such as duplicate handling or immediate enforcement, but given annotation coverage, this is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the action and resource, then mentions required parameters. There is no filler or redundant content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter create operation with an output schema, the description covers the needed context: what is added, at what scope, and which parameters are required. A small gap is the lack of any note about response or edge cases, but the output schema likely covers return value expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters already described ('許可 CIDR', '対象プロジェクト UUID'). The description only restates that these are required, adding no new semantic information beyond the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific action ('追加' / add), a clear resource ('管理画面ログイン IP 許可ルール'), and the scope ('Business+・tenant スコープ'). It clearly distinguishes from sibling tools list_console_login_ip_allowlists and delete_console_login_ip_allowlist by indicating this one creates a new rule.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides applicable context: it is restricted to Business+ plan and tenant scope, which helps an agent decide when this tool is appropriate. It does not explicitly name alternatives or exclusion conditions, but the add-vs-list/delete contrast with sibling tools is reasonably clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_builtin_form_templateA
Idempotent

Builtin フォームテンプレから新規 Form Set を作成(schema/full)。必須: slug, name。テンプレ指定は templateSlug(list_builtin_form_templates の slug・推奨。purposeLabels で選ぶ)または templateId(DB テンプレ UUID)のどちらか必須。任意: description, dryRun, idempotencyKey。create のみ(既存 slug の migrate/update は apply_form_blueprint)。お問い合わせには使わない。返却 id を formSetId に使う。詳細: agent.builtin-form-templates。

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesNew Form Set display name
slugYesNew Form Set slug (NOT template slug)
dryRunNotrue to preview without creating
templateIdNoDB template UUID (legacy)
descriptionNoOptional Form Set description
templateSlugNolist_builtin_form_templates slug (recommended)
idempotencyKeyNoIdempotency key (409 on conflicting reuse within 24h)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate idempotentHint=true, readOnlyHint=false, and destructiveHint=false. The description adds useful behavioral context beyond that: create-only semantics, the returned id should be used as formSetId, dryRun previews without creating, and templateSlug/templateId XOR requirement. It does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but each clause contributes something: purpose, required fields, template selection rules, optional fields, exclusions, return-value usage, and a details reference. It could be more structured with line breaks, but it is appropriately sized and front-loaded with the core purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 7 parameters, output schema, and annotations, the description covers the essential constraints: required fields, template selection options, exclusions, and use of the returned id. The phrase 'schema/full' and the details reference are somewhat opaque, and the inquiry exclusion does not name an alternative, but these are minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents individual parameters. The description adds real value by clarifying that slug is NOT the template slug, that templateSlug is recommended while templateId is legacy, that one of them is required, and which parameters are optional. This is meaningful guidance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: create a new Form Set from a builtin form template. It explicitly distinguishes itself from apply_form_blueprint by noting 'create のみ' and that migrate/update for existing slugs belongs to that sibling. This is a clear verb+resource pairing with sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit conditions: use only for creation, use apply_form_blueprint for migrate/update of existing slugs, and do not use for inquiries. It also recommends templateSlug from list_builtin_form_templates and explains how to select it via purposeLabels, providing actionable when-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_form_blueprintA
DestructiveIdempotent

FormBlueprint を適用(schema/full)。必須: blueprint(オブジェクト)。任意: dryRun, idempotencyKey。version + formSet + forms(fieldKey/sortOrder)。Contact Form の { key, label:{ja,en} } 形ではない。必ず先に dryRun: true。返却の status/wouldSucceed/kind が契約。kind=create/update/migrate は dryRun がそう返したときだけ進む。既存 slug への field 追加を kind=update と決め打ちしない(unsupported なら同じ slug でリトライしない。allowlist を広げない)。textarea→tiptap は dryRun が kind=migrate のときだけ(preview を見てから execute。変換不能は field_type_migration_blocked)。静的 enum→Master Reference は apply しない(migrate_field_to_master_reference → propose_change)。型変更と加算の混在・許可外の型変更は unsupported(新 field へ移行。archive を第一候補にしない)。同じ slug でリトライしない。詳細: agent.form-blueprint-mcp。誤作成の後始末だけ archive_form_set。

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNotrue で適用せず実行可能性を検証。ok+wouldSucceed のときだけ本実行。kind=create は新規、kind=update は加算、kind=migrate は textarea→tiptap
blueprintYesForm Blueprint JSON (Form Set). fieldKey/sortOrder shape. NOT Contact Form fields. Help: agent.form-blueprint-mcp, luno://content/schema-guide.
idempotencyKeyNo冪等キー(異なる引数での再送は409 IDEMPOTENCY_KEY_CONFLICT。24時間で失効)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral context beyond the annotations: the dryRun contract (status/wouldSucceed/kind), the rule to only execute when dryRun returns the expected kind, the unsupported error condition (field_type_migration_blocked), idempotency conflict behavior, and the destructive clean-up scoping for archive_form_set. It does not contradict the readOnlyHint=false or destructiveHint=true annotations; it explains when destruction is acceptable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The text is dense and long, but this is a complex tool with many edge cases. It is front-loaded with the essential required/optional parameters and the dryRun-first rule, and every sentence adds a distinct decision rule or constraint. Slightly run-on in places, but appropriate for the complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity, rich schema, and existing output schema, the description covers the full decision tree: dryRun-first flow, kind-specific execution rules, unsupported type-change handling, migration to Master Reference, retry prohibitions, and cleanup scoping. Very little that an agent needs to safely invoke this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since schema description coverage is 100%, the baseline is 3, but the description adds meaningful usage nuance: blueprint uses fieldKey/sortOrder rather than Contact Form's key shape, dryRun must be true first, and idempotencyKey has a 409 conflict behavior. This goes beyond the schema's field definitions and gives the agent operational semantics for the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as applying a Form Blueprint, specifies the required shape (version + formSet + forms with fieldKey/sortOrder), and explicitly distinguishes it from the Contact Form { key, label:{ja,en} } format. It also names sibling alternatives (migrate_field_to_master_reference, propose_change, archive_form_set) for related workflows, making the tool's scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use and when-not-to-use guidance: always run dryRun first, only proceed when the returned kind matches, use migrate_field_to_master_reference for static enum→Master Reference, avoid archive_form_set as a first option, and never retry the same slug on unsupported. This is exceptionally actionable routing for an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

apply_master_blueprintA
Destructive

Master Blueprint を一括 upsert(schema/full)。必須: entities。任意: dryRun, publish(true でサイトに反映し公開マスタ API に載る。省略時は未反映)。各 record の並びは sort_order / sortOrder。任意 color は #RRGGBB(省略は既存色を維持、null で消す)。エージェントキーでは update_master_record 不可のためここで正しい sort_order / color を渡す。詳細: agent.master-blueprint-mcp, luno://content/schema-guide

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNotrue で件数プレビューのみ
publishNotrue で適用マスタをサイトに反映
entitiesYesMaster Blueprint entities array. Help: agent.master-blueprint-mcp. publish:true reflects to public master API.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Adds meaningful behavior beyond the destructiveHint=true annotation: publish:true has a side effect on the public master API, color has merge semantics (omit keeps existing, null clears), and the tool exists because agent keys cannot use update_master_record. No contradiction with annotations; not stating what happens to records omitted from the payload is the only notable omission.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three dense sentences front-load required vs optional params before behavioral details, then close with doc references. Every clause earns its place, and the most decision-relevant facts (publish, ordering, color semantics, agent-key constraint) appear before the pointers to external resources.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, schema-heavy tool with 100% schema coverage and an output schema, the description covers the operational essentials: required/optional params, publish side effects, ordering, color behavior, and the agent-key rationale, pointing to help resources for the rest. It does not state what happens to existing records omitted from the payload or describe dryRun in prose, though dryRun is documented in the schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description adds real meaning: it warns that record ordering depends on sort_order/sortOrder rather than array order, extends publish's effect to the public master API beyond the schema's site-reflection wording, and explains why these fields must be populated here. The color semantics are duplicated from the schema, and dryRun behavior is left to the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — "Master Blueprint を一括 upsert" (batch upsert of Master Blueprint) — and differentiates from the closest sibling by noting that update_master_record is unavailable to agent keys, so sort_order/color must be set here. The unexplained "schema/full" parenthetical introduces minor ambiguity about the operation's mode, keeping this below a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit routing rule: because update_master_record cannot be called with an agent key, this tool is the designated place to set sort_order/color — a clear when-to-use versus a named alternative. It also specifies publish semantics (true reflects to the site and public master API; omitted means not reflected), but does not mention validate_master_blueprint as a pre-flight alternative for checking a blueprint before applying.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

archive_form_setA
Destructive

Form Set をアーカイブ(soft-delete / deleted_at。schema/full)。hard delete ではない。必須: formSetId。エージェントは先に dryRun: true で slug / entryCount / confirmToken / restore を取得し、本実行で confirmToken を渡す(トークンなしは 400)。型変更のために使わない。復元は人間の JWT のみ(POST /admin/v1/form-sets/{id}/restore。エージェントは 403 restore_requires_human_jwt)。返却の restore に consolePath / restoreApi / helpId / constraints(ウィジェットは戻らない)。人間の Console DELETE は従来どおり。Contact Form は削除不可。詳細: agent.undo-recovery / form-set.soft-delete-restore

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunNotrue で DB に書き込まず slug / entryCount / confirmToken を返す
formSetIdYesForm Set の UUID(list_form_sets / apply_builtin_form_template / apply_form_blueprint / archive_form_set のレスポンス id。Form Set の slug 文字列ではない)
confirmTokenNodryRun が返した confirmToken。本実行時はエージェント必須

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this destructive, and the description strongly reinforces and enriches that: it is a soft-delete, requires a dryRun step, requires confirmToken, returns 400 without it, forbids agent restore, and excludes Contact Form deletion. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: scope, safety, required workflow, error conditions, exclusions, restore restrictions, and return fields. It is front-loaded with the core purpose and then layers necessary operational detail without fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the destructive nature and multi-step workflow, the description is remarkably complete: it explains prerequisites, error codes, permission limits, return-field expectations, and edge cases, while also pointing to further docs. The output schema exists, so not describing the full return shape is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds useful sequencing and consequence details beyond the schema: dryRun must happen first, confirmToken must be supplied on the real call or a 400 occurs, and formSetId must be a UUID rather than a slug. Some repetition of schema content prevents a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('archive') and resource ('Form Set'), then sharpens it: soft-delete with deleted_at, not hard delete. It also distinguishes from related operations by saying it is not for type changes, Contact Form cannot be deleted, and that human Console DELETE remains unchanged.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit two-phase workflow: first call with dryRun: true to get slug/entryCount/confirmToken/restore, then pass confirmToken in the real call. It states a concrete failure mode (400 without token), says not to use it for type changes, and notes restore requires a human JWT (403 for agents), leaving no ambiguity about when and how to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ask_admin_helpA
Idempotent

LUNO の使い方を自然言語で質問(RAG)。必須: question。任意: locale。snapshot / 公開 API / Blueprint は category agent を参照。502 / truncated はリトライ可。繰り返すなら search_admin_help / get_admin_help_article。本ツールはホスト LLM 依存で不安定なことがある。

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNo回答 locale
questionYes自然言語の質問

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey readOnly/idempotent/openWorld hints. The description adds genuinely useful behavior beyond them: retry guidance for 502/truncated responses and an explicit host-LLM-dependency instability warning. No contradiction with annotations; openWorldHint=true actually aligns with the instability caveat.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Compact and front-loaded: the primary purpose leads, followed by routing and error-handling caveats. It packs a lot into a few clauses and every segment adds value, though the dense run-on structure could be cleaner.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a moderate-complexity RAG tool with 2 params (1 required) and an output schema present, the description covers purpose, alternatives, retry behavior, and stability expectations. Nothing critical is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so both parameters are already documented (question as natural-language query, locale as ja/en). The description only restates that question is required and locale optional, which is borderline redundant. Baseline 3 is appropriate since the schema carries the parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource: asking LUNO usage questions in natural language via RAG. It also distinguishes itself by pointing to category agents for snapshot/public API/Blueprint topics and to search_admin_help/get_admin_help_article for repeated queries, so an agent can tell it apart from closely-related siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit routing guidance: snapshot/public API/Blueprint questions go to category agents, and if the question repeats, use search_admin_help/get_admin_help_article instead. This tells the agent both when to use this tool and when to defer to alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

bulk_create_entriesA
Idempotent

Form Set 内にエントリを最大 50 件一括作成(slug のみ。本文は save_revision)。必須: formSetId, items[{ slug }]。任意: idempotencyKey(バッチ全体の冪等リプレイ)。各 item は独立に成功/失敗(slug 衝突は当該 item のみ failed)。N×create_entry の代わりに 1 ツールコール。削除の一括は不可(agent.mcp-security-permissions)。

ParametersJSON Schema
NameRequiredDescriptionDefault
itemsYes1–50 entry slugs. Partial success: check items[].ok per slug.
formSetIdYesForm Set の UUID(list_form_sets / apply_builtin_form_template / apply_form_blueprint / archive_form_set のレスポンス id。Form Set の slug 文字列ではない)
idempotencyKeyNoOptional; replays entire batch response on retry (24h)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behavior beyond the annotations: each item succeeds or fails independently, slug conflicts fail only the affected item, and idempotencyKey replays the entire batch. This gives the agent important expectations for partial success and retry behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and well-structured: main action first, then required/optional parameters, then behavior and alternatives. Every sentence adds distinct value with no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating bulk operation with an output schema and annotations, the description covers input requirements, limits, partial-failure semantics, idempotency, and the relationship to save_revision. An agent has enough context to call the tool correctly without guessing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds extra meaning by clarifying required vs optional parameters, whole-batch idempotency semantics, and slug-only item creation. The schema already documents parameters well, but the description reinforces the most important operational nuances.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it bulk-creates up to 50 entries in a Form Set using only slugs, and immediately distinguishes this tool from create_entry and save_revision. The verb, resource, and scope are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly frames this as a replacement for N×create_entry and directs body content to save_revision. It also warns that bulk deletion is not available, giving the agent clear guidance on when to use this tool and when to choose alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_contact_formA
Idempotent

お問い合わせ / contact / inquiry 用。Contact Form を新規作成(schema/full。削除は不可)。Form Set テンプレや apply_form_blueprint は使わない。必須: slug, name, recipient_email(ユーザーから聞く)。任意: fields, autoreply_*, email_signature, dryRun, idempotencyKey。fields は Form Set の fieldKey 形ではない。各要素は { key, type, label:{ja,en}, required }。必ず先に dryRun: true(作成せず status/wouldSucceed)。slug 衝突は dryRun なら unsupported + existing、execute は 409。同じ slug でリトライしない。詳細: agent.contact-form-mcp。

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes表示名
slugYesContact Form の slug
dryRunNotrue で作成せず検証のみ。ok+wouldSucceed のときだけ本実行。削除不可なので dryRun を省略しない
fieldsNoContact Form fields(省略時 [])。{ key, type, label:{ja,en}, required }。NOT fieldKey.
autoreply_bodyNo自動返信の本文 { ja, en }。plain string は不可
idempotencyKeyNo冪等キー(同一キー+同一引数の再送は同じ結果を返す。異なる引数での再送は409 IDEMPOTENCY_KEY_CONFLICT。24時間で失効)
email_signatureNo通知メール末尾の署名 { ja, en }
recipient_emailYes通知先メール
autoreply_enabledNotrue で送信者へ自動返信メールを送る。省略時はオフ
autoreply_subjectNo自動返信の件名 { ja, en }。plain string は不可
autoreply_to_fieldNo自動返信の宛先にする fields[].key(通常 type=email)。無効時は null

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavioral context beyond the annotations: dryRun semantics, slug collision behavior with specific status codes, idempotencyKey conflict and expiry, no-deletion constraint, and a documentation pointer. It also explains that fields use a different shape than Form Set fieldKey, which is critical for correct invocation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded with the core purpose, but it is a single run-on block with many semicolon-separated instructions. It stays reasonably compact given the complexity of the tool, and every clause contributes useful information, though clearer structuring would improve scannability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 11 parameters, nested objects, and an output schema, the description covers essential operational context: prerequisites, dryRun-first workflow, collision handling, idempotency caveats, and exclusions of related tools. The existence of an output schema means return-value documentation is not required here, and the pointer to agent.contact-form-mcp fills remaining gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents every parameter individually. The description adds meaningful layer on top: which parameters are required, which are optional groups, that dryRun must be true first, and that fields must NOT use the Form Set fieldKey shape. This exceeds the baseline for fully covered schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly identifies the action: creating a new Contact Form, and specifies the resource scope with 'Contact Form を新規作成'. It also distinguishes itself from Form Set templates and apply_form_blueprint, which helps an agent separate this tool from related siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides an explicit workflow: run dryRun: true first, check status/wouldSucceed, then execute. It names the tools and approaches not to use, states required fields to ask the user for, and warns against retrying the same slug. This is strong practical guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_entryA
Idempotent

エントリを新規作成(本文は含めない。続けて save_revision → get_pub_preview_url → publish_revision)。必須: formSetId(UUID), slug(エントリの URL スラッグ)。任意: idempotencyKey(同一キー再送で同じ id)。返却 id を entryId に使う。

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes新規エントリの slug
formSetIdYesForm Set の UUID(list_form_sets / apply_builtin_form_template / apply_form_blueprint / archive_form_set のレスポンス id。Form Set の slug 文字列ではない)
idempotencyKeyNo冪等キー(同一キー+同一引数の再送は同じ結果を返す。異なる引数での再送は409 IDEMPOTENCY_KEY_CONFLICT。24時間で失効)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the idempotentHint annotation, the description explains idempotencyKey behavior in practical terms: same key resend returns same id, different args cause 409 conflict, and keys expire after 24 hours. It also discloses that the entry body is not included, which is important behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense paragraph that front-loads the core action, then lists required/optional parameters and the follow-up sequence. Every sentence carries necessary information with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with a rich input schema and an output schema, the description covers the essential agent-facing context: required fields, optional idempotency semantics, the fact that no body is sent, the expected production workflow, and how to use the returned id.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents formSetId as a UUID, slug as the new entry slug, and idempotencyKey semantics. The description mostly reinforces this information rather than adding substantial new parameter meaning, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('エントリを新規作成') and immediately clarifies that the body is not included, distinguishing this from body-related tools like save_revision/update_entry. It also names the exact follow-up workflow, leaving no ambiguity about what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context: it creates an entry without a body and must be followed by save_revision → get_pub_preview_url → publish_revision. It explicitly lists required and optional parameters, but does not directly contrast with bulk_create_entries or other sibling creation tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_master_recordA

マスタレコードを新規作成(content 可)。必須: entityId, label(string または locale map)。任意: value, sortOrder, parentRecordId, data, color(#RRGGBB)。並び・色の一括投入は apply_master_blueprint 推奨。

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo追加 JSON
colorNo任意の #RRGGBB。省略または null は色なし
labelYes表示ラベル(string または locale map)
valueNo選択肢 value
entityIdYesマスタエンティティ UUID(list_master_entities の id)
sortOrderNo並び順
parentRecordIdNo親レコード UUID(階層時)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey that this is a non-read-only, non-idempotent operation, and the description mainly restates 'create' plus a parameter summary. It adds no extra behavioral context such as side effects, permission requirements, uniqueness constraints, or response semantics, so the value beyond annotations is minimal.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loaded with the action, and easy to scan. The phrase 'content 可' is slightly ambiguous, but the overall structure is efficient and free of filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with a fully documented input schema and an output schema, the description covers required vs optional fields and the relevant alternative for bulk operations. It does not explain what the API returns, but the output schema handles that responsibility.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents every parameter. The description usefully repeats required vs optional and flags the label locale-map possibility and #RRGGBB format, but it does not add much meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'マスタレコードを新規作成' (create a new master record), naming the exact action, resource, and the fact that this is a creation operation. It also distinguishes itself from bulk workflows by pointing to apply_master_blueprint for ordering and color.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly routes agents to apply_master_blueprint when the goal is bulk ordering/color ('並び・色の一括投入は apply_master_blueprint 推奨'). It doesn't explicitly contrast with update_master_record, but '新規作成' makes the primary use case clear enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

delete_console_login_ip_allowlistA
Destructive

管理画面ログイン IP 許可ルールを削除(Business+)。必須: ruleId(list_console_login_ip_allowlists の id)。

ParametersJSON Schema
NameRequiredDescriptionDefault
ruleIdYes許可ルール UUID

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedYesDeleted IP allowlist rule UUID

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already communicate destructiveHint=true, readOnlyHint=false, and idempotentHint=false. The description aligns with this by stating deletion, and adds useful context about the Business+ plan requirement and the need for a ruleId from the list operation. However, it does not go beyond that to describe consequences, error behavior, or reversibility, so it neither contradicts nor substantially enriches the behavioral profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence that front-loads the action and resource, then states the essential requirement. Every word contributes: the plan level, the action, the resource, and the parameter source. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter destructive tool, the description covers the action, the source of the required parameter, the plan prerequisite, and the safety profile is covered by annotations. An output schema exists, so return values need no explanation. Sibling tools for listing and adding are present, and the description effectively disambiguates the input source. Nothing essential is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents ruleId as a UUID with description '許可ルール UUID', so schema coverage is 100%. The description adds meaningful semantics by specifying that the ruleId is the id from list_console_login_ip_allowlists, which instructs the agent where to source the value. This goes beyond the schema and justifies a score above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states the specific action '削除' (delete) on a clear resource '管理画面ログイン IP 許可ルール' (admin console login IP allow rule), and includes a plan qualifier (Business+). It clearly differentiates from sibling tools like add_console_login_ip_allowlist by being the delete counterpart, and references list_console_login_ip_allowlists for obtaining the ID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states the mandatory prerequisite: ruleId must be the id from list_console_login_ip_allowlists. This gives clear contextual guidance on how to obtain a valid parameter value. It does not explicitly mention when not to use the tool or compare with add_console_login_ip_allowlist, but for a simple delete tool this is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

end_agent_runA

Agent Run を終了(schema/full)。必須: runId, status(completed / failed / cancelled)。start_agent_run の agentRun.id を渡す。メトリクス(auditLogCount 等)を返す。

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesAgent run id from start_agent_run
statusYesTerminal status for this run

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
statusNo
agentRunNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a mutating, non-idempotent operation. The description adds that the run receives a terminal status and returns metrics, which is useful. However, it does not disclose potential side effects, whether the action is reversible, or clarify the meaning of the parenthetical 'schema/full'.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the primary action and required parameters. The 'schema/full' phrase is ambiguous and unexplained, which slightly detracts from clarity, but overall the structure is efficient and every sentence contributes useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with only two required parameters and an output schema, the description covers the essential information: what the tool does, required inputs, the source of the run ID, accepted statuses, and the return value. It is adequately complete for invocation, though a bit more detail about side effects or error conditions would improve it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and both parameters have descriptions. The tool description adds meaningful value by explicitly directing users to pass start_agent_run's agentRun.id property, which is more precise than the schema's 'Agent run id from start_agent_run'. The status enum values are repeated but that is redundant with the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'Agent Run を終了' (terminate an Agent Run). It also mentions the terminal statuses and the requirement to pass the run ID, clearly distinguishing it from start_agent_run and get_agent_run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context by requiring the agentRun.id from start_agent_run and specifying the terminal statuses. It does not explicitly say when not to use the tool, but the prerequisite is clear enough for an agent to know this is the completion step for a started run.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_admin_help_articleA
Read-onlyIdempotent

管理画面ヘルプ記事 1 件の本文。必須: articleId(search_admin_help の id。例: content.publish-workflow, agent.publish-revision)。

ParametersJSON Schema
NameRequiredDescriptionDefault
articleIdYessearch_admin_help の記事 id

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that it returns the article body, but this is more purpose than additional behavioral context such as pagination, error conditions, or output format.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single focused sentence, front-loaded with the core behavior, followed immediately by the required parameter and examples. There is no wasted text.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple single-parameter read operation with an output schema and annotations already covering safety and idempotency. The description provides the essential usage detail (where the ID comes from) and examples, so nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents articleId. The description adds value by specifying the ID must come from search_admin_help and providing realistic examples (content.publish-workflow, agent.publish-revision), which helps the agent supply a valid value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific verb and resource: it retrieves the body of a single admin help article. It distinguishes itself from search_admin_help (which finds articles) and ask_admin_help (which likely answers questions) by specifying that articleId comes from search_admin_help.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly names the required parameter and tells the agent to obtain articleId from search_admin_help, with concrete examples. It implies the correct usage pattern but does not explicitly contrast with alternatives like ask_admin_help.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_agent_runA
Read-onlyIdempotent

Agent Run の状態・メトリクスを取得(schema/full)。必須: runId。自分が開始した run のみ(他キーは 403)。

ParametersJSON Schema
NameRequiredDescriptionDefault
runIdYesAgent Run の UUID(start_agent_run レスポンス agentRun.id)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
statusNo
agentRunNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds the ownership/authorization restriction ('自分が開始した run のみ(他キーは 403)') and the 'schema/full' output distinction, which go beyond the annotations and inform call behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a compact, single-line set of clauses with no filler. The core purpose is front-loaded, followed by the required parameter and the key access constraint. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the fully documented input schema, the presence of an output schema, and annotations covering safety and idempotency, the description adds the crucial ownership restriction and output variant. Nothing essential is missing for an agent to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the runId parameter already has a rich description in the schema, including its source (start_agent_run response agentRun.id). The tool description's '必須: runId' merely repeats the schema's required array and adds no new parameter meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('取得' – get) and resource ('Agent Run の状態・メトリクス'), clearly distinguishing it from mutating siblings like start_agent_run and end_agent_run. It also identifies the required runId and the 'schema/full' output variant, making the tool's scope unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context: the call requires a runId, and only runs started by the caller are accessible; other runs return 403. It does not explicitly name alternative tools or state when not to use it, but the retrieval purpose is evident against its mutating siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_change_planA
Read-onlyIdempotent

Change Plan の状態を取得(schema/full)。必須: planId(propose_change の changePlan.id)。自分が提案した plan のみ。承認・却下・実行は Human Console のみ。

ParametersJSON Schema
NameRequiredDescriptionDefault
planIdYesChange Plan の UUID(propose_change レスポンス changePlan.id)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
statusNo
changePlanNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, non-destructive behavior. The description adds meaningful context beyond annotations: access is restricted to self-proposed plans, and state-changing actions like approval/rejection/execution are outside this tool's scope. This helps prevent misuse without contradicting the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded, with the main action stated first. The parenthetical 'schema/full' is slightly ambiguous, but it does not significantly detract from overall clarity and every other part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read tool with one parameter, full schema coverage, an output schema, and safe annotations, the description provides all necessary operational context: parameter source, access restriction, and human-console boundary. Nothing needed for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, and the schema already specifies format and UUID constraints. The description adds value by clarifying that planId must come from the changePlan.id returned by propose_change, establishing provenance beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool retrieves the status of a Change Plan, with the specific resource and verb. It also clarifies scope boundaries (own plans only) and distinguishes this read operation from approval/rejection/execution actions performed via Human Console, making it distinguishable from related workflow tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage guidance: requires planId obtained from propose_change response, only works for plans the caller proposed, and approval/rejection/execution must be handled through Human Console. This tells an agent when to use the tool and when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_entryC
Read-onlyIdempotent

エントリ 1 件。必須: formSetId, entryId(いずれも UUID)。

ParametersJSON Schema
NameRequiredDescriptionDefault
entryIdYesエントリの UUID(list_entries / create_entry / get_entry の id)
formSetIdYesForm Set の UUID(list_form_sets / apply_builtin_form_template / apply_form_blueprint / archive_form_set のレスポンス id。Form Set の slug 文字列ではない)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

C2.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds no behavioral context beyond the singular resource and required parameters, but it also does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely short, with no filler words, and places the key requirement in the second clause. It is efficient structurally, though it borders on under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-by-ID tool, the schema, output schema, and annotations cover most operational details. However, the description itself does not explicitly state the action or distinguish it from list_entries, so it is only minimally viable on its own.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains where each UUID can be obtained, including that formSetId is not a slug. The description merely repeats the required parameter names and the UUID type without adding semantic value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource as one entry (「エントリ 1 件」) and the required IDs, but it is a noun phrase with no explicit verb such as 'get' or 'retrieve'. It also does not contrast with the sibling list_entries, so the agent must infer the operation largely from the tool name.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is given about when to use this tool versus alternatives like list_entries. The only additional statement is that formSetId and entryId are required, which duplicates schema information and provides no usage context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_form_set_schemaA
Read-onlyIdempotent

1 つの Form Set のスキーマ + save_revision 用 snapshotShape。select/radio/multiselect には masterEntityKey・sampleValues・公開 records URL を付与。保存前に必ず確認する。必須: formSetId(UUID。Form Set の slug ではない。list_form_sets / apply_* の id)。

ParametersJSON Schema
NameRequiredDescriptionDefault
formSetIdYesForm Set の UUID(list_form_sets / apply_builtin_form_template / apply_form_blueprint / archive_form_set のレスポンス id。Form Set の slug 文字列ではない)

Output Schema

ParametersJSON Schema
NameRequiredDescription
formsYes
formSetYes
snapshotShapeNoUse example as the save_revision snapshot nest shape
mastersSummaryNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, idempotentHint=true, destructiveHint=false, so the agent knows this is a safe read. The description adds useful context about the enriched schema content and the pre-save verification requirement. It does not explain error behavior or what happens if formSetId is invalid, but the annotation coverage lowers the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core purpose (schema + snapshotShape for save_revision) comes first, followed by the critical usage warning. The enrichment detail for select/radio/multiselect is dense but relevant and efficiently expressed. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity, read-only, idempotent tool with a full output schema and one well-documented parameter, the description covers the key caveat (check before saving) and parameter origin. Minor gaps are explicit sibling differentiation and error scenarios, but these are not critical given the annotations and schema richness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already clearly describes formSetId as a UUID from list_form_sets / apply_* responses, not a slug. The description reinforces this by repeating the requirement and marking it as '必須', but adds little beyond the schema's own parameter documentation. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: fetching one Form Set's schema plus snapshotShape for save_revision. It also specifies that select/radio/multiselect fields are enriched with masterEntityKey, sampleValues, and public record URLs. It is clear and resource-specific, though it does not explicitly contrast itself with sibling get_* tools like get_tenant_schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says '保存前に必ず確認する' (always check before saving), indicating when this tool should be used. It also clarifies the required parameter formSetId must be a UUID from list_form_sets / apply_* responses, not a slug, which is essential usage guidance. However, it does not name alternatives or say when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_funnel_statusC
Read-onlyIdempotent

MCP Private Beta 計測ファネルを再構成。任意: funnelId(省略時は当セッション / LUNO_FUNNEL_ID)。詳細: agent.measurement-funnel

ParametersJSON Schema
NameRequiredDescriptionDefault
funnelIdNofunnel_id UUID(省略時は MCP セッションの値)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

C2.2/5.0
Behavior1/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description's verb '再構成' implies a state-changing operation, contradicting the annotations readOnlyHint=true and idempotentHint=true. Besides this contradiction, it adds no behavioral context such as what data is returned or what the fallback does.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and mentions the parameter; however, the primary sentence is semantically wrong and the pointer '詳細: agent.measurement-funnel' is vague. The brevity is not supported by accurate content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Although an output schema exists, the description does not define what 'funnel status' means, when to call this tool, or why it exists in the MCP measurement domain. The misleading verb leaves an agent without enough context to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already covers the single funnelId parameter and its UUID format. The description adds the useful fallback semantics '省略時は当セッション / LUNO_FUNNEL_ID', specifying an environment-variable fallback not present in the schema description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description says the tool '再構成' (reconfigures/reconstructs) the MCP Private Beta measurement funnel, which is a mutating verb and does not state that the tool gets/returns funnel status. It names a resource but not the correct operation, and it provides no differentiation from sibling read tools like get_project_overview or get_agent_run.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool or which alternative to prefer. The only usage-related content is the optional funnelId fallback, but no conditions, prerequisites, or comparison with sibling tools are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_login_appearanceA
Read-onlyIdempotent

管理画面ログインの見た目設定を取得(認証要・引数なし)。背景=Standard+、WL=Business+。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already mark this as read-only, idempotent, and non-destructive; the description adds useful context beyond them by noting that authentication is required and that availability depends on plan level (Standard+ for background, Business+ for WL). No contradiction with the annotations exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence with no filler. The most important facts—what it does, authentication, and no arguments—are front-loaded, and the plan-related restriction is appended concisely.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only tool with an output schema and safety annotations, the description covers the key prerequisites and plan constraints. It is slightly incomplete because 'WL' is left unexplained and the relationship to get_login_branding is not addressed, but these are minor gaps given the low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters and the schema coverage is 100%, so the schema already fully defines the input surface. The description reinforces this by explicitly stating '引数なし' (no arguments), which is helpful but adds little beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb '取得' (retrieve) and the resource '管理画面ログインの見た目設定' (admin console login appearance settings), making the core purpose unambiguous. However, it does not differentiate this tool from the sibling get_login_branding, which appears closely related.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives useful operational prerequisites: authentication is required and no arguments are needed. It does not state when to prefer this tool over get_login_branding or update_login_appearance, and it does not mention any exclusions or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_login_brandingA
Read-onlyIdempotent

管理画面ログイン用ブランド取得(認証不要)。任意: projectId(省略時はエージェントキーのプロジェクト)。branding_tier / login_background / hide_* を返す。

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdNoProject UUID(省略時はエージェントキーのプロジェクト)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds the no-authentication requirement and the default project behavior, which are useful behavioral traits not present in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence that front-loads the purpose, then states the optional parameter and the returned fields. No redundant filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With annotations, full schema coverage, and an output schema, the description is nearly complete for invoking the tool. It only misses an explicit comparison to get_login_appearance, which could affect tool selection among siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the only parameter (projectId) is already described as optional with the same default-project semantics. The description repeats this information without adding new detail, so it stays at the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves admin-console login branding and lists the returned fields (branding_tier, login_background, hide_*). It does not distinguish itself from the similarly named sibling get_login_appearance, so it falls short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

States that no authentication is required and that projectId defaults to the agent key's project, giving clear context for when to call it. It does not explicitly mention alternatives or when not to use it, especially given the similar get_login_appearance sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_master_entityA
Read-onlyIdempotent

マスタエンティティ 1 件。必須: entityId(UUID。list_master_entities の id)。

ParametersJSON Schema
NameRequiredDescriptionDefault
entityIdYesマスタエンティティ UUID(list_master_entities の id)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already set readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the read-only behavior is fully covered by annotations. The description adds that this returns a single master entity, but doesn't disclose anything beyond that, such as potential 404 behavior or locale handling, which is a modest addition over annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence that front-loads the resource and required parameter, but it is terse enough that it omits any mention of the response shape or error behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With output schema available and a single parameter fully documented in the schema, the description covers the essential calling context. The gap is minimal—no mention of which sibling provides the ID—but the reference to list_master_entities partially fills that.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already explains entityId as a UUID from list_master_entities. The description repeats that same information without adding new meaning, which is acceptable but not additive.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific resource ('マスタエンティティ 1 件') with a concrete verb and the key parameter. It clearly distinguishes this from sibling list_master_entities by indicating it retrieves a single entity by ID.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It indicates a required parameter (entityId) and references list_master_entities as the source of that id, which implies when to use it, but it does not explicitly state when not to use it or mention alternatives like list_master_records.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_mcp_runtimeA
Read-onlyIdempotent

この MCP パッケージの実行時情報(引数なし・LUNO API は呼ばない)。mcpVersion / toolCount / contract(tool→Admin API)。ツールが載っていてもホスト API が未デプロイのことがある。404 なら API が古い。代替 mutation を発明しない。詳細: luno://mcp/runtime。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteYes
apiBaseYesConfigured LUNO_API_URL (not probed)
packageYesnpm package name
contractYesCapability-sensitive tools; listed ≠ hosted API deployed
toolCountYesRegistered MCP tools in this process
mcpVersionYesThis installed @luno-cms/mcp version

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, but the description adds valuable behavioral context beyond them: it discloses that the tool does not call the LUNO API (network behavior), that the host API may be undeployed (availability), and that a 404 response signals an outdated API (error interpretation). It also warns against mutation attempts. This substantially enriches the agent's understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core purpose and fields, followed by critical caveats (deployment, error code, mutation warning). Every sentence contributes value with no fluff. The structure is efficient and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (no parameters), has an output schema (not shown but present), and annotations cover safety. The description adds the remaining needed context: error handling (404), deployment state, and the no-mutation constraint. Nothing an agent needs to call this correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema is empty. The description redundantly confirms '引数なし' (no arguments), which matches the schema. Since there are no parameters to document, the baseline of 4 applies; the description does not need to add parameter-specific meaning beyond confirming the absence of arguments.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'runtime information for this MCP package'. It explicitly lists the returned fields (mcpVersion, toolCount, contract) and clarifies it does not call the LUNO API, distinguishing it from sibling tools that interact with APIs. This is unambiguous and specific.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides usage context: it notes the tool takes no arguments, warns that the host API may not be deployed even if the tool is loaded, and explains that a 404 indicates an outdated API. It also advises against inventing alternative mutations, which is a clear exclusion. However, it does not explicitly name alternative tools, though the tool's unique purpose makes selection obvious.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_content_localesA
Read-onlyIdempotent

サイトのコンテンツ多言語設定を取得(引数なし)。有効/無効・content_locales・content_default_locale。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful behavioral context by stating there are no arguments and by naming the specific returned settings: enabled/disabled, content_locales, and content_default_locale.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence with the main action and resource front-loaded, followed by the relevant output fields. There is no filler or repeated information from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless getter with full annotation coverage and an output schema available, the description provides sufficient context. The resource, behavior, and returned fields are all indicated, and the structured metadata covers safety, idempotence, return values, and schema details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters, so the description has little to explain. It explicitly states '引数なし' (no arguments), which reinforces the empty input schema and removes any doubt about invocation requirements. This matches the baseline of 4 for parameterless tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb '取得' (get) and the resource 'サイトのコンテンツ多言語設定' (site content multilingual settings), and it lists the relevant output fields. It is specific and easy to understand, though it does not explicitly differentiate itself from sibling tools like patch_project_content_locales.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies this is the read-only counterpart to patch_project_content_locales, but it does not explicitly state when to choose this tool versus alternatives. The '引数なし' note is helpful for invocation, but the description does not provide when-to-use or when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_overviewA
Read-onlyIdempotent

既存プロジェクト再開時の最初の一手。intentCapabilities(ユーザー意図→プロダクト。お問い合わせは create_contact_form。お知らせ/ブログは purposeLabels で templateSlug)・nextMoves・hints.intent・Form Sets・Contact Forms・Masters・quota・locales・公開 API ベースを返す。空プロジェクトでも Contact を Form Set テンプレに落とさない。権限不足は available:false。MCP パッケージ版と API 契約は get_mcp_runtime(引数なし・LUNO 非呼び出し。ツール一覧 ≠ API デプロイ済み)。詳細: agent.discover。引数なし。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds behavioral context beyond annotations: it returns available:false on insufficient permissions, warns not to drop Contacts into Form Set templates even for empty projects, and clarifies that the MCP package version differs from the API contract. This is useful non-obvious behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but front-loaded with the primary use case ('既存プロジェクト再開時の最初の一手') and packs a lot of routing and behavioral information into a compact space. It is somewhat long and mixes multiple concerns, but every sentence earns its place; a 4 is appropriate.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only tool with an output schema, the description is complete: it lists the major payload sections, notes the permission-failure behavior, warns about a common misuse (Contact to Form Set template), and routes to get_mcp_runtime and agent.discover for related concerns. Nothing needed to call it correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100%, so there is nothing for the description to add about parameter meaning. The baseline for 0 params is 4, and the description appropriately focuses on return payload semantics instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: it returns a project overview for resuming existing projects, listing intentCapabilities, nextMoves, hints.intent, Form Sets, Contact Forms, Masters, quota, locales, and public API base. It also distinguishes itself from get_mcp_runtime and points to agent.discover for details, so an agent can tell it apart from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use it: '既存プロジェクト再開時の最初の一手' (the first step when resuming an existing project). It also names alternatives: create_contact_form for inquiries, purposeLabels/templateSlug for notices/blogs, and get_mcp_runtime for MCP package vs API contract. This is clear routing guidance with exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_public_api_infoA
Read-onlyIdempotent

エージェントキーのプロジェクト向け公開 API ベース URL を返す。引数なし。ローカルでは /public/p/{projectId}/v1 を使う(Host ベース /public/v1 は DEFAULT_TENANT_ID に落ちる)。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
notesYes
projectIdYesAgent key project UUID
adminApiUrlYes
exampleEntryUrlYes
publicApiBaseUrlYesPreferred /public/p/{projectId}/v1 base
exampleMasterRecordsUrlYes
exampleMasterEntitiesUrlYes
hostBasedPublicApiBaseUrlYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, which already indicate a safe read-only and idempotent operation, the description discloses the important environment-specific behavior: locally it returns /public/p/{projectId}/v1, and the host-based /public/v1 falls back to DEFAULT_TENANT_ID. This is valuable behavioral context not present in the structured annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no filler. It front-loads the core purpose, then adds the necessary local-environment nuance in the second sentence, earning its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only tool with annotations covering safety and an output schema present, the description is complete. It tells the agent what the tool returns, that no arguments are needed, and how the URL differs in local contexts. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero parameters and the description explicitly confirms '引数なし' (no arguments). Since there are no parameters to describe, the baseline is appropriately 4; the description reinforces the schema rather than adding new parameter-level meaning.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: it returns the public API base URL for the agent key's project. It also specifies that it takes no arguments, making the tool's scope unambiguous and distinct from other URL-related tools like get_pub_preview_url.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by explaining the local versus host-based URL behavior and explicitly stating that no arguments are required. It does not explicitly name alternative tools or when-not-to-use conditions, but for this simple no-parameter utility, the usage context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pub_preview_urlA
Read-onlyIdempotent

下書き/承認待ちリビジョンのプレビュー URL を取得(POST pub-preview-url)。必須: formSetId, entryId, revisionRowId(= save_revision の id)。任意: target(external=外部サイトテンプレ優先・既定, luno=LUNO ホスト)。返却 url を人間がブラウザで開いて確認。続けて publish_revision(can_publish=false なら pendingHumanApproval で人間承認)。未公開は Standard 以上プラン。詳細: luno://publishing-guide / agent.publish-revision。

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoexternal(既定): detail_url_template 優先。luno: LUNO ホスト pub のみ
entryIdYesエントリの UUID(list_entries / create_entry / get_entry の id)
formSetIdYesForm Set の UUID(list_form_sets / apply_builtin_form_template / apply_form_blueprint / archive_form_set のレスポンス id。Form Set の slug 文字列ではない)
revisionRowIdYesリビジョン行の UUID(save_revision / list_revisions のレスポンス id。revision 番号ではない)

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNoBrowser URL for a human to preview the draft

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey read-only/idempotent/non-destructive behavior. The description adds behavioral context beyond those flags: the POST method, the human-browser confirmation step, the Standard+ plan requirement for unpublished content, and the subsequent can_publish=false path. There is no contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: purpose first, then required params, optional param, usage of the result, next-step workflow, plan note, and reference. Every clause carries necessary information and there is no filler or restatement of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only preview tool with a rich output schema, this covers all call-time needs: required and optional parameters, target behavior, plan prerequisite, and what to do after obtaining the URL. Nothing needed to invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the parameter descriptions already phrase the required fields and target enum meanings in detail. The tool description restates required vs optional parameters and the target default, but adds little semantic value beyond the schema, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific action and resource: '下書き/承認待ちリビジョンのプレビュー URL を取得' and names the POST pub-preview-url endpoint. It clearly differentiates the tool from publish_revision by framing this as the preview step before publication.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides strong workflow context: which IDs are required (including revisionRowId from save_revision), the optional target choices, the instruction to open the returned URL in a browser, and the follow-up publish_revision flow with can_publish=false handling. It lacks an explicit when-not-to-use or alternative-tool exclusion, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_tenant_schemaA
Read-onlyIdempotent

操作中プロジェクトのフォームセット・フィールド定義を一括取得する。引数なし。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool read-only, idempotent, and non-destructive, and the description does not contradict them. The description adds useful behavioral context by indicating this is a bulk retrieval of form set and field definitions for the operating project, which goes beyond the structured hints.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single short sentence with the action front-loaded and the no-argument requirement clearly stated. Every word earns its place and there is no unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, read-only tool with an output schema, the description is complete enough for an agent to call it correctly. It states the resource scope, the fact that no arguments are needed, and the annotations cover the safety profile.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema description coverage is 100%, so the schema fully defines the input surface. The description's 引数なし reinforces the empty schema but adds no further needed parameter-level meaning, which is acceptable given the baseline for no-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb (一括取得する) and identifies both the resource (form set/field definitions) and scope (current project). It is clear what the tool does, though it does not explicitly differentiate itself from sibling tools like get_form_set_schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives no guidance on when to use this tool versus alternatives such as list_form_sets or get_form_set_schema. It only states the current-project scope and that there are no arguments, so an agent must infer selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_builtin_form_templatesA
Read-onlyIdempotent

LUNO 公式 Form Set スターター一覧(引数なし)。purposeLabels(ja/en。お知らせ・ブログ等)で用途をマッチし、返却 slug を apply_builtin_form_template の templateSlug に使う。slug を暗記しない。お問い合わせはここに無い。create_contact_form / get_project_overview.intentCapabilities を使う。詳細: agent.builtin-form-templates

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish that the tool is read-only, idempotent, and non-destructive. The description adds useful behavioral context beyond annotations: it takes no arguments, returns slugs to be consumed by another tool, warns against memorizing slugs, and clarifies that contact-form functionality is intentionally absent. This goes beyond the structured metadata without contradicting it.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loads the tool's identity and argument requirement, and every sentence adds actionable value: matching strategy, output usage, anti-memorization guidance, and exclusion routing. The pointer to 'agent.builtin-form-templates' is a concise reference rather than clutter.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that the tool has no parameters, a read-only/idempotent annotation profile, and an output schema, the description covers all necessary context: what the list contains, how to select an item, how to use the returned slug, and where to go for contact-form needs. There are no obvious missing details that would prevent correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters and 100% schema description coverage, so there is nothing for the description to clarify about parameter semantics. The description still reinforces that the tool takes no arguments ('引数なし') and explains how the returned value is meant to be used, which is sufficient for this parameter-less tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool as a no-argument list of official LUNO Form Set starters, and explains that its purpose is to match use cases via purposeLabels and return slugs for use with apply_builtin_form_template. It also distinguishes itself from create_contact_form by stating that contact forms are not included here.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly tells the agent when to use this tool: to fetch built-in form templates, match by purposeLabels, and pass the returned slug to apply_builtin_form_template.templateSlug. It also gives a clear exclusion — contact forms are not here, use create_contact_form or get_project_overview.intentCapabilities instead — so the agent knows when NOT to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_console_login_ip_allowlistsA
Read-onlyIdempotent

管理画面ログイン IP 許可リスト一覧(Business+・引数なし)。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a 'Business+' plan requirement, which is useful, but otherwise adds no behavioral context beyond what annotations and the empty schema already communicate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact phrase that conveys the resource, action, plan restriction, and argument status with no filler. It is appropriately front-loaded and every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, zero-argument, read-only list operation, the description along with the annotations and output schema covers everything an agent needs to invoke it correctly. No return-value details are needed because an output schema is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema_description_coverage is 100%, so parameter ambiguity is nearly nonexistent. The description explicitly states '引数なし' (no arguments), reinforcing the empty input schema with a useful confirmation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly names the resource ('管理画面ログイン IP 許可リスト') and indicates the list action ('一覧'), with useful qualifiers for plan and arguments. It is unambiguous, but it does not explicitly differentiate itself from sibling tools such as get_login_branding or other list operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that this tool is for retrieving IP allowlists, rather than adding or deleting them via the sibling add/delete tools. However, it does not provide explicit when-to-use guidance, exclusions, or mention of alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_entriesA
Read-onlyIdempotent

Form Set 内のエントリ一覧。必須: formSetId(UUID)。返却 item.id を entryId に使う。

ParametersJSON Schema
NameRequiredDescriptionDefault
formSetIdYesForm Set の UUID(list_form_sets / apply_builtin_form_template / apply_form_blueprint / archive_form_set のレスポンス id。Form Set の slug 文字列ではない)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds the useful behavior that returned item.id should be used as entryId, but does not disclose pagination, sorting, or result limits. With existing annotations, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short, front-loaded sentences with no redundant content. It states the purpose, the required parameter, and the key integration hint about item.id without wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter list operation with an output schema and safety annotations, the description is complete. It covers what the tool does, the required input, and how the response should be consumed, leaving no critical gap for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already documents formSetId as a required UUID with detailed source context. The description repeats '必須: formSetId(UUID)' without adding new parameter-level meaning, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Form Set 内のエントリ一覧' (list entries in a Form Set). This clearly distinguishes it from sibling tools like list_form_sets (lists Form Sets) and get_entry (retrieves a single entry).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear contextual usage: list entries within a Form Set, requires formSetId, and tells the agent to use the returned item.id as entryId for downstream operations. It does not explicitly mention when not to use it or name alternatives, but the guidance is sufficient for typical selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_form_setsA
Read-onlyIdempotent

Form Set 一覧を取得する。引数なし。各 item の id(UUID)を他ツールの formSetId に使う(slug ではない)。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnly, idempotent, and non-destructive behavior, so no side-effect warning is necessary. The description adds useful behavioral context: there are no arguments, and the returned ids are UUIDs intended for formSetId fields rather than slugs. This goes beyond what the annotations alone provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: two short Japanese sentences with no filler. The core action is front-loaded, and the second sentence adds essential actionable guidance about the returned IDs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given zero parameters, an existing output schema, and annotations covering safety, the description is complete. It tells the agent exactly what the tool does and how to use the results, leaving no critical operational gap for a simple list operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero parameters and an empty input schema, so the parameter burden is already fully covered by the schema. The description explicitly confirms '引数なし' (no arguments), matching the schema and leaving no ambiguity.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: 'Form Set 一覧を取得する' (retrieve the list of Form Sets). It also clarifies that each item's id is a UUID to be used as formSetId, which helps distinguish this listing tool from other form-set-related tools. It does not explicitly name sibling tools, but the listing purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear downstream usage guidance: use each returned id (UUID) as formSetId in other tools, and avoid using the slug. This context implicitly tells the agent when this tool is needed. It does not explicitly state exclusions or alternatives, but the guidance is sufficient for a zero-argument list tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_master_entitiesA
Read-onlyIdempotent

マスタエンティティ一覧(引数なし。key / hierarchical / record_count 含む)。item.id を entityId に使う。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful context by noting that the list includes key, hierarchical, and record_count fields and that item.id should be used as entityId, but it does not mention pagination or list-size behavior; the presence of an output schema reduces the need for return-format details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two compact sentences with no filler. The purpose is front-loaded, and the parenthetical clarifies the no-argument constraint and included fields, while the final clause adds a practical integration note.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a no-argument, read-only list tool with an output schema and safety annotations, the description is nearly complete. It could be slightly clearer about how this relates to sibling tools or where the entityId hint is meant to be used, but those are minor gaps for such a simple operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema description coverage is 100%. The description reinforces this with '引数なし' (no arguments), which is sufficient; there are no parameter semantics to elaborate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as 'マスタエンティティ一覧' (master entity list) and states the operation is a list with no arguments. It does not explicitly differentiate from siblings like list_master_records, but the master-entity focus and the included fields make the purpose reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to choose this tool over alternatives such as list_master_records or get_master_entity. The note 'item.id を entityId に使う' gives a downstream usage hint, but it does not explain selection conditions or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_master_recordsB
Read-onlyIdempotent

マスタレコード一覧(label は locale map。階層時は parent_record_id)。必須: entityId。任意: q(検索)。

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoレコード検索クエリ
entityIdYesマスタエンティティ UUID(list_master_entities の id)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover safety with readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful response semantics: 'label は locale map' and '階層時は parent_record_id' explain how fields behave, but it does not disclose pagination, ordering, or any result-set limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact line that front-loads the core purpose and packs two useful field hints into a parenthetical. Every element carries meaning, with no redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The required parameter, optional search, and key response quirks are all present. With an output schema and safety annotations available, nothing critical is missing, though adding a brief note about when to choose this over list_master_entities would improve completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description's mention of required/optional parameters simply repeats the schema. It adds no new meaning for entityId or q beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description 'マスタレコード一覧' clearly indicates a list operation on master records, with a specific resource. It distinguishes from siblings by naming 'master records' rather than 'master entities' (list_master_entities), but it does not explicitly name alternatives or contrast with other list/get tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as list_master_entities or get_master_entity. It only states that entityId is required and q is optional, leaving the agent to infer selection from the tool name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_mediaA
Read-onlyIdempotent

アップロード済みメディア(アセット)一覧。任意: limit(1–100、既定 30)。

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo取得件数(既定 30)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds no additional behavioral disclosures such as pagination behavior, ordering, or whether file contents are included, but it does not contradict the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the core purpose and includes the only optional parameter. There is no redundant or unnecessary content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity, one optional parameter, existing output schema, and rich annotations covering safety and idempotency, the description is sufficient for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description only restates the limit parameter's range and default already present in the schema. It adds no new meaning beyond the structured definition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource as 'uploaded media (assets)' and the operation as listing them. It is unambiguous, though it does not explicitly distinguish itself from sibling list tools like list_entries or list_form_sets.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The intended use is implied by the resource name and description, and the optional limit parameter is documented. However, it does not explicitly state when to choose this tool over alternatives or provide exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_revisionsA
Read-onlyIdempotent

エントリのリビジョン一覧。必須: formSetId, entryId。各 item の id / revision を publish_revision に渡す。

ParametersJSON Schema
NameRequiredDescriptionDefault
entryIdYesエントリの UUID(list_entries / create_entry / get_entry の id)
formSetIdYesForm Set の UUID(list_form_sets / apply_builtin_form_template / apply_form_blueprint / archive_form_set のレスポンス id。Form Set の slug 文字列ではない)

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYesRevisions; use id + revision to publish

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a useful integration detail (each item's id/revision goes to publish_revision), but it does not disclose behavioral details such as ordering, scope of revisions returned, pagination, or filtering. With annotations present, the bar is lower, and this modest extra context earns a 3.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence that front-loads the core purpose and then provides the required identifiers and downstream usage. Every clause earns its place with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple, has a complete output schema, and its annotations cover safety semantics. The description specifies the required parameters and the purpose of the returned values, making it fully sufficient for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both formSetId and entryId already fully documented in the input schema. The description only repeats that they are required and does not add additional parameter meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: listing revisions of an entry, with a specific resource scope (an entry identified by formSetId and entryId). It also distinguishes itself from sibling tools by noting the revision ids are meant to be passed to publish_revision, differentiating it from save_revision and publish_revision.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: when you need revision items for an entry and intend to pass their id/revision to publish_revision. It implies a workflow but does not explicitly state when not to use it or mention alternatives such as save_revision, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

migrate_field_to_master_referenceA
Read-onlyIdempotent

静的 enum(constraints.enum)を Master Reference(masterEntityKey)へ移行するプレビュー(schema/full)。必須: formSetSlug, fieldKey, masterEntityKey, dryRun(true のみ)。任意: formKey(fieldKey が一意なら省略可), mapping(enum 値→Master value 文字列。UUID ではない)。このツールは書き込まない。dryRun: false / 省略は拒否し API を呼ばない。実行は propose_change(action: migrate_field_to_master_reference)。apply_form_blueprint / update_field / update_field_type は使わない。mapping 省略時は enum 値と Master value / 一意 label を自動提案。曖昧なら mapping_ambiguous。dryRun が enum 無し / mapping 空なら constraints が JSONB 文字列のことがある。get_form_set_schema で実体を確認(バックエンド修正はホスト側)。成功しても snapshot 値は Master value に変わる。フロントのハードコード比較(例: 日常 vs daily)は別変更。dryRun 成功 ≠ フロント完了。詳細: agent.change-plans / agent.form-blueprint-mcp。

ParametersJSON Schema
NameRequiredDescriptionDefault
dryRunYesMust be true. Preview only — this tool never writes and never executes. dryRun:false / omitted is rejected (API is not called). After ok preview, propose_change(action: migrate_field_to_master_reference). Help: agent.change-plans / agent.form-blueprint-mcp.
formKeyNoForm block key (e.g. main). Omit when fieldKey is unique in the Form Set. API name: formKey.
mappingNoOptional enum-value → Master record value strings (NOT master record UUIDs). Omit to auto-suggest from enum values + unique Master value/label. Ambiguous → mapping_ambiguous. Do not send { from, to } objects.
fieldKeyYesTarget field key whose constraints.enum should become a Master Reference. API name: fieldKey. NOT Contact Form `key`.
formSetSlugYesForm Set URL slug from list_form_sets / get_form_set_schema (NOT formSetId UUID). API name: formSetSlug.
masterEntityKeyYesExisting Master entity key (list_master_entities). Snapshot values stay master_records.value strings, not UUIDs. API name: masterEntityKey.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description reinforces and extends this: it discloses dryRun:true-only enforcement, auto-suggest behavior for mapping, the mapping_ambiguous result, the JSONB-string caveat for constraints, that snapshot values become Master values on success, and that frontend hardcoded comparisons are a separate change. This is rich behavioral context well beyond the annotations. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense and front-loaded with the core purpose and required parameters, and every sentence carries real information. It is, however, on the longer side and mixes Japanese and English, with some redundancy between the main description and the schema-level description. The length is largely justified by the tool's complexity, but it could be tightened slightly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with nested objects (mapping), 6 parameters, and subtle automation behavior, the description is remarkably complete: it covers required vs optional params, error cases (dryRun rejection, mapping_ambiguous), edge cases (JSONB string), execution path, auto-suggest behavior, snapshot implications, and help references. The existence of an output schema means return values need no explanation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, yet the description adds disambiguation that prevents common errors: formSetSlug is NOT the formSetId UUID, fieldKey is NOT the Contact Form key, mapping values are string values and NOT master record UUIDs or {from, to} objects, and formKey can be omitted when fieldKey is unique. This goes beyond what the schema's parameter descriptions provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: migrating static enum (constraints.enum) to Master Reference (masterEntityKey), and explicitly frames it as a preview (schema/full). It distinguishes itself by explicitly naming the tools it is not (apply_form_blueprint / update_field / update_field_type), so an agent can tell it apart from sibling tools. The core operation is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when/when-not guidance: it never writes, execution must go through propose_change(action: migrate_field_to_master_reference), and dryRun:false or omitted is rejected without calling the API. It names alternatives to avoid (apply_form_blueprint / update_field / update_field_type) and points to get_form_set_schema for verification. No inference is left to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

patch_project_content_localesA
DestructiveIdempotent

サイトのコンテンツ多言語設定を更新(tenant_admin JWT のみ。エージェントキー不可)。任意: contentLocalesEnabled, contentDefaultLocale, contentLocales。

ParametersJSON Schema
NameRequiredDescriptionDefault
contentLocalesNo有効ロケール(default 必須)
contentDefaultLocaleNoデフォルト言語キー(例: default, ja)
contentLocalesEnabledNo多言語 ON/OFF

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A3.8/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey readOnly=false, destructiveHint=true, and idempotentHint=true. The description adds valuable behavioral context by stating the authentication requirement (tenant_admin JWT only, agent key not allowed), which is not present in the annotations. It does not contradict the annotations, and the auth constraint meaningfully supplements them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single compact sentence that front-loads the action and the auth restriction before listing the optional parameters. Every segment earns its place, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, full schema description coverage, and annotations covering mutability/destructiveness/idempotency, the description is nearly complete. The auth restriction is an important additional context signal. The main missing piece is explicit guidance on how this tool relates to sibling content-locale tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all three parameters with Japanese descriptions. The tool description merely lists the parameter names and marks them optional, adding little semantic value beyond what the schema already provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states the action (更新/update) and the target resource (サイトのコンテンツ多言語設定), making the tool's purpose clear. It does not explicitly contrast with sibling tools such as get_project_content_locales, so it falls just short of full sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly restricts usage to tenant_admin JWT and explicitly excludes agent keys, which is strong usage boundary information. However, it does not state when to use this tool versus alternatives like get_project_content_locales for reading or translate_entry_locales for entry-level translation, leaving some routing to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

propose_changeA

複数ステップの構造変更を Change Plan として提案(schema/full)。必須: goal, risk, steps(各 step に dry_run + mutation.body)。本ツールは mutations を実行しない。Human が Console で承認するまで pending_approval。先に apply_* / migrate_field_to_master_reference / rename_master_record_slug を dryRun: true で呼び、返却を steps[].dry_run.raw に格納し、本実行用 body を mutation.body に入れる。action は apply_form_blueprint / apply_builtin_form_template / apply_master_blueprint / migrate_field_to_master_reference / rename_master_record_slug。詳細: agent.change-plans / agent.mcp-security-permissions

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYesWhat this multi-step change intends to achieve
riskYesSuggested risk; server may bump from dry_run signals
runIdNoOptional Agent Run correlation (#109)
stepsYesOrdered steps with dry_run previews + mutation.body for later execution. Build from apply_* dryRun first.
impactNoHuman-readable impact bullets for Console review

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
statusNo
changePlanNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only say readOnlyHint=false and destructiveHint=false, so the description carries the behavioral burden. It clearly states mutations are NOT executed, that the plan sits in pending_approval until a Human approves in Console, and that dry_run outputs are stored verbatim but not re-run. It lacks explicit side-effect details (e.g., audit events or rate limits), but the pending-approval and no-execution behavior is the critical disclosure and is well covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but purposeful: it front-loads the core purpose and requirements, then gives the critical usage workflow, then the actionable list. Every sentence earns its place; the only slight inefficiency is the repetition of the action enum already present in the schema's enum.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers goal, requirements, workflow, non-execution semantics, approval status, and cross-references to detailed docs. With an output schema present and 100% parameter coverage, this is complete for an agent to invoke the tool correctly. The steps.dry_run and mutation.body relationship, which is the trickiest part, is explicitly spelled out.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema: it explains how steps[].dry_run.raw relates to prior apply_* dryRun calls, that mutation.body is the execution payload for Human approval, and that dryRun must be absent/false at execution time. It also maps the action enum to the sibling tools. This is a clear value-add over the schema's meager property descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a precise action: proposing multi-step structural changes as a Change Plan, scoped to schema/full, and lists the exact required constraints (goal, risk, steps with dry_run + mutation.body). It also names the five supported action types, making the tool's role unambiguous and distinguishable from the apply_* siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use it: after calling apply_* / migrate_field_to_master_reference / rename_master_record_slug with dryRun: true, and instructs how to populate steps[].dry_run.raw and mutation.body. It also clarifies that this tool does not execute mutations, which differentiates it from the executor siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

publish_revisionA

リビジョンを公開(1 回で draft→submit→approve。サーバー /publish が中間 revision +1 を吸収)。必須: formSetId, entryId, revisionRowId(= save_revision の id), revision(= save_revision の revision。save 直後の番号で可)。任意: publishAt(予約公開 ISO8601)。can_publish=false のキーは submit までで止まり pendingHumanApproval: true を返す(人間が Console で承認)。詳細: agent.publish-revision / agent.mcp-security-permissions

ParametersJSON Schema
NameRequiredDescriptionDefault
entryIdYesエントリの UUID(list_entries / create_entry / get_entry の id)
revisionYesリビジョン番号(save_revision / list_revisions の revision。publish_revision は save 直後の値で可)
formSetIdYesForm Set の UUID(list_form_sets / apply_builtin_form_template / apply_form_blueprint / archive_form_set のレスポンス id。Form Set の slug 文字列ではない)
publishAtNo予約公開日時(ISO8601・省略時は即時)
revisionRowIdYesリビジョン行の UUID(save_revision / list_revisions のレスポンス id。revision 番号ではない)

Output Schema

ParametersJSON Schema
NameRequiredDescription
stepsNoServer-side publish steps already applied
revisionNo
pendingHumanApprovalNotrue → stop; a human must approve in Console

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description reveals important state-transition behavior: the server absorbs the intermediate revision +1, and can_publish=false keys return pendingHumanApproval: true and stop at submit. It also references security/permission docs, giving the agent useful non-obvious context about how the publish flow can diverge.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficiently structured: the core behavior is front-loaded, followed by required and optional parameters, then conditional behavior and doc references. Every sentence contributes actionable information without verbose filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a publish workflow with four required parameters and one scheduling option, the description covers the full state flow, parameter provenance, conditional behavior, and security references. An output schema exists, so return-value documentation is not needed here. No important calling detail appears to be missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents the parameters. The description adds meaningful cross-tool semantics by mapping revisionRowId to save_revision's id and revision to save_revision's revision, noting that the value immediately after save is acceptable. This contextualizes how to obtain the parameters, going beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('公開' / publish) and resource ('リビジョン'), and clarifies the one-call behavior 'draft→submit→approve', which distinguishes it from related workflow tools like submit_entry_for_review. It also enumerates the required identifiers, leaving no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: publishing a saved revision in a single call. It also gives a conditional exclusion for keys where can_publish=false, which stop at submit and require human approval in the Console. It does not explicitly name an alternative tool for manual submit, so it stops short of a full when-vs-alternatives statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

rename_master_record_slugA
Read-onlyIdempotent

Master Record の公開 identifier(slug。互換キー value)をリネームするプレビュー(schema/full)。必須: masterEntityKey, dryRun(true のみ), slug または value, recordId または currentSlug/currentValue。このツールは書き込まない。dryRun: false / 省略は拒否し API を呼ばない。実行は propose_change(action: rename_master_record_slug)。update_master_record の value PATCH は使わない(snapshot が切れ、エージェントキーは 401)。承認後は master_records.value と参照 Field の snapshot を同時に書き換える。execute(Change Plan 承認後)は対象以外の Master Record の sort_order を正規化することがある。dryRun preview を確認。意図しない並び替えなら人間に止めてもらう(ホスト側の仕様確認)。詳細: agent.change-plans / agent.snapshot-field-values。

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoNew public identifier. Alias of value (both must match if sent). Required unless value is sent.
valueNoCompat alias of slug.
dryRunYesMust be true. Preview only — this tool never writes and never executes. dryRun:false / omitted is rejected (API is not called). After ok preview, propose_change(action: rename_master_record_slug). Help: agent.change-plans / agent.snapshot-field-values.
recordIdNoTarget master record UUID when known. API name: recordId.
currentSlugNoCurrent public identifier. Alias of currentValue (both must match if sent). Required when recordId is omitted.
currentValueNoCompat alias of currentSlug.
masterEntityKeyYesMaster entity key from list_master_entities (NOT a UUID). API name: masterEntityKey.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even though annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, the description adds substantial behavioral context beyond them. It discloses that dryRun:false/omitted is rejected without calling the API, that approved execution rewrites master_records.value and referenced Field snapshots, and that sort_order normalization may occur on other records. This is rich transparency that the annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but not bloated; every sentence conveys necessary constraints, warnings, or routing to propose_change. It is front-loaded with the purpose and required parameters, then covers behavior. Some redundancy exists with the schema-level description, but the tool's complexity justifies the length given the multiple parameter aliases and side-effect warnings.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the full workflow: what the tool does, required inputs, rejection behavior, execution path, side effects, and help references. With an output schema present, it does not need to describe return values. Minor gaps are the ambiguous 'schema/full' phrase and reliance on external help docs, but an agent has enough context to call this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter. The description adds value by clarifying the required combination groups (masterEntityKey + dryRun:true, slug or value, recordId or currentSlug/currentValue) and reinforcing that dryRun must be true. This cross-parameter logic is not obvious from individual property descriptions, so it earns above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool is a preview (schema/full) for renaming a Master Record's public identifier (slug/value). It explicitly says 'this tool does not write' and lists required parameters, making its scope unambiguous. It also differentiates from siblings by explaining that execution happens via propose_change and that update_master_record's value PATCH must not be used.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit when-to-use guidance: use this preview with dryRun:true, and then execute via propose_change(action: rename_master_record_slug). It explicitly warns against using update_master_record for this purpose and explains the consequences (snapshot breaks, 401). It also advises checking the dryRun preview for unintended sort_order changes, which is a clear conditional usage rule.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_revisionA
Idempotent

エントリ本文を新しい下書きリビジョンとして保存。必須: formSetId, entryId, snapshot。snapshot は { [formKey]: { [fieldKey]: value } }(フォームキー配下にネスト)。フラットな field_key トップレベルは 400。任意: idempotencyKey。返却の id → publish_revision の revisionRowId、revision → publish_revision の revision。形は get_form_set_schema または luno://content/schema-guide。

ParametersJSON Schema
NameRequiredDescriptionDefault
entryIdYesエントリの UUID(list_entries / create_entry / get_entry の id)
snapshotYesNested snapshot: { [formKey]: { [fieldKey]: value } }. NOT flat { fieldKey: value }. NOT Contact Form fields[]. See luno://content/schema-guide.
formSetIdYesForm Set の UUID(list_form_sets / apply_builtin_form_template / apply_form_blueprint / archive_form_set のレスポンス id。Form Set の slug 文字列ではない)
idempotencyKeyNo冪等キー(同一キー+同一引数の再送は同じ revision 行。異なる引数での再送は409 IDEMPOTENCY_KEY_CONFLICT。24時間で失効)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesrevisionRowId for get_pub_preview_url / publish_revision
statusYesdraft | pending_review | published | …
revisionYesrevision number for publish_revision

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds substantial behavior beyond annotations: it specifies that a flat top-level field_key snapshot returns 400, explains idempotency key semantics with 409 conflicts and 24-hour expiry, and describes how the returned id and revision feed into publish_revision. This is valuable operational context not present in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Every part of the description earns its place: purpose, required parameters, snapshot shape constraint, optional idempotency key, error behavior, and cross-tool return value mapping. It is front-loaded with the primary purpose and is dense without being verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity of the nested snapshot object, the presence of an output schema, and the idempotency behavior, the description is complete. It covers the required structure, the common failure mode (flat snapshot), idempotency semantics, and the downstream publish_revision contract, all while referencing get_form_set_schema and the schema guide for field-shape details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all four parameters thoroughly. The description restates the required parameters and nested snapshot shape, but adds little parameter-level meaning beyond what the schema provides. The main extra value is the output-to-publish_revision mapping, which is not parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'エントリ本文を新しい下書きリビジョンとして保存' (save entry body as a new draft revision). It clearly identifies the tool as creating a draft revision rather than publishing or listing revisions, which distinguishes it from siblings like publish_revision and list_revisions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The context of saving a new draft revision is clear, and the return-value mapping to publish_revision implies the workflow for which this tool is used. However, there is no explicit when-to-use or when-not-to-use guidance, and alternatives like update_entry or create_entry are not mentioned or excluded.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_admin_helpA
Read-onlyIdempotent

ヘルプ KB 検索。必須: q。任意: locale(ja|en), limit(既定 20)。category agent(snapshot / Form Blueprint / 公開 API / publish_revision)もヒット。

ParametersJSON Schema
NameRequiredDescriptionDefault
qYes検索クエリ
limitNo最大件数(既定 20)
localeNoレスポンス locale(既定 ja)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds genuine behavioral context beyond annotations and schema: the category agent also hits snapshot / Form Blueprint / public API / publish_revision content, meaning search results are not limited to standard help pages. Defaults for limit and locale are stated, though these duplicate the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but efficient: purpose is front-loaded, the parameter essentials (required/optional, enums, defaults) are packed into one compact clause, and the category note is the only extra. The telegraphic style sacrifices prose flow for information density, but every fragment earns its place; it could read slightly more naturally without adding length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Since an output schema exists, return-value explanation is unnecessary; combined with 100% parameter coverage and read-only/idempotent annotations, the definition is nearly complete. The one meaningful gap is the absence of guidance for choosing among search_admin_help, get_admin_help_article, and ask_admin_help — a boundary that would make this definition fully self-sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline of 3 applies. The description restates q as required, locale and limit as optional with defaults, which adds nothing beyond what the schema already documents. The category note is parameter-adjacent but describes search scope/behavior, not the meaning of any parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb-resource pair, 「ヘルプ KB 検索」 (search Help KB), and further sharpens scope with 「category agent(snapshot / Form Blueprint / 公開 API / publish_revision)もヒット」, clarifying what content the search will match. An agent can immediately tell this is query-based KB search rather than article retrieval (get_admin_help_article) or conversational Q&A (ask_admin_help), even without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The required q parameter and the verb 検索 imply this tool is for query-driven search of the help KB, so usage context is present. However, the description never states when to prefer this over the two closely-related siblings get_admin_help_article and ask_admin_help, nor gives any exclusions. With 52 siblings, explicit routing guidance would materially reduce mis-selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

start_agent_runA

エージェントタスクの Run を開始(schema/full)。必須: goal。任意: clientLabel(cursor / claude-code / mcp 等)。返却 agentRun.id を以降のツール呼び出しに X-Agent-Run-Id として自動付与(本 MCP セッション内)。詳細: settings.agent-activity / agent.mcp-security-permissions

ParametersJSON Schema
NameRequiredDescriptionDefault
goalYesWhat this agent task intends to accomplish
clientLabelNoOptional client label, e.g. cursor, claude-code, mcp

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNo
statusNo
agentRunNo

TDQS

A3.9/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With all annotation hints false, the description carries the full disclosure burden, and it discloses the most important non-obvious behavior: the returned agentRun.id is automatically propagated as X-Agent-Run-Id on subsequent tool calls within this MCP session — a session-scoped side effect an agent must know to use the tool correctly. It also points to settings (agent-activity, mcp-security-permissions) that can affect behavior. It does not contradict the annotations; it could further cover failure behavior, but the critical trait is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three compact sentences, front-loaded with the core action, then parameters, then the critical session-scoped ID side effect. No sentence is wasted. The trailing settings reference is cryptic (bare path names with no explanation) and 'schema/full' is unexplained, which keeps it from a 5, but the structure is efficient and well-ordered.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-value documentation is handled elsewhere, and the description adds the crucial auto-injection side effect plus settings pointers that an agent cannot infer from the schema. Minor gaps remain: no lifecycle guidance about pairing with end_agent_run or get_agent_run, and no warning about the effects of starting multiple concurrent runs. Strong for a session-starter tool, but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters adequately. The description adds the clientLabel examples and confirms the required/optional split, but introduces no deeper semantic meaning beyond what the schema provides. This matches the baseline-3 expectation when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('エージェントタスクの Run を開始' — start an agent task run), which clearly states the tool's core action. It is implicitly distinct from sibling tools get_agent_run and end_agent_run by the action type, though it never names them explicitly. The trailing '(schema/full)' fragment is slightly opaque but does not obscure the core purpose.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear invocation context: goal is explicitly marked 必須 (required) and clientLabel 任意 (optional) with concrete examples (cursor/claude-code/mcp). The post-condition — auto-attaching the returned agentRun.id as X-Agent-Run-Id to subsequent calls within the session — is valuable usage guidance. It provides no exclusions or explicit alternatives, but the context given is concrete rather than merely implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

submit_entry_for_reviewA

指定リビジョンを承認申請する(公開まで一括したい場合は publish_revision を優先)。必須: formSetId, entryId, revisionRowId(= save_revision の id), revision(= save_revision の revision)。

ParametersJSON Schema
NameRequiredDescriptionDefault
entryIdYesエントリの UUID(list_entries / create_entry / get_entry の id)
revisionYesリビジョン番号(save_revision / list_revisions の revision。publish_revision は save 直後の値で可)
formSetIdYesForm Set の UUID(list_form_sets / apply_builtin_form_template / apply_form_blueprint / archive_form_set のレスポンス id。Form Set の slug 文字列ではない)
revisionRowIdYesリビジョン行の UUID(save_revision / list_revisions のレスポンス id。revision 番号ではない)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description clarifies the core behavior—creating/submitting an approval request for a revision—and distinguishes it from direct publication. Annotations already indicate a non-read-only, non-idempotent, non-destructive operation; the description adds the workflow context. It does not discuss permissions, reversibility, or side effects in depth, but the essential behavior is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact, front-loads the core purpose and the alternative routing before the parameter list, and contains no filler. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a multi-step workflow tool, it provides purpose, an explicit alternative, and required parameter sources, and the output schema covers return values. It omits details such as required prior state of the revision or approval workflow behavior, but those are not essential for invoking the call correctly given the schema-rich inputs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the schema already explains revisionRowId as save_revision/list_revisions response id and revision as save_revision/list_revisions revision number. The description repeats this provenance without adding new parameter semantics, so it stays at the baseline for fully documented schemas.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action and resource: '指定リビジョンを承認申請する' (submit the specified revision for approval). It also differentiates itself from the sibling publish_revision by noting that sibling is for batching all the way to publication.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit routing guidance: if you want to go through to public release in one step, prefer publish_revision. The required parameters are also listed with their provenance from save_revision, which tells an agent where in the workflow this tool fits.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

translate_entry_localesA

text/textarea/tiptap をソース言語から他ロケールへ AI 翻訳(Standard+・AI チケット 1/回)。必須: sourceLocale, targetLocales(1–3), fields(各 formKey/fieldKey/type/sourceText)。返却 items を snapshot にマージして save_revision。

ParametersJSON Schema
NameRequiredDescriptionDefault
fieldsYes翻訳対象フィールド配列
sourceLocaleYes翻訳元 locale
targetLocalesYes翻訳先 locale 配列

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.2/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations, the description discloses meaningful behavioral details: it consumes an AI ticket per call, requires Standard+ plan, and it merges returned items into a snapshot and then calls save_revision. This clearly communicates side effects and cost, which the annotations alone do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is one dense, front-loaded sentence covering action, cost, required parameters, and the save-revision post-condition. Every clause carries information, with no filler or repetition of the tool name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core invocation requirements, side effects, and cost model. With an output schema present and full parameter documentation, very little is missing for an agent to call this tool correctly, though it could have elaborated on snapshot semantics or failure behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all parameters. The description restates required fields and constraints such as targetLocales (1–3) and fields structure, but adds little semantic value beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action: AI-translating text/textarea/tiptap content from a source locale to other locales. It also names the required payload shape and the follow-up merge into a snapshot with save_revision, clearly distinguishing this from generic CRUD and revision tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: when AI translation of entry fields across locales is needed, and it explains required inputs. However, it does not explicitly state when not to use it, nor does it reference alternatives such as save_revision or other locale-related tools among the siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_contact_formA
DestructiveIdempotent

Contact Form を更新(PUT・schema/full。GET した全フィールドを body に含める)。必須: formId(Contact Form UUID), slug, name, recipient_email, fields。任意: autoreply_*, email_signature。fields は { key, type, label:{ja,en}, required }[](Form Set の fieldKey ではない)。詳細: agent.contact-form-mcp。

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes表示名
slugYesContact Form slug
fieldsYesContact Form fields(必須)。{ key, type, label:{ja,en}, required }。NOT fieldKey.
formIdYesContact Form の UUID(作成・一覧レスポンスの id)
autoreply_bodyNo自動返信の本文 { ja, en }。plain string は不可
email_signatureNo通知メール末尾の署名 { ja, en }
recipient_emailYes通知先メール
autoreply_enabledNotrue で送信者へ自動返信メールを送る。省略時はオフ
autoreply_subjectNo自動返信の件名 { ja, en }。plain string は不可
autoreply_to_fieldNo自動返信の宛先にする fields[].key(通常 type=email)。無効時は null

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=true, and the description adds the key behavior that this is a full PUT (schema/full) and that the body must contain all fields from GET—implying replacement semantics. It also warns that fields uses key, not Form Set fieldKey, a common point of confusion. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences front-load the operation (update, PUT, full schema) then enumerate required/optional parameters and the fields format caveat. There is no filler, and the reference '詳細: agent.contact-form-mcp' is tucked at the end. It earns full marks for efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 10 parameters and nested objects, the description plus a 100%-covered schema and output schema cover the essentials: what, how, required/optional, and the field-key caveat. It doesn't explicitly address when to choose create_contact_form instead, and the '詳細: agent.contact-form-mcp' pointer is vague, leaving a small gap in guidance.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3; the description earns extra by grouping required and optional parameters and by explicitly flagging that fields is { key, type, label:{ja,en}, required }[] and NOT Form Set's fieldKey, which prevents an agent from using the wrong identifier. The 'GET した全フィールド' note also clarifies that the parameter set mirrors the GET response.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Contact Form を更新' (update Contact Form) and specifies the HTTP method PUT with schema/full, a clear verb+resource pair. It distinguishes the tool from the sibling create_contact_form by framing it as a full update that must include all fields from a preceding GET, so an agent can tell this from create without opening the schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear operational context: invoke after GET, include every field in the body, and only for existing Contact Forms (required formId UUID). It does not explicitly name create_contact_form as the alternative or state a when-not condition, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_entryC
Idempotent

エントリの slug を更新。必須: formSetId, entryId, slug。

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYes新しいエントリ slug
entryIdYesエントリの UUID(list_entries / create_entry / get_entry の id)
formSetIdYesForm Set の UUID(list_form_sets / apply_builtin_form_template / apply_form_blueprint / archive_form_set のレスポンス id。Form Set の slug 文字列ではない)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a non-read, non-destructive, idempotent operation. The description adds no additional behavioral context, such as slug uniqueness implications, effects on existing URLs, or validation behavior beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence with no filler. It front-loads the key purpose and required parameters, though it could have included slightly more contextual guidance without becoming verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple update operation with a fully documented schema and an output schema present, the description is minimally viable. It covers the core purpose and required inputs but lacks usage guidance and behavioral side effects, leaving some gaps for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with all three parameters already documented in detail. The description only restates the required parameter names without adding new meaning, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: updating an entry's slug, with a specific verb and resource. It is distinct from create/list operations but does not explicitly differentiate from sibling update tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives like create_entry, save_revision, or translate_entry_locales. The required parameters are listed, but no context or exclusion criteria are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_login_appearanceA
Idempotent

管理画面ログインの見た目を更新。任意(1 つ以上推奨): adminLoginBackground(cosmic|gradient|plain|none・Standard+), adminLoginHideLunoLogo, adminLoginHidePoweredBy(Business+)。

ParametersJSON Schema
NameRequiredDescriptionDefault
adminLoginBackgroundNo背景スタイル(Standard+)
adminLoginHideLunoLogoNoLUNO ロゴ非表示(Business+)
adminLoginHidePoweredByNoPowered by 非表示(Business+)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false, idempotentHint=true, and destructiveHint=false, so the safety profile is covered structurally. The description adds the plan-tier constraints (Standard+, Business+) which warn about parameter availability, a genuinely useful behavioral caveat, though it largely mirrors the schema's per-parameter notes. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single dense sentence with the purpose front-loaded and the parameter list compactly organized. It is efficient, though the per-parameter details partially duplicate the schema; the '1 つ以上推奨' note earns its place as additive guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter, all-optional update tool with an output schema and safety-relevant annotations present, the description covers the key decision factors: what gets updated, which parameters exist, and plan-level availability. The main gap is the lack of explicit routing to the read sibling get_login_appearance, but this is a minor omission given the tool's low complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter already documented (background enum values, hide-logo boolean, hide-powered-by boolean, plan tiers). The description restates the parameters and enum options but adds only one piece of new guidance: that one or more should be provided. Baseline 3 is appropriate since the schema carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource pair: '管理画面ログインの見た目を更新' (update the appearance of the admin console login). This clearly names the mutation action and its target, and the explicit parameter list scopes exactly what aspects are editable, distinguishing it from the read-only sibling get_login_appearance.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '更新' (update) verb and the parameter enumeration imply the usage context, and '任意(1 つ以上推奨)' gives useful call-construction guidance that at least one optional parameter should be provided. However, there is no explicit when-to-use vs. when-not-to-use statement, and the read-side alternative get_login_appearance is never named.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_master_recordA
Idempotent

マスタレコードを更新。必須: entityId, recordId。任意: label, value, sortOrder, parentRecordId, data, color(#RRGGBB。null で消す)。エージェント API キーでは不可(401 — ユーザ JWT + 編集権限が必要)。identifier(slug / value)の変更は rename_master_record_slug → propose_change。並び替え・色の一括は apply_master_blueprint を使う。

ParametersJSON Schema
NameRequiredDescriptionDefault
dataNo追加 JSON。既知キー以外の拡張データ
colorNo任意の #RRGGBB。null で色を消す
labelNo表示ラベル(string または { ja, en } 等の locale map)
valueNo選択肢 value。select/radio snapshot に入れる文字列
entityIdYesマスタエンティティ UUID(list_master_entities の id)
recordIdYesマスタレコード UUID(list_master_records / create_master_record の id)
sortOrderNo並び順(小さいほど先)
parentRecordIdNo親レコード UUID。ルートは null。階層マスタのみ

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are minimal (readOnlyHint=false, idempotentHint=true, destructiveHint=false), and the description adds critical behavioral context beyond those: agent API keys are rejected with 401, color accepts null to clear the value, and identifier changes require a different workflow. This gives the agent important operational details that annotations do not convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: the core action, required params, auth restriction, and routing to alternatives are all stated in a few sentences with no filler. Every sentence carries operational value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 8 parameters, nested objects, and an output schema, the description covers the essential operational context: required vs optional params, auth constraints, when to delegate to siblings, and the null behavior for color. Since an output schema exists and annotations cover idempotency/safety, nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so parameter semantics are already fully documented. The description restates required vs optional params and mentions the color null behavior, which mirrors the schema. It adds no significant new meaning beyond a concise summary, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('マスタレコードを更新' – update master record) and immediately enumerates the required and optional parameters. It also distinguishes itself from related tools by naming rename_master_record_slug and apply_master_blueprint for identifier changes and batch operations, so an agent can tell what this tool is for.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when NOT to use this tool: identifier (slug/value) changes should go through rename_master_record_slug → propose_change, and batch sorting/color should use apply_master_blueprint. It also states the auth requirement (user JWT + edit permission, agent API key rejected with 401), giving clear selection criteria.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_master_treeA
DestructiveIdempotent

階層マスタの親子・並び順を一括更新。必須: entityId, updates(全レコードを含める配列。各要素に id, parent_record_id, sort_order)。エージェントキーでは 403。

ParametersJSON Schema
NameRequiredDescriptionDefault
updatesYes全レコード分の tree 更新
entityIdYesマスタエンティティ UUID(list_master_entities の id)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already mark this as destructive and idempotent; the description adds meaningful context beyond that by requiring the full record set, implying a whole-tree replacement, and by disclosing the agent-key 403 restriction. No contradiction with readOnlyHint=false or destructiveHint=true is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single dense sentence front-loads the action and resource, then lists the required parameters, the all-records condition, and the auth caveat. There is no filler or redundant restatement of schema information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive bulk tree mutation, the description covers required inputs, the full-record replacement expectation, and the critical 403 restriction for agent keys. With an output schema present and idempotent/destructive annotations already provided, nothing essential for correct invocation is missing, though naming the single-record sibling would improve completeness slightly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides full descriptions for entityId and the updates array items, so the baseline is 3. The description adds the non-obvious semantic constraint that updates must include all records, which is not expressed in the schema, elevating it above baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb, '一括更新' (batch update), targeting '階層マスタの親子・並び順' (parent-child relationships and sort order of a hierarchy master). This clearly distinguishes the tool from single-record operations such as update_master_record and makes the bulk, tree-level scope explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states the required arguments and the important condition that the updates array must contain all records. It also warns that agent keys receive a 403, which is a clear usage restriction. It does not explicitly name alternatives like update_master_record for single-record updates, so it falls just short of full when-to-use/when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upload_mediaA

メディアライブラリへ画像/ファイルをアップロード(POST /v1/media)。必須(いずれか一方): sourceUrl / base64 / filePath(ローカルパス推奨)。任意: filename, mimeType, folderId。返却 id(UUID)を image / image_gallery に入れる(luno://content/schema-guide)。外部 URL を snapshot に直書きしない。stg/prod へローカル画像を上げるときは filePath(sourceUrl の 127.0.0.1 は届かない)。

ParametersJSON Schema
NameRequiredDescriptionDefault
base64NoFile content as base64
filePathNoLocal path on MCP host (recommended for stg/prod uploads)
filenameNoUpload filename
folderIdNoMedia folder UUID
mimeTypeNoMIME type
sourceUrlNohttp(s) URL the LUNO server fetches (not for localhost from remote MCP)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this is a mutating, non-idempotent operation. The description adds genuinely useful behavioral context beyond that: the server fetches from sourceUrl, localhost URLs fail from a remote MCP host, and the returned id must be routed into image/image_gallery fields. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but every clause earns its place: purpose, required/optional parameter groups, downstream usage, and two operational gotchas. Information is ordered logically from what → how → what-next → pitfalls, with no redundancy against the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-param write tool with full schema coverage, output schema, and annotations, the description covers the key decision (source selection), the key failure mode (localhost from remote MCP), and the correct follow-up (use returned id in image/image_gallery). Minor omissions like auth/permission requirements are not disclosed, but complexity level is well served.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema already documents each parameter. The description adds critical meaning beyond the schema: the 'exactly one of sourceUrl/base64/filePath' constraint (which the schema incorrectly leaves all-optional) and the recommendation/preference between filePath and sourceUrl depending on environment.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description states a specific verb (upload) + resource (media library) plus the exact endpoint (POST /v1/media), making the operation unambiguous. It also states what the tool returns (id UUID) and is clearly distinguishable from the read-only sibling list_media.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit selection rules among the three mutually exclusive sources (sourceUrl/base64/filePath) and environment-specific guidance: use filePath for local images in stg/prod because sourceUrl with 127.0.0.1 won't reach. Includes exclusions (don't write external URLs directly into snapshot), though it doesn't explicitly name sibling tools as alternatives for the when-not-to-use decision.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_master_blueprintA
Read-onlyIdempotent

Master Blueprint を検証(schema/full)。必須: entities(1 件以上の配列)。各 entity: key, name, records[{ value, label, sort_order }]。適用はしない。詳細: agent.master-blueprint-mcp, luno://content/schema-guide。

ParametersJSON Schema
NameRequiredDescriptionDefault
entitiesYesMaster Blueprint entities array. Help: agent.master-blueprint-mcp. publish:true reflects to public master API.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoPrimary resource UUID for the next tool call
okNo
nameNo
slugNoURL slug when the resource has one
itemsNoList rows; pass item.id to get_*/update_*
statusNoResource or revision status

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds that it validates schema/full and that it does not apply changes, which is valuable behavioral context beyond the annotations. It also notes the tool is read-only in effect. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: three sentences including requirements, behavior, and pointers to further docs. Information is front-loaded with the action and scope. A small deduction because the schema size is large relative to the description, but the description itself is efficient and every sentence carries useful information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a validation-only tool with a full input schema and an output schema present, the description covers what validates, required top-level shape, required fields per entity, that it doesn't apply, and where to get more details. Annotations cover safety and idempotency. Nothing critical is missing for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the input schema already documents the single entities parameter and all nested fields thoroughly. The description adds a top-level constraint (entities must be a non-empty array, each entity must have key, name, records with value/label/sort_order), but this mostly repeats what the schema already encodes. The description does clarify 'sort_order' is required in the text but the schema marks records items requiring value and label only; however, the text appears consistent with the schema's nested requirements. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb (validate), a specific resource (Master Blueprint), and the validation scope (schema/full). It also explicitly says validation is not applied, which distinguishes it from apply_master_blueprint. However, it doesn't explicitly name that sibling or other alternatives, so differentiation is mostly implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says '適用はしない' (does not apply), which clearly signals this is a validation-only tool, distinct from apply_master_blueprint and similar mutation tools. It also points to external help references (agent.master-blueprint-mcp, luno://content/schema-guide). It gives clear context for when to use the tool but doesn't explicitly state when not to use it or name alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updatesv0.1.6
    • Addedget_mcp_runtime
    • Changedmigrate_field_to_master_reference1 field changed
      • changedInput schema / description
        Previous value: -"enum → Master Reference preview. Required: formSetSlug, fieldKey, masterEntityKey, dryRun:true. Do not use apply_form_blueprint / update_field / update_field_type. Execute via propose_change. Help: agent.change-plans / agent.form-blueprint-mcp."New value: +"enum → Master Reference preview. Required: formSetSlug, fieldKey, masterEntityKey, dryRun:true. Do not use apply_form_blueprint / update_field / update_field_type. Execute via propose_change. Snapshot values become Master value (frontend hardcoded compares are a separate change). If dryRun sees no enum, constraints may be a JSONB string — inspect get_form_set_schema. Help: agent.change-plans / agent.form-blueprint-mcp."
    • Changedrename_master_record_slug1 field changed
      • changedInput schema / description
        Previous value: -"Master Record slug rename preview. Required: masterEntityKey, dryRun:true, slug or value, and recordId or currentSlug/currentValue. Public name is slug; value is compat dual. Do not PATCH update_master_record for identifier changes. Execute via propose_change. Help: agent.change-plans / agent.snapshot-field-values."New value: +"Master Record slug rename preview. Required: masterEntityKey, dryRun:true, slug or value, and recordId or currentSlug/currentValue. Public name is slug; value is compat dual. Do not PATCH update_master_record for identifier changes. Execute via propose_change may renormalize sort_order on other records — inspect dryRun preview. Help: agent.change-plans / agent.snapshot-field-values."
  2. 9 tool updatesv0.1.5
    • Changedapply_form_blueprint1 field changed
      • changedInput schema / properties / dryRun / description
        Previous value: -"true で適用せずプレビュー"New value: +"true で適用せず実行可能性を検証。ok+wouldSucceed のときだけ本実行。kind=create は新規、kind=update は加算、kind=migrate は textarea→tiptap"
    • Changedapply_master_blueprint2 fields changed
      • changedInput schema / properties / entities / items / properties / records / items / description
        Previous value: -"Master record row. Agents cannot call update_master_record — set sort_order here."New value: +"Master record row. Agents cannot call update_master_record — set sort_order and optional color here."
      • addedInput schema / properties / entities / items / properties / records / items / properties / color
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^#[0-9a-fA-F]{6}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Optional #RRGGBB. Omit keeps existing color (create = none). null clears."
        +}
    • Changedcreate_contact_form1 field changed
      • addedInput schema / properties / dryRun
        Added value: +{
        +  "description": "true で作成せず検証のみ。ok+wouldSucceed のときだけ本実行。削除不可なので dryRun を省略しない",
        +  "type": "boolean"
        +}
    • Changedcreate_master_record1 field changed
      • addedInput schema / properties / color
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^#[0-9a-fA-F]{6}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "任意の #RRGGBB。省略または null は色なし"
        +}
    • Addedmigrate_field_to_master_reference
    • Changedpropose_change2 fields changed
      • changedInput schema / properties / steps / items / properties / action / description
        Previous value: -"apply_form_blueprint | apply_builtin_form_template | apply_master_blueprint"New value: +"apply_form_blueprint | apply_builtin_form_template | apply_master_blueprint | migrate_field_to_master_reference | rename_master_record_slug"
      • changedInput schema / properties / steps / items / properties / action / enum
        Previous value: -[
        -  "apply_form_blueprint",
        -  "apply_builtin_form_template",
        -  "apply_master_blueprint"
        -]New value: +[
        +  "apply_form_blueprint",
        +  "apply_builtin_form_template",
        +  "apply_master_blueprint",
        +  "migrate_field_to_master_reference",
        +  "rename_master_record_slug"
        +]
    • Addedrename_master_record_slug
    • Changedupdate_master_record1 field changed
      • addedInput schema / properties / color
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^#[0-9a-fA-F]{6}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "任意の #RRGGBB。null で色を消す"
        +}
    • Changedvalidate_master_blueprint2 fields changed
      • changedInput schema / properties / entities / items / properties / records / items / description
        Previous value: -"Master record row. Agents cannot call update_master_record — set sort_order here."New value: +"Master record row. Agents cannot call update_master_record — set sort_order and optional color here."
      • addedInput schema / properties / entities / items / properties / records / items / properties / color
        Added value: +{
        +  "anyOf": [
        +    {
        +      "pattern": "^#[0-9a-fA-F]{6}$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Optional #RRGGBB. Omit keeps existing color (create = none). null clears."
        +}
  3. 49 tool updatesv0.1.4
    • Changedadd_console_login_ip_allowlist1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedapply_builtin_form_template1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedapply_form_blueprint12 fields changed
      • addedInput schema / properties / blueprint / properties / contentListColumns / description
        Added value: +"Console entry-list columns"
      • addedInput schema / properties / blueprint / properties / contentListColumns / items / properties / fieldKey / description
        Added value: +"Field key shown as a list column"
      • addedInput schema / properties / blueprint / properties / contentListColumns / items / properties / formKey / description
        Added value: +"Form block key"
      • addedInput schema / properties / blueprint / properties / contentSearchColumns / description
        Added value: +"Console entry-search columns"
      • addedInput schema / properties / blueprint / properties / contentSearchColumns / items / properties / fieldKey / description
        Added value: +"Field key included in search"
      • addedInput schema / properties / blueprint / properties / contentSearchColumns / items / properties / formKey / description
        Added value: +"Form block key"
      • addedInput schema / properties / blueprint / properties / forms / items / properties / label / description
        Added value: +"Form block display label"
      • addedInput schema / properties / blueprint / properties / forms / items / properties / sortOrder / description
        Added value: +"Form block order"
      • addedInput schema / properties / blueprint / properties / forms / items / properties / sort_order / description
        Added value: +"Snake_case alias for sortOrder"
      • addedInput schema / properties / blueprint / properties / notes / description
        Added value: +"Human-readable notes for Console review"
      • addedInput schema / properties / blueprint / properties / provenance / description
        Added value: +"Optional origin metadata (not applied as schema)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedapply_master_blueprint2 fields changed
      • addedInput schema / properties / entities / items / properties / description / description
        Added value: +"Master entity description"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedarchive_form_set1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedask_admin_help1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedbulk_create_entries1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcreate_contact_form17 fields changed
      • addedInput schema / properties / autoreply_body / description
        Added value: +"自動返信の本文 { ja, en }。plain string は不可"
      • addedInput schema / properties / autoreply_body / properties / en / description
        Added value: +"English text"
      • addedInput schema / properties / autoreply_body / properties / ja / description
        Added value: +"日本語テキスト"
      • addedInput schema / properties / autoreply_enabled / description
        Added value: +"true で送信者へ自動返信メールを送る。省略時はオフ"
      • addedInput schema / properties / autoreply_subject / description
        Added value: +"自動返信の件名 { ja, en }。plain string は不可"
      • addedInput schema / properties / autoreply_subject / properties / en / description
        Added value: +"English text"
      • addedInput schema / properties / autoreply_subject / properties / ja / description
        Added value: +"日本語テキスト"
      • addedInput schema / properties / autoreply_to_field / description
        Added value: +"自動返信の宛先にする fields[].key(通常 type=email)。無効時は null"
      • addedInput schema / properties / email_signature / description
        Added value: +"通知メール末尾の署名 { ja, en }"
      • addedInput schema / properties / email_signature / properties / en / description
        Added value: +"English text"
      • addedInput schema / properties / email_signature / properties / ja / description
        Added value: +"日本語テキスト"
      • addedInput schema / properties / fields / items / properties / acceptedTypes / description
        Added value: +"type=file の accept 属性(例: image/*)"
      • addedInput schema / properties / fields / items / properties / maxFileSizeMb / description
        Added value: +"type=file の最大サイズ(MB)"
      • changedInput schema / properties / fields / items / properties / options / items / properties / label / description
        Previous value: -"Locale map { ja, en }. A plain string is invalid."New value: +"選択肢ラベル { ja, en }"
      • addedInput schema / properties / fields / items / properties / options / items / properties / value / description
        Added value: +"選択肢 value(送信値)"
      • changedInput schema / properties / fields / items / properties / placeholder / description
        Previous value: -"Locale map { ja, en }. A plain string is invalid."New value: +"入力欄プレースホルダ { ja, en }"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcreate_entry1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedcreate_master_record1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changeddelete_console_login_ip_allowlist1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "deleted": {
        +      "description": "Deleted IP allowlist rule UUID",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "deleted"
        +  ],
        +  "type": "object"
        +}
    • Addedend_agent_run
    • Changedget_admin_help_article1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedget_agent_run
    • Addedget_change_plan
    • Changedget_entry1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_form_set_schema1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "formSet": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "id": {
        +          "description": "formSetId",
        +          "type": "string"
        +        },
        +        "name": {
        +          "type": "string"
        +        },
        +        "slug": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "slug",
        +        "name"
        +      ],
        +      "type": "object"
        +    },
        +    "forms": {
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "mastersSummary": {
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "snapshotShape": {
        +      "additionalProperties": {},
        +      "description": "Use example as the save_revision snapshot nest shape",
        +      "properties": {
        +        "description": {
        +          "type": "string"
        +        },
        +        "example": {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "formKeys": {
        +          "items": {
        +            "type": "string"
        +          },
        +          "type": "array"
        +        }
        +      },
        +      "type": "object"
        +    }
        +  },
        +  "required": [
        +    "formSet",
        +    "forms"
        +  ],
        +  "type": "object"
        +}
    • Changedget_funnel_status1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_login_appearance1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_login_branding1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_master_entity1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_project_content_locales1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_project_overview1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_pub_preview_url1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "url": {
        +      "description": "Browser URL for a human to preview the draft",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedget_public_api_info1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "adminApiUrl": {
        +      "type": "string"
        +    },
        +    "exampleEntryUrl": {
        +      "type": "string"
        +    },
        +    "exampleMasterEntitiesUrl": {
        +      "type": "string"
        +    },
        +    "exampleMasterRecordsUrl": {
        +      "type": "string"
        +    },
        +    "hostBasedPublicApiBaseUrl": {
        +      "type": "string"
        +    },
        +    "notes": {
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "projectId": {
        +      "description": "Agent key project UUID",
        +      "type": "string"
        +    },
        +    "publicApiBaseUrl": {
        +      "description": "Preferred /public/p/{projectId}/v1 base",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "projectId",
        +    "adminApiUrl",
        +    "publicApiBaseUrl",
        +    "hostBasedPublicApiBaseUrl",
        +    "exampleEntryUrl",
        +    "exampleMasterEntitiesUrl",
        +    "exampleMasterRecordsUrl",
        +    "notes"
        +  ],
        +  "type": "object"
        +}
    • Changedget_tenant_schema1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedlist_builtin_form_templates1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedlist_console_login_ip_allowlists1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedlist_entries1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedlist_form_sets1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedlist_master_entities1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedlist_master_records1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedlist_media1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedlist_revisions1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "items": {
        +      "description": "Revisions; use id + revision to publish",
        +      "items": {
        +        "additionalProperties": {},
        +        "properties": {
        +          "id": {
        +            "description": "revisionRowId for get_pub_preview_url / publish_revision",
        +            "type": "string"
        +          },
        +          "revision": {
        +            "description": "revision number for publish_revision",
        +            "maximum": 9007199254740991,
        +            "minimum": -9007199254740991,
        +            "type": "integer"
        +          },
        +          "status": {
        +            "description": "draft | pending_review | published | …",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "revision",
        +          "status"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "required": [
        +    "items"
        +  ],
        +  "type": "object"
        +}
    • Changedpatch_project_content_locales1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedpropose_change
    • Changedpublish_revision1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "pendingHumanApproval": {
        +      "description": "true → stop; a human must approve in Console",
        +      "type": "boolean"
        +    },
        +    "revision": {
        +      "additionalProperties": {},
        +      "properties": {
        +        "id": {
        +          "description": "revisionRowId for get_pub_preview_url / publish_revision",
        +          "type": "string"
        +        },
        +        "revision": {
        +          "description": "revision number for publish_revision",
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        },
        +        "status": {
        +          "description": "draft | pending_review | published | …",
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "revision",
        +        "status"
        +      ],
        +      "type": "object"
        +    },
        +    "steps": {
        +      "description": "Server-side publish steps already applied",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedsave_revision1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "properties": {
        +    "id": {
        +      "description": "revisionRowId for get_pub_preview_url / publish_revision",
        +      "type": "string"
        +    },
        +    "revision": {
        +      "description": "revision number for publish_revision",
        +      "maximum": 9007199254740991,
        +      "minimum": -9007199254740991,
        +      "type": "integer"
        +    },
        +    "status": {
        +      "description": "draft | pending_review | published | …",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "revision",
        +    "status"
        +  ],
        +  "type": "object"
        +}
    • Changedsearch_admin_help1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Addedstart_agent_run
    • Changedsubmit_entry_for_review1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedtranslate_entry_locales3 fields changed
      • addedInput schema / properties / fields / items / properties / label / description
        Added value: +"フィールド表示名(プロンプト用。省略可)"
      • addedInput schema / properties / fields / items / properties / type / description
        Added value: +"翻訳対象フィールド型(text | textarea | tiptap)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedupdate_contact_form17 fields changed
      • addedInput schema / properties / autoreply_body / description
        Added value: +"自動返信の本文 { ja, en }。plain string は不可"
      • addedInput schema / properties / autoreply_body / properties / en / description
        Added value: +"English text"
      • addedInput schema / properties / autoreply_body / properties / ja / description
        Added value: +"日本語テキスト"
      • addedInput schema / properties / autoreply_enabled / description
        Added value: +"true で送信者へ自動返信メールを送る。省略時はオフ"
      • addedInput schema / properties / autoreply_subject / description
        Added value: +"自動返信の件名 { ja, en }。plain string は不可"
      • addedInput schema / properties / autoreply_subject / properties / en / description
        Added value: +"English text"
      • addedInput schema / properties / autoreply_subject / properties / ja / description
        Added value: +"日本語テキスト"
      • addedInput schema / properties / autoreply_to_field / description
        Added value: +"自動返信の宛先にする fields[].key(通常 type=email)。無効時は null"
      • addedInput schema / properties / email_signature / description
        Added value: +"通知メール末尾の署名 { ja, en }"
      • addedInput schema / properties / email_signature / properties / en / description
        Added value: +"English text"
      • addedInput schema / properties / email_signature / properties / ja / description
        Added value: +"日本語テキスト"
      • addedInput schema / properties / fields / items / properties / acceptedTypes / description
        Added value: +"type=file の accept 属性(例: image/*)"
      • addedInput schema / properties / fields / items / properties / maxFileSizeMb / description
        Added value: +"type=file の最大サイズ(MB)"
      • changedInput schema / properties / fields / items / properties / options / items / properties / label / description
        Previous value: -"Locale map { ja, en }. A plain string is invalid."New value: +"選択肢ラベル { ja, en }"
      • addedInput schema / properties / fields / items / properties / options / items / properties / value / description
        Added value: +"選択肢 value(送信値)"
      • changedInput schema / properties / fields / items / properties / placeholder / description
        Previous value: -"Locale map { ja, en }. A plain string is invalid."New value: +"入力欄プレースホルダ { ja, en }"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedupdate_entry1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedupdate_login_appearance1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedupdate_master_record6 fields changed
      • addedInput schema / properties / data / description
        Added value: +"追加 JSON。既知キー以外の拡張データ"
      • addedInput schema / properties / label / description
        Added value: +"表示ラベル(string または { ja, en } 等の locale map)"
      • addedInput schema / properties / parentRecordId / description
        Added value: +"親レコード UUID。ルートは null。階層マスタのみ"
      • addedInput schema / properties / sortOrder / description
        Added value: +"並び順(小さいほど先)"
      • addedInput schema / properties / value / description
        Added value: +"選択肢 value。select/radio snapshot に入れる文字列"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedupdate_master_tree3 fields changed
      • addedInput schema / properties / updates / items / properties / parent_record_id / description
        Added value: +"親レコード UUID。ルートは null"
      • addedInput schema / properties / updates / items / properties / sort_order / description
        Added value: +"同じ親の下での並び(0始まり)"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedupload_media1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
    • Changedvalidate_master_blueprint2 fields changed
      • addedInput schema / properties / entities / items / properties / description / description
        Added value: +"Master entity description"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": {},
        +  "definitions": {
        +    "__schema0": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "number"
        +        },
        +        {
        +          "type": "boolean"
        +        },
        +        {
        +          "type": "null"
        +        },
        +        {
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "additionalProperties": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        }
        +      ]
        +    }
        +  },
        +  "properties": {
        +    "id": {
        +      "description": "Primary resource UUID for the next tool call",
        +      "type": "string"
        +    },
        +    "items": {
        +      "description": "List rows; pass item.id to get_*/update_*",
        +      "items": {
        +        "additionalProperties": {
        +          "$ref": "#/definitions/__schema0"
        +        },
        +        "propertyNames": {
        +          "type": "string"
        +        },
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "name": {
        +      "type": "string"
        +    },
        +    "ok": {
        +      "type": "boolean"
        +    },
        +    "slug": {
        +      "description": "URL slug when the resource has one",
        +      "type": "string"
        +    },
        +    "status": {
        +      "description": "Resource or revision status",
        +      "type": "string"
        +    }
        +  },
        +  "type": "object"
        +}
  4. 8 tool updatesv0.1.1
    • Changedapply_builtin_form_template8 fields changed
      • addedInput schema / description
        Added value: +"Builtin template apply args — templateSlug XOR templateId required"
      • changedInput schema / properties / description / description
        Previous value: -"Form Set 説明(任意)"New value: +"Optional Form Set description"
      • changedInput schema / properties / dryRun / description
        Previous value: -"true で適用せずプレビュー"New value: +"true to preview without creating"
      • changedInput schema / properties / idempotencyKey / description
        Previous value: -"冪等キー(同一キー+同一引数の再送は同じ結果を返す。異なる引数での再送は409 IDEMPOTENCY_KEY_CONFLICT。24時間で失効)"New value: +"Idempotency key (409 on conflicting reuse within 24h)"
      • changedInput schema / properties / name / description
        Previous value: -"新規作成する Form Set の表示名"New value: +"New Form Set display name"
      • changedInput schema / properties / slug / description
        Previous value: -"新規作成する Form Set の slug(テンプレ slug とは別)"New value: +"New Form Set slug (NOT template slug)"
      • changedInput schema / properties / templateId / description
        Previous value: -"DB 保存テンプレートの UUID(互換)"New value: +"DB template UUID (legacy)"
      • changedInput schema / properties / templateSlug / description
        Previous value: -"list_builtin_form_templates の slug(推奨)"New value: +"list_builtin_form_templates slug (recommended)"
    • Changedapply_form_blueprint5 fields changed
      • changedInput schema / properties / blueprint / additionalProperties
        Previous value: -{}New value: +false
      • changedInput schema / properties / blueprint / description
        Previous value: -"Form Blueprint JSON"New value: +"Form Blueprint JSON (Form Set). fieldKey/sortOrder shape. NOT Contact Form fields. Help: agent.form-blueprint-mcp, luno://content/schema-guide."
      • addedInput schema / properties / blueprint / properties
        Added value: +{
        +  "contentListColumns": {
        +    "items": {
        +      "properties": {
        +        "fieldKey": {
        +          "type": "string"
        +        },
        +        "formKey": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "formKey",
        +        "fieldKey"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "contentSearchColumns": {
        +    "items": {
        +      "properties": {
        +        "fieldKey": {
        +          "type": "string"
        +        },
        +        "formKey": {
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "formKey",
        +        "fieldKey"
        +      ],
        +      "type": "object"
        +    },
        +    "type": "array"
        +  },
        +  "formSet": {
        +    "description": "Target Form Set metadata",
        +    "properties": {
        +      "description": {
        +        "anyOf": [
        +          {
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "Optional description"
        +      },
        +      "name": {
        +        "description": "Form Set display name",
        +        "maxLength": 500,
        +        "minLength": 1,
        +        "type": "string"
        +      },
        +      "slug": {
        +        "description": "Form Set URL slug",
        +        "maxLength": 100,
        +        "minLength": 1,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "slug",
        +      "name"
        +    ],
        +    "type": "object"
        +  },
        +  "forms": {
        +    "description": "Non-empty forms array",
        +    "items": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "fields": {
        +          "description": "Non-empty fields array with fieldKey (NOT Contact Form fields shape)",
        +          "items": {
        +            "additionalProperties": false,
        +            "description": "Form Set field definition. Use fieldKey + sortOrder. Do NOT use Contact Form { key, label:{ja,en} }.",
        +            "properties": {
        +              "constraints": {
        +                "additionalProperties": {},
        +                "description": "Type-specific constraints (enum, maxLength, etc.)",
        +                "propertyNames": {
        +                  "type": "string"
        +                },
        +                "type": "object"
        +              },
        +              "fieldKey": {
        +                "description": "Form Set field key (NOT Contact Form `key` / NOT field_key at blueprint root)",
        +                "maxLength": 100,
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "label": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Display label"
        +              },
        +              "localizable": {
        +                "description": "true only for text / textarea / tiptap",
        +                "type": "boolean"
        +              },
        +              "masterEntityId": {
        +                "description": "Master entity UUID for select/radio/multiselect",
        +                "format": "uuid",
        +                "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
        +                "type": "string"
        +              },
        +              "masterEntityKey": {
        +                "description": "Master entity key to upsert on apply (alternative to masterEntityId)",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "masterEntityName": {
        +                "description": "Display name when using masterEntityKey",
        +                "minLength": 1,
        +                "type": "string"
        +              },
        +              "sortOrder": {
        +                "description": "Field order (sort_order alias also accepted by API)",
        +                "maximum": 9007199254740991,
        +                "minimum": -9007199254740991,
        +                "type": "integer"
        +              },
        +              "sort_order": {
        +                "description": "Snake_case alias for sortOrder",
        +                "maximum": 9007199254740991,
        +                "minimum": -9007199254740991,
        +                "type": "integer"
        +              },
        +              "type": {
        +                "description": "Field type — see luno://forms/field-types",
        +                "enum": [
        +                  "text",
        +                  "url",
        +                  "textarea",
        +                  "tiptap",
        +                  "number",
        +                  "boolean",
        +                  "date",
        +                  "select",
        +                  "radio",
        +                  "multiselect",
        +                  "image",
        +                  "image_gallery",
        +                  "file",
        +                  "video_embed",
        +                  "entry_ref"
        +                ],
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "fieldKey",
        +              "type"
        +            ],
        +            "type": "object"
        +          },
        +          "minItems": 1,
        +          "type": "array"
        +        },
        +        "key": {
        +          "description": "Form block key (nested under blueprint.forms)",
        +          "maxLength": 100,
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "label": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ]
        +        },
        +        "sortOrder": {
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        },
        +        "sort_order": {
        +          "maximum": 9007199254740991,
        +          "minimum": -9007199254740991,
        +          "type": "integer"
        +        }
        +      },
        +      "required": [
        +        "key",
        +        "fields"
        +      ],
        +      "type": "object"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  },
        +  "notes": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "provenance": {
        +    "additionalProperties": {},
        +    "propertyNames": {
        +      "type": "string"
        +    },
        +    "type": "object"
        +  },
        +  "version": {
        +    "description": "Blueprint version. Use latest: 2026-05-12",
        +    "enum": [
        +      "2026-03-31",
        +      "2026-05-12"
        +    ],
        +    "type": "string"
        +  }
        +}
      • removedInput schema / properties / blueprint / propertyNames
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / blueprint / required
        Added value: +[
        +  "version",
        +  "formSet",
        +  "forms"
        +]
    • Changedapply_master_blueprint6 fields changed
      • changedInput schema / properties / entities / description
        Previous value: -"Master Blueprint entities 配列"New value: +"Master Blueprint entities array. Help: agent.master-blueprint-mcp. publish:true reflects to public master API."
      • changedInput schema / properties / entities / items / additionalProperties
        Previous value: -{}New value: +false
      • addedInput schema / properties / entities / items / description
        Added value: +"One master entity with records to upsert"
      • addedInput schema / properties / entities / items / properties
        Added value: +{
        +  "description": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ]
        +  },
        +  "hierarchical": {
        +    "description": "true for parent/child records",
        +    "type": "boolean"
        +  },
        +  "key": {
        +    "description": "Master entity key (slug-style, NOT UUID)",
        +    "maxLength": 100,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "name": {
        +    "description": "Master display name",
        +    "maxLength": 500,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "records": {
        +    "description": "Non-empty records array with value + label",
        +    "items": {
        +      "additionalProperties": false,
        +      "description": "Master record row. Agents cannot call update_master_record — set sort_order here.",
        +      "properties": {
        +        "data": {
        +          "additionalProperties": {},
        +          "description": "Optional extra JSON",
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "label": {
        +          "description": "Display label",
        +          "maxLength": 500,
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "parent_value": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Parent record value for hierarchical masters"
        +        },
        +        "sortOrder": {
        +          "description": "CamelCase alias for sort_order",
        +          "type": "number"
        +        },
        +        "sort_order": {
        +          "description": "Sort order (sortOrder alias also accepted)",
        +          "type": "number"
        +        },
        +        "value": {
        +          "description": "Record value ID used in select snapshots / columnFilters (NOT record UUID)",
        +          "maxLength": 500,
        +          "minLength": 1,
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "value",
        +        "label"
        +      ],
        +      "type": "object"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +}
      • removedInput schema / properties / entities / items / propertyNames
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / entities / items / required
        Added value: +[
        +  "key",
        +  "name",
        +  "records"
        +]
    • Addedbulk_create_entries
    • Addedget_pub_preview_url
    • Changedsave_revision6 fields changed
      • addedInput schema / properties / snapshot / additionalProperties / additionalProperties
        Added value: +{
        +  "description": "Field value (string, number, boolean, array, Tiptap doc JSON, asset UUID, etc.). Shapes: luno://content/schema-guide or get_form_set_schema.snapshotShape.example"
        +}
      • addedInput schema / properties / snapshot / additionalProperties / description
        Added value: +"Per-form field map { [fieldKey]: value }. Do NOT put fieldKey at the snapshot top level."
      • addedInput schema / properties / snapshot / additionalProperties / propertyNames
        Added value: +{
        +  "description": "fieldKey from get_form_set_schema (NOT form key)",
        +  "type": "string"
        +}
      • addedInput schema / properties / snapshot / additionalProperties / type
        Added value: +"object"
      • changedInput schema / properties / snapshot / description
        Previous value: -"ネストした snapshot オブジェクト"New value: +"Nested snapshot: { [formKey]: { [fieldKey]: value } }. NOT flat { fieldKey: value }. NOT Contact Form fields[]. See luno://content/schema-guide."
      • addedInput schema / properties / snapshot / propertyNames / description
        Added value: +"form key from get_form_set_schema.forms[].key"
    • Changedupload_media6 fields changed
      • addedInput schema / description
        Added value: +"Upload source — pick ONE of sourceUrl / base64 / filePath. Returned id (UUID) goes in image / image_gallery snapshot fields."
      • changedInput schema / properties / base64 / description
        Previous value: -"ファイルの base64"New value: +"File content as base64"
      • changedInput schema / properties / filePath / description
        Previous value: -"MCP ホスト上のローカルパス(stg/prod 推奨)"New value: +"Local path on MCP host (recommended for stg/prod uploads)"
      • changedInput schema / properties / filename / description
        Previous value: -"アップロードファイル名"New value: +"Upload filename"
      • changedInput schema / properties / folderId / description
        Previous value: -"メディアフォルダ UUID"New value: +"Media folder UUID"
      • changedInput schema / properties / sourceUrl / description
        Previous value: -"LUNO サーバーが取得する http(s) URL"New value: +"http(s) URL the LUNO server fetches (not for localhost from remote MCP)"
    • Changedvalidate_master_blueprint6 fields changed
      • changedInput schema / properties / entities / description
        Previous value: -"Master Blueprint entities 配列"New value: +"Master Blueprint entities array. Help: agent.master-blueprint-mcp. publish:true reflects to public master API."
      • changedInput schema / properties / entities / items / additionalProperties
        Previous value: -{}New value: +false
      • addedInput schema / properties / entities / items / description
        Added value: +"One master entity with records to upsert"
      • addedInput schema / properties / entities / items / properties
        Added value: +{
        +  "description": {
        +    "anyOf": [
        +      {
        +        "type": "string"
        +      },
        +      {
        +        "type": "null"
        +      }
        +    ]
        +  },
        +  "hierarchical": {
        +    "description": "true for parent/child records",
        +    "type": "boolean"
        +  },
        +  "key": {
        +    "description": "Master entity key (slug-style, NOT UUID)",
        +    "maxLength": 100,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "name": {
        +    "description": "Master display name",
        +    "maxLength": 500,
        +    "minLength": 1,
        +    "type": "string"
        +  },
        +  "records": {
        +    "description": "Non-empty records array with value + label",
        +    "items": {
        +      "additionalProperties": false,
        +      "description": "Master record row. Agents cannot call update_master_record — set sort_order here.",
        +      "properties": {
        +        "data": {
        +          "additionalProperties": {},
        +          "description": "Optional extra JSON",
        +          "propertyNames": {
        +            "type": "string"
        +          },
        +          "type": "object"
        +        },
        +        "label": {
        +          "description": "Display label",
        +          "maxLength": 500,
        +          "minLength": 1,
        +          "type": "string"
        +        },
        +        "parent_value": {
        +          "anyOf": [
        +            {
        +              "type": "string"
        +            },
        +            {
        +              "type": "null"
        +            }
        +          ],
        +          "description": "Parent record value for hierarchical masters"
        +        },
        +        "sortOrder": {
        +          "description": "CamelCase alias for sort_order",
        +          "type": "number"
        +        },
        +        "sort_order": {
        +          "description": "Sort order (sortOrder alias also accepted)",
        +          "type": "number"
        +        },
        +        "value": {
        +          "description": "Record value ID used in select snapshots / columnFilters (NOT record UUID)",
        +          "maxLength": 500,
        +          "minLength": 1,
        +          "type": "string"
        +        }
        +      },
        +      "required": [
        +        "value",
        +        "label"
        +      ],
        +      "type": "object"
        +    },
        +    "minItems": 1,
        +    "type": "array"
        +  }
        +}
      • removedInput schema / properties / entities / items / propertyNames
        Removed value: -{
        -  "type": "string"
        -}
      • addedInput schema / properties / entities / items / required
        Added value: +[
        +  "key",
        +  "name",
        +  "records"
        +]
  5. 42 tool updates
    • First observedadd_console_login_ip_allowlist
    • First observedapply_builtin_form_template
    • First observedapply_form_blueprint
    • First observedapply_master_blueprint
    • First observedarchive_form_set
    • First observedask_admin_help
    • First observedcreate_contact_form
    • First observedcreate_entry
    • First observedcreate_master_record
    • First observeddelete_console_login_ip_allowlist
    • First observedget_admin_help_article
    • First observedget_entry
    • First observedget_form_set_schema
    • First observedget_funnel_status
    • First observedget_login_appearance
    • First observedget_login_branding
    • First observedget_master_entity
    • First observedget_project_content_locales
    • First observedget_project_overview
    • First observedget_public_api_info
    • First observedget_tenant_schema
    • First observedlist_builtin_form_templates
    • First observedlist_console_login_ip_allowlists
    • First observedlist_entries
    • First observedlist_form_sets
    • First observedlist_master_entities
    • First observedlist_master_records
    • First observedlist_media
    • First observedlist_revisions
    • First observedpatch_project_content_locales
    • First observedpublish_revision
    • First observedsave_revision
    • First observedsearch_admin_help
    • First observedsubmit_entry_for_review
    • First observedtranslate_entry_locales
    • First observedupdate_contact_form
    • First observedupdate_entry
    • First observedupdate_login_appearance
    • First observedupdate_master_record
    • First observedupdate_master_tree
    • First observedupload_media
    • First observedvalidate_master_blueprint

TDQS

B3.3/5.0

Scored across 52 tools

Disambiguation4/5

Most tools have clearly distinct resource-action pairs, but a few overlaps exist: get_login_branding and get_login_appearance both describe login page appearance settings, and get_project_overview vs get_tenant_schema both provide project-level structural information. The help-related trio (ask_admin_help, search_admin_help, get_admin_help_article) also requires careful reading to distinguish, though their descriptions do clarify the different access modes.

Naming Consistency4/5

The vast majority of tool names follow a snake_case verb_noun pattern (list_entries, create_master_record, update_contact_form). Minor inconsistencies include patch_project_content_locales mixing 'patch' with the more common 'update', get_funnel_status whose description says it 'reconfigures' rather than simply fetches, and long compound verbs like migrate_field_to_master_reference and rename_master_record_slug. Overall the pattern is predictable and readable.

Tool Count2/5

With 52 tools, the surface is overwhelming for an agent. While the platform covers a broad domain, many tools are highly granular (e.g., separate login branding vs appearance, three separate help tools, three agent-run lifecycle tools) and could be consolidated. This clearly exceeds the 25+ threshold for 'too many' tools.

Completeness3/5

Core content workflows are well covered: entry lifecycle (create/list/get/update, save_revision, publish), master data CRUD, contact forms, media upload, and blueprints. However, there are notable gaps: no delete_entry or unpublish operation, no media delete/update, no master record delete, and no list_agent_runs. These missing lifecycle operations will require workarounds or human intervention, making the surface incomplete for fully autonomous agent workflows.

Maintenance

ActivityMaintained
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Instant Backend for SMBs — AI-callable MCP tools for generating business pages, Stripe payments, notifications, and invoice processing. No signup, no dashboard, just results.
    -
  • A
    license
    B
    quality
    C
    maintenance
    MCP (Model Context Protocol) server for Lindo AI — create websites, pages, and blog posts with AI directly from Claude, Cursor, Kiro, Windsurf, and other MCP-compatible tools.
    50
    28 npm
    3
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Agent-first headless CMS running as a Cloudflare Worker, providing MCP servers for schema/content management and editorial operations.
    30 npm
    4
    MIT