Polyblog Multilingual Blog
by polyblog.io · remote · no sign-in to list tools · v0.1.1 · published by io.polyblog
Write, translate and publish blog articles, plan topic ideas and check each blog's languages.
19 tools: 8 can delete or cancel things, 1 change things and 10 only read.
Scanned Oct 21, 2026
- Deletes or cancels8Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things1Claude Code: ask: see these tools
- Only reads10Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http polyblog https://mcp.polyblog.io/mcpFindings
Matches of fixed checks, with the text they matched.
- Warnopen_polyblog
The server marks "open_polyblog" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "open_polyblog" says "open": a word for a change.
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
19 tools
Deletes or cancels 8Claude Code: deny
create_articleUse this when someone gives you a finished blog post, or a translation of one, to save in their blog.No findings
Why it is in this group
- The name "create_article" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when someone gives you a finished blog post, or a translation of one, to save in their blog. Returns the new post's id, title, slug, language and published state; it stays a draft unless published is true. A translation is saved with the original's id as originalArticleId and its own locale. Not for writing a post with AI.
Annotations the server declares
- title: Save a blog post
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
create_blogUse this when someone asks to start a new blog in Polyblog with a given name and languages.No findings
Why it is in this group
- The name "create_blog" says "create": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when someone asks to start a new blog in Polyblog with a given name and languages. Returns the new blog's id, name, domain and languages; the name becomes the public <name>.polyblog.io subdomain, so a name already taken fails. Not for adding a post to an existing blog.
Annotations the server declares
- title: Create a new blog
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
delete_articleUse this when someone asks to permanently delete a blog post in every language.No findings
Why it is in this group
- The name "delete_article" says "delete": a word for removing or ending something.
- The description says "permanently delete".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when someone asks to permanently delete a blog post in every language. Given the original post's id, that post and all its translations are deleted and their pages go offline; given a translation's own id, nothing is deleted although the result still says deleted. Returns the id. Not for unpublishing.
Annotations the server declares
- title: Delete a blog post
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: true
generate_articleUse this when someone asks you to write a new blog post on a topic or saved topic idea.No findings
Why it is in this group
- The name "generate_article" says "generate": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when someone asks you to write a new blog post on a topic or saved topic idea. Returns the draft's id, URL, title, word count and internal links (text only; published only with autoPublish). It uses paid AI and can take about a minute, and a call that times out can still save the draft. Not for saving your own text.
Annotations the server declares
- title: Draft a blog post with AI
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
refresh_topic_ideasUse this when someone asks for new blog topic ideas from Reddit or RSS feeds.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when someone asks for new blog topic ideas from Reddit or RSS feeds. Returns counts and up to 5 of the saved ideas; it fetches the sources, scores candidates with paid AI and saves those that pass. Not for ideas already saved.
Annotations the server declares
- title: Find new topic ideas
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
set_topic_idea_statusUse this when someone asks to mark a topic idea as used, dismiss it, or bring it back as new.No findings
Why it is in this group
- The name "set_topic_idea_status" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when someone asks to mark a topic idea as used, dismiss it, or bring it back as new. Returns the idea with its new status and, when given, the article it produced; nothing else about the idea changes. Not for editing an idea's title or angle.
Annotations the server declares
- title: Mark a topic idea used or dismissed
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
set_topic_sourcesUse this when someone asks to choose which subreddits or RSS feeds their blog's topic research reads.No findings
Why it is in this group
- The name "set_topic_sources" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when someone asks to choose which subreddits or RSS feeds their blog's topic research reads. Returns the saved sources; each list passed replaces the old one, and clear removes them all. Not for fetching ideas now.
Annotations the server declares
- title: Set topic research sources
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: true
- openWorldHint: false
update_articleUse this when someone asks to change a blog post's title, text, summary, slug, author or categories, or to publish or unpublish it.No findings
Why it is in this group
- The name "update_article" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Use this when someone asks to change a blog post's title, text, summary, slug, author or categories, or to publish or unpublish it. Returns the updated post; only the fields passed change, and each edit notifies the blog's webhooks. Not for adding a translation.
Annotations the server declares
- title: Edit a blog post
- readOnlyHint: false
- destructiveHint: true
- idempotentHint: false
- openWorldHint: true
Changes things 1Claude Code: ask
open_polyblogUse this when someone wants to open their PolyBlog library and browse blogs and articles in an interactive workspace.1 finding
Why it is in this group
- The name "open_polyblog" says "open": a word for a change.
- The server marks it read-only (readOnlyHint: true), but an annotation never lowers a class.
Findings
- Warn
The server marks "open_polyblog" read-only (readOnlyHint: true), and its own name, description or input give the class "write".
What this check looks forMatched text
annotations: {"readOnlyHint":true,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}; The name "open_polyblog" says "open": a word for a change.
Description, as the server wrote it Use this when someone wants to open their PolyBlog library and browse blogs and articles in an interactive workspace. Starts with up to 25 blogs; the view supports pagination and reading articles. Not for creating or publishing content.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
Only reads 10Claude Code: allow
get_articleUse this when someone wants to read, check or quote one blog post.No findings
Why it is in this group
- The name "get_article" says "get": a word for reading.
Description, as the server wrote it Use this when someone wants to read, check or quote one blog post. Returns its title, summary, language, slug, blog, author, published state, dates and up to 8,000 characters of content, looked up by id or by slug plus language. Not for a visual preview card.
Annotations the server declares
- title: Read a blog post
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_blogUse this when someone asks about one blog's setup, such as its domain, default language or languages.No findings
Why it is in this group
- The name "get_blog" says "get": a word for reading.
Description, as the server wrote it Use this when someone asks about one blog's setup, such as its domain, default language or languages. Returns the blog's id, name, custom domain, default locale, locales, cover image URL and dates, by id or name. Not for a visual overview with recent posts.
Annotations the server declares
- title: Get blog details
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_blog_localization_summaryUse this when someone asks how well their blog is translated, or which languages are missing posts.No findings
Why it is in this group
- The name "get_blog_localization_summary" says "get": a word for reading.
Description, as the server wrote it Use this when someone asks how well their blog is translated, or which languages are missing posts. Returns per-language counts of posts, published posts and drafts with a coverage percentage, from the 100 most recently edited posts. Not for one post's translations.
Annotations the server declares
- title: Check blog translation coverage
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
get_sitemap_urlsUse this when someone asks what pages their blog's sitemap lists, or which pages are available to link to.No findings
Why it is in this group
- The name "get_sitemap_urls" says "get": a word for reading.
Description, as the server wrote it Use this when someone asks what pages their blog's sitemap lists, or which pages are available to link to. Returns the sitemap's URL count and the first 25 URLs with language and last-modified date, read live from the blog's custom domain. Not for the posts stored in Polyblog.
Annotations the server declares
- title: Check a blog's sitemap
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: true
list_article_translationsUse this when someone asks which languages a blog post exists in, or which translations are still missing.No findings
Why it is in this group
- The name "list_article_translations" says "list": a word for reading.
Description, as the server wrote it Use this when someone asks which languages a blog post exists in, or which translations are still missing. Returns each language version sharing the original article id, up to 100, with title, slug, published state and how it was translated; with blogId it also lists the blog's missing languages. Not for a whole blog's coverage.
Annotations the server declares
- title: List a post's translations
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_blogsUse this when someone asks which blogs they have in Polyblog, or a blog's id is needed.No findings
Why it is in this group
- The name "list_blogs" says "list": a word for reading.
Description, as the server wrote it Use this when someone asks which blogs they have in Polyblog, or a blog's id is needed. Returns each blog's id, name and custom domain, 25 per page by default with a cursor. Not for a blog's posts.
Annotations the server declares
- title: List your blogs
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
list_topic_ideasUse this when someone asks what they could write about next from topic ideas already saved.No findings
Why it is in this group
- The name "list_topic_ideas" says "list": a word for reading.
Description, as the server wrote it Use this when someone asks what they could write about next from topic ideas already saved. Returns each idea's id, score out of 10, title, status and source, filtered by status or minimum score, 25 per page by default. Not for fetching new ideas.
Annotations the server declares
- title: List saved topic ideas
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
search_articlesUse this when someone asks to see their blog posts, drafts or published articles, optionally for one blog, language or slug.No findings
Why it is in this group
- The name "search_articles" says "search": a word for reading.
Description, as the server wrote it Use this when someone asks to see their blog posts, drafts or published articles, optionally for one blog, language or slug. Returns id, title, language, slug and published state, most recently edited first, 25 per page by default with a cursor. It filters by those fields and does not search the text. Not for reading a post.
Annotations the server declares
- title: Find blog posts
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
show_article_previewUse this when someone wants to see how one blog post looks, with its status and details.No findings
Why it is in this group
- The name "show_article_preview" says "show": a word for reading.
Description, as the server wrote it Use this when someone wants to see how one blog post looks, with its status and details. Returns a preview card with the post's title, language, published state, metadata and up to 6,000 characters of content. Not for finding posts.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: Preview a blog post
show_blog_overviewUse this when someone wants a quick overview of one of their blogs.No findings
Why it is in this group
- The name "show_blog_overview" says "show": a word for reading.
Description, as the server wrote it Use this when someone wants a quick overview of one of their blogs. Returns an overview card with the blog's domain, languages and up to 10 most recently edited posts. Not for translation coverage.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- idempotentHint: true
- openWorldHint: false
- title: Show blog overview
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.1.1. Values in angle brackets are yours to fill in.
claude mcp add --transport http polyblog https://mcp.polyblog.io/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__polyblog__search_articles",
"mcp__polyblog__get_article",
"mcp__polyblog__list_article_translations",
"mcp__polyblog__list_blogs",
"mcp__polyblog__get_blog",
"mcp__polyblog__get_blog_localization_summary",
"mcp__polyblog__get_sitemap_urls",
"mcp__polyblog__list_topic_ideas",
"mcp__polyblog__show_blog_overview",
"mcp__polyblog__show_article_preview"
],
"ask": [
"mcp__polyblog__open_polyblog"
],
"deny": [
"mcp__polyblog__create_article",
"mcp__polyblog__update_article",
"mcp__polyblog__delete_article",
"mcp__polyblog__generate_article",
"mcp__polyblog__create_blog",
"mcp__polyblog__refresh_topic_ideas",
"mcp__polyblog__set_topic_idea_status",
"mcp__polyblog__set_topic_sources"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as polyblog. Review it before you use it.