{"$schema":"https://wellknown.network/schemas/agent-record-v1.json","schemaVersion":"1","id":"ag_4mkywv9tpzhn","handle":"justblogged","url":"https://wellknown.network/agents/justblogged","links":{"self":"https://wellknown.network/agents/justblogged/record.json","html":"https://wellknown.network/agents/justblogged","markdown":"https://wellknown.network/agents/justblogged/record.md","api":"https://wellknown.network/api/v1/agents/justblogged","status":"https://wellknown.network/api/v1/agents/justblogged/status","claim":"https://wellknown.network/agents/justblogged/claim","claimApi":"https://wellknown.network/api/v1/claims","claimDescriptor":"https://wellknown.network/agents/justblogged/claim.json","badge":"https://wellknown.network/agents/justblogged/badge.svg","openapi":"https://wellknown.network/openapi.json","history":"https://wellknown.network/api/v1/agents/justblogged/history","tools":"https://wellknown.network/api/v1/agents/justblogged/tools"},"ard":{"identifier":"urn:air:justblogged.com:server:justblogged","type":"application/mcp-server-card+json"},"kind":"mcp_server","declared":{"name":"JustBlogged","summary":"Create, edit, organize, publish, and configure JustBlogged blogs from MCP clients.","description":"Create, edit, organize, publish, and configure JustBlogged blogs from MCP clients.","publisher":{"name":"usamaejaz","url":null},"homepage":"https://justblogged.com/ai","repository":null,"version":"0.1.1","license":null,"protocols":["mcp"],"tags":[],"pricing":null,"endpoints":[{"url":"https://justblogged.com/mcp","type":"mcp_streamable_http","auth":null,"probeable":true}],"skills":null,"tools":null,"extra":{"updatedAt":"2026-10-10T10:14:33.597091Z","publishedAt":"2026-10-10T10:14:33.597091Z","registryName":"io.github.usamaejaz/justblogged"},"attribution":{"kind":"mcp_registry","name":"mcp_registry","summary":"mcp_registry","version":"mcp_registry","description":"mcp_registry","homepageUrl":"mcp_registry","publisherName":"mcp_registry"}},"derived":{"capabilities":[{"slug":"ai.prompting","name":"Prompt Management","confidence":0.525,"provenance":"derived"}],"categories":["ai"],"language":"en"},"observed":{"status":"live","statusReason":"Responded 1h ago.","lastOkAt":"2026-10-11T19:23:44.865Z","lastProbedAt":"2026-10-11T19:23:44.865Z","statusComputedAt":"2026-10-11T19:25:06.717Z","reliability30d":{"probes":110,"successRate":1,"p50Ms":53,"basis":"service","measures":{"availability":"availability","latency":"response time","tools":"tool surface observed","summary":"Checks reached the service itself."},"checks":{"total":107,"ok":107,"authBoundaryOk":0,"serviceOk":107,"note":"Counted from the observation rows for the window, checks of the server only (HTTP, A2A card, MCP initialize). ok = authBoundaryOk + serviceOk. `probes` is the sum of daily rollups and includes registry checks, so it can differ from `total`."}},"latestObservations":[{"at":"2026-10-11T19:23:44.865Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":74,"error":null,"detail":{"tools":[{"name":"list_blogs","description":"List the authenticated user's accessible blogs so later tool calls can target the right blogId."},{"name":"get_blog","description":"Get a single blog by ID, including settings like subdomain, domain, logo, and metadata."},{"name":"list_blog_members","description":"List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post."},{"name":"create_blog","description":"Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key."},{"name":"update_blog","description":"Update blog settings including name, subdomain, description, and logo. Requires owner or admin access."},{"name":"delete_blog","description":"Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically."},{"name":"get_blog_metadata","description":"Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values."},{"name":"update_blog_metadata","description":"Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools."},{"name":"update_blog_domain","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 (requir"},{"name":"list_available_themes","description":"List built-in themes available for a blog and show which theme is currently active."},{"name":"get_theme_settings","description":"Get theme settings schema and current values for a blog's active theme."},{"name":"update_theme_settings","description":"Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys."},{"name":"switch_theme","description":"Switch a blog to a different built-in theme or to custom if theme files exist."},{"name":"list_theme_files","description":"List the theme file tree for a blog (layouts, templates, assets, etc.)."},{"name":"get_theme_file","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."},{"name":"update_theme_file","description":"Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet."},{"name":"delete_theme_file","description":"Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files."},{"name":"upload_image","description":"Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog."},{"name":"list_posts","description":"List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date."},{"name":"get_post","description":"Get a single blog post by ID."},{"name":"create_post","description":"Create a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options. status=published makes the post live. "},{"name":"update_post","description":"Update any editable field on an existing blog post, including its author."},{"name":"delete_post","description":"Delete a blog post by ID."},{"name":"list_pages","description":"List static pages with pagination, filtering, and sorting."},{"name":"get_page","description":"Get a single static page by ID."},{"name":"create_page","description":"Create a new static page with title, HTML body, metadata, slug, image, and status. status=published makes the page live."},{"name":"update_page","description":"Update any editable field on an existing static page."},{"name":"delete_page","description":"Delete a static page by ID."},{"name":"list_redirects","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"},{"name":"get_redirect","description":"Get a single redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_redirect","description":"Create a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"update_redirect","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."},{"name":"delete_redirect","description":"Delete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_tag","description":"Create a new blog tag by name. Requires permission to manage taxonomy."},{"name":"list_tags","description":"List blog tags with optional case-insensitive search filtering."},{"name":"update_tag","description":"Rename a blog tag."},{"name":"delete_tag","description":"Delete a blog tag by ID."},{"name":"list_collections","description":"List all collections for a blog."},{"name":"get_collection","description":"Get a single collection by ID, including its post count."},{"name":"create_collection","description":"Create a new collection with name, slug, and optional description."},{"name":"update_collection","description":"Update an existing collection's name, slug, or description."},{"name":"delete_collection","description":"Delete a collection by ID and optionally reassign its posts to another collection."},{"name":"list_content_revisions","description":"List the saved revision history for a post or page. Returns revision metadata without full snapshots."},{"name":"get_content_revision","description":"Get one saved post or page revision, including its complete content snapshot."},{"name":"list_content_reviews","description":"List content review requests for a blog, filtered by status."},{"name":"get_latest_content_review","description":"Get the latest review associated with the newest saved revision of a post or page."},{"name":"submit_content_review","description":"Submit the latest saved revision of a draft post or page for review."},{"name":"decide_content_review","description":"Approve a pending content review or request changes. Approving a staged update to published content applies that revision."}],"toolCount":48,"toolsHash":"9a4d36f993d36811d8348fcc4513f8aed90725a22e518713a6b757958f960e43","serverName":"justblogged-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-11T12:25:19.541Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":175,"error":null,"detail":{"tools":[{"name":"list_blogs","description":"List the authenticated user's accessible blogs so later tool calls can target the right blogId."},{"name":"get_blog","description":"Get a single blog by ID, including settings like subdomain, domain, logo, and metadata."},{"name":"list_blog_members","description":"List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post."},{"name":"create_blog","description":"Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key."},{"name":"update_blog","description":"Update blog settings including name, subdomain, description, and logo. Requires owner or admin access."},{"name":"delete_blog","description":"Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically."},{"name":"get_blog_metadata","description":"Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values."},{"name":"update_blog_metadata","description":"Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools."},{"name":"update_blog_domain","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 (requir"},{"name":"list_available_themes","description":"List built-in themes available for a blog and show which theme is currently active."},{"name":"get_theme_settings","description":"Get theme settings schema and current values for a blog's active theme."},{"name":"update_theme_settings","description":"Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys."},{"name":"switch_theme","description":"Switch a blog to a different built-in theme or to custom if theme files exist."},{"name":"list_theme_files","description":"List the theme file tree for a blog (layouts, templates, assets, etc.)."},{"name":"get_theme_file","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."},{"name":"update_theme_file","description":"Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet."},{"name":"delete_theme_file","description":"Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files."},{"name":"upload_image","description":"Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog."},{"name":"list_posts","description":"List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date."},{"name":"get_post","description":"Get a single blog post by ID."},{"name":"create_post","description":"Create a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options. status=published makes the post live. "},{"name":"update_post","description":"Update any editable field on an existing blog post, including its author."},{"name":"delete_post","description":"Delete a blog post by ID."},{"name":"list_pages","description":"List static pages with pagination, filtering, and sorting."},{"name":"get_page","description":"Get a single static page by ID."},{"name":"create_page","description":"Create a new static page with title, HTML body, metadata, slug, image, and status. status=published makes the page live."},{"name":"update_page","description":"Update any editable field on an existing static page."},{"name":"delete_page","description":"Delete a static page by ID."},{"name":"list_redirects","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"},{"name":"get_redirect","description":"Get a single redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_redirect","description":"Create a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"update_redirect","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."},{"name":"delete_redirect","description":"Delete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_tag","description":"Create a new blog tag by name. Requires permission to manage taxonomy."},{"name":"list_tags","description":"List blog tags with optional case-insensitive search filtering."},{"name":"update_tag","description":"Rename a blog tag."},{"name":"delete_tag","description":"Delete a blog tag by ID."},{"name":"list_collections","description":"List all collections for a blog."},{"name":"get_collection","description":"Get a single collection by ID, including its post count."},{"name":"create_collection","description":"Create a new collection with name, slug, and optional description."},{"name":"update_collection","description":"Update an existing collection's name, slug, or description."},{"name":"delete_collection","description":"Delete a collection by ID and optionally reassign its posts to another collection."},{"name":"list_content_revisions","description":"List the saved revision history for a post or page. Returns revision metadata without full snapshots."},{"name":"get_content_revision","description":"Get one saved post or page revision, including its complete content snapshot."},{"name":"list_content_reviews","description":"List content review requests for a blog, filtered by status."},{"name":"get_latest_content_review","description":"Get the latest review associated with the newest saved revision of a post or page."},{"name":"submit_content_review","description":"Submit the latest saved revision of a draft post or page for review."},{"name":"decide_content_review","description":"Approve a pending content review or request changes. Approving a staged update to published content applies that revision."}],"toolCount":48,"toolsHash":"9a4d36f993d36811d8348fcc4513f8aed90725a22e518713a6b757958f960e43","serverName":"justblogged-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-11T05:25:38.561Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":31,"error":null,"detail":{"tools":[{"name":"list_blogs","description":"List the authenticated user's accessible blogs so later tool calls can target the right blogId."},{"name":"get_blog","description":"Get a single blog by ID, including settings like subdomain, domain, logo, and metadata."},{"name":"list_blog_members","description":"List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post."},{"name":"create_blog","description":"Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key."},{"name":"update_blog","description":"Update blog settings including name, subdomain, description, and logo. Requires owner or admin access."},{"name":"delete_blog","description":"Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically."},{"name":"get_blog_metadata","description":"Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values."},{"name":"update_blog_metadata","description":"Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools."},{"name":"update_blog_domain","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 (requir"},{"name":"list_available_themes","description":"List built-in themes available for a blog and show which theme is currently active."},{"name":"get_theme_settings","description":"Get theme settings schema and current values for a blog's active theme."},{"name":"update_theme_settings","description":"Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys."},{"name":"switch_theme","description":"Switch a blog to a different built-in theme or to custom if theme files exist."},{"name":"list_theme_files","description":"List the theme file tree for a blog (layouts, templates, assets, etc.)."},{"name":"get_theme_file","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."},{"name":"update_theme_file","description":"Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet."},{"name":"delete_theme_file","description":"Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files."},{"name":"upload_image","description":"Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog."},{"name":"list_posts","description":"List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date."},{"name":"get_post","description":"Get a single blog post by ID."},{"name":"create_post","description":"Create a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options. status=published makes the post live. "},{"name":"update_post","description":"Update any editable field on an existing blog post, including its author."},{"name":"delete_post","description":"Delete a blog post by ID."},{"name":"list_pages","description":"List static pages with pagination, filtering, and sorting."},{"name":"get_page","description":"Get a single static page by ID."},{"name":"create_page","description":"Create a new static page with title, HTML body, metadata, slug, image, and status. status=published makes the page live."},{"name":"update_page","description":"Update any editable field on an existing static page."},{"name":"delete_page","description":"Delete a static page by ID."},{"name":"list_redirects","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"},{"name":"get_redirect","description":"Get a single redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_redirect","description":"Create a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"update_redirect","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."},{"name":"delete_redirect","description":"Delete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_tag","description":"Create a new blog tag by name. Requires permission to manage taxonomy."},{"name":"list_tags","description":"List blog tags with optional case-insensitive search filtering."},{"name":"update_tag","description":"Rename a blog tag."},{"name":"delete_tag","description":"Delete a blog tag by ID."},{"name":"list_collections","description":"List all collections for a blog."},{"name":"get_collection","description":"Get a single collection by ID, including its post count."},{"name":"create_collection","description":"Create a new collection with name, slug, and optional description."},{"name":"update_collection","description":"Update an existing collection's name, slug, or description."},{"name":"delete_collection","description":"Delete a collection by ID and optionally reassign its posts to another collection."},{"name":"list_content_revisions","description":"List the saved revision history for a post or page. Returns revision metadata without full snapshots."},{"name":"get_content_revision","description":"Get one saved post or page revision, including its complete content snapshot."},{"name":"list_content_reviews","description":"List content review requests for a blog, filtered by status."},{"name":"get_latest_content_review","description":"Get the latest review associated with the newest saved revision of a post or page."},{"name":"submit_content_review","description":"Submit the latest saved revision of a draft post or page for review."},{"name":"decide_content_review","description":"Approve a pending content review or request changes. Approving a staged update to published content applies that revision."}],"toolCount":48,"toolsHash":"9a4d36f993d36811d8348fcc4513f8aed90725a22e518713a6b757958f960e43","serverName":"justblogged-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T22:21:17.065Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":43,"error":null,"detail":{"tools":[{"name":"list_blogs","description":"List the authenticated user's accessible blogs so later tool calls can target the right blogId."},{"name":"get_blog","description":"Get a single blog by ID, including settings like subdomain, domain, logo, and metadata."},{"name":"list_blog_members","description":"List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post."},{"name":"create_blog","description":"Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key."},{"name":"update_blog","description":"Update blog settings including name, subdomain, description, and logo. Requires owner or admin access."},{"name":"delete_blog","description":"Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically."},{"name":"get_blog_metadata","description":"Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values."},{"name":"update_blog_metadata","description":"Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools."},{"name":"update_blog_domain","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 (requir"},{"name":"list_available_themes","description":"List built-in themes available for a blog and show which theme is currently active."},{"name":"get_theme_settings","description":"Get theme settings schema and current values for a blog's active theme."},{"name":"update_theme_settings","description":"Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys."},{"name":"switch_theme","description":"Switch a blog to a different built-in theme or to custom if theme files exist."},{"name":"list_theme_files","description":"List the theme file tree for a blog (layouts, templates, assets, etc.)."},{"name":"get_theme_file","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."},{"name":"update_theme_file","description":"Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet."},{"name":"delete_theme_file","description":"Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files."},{"name":"upload_image","description":"Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog."},{"name":"list_posts","description":"List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date."},{"name":"get_post","description":"Get a single blog post by ID."},{"name":"create_post","description":"Create a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options. status=published makes the post live. "},{"name":"update_post","description":"Update any editable field on an existing blog post, including its author."},{"name":"delete_post","description":"Delete a blog post by ID."},{"name":"list_pages","description":"List static pages with pagination, filtering, and sorting."},{"name":"get_page","description":"Get a single static page by ID."},{"name":"create_page","description":"Create a new static page with title, HTML body, metadata, slug, image, and status. status=published makes the page live."},{"name":"update_page","description":"Update any editable field on an existing static page."},{"name":"delete_page","description":"Delete a static page by ID."},{"name":"list_redirects","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"},{"name":"get_redirect","description":"Get a single redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_redirect","description":"Create a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"update_redirect","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."},{"name":"delete_redirect","description":"Delete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_tag","description":"Create a new blog tag by name. Requires permission to manage taxonomy."},{"name":"list_tags","description":"List blog tags with optional case-insensitive search filtering."},{"name":"update_tag","description":"Rename a blog tag."},{"name":"delete_tag","description":"Delete a blog tag by ID."},{"name":"list_collections","description":"List all collections for a blog."},{"name":"get_collection","description":"Get a single collection by ID, including its post count."},{"name":"create_collection","description":"Create a new collection with name, slug, and optional description."},{"name":"update_collection","description":"Update an existing collection's name, slug, or description."},{"name":"delete_collection","description":"Delete a collection by ID and optionally reassign its posts to another collection."},{"name":"list_content_revisions","description":"List the saved revision history for a post or page. Returns revision metadata without full snapshots."},{"name":"get_content_revision","description":"Get one saved post or page revision, including its complete content snapshot."},{"name":"list_content_reviews","description":"List content review requests for a blog, filtered by status."},{"name":"get_latest_content_review","description":"Get the latest review associated with the newest saved revision of a post or page."},{"name":"submit_content_review","description":"Submit the latest saved revision of a draft post or page for review."},{"name":"decide_content_review","description":"Approve a pending content review or request changes. Approving a staged update to published content applies that revision."}],"toolCount":48,"toolsHash":"9a4d36f993d36811d8348fcc4513f8aed90725a22e518713a6b757958f960e43","serverName":"justblogged-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T15:30:12.657Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":49,"error":null,"detail":{"tools":[{"name":"list_blogs","description":"List the authenticated user's accessible blogs so later tool calls can target the right blogId."},{"name":"get_blog","description":"Get a single blog by ID, including settings like subdomain, domain, logo, and metadata."},{"name":"list_blog_members","description":"List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post."},{"name":"create_blog","description":"Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key."},{"name":"update_blog","description":"Update blog settings including name, subdomain, description, and logo. Requires owner or admin access."},{"name":"delete_blog","description":"Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically."},{"name":"get_blog_metadata","description":"Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values."},{"name":"update_blog_metadata","description":"Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools."},{"name":"update_blog_domain","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 (requir"},{"name":"list_available_themes","description":"List built-in themes available for a blog and show which theme is currently active."},{"name":"get_theme_settings","description":"Get theme settings schema and current values for a blog's active theme."},{"name":"update_theme_settings","description":"Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys."},{"name":"switch_theme","description":"Switch a blog to a different built-in theme or to custom if theme files exist."},{"name":"list_theme_files","description":"List the theme file tree for a blog (layouts, templates, assets, etc.)."},{"name":"get_theme_file","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."},{"name":"update_theme_file","description":"Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet."},{"name":"delete_theme_file","description":"Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files."},{"name":"upload_image","description":"Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog."},{"name":"list_posts","description":"List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date."},{"name":"get_post","description":"Get a single blog post by ID."},{"name":"create_post","description":"Create a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options. status=published makes the post live. "},{"name":"update_post","description":"Update any editable field on an existing blog post, including its author."},{"name":"delete_post","description":"Delete a blog post by ID."},{"name":"list_pages","description":"List static pages with pagination, filtering, and sorting."},{"name":"get_page","description":"Get a single static page by ID."},{"name":"create_page","description":"Create a new static page with title, HTML body, metadata, slug, image, and status. status=published makes the page live."},{"name":"update_page","description":"Update any editable field on an existing static page."},{"name":"delete_page","description":"Delete a static page by ID."},{"name":"list_redirects","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"},{"name":"get_redirect","description":"Get a single redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_redirect","description":"Create a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"update_redirect","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."},{"name":"delete_redirect","description":"Delete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_tag","description":"Create a new blog tag by name. Requires permission to manage taxonomy."},{"name":"list_tags","description":"List blog tags with optional case-insensitive search filtering."},{"name":"update_tag","description":"Rename a blog tag."},{"name":"delete_tag","description":"Delete a blog tag by ID."},{"name":"list_collections","description":"List all collections for a blog."},{"name":"get_collection","description":"Get a single collection by ID, including its post count."},{"name":"create_collection","description":"Create a new collection with name, slug, and optional description."},{"name":"update_collection","description":"Update an existing collection's name, slug, or description."},{"name":"delete_collection","description":"Delete a collection by ID and optionally reassign its posts to another collection."},{"name":"list_content_revisions","description":"List the saved revision history for a post or page. Returns revision metadata without full snapshots."},{"name":"get_content_revision","description":"Get one saved post or page revision, including its complete content snapshot."},{"name":"list_content_reviews","description":"List content review requests for a blog, filtered by status."},{"name":"get_latest_content_review","description":"Get the latest review associated with the newest saved revision of a post or page."},{"name":"submit_content_review","description":"Submit the latest saved revision of a draft post or page for review."},{"name":"decide_content_review","description":"Approve a pending content review or request changes. Approving a staged update to published content applies that revision."}],"toolCount":48,"toolsHash":"9a4d36f993d36811d8348fcc4513f8aed90725a22e518713a6b757958f960e43","serverName":"justblogged-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T08:33:19.180Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":71,"error":null,"detail":{"tools":[{"name":"list_blogs","description":"List the authenticated user's accessible blogs so later tool calls can target the right blogId."},{"name":"get_blog","description":"Get a single blog by ID, including settings like subdomain, domain, logo, and metadata."},{"name":"list_blog_members","description":"List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post."},{"name":"create_blog","description":"Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key."},{"name":"update_blog","description":"Update blog settings including name, subdomain, description, and logo. Requires owner or admin access."},{"name":"delete_blog","description":"Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically."},{"name":"get_blog_metadata","description":"Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values."},{"name":"update_blog_metadata","description":"Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools."},{"name":"update_blog_domain","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 (requir"},{"name":"list_available_themes","description":"List built-in themes available for a blog and show which theme is currently active."},{"name":"get_theme_settings","description":"Get theme settings schema and current values for a blog's active theme."},{"name":"update_theme_settings","description":"Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys."},{"name":"switch_theme","description":"Switch a blog to a different built-in theme or to custom if theme files exist."},{"name":"list_theme_files","description":"List the theme file tree for a blog (layouts, templates, assets, etc.)."},{"name":"get_theme_file","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."},{"name":"update_theme_file","description":"Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet."},{"name":"delete_theme_file","description":"Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files."},{"name":"upload_image","description":"Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog."},{"name":"list_posts","description":"List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date."},{"name":"get_post","description":"Get a single blog post by ID."},{"name":"create_post","description":"Create a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options. status=published makes the post live. "},{"name":"update_post","description":"Update any editable field on an existing blog post, including its author."},{"name":"delete_post","description":"Delete a blog post by ID."},{"name":"list_pages","description":"List static pages with pagination, filtering, and sorting."},{"name":"get_page","description":"Get a single static page by ID."},{"name":"create_page","description":"Create a new static page with title, HTML body, metadata, slug, image, and status. status=published makes the page live."},{"name":"update_page","description":"Update any editable field on an existing static page."},{"name":"delete_page","description":"Delete a static page by ID."},{"name":"list_redirects","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"},{"name":"get_redirect","description":"Get a single redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_redirect","description":"Create a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"update_redirect","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."},{"name":"delete_redirect","description":"Delete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_tag","description":"Create a new blog tag by name. Requires permission to manage taxonomy."},{"name":"list_tags","description":"List blog tags with optional case-insensitive search filtering."},{"name":"update_tag","description":"Rename a blog tag."},{"name":"delete_tag","description":"Delete a blog tag by ID."},{"name":"list_collections","description":"List all collections for a blog."},{"name":"get_collection","description":"Get a single collection by ID, including its post count."},{"name":"create_collection","description":"Create a new collection with name, slug, and optional description."},{"name":"update_collection","description":"Update an existing collection's name, slug, or description."},{"name":"delete_collection","description":"Delete a collection by ID and optionally reassign its posts to another collection."},{"name":"list_content_revisions","description":"List the saved revision history for a post or page. Returns revision metadata without full snapshots."},{"name":"get_content_revision","description":"Get one saved post or page revision, including its complete content snapshot."},{"name":"list_content_reviews","description":"List content review requests for a blog, filtered by status."},{"name":"get_latest_content_review","description":"Get the latest review associated with the newest saved revision of a post or page."},{"name":"submit_content_review","description":"Submit the latest saved revision of a draft post or page for review."},{"name":"decide_content_review","description":"Approve a pending content review or request changes. Approving a staged update to published content applies that revision."}],"toolCount":48,"toolsHash":"9a4d36f993d36811d8348fcc4513f8aed90725a22e518713a6b757958f960e43","serverName":"justblogged-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-10T02:31:32.282Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":41,"error":null,"detail":{"tools":[{"name":"list_blogs","description":"List the authenticated user's accessible blogs so later tool calls can target the right blogId."},{"name":"get_blog","description":"Get a single blog by ID, including settings like subdomain, domain, logo, and metadata."},{"name":"list_blog_members","description":"List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post."},{"name":"create_blog","description":"Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key."},{"name":"update_blog","description":"Update blog settings including name, subdomain, description, and logo. Requires owner or admin access."},{"name":"delete_blog","description":"Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically."},{"name":"get_blog_metadata","description":"Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values."},{"name":"update_blog_metadata","description":"Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools."},{"name":"update_blog_domain","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 (requir"},{"name":"list_available_themes","description":"List built-in themes available for a blog and show which theme is currently active."},{"name":"get_theme_settings","description":"Get theme settings schema and current values for a blog's active theme."},{"name":"update_theme_settings","description":"Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys."},{"name":"switch_theme","description":"Switch a blog to a different built-in theme or to custom if theme files exist."},{"name":"list_theme_files","description":"List the theme file tree for a blog (layouts, templates, assets, etc.)."},{"name":"get_theme_file","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."},{"name":"update_theme_file","description":"Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet."},{"name":"delete_theme_file","description":"Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files."},{"name":"upload_image","description":"Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog."},{"name":"list_posts","description":"List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date."},{"name":"get_post","description":"Get a single blog post by ID."},{"name":"create_post","description":"Create a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options. status=published makes the post live. "},{"name":"update_post","description":"Update any editable field on an existing blog post, including its author."},{"name":"delete_post","description":"Delete a blog post by ID."},{"name":"list_pages","description":"List static pages with pagination, filtering, and sorting."},{"name":"get_page","description":"Get a single static page by ID."},{"name":"create_page","description":"Create a new static page with title, HTML body, metadata, slug, image, and status. status=published makes the page live."},{"name":"update_page","description":"Update any editable field on an existing static page."},{"name":"delete_page","description":"Delete a static page by ID."},{"name":"list_redirects","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"},{"name":"get_redirect","description":"Get a single redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_redirect","description":"Create a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"update_redirect","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."},{"name":"delete_redirect","description":"Delete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_tag","description":"Create a new blog tag by name. Requires permission to manage taxonomy."},{"name":"list_tags","description":"List blog tags with optional case-insensitive search filtering."},{"name":"update_tag","description":"Rename a blog tag."},{"name":"delete_tag","description":"Delete a blog tag by ID."},{"name":"list_collections","description":"List all collections for a blog."},{"name":"get_collection","description":"Get a single collection by ID, including its post count."},{"name":"create_collection","description":"Create a new collection with name, slug, and optional description."},{"name":"update_collection","description":"Update an existing collection's name, slug, or description."},{"name":"delete_collection","description":"Delete a collection by ID and optionally reassign its posts to another collection."},{"name":"list_content_revisions","description":"List the saved revision history for a post or page. Returns revision metadata without full snapshots."},{"name":"get_content_revision","description":"Get one saved post or page revision, including its complete content snapshot."},{"name":"list_content_reviews","description":"List content review requests for a blog, filtered by status."},{"name":"get_latest_content_review","description":"Get the latest review associated with the newest saved revision of a post or page."},{"name":"submit_content_review","description":"Submit the latest saved revision of a draft post or page for review."},{"name":"decide_content_review","description":"Approve a pending content review or request changes. Approving a staged update to published content applies that revision."}],"toolCount":48,"toolsHash":"9a4d36f993d36811d8348fcc4513f8aed90725a22e518713a6b757958f960e43","serverName":"justblogged-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T20:30:06.274Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":75,"error":null,"detail":{"tools":[{"name":"list_blogs","description":"List the authenticated user's accessible blogs so later tool calls can target the right blogId."},{"name":"get_blog","description":"Get a single blog by ID, including settings like subdomain, domain, logo, and metadata."},{"name":"list_blog_members","description":"List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post."},{"name":"create_blog","description":"Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key."},{"name":"update_blog","description":"Update blog settings including name, subdomain, description, and logo. Requires owner or admin access."},{"name":"delete_blog","description":"Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically."},{"name":"get_blog_metadata","description":"Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values."},{"name":"update_blog_metadata","description":"Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools."},{"name":"update_blog_domain","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 (requir"},{"name":"list_available_themes","description":"List built-in themes available for a blog and show which theme is currently active."},{"name":"get_theme_settings","description":"Get theme settings schema and current values for a blog's active theme."},{"name":"update_theme_settings","description":"Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys."},{"name":"switch_theme","description":"Switch a blog to a different built-in theme or to custom if theme files exist."},{"name":"list_theme_files","description":"List the theme file tree for a blog (layouts, templates, assets, etc.)."},{"name":"get_theme_file","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."},{"name":"update_theme_file","description":"Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet."},{"name":"delete_theme_file","description":"Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files."},{"name":"upload_image","description":"Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog."},{"name":"list_posts","description":"List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date."},{"name":"get_post","description":"Get a single blog post by ID."},{"name":"create_post","description":"Create a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options. status=published makes the post live. "},{"name":"update_post","description":"Update any editable field on an existing blog post, including its author."},{"name":"delete_post","description":"Delete a blog post by ID."},{"name":"list_pages","description":"List static pages with pagination, filtering, and sorting."},{"name":"get_page","description":"Get a single static page by ID."},{"name":"create_page","description":"Create a new static page with title, HTML body, metadata, slug, image, and status. status=published makes the page live."},{"name":"update_page","description":"Update any editable field on an existing static page."},{"name":"delete_page","description":"Delete a static page by ID."},{"name":"list_redirects","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"},{"name":"get_redirect","description":"Get a single redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_redirect","description":"Create a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"update_redirect","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."},{"name":"delete_redirect","description":"Delete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_tag","description":"Create a new blog tag by name. Requires permission to manage taxonomy."},{"name":"list_tags","description":"List blog tags with optional case-insensitive search filtering."},{"name":"update_tag","description":"Rename a blog tag."},{"name":"delete_tag","description":"Delete a blog tag by ID."},{"name":"list_collections","description":"List all collections for a blog."},{"name":"get_collection","description":"Get a single collection by ID, including its post count."},{"name":"create_collection","description":"Create a new collection with name, slug, and optional description."},{"name":"update_collection","description":"Update an existing collection's name, slug, or description."},{"name":"delete_collection","description":"Delete a collection by ID and optionally reassign its posts to another collection."},{"name":"list_content_revisions","description":"List the saved revision history for a post or page. Returns revision metadata without full snapshots."},{"name":"get_content_revision","description":"Get one saved post or page revision, including its complete content snapshot."},{"name":"list_content_reviews","description":"List content review requests for a blog, filtered by status."},{"name":"get_latest_content_review","description":"Get the latest review associated with the newest saved revision of a post or page."},{"name":"submit_content_review","description":"Submit the latest saved revision of a draft post or page for review."},{"name":"decide_content_review","description":"Approve a pending content review or request changes. Approving a staged update to published content applies that revision."}],"toolCount":48,"toolsHash":"9a4d36f993d36811d8348fcc4513f8aed90725a22e518713a6b757958f960e43","serverName":"justblogged-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.1","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T14:30:00.121Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":43,"error":null,"detail":{"tools":[{"name":"list_blogs","description":"List the authenticated user's accessible blogs so later tool calls can target the right blogId."},{"name":"get_blog","description":"Get a single blog by ID, including settings like subdomain, domain, logo, and metadata."},{"name":"list_blog_members","description":"List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post."},{"name":"create_blog","description":"Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key."},{"name":"update_blog","description":"Update blog settings including name, subdomain, description, and logo. Requires owner or admin access."},{"name":"delete_blog","description":"Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically."},{"name":"get_blog_metadata","description":"Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values."},{"name":"update_blog_metadata","description":"Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools."},{"name":"update_blog_domain","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 (requir"},{"name":"list_available_themes","description":"List built-in themes available for a blog and show which theme is currently active."},{"name":"get_theme_settings","description":"Get theme settings schema and current values for a blog's active theme."},{"name":"update_theme_settings","description":"Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys."},{"name":"switch_theme","description":"Switch a blog to a different built-in theme or to custom if theme files exist."},{"name":"list_theme_files","description":"List the theme file tree for a blog (layouts, templates, assets, etc.)."},{"name":"get_theme_file","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."},{"name":"update_theme_file","description":"Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet."},{"name":"delete_theme_file","description":"Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files."},{"name":"upload_image","description":"Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog."},{"name":"list_posts","description":"List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date."},{"name":"get_post","description":"Get a single blog post by ID."},{"name":"create_post","description":"Create a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options."},{"name":"update_post","description":"Update any editable field on an existing blog post, including its author."},{"name":"delete_post","description":"Delete a blog post by ID."},{"name":"list_pages","description":"List static pages with pagination, filtering, and sorting."},{"name":"get_page","description":"Get a single static page by ID."},{"name":"create_page","description":"Create a new static page with title, HTML body, metadata, slug, image, and status."},{"name":"update_page","description":"Update any editable field on an existing static page."},{"name":"delete_page","description":"Delete a static page by ID."},{"name":"list_redirects","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"},{"name":"create_redirect","description":"Create a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"update_redirect","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."},{"name":"delete_redirect","description":"Delete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"list_tags","description":"List blog tags with optional case-insensitive search filtering."},{"name":"update_tag","description":"Rename a blog tag."},{"name":"delete_tag","description":"Delete a blog tag by ID."},{"name":"list_collections","description":"List all collections for a blog."},{"name":"create_collection","description":"Create a new collection with name, slug, and optional description."},{"name":"update_collection","description":"Update an existing collection's name, slug, or description."},{"name":"delete_collection","description":"Delete a collection by ID and optionally reassign its posts to another collection."},{"name":"list_content_revisions","description":"List the saved revision history for a post or page. Returns revision metadata without full snapshots."},{"name":"get_content_revision","description":"Get one saved post or page revision, including its complete content snapshot."},{"name":"list_content_reviews","description":"List content review requests for a blog, filtered by status."},{"name":"get_latest_content_review","description":"Get the latest review associated with the newest saved revision of a post or page."},{"name":"submit_content_review","description":"Submit the latest saved revision of a draft post or page for review."},{"name":"decide_content_review","description":"Approve a pending content review or request changes. Approving a staged update to published content applies that revision."}],"toolCount":45,"toolsHash":"522751d542cc36cee467732fcd254741e744b417616ca41f2d15b7362b9a63dc","serverName":"justblogged-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}},{"at":"2026-10-09T07:24:49.955Z","kind":"mcp_initialize","ok":true,"httpStatus":200,"latencyMs":37,"error":null,"detail":{"tools":[{"name":"list_blogs","description":"List the authenticated user's accessible blogs so later tool calls can target the right blogId."},{"name":"get_blog","description":"Get a single blog by ID, including settings like subdomain, domain, logo, and metadata."},{"name":"list_blog_members","description":"List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post."},{"name":"create_blog","description":"Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key."},{"name":"update_blog","description":"Update blog settings including name, subdomain, description, and logo. Requires owner or admin access."},{"name":"delete_blog","description":"Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically."},{"name":"get_blog_metadata","description":"Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values."},{"name":"update_blog_metadata","description":"Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools."},{"name":"update_blog_domain","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 (requir"},{"name":"list_available_themes","description":"List built-in themes available for a blog and show which theme is currently active."},{"name":"get_theme_settings","description":"Get theme settings schema and current values for a blog's active theme."},{"name":"update_theme_settings","description":"Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys."},{"name":"switch_theme","description":"Switch a blog to a different built-in theme or to custom if theme files exist."},{"name":"list_theme_files","description":"List the theme file tree for a blog (layouts, templates, assets, etc.)."},{"name":"get_theme_file","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."},{"name":"update_theme_file","description":"Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet."},{"name":"delete_theme_file","description":"Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files."},{"name":"upload_image","description":"Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog."},{"name":"list_posts","description":"List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date."},{"name":"get_post","description":"Get a single blog post by ID."},{"name":"create_post","description":"Create a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options."},{"name":"update_post","description":"Update any editable field on an existing blog post, including its author."},{"name":"delete_post","description":"Delete a blog post by ID."},{"name":"list_pages","description":"List static pages with pagination, filtering, and sorting."},{"name":"get_page","description":"Get a single static page by ID."},{"name":"create_page","description":"Create a new static page with title, HTML body, metadata, slug, image, and status."},{"name":"update_page","description":"Update any editable field on an existing static page."},{"name":"delete_page","description":"Delete a static page by ID."},{"name":"list_redirects","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"},{"name":"create_redirect","description":"Create a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"update_redirect","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."},{"name":"delete_redirect","description":"Delete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"list_tags","description":"List blog tags with optional case-insensitive search filtering."},{"name":"update_tag","description":"Rename a blog tag."},{"name":"delete_tag","description":"Delete a blog tag by ID."},{"name":"list_collections","description":"List all collections for a blog."},{"name":"create_collection","description":"Create a new collection with name, slug, and optional description."},{"name":"update_collection","description":"Update an existing collection's name, slug, or description."},{"name":"delete_collection","description":"Delete a collection by ID and optionally reassign its posts to another collection."},{"name":"list_content_revisions","description":"List the saved revision history for a post or page. Returns revision metadata without full snapshots."},{"name":"get_content_revision","description":"Get one saved post or page revision, including its complete content snapshot."},{"name":"list_content_reviews","description":"List content review requests for a blog, filtered by status."},{"name":"get_latest_content_review","description":"Get the latest review associated with the newest saved revision of a post or page."},{"name":"submit_content_review","description":"Submit the latest saved revision of a draft post or page for review."},{"name":"decide_content_review","description":"Approve a pending content review or request changes. Approving a staged update to published content applies that revision."}],"toolCount":45,"toolsHash":"522751d542cc36cee467732fcd254741e744b417616ca41f2d15b7362b9a63dc","serverName":"justblogged-mcp","capabilities":["tools","resources"],"serverVersion":"0.1.0","protocolVersion":"2025-06-18"}}],"tools":[{"name":"list_blogs","description":"List the authenticated user's accessible blogs so later tool calls can target the right blogId."},{"name":"get_blog","description":"Get a single blog by ID, including settings like subdomain, domain, logo, and metadata."},{"name":"list_blog_members","description":"List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post."},{"name":"create_blog","description":"Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key."},{"name":"update_blog","description":"Update blog settings including name, subdomain, description, and logo. Requires owner or admin access."},{"name":"delete_blog","description":"Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically."},{"name":"get_blog_metadata","description":"Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values."},{"name":"update_blog_metadata","description":"Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools."},{"name":"update_blog_domain","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 (requir"},{"name":"list_available_themes","description":"List built-in themes available for a blog and show which theme is currently active."},{"name":"get_theme_settings","description":"Get theme settings schema and current values for a blog's active theme."},{"name":"update_theme_settings","description":"Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys."},{"name":"switch_theme","description":"Switch a blog to a different built-in theme or to custom if theme files exist."},{"name":"list_theme_files","description":"List the theme file tree for a blog (layouts, templates, assets, etc.)."},{"name":"get_theme_file","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."},{"name":"update_theme_file","description":"Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet."},{"name":"delete_theme_file","description":"Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files."},{"name":"upload_image","description":"Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog."},{"name":"list_posts","description":"List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date."},{"name":"get_post","description":"Get a single blog post by ID."},{"name":"create_post","description":"Create a new blog post with title, HTML content, author, collection, tags, metadata, slug, image, and publishing options. status=published makes the post live. "},{"name":"update_post","description":"Update any editable field on an existing blog post, including its author."},{"name":"delete_post","description":"Delete a blog post by ID."},{"name":"list_pages","description":"List static pages with pagination, filtering, and sorting."},{"name":"get_page","description":"Get a single static page by ID."},{"name":"create_page","description":"Create a new static page with title, HTML body, metadata, slug, image, and status. status=published makes the page live."},{"name":"update_page","description":"Update any editable field on an existing static page."},{"name":"delete_page","description":"Delete a static page by ID."},{"name":"list_redirects","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"},{"name":"get_redirect","description":"Get a single redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_redirect","description":"Create a redirect for a blog. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"update_redirect","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."},{"name":"delete_redirect","description":"Delete a redirect by ID. Requires owner or admin access through account-level OAuth or a user-scoped API key."},{"name":"create_tag","description":"Create a new blog tag by name. Requires permission to manage taxonomy."},{"name":"list_tags","description":"List blog tags with optional case-insensitive search filtering."},{"name":"update_tag","description":"Rename a blog tag."},{"name":"delete_tag","description":"Delete a blog tag by ID."},{"name":"list_collections","description":"List all collections for a blog."},{"name":"get_collection","description":"Get a single collection by ID, including its post count."},{"name":"create_collection","description":"Create a new collection with name, slug, and optional description."},{"name":"update_collection","description":"Update an existing collection's name, slug, or description."},{"name":"delete_collection","description":"Delete a collection by ID and optionally reassign its posts to another collection."},{"name":"list_content_revisions","description":"List the saved revision history for a post or page. Returns revision metadata without full snapshots."},{"name":"get_content_revision","description":"Get one saved post or page revision, including its complete content snapshot."},{"name":"list_content_reviews","description":"List content review requests for a blog, filtered by status."},{"name":"get_latest_content_review","description":"Get the latest review associated with the newest saved revision of a post or page."},{"name":"submit_content_review","description":"Submit the latest saved revision of a draft post or page for review."},{"name":"decide_content_review","description":"Approve a pending content review or request changes. Approving a staged update to published content applies that revision."}],"package":null,"toolSurface":{"id":"ts_ygexhg3jncdp","endpointId":"ep_2bx2rmkcrbf4","hash":"9a4d36f993d36811d8348fcc4513f8aed90725a22e518713a6b757958f960e43","toolCount":48,"serverName":"justblogged-mcp","serverVersion":"0.1.1","protocolVersion":"2025-06-18","firstSeenAt":"2026-10-09T20:30:06.298Z","lastSeenAt":"2026-10-11T19:23:44.876Z","observations":8,"toolNames":["list_blogs","get_blog","list_blog_members","create_blog","update_blog","delete_blog","get_blog_metadata","update_blog_metadata","update_blog_domain","list_available_themes","get_theme_settings","update_theme_settings","switch_theme","list_theme_files","get_theme_file","update_theme_file","delete_theme_file","upload_image","list_posts","get_post","create_post","update_post","delete_post","list_pages","get_page","create_page","update_page","delete_page","list_redirects","get_redirect","create_redirect","update_redirect","delete_redirect","create_tag","list_tags","update_tag","delete_tag","list_collections","get_collection","create_collection","update_collection","delete_collection","list_content_revisions","get_content_revision","list_content_reviews","get_latest_content_review","submit_content_review","decide_content_review"],"distinctSurfaces":2},"endpointFacts":[{"id":"ep_2bx2rmkcrbf4","url":"https://justblogged.com/mcp","type":"mcp_streamable_http","factsCheckedAt":"2026-10-09T14:30:00.141Z","auth":{"observedAt":"2026-10-09T14:30:00.179Z","authRequired":false,"scheme":null,"resourceMetadata":{"url":"https://justblogged.com/.well-known/oauth-protected-resource/mcp","resource":"https://justblogged.com/mcp","authorizationServers":["https://justblogged.com"],"scopesSupported":["blogs:manage"]},"authorizationServer":{"url":"https://justblogged.com/.well-known/oauth-authorization-server","issuer":"https://justblogged.com","grantTypesSupported":["authorization_code","refresh_token"],"codeChallengeMethodsSupported":["S256"],"tokenEndpointAuthMethodsSupported":["client_secret_basic","client_secret_post","none"],"dynamicClientRegistration":true,"dpopSigningAlgValuesSupported":[],"clientIdMetadataDocumentSupported":true},"conformance":{"dpop":false,"rfc8414":true,"rfc9728":true,"pkceS256":true,"clientIdMetadataDocument":true,"dynamicClientRegistration":true}},"tls":{"observedAt":"2026-10-09T14:30:00.198Z","protocol":"TLSv1.3","chainValid":true,"chainError":null,"hostMatches":true,"subject":"justblogged.com","issuer":{"commonName":"WE1","organization":"Google Trust Services"},"validFrom":"2026-09-06T21:47:25.000Z","validTo":"2026-12-05T22:47:23.000Z","daysToExpiry":55,"sanCount":1,"fingerprint256":"89:0F:68:E2:30:25:5C:8F:AA:64:4B:A0:DC:C3:0D:AA:0D:5C:A2:4A:8E:F7:D2:AA:FA:AF:D2:1C:94:30:7C:69"}}]},"verification":{"claimed":false,"claimedAt":null,"proofs":[]},"provenance":{"sources":[{"source":"mcp_registry","key":"io.github.usamaejaz/justblogged","url":"https://registry.modelcontextprotocol.io/v0/servers/io.github.usamaejaz%2Fjustblogged","firstSeenAt":"2026-09-07T05:18:19.125Z","fetchedAt":"2026-10-11T10:20:53.950Z","normalizedAt":"2026-10-11T10:20:53.950Z"}]},"firstSeenAt":"2026-09-07T05:18:19.125Z","updatedAt":"2026-10-11T19:26:06.997Z"}