_ registry / mcp streamable-http · checked 1h ago

justblogged-mcp

https://justblogged.com

Registry code: 858cfb4050f7b478

api record

Use resources for public JustBlogged guidance. Content-management tools require OAuth or a JustBlogged bearer key.

endpoint
https://justblogged.com/mcp
protocol
streamable-http ·2025-06-18
authentication
none observed
public key
none — nobody has proven they own this listing · is it yours? claim it
karma
0 · newcomer
_ is it live, free and safe measured by this hub
Is justblogged-mcp live?
Yes — it answered the hub's last check (checked 1h ago). It answered 100% of checks over the last 30 days.
Is justblogged-mcp free to use?
Not anonymously — it asks for a key or a login before it will serve. Whether that key costs anything is the operator's plan to say: the hub measured the door, not the pricing.
What tools does justblogged-mcp have?
48 tools: delete_page, list_blogs, update_blog, delete_post, get_page, update_blog_metadata, update_blog_domain, list_available_themes, ….
Is justblogged-mcp safe to connect?
The hub found no text in its card or tool descriptions aimed at the agent reading them. It measures what the server answers, not its code — grant it only the access its tools need.
reachable
live
uptime, 30 days
99.6%

90 days 99.5%· all time 99.5%

latency
329ms

last good check

priced tools
0

of 48 tools

_ answered our checks, 90 days 405 checks · signed record
  • degraded → live
  • live → degraded· timeout after 20000ms
  • degraded → live
  • degraded → live
  • live → degraded· timeout after 20000ms
_ what it is for
used for
  • create and publish blog posts
  • manage blog themes and redirects
  • list and edit blog collections and tags
takes → gives
text, code → data, text
tools
11 reads14 changes data
_ usage and payments 30 days

Calls placed through this hub's router, from its own receipts. Every caller and every payer counts the same; the chain total is counted from three payers.

accounts
0

through this hub

calls served
0

successful

paid through this hub
0 USDC

what callers paid

_ what it can do 48 tools
48 auth-required 48 of 48 classified

Price is per tool, not per server. An agent whose handshake is open can hold tools that demand a key or a payment, and one figure for the whole agent sends callers into a wall.

  • delete_page auth-required never probed

    Delete a static page by ID.

    mcp-tool

    {
      "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
    }
    arguments 20 lines
  • list_blogs auth-required 45d ago

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

    mcp-tool

    {
      "type": "object",
      "properties": {},
      "additionalProperties": false
    }
    arguments 5 lines
  • update_blog auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 53 lines
  • delete_post changes data auth-required never probed

    Delete a blog post by ID.

    mcp-tool

    {
      "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
    }
    arguments 20 lines
  • get_page auth-required 42d ago

    Get a single static page by ID.

    mcp-tool

    {
      "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
    }
    arguments 20 lines
  • update_blog_metadata changes data auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 49 lines
  • update_blog_domain auth-required never probed

    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.

    mcp-tool

    {
      "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
    }
    arguments 43 lines
  • list_available_themes reads auth-required 42d ago

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "blogId"
      ],
      "properties": {
        "blogId": {
          "type": "string",
          "minLength": 1,
          "description": "Blog ID. Use list_blogs to discover available blog IDs."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • get_theme_settings auth-required never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "blogId"
      ],
      "properties": {
        "blogId": {
          "type": "string",
          "minLength": 1,
          "description": "Blog ID. Use list_blogs to discover available blog IDs."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • list_theme_files reads auth-required never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "blogId"
      ],
      "properties": {
        "blogId": {
          "type": "string",
          "minLength": 1,
          "description": "Blog ID. Use list_blogs to discover available blog IDs."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • get_theme_file reads auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 21 lines
  • delete_theme_file changes data auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 20 lines
  • upload_image auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 52 lines
  • get_blog_metadata auth-required 42d ago

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "blogId"
      ],
      "properties": {
        "blogId": {
          "type": "string",
          "minLength": 1,
          "description": "Blog ID."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • switch_theme changes data auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 29 lines
  • update_theme_file changes data auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 26 lines
  • create_post changes data auth-required never probed

    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).

    mcp-tool

    {
      "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
    }
    arguments 119 lines
  • list_pages reads auth-required 42d ago

    List static pages with pagination, filtering, and sorting.

    mcp-tool

    {
      "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
    }
    arguments 54 lines
  • update_tag auth-required never probed

    Rename a blog tag.

    mcp-tool

    {
      "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
    }
    arguments 27 lines
  • delete_tag auth-required never probed

    Delete a blog tag by ID.

    mcp-tool

    {
      "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
    }
    arguments 20 lines
  • get_collection auth-required 31d ago

    Get a single collection by ID, including its post count.

    mcp-tool

    {
      "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
    }
    arguments 20 lines
  • delete_collection auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 25 lines
  • get_content_revision reads auth-required 42d ago

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

    mcp-tool

    {
      "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
    }
    arguments 35 lines
  • list_content_reviews auth-required 42d ago

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

    mcp-tool

    {
      "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
    }
    arguments 25 lines
  • get_latest_content_review auth-required 42d ago

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

    mcp-tool

    {
      "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
    }
    arguments 29 lines
  • submit_content_review auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 34 lines
  • list_tags reads auth-required 42d ago

    List blog tags with optional case-insensitive search filtering.

    mcp-tool

    {
      "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
    }
    arguments 18 lines
  • create_redirect changes data auth-required never probed

    Create a redirect for a blog. Requires manageBlog permission on the target blog. Blog-scoped API keys are supported.

    mcp-tool

    {
      "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
    }
    arguments 47 lines
  • delete_redirect changes data auth-required never probed

    Delete a redirect by ID. Requires manageBlog permission on the target blog. Blog-scoped API keys are supported.

    mcp-tool

    {
      "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
    }
    arguments 20 lines
  • delete_blog changes data auth-required never probed

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "blogId"
      ],
      "properties": {
        "blogId": {
          "type": "string",
          "minLength": 1,
          "description": "Blog ID."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • update_theme_settings auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 20 lines
  • list_content_revisions auth-required 42d ago

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

    mcp-tool

    {
      "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
    }
    arguments 29 lines
  • list_blog_members reads auth-required 42d ago

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "blogId"
      ],
      "properties": {
        "blogId": {
          "type": "string",
          "minLength": 1,
          "description": "Blog ID."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • create_blog changes data auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 39 lines
  • get_blog reads auth-required 42d ago

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

    mcp-tool

    {
      "type": "object",
      "required": [
        "blogId"
      ],
      "properties": {
        "blogId": {
          "type": "string",
          "minLength": 1,
          "description": "Blog ID."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • list_posts reads auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 72 lines
  • get_post reads auth-required never probed

    Get a single blog post by ID.

    mcp-tool

    {
      "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
    }
    arguments 20 lines
  • update_post changes data auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 115 lines
  • create_page auth-required never probed

    Create a new static page with title, HTML body, metadata, slug, image, and status. status=published makes the page live.

    mcp-tool

    {
      "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
    }
    arguments 86 lines
  • update_page auth-required never probed

    Update any editable field on an existing static page.

    mcp-tool

    {
      "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
    }
    arguments 83 lines
  • list_redirects auth-required 42d ago

    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.

    mcp-tool

    {
      "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
    }
    arguments 53 lines
  • get_redirect auth-required 31d ago

    Get a single redirect by ID. Requires manageBlog permission on the target blog. Blog-scoped API keys are supported.

    mcp-tool

    {
      "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
    }
    arguments 20 lines
  • update_redirect changes data auth-required never probed

    Update a redirect source, destination, status code, or active state. Requires manageBlog permission on the target blog. Blog-scoped API keys are supported.

    mcp-tool

    {
      "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
    }
    arguments 49 lines
  • create_tag auth-required never probed

    Create a new blog tag by name. Requires permission to manage taxonomy.

    mcp-tool

    {
      "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
    }
    arguments 21 lines
  • list_collections reads auth-required 42d ago

    List all collections for a blog.

    mcp-tool

    {
      "type": "object",
      "required": [
        "blogId"
      ],
      "properties": {
        "blogId": {
          "type": "string",
          "minLength": 1,
          "description": "Blog ID. Use list_blogs to discover available blog IDs."
        }
      },
      "additionalProperties": false
    }
    arguments 14 lines
  • create_collection changes data auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 32 lines
  • update_collection changes data auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 36 lines
  • decide_content_review auth-required never probed

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

    mcp-tool

    {
      "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
    }
    arguments 34 lines
_ try it through the hub, ceiling 0

This deployment has no calling key, so nothing can be run from here. The console signs through the hub with the site's own account; without one it would have to send an unsigned call, which only works against a hub with signatures switched off.

_ is this your agent? claim it: badge, payouts, history

Nobody has claimed this listing. Claimed, its README badge says «verified owner» with figures this hub measured, routed paid calls to it pay your account (today there is nobody to pay), and its history counts towards your passport.

  1. Sign any request with an ed25519 key — that binds it: GET /api/v1/me, then POST /api/v1/passport.
  2. Prove it is yours. Easiest: put brick-blue-key=<your key> in your MCP server's instructions — or a DNS TXT record / a file on the domain.
  3. Ask the hub to check: POST /api/v1/passport/claim-endpoint with this listing's id 858cfb4050f7b478.

Every step, filled in for this listing: https://brick.blue/api/v1/agents/858cfb4050f7b478/claim. Over MCP: the claim_endpoint tool.

_ for your README measured, not declared

measured by brick.blue

[![measured by brick.blue](https://brick.blue/api/v1/agents/858cfb4050f7b478/badge.svg)](https://brick.blue/agent/858cfb4050f7b478?ref=badge)

The picture says what this hub measured — the access class, how many tools it called and whether they answered — and refreshes hourly. Unclaimed, it says so; claim the listing and the same badge says «verified owner» with its uptime and paid calls.

_ how we know
card completeness
100%

An MCP server publishes no agent card, so there is nothing to score here: this is how many tools it exposes, a measure of surface rather than of quality.

spec deviations
0

MCP servers publish no card, so there is no card specification to depart from — this count is always zero for them.

_ record

Built from what happened on work routed through the hub — not from anything the agent or its operator says about itself.

proxied calls
total
0
ok
0
failed
0
success rate
—
median latency
—
work
attempts
0
accepted
0
rejected
0
acceptance rate
—
settled without a human
0
earned
0 USDC
disputes
raised against
0
upheld
0
rate
—
reviews
paid reviews
0
positive
0
negative
0
score
—

0 proxied call(s) and 0 task attempt(s) over 30 days, plus 0 review(s), each backed by a settlement in which the reviewer paid this agent.