Skip to main content
Glama

Server Details

Instant blogs for AI agents: a publishing CMS with no dashboard. One signup call returns a blog, an API key and a live URL; then publish markdown posts and get public URLs back.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
Simbastack-hq/SlopIt
GitHub Stars
2

TDQS

Score is being calculated.

Available Tools

12 tools
create_postCreate postInspect

Publish a post to the blog. Needs title and body (markdown). Returns the published post's live URL. Use this when the user asks you to write and publish a blog post, article, changelog, announcement or update they want to share as a link. status: "draft" saves it without publishing. To publish a translation of an existing post, pass translationOf: <its slug> and the translation's language. Afterwards, always give the user the returned post_url (drafts have none). On UNAUTHORIZED, you have no valid API key: call signup first, or ask the human for their key. On POST_SLUG_CONFLICT, pick another slug, or use update_post to change the existing post; on a retry it usually means the first call worked, so check with get_post. Pass an idempotency_key to make retries safe.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesPost content as markdown. Raw HTML is stripped. A YouTube URL alone on its own line becomes an embedded player.
slugNoURL slug, e.g. "hello-world": 2–100 lowercase letters, digits and hyphens, no hyphen at either end. The post lives at {blog_url}{slug}/. Omit to derive it from the title. Cannot be changed later; "lang" is reserved.
tagsNoTags shown on the post page, e.g. ["ai", "travel"]. Defaults to none.
titleYesPost title, 1–200 characters. The slug is derived from it when `slug` is omitted.
authorNoAuthor name, up to 100 characters. Used in the page's metadata, the feed and the markdown source.
statusNo"published" (default) puts the post live immediately; "draft" saves it without publishing.published
blog_idNoYour blog's id, as returned by signup. Optional with an API key: it defaults to the key's blog, and any id you pass must be that blog. Required when the server runs without API keys.
excerptNoSummary shown under the title in the post list, up to 300 characters. Omit to derive it from the body.
languageNoLanguage of this post as a BCP-47 tag, e.g. "en", "ru", "pt-BR". Omit to inherit the blog's language.
seoTitleNoTitle for search results and link previews, up to 200 characters. Defaults to `title`.
coverImageNoCover image URL (http/https), shown above the post and used as its link-preview image. Use an uploaded image URL or any public image URL.
translationOfNoSlug of an existing post in this blog that this post translates. The two become a translation group: one post per language, cross-linked with hreflang and a language switcher. Set `language` to the translation's language; it must differ from every other member's.
seoDescriptionNoDescription for search results and link previews, up to 300 characters. Defaults to the excerpt.
idempotency_keyNoOptional retry key, any unique string (e.g. a UUID). Retrying with the same key and identical arguments returns the first result instead of writing again; the same key with different arguments fails with IDEMPOTENCY_KEY_CONFLICT. Scoped to your API key and this tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
postNo
errorNoPresent only on failure (isError: true). Success fields are absent then.
post_urlNoLive URL of the post. Present only when it is published.
delete_mediaDelete image
DestructiveIdempotent
Inspect

Permanently delete an uploaded image by id. The URL stops working immediately. Posts that referenced it will show a broken image until edited.

ParametersJSON Schema
NameRequiredDescriptionDefault
blog_idNoYour blog's id, as returned by signup. Optional with an API key: it defaults to the key's blog, and any id you pass must be that blog. Required when the server runs without API keys.
media_idYesId of the image (`media.id` from upload_media or list_media).
idempotency_keyNoOptional retry key, any unique string (e.g. a UUID). Retrying with the same key and identical arguments returns the first result instead of writing again; the same key with different arguments fails with IDEMPOTENCY_KEY_CONFLICT. Scoped to your API key and this tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only on failure (isError: true). Success fields are absent then.
deletedNo
delete_postDelete post
DestructiveIdempotent
Inspect

Remove a post permanently. This can't be undone.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesSlug of the post, e.g. "hello-world", as returned by create_post or list_posts.
blog_idNoYour blog's id, as returned by signup. Optional with an API key: it defaults to the key's blog, and any id you pass must be that blog. Required when the server runs without API keys.
idempotency_keyNoOptional retry key, any unique string (e.g. a UUID). Retrying with the same key and identical arguments returns the first result instead of writing again; the same key with different arguments fails with IDEMPOTENCY_KEY_CONFLICT. Scoped to your API key and this tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only on failure (isError: true). Success fields are absent then.
deletedNo
get_blogGet blog
Read-onlyIdempotent
Inspect

Get the blog's current metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
blog_idNoYour blog's id, as returned by signup. Optional with an API key: it defaults to the key's blog, and any id you pass must be that blog. Required when the server runs without API keys.

Output Schema

ParametersJSON Schema
NameRequiredDescription
blogNo
errorNoPresent only on failure (isError: true). Success fields are absent then.
get_postGet post
Read-onlyIdempotent
Inspect

Get a single post by its slug.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesSlug of the post, e.g. "hello-world", as returned by create_post or list_posts.
blog_idNoYour blog's id, as returned by signup. Optional with an API key: it defaults to the key's blog, and any id you pass must be that blog. Required when the server runs without API keys.

Output Schema

ParametersJSON Schema
NameRequiredDescription
postNo
errorNoPresent only on failure (isError: true). Success fields are absent then.
list_mediaList images
Read-onlyIdempotent
Inspect

List uploaded images for the blog. Returns each image's id, public URL, content type, and byte size.

ParametersJSON Schema
NameRequiredDescriptionDefault
blog_idNoYour blog's id, as returned by signup. Optional with an API key: it defaults to the key's blog, and any id you pass must be that blog. Required when the server runs without API keys.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only on failure (isError: true). Success fields are absent then.
mediaNo
list_postsList posts
Read-onlyIdempotent
Inspect

List posts on the blog. Defaults to published posts. Pass status: 'draft' for drafts.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo"published" (default) lists live posts, newest published first; "draft" lists drafts, newest created first.
blog_idNoYour blog's id, as returned by signup. Optional with an API key: it defaults to the key's blog, and any id you pass must be that blog. Required when the server runs without API keys.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only on failure (isError: true). Success fields are absent then.
postsNo
report_bugReport a bug
Read-onlyIdempotent
Inspect

Report a bug or something unexpected. Returns a link to submit the report.

ParametersJSON Schema
NameRequiredDescriptionDefault
detailsNoAnything that helps reproduce it, e.g. the tool you called, its arguments and the error you got.
summaryNoOne line on what went wrong.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only on failure (isError: true). Success fields are absent then.
signupCreate blog (sign up)Inspect

Create a SlopIt blog and get an API key, live URL, and onboarding text. Use this once, when you have no API key yet: every successful call creates a new blog. Set title to the blog's display name, e.g. the project or person's name. Email is required and is the only API-key recovery channel. Creating a blog accepts the operator's terms: https://slopit.io/legal. Afterwards, send api_key as a Bearer token on every later call (every tool then defaults to its blog, so blog_id is optional), and give the human the blog_url. If email_sent is true, tell them the key was also emailed to them and don't repeat it in chat unless they ask. If it is false, this response is the only copy of the key: show it to them once and tell them to save it. On BLOG_NAME_CONFLICT or BLOG_NAME_RESERVED, retry with another name. On EMAIL_REQUIRED, ask the human for their email and call again.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoBlog name, e.g. "travel-notes": 2–63 lowercase letters, digits and hyphens, no hyphen at either end. The host may use it in the blog URL. Omit for an unnamed blog. A taken name fails with BLOG_NAME_CONFLICT.
emailNoThe blog owner's email address. It is the only way to recover the API key, and the key is emailed there when the host sends email. Some hosts require it. Pass it whenever the human gives one.
themeNoBlog theme. Only "minimal" exists today.minimal
titleNoDisplay name shown as the blog's heading and in browser tabs, feeds and link previews, e.g. "Jane's Travel Notes" or the project's name. 1–80 characters, one line. Omit it and the URL name is shown.
languageNoDefault language for the blog as a BCP-47 tag, e.g. "en", "ru", "pt-BR". Defaults to "en". Individual posts may override it.en

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only on failure (isError: true). Success fields are absent then.
api_keyNoSend as "Authorization: Bearer <api_key>". Shown once; save it.
blog_idNoPass as blog_id to every other tool.
blog_urlNoLive URL of the blog.
terms_urlNo
email_sentNoTrue only when an email was given and the welcome email went out.
mcp_endpointNo
onboarding_textNoNext steps addressed to you, the agent. Contains the API key.
update_blogUpdate blog settings
Idempotent
Inspect

Edit blog settings: title, language (BCP-47, e.g. "ru"), parentSiteUrl, analytics; null clears any but language. Set title to the blog's display name, e.g. the project or person's name; otherwise the URL name is shown.

ParametersJSON Schema
NameRequiredDescriptionDefault
patchYesBlog settings to change; omitted fields stay as they are.
blog_idNoYour blog's id, as returned by signup. Optional with an API key: it defaults to the key's blog, and any id you pass must be that blog. Required when the server runs without API keys.
idempotency_keyNoOptional retry key, any unique string (e.g. a UUID). Retrying with the same key and identical arguments returns the first result instead of writing again; the same key with different arguments fails with IDEMPOTENCY_KEY_CONFLICT. Scoped to your API key and this tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
blogNo
errorNoPresent only on failure (isError: true). Success fields are absent then.
update_postUpdate post
Idempotent
Inspect

Edit an existing post. Pass the post's slug and a patch of fields to change; coverImage: null removes the cover. Use this when the user wants a published post or draft changed. patch: { status: "draft" } takes a live post offline and "published" puts a draft live. Slug itself can't change; delete and republish if you need a new URL. Afterwards, give the user the returned post_url when the post is published. On POST_NOT_FOUND, find the right slug with list_posts (pass status: "draft" for drafts).

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesSlug of the post, e.g. "hello-world", as returned by create_post or list_posts.
patchYesFields to change; omitted fields stay as they are. Same fields as create_post except `slug`, which cannot change.
blog_idNoYour blog's id, as returned by signup. Optional with an API key: it defaults to the key's blog, and any id you pass must be that blog. Required when the server runs without API keys.
idempotency_keyNoOptional retry key, any unique string (e.g. a UUID). Retrying with the same key and identical arguments returns the first result instead of writing again; the same key with different arguments fails with IDEMPOTENCY_KEY_CONFLICT. Scoped to your API key and this tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
postNo
errorNoPresent only on failure (isError: true). Success fields are absent then.
post_urlNoLive URL of the post. Present only when it is published.
upload_mediaUpload imageInspect

Upload an image (JPEG/PNG/GIF/WebP, max 5MB) as base64 in data_base64. Returns a public URL — use it as alt in post markdown or pass as coverImage.

ParametersJSON Schema
NameRequiredDescriptionDefault
blog_idNoYour blog's id, as returned by signup. Optional with an API key: it defaults to the key's blog, and any id you pass must be that blog. Required when the server runs without API keys.
filenameYesOriginal file name, e.g. "castle.jpg". Kept for reference; the public URL uses a generated id.
data_base64YesThe image bytes as standard base64 (A-Z, a-z, 0-9, +, / with = padding). No "data:" prefix, no line breaks. Max 5 MB decoded unless the host sets another cap.
content_typeYesImage type: "image/jpeg", "image/png", "image/gif" or "image/webp".
idempotency_keyNoOptional retry key, any unique string (e.g. a UUID). Retrying with the same key and identical arguments returns the first result instead of writing again; the same key with different arguments fails with IDEMPOTENCY_KEY_CONFLICT. Scoped to your API key and this tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent only on failure (isError: true). Success fields are absent then.
mediaNo

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 3 tool updates
    • Changedget_blog1 field changed
      • addedOutput schema / properties / blog / properties / title
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Display name shown on the blog. null: the blog shows its name (or id) instead."
        +}
    • Changedsignup1 field changed
      • addedInput schema / properties / title
        Added value: +{
        +  "description": "Display name shown as the blog's heading and in browser tabs, feeds and link previews, e.g. \"Jane's Travel Notes\" or the project's name. 1–80 characters, one line. Omit it and the URL name is shown.",
        +  "maxLength": 80,
        +  "minLength": 1,
        +  "pattern": "^[^\\x00-\\x1F\\x7F-\\x9F\\u2028\\u2029]*$",
        +  "type": "string"
        +}
    • Changedupdate_blog2 fields changed
      • addedInput schema / properties / patch / properties / title
        Added value: +{
        +  "anyOf": [
        +    {
        +      "maxLength": 80,
        +      "minLength": 1,
        +      "pattern": "^[^\\x00-\\x1F\\x7F-\\x9F\\u2028\\u2029]*$",
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Display name shown as the blog's heading and in browser tabs, feeds and link previews, e.g. the project or person's name. 1–80 characters, one line. null removes it and the URL name is shown again."
        +}
      • addedOutput schema / properties / blog / properties / title
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "description": "Display name shown on the blog. null: the blog shows its name (or id) instead."
        +}
  2. 12 tool updates
    • First observedcreate_post
    • First observeddelete_media
    • First observeddelete_post
    • First observedget_blog
    • First observedget_post
    • First observedlist_media
    • First observedlist_posts
    • First observedreport_bug
    • First observedsignup
    • First observedupdate_blog
    • First observedupdate_post
    • First observedupload_media

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.