JustBlogged

Create, edit, organize, publish, and configure JustBlogged blogs from MCP clients.

사용해야 할까요

품질 및 안전성

A
설명 품질
100%
스키마 완전성
97%
이름 품질
99%
오염 위험
100%
권한 일치
100%
프로토콜 준수
100%

도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.

컨텍스트 비용

~10,230토큰 (도구 정의)
~1.9 KB일반적인 응답 크기
상당한 주의 영향 (128k 컨텍스트의 7.99%)

이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.

설치

원클릭 설치

`claude_desktop_config.json` 파일에 다음을 추가하세요:

{
  "mcpServers": {
    "justblogged": {
      "url": "https://justblogged.com/mcp"
    }
  }
}

원격 엔드포인트

https://justblogged.com/mcpstreamable-http

할 수 있는 일

도구 목록

도구 (45)

🟢 읽기 전용🟡 쓰기🔴 삭제⚪ 알 수 없음
🟢list_blogs

List the authenticated user's accessible blogs so later tool calls can target the right blogId.

입력 스키마

{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢get_blog(blogId)

Get a single blog by ID, including settings like subdomain, domain, logo, and metadata.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID."
    }
  },
  "required": [
    "blogId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢list_blog_members(blogId)

List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID."
    }
  },
  "required": [
    "blogId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟡create_blog(name, description, logo)

Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key.

입력 스키마

{
  "type": "object",
  "properties": {
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Blog name."
    },
    "description": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional blog description."
    },
    "logo": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional logo URL."
    }
  },
  "required": [
    "name"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴update_blog(blogId, name, subdomain, description, logo)

Update blog settings including name, subdomain, description, and logo. Requires owner or admin access.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 100,
      "description": "Updated blog name."
    },
    "subdomain": {
      "type": "string",
      "minLength": 1,
      "maxLength": 40,
      "pattern": "^(?!(?:api|admin|www|mail|app|dashboard|login|signup|blog|static|assets)$)(?!.*--)[a-z0-9]([a-z0-9-]*[a-z0-9])?$",
      "description": "Updated blog subdomain."
    },
    "description": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "null"
        }
      ],
      "description": "Updated blog description."
    },
    "logo": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "null"
        }
      ],
      "description": "Updated logo URL."
    }
  },
  "required": [
    "blogId",
    "name",
    "subdomain"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴delete_blog(blogId)

Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID."
    }
  },
  "required": [
    "blogId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢get_blog_metadata(blogId)

Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID."
    }
  },
  "required": [
    "blogId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴update_blog_metadata(blogId, metadata)

Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID."
    },
    "metadata": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "pattern": "^(?!(?:themeId|themeSettings|hasThemeFiles|themeUpdatedAt|customThemeBaseId)$).+$"
          },
          "value": {
            "anyOf": [
              {
                "type": "string"
              },
              {
                "type": "number"
              },
              {
                "type": "boolean"
              },
              {
                "type": "null"
              }
            ]
          }
        },
        "required": [
          "key",
          "value"
        ],
        "additionalProperties": false
      },
      "description": "Custom blog metadata entries as key/value objects. Theme changes must use switch_theme or update_theme_settings."
    }
  },
  "required": [
    "blogId",
    "metadata"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴update_blog_domain(blogId, domain, domain_slug)

Configure or remove a blog's custom domain. Use domain only for custom domains (requires CNAME/A DNS). Use domain + domain_slug for subdirectory hosting (requires TXT DNS verification). Pass an empty domain string to remove the domain.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID."
    },
    "domain": {
      "anyOf": [
        {
          "type": "string",
          "minLength": 1,
          "pattern": "^[a-zA-Z0-9-]+(\\.[a-zA-Z]{2,})+$",
          "maxLength": 100
        },
        {
          "type": "string",
          "const": ""
        }
      ],
      "description": "Custom domain (e.g. blog.example.com) or root domain for subdirectory mode. Pass empty string to remove."
    },
    "domain_slug": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 50,
          "pattern": "^[a-zA-Z0-9-_]*$"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional subdirectory slug for subdirectory hosting (e.g. example.com + blog)."
    }
  },
  "required": [
    "blogId",
    "domain"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢list_available_themes(blogId)

List built-in themes available for a blog and show which theme is currently active.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    }
  },
  "required": [
    "blogId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢get_theme_settings(blogId)

Get theme settings schema and current values for a blog's active theme.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    }
  },
  "required": [
    "blogId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴update_theme_settings(blogId, values)

Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "values": {
      "type": "string",
      "minLength": 2,
      "description": "JSON object containing theme setting names and values from get_theme_settings."
    }
  },
  "required": [
    "blogId",
    "values"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴switch_theme(blogId, theme_id)

Switch a blog to a different built-in theme or to custom if theme files exist.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "theme_id": {
      "type": "string",
      "enum": [
        "just",
        "obsidian",
        "linen",
        "tribune",
        "beacon",
        "aside",
        "changes",
        "custom"
      ],
      "description": "Theme ID. Use custom for blogs with edited theme files."
    }
  },
  "required": [
    "blogId",
    "theme_id"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢list_theme_files(blogId)

List the theme file tree for a blog (layouts, templates, assets, etc.).

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    }
  },
  "required": [
    "blogId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢get_theme_file(blogId, file_path)

Read a theme file by path (e.g. layouts/theme.liquid). Falls back to the active built-in theme when no custom copy exists.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "file_path": {
      "type": "string",
      "minLength": 1,
      "pattern": "^.+\\.(liquid|css|js|html|json|xml|txt)$",
      "description": "Text theme file path ending in .liquid, .css, .js, .html, .json, .xml, or .txt."
    }
  },
  "required": [
    "blogId",
    "file_path"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴update_theme_file(blogId, file_path, content)

Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "file_path": {
      "type": "string",
      "minLength": 1,
      "pattern": "^.+\\.(liquid|css|js|html|json|xml|txt)$",
      "description": "Text theme file path ending in .liquid, .css, .js, .html, .json, .xml, or .txt."
    },
    "content": {
      "type": "string",
      "description": "Full file content."
    }
  },
  "required": [
    "blogId",
    "file_path",
    "content"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴delete_theme_file(blogId, file_path)

Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "file_path": {
      "type": "string",
      "minLength": 1,
      "description": "Theme file path relative to the theme root."
    }
  },
  "required": [
    "blogId",
    "file_path"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟡upload_image(blogId, filename, mimeType, data, uploadType)

Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "filename": {
      "type": "string",
      "minLength": 1,
      "maxLength": 255,
      "description": "Original image filename, including its extension."
    },
    "mimeType": {
      "type": "string",
      "enum": [
        "image/png",
        "image/jpeg",
        "image/webp",
        "image/gif",
        "image/svg+xml"
      ],
      "description": "Image MIME type. SVG is supported only for logo uploads."
    },
    "data": {
      "type": "string",
      "minLength": 1,
      "maxLength": 11184812,
      "pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
      "description": "Base64-encoded image bytes without a data URL prefix. Maximum decoded size: 8 MB."
    },
    "uploadType": {
      "type": "string",
      "enum": [
        "post",
        "page",
        "blog",
        "logo"
      ],
      "default": "post",
      "description": "Where the image will be used. Default: post."
    }
  },
  "required": [
    "blogId",
    "filename",
    "mimeType",
    "data"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢list_posts(blogId, page, limit, status, collectionId, ...)

List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "page": {
      "type": "integer",
      "minimum": 1,
      "default": 1,
      "description": "Page number. Default: 1."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 30,
      "description": "Page size. Default: 30, maximum: 100."
    },
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "published",
        "scheduled",
        "all"
      ],
      "description": "Filter by post status."
    },
    "collectionId": {
      "type": "string",
      "minLength": 1,
      "description": "Filter by collection ID."
    },
    "tagId": {
      "type": "string",
      "minLength": 1,
      "description": "Filter by tag ID."
    },
    "userId": {
      "type": "string",
      "minLength": 1,
      "description": "Filter by author user ID."
    },
    "orderBy": {
      "type": "string",
      "enum": [
        "createdAt",
        "updatedAt",
        "title",
        "publishedAt"
      ],
      "default": "createdAt",
      "description": "Sort field. Default: createdAt."
    },
    "order": {
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ],
      "default": "desc",
      "description": "Sort direction. Default: desc."
    }
  },
  "required": [
    "blogId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢get_post(blogId, postId)

Get a single blog post by ID.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "postId": {
      "type": "string",
      "minLength": 1,
      "description": "Post ID."
    }
  },
  "required": [
    "blogId",
    "postId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟡create_post(blogId, title, slug, content, status, ...)

Create a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Post title."
    },
    "slug": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 100
        },
        {
          "type": "null"
        }
      ],
      "description": "Post slug. Auto-generated from title when omitted."
    },
    "content": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000000,
      "description": "Post HTML content."
    },
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "published"
      ],
      "default": "draft",
      "description": "Publishing status. Default: draft."
    },
    "collection_id": {
      "type": "string",
      "minLength": 1,
      "description": "Collection ID for the post."
    },
    "authorId": {
      "type": "string",
      "minLength": 1,
      "description": "Optional author user ID from list_blog_members. Assigning another member requires owner or admin access."
    },
    "image": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional featured image path or URL. Use upload_image for local files."
    },
    "published_at": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional publish datetime in ISO 8601 format."
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 50
      },
      "maxItems": 10,
      "default": [],
      "description": "Tag names. Maximum 10 tags."
    },
    "metadata": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "minLength": 1,
            "maxLength": 50
          },
          "value": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "required": [
          "key",
          "value"
        ],
        "additionalProperties": false
      },
      "maxItems": 20,
      "description": "Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer."
    }
  },
  "required": [
    "blogId",
    "title",
    "content",
    "collection_id"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴update_post(blogId, postId, title, slug, content, ...)

Update any editable field on an existing blog post, including its author.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "postId": {
      "type": "string",
      "minLength": 1,
      "description": "Post ID."
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Updated post title."
    },
    "slug": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1,
      "description": "Updated post slug."
    },
    "content": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000000,
      "description": "Updated HTML content."
    },
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "published"
      ],
      "description": "Updated publishing status."
    },
    "collection_id": {
      "type": "string",
      "minLength": 1,
      "description": "Updated collection ID."
    },
    "authorId": {
      "type": "string",
      "minLength": 1,
      "description": "Updated author user ID from list_blog_members. Reassignment requires owner or admin access."
    },
    "image": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "null"
        }
      ],
      "description": "Updated featured image path or URL. Use upload_image for local files."
    },
    "published_at": {
      "anyOf": [
        {
          "type": "string",
          "format": "date-time"
        },
        {
          "type": "null"
        }
      ],
      "description": "Updated publish datetime in ISO 8601 format."
    },
    "tags": {
      "type": "array",
      "items": {
        "type": "string",
        "minLength": 1,
        "maxLength": 50
      },
      "maxItems": 10,
      "description": "Updated tag names."
    },
    "metadata": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "minLength": 1,
            "maxLength": 50
          },
          "value": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "required": [
          "key",
          "value"
        ],
        "additionalProperties": false
      },
      "maxItems": 20,
      "description": "Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer."
    }
  },
  "required": [
    "blogId",
    "postId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴delete_post(blogId, postId)

Delete a blog post by ID.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "postId": {
      "type": "string",
      "minLength": 1,
      "description": "Post ID."
    }
  },
  "required": [
    "blogId",
    "postId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢list_pages(blogId, page, limit, status, orderBy, ...)

List static pages with pagination, filtering, and sorting.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "page": {
      "type": "integer",
      "minimum": 1,
      "default": 1,
      "description": "Page number. Default: 1."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 30,
      "description": "Page size. Default: 30, maximum: 100."
    },
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "published"
      ],
      "description": "Filter by page status."
    },
    "orderBy": {
      "type": "string",
      "enum": [
        "createdAt",
        "updatedAt",
        "title"
      ],
      "default": "updatedAt",
      "description": "Sort field. Default: updatedAt."
    },
    "order": {
      "type": "string",
      "enum": [
        "asc",
        "desc"
      ],
      "default": "desc",
      "description": "Sort direction. Default: desc."
    }
  },
  "required": [
    "blogId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢get_page(blogId, pageId)

Get a single static page by ID.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "pageId": {
      "type": "string",
      "minLength": 1,
      "description": "Page ID."
    }
  },
  "required": [
    "blogId",
    "pageId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟡create_page(blogId, title, slug, body, status, ...)

Create a new static page with title, HTML body, metadata, slug, image, and status.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Page title."
    },
    "slug": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 100
        },
        {
          "type": "null"
        }
      ],
      "description": "Page slug. Auto-generated from title when omitted."
    },
    "body": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000000,
      "description": "Page HTML body."
    },
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "published"
      ],
      "default": "draft",
      "description": "Publishing status. Default: draft."
    },
    "image": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "null"
        }
      ],
      "description": "Optional featured image path or URL. Use upload_image for local files."
    },
    "metadata": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "minLength": 1,
            "maxLength": 50
          },
          "value": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "required": [
          "key",
          "value"
        ],
        "additionalProperties": false
      },
      "maxItems": 20,
      "description": "Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer."
    }
  },
  "required": [
    "blogId",
    "title",
    "body"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴update_page(blogId, pageId, title, slug, body, ...)

Update any editable field on an existing static page.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "pageId": {
      "type": "string",
      "minLength": 1,
      "description": "Page ID."
    },
    "title": {
      "type": "string",
      "minLength": 1,
      "maxLength": 200,
      "description": "Updated page title."
    },
    "slug": {
      "type": "string",
      "maxLength": 100,
      "minLength": 1,
      "description": "Updated page slug."
    },
    "body": {
      "type": "string",
      "minLength": 1,
      "maxLength": 1000000,
      "description": "Updated HTML body."
    },
    "status": {
      "type": "string",
      "enum": [
        "draft",
        "published"
      ],
      "description": "Updated publishing status."
    },
    "image": {
      "anyOf": [
        {
          "type": "string",
          "maxLength": 500
        },
        {
          "type": "null"
        }
      ],
      "description": "Updated featured image path or URL. Use upload_image for local files."
    },
    "metadata": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "key": {
            "type": "string",
            "minLength": 1,
            "maxLength": 50
          },
          "value": {
            "type": "string",
            "minLength": 1,
            "maxLength": 500
          }
        },
        "required": [
          "key",
          "value"
        ],
        "additionalProperties": false
      },
      "maxItems": 20,
      "description": "Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer."
    }
  },
  "required": [
    "blogId",
    "pageId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴delete_page(blogId, pageId)

Delete a static page by ID.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "pageId": {
      "type": "string",
      "minLength": 1,
      "description": "Page ID."
    }
  },
  "required": [
    "blogId",
    "pageId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢list_redirects(blogId, search, status, type, page, ...)

List redirects for a blog with search, status, type, and pagination filters. Requires owner or admin access through account-level OAuth or a user-scoped API key.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "search": {
      "type": "string",
      "maxLength": 200,
      "default": "",
      "description": "Search source paths and destinations."
    },
    "status": {
      "type": "string",
      "enum": [
        "all",
        "active",
        "inactive"
      ],
      "default": "all",
      "description": "Filter by active state."
    },
    "type": {
      "type": "string",
      "enum": [
        "all",
        "301",
        "302"
      ],
      "default": "all",
      "description": "Filter by HTTP status code."
    },
    "page": {
      "type": "integer",
      "minimum": 1,
      "default": 1,
      "description": "Page number, starting at 1."
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 100,
      "default": 20,
      "description": "Redirects per page, from 1 to 100."
    }
  },
  "required": [
    "blogId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟡create_redirect(blogId, source_path, destination, status_code, active)

Create a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "source_path": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2048,
      "description": "Incoming site path to redirect, starting with a single /. Query strings and fragments are not allowed."
    },
    "destination": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2048,
      "description": "Destination site path or absolute HTTP(S) URL."
    },
    "status_code": {
      "anyOf": [
        {
          "type": "number",
          "const": 301
        },
        {
          "type": "number",
          "const": 302
        }
      ],
      "default": 301,
      "description": "HTTP redirect status code. Use 301 for permanent redirects and 302 for temporary redirects."
    },
    "active": {
      "type": "boolean",
      "default": true,
      "description": "Whether this redirect should be applied."
    }
  },
  "required": [
    "blogId",
    "source_path",
    "destination"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴update_redirect(blogId, redirectId, source_path, destination, status_code, ...)

Update a redirect source, destination, status code, or active state. Requires owner or admin access through account-level OAuth or a user-scoped API key.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "redirectId": {
      "type": "string",
      "minLength": 1,
      "description": "Redirect ID."
    },
    "source_path": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2048,
      "description": "Updated incoming site path, starting with a single /."
    },
    "destination": {
      "type": "string",
      "minLength": 1,
      "maxLength": 2048,
      "description": "Updated destination site path or absolute HTTP(S) URL."
    },
    "status_code": {
      "anyOf": [
        {
          "type": "number",
          "const": 301
        },
        {
          "type": "number",
          "const": 302
        }
      ],
      "description": "Updated HTTP redirect status code."
    },
    "active": {
      "type": "boolean",
      "description": "Whether this redirect should be applied."
    }
  },
  "required": [
    "blogId",
    "redirectId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴delete_redirect(blogId, redirectId)

Delete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "redirectId": {
      "type": "string",
      "minLength": 1,
      "description": "Redirect ID."
    }
  },
  "required": [
    "blogId",
    "redirectId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢list_tags(blogId, search)

List blog tags with optional case-insensitive search filtering.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "search": {
      "type": "string",
      "description": "Optional tag name search filter."
    }
  },
  "required": [
    "blogId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴update_tag(blogId, tagId, name)

Rename a blog tag.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "tagId": {
      "type": "string",
      "minLength": 1,
      "description": "Tag ID."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 50,
      "description": "New tag name. Allowed characters: letters, numbers, spaces, hyphens, underscores, periods."
    }
  },
  "required": [
    "blogId",
    "tagId",
    "name"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴delete_tag(blogId, tagId)

Delete a blog tag by ID.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "tagId": {
      "type": "string",
      "minLength": 1,
      "description": "Tag ID."
    }
  },
  "required": [
    "blogId",
    "tagId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢list_collections(blogId)

List all collections for a blog.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    }
  },
  "required": [
    "blogId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟡create_collection(blogId, name, slug, description)

Create a new collection with name, slug, and optional description.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 32,
      "description": "Collection name."
    },
    "slug": {
      "type": "string",
      "pattern": "^\\s*(?:$|(?=[a-zA-Z0-9_-]{1,32}\\s*$)(?!(?:[aA][dD][mM][iI][nN]|[lL][oO][gG][iI][nN]|[sS][iI][gG][nN][uU][pP]|[aA][pP][iI]|[aA][sS][sS][eE][tT][sS]|[rR][oO][bB][oO][tT][sS]\\.[tT][xX][tT]|[sS][iI][tT][eE][mM][aA][pP]\\.[xX][mM][lL]|[sS][iI][tT][eE][mM][aA][pP]-[iI][nN][dD][eE][xX]\\.[xX][mM][lL]|[fF][eE][eE][dD]|[rR][sS][sS]|[tT][aA][gG][sS]|[tT][aA][gG]|[cC][oO][lL][lL][eE][cC][tT][iI][oO][nN][sS]|[cC][oO][lL][lL][eE][cC][tT][iI][oO][nN]|[pP][aA][gG][eE][sS]|[pP][aA][gG][eE]|[sS][iI][tT][eE][mM][aA][pP]|[sS][iI][tT][eE][mM][aA][pP][sS]|[sS][eE][aA][rR][cC][hH]|[dD][aA][sS][hH][bB][oO][aA][rR][dD]|[sS][eE][tT][tT][iI][nN][gG][sS]|[pP][rR][oO][fF][iI][lL][eE]|[aA][uU][tT][hH][oO][rR][sS])\\s*$)(?!.*--)[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?)\\s*$",
      "description": "Collection slug."
    },
    "description": {
      "type": "string",
      "maxLength": 256,
      "description": "Optional collection description."
    }
  },
  "required": [
    "blogId",
    "name",
    "slug"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴update_collection(blogId, collectionId, name, slug, description)

Update an existing collection's name, slug, or description.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "collectionId": {
      "type": "string",
      "minLength": 1,
      "description": "Collection ID."
    },
    "name": {
      "type": "string",
      "minLength": 1,
      "maxLength": 32,
      "description": "Updated collection name."
    },
    "slug": {
      "type": "string",
      "pattern": "^\\s*(?:$|(?=[a-zA-Z0-9_-]{1,32}\\s*$)(?!(?:[aA][dD][mM][iI][nN]|[lL][oO][gG][iI][nN]|[sS][iI][gG][nN][uU][pP]|[aA][pP][iI]|[aA][sS][sS][eE][tT][sS]|[rR][oO][bB][oO][tT][sS]\\.[tT][xX][tT]|[sS][iI][tT][eE][mM][aA][pP]\\.[xX][mM][lL]|[sS][iI][tT][eE][mM][aA][pP]-[iI][nN][dD][eE][xX]\\.[xX][mM][lL]|[fF][eE][eE][dD]|[rR][sS][sS]|[tT][aA][gG][sS]|[tT][aA][gG]|[cC][oO][lL][lL][eE][cC][tT][iI][oO][nN][sS]|[cC][oO][lL][lL][eE][cC][tT][iI][oO][nN]|[pP][aA][gG][eE][sS]|[pP][aA][gG][eE]|[sS][iI][tT][eE][mM][aA][pP]|[sS][iI][tT][eE][mM][aA][pP][sS]|[sS][eE][aA][rR][cC][hH]|[dD][aA][sS][hH][bB][oO][aA][rR][dD]|[sS][eE][tT][tT][iI][nN][gG][sS]|[pP][rR][oO][fF][iI][lL][eE]|[aA][uU][tT][hH][oO][rR][sS])\\s*$)(?!.*--)[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?)\\s*$",
      "description": "Updated collection slug."
    },
    "description": {
      "type": "string",
      "maxLength": 256,
      "description": "Updated collection description."
    }
  },
  "required": [
    "blogId",
    "collectionId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴delete_collection(blogId, collectionId, reassign_to)

Delete a collection by ID and optionally reassign its posts to another collection.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "collectionId": {
      "type": "string",
      "minLength": 1,
      "description": "Collection ID."
    },
    "reassign_to": {
      "type": "string",
      "minLength": 1,
      "description": "Optional collection ID that should receive the deleted collection's posts."
    }
  },
  "required": [
    "blogId",
    "collectionId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢list_content_revisions(blogId, contentType, contentId)

List the saved revision history for a post or page. Returns revision metadata without full snapshots.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "contentType": {
      "type": "string",
      "enum": [
        "post",
        "page"
      ],
      "description": "Content type."
    },
    "contentId": {
      "type": "string",
      "minLength": 1,
      "description": "Post or page ID."
    }
  },
  "required": [
    "blogId",
    "contentType",
    "contentId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢get_content_revision(blogId, contentType, contentId, revisionId)

Get one saved post or page revision, including its complete content snapshot.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "contentType": {
      "type": "string",
      "enum": [
        "post",
        "page"
      ],
      "description": "Content type."
    },
    "contentId": {
      "type": "string",
      "minLength": 1,
      "description": "Post or page ID."
    },
    "revisionId": {
      "type": "string",
      "minLength": 1,
      "description": "Revision ID from list_content_revisions."
    }
  },
  "required": [
    "blogId",
    "contentType",
    "contentId",
    "revisionId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢list_content_reviews(blogId, status)

List content review requests for a blog, filtered by status.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "status": {
      "type": "string",
      "enum": [
        "pending",
        "approved",
        "changes_requested",
        "superseded"
      ],
      "default": "pending",
      "description": "Review status. Default: pending."
    }
  },
  "required": [
    "blogId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟢get_latest_content_review(blogId, contentType, contentId)

Get the latest review associated with the newest saved revision of a post or page.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "contentType": {
      "type": "string",
      "enum": [
        "post",
        "page"
      ],
      "description": "Content type."
    },
    "contentId": {
      "type": "string",
      "minLength": 1,
      "description": "Post or page ID."
    }
  },
  "required": [
    "blogId",
    "contentType",
    "contentId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🟡submit_content_review(blogId, contentType, contentId, comment)

Submit the latest saved revision of a draft post or page for review.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "contentType": {
      "type": "string",
      "enum": [
        "post",
        "page"
      ],
      "description": "Content type."
    },
    "contentId": {
      "type": "string",
      "minLength": 1,
      "description": "Post or page ID."
    },
    "comment": {
      "type": "string",
      "maxLength": 2000,
      "description": "Optional review comment. Maximum 2,000 characters."
    }
  },
  "required": [
    "blogId",
    "contentType",
    "contentId"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}
🔴decide_content_review(blogId, reviewId, decision, comment)

Approve a pending content review or request changes. Approving a staged update to published content applies that revision.

입력 스키마

{
  "type": "object",
  "properties": {
    "blogId": {
      "type": "string",
      "minLength": 1,
      "description": "Blog ID. Use list_blogs to discover available blog IDs."
    },
    "reviewId": {
      "type": "string",
      "minLength": 1,
      "description": "Review ID from list_content_reviews."
    },
    "decision": {
      "type": "string",
      "enum": [
        "approved",
        "changes_requested"
      ],
      "description": "Review decision."
    },
    "comment": {
      "type": "string",
      "maxLength": 2000,
      "description": "Review comment. Required when requesting changes; maximum 2,000 characters."
    }
  },
  "required": [
    "blogId",
    "reviewId",
    "decision"
  ],
  "additionalProperties": false
}

출력 스키마

{
  "type": "object",
  "properties": {
    "result": {}
  },
  "required": [
    "result"
  ],
  "additionalProperties": false
}

커뮤니티

이 서버 평가하기

증거

최근 관측

검증됨버전이 기록되지 않음도구 45개
검증됨버전이 기록되지 않음도구 45개