Skip to main content
Glama
tecof
by tecof

@tecof/mcp

Tecof Developer API v1용 stdio MCP 서버. Tecof 테마 저장소 내부에서 실행되며, 테마 구성 요소를 디스크에서(AST) 읽고, 에이전트가 작성한 간단한 "섹션" 정의를 편집기 문서로 변환한 다음 Developer API로 초안 페이지를 생성/업데이트합니다. 게시는 항상 패널에서 수행됩니다(API에 publish 없음).

  • SDK: @modelcontextprotocol/server@^2 (+ zod@^4) — McpServer + serveStdio

  • Node ≥ 20, ESM

  • Tool annotations(readOnlyHint, destructiveHint) 및 _meta["anthropic/requiresUserInteraction"](삭제) 지원

설치

테마 저장소의 루트에서:

# 1) Panelden API anahtarı üretin: Ayarlar → Geliştirici / API Anahtarları (scope: pages:read, pages:write)
# 2) .env (gitignore'da) içine yazın
echo 'TECOF_API_TOKEN=tcf_...' >> .env

서버는 npx로 실행되며 전역 설치가 필요 없습니다:

npx -y @tecof/mcp@latest

환경 변수

TECOF_PROJECT_DIR → CLAUDE_PROJECT_DIR → process.cwd() 순서로 프로젝트 디렉터리를 찾고, .env 및 .env.local을 이 경로에서 읽습니다. process.env는 덮어쓰지 않습니다 — 파일 값은 비어 있는 키만 채웁니다(.env.local > .env).

변수

필수

설명

TECOF_API_TOKEN

예

tcf_… 개인 액세스 키

TECOF_API_URL

예*

백엔드 주소; 없으면 NEXT_PUBLIC_BASE_URL 사용

TECOF_THEME_ID

아니요

전역 테마 id; 없으면 NEXT_PUBLIC_THEME_ID, 그것도 없으면 스토어의 활성 테마

TECOF_LOCAL_URL

아니요

로컬 미리보기 루트(기본값 http://localhost:3000)

TECOF_PROJECT_DIR

아니요

테마 저장소가 다른 디렉터리에 있는 경우

토큰/URL이 없어도 서버는 계속 시작됩니다. list_components와 validate_document는 동작하고, 페이지 도구는 안내 오류를 반환합니다. 로그는 stderr에만 기록되며, 잡히지 않은 오류도 stderr로 출력되고 프로세스는 종료되지 않습니다.

보안: TECOF_API_URL은 https여야 합니다. http://(loopback 제외) 주소가 주어지면 시작 시 stderr 경고가 출력되고 모든 도구 오류에 동일한 힌트가 추가됩니다. http→https 리다이렉션은 추적하지 않습니다(Node fetch는 리다이렉션 시 Authorization을 제거하여 오해를 부르는 401을 발생시킴) — 3xx 응답은 "TECOF_API_URL 스키마/호스트 오류"로 변환됩니다. 요청 시간 초과(30초)는 헤더 + 본문 읽기 전체를 포함합니다.

Claude Code — .mcp.json

{
  "mcpServers": {
    "tecof": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "${TECOF_MCP_PACKAGE:-@tecof/mcp@latest}"]
    }
  }
}

TECOF_MCP_PACKAGE env는 패키지 spec을 덮어씁니다 — npm에 게시되기 전이나 로컬 개발을 위해 이 저장소 폴더를 지정하세요(npx -y /path/to/tecof-mcp는 폴더의 bin을 실행합니다):

export TECOF_MCP_PACKAGE=/Users/<siz>/Desktop/Tecof/tecof-mcp   # claude'u bu shell'den başlatın

게시(npm)

npm run build && npm test && node scripts/smoke.mjs
npm version patch            # ya da minor
npm publish --access public  # @tecof kapsamı — tecof-theme-editor/analytics ile aynı hesap

Codex — .codex/config.toml

[mcp_servers.tecof]
command = "npx"
args = ["-y", "@tecof/mcp@latest"]

Gemini CLI — .gemini/settings.json

{
  "mcpServers": {
    "tecof": {
      "command": "npx",
      "args": ["-y", "@tecof/mcp@latest"]
    }
  }
}

토큰은 어떤 구성 파일에도 기록되지 않으며 .env에 유지됩니다. 클라이언트 프로세스는 테마 저장소의 루트에서 시작되고, 서버는 그 경로에서 .env를 읽습니다.

Related MCP server: anticms-mcp

도구

도구

입력

기능

get_site_context

—

스토어, 언어, 테마(themeId/merchantThemeId/domain), 토큰 범위/만료, 페이지 수

list_components

category?, component?, detail?: summary|full

테마 카탈로그(디스크에서 AST, mtime 캐시). full: 필드, 옵션, slot allow, defaultProps, variants

list_pages

includeTemplates?

페이지 목록(slug 오름차순)

get_page

page (id|slug), mode?: outline|full

outline: 섹션/slot 트리(id, type, 짧은 텍스트); full: draftData

validate_document

{ sections } 또는 { document }

저장 없이 검증; ok, errors, warnings, normalizedDocument

create_page

slug, title, sections, meta?, layoutFrom?, dryRun?

초안 생성; Header/Footer는 layoutFrom 페이지(기본값 home)의 공통 구성 요소에서 복사됨

update_page

page, operations 또는 document, meta?, dryRun?

GET → 작업 적용 → 검증 → PUT(expectedModifiedDate로 낙관적 잠금; 409 시 명확한 메시지)

delete_page

page, confirm: true

Soft delete — 사용자 확인 필수

get_preview_url

page, locale?

1시간짜리 초안 미리보기 링크(storefront + 로컬)

결과는 content[0].text(JSON) + structuredContent로 반환되고, 오류는 isError: true로 필드/경로 정보를 포함합니다(에이전트가 수정할 수 있도록).

update_page 작업

append_section{section}(Footer 앞에), insert_section{section, before?|after?}(anchor가 없으면 append처럼 Footer 앞에), replace_section{id, section}, remove_section{id}, move_section{id, before?|after?}, set_props{id, props}(얕은 병합), set_slot{id, slot, children}(slot 전체 교체; 먼저 새 자식이 구성되고, 실패하면 기존 내용 유지), set_root_props{props}.

동작 참고 사항:

  • 공통 구성 요소는 읽기 전용 — 하위 노드 포함. sharedComponentId를 가진 노드(Header/Footer)와 그 zones 아래의 모든 하위 노드(Logo, NavLink, FooterColumn…)는 set_props/set_slot/replace_section/remove_section으로 변경할 수 없습니다. "공통 구성 요소 — 패널 편집기에서 편집하세요" 오류가 반환됩니다. 공통 루트 자체는 remove_section으로 페이지에서 제거할 수 있습니다(경고와 함께; master는 영향받지 않음). get_page outline에서 이 노드들은 shared: true로 표시됩니다.

  • 오류/경고 구분(operations 모드): GET에서 가져온 문서는 먼저 정규화됩니다(props에 남아 있는 인라인 slot 배열 → zones; master가 삭제된 SharedComponentRef 노드는 경고와 함께 제거 — 백엔드 PUT도 동일하게 수행). 에이전트가 이번 턴에 추가/변경한 노드는 엄격히 검사됩니다(알 수 없는 type, allow 위반, element-at-root → 오류); 기존에 있던, 건드리지 않은 노드의 위반은 경고일 뿐입니다 — 테마가 변경되었다고 무관한 업데이트가 잠기지 않습니다. document 모드와 create_page/validate_document에서는 모든 노드가 엄격히 검사됩니다.

  • 빈 operations: [](meta도 없는 경우) → "적용할 작업 없음" 오류; PUT은 실행되지 않습니다. meta만 주어지면 draftData는 전송되지 않습니다(status published→changed가 되지 않고, 불필요한 개정이 열리지 않음); 응답의 savedDraft 필드가 이를 나타냅니다.

  • 백엔드의 저장 경고(봉투 루트의 warnings: [{code,path,message}], 예: master가 삭제된 Header 연결 제거)는 create_page/update_page 응답에서 서버: [code] path: message 줄로 반환됩니다.

작성 형식

에이전트는 문서 JSON이 아닌 섹션 트리를 작성합니다. id 생성, defaultProps 병합, slot → zone 변환, 다국어 단축어는 서버에서 처리됩니다.

{
  "type": "FeaturesSection",
  "props": { "columns": "3", "background": "dark" },
  "variant": "dark",                       // bileşenin variants anahtarı (varsa)
  "slots": {
    "contentSlot": [
      { "type": "Title", "props": { "text": { "tr": "Neden biz?", "en": "Why us?" }, "size": "lg" } }
    ],
    "itemsSlot": [
      { "type": "Card", "props": { "href": "/hakkimizda" },
        "slots": { "contentSlot": [ { "type": "Paragraph", "props": { "text": "<p>Hızlı teslimat</p>" } } ] } }
    ]
  }
}

변환 규칙:

  1. type이 카탈로그에 없으면 오류; 루트에 element 카테고리는 오류; slot 자식이 allow 밖이면 오류.

  2. props = defaultProps(−id, −인라인 slot 자식) ← variants[variant].props(+_variant) ← 사용자 props.

  3. slots[slot]이 주어지면 그것을 사용; 주어지지 않으면 defaultProps의 예제 자식; []이면 비움. 모두 zones["<id>:<slot>"]에 기록되고, props[slot] = [].

  4. 다국어 단축어: "텍스트" → [{code: 기본언어, value}]; {tr, en} → [{code,value}]; 누락된 언어는 경고. link: "/경로" → [{code, value:{url, target:"_self"}}]. upload: URL 문자열 → 외부 파일 레코드.

  5. select/radio 값이 options 밖이면 오류. _ 접두사 키는 오류(className은 자유).

  6. id: 8자 [A-Za-z0-9_-], 문서 전체에서 고유(유효하고 고유한 props.id가 주어지면 허용).

개발

npm install
npm run build        # tsc → dist/ (+ dist/bin.js +x)
npm test             # vitest (parser, build, validate, operations, api mock, config, uçtan uca MCP)
node scripts/smoke.mjs   # dist/bin.js'i stdio ile ayağa kaldırıp initialize + tools/list doğrular

테스트는 실제 백엔드에 요청을 보내지 않습니다(fetch mock); 테마 카탈로그는 test/fixtures/theme 아래의 복사 구성 요소에서 읽습니다.

프로그래매틱 사용(HTTP transport 등):

import { buildServer, ServerContext, loadConfig } from "@tecof/mcp";
const ctx = new ServerContext({ config: loadConfig() });
const server = buildServer({ ctx }); // McpServer — istediğiniz transport'a bağlayın

Available Tools

9 tools
create_pageSayfa oluştur (taslak)A

Yazarlık biçimindeki bölümlerden yeni bir TASLAK sayfa oluşturur. Header/Footer, layoutFrom sayfasındaki ortak bileşenlerden otomatik kopyalanır (varsayılan: home) — bunları sections içinde vermeyin. Önce list_components (full) ile alanları doğrulayın; dryRun:true ile kaydetmeden deneyin.

ParametersJSON Schema
NameRequiredDescriptionDefault
metaNo
slugYesURL slug'ı, örn. 'hakkimizda' (sunucu normalize eder)
titleYesPanelde görünen sayfa adı
dryRunNotrue: kaydetme, yalnız doğrula + outline döndür
sectionsYesSayfa bölümleri (Header/Footer HARİÇ), sırayla
layoutFromNoHeader/Footer kaynağı: "home" (varsayılan), başka bir slug, ya da "none"

TDQS

A4.4/5.0
Behavior4/5

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

Discloses that header/footer are auto-copied from layoutFrom and that this creates a draft. The dryRun tip reveals how the tool behaves during validation. Annotations already signal write and non-destructive, so the description adds context without contradicting 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?

Three sentences, front-loaded with the core action, then critical constraints and prerequisites. Every sentence earns its place; no fluff.

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 tool's complexity (nested sections, 6 params, no output schema), the description covers essential behaviors: draft creation, auto-copy, field validation, and dryRun workflow. It omits return format for non-dry-run saves, but that is a minor gap for a create 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?

Schema covers 83% of parameters, and the description adds key semantic meaning: do not include layout-sourced header/footer in sections, and use dryRun to avoid saving. It also reinforces the layoutFrom default. This enriches the schema without redundant restating.

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-object pair: 'yeni bir TASLAK sayfa oluşturur' (creates a new DRAFT page), clearly distinguishing it from update_page and delete_page. The 'TASLAK' qualifier adds precise scope.

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?

Provides explicit guidance: validate fields with list_components first, use dryRun:true to test without saving, and warns against including header/footer in sections. It does not explicitly state when to use update_page for existing pages, but the context is clear enough.

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

delete_pageSayfayı silA
DestructiveIdempotent

Sayfayı siler (soft delete; panelden geri alınabilir). Kullanıcı onayı olmadan ÇAĞIRMAYIN — confirm:true kullanıcının açık onayını temsil eder. Şablon sayfalar silinemez.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYesSayfa id'si (24 hex) ya da slug'ı (örn. 'home', 'hakkimizda')
confirmYesKullanıcı silmeyi açıkça onayladı

TDQS

A4.7/5.0
Behavior4/5

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

Annotations indicate destructiveHint:true, and the description adds that it's a soft delete, reversible from the panel. This adds value beyond annotations by explaining the reversibility, which is critical for an AI agent to avoid unnecessary caution. However, it doesn't detail other behaviors like idempotency effects, but that's not required.

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 sentences, front-loaded with the primary action and critical caveats. No fluff; every sentence adds essential context. Highly concise and well-structured.

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 (soft delete, confirmation requirement, template restriction) and the absence of an output schema, the description covers all necessary operational details. It is complete for safe, correct use.

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 covers both parameters fully (page with format examples, confirm with const true). The description adds the meaning of confirm as explicit approval, which is important context beyond the schema. It doesn't repeat schema details, so credit for supplementary clarification.

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 deletes a page ('Sayfayı siler') and immediately clarifies it is a soft delete that can be undone from the panel. This distinguishes it from a hard delete and aligns with the sibling tools like create_page and update_page.

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?

Explicitly instructs not to call without user consent, defines the 'confirm:true' parameter as representing explicit user approval, and mentions restriction on template pages. This provides strong guidance on when to invoke and when not to.

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

get_pageSayfayı getirA
Read-onlyIdempotent

Bir sayfanın taslağını döner. mode=outline (varsayılan): bölümler ve slot çocukları id/type/kısa metinle — update_page için id'leri buradan alın. mode=full: tam draftData JSON.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNo
pageYesSayfa id'si (24 hex) ya da slug'ı (örn. 'home', 'hakkimizda')

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and idempotentHint=true, so the safety profile is covered. The description adds behavioral detail about what each mode returns (outline summary with IDs/types/slots vs full draftData JSON), which is useful beyond 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?

Two sentences with clear structure. The description front-loads the purpose and immediately explains modes, including a practical hint for update_page. No 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?

Without an output schema, the description clearly explains what each mode returns (outline with IDs and short text; full with complete JSON). It also notes the default mode and the use case for update_page, making the behavior fully transparent despite the absence of an output 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 describes 'page' with format (hex or slug), and description explains the 'mode' parameter including its default and meaning of both values. Since schema coverage is 50% (only 'page' described), the description effectively compensates and adds semantic 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?

Description clearly states it returns a page draft, distinguishes two modes (outline vs full) and explicitly connects to update_page for ID retrieval. This goes beyond the tool name and clarifies the exact resource and behavior.

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 explains when to use mode=outline (to get IDs for update_page) and mode=full for complete JSONapis. While it doesn't explicitly say when not to use this tool vs siblings, the context is clear from the mode explanations and the sibling list (update_page, delete_page, etc.).

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

get_preview_urlÖnizleme URL'si alA
Read-only

Sayfanın TASLAK hâli için 1 saat geçerli önizleme bağlantıları: yayındaki domain (storefront) ve yerel geliştirme (TECOF_LOCAL_URL). Yayınlama panelden yapılır.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageYesSayfa id'si (24 hex) ya da slug'ı (örn. 'home', 'hakkimizda')
localeNoDil kodu (varsayılan: mağazanın varsayılan dili)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the bar is lower. The description adds behavioral details: links are valid for 1 hour, and both storefront and local development URLs are provided. It also clarifies that publishing is separate, which adds context beyond 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 sentences, front-loaded with the core purpose and key constraints (1-hour validity, draft state, two URL types). 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?

With no output schema, the description explains that preview links are returned for two environments)Skip but doesn't detail the response structure. It also mentions the 1-hour expiry and that publishing is done from the panel, which helps context. Missing pagination or error behavior is acceptable given annotations and simplicity.

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% with clear descriptions for page and locale params. The tool description does not add significant param-level detail beyond what's in the schema, so baseline 3 is appropriate. It does add the draft context, but that's not param-specific.

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 generates preview URLs for draft pages, specifying the 1-hour validity and the two environments (storefront and local development). This distinguishes it from sibling tools like get_page which retrieves page data, and the scope (drafts only) is 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 implies when to use this tool (for drafts before publishing) and notes that publishing is done from the panel. While it doesn't explicitly name alternative tools, the context is clear enough. However, it lacks explicit exclusions or comparisons to siblings.

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

get_site_contextSite bağlamını getirA
Read-onlyIdempotent

Mağaza (diller, varsayılan dil), aktif tema (themeId/merchantThemeId/domain), API anahtarının kapsamı ve bitişi, sayfa sayısı. Diğer araçlardan önce çağırın.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

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

Annotations provide readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which already convey safety. The description adds behavioral context by listing what data is returned (languages, theme, API key scope/expiry, page count), which is not fully captured by annotations. It doesn't mention any side effects, but given the read-only hints, the bar is lower. The description adds value by detailing the content of the 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, compact sentence in Turkish, listing exactly the key information: what is retrieved (store, theme, API key scope, page count) and the usage guidance. Every word earns its place; no fluff. Front-loaded with the core content and ends with the directive.

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 tool has no parameters, no output schema, but annotations are comprehensive (read-only, idempotent, non-destructive). The description explains what data is returned and when to call it. Given the simplicity of a zero-parameter tool, the description is complete enough. It doesn't describe return format, but without an output schema, that's acceptable for such a simple tool. The 'call before others' guidance is the key contextual information.

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 0 parameters, so no parameter documentation is needed. The schema is empty and coverage is 100%, which is trivially satisfied. The description adds value by explaining what the tool retrieves, which isn't parameter-related but still useful for understanding the output. Baseline for 0 params is 4, and the description does not detract.

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 tool retrieves site context: store languages, active theme data (themeId/merchantThemeId/domain), API key scope/expiry, and page count. It distinguishes from siblings by explicitly covering site-level context, whereas siblings focus on specific components/pages. However, the title is in Turkish (Site bağlamını getir) while description is in Turkish as well, which is coherent but not in English.

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?

Explicitly instructs 'Diğer araçlardan önce çağırın' (Call before other tools), providing clear when-to-use guidance. This is a strong usage directive, distinguishing it as a prerequisite step. No alternatives are named, but the instruction is unambiguous.

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

list_componentsTema bileşenlerini listeleA
Read-onlyIdempotent

Tema reposundaki section ve element bileşenlerini diskten okur. summary: ad, label, kategori, slot adları. full: alanlar (tip, seçenekler, slot allow listesi), defaultProps, variants. Bölüm yazmadan önce full ile alan adlarını doğrulayın.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailNoVarsayılan: summary (component verilmişse full)
categoryNoYalnız bu kategori
componentNoTek bileşen adı (büyük/küçük harf duyarsız)

TDQS

A4.2/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 useful behavioral context: it reads from disk (implying file system access), and explains the difference between summary and full detail levels, which is beyond what annotations 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 concise and front-loaded with the core purpose. It uses two sentences to convey the main function and the key usage tip, with 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?

Given the tool's moderate complexity (3 optional params, no output schema), the description is complete enough. It explains the two detail levels and the validation use case. The lack of output schema means the description doesn't need to explain return values, and the annotations cover safety. A small gap is not mentioning pagination or performance, but that's not critical for a listing tool.

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 three parameters. The description adds context about the default behavior (summary, or full if component is given) and the purpose of the full detail (field names, defaultProps, variants), which adds some value beyond the schema but doesn't significantly expand 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 clearly states the tool reads section and element components from the theme repository, with a specific verb ('reads from disk') and resource ('theme repo components'). It distinguishes from siblings by focusing on component listing rather than pages or site context.

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, especially the instruction to validate field names with full detail before writing sections. It doesn't explicitly mention alternatives, but the sibling tools are distinct enough that this is not a major gap.

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

list_pagesSayfaları listeleA
Read-onlyIdempotent

Aktif temadaki sayfaları listeler (id, slug, başlık, durum: draft/published/changed, tarihler).

ParametersJSON Schema
NameRequiredDescriptionDefault
includeTemplatesNoŞablon sayfaları da dahil et (salt-okunur)

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, destructiveHint=false, which fully describe the safety profile. The description adds that it lists pages in the 'active theme', which is a useful context about scope. It doesn't detail behavior like pagination or sorting, but with annotations covering the read-only and non-destructive nature, this is sufficient.

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 packs all essential information: what it does, the scope (active theme), and what fields are returned. No fluff, no redundancy. It is front-loaded with the verb 'listes' and the resource 'pages'.

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 that this is a simple list operation with only one optional parameter and no output schema, the description is fairly complete. It covers the purpose, the scope, and the return fields (id, slug, title, status, dates). The lack of explicit return format (array vs. object) is a minor gap, but for a list tool without a complex output schema, this is acceptable. It doesn't mention filtering by status, but that's a feature not promised.

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% for the single optional parameter (includeTemplates). The description does not add any additional meaning about the parameter beyond what the schema says ('include template pages (read-only)'). Since the schema fully documents the parameter, the baseline of 3 is appropriate; the description adds no extra value here.

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 explicitly states the tool's purpose: 'list pages in the active theme' with specific fields (id, slug, title, status: draft/published/changed, dates). The verb 'listes' (Turkish for 'list') clearly indicates a read-only operation, distinguishing it from siblings like 'create_page', 'update_page', 'delete_page', and 'get_page'.

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 makes clear the context: it lists pages in the active theme, which is a distinct context from 'get_site_context' or 'list_components'. It doesn't explicitly state when not to use it or alternative tools, but the context of listing all pages vs. getting a specific page is implied. A slight gap is the lack of mention that this tool is the right choice for overview tasks vs. 'get_page' for details.

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

update_pageSayfayı güncelle (taslak)A

Sayfa taslağını günceller. Ya operations (append/insert/replace/remove/move_section, set_props, set_slot, set_root_props — id'ler get_page outline'dan; append_section ve anchor'sız insert_section yeni bölümü Footer'ın ÖNÜNE koyar) ya da document (tam doküman) verin; meta ile başlık/slug/meta alanları (yalnız meta verilirse draftData'ya dokunulmaz). Ortak bileşenler (Header/Footer) ve onların ALT düğümleri değiştirilemez. dryRun:true kaydetmez.

ParametersJSON Schema
NameRequiredDescriptionDefault
metaNo
pageYesSayfa id'si (24 hex) ya da slug'ı (örn. 'home', 'hakkimizda')
dryRunNo
documentNoTam editör dokümanı {root, content, zones}
operationsNo

TDQS

A4.2/5.0
Behavior4/5

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

The description explicitly mentions the `dryRun:true` test mode and the restriction that Header/Footer children cannot be modified. It also notes that operations require IDs from get_page and that insert without anchor places new section before Footer. These are non-obvious behaviors that add value beyond any annotations.

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 a single dense paragraph with many clauses separated by semicolons and em dashes. While it contains high-value info, the run-on structure makes it hard to parse quickly. Breaking it into a few bullet points or sentences would improve scannability.

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 three update paths (operations, document, meta), key constraints, and the dryRun flag. It does not mention error handling or return values, but given that the tool is an update operation, the absence of output description is acceptable. The description is largely complete for the tool's 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?

The schema already describes the operations array structure and prop formats in detail cliffhanger. The description adds semantic value by explaining the meaning of each operation type (append, insert, replace, remove, move_section, set_props, etc.) and the rule about Footer placement for insert_section. It also clarifies the meta vs operations vs document distinction.

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 updates a page draftlying, then specifies the three modes: operations, document, or meta. It uses specific verbs (append, insert, replace, remove, move_section) and names the resource (page), making the purpose 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?

Provides explicit guidance on when to use operations vs document vs meta, and explains how to obtain IDs (from get_page outline) and where new sections are placed (before Footer). This goes beyond basic context, though it doesn't compare to sibling tools like `create_page` or `publish_page`.

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

validate_documentDokümanı doğrulaA
Read-onlyIdempotent

Kaydetmeden doğrular. Ya sections (yazarlık biçimi: type/props/variant/slots) ya da document (tam {root,content,zones}) verin. Hatalar yol + açıklama ile döner; ok=true ise normalizedDocument kaydedilebilir haldedir.

ParametersJSON Schema
NameRequiredDescriptionDefault
documentNoTam editör dokümanı {root, content, zones}
sectionsNo

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnly and idempotent annotations, the description details behavior that is not visible in the schema: errors include a path and explanation, and an `ok=true` result indicates a saveable normalizedDocument. This adds genuinely useful 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?

Two short, front-loaded sentences deliver all necessary information: non-saving behavior, input alternatives, and output semantics. No redundant filler; every phrase adds 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 validation tool with nested inputs and no output schema, the description covers the input contract, the non-destructive nature, the error shape, and the conditions for a saveable result. It is sufficient 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.

Parameters4/5

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

The description directly supplements the schema by explaining that the caller must provide either `sections` in authorship format or a full `document` with `{root, content, zones}`. It also highlights relevant inner fields like type/props/variant/slots, compensating for the top-level schema coverage gap.

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 a specific action: validate a document without saving it. It defines the two accepted input forms (`sections` and `document`) and distinguishes the tool from page-management siblings by emphasizing it does not persist.

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 phrase 'without saving' and the kirjeld of the two accepted input formats provide clear context that validation is meant to be a pre-save check. Explicit alternative tools are not named, but the functional boundary is clear enough for an agent to select it.

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. 9 tool updatesv0.1.0
    • First observedcreate_page
    • First observeddelete_page
    • First observedget_page
    • First observedget_preview_url
    • First observedget_site_context
    • First observedlist_components
    • First observedlist_pages
    • First observedupdate_page
    • First observedvalidate_document

TDQS

A4.4/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct resource/action: context, component listing, page listing, page detail, validation, page create/update/delete, and preview. There is no meaningful overlap; validate_document is clearly separate from create/update dryRun as a standalone check.

Naming Consistency5/5

All tools use a consistent snake_case verb_noun pattern: get_site_context, list_components, list_pages, get_page, validate_document, create_page, update_page, delete_page, get_preview_url. No camelCase or mixed verb styles appear.

Tool Count5/5

Nine tools is well-scoped for a page-management server: context, component introspecton, page CRUD, validation, and preview. Each tool serves a clear purpose without redundancy.

Completeness4/5

The tool set covers the page draft lifecycle well: create, read, list, update, delete, validate, and preview. It is slightly incomplete for the full page lifecycle because publishing is intentionally left to the panel, so an agent cannot publish or unpublish a page through the server.

Maintenance

ActivityActive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers