JustBlogged MCP
A remote MCP server that allows AI clients to create, edit, organize, and publish blog posts, pages, and collections, as well as manage blog settings, themes, and domains via OAuth authentication.
Endpoint and access
OAuth sign-in: the first time you connect, your client opens the vendor's own authorization prompt in a browser.
https://justblogged.com/mcpWhat its tools do
48 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (21)
list_blogsget_bloglist_blog_membersget_blog_metadatalist_available_themesget_theme_settingslist_theme_filesget_theme_filelist_postsget_postlist_pagesget_pagelist_redirectsget_redirectlist_tagslist_collectionsget_collectionlist_content_revisionsget_content_revisionlist_content_reviewsget_latest_content_review
Can change data (27)
create_blogupdate_blogdelete_blogupdate_blog_metadataupdate_blog_domainupdate_theme_settingsswitch_themeupdate_theme_filedelete_theme_fileupload_imagecreate_postupdate_postdelete_postcreate_pageupdate_pagedelete_pagecreate_redirectupdate_redirectdelete_redirectcreate_tagupdate_tagdelete_tagcreate_collectionupdate_collectiondelete_collectionsubmit_content_reviewdecide_content_review
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Create and revise blog posts with titles, slugs, and metadata
- Manage evergreen pages like About and Contact
- Organize content using collections and tags
- Update blog settings, domains, and theme configurations
Source and maintenance
Protocol and capabilities
- Server
- justblogged-mcp 0.1.1
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 48 advertised
- Resources
- 1 advertised
- Resource templates
- Sign-in required
- Prompts
- Not advertised
{
"tools": {},
"resources": {}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
48 advertised
list_blogs — List blogs
List the authenticated user's accessible blogs so later tool calls can target the right blogId.
{
"type": "object",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_blog — Get blog
Get a single blog by ID, including settings like subdomain, domain, logo, and metadata.
{
"type": "object",
"required": [
"blogId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_blog_members — List blog members
List blog members who can be assigned as post authors. Use a member id as authorId in create_post or update_post.
{
"type": "object",
"required": [
"blogId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}create_blog — Create blog
Create a new blog. Subdomain is auto-generated from the name. Requires account-level OAuth or a user-scoped API key.
{
"type": "object",
"required": [
"name"
],
"properties": {
"logo": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "Optional logo URL."
},
"name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Blog name."
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "Optional blog description."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}update_blog — Update blog
Update blog settings including name, subdomain, description, and logo. Requires owner or admin access.
{
"type": "object",
"required": [
"blogId",
"name",
"subdomain"
],
"properties": {
"logo": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "Updated logo URL."
},
"name": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Updated blog name."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID."
},
"subdomain": {
"type": "string",
"pattern": "^(?!(?:api|admin|www|mail|app|dashboard|login|signup|blog|static|assets)$)(?!.*--)[a-z0-9]([a-z0-9-]*[a-z0-9])?$",
"maxLength": 40,
"minLength": 1,
"description": "Updated blog subdomain."
},
"description": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "Updated blog description."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}delete_blog — Delete blog
Delete a blog by ID. Only the blog owner can delete. Active subscriptions are cancelled automatically.
{
"type": "object",
"required": [
"blogId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}get_blog_metadata — Get blog metadata
Get custom metadata for a blog (SEO fields, themeId, etc.). Does not include themeSettings values.
{
"type": "object",
"required": [
"blogId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}update_blog_metadata — Update blog metadata
Merge custom metadata into a blog. Pass only the keys you want to add or update. Theme changes use the dedicated theme tools.
{
"type": "object",
"required": [
"blogId",
"metadata"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID."
},
"metadata": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"value"
],
"properties": {
"key": {
"type": "string",
"pattern": "^(?!(?:themeId|themeSettings|hasThemeFiles|themeUpdatedAt|customThemeBaseId)$).+$"
},
"value": {
"anyOf": [
{
"type": "string"
},
{
"type": "number"
},
{
"type": "boolean"
},
{
"type": "null"
}
]
}
},
"additionalProperties": false
},
"description": "Custom blog metadata entries as key/value objects. Theme changes must use switch_theme or update_theme_settings."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}update_blog_domain — Update blog domain
Configure or remove a blog's custom domain. Use domain only for custom domains (requires CNAME/A DNS). Use domain + domain_slug for subdirectory hosting (requires TXT DNS verification). Pass an empty domain string to remove the domain.
{
"type": "object",
"required": [
"blogId",
"domain"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID."
},
"domain": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-zA-Z0-9-]+(\\.[a-zA-Z]{2,})+$",
"maxLength": 100,
"minLength": 1
},
{
"type": "string",
"const": ""
}
],
"description": "Custom domain (e.g. blog.example.com) or root domain for subdirectory mode. Pass empty string to remove."
},
"domain_slug": {
"anyOf": [
{
"type": "string",
"pattern": "^[a-zA-Z0-9-_]*$",
"maxLength": 50
},
{
"type": "null"
}
],
"description": "Optional subdirectory slug for subdirectory hosting (e.g. example.com + blog)."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}list_available_themes — List available themes
List built-in themes available for a blog and show which theme is currently active.
{
"type": "object",
"required": [
"blogId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_theme_settings — Get theme settings
Get theme settings schema and current values for a blog's active theme.
{
"type": "object",
"required": [
"blogId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}update_theme_settings — Update theme settings
Update one or more theme setting values for a blog. Unspecified values are preserved. Use get_theme_settings first to discover valid keys.
{
"type": "object",
"required": [
"blogId",
"values"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"values": {
"type": "string",
"minLength": 2,
"description": "JSON object containing theme setting names and values from get_theme_settings."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}switch_theme — Switch theme
Switch a blog to a different built-in theme or to custom if theme files exist.
{
"type": "object",
"required": [
"blogId",
"theme_id"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"theme_id": {
"enum": [
"just",
"obsidian",
"linen",
"tribune",
"beacon",
"aside",
"changes",
"custom"
],
"type": "string",
"description": "Theme ID. Use custom for blogs with edited theme files."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}list_theme_files — List theme files
List the theme file tree for a blog (layouts, templates, assets, etc.).
{
"type": "object",
"required": [
"blogId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_theme_file — Get theme file
Read a theme file by path (e.g. layouts/theme.liquid). Falls back to the active built-in theme when no custom copy exists.
{
"type": "object",
"required": [
"blogId",
"file_path"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"file_path": {
"type": "string",
"pattern": "^.+\\.(liquid|css|js|html|json|xml|txt)$",
"minLength": 1,
"description": "Text theme file path ending in .liquid, .css, .js, .html, .json, .xml, or .txt."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}update_theme_file — Update theme file
Create or update a theme file. Requires a Pro subscription. Copies the built-in theme first if no custom files exist yet.
{
"type": "object",
"required": [
"blogId",
"file_path",
"content"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"content": {
"type": "string",
"description": "Full file content."
},
"file_path": {
"type": "string",
"pattern": "^.+\\.(liquid|css|js|html|json|xml|txt)$",
"minLength": 1,
"description": "Text theme file path ending in .liquid, .css, .js, .html, .json, .xml, or .txt."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}delete_theme_file — Delete theme file
Delete a custom theme file from a blog. Requires a Pro subscription. Cannot delete built-in-only files.
{
"type": "object",
"required": [
"blogId",
"file_path"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"file_path": {
"type": "string",
"minLength": 1,
"description": "Theme file path relative to the theme root."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}upload_image — Upload image
Upload an image to a blog. Use the returned path as the image value when creating or updating a post, page, or blog.
{
"type": "object",
"required": [
"blogId",
"filename",
"mimeType",
"data"
],
"properties": {
"data": {
"type": "string",
"pattern": "^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$",
"maxLength": 11184812,
"minLength": 1,
"description": "Base64-encoded image bytes without a data URL prefix. Maximum decoded size: 8 MB."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"filename": {
"type": "string",
"maxLength": 255,
"minLength": 1,
"description": "Original image filename, including its extension."
},
"mimeType": {
"enum": [
"image/png",
"image/jpeg",
"image/webp",
"image/gif",
"image/svg+xml"
],
"type": "string",
"description": "Image MIME type. SVG is supported only for logo uploads."
},
"uploadType": {
"enum": [
"post",
"page",
"blog",
"logo"
],
"type": "string",
"default": "post",
"description": "Where the image will be used. Default: post."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}list_posts — List posts
List blog posts with pagination, filtering, and sorting by status, collection, tag, author, or date.
{
"type": "object",
"required": [
"blogId"
],
"properties": {
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number. Default: 1."
},
"limit": {
"type": "integer",
"default": 30,
"maximum": 100,
"minimum": 1,
"description": "Page size. Default: 30, maximum: 100."
},
"order": {
"enum": [
"asc",
"desc"
],
"type": "string",
"default": "desc",
"description": "Sort direction. Default: desc."
},
"tagId": {
"type": "string",
"minLength": 1,
"description": "Filter by tag ID."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"status": {
"enum": [
"draft",
"published",
"scheduled",
"all"
],
"type": "string",
"description": "Filter by post status."
},
"userId": {
"type": "string",
"minLength": 1,
"description": "Filter by author user ID."
},
"orderBy": {
"enum": [
"createdAt",
"updatedAt",
"title",
"publishedAt"
],
"type": "string",
"default": "createdAt",
"description": "Sort field. Default: createdAt."
},
"collectionId": {
"type": "string",
"minLength": 1,
"description": "Filter by collection ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_post — Get post
Get a single blog post by ID.
{
"type": "object",
"required": [
"blogId",
"postId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"postId": {
"type": "string",
"minLength": 1,
"description": "Post ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}create_post — Create post
Create 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).
{
"type": "object",
"required": [
"blogId",
"title",
"content"
],
"properties": {
"slug": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Post slug. Auto-generated from title when omitted."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 50,
"minLength": 1
},
"default": [],
"maxItems": 10,
"description": "Tag names. Maximum 10 tags."
},
"image": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "Optional featured image path or URL. Use upload_image for local files."
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Post title."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"status": {
"enum": [
"draft",
"published"
],
"type": "string",
"default": "draft",
"description": "Publishing status. Default: draft."
},
"content": {
"type": "string",
"maxLength": 1000000,
"minLength": 1,
"description": "Post HTML content."
},
"authorId": {
"type": "string",
"minLength": 1,
"description": "Optional author user ID from list_blog_members. Assigning another member requires owner or admin access."
},
"metadata": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"value"
],
"properties": {
"key": {
"type": "string",
"maxLength": 50,
"minLength": 1
},
"value": {
"type": "string",
"maxLength": 500,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 20,
"description": "Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer."
},
"published_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "Optional publish datetime in ISO 8601 format."
},
"collection_id": {
"type": "string",
"minLength": 1,
"description": "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."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}update_post — Update post
Update any editable field on an existing blog post, including its author.
{
"type": "object",
"required": [
"blogId",
"postId"
],
"properties": {
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Updated post slug."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 50,
"minLength": 1
},
"maxItems": 10,
"description": "Updated tag names."
},
"image": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "Updated featured image path or URL. Use upload_image for local files."
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Updated post title."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"postId": {
"type": "string",
"minLength": 1,
"description": "Post ID."
},
"status": {
"enum": [
"draft",
"published"
],
"type": "string",
"description": "Updated publishing status."
},
"content": {
"type": "string",
"maxLength": 1000000,
"minLength": 1,
"description": "Updated HTML content."
},
"authorId": {
"type": "string",
"minLength": 1,
"description": "Updated author user ID from list_blog_members. Reassignment requires owner or admin access."
},
"metadata": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"value"
],
"properties": {
"key": {
"type": "string",
"maxLength": 50,
"minLength": 1
},
"value": {
"type": "string",
"maxLength": 500,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 20,
"description": "Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer."
},
"published_at": {
"anyOf": [
{
"type": "string",
"format": "date-time"
},
{
"type": "null"
}
],
"description": "Updated publish datetime in ISO 8601 format."
},
"collection_id": {
"type": "string",
"minLength": 1,
"description": "Updated collection ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}delete_post — Delete post
Delete a blog post by ID.
{
"type": "object",
"required": [
"blogId",
"postId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"postId": {
"type": "string",
"minLength": 1,
"description": "Post ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}list_pages — List pages
List static pages with pagination, filtering, and sorting.
{
"type": "object",
"required": [
"blogId"
],
"properties": {
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number. Default: 1."
},
"limit": {
"type": "integer",
"default": 30,
"maximum": 100,
"minimum": 1,
"description": "Page size. Default: 30, maximum: 100."
},
"order": {
"enum": [
"asc",
"desc"
],
"type": "string",
"default": "desc",
"description": "Sort direction. Default: desc."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"status": {
"enum": [
"draft",
"published"
],
"type": "string",
"description": "Filter by page status."
},
"orderBy": {
"enum": [
"createdAt",
"updatedAt",
"title"
],
"type": "string",
"default": "updatedAt",
"description": "Sort field. Default: updatedAt."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_page — Get page
Get a single static page by ID.
{
"type": "object",
"required": [
"blogId",
"pageId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"pageId": {
"type": "string",
"minLength": 1,
"description": "Page ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}create_page — Create page
Create a new static page with title, HTML body, metadata, slug, image, and status. status=published makes the page live.
{
"type": "object",
"required": [
"blogId",
"title",
"body"
],
"properties": {
"body": {
"type": "string",
"maxLength": 1000000,
"minLength": 1,
"description": "Page HTML body."
},
"slug": {
"anyOf": [
{
"type": "string",
"maxLength": 100
},
{
"type": "null"
}
],
"description": "Page slug. Auto-generated from title when omitted."
},
"image": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "Optional featured image path or URL. Use upload_image for local files."
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Page title."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"status": {
"enum": [
"draft",
"published"
],
"type": "string",
"default": "draft",
"description": "Publishing status. Default: draft."
},
"metadata": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"value"
],
"properties": {
"key": {
"type": "string",
"maxLength": 50,
"minLength": 1
},
"value": {
"type": "string",
"maxLength": 500,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 20,
"description": "Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}update_page — Update page
Update any editable field on an existing static page.
{
"type": "object",
"required": [
"blogId",
"pageId"
],
"properties": {
"body": {
"type": "string",
"maxLength": 1000000,
"minLength": 1,
"description": "Updated HTML body."
},
"slug": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Updated page slug."
},
"image": {
"anyOf": [
{
"type": "string",
"maxLength": 500
},
{
"type": "null"
}
],
"description": "Updated featured image path or URL. Use upload_image for local files."
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 1,
"description": "Updated page title."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"pageId": {
"type": "string",
"minLength": 1,
"description": "Page ID."
},
"status": {
"enum": [
"draft",
"published"
],
"type": "string",
"description": "Updated publishing status."
},
"metadata": {
"type": "array",
"items": {
"type": "object",
"required": [
"key",
"value"
],
"properties": {
"key": {
"type": "string",
"maxLength": 50,
"minLength": 1
},
"value": {
"type": "string",
"maxLength": 500,
"minLength": 1
}
},
"additionalProperties": false
},
"maxItems": 20,
"description": "Custom metadata entries as key/value objects. Maximum 20 entries; description should be 200 characters or fewer."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}delete_page — Delete page
Delete a static page by ID.
{
"type": "object",
"required": [
"blogId",
"pageId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"pageId": {
"type": "string",
"minLength": 1,
"description": "Page ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}list_redirects — List redirects
List redirects for a blog with search, status, type, and pagination filters. Requires manageBlog permission on the target blog. Blog-scoped API keys are supported.
{
"type": "object",
"required": [
"blogId"
],
"properties": {
"page": {
"type": "integer",
"default": 1,
"minimum": 1,
"description": "Page number, starting at 1."
},
"type": {
"enum": [
"all",
"301",
"302"
],
"type": "string",
"default": "all",
"description": "Filter by HTTP status code."
},
"limit": {
"type": "integer",
"default": 20,
"maximum": 100,
"minimum": 1,
"description": "Redirects per page, from 1 to 100."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"search": {
"type": "string",
"default": "",
"maxLength": 200,
"description": "Search source paths and destinations."
},
"status": {
"enum": [
"all",
"active",
"inactive"
],
"type": "string",
"default": "all",
"description": "Filter by active state."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_redirect — Get redirect
Get a single redirect by ID. Requires manageBlog permission on the target blog. Blog-scoped API keys are supported.
{
"type": "object",
"required": [
"blogId",
"redirectId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"redirectId": {
"type": "string",
"minLength": 1,
"description": "Redirect ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}create_redirect — Create redirect
Create a redirect for a blog. Requires manageBlog permission on the target blog. Blog-scoped API keys are supported.
{
"type": "object",
"required": [
"blogId",
"source_path",
"destination"
],
"properties": {
"active": {
"type": "boolean",
"default": true,
"description": "Whether this redirect should be applied."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"destination": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Destination site path or absolute HTTP(S) URL."
},
"source_path": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Incoming site path to redirect, starting with a single /. Query strings and fragments are not allowed."
},
"status_code": {
"anyOf": [
{
"type": "number",
"const": 301
},
{
"type": "number",
"const": 302
}
],
"default": 301,
"description": "HTTP redirect status code. Use 301 for permanent redirects and 302 for temporary redirects."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}update_redirect — Update redirect
Update a redirect source, destination, status code, or active state. Requires manageBlog permission on the target blog. Blog-scoped API keys are supported.
{
"type": "object",
"required": [
"blogId",
"redirectId"
],
"properties": {
"active": {
"type": "boolean",
"description": "Whether this redirect should be applied."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"redirectId": {
"type": "string",
"minLength": 1,
"description": "Redirect ID."
},
"destination": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Updated destination site path or absolute HTTP(S) URL."
},
"source_path": {
"type": "string",
"maxLength": 2048,
"minLength": 1,
"description": "Updated incoming site path, starting with a single /."
},
"status_code": {
"anyOf": [
{
"type": "number",
"const": 301
},
{
"type": "number",
"const": 302
}
],
"description": "Updated HTTP redirect status code."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}delete_redirect — Delete redirect
Delete a redirect by ID. Requires manageBlog permission on the target blog. Blog-scoped API keys are supported.
{
"type": "object",
"required": [
"blogId",
"redirectId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"redirectId": {
"type": "string",
"minLength": 1,
"description": "Redirect ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}create_tag — Create tag
Create a new blog tag by name. Requires permission to manage taxonomy.
{
"type": "object",
"required": [
"blogId",
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 50,
"minLength": 1,
"description": "New tag name. Allowed characters: letters, numbers, spaces, hyphens, underscores, periods."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}list_tags — List tags
List blog tags with optional case-insensitive search filtering.
{
"type": "object",
"required": [
"blogId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"search": {
"type": "string",
"description": "Optional tag name search filter."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}update_tag — Update tag
Rename a blog tag.
{
"type": "object",
"required": [
"blogId",
"tagId",
"name"
],
"properties": {
"name": {
"type": "string",
"maxLength": 50,
"minLength": 1,
"description": "New tag name. Allowed characters: letters, numbers, spaces, hyphens, underscores, periods."
},
"tagId": {
"type": "string",
"minLength": 1,
"description": "Tag ID."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}delete_tag — Delete tag
Delete a blog tag by ID.
{
"type": "object",
"required": [
"blogId",
"tagId"
],
"properties": {
"tagId": {
"type": "string",
"minLength": 1,
"description": "Tag ID."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}list_collections — List collections
List all collections for a blog.
{
"type": "object",
"required": [
"blogId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_collection — Get collection
Get a single collection by ID, including its post count.
{
"type": "object",
"required": [
"blogId",
"collectionId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"collectionId": {
"type": "string",
"minLength": 1,
"description": "Collection ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}create_collection — Create collection
Create a new collection with name, slug, and optional description.
{
"type": "object",
"required": [
"blogId",
"name",
"slug"
],
"properties": {
"name": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "Collection name."
},
"slug": {
"type": "string",
"pattern": "^\\s*(?:$|(?=[a-zA-Z0-9_-]{1,32}\\s*$)(?!(?:[aA][dD][mM][iI][nN]|[lL][oO][gG][iI][nN]|[sS][iI][gG][nN][uU][pP]|[aA][pP][iI]|[aA][sS][sS][eE][tT][sS]|[rR][oO][bB][oO][tT][sS]\\.[tT][xX][tT]|[sS][iI][tT][eE][mM][aA][pP]\\.[xX][mM][lL]|[sS][iI][tT][eE][mM][aA][pP]-[iI][nN][dD][eE][xX]\\.[xX][mM][lL]|[fF][eE][eE][dD]|[rR][sS][sS]|[tT][aA][gG][sS]|[tT][aA][gG]|[cC][oO][lL][lL][eE][cC][tT][iI][oO][nN][sS]|[cC][oO][lL][lL][eE][cC][tT][iI][oO][nN]|[pP][aA][gG][eE][sS]|[pP][aA][gG][eE]|[sS][iI][tT][eE][mM][aA][pP]|[sS][iI][tT][eE][mM][aA][pP][sS]|[sS][eE][aA][rR][cC][hH]|[dD][aA][sS][hH][bB][oO][aA][rR][dD]|[sS][eE][tT][tT][iI][nN][gG][sS]|[pP][rR][oO][fF][iI][lL][eE]|[aA][uU][tT][hH][oO][rR][sS])\\s*$)(?!.*--)[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?)\\s*$",
"description": "Collection slug."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"description": {
"type": "string",
"maxLength": 256,
"description": "Optional collection description."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}update_collection — Update collection
Update an existing collection's name, slug, or description.
{
"type": "object",
"required": [
"blogId",
"collectionId"
],
"properties": {
"name": {
"type": "string",
"maxLength": 32,
"minLength": 1,
"description": "Updated collection name."
},
"slug": {
"type": "string",
"pattern": "^\\s*(?:$|(?=[a-zA-Z0-9_-]{1,32}\\s*$)(?!(?:[aA][dD][mM][iI][nN]|[lL][oO][gG][iI][nN]|[sS][iI][gG][nN][uU][pP]|[aA][pP][iI]|[aA][sS][sS][eE][tT][sS]|[rR][oO][bB][oO][tT][sS]\\.[tT][xX][tT]|[sS][iI][tT][eE][mM][aA][pP]\\.[xX][mM][lL]|[sS][iI][tT][eE][mM][aA][pP]-[iI][nN][dD][eE][xX]\\.[xX][mM][lL]|[fF][eE][eE][dD]|[rR][sS][sS]|[tT][aA][gG][sS]|[tT][aA][gG]|[cC][oO][lL][lL][eE][cC][tT][iI][oO][nN][sS]|[cC][oO][lL][lL][eE][cC][tT][iI][oO][nN]|[pP][aA][gG][eE][sS]|[pP][aA][gG][eE]|[sS][iI][tT][eE][mM][aA][pP]|[sS][iI][tT][eE][mM][aA][pP][sS]|[sS][eE][aA][rR][cC][hH]|[dD][aA][sS][hH][bB][oO][aA][rR][dD]|[sS][eE][tT][tT][iI][nN][gG][sS]|[pP][rR][oO][fF][iI][lL][eE]|[aA][uU][tT][hH][oO][rR][sS])\\s*$)(?!.*--)[a-zA-Z0-9](?:[a-zA-Z0-9_-]*[a-zA-Z0-9])?)\\s*$",
"description": "Updated collection slug."
},
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"description": {
"type": "string",
"maxLength": 256,
"description": "Updated collection description."
},
"collectionId": {
"type": "string",
"minLength": 1,
"description": "Collection ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}delete_collection — Delete collection
Delete a collection by ID and optionally reassign its posts to another collection.
{
"type": "object",
"required": [
"blogId",
"collectionId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"reassign_to": {
"type": "string",
"minLength": 1,
"description": "Optional collection ID that should receive the deleted collection's posts."
},
"collectionId": {
"type": "string",
"minLength": 1,
"description": "Collection ID."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}list_content_revisions — List content revisions
List the saved revision history for a post or page. Returns revision metadata without full snapshots.
{
"type": "object",
"required": [
"blogId",
"contentType",
"contentId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"contentId": {
"type": "string",
"minLength": 1,
"description": "Post or page ID."
},
"contentType": {
"enum": [
"post",
"page"
],
"type": "string",
"description": "Content type."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_content_revision — Get content revision
Get one saved post or page revision, including its complete content snapshot.
{
"type": "object",
"required": [
"blogId",
"contentType",
"contentId",
"revisionId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"contentId": {
"type": "string",
"minLength": 1,
"description": "Post or page ID."
},
"revisionId": {
"type": "string",
"minLength": 1,
"description": "Revision ID from list_content_revisions."
},
"contentType": {
"enum": [
"post",
"page"
],
"type": "string",
"description": "Content type."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}list_content_reviews — List content reviews
List content review requests for a blog, filtered by status.
{
"type": "object",
"required": [
"blogId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"status": {
"enum": [
"pending",
"approved",
"changes_requested",
"superseded"
],
"type": "string",
"default": "pending",
"description": "Review status. Default: pending."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}get_latest_content_review — Get latest content review
Get the latest review associated with the newest saved revision of a post or page.
{
"type": "object",
"required": [
"blogId",
"contentType",
"contentId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"contentId": {
"type": "string",
"minLength": 1,
"description": "Post or page ID."
},
"contentType": {
"enum": [
"post",
"page"
],
"type": "string",
"description": "Content type."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}submit_content_review — Submit content review
Submit the latest saved revision of a draft post or page for review.
{
"type": "object",
"required": [
"blogId",
"contentType",
"contentId"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"comment": {
"type": "string",
"maxLength": 2000,
"description": "Optional review comment. Maximum 2,000 characters."
},
"contentId": {
"type": "string",
"minLength": 1,
"description": "Post or page ID."
},
"contentType": {
"enum": [
"post",
"page"
],
"type": "string",
"description": "Content type."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}decide_content_review — Decide content review
Approve a pending content review or request changes. Approving a staged update to published content applies that revision.
{
"type": "object",
"required": [
"blogId",
"reviewId",
"decision"
],
"properties": {
"blogId": {
"type": "string",
"minLength": 1,
"description": "Blog ID. Use list_blogs to discover available blog IDs."
},
"comment": {
"type": "string",
"maxLength": 2000,
"description": "Review comment. Required when requesting changes; maximum 2,000 characters."
},
"decision": {
"enum": [
"approved",
"changes_requested"
],
"type": "string",
"description": "Review decision."
},
"reviewId": {
"type": "string",
"minLength": 1,
"description": "Review ID from list_content_reviews."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"result"
],
"properties": {
"result": {}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": true
}Prompts
Not advertised
Resources
1 advertised
JustBlogged agent guide — JustBlogged agent guide
Product scope, when-to-use guidance, developer references, and safe MCP usage.
https://justblogged.com/llms.txt90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-07: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1106 ms
- 95th percentile latency
- 1106 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1106 ms · metadata changed · refuses unauthenticated resources/templates/list (HTTP 401)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http justblogged-mcp https://justblogged.com/mcpCodex
codex mcp add justblogged-mcp --url https://justblogged.com/mcpCursor
{
"mcpServers": {
"justblogged-mcp": {
"url": "https://justblogged.com/mcp"
}
}
}Cline
{
"mcpServers": {
"justblogged-mcp": {
"type": "streamableHttp",
"url": "https://justblogged.com/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"justblogged-mcp": {
"type": "http",
"url": "https://justblogged.com/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http justblogged-mcp https://justblogged.com/mcpClaude Desktop
https://justblogged.com/mcpWindsurf
{
"mcpServers": {
"justblogged-mcp": {
"serverUrl": "https://justblogged.com/mcp"
}
}
}Let your agent find its tools
Find servers like JustBlogged MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.