JustBlogged
Measured conclusion: Deep-tested. L2 outcome: tools_ok.
Create, edit, organize, publish, and configure JustBlogged blogs from MCP clients.
| Author | io.github.usamaejaz |
|---|---|
| Access | remote |
| Publisher key required | No |
| Measured state | Deep-tested |
| L1 liveness | alive |
| L1 latency | 695 ms |
| Last measured | 2026-10-24 |
Add to your agent
Copy this into your MCP client config:
{
"mcpServers": {
"JustBlogged": {
"url": "https://justblogged.com/mcp",
"transport": "streamable-http"
}
}
}
Measured tools (48)
list_blogsread-onlyList the authenticated user's accessible blogs so later tool calls can target the right blogId.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_blogread-onlyGet a single blog by ID, including settings like subdomain, domain, logo, and metadata.
Parameters:
blogId(required) — string — Blog ID.
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_blog_membersread-onlyList blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post.
Parameters:
blogId(required) — string — Blog ID.
Hints: read-only yes · destructive no · idempotent yes · open-world no
create_blogCreate a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key.
Parameters:
name(required) — string — Blog name.logo— Optional logo URL.description— Optional blog description.
Hints: read-only no · destructive no · idempotent no · open-world yes
update_blogdestructiveUpdate blog settings including name, subdomain, description, and logo. Requires owner or admin access.
Parameters:
blogId(required) — string — Blog ID.name(required) — string — Updated blog name.subdomain(required) — string — Updated blog subdomain.logo— Updated logo URL.description— Updated blog description.
Hints: read-only no · destructive yes · idempotent no · open-world yes
delete_blogdestructiveDelete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically.
Parameters:
blogId(required) — string — Blog ID.
Hints: read-only no · destructive yes · idempotent no · open-world yes
get_blog_metadataread-onlyGet custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values.
Parameters:
blogId(required) — string — Blog ID.
Hints: read-only yes · destructive no · idempotent yes · open-world no
update_blog_metadatadestructiveMerge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools.
Parameters:
blogId(required) — string — Blog ID.metadata(required) — array — Custom blog metadata entries as key/value objects. Theme changes must use switch_theme or update_theme_settings.
Hints: read-only no · destructive yes · idempotent no · open-world yes
update_blog_domaindestructiveConfigure 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.
Parameters:
blogId(required) — string — Blog ID.domain(required) — Custom domain (e.g. blog.example.com) or root domain for subdirectory mode. Pass empty string to remove.domain_slug— Optional subdirectory slug for subdirectory hosting (e.g. example.com + blog).
Hints: read-only no · destructive yes · idempotent no · open-world yes
list_available_themesread-onlyList built-in themes available for a blog and show which theme is currently active.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_theme_settingsread-onlyGet theme settings schema and current values for a blog's active theme.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.
Hints: read-only yes · destructive no · idempotent yes · open-world no
update_theme_settingsdestructiveUpdate one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.values(required) — string — JSON object containing theme setting names and values from get_theme_settings.
Hints: read-only no · destructive yes · idempotent no · open-world yes
switch_themedestructiveSwitch a blog to a different built-in theme or to custom if theme files exist.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.theme_id(required) — string — Theme ID. Use custom for blogs with edited theme files.
Hints: read-only no · destructive yes · idempotent no · open-world yes
list_theme_filesread-onlyList the theme file tree for a blog (layouts, templates, assets, etc.).
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_theme_fileread-onlyRead a theme file by path (e.g. layouts/theme.liquid). Falls back to the active built-in theme when no custom copy exists.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.file_path(required) — string — Text theme file path ending in .liquid, .css, .js, .html, .json, .xml, or .txt.
Hints: read-only yes · destructive no · idempotent yes · open-world no
update_theme_filedestructiveCreate or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.file_path(required) — string — Text theme file path ending in .liquid, .css, .js, .html, .json, .xml, or .txt.content(required) — string — Full file content.
Hints: read-only no · destructive yes · idempotent no · open-world yes
delete_theme_filedestructiveDelete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.file_path(required) — string — Theme file path relative to the theme root.
Hints: read-only no · destructive yes · idempotent no · open-world yes
upload_imageUpload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.filename(required) — string — Original image filename, including its extension.mimeType(required) — string — Image MIME type. SVG is supported only for logo uploads.data(required) — string — Base64-encoded image bytes without a data URL prefix. Maximum decoded size: 8 MB.uploadType— string — Where the image will be used. Default: post.
Hints: read-only no · destructive no · idempotent no · open-world yes
list_postsread-onlyList blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.page— integer — Page number. Default: 1.limit— integer — Page size. Default: 30, maximum: 100.order— string — Sort direction. Default: desc.tagId— string — Filter by tag ID.status— string — Filter by post status.userId— string — Filter by author user ID.orderBy— string — Sort field. Default: createdAt.collectionId— string — Filter by collection ID.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_postread-onlyGet a single blog post by ID.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.postId(required) — string — Post ID.
Hints: read-only yes · destructive no · idempotent yes · open-world no
create_postCreate a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options. status=published makes the post live. collection_id is optional; omit it to use the empty-slug default Posts collection. If that default does not exist, provide collection_id (call list_collections or create_collection).
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.title(required) — string — Post title.content(required) — string — Post HTML content.slug— Post slug. Auto-generated from title when omitted.tags— array — Tag names. Maximum 10 tags.image— Optional featured image path or URL. Use upload_image for local files.status— string — Publishing status. Default: draft.authorId— string — Optional author user ID from list_blog_members. Assigning another member requires owner or admin access.metadata— array — Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer.published_at— Optional publish datetime in ISO 8601 format.collection_id— string — Optional collection ID. When omitted, the collection with an empty slug is used. If none exists, use list_collections to choose a collection_id, or create_collection to create one first.
Hints: read-only no · destructive no · idempotent no · open-world yes
update_postdestructiveUpdate any editable field on an existing blog post, including its author.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.postId(required) — string — Post ID.slug— string — Updated post slug.tags— array — Updated tag names.image— Updated featured image path or URL. Use upload_image for local files.title— string — Updated post title.status— string — Updated publishing status.content— string — Updated HTML content.authorId— string — Updated author user ID from list_blog_members. Reassignment requires owner or admin access.metadata— array — Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer.published_at— Updated publish datetime in ISO 8601 format.collection_id— string — Updated collection ID.
Hints: read-only no · destructive yes · idempotent no · open-world yes
delete_postdestructiveDelete a blog post by ID.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.postId(required) — string — Post ID.
Hints: read-only no · destructive yes · idempotent no · open-world yes
list_pagesread-onlyList static pages with pagination, filtering, and sorting.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.page— integer — Page number. Default: 1.limit— integer — Page size. Default: 30, maximum: 100.order— string — Sort direction. Default: desc.status— string — Filter by page status.orderBy— string — Sort field. Default: updatedAt.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_pageread-onlyGet a single static page by ID.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.pageId(required) — string — Page ID.
Hints: read-only yes · destructive no · idempotent yes · open-world no
create_pageCreate a new static page with title, HTML body, metadata, slug, image, and status. status=published makes the page live.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.title(required) — string — Page title.body(required) — string — Page HTML body.slug— Page slug. Auto-generated from title when omitted.image— Optional featured image path or URL. Use upload_image for local files.status— string — Publishing status. Default: draft.metadata— array — Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer.
Hints: read-only no · destructive no · idempotent no · open-world yes
update_pagedestructiveUpdate any editable field on an existing static page.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.pageId(required) — string — Page ID.body— string — Updated HTML body.slug— string — Updated page slug.image— Updated featured image path or URL. Use upload_image for local files.title— string — Updated page title.status— string — Updated publishing status.metadata— array — Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer.
Hints: read-only no · destructive yes · idempotent no · open-world yes
delete_pagedestructiveDelete a static page by ID.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.pageId(required) — string — Page ID.
Hints: read-only no · destructive yes · idempotent no · open-world yes
list_redirectsread-onlyList 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.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.page— integer — Page number, starting at 1.type— string — Filter by HTTP status code.limit— integer — Redirects per page, from 1 to 100.search— string — Search source paths and destinations.status— string — Filter by active state.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_redirectread-onlyGet a single redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.redirectId(required) — string — Redirect ID.
Hints: read-only yes · destructive no · idempotent yes · open-world no
create_redirectdestructiveCreate a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.source_path(required) — string — Incoming site path to redirect, starting with a single /. Query strings and fragments are not allowed.destination(required) — string — Destination site path or absolute HTTP(S) URL.active— boolean — Whether this redirect should be applied.status_code— HTTP redirect status code. Use 301 for permanent redirects and 302 for temporary redirects.
Hints: read-only no · destructive yes · idempotent no · open-world yes
update_redirectdestructiveUpdate a redirect source, destination, status code, or active state. Requires owner or admin access through account-level OAuth or a user-scoped API key.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.redirectId(required) — string — Redirect ID.active— boolean — Whether this redirect should be applied.destination— string — Updated destination site path or absolute HTTP(S) URL.source_path— string — Updated incoming site path, starting with a single /.status_code— Updated HTTP redirect status code.
Hints: read-only no · destructive yes · idempotent no · open-world yes
delete_redirectdestructiveDelete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.redirectId(required) — string — Redirect ID.
Hints: read-only no · destructive yes · idempotent no · open-world yes
create_tagCreate a new blog tag by name. Requires permission to manage taxonomy.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.name(required) — string — New tag name. Allowed characters: letters, numbers, spaces, hyphens, underscores, periods.
Hints: read-only no · destructive no · idempotent no · open-world yes
list_tagsread-onlyList blog tags with optional case-insensitive search filtering.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.search— string — Optional tag name search filter.
Hints: read-only yes · destructive no · idempotent yes · open-world no
update_tagdestructiveRename a blog tag.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.tagId(required) — string — Tag ID.name(required) — string — New tag name. Allowed characters: letters, numbers, spaces, hyphens, underscores, periods.
Hints: read-only no · destructive yes · idempotent no · open-world yes
delete_tagdestructiveDelete a blog tag by ID.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.tagId(required) — string — Tag ID.
Hints: read-only no · destructive yes · idempotent no · open-world yes
list_collectionsread-onlyList all collections for a blog.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_collectionread-onlyGet a single collection by ID, including its post count.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.collectionId(required) — string — Collection ID.
Hints: read-only yes · destructive no · idempotent yes · open-world no
create_collectionCreate a new collection with name, slug, and optional description.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.name(required) — string — Collection name.slug(required) — string — Collection slug.description— string — Optional collection description.
Hints: read-only no · destructive no · idempotent no · open-world yes
update_collectiondestructiveUpdate an existing collection's name, slug, or description.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.collectionId(required) — string — Collection ID.name— string — Updated collection name.slug— string — Updated collection slug.description— string — Updated collection description.
Hints: read-only no · destructive yes · idempotent no · open-world yes
delete_collectiondestructiveDelete a collection by ID and optionally reassign its posts to another collection.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.collectionId(required) — string — Collection ID.reassign_to— string — Optional collection ID that should receive the deleted collection's posts.
Hints: read-only no · destructive yes · idempotent no · open-world yes
list_content_revisionsread-onlyList the saved revision history for a post or page. Returns revision metadata without full snapshots.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.contentType(required) — string — Content type.contentId(required) — string — Post or page ID.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_content_revisionread-onlyGet one saved post or page revision, including its complete content snapshot.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.contentType(required) — string — Content type.contentId(required) — string — Post or page ID.revisionId(required) — string — Revision ID from list_content_revisions.
Hints: read-only yes · destructive no · idempotent yes · open-world no
list_content_reviewsread-onlyList content review requests for a blog, filtered by status.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.status— string — Review status. Default: pending.
Hints: read-only yes · destructive no · idempotent yes · open-world no
get_latest_content_reviewread-onlyGet the latest review associated with the newest saved revision of a post or page.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.contentType(required) — string — Content type.contentId(required) — string — Post or page ID.
Hints: read-only yes · destructive no · idempotent yes · open-world no
submit_content_reviewSubmit the latest saved revision of a draft post or page for review.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.contentType(required) — string — Content type.contentId(required) — string — Post or page ID.comment— string — Optional review comment. Maximum 2,000 characters.
Hints: read-only no · destructive no · idempotent no · open-world yes
decide_content_reviewdestructiveApprove a pending content review or request changes. Approving a staged update to published content applies that revision.
Parameters:
blogId(required) — string — Blog ID. Use list_blogs to discover available blog IDs.reviewId(required) — string — Review ID from list_content_reviews.decision(required) — string — Review decision.comment— string — Review comment. Required when requesting changes; maximum 2,000 characters.
Hints: read-only no · destructive yes · idempotent no · open-world yes
Measured by MCPYP probing. Untested fields are omitted, never estimated. Listing is always free; MCPYP never proxies calls or stores user tokens.