Server definition
- Hash
- sha256:914a11215e72f11d22ac47217e94d4bebd2a833ba1d662a9a586708c1c780ad2
- What it is
- What a remote MCP server returned when asked what it offers: 45 tools
The blob, as servednamed by its sha256
{
"instructions": "Use resources for public JustBlogged guidance. Content-management tools require OAuth or a JustBlogged bearer key.",
"tools": [
{
"description": "Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"description": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional blog description."
},
"logo": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional logo URL."
},
"name": {
"description": "Blog name.",
"maxLength": 100,
"minLength": 1,
"type": "string"
}
},
"required": [
"name"
],
"type": "object"
},
"name": "create_blog",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Create a new collection with name, slug, and optional description.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"description": {
"description": "Optional collection description.",
"maxLength": 256,
"type": "string"
},
"name": {
"description": "Collection name.",
"maxLength": 32,
"minLength": 1,
"type": "string"
},
"slug": {
"description": "Collection slug.",
"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*$",
"type": "string"
}
},
"required": [
"blogId",
"name",
"slug"
],
"type": "object"
},
"name": "create_collection",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Create a new static page with title, HTML body, metadata, slug, image, and status.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"body": {
"description": "Page HTML body.",
"maxLength": 1000000,
"minLength": 1,
"type": "string"
},
"image": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional featured image path or URL. Use upload_image for local files."
},
"metadata": {
"description": "Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer.",
"items": {
"additionalProperties": false,
"properties": {
"key": {
"maxLength": 50,
"minLength": 1,
"type": "string"
},
"value": {
"maxLength": 500,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"value"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"slug": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
],
"description": "Page slug. Auto-generated from title when omitted."
},
"status": {
"default": "draft",
"description": "Publishing status. Default: draft.",
"enum": [
"draft",
"published"
],
"type": "string"
},
"title": {
"description": "Page title.",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"title",
"body"
],
"type": "object"
},
"name": "create_page",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Create a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"authorId": {
"description": "Optional author user ID from list_blog_members. Assigning another member requires owner or admin access.",
"minLength": 1,
"type": "string"
},
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"collection_id": {
"description": "Collection ID for the post.",
"minLength": 1,
"type": "string"
},
"content": {
"description": "Post HTML content.",
"maxLength": 1000000,
"minLength": 1,
"type": "string"
},
"image": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional featured image path or URL. Use upload_image for local files."
},
"metadata": {
"description": "Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer.",
"items": {
"additionalProperties": false,
"properties": {
"key": {
"maxLength": 50,
"minLength": 1,
"type": "string"
},
"value": {
"maxLength": 500,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"value"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"published_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional publish datetime in ISO 8601 format."
},
"slug": {
"anyOf": [
{
"maxLength": 100,
"type": "string"
},
{
"type": "null"
}
],
"description": "Post slug. Auto-generated from title when omitted."
},
"status": {
"default": "draft",
"description": "Publishing status. Default: draft.",
"enum": [
"draft",
"published"
],
"type": "string"
},
"tags": {
"default": [],
"description": "Tag names. Maximum 10 tags.",
"items": {
"maxLength": 50,
"minLength": 1,
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"title": {
"description": "Post title.",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"title",
"content",
"collection_id"
],
"type": "object"
},
"name": "create_post",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Create a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"active": {
"default": true,
"description": "Whether this redirect should be applied.",
"type": "boolean"
},
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"destination": {
"description": "Destination site path or absolute HTTP(S) URL.",
"maxLength": 2048,
"minLength": 1,
"type": "string"
},
"source_path": {
"description": "Incoming site path to redirect, starting with a single /. Query strings and fragments are not allowed.",
"maxLength": 2048,
"minLength": 1,
"type": "string"
},
"status_code": {
"anyOf": [
{
"const": 301,
"type": "number"
},
{
"const": 302,
"type": "number"
}
],
"default": 301,
"description": "HTTP redirect status code. Use 301 for permanent redirects and 302 for temporary redirects."
}
},
"required": [
"blogId",
"source_path",
"destination"
],
"type": "object"
},
"name": "create_redirect",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Approve a pending content review or request changes. Approving a staged update to published content applies that revision.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"comment": {
"description": "Review comment. Required when requesting changes; maximum 2,000 characters.",
"maxLength": 2000,
"type": "string"
},
"decision": {
"description": "Review decision.",
"enum": [
"approved",
"changes_requested"
],
"type": "string"
},
"reviewId": {
"description": "Review ID from list_content_reviews.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"reviewId",
"decision"
],
"type": "object"
},
"name": "decide_content_review",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId"
],
"type": "object"
},
"name": "delete_blog",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Delete a collection by ID and optionally reassign its posts to another collection.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"collectionId": {
"description": "Collection ID.",
"minLength": 1,
"type": "string"
},
"reassign_to": {
"description": "Optional collection ID that should receive the deleted collection's posts.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"collectionId"
],
"type": "object"
},
"name": "delete_collection",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Delete a static page by ID.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"pageId": {
"description": "Page ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"pageId"
],
"type": "object"
},
"name": "delete_page",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Delete a blog post by ID.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"postId": {
"description": "Post ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"postId"
],
"type": "object"
},
"name": "delete_post",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Delete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"redirectId": {
"description": "Redirect ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"redirectId"
],
"type": "object"
},
"name": "delete_redirect",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Delete a blog tag by ID.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"tagId": {
"description": "Tag ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"tagId"
],
"type": "object"
},
"name": "delete_tag",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"file_path": {
"description": "Theme file path relative to the theme root.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"file_path"
],
"type": "object"
},
"name": "delete_theme_file",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Get a single blog by ID, including settings like subdomain, domain, logo, and metadata.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId"
],
"type": "object"
},
"name": "get_blog",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId"
],
"type": "object"
},
"name": "get_blog_metadata",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Get one saved post or page revision, including its complete content snapshot.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"contentId": {
"description": "Post or page ID.",
"minLength": 1,
"type": "string"
},
"contentType": {
"description": "Content type.",
"enum": [
"post",
"page"
],
"type": "string"
},
"revisionId": {
"description": "Revision ID from list_content_revisions.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"contentType",
"contentId",
"revisionId"
],
"type": "object"
},
"name": "get_content_revision",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Get the latest review associated with the newest saved revision of a post or page.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"contentId": {
"description": "Post or page ID.",
"minLength": 1,
"type": "string"
},
"contentType": {
"description": "Content type.",
"enum": [
"post",
"page"
],
"type": "string"
}
},
"required": [
"blogId",
"contentType",
"contentId"
],
"type": "object"
},
"name": "get_latest_content_review",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Get a single static page by ID.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"pageId": {
"description": "Page ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"pageId"
],
"type": "object"
},
"name": "get_page",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Get a single blog post by ID.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"postId": {
"description": "Post ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"postId"
],
"type": "object"
},
"name": "get_post",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Read a theme file by path (e.g. layouts/theme.liquid). Falls back to the active built-in theme when no custom copy exists.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"file_path": {
"description": "Text theme file path ending in .liquid, .css, .js, .html, .json, .xml, or .txt.",
"minLength": 1,
"pattern": "^.+\\.(liquid|css|js|html|json|xml|txt)$",
"type": "string"
}
},
"required": [
"blogId",
"file_path"
],
"type": "object"
},
"name": "get_theme_file",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Get theme settings schema and current values for a blog's active theme.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId"
],
"type": "object"
},
"name": "get_theme_settings",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List built-in themes available for a blog and show which theme is currently active.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId"
],
"type": "object"
},
"name": "list_available_themes",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId"
],
"type": "object"
},
"name": "list_blog_members",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List the authenticated user's accessible blogs so later tool calls can target the right blogId.",
"inputSchema": {
"additionalProperties": false,
"properties": {},
"type": "object"
},
"name": "list_blogs",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List all collections for a blog.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId"
],
"type": "object"
},
"name": "list_collections",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List content review requests for a blog, filtered by status.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"status": {
"default": "pending",
"description": "Review status. Default: pending.",
"enum": [
"pending",
"approved",
"changes_requested",
"superseded"
],
"type": "string"
}
},
"required": [
"blogId"
],
"type": "object"
},
"name": "list_content_reviews",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List the saved revision history for a post or page. Returns revision metadata without full snapshots.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"contentId": {
"description": "Post or page ID.",
"minLength": 1,
"type": "string"
},
"contentType": {
"description": "Content type.",
"enum": [
"post",
"page"
],
"type": "string"
}
},
"required": [
"blogId",
"contentType",
"contentId"
],
"type": "object"
},
"name": "list_content_revisions",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List static pages with pagination, filtering, and sorting.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"limit": {
"default": 30,
"description": "Page size. Default: 30, maximum: 100.",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"order": {
"default": "desc",
"description": "Sort direction. Default: desc.",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"orderBy": {
"default": "updatedAt",
"description": "Sort field. Default: updatedAt.",
"enum": [
"createdAt",
"updatedAt",
"title"
],
"type": "string"
},
"page": {
"default": 1,
"description": "Page number. Default: 1.",
"minimum": 1,
"type": "integer"
},
"status": {
"description": "Filter by page status.",
"enum": [
"draft",
"published"
],
"type": "string"
}
},
"required": [
"blogId"
],
"type": "object"
},
"name": "list_pages",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"collectionId": {
"description": "Filter by collection ID.",
"minLength": 1,
"type": "string"
},
"limit": {
"default": 30,
"description": "Page size. Default: 30, maximum: 100.",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"order": {
"default": "desc",
"description": "Sort direction. Default: desc.",
"enum": [
"asc",
"desc"
],
"type": "string"
},
"orderBy": {
"default": "createdAt",
"description": "Sort field. Default: createdAt.",
"enum": [
"createdAt",
"updatedAt",
"title",
"publishedAt"
],
"type": "string"
},
"page": {
"default": 1,
"description": "Page number. Default: 1.",
"minimum": 1,
"type": "integer"
},
"status": {
"description": "Filter by post status.",
"enum": [
"draft",
"published",
"scheduled",
"all"
],
"type": "string"
},
"tagId": {
"description": "Filter by tag ID.",
"minLength": 1,
"type": "string"
},
"userId": {
"description": "Filter by author user ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId"
],
"type": "object"
},
"name": "list_posts",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"limit": {
"default": 20,
"description": "Redirects per page, from 1 to 100.",
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"page": {
"default": 1,
"description": "Page number, starting at 1.",
"minimum": 1,
"type": "integer"
},
"search": {
"default": "",
"description": "Search source paths and destinations.",
"maxLength": 200,
"type": "string"
},
"status": {
"default": "all",
"description": "Filter by active state.",
"enum": [
"all",
"active",
"inactive"
],
"type": "string"
},
"type": {
"default": "all",
"description": "Filter by HTTP status code.",
"enum": [
"all",
"301",
"302"
],
"type": "string"
}
},
"required": [
"blogId"
],
"type": "object"
},
"name": "list_redirects",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List blog tags with optional case-insensitive search filtering.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"search": {
"description": "Optional tag name search filter.",
"type": "string"
}
},
"required": [
"blogId"
],
"type": "object"
},
"name": "list_tags",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "List the theme file tree for a blog (layouts, templates, assets, etc.).",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId"
],
"type": "object"
},
"name": "list_theme_files",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Submit the latest saved revision of a draft post or page for review.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"comment": {
"description": "Optional review comment. Maximum 2,000 characters.",
"maxLength": 2000,
"type": "string"
},
"contentId": {
"description": "Post or page ID.",
"minLength": 1,
"type": "string"
},
"contentType": {
"description": "Content type.",
"enum": [
"post",
"page"
],
"type": "string"
}
},
"required": [
"blogId",
"contentType",
"contentId"
],
"type": "object"
},
"name": "submit_content_review",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Switch a blog to a different built-in theme or to custom if theme files exist.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"theme_id": {
"description": "Theme ID. Use custom for blogs with edited theme files.",
"enum": [
"just",
"obsidian",
"linen",
"tribune",
"beacon",
"aside",
"changes",
"custom"
],
"type": "string"
}
},
"required": [
"blogId",
"theme_id"
],
"type": "object"
},
"name": "switch_theme",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Update blog settings including name, subdomain, description, and logo. Requires owner or admin access.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID.",
"minLength": 1,
"type": "string"
},
"description": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
],
"description": "Updated blog description."
},
"logo": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
],
"description": "Updated logo URL."
},
"name": {
"description": "Updated blog name.",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"subdomain": {
"description": "Updated blog subdomain.",
"maxLength": 40,
"minLength": 1,
"pattern": "^(?!(?:api|admin|www|mail|app|dashboard|login|signup|blog|static|assets)$)(?!.*--)[a-z0-9]([a-z0-9-]*[a-z0-9])?$",
"type": "string"
}
},
"required": [
"blogId",
"name",
"subdomain"
],
"type": "object"
},
"name": "update_blog",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID.",
"minLength": 1,
"type": "string"
},
"domain": {
"anyOf": [
{
"maxLength": 100,
"minLength": 1,
"pattern": "^[a-zA-Z0-9-]+(\\.[a-zA-Z]{2,})+$",
"type": "string"
},
{
"const": "",
"type": "string"
}
],
"description": "Custom domain (e.g. blog.example.com) or root domain for subdirectory mode. Pass empty string to remove."
},
"domain_slug": {
"anyOf": [
{
"maxLength": 50,
"pattern": "^[a-zA-Z0-9-_]*$",
"type": "string"
},
{
"type": "null"
}
],
"description": "Optional subdirectory slug for subdirectory hosting (e.g. example.com + blog)."
}
},
"required": [
"blogId",
"domain"
],
"type": "object"
},
"name": "update_blog_domain",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID.",
"minLength": 1,
"type": "string"
},
"metadata": {
"description": "Custom blog metadata entries as key/value objects. Theme changes must use switch_theme or update_theme_settings.",
"items": {
"additionalProperties": false,
"properties": {
"key": {
"pattern": "^(?!(?:themeId|themeSettings|hasThemeFiles|themeUpdatedAt|customThemeBaseId)$).+$",
"type": "string"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"required": [
"key",
"value"
],
"type": "object"
},
"type": "array"
}
},
"required": [
"blogId",
"metadata"
],
"type": "object"
},
"name": "update_blog_metadata",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Update an existing collection's name, slug, or description.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"collectionId": {
"description": "Collection ID.",
"minLength": 1,
"type": "string"
},
"description": {
"description": "Updated collection description.",
"maxLength": 256,
"type": "string"
},
"name": {
"description": "Updated collection name.",
"maxLength": 32,
"minLength": 1,
"type": "string"
},
"slug": {
"description": "Updated collection slug.",
"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*$",
"type": "string"
}
},
"required": [
"blogId",
"collectionId"
],
"type": "object"
},
"name": "update_collection",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Update any editable field on an existing static page.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"body": {
"description": "Updated HTML body.",
"maxLength": 1000000,
"minLength": 1,
"type": "string"
},
"image": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
],
"description": "Updated featured image path or URL. Use upload_image for local files."
},
"metadata": {
"description": "Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer.",
"items": {
"additionalProperties": false,
"properties": {
"key": {
"maxLength": 50,
"minLength": 1,
"type": "string"
},
"value": {
"maxLength": 500,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"value"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"pageId": {
"description": "Page ID.",
"minLength": 1,
"type": "string"
},
"slug": {
"description": "Updated page slug.",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"status": {
"description": "Updated publishing status.",
"enum": [
"draft",
"published"
],
"type": "string"
},
"title": {
"description": "Updated page title.",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"pageId"
],
"type": "object"
},
"name": "update_page",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Update any editable field on an existing blog post, including its author.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"authorId": {
"description": "Updated author user ID from list_blog_members. Reassignment requires owner or admin access.",
"minLength": 1,
"type": "string"
},
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"collection_id": {
"description": "Updated collection ID.",
"minLength": 1,
"type": "string"
},
"content": {
"description": "Updated HTML content.",
"maxLength": 1000000,
"minLength": 1,
"type": "string"
},
"image": {
"anyOf": [
{
"maxLength": 500,
"type": "string"
},
{
"type": "null"
}
],
"description": "Updated featured image path or URL. Use upload_image for local files."
},
"metadata": {
"description": "Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer.",
"items": {
"additionalProperties": false,
"properties": {
"key": {
"maxLength": 50,
"minLength": 1,
"type": "string"
},
"value": {
"maxLength": 500,
"minLength": 1,
"type": "string"
}
},
"required": [
"key",
"value"
],
"type": "object"
},
"maxItems": 20,
"type": "array"
},
"postId": {
"description": "Post ID.",
"minLength": 1,
"type": "string"
},
"published_at": {
"anyOf": [
{
"format": "date-time",
"type": "string"
},
{
"type": "null"
}
],
"description": "Updated publish datetime in ISO 8601 format."
},
"slug": {
"description": "Updated post slug.",
"maxLength": 100,
"minLength": 1,
"type": "string"
},
"status": {
"description": "Updated publishing status.",
"enum": [
"draft",
"published"
],
"type": "string"
},
"tags": {
"description": "Updated tag names.",
"items": {
"maxLength": 50,
"minLength": 1,
"type": "string"
},
"maxItems": 10,
"type": "array"
},
"title": {
"description": "Updated post title.",
"maxLength": 200,
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"postId"
],
"type": "object"
},
"name": "update_post",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "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.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"active": {
"description": "Whether this redirect should be applied.",
"type": "boolean"
},
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"destination": {
"description": "Updated destination site path or absolute HTTP(S) URL.",
"maxLength": 2048,
"minLength": 1,
"type": "string"
},
"redirectId": {
"description": "Redirect ID.",
"minLength": 1,
"type": "string"
},
"source_path": {
"description": "Updated incoming site path, starting with a single /.",
"maxLength": 2048,
"minLength": 1,
"type": "string"
},
"status_code": {
"anyOf": [
{
"const": 301,
"type": "number"
},
{
"const": 302,
"type": "number"
}
],
"description": "Updated HTTP redirect status code."
}
},
"required": [
"blogId",
"redirectId"
],
"type": "object"
},
"name": "update_redirect",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Rename a blog tag.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"name": {
"description": "New tag name. Allowed characters: letters, numbers, spaces, hyphens, underscores, periods.",
"maxLength": 50,
"minLength": 1,
"type": "string"
},
"tagId": {
"description": "Tag ID.",
"minLength": 1,
"type": "string"
}
},
"required": [
"blogId",
"tagId",
"name"
],
"type": "object"
},
"name": "update_tag",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"content": {
"description": "Full file content.",
"type": "string"
},
"file_path": {
"description": "Text theme file path ending in .liquid, .css, .js, .html, .json, .xml, or .txt.",
"minLength": 1,
"pattern": "^.+\\.(liquid|css|js|html|json|xml|txt)$",
"type": "string"
}
},
"required": [
"blogId",
"file_path",
"content"
],
"type": "object"
},
"name": "update_theme_file",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"values": {
"description": "JSON object containing theme setting names and values from get_theme_settings.",
"minLength": 2,
"type": "string"
}
},
"required": [
"blogId",
"values"
],
"type": "object"
},
"name": "update_theme_settings",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
},
{
"description": "Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog.",
"inputSchema": {
"additionalProperties": false,
"properties": {
"blogId": {
"description": "Blog ID. Use list_blogs to discover available blog IDs.",
"minLength": 1,
"type": "string"
},
"data": {
"description": "Base64-encoded image bytes without a data URL prefix. Maximum decoded size: 8 MB.",
"maxLength": 11184812,
"minLength": 1,
"pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
"type": "string"
},
"filename": {
"description": "Original image filename, including its extension.",
"maxLength": 255,
"minLength": 1,
"type": "string"
},
"mimeType": {
"description": "Image MIME type. SVG is supported only for logo uploads.",
"enum": [
"image/png",
"image/jpeg",
"image/webp",
"image/gif",
"image/svg+xml"
],
"type": "string"
},
"uploadType": {
"default": "post",
"description": "Where the image will be used. Default: post.",
"enum": [
"post",
"page",
"blog",
"logo"
],
"type": "string"
}
},
"required": [
"blogId",
"filename",
"mimeType",
"data"
],
"type": "object"
},
"name": "upload_image",
"outputSchema": {
"additionalProperties": false,
"properties": {
"result": {}
},
"required": [
"result"
],
"type": "object"
}
}
]
}Verify it yourself
curl -s https://api.teppi.xyz/v1/evidence/sha256:914a11215e72f11d22ac47217e94d4bebd2a833ba1d662a9a586708c1c780ad2 | sha256sum