Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Authorization not required, issuer https://api.authrice.com
Authorization not required, issuer https://api.authrice.com
Added "open_polyblog"; changed the definition of "create_blog", "get_blog", "list_blogs" and 1 more (18 tools before, 19 now)
⟨7 unchanged words⟩ additionalProperties":false,"properties":{"coverUrl":{"anyOf":[{"maxLength":2048,"type":"string"},{"type$ref":"null#/properties/blog/properties/logoUrl"}]},"created":{"anyOf":[{"maxLength": ⟨42 unchanged words⟩ ,"localesTruncated":{"type":"boolean"},"logoUrl":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"maxLength":200, ⟨4 unchanged words⟩ ,"required":["id","name","customDomain","logoUrl","defaultLocale","locales","localesTruncated","coverUrl ⟨14 unchanged words⟩
⟨8 unchanged words⟩ additionalProperties":false,"properties":{"coverUrl":{"anyOf":[{"maxLength":2048,"type":"string"},{"type$ref":"null#/properties/blog/anyOf/0/properties/logoUrl"}]},"created":{"anyOf":[{"maxLength": ⟨42 unchanged words⟩ ,"localesTruncated":{"type":"boolean"},"logoUrl":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"maxLength":200, ⟨4 unchanged words⟩ ,"required":["id","name","customDomain","logoUrl","defaultLocale","locales","localesTruncated","coverUrl ⟨17 unchanged words⟩
⟨28 unchanged words⟩ "},{"type":"null"}]},"logoUrl":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"name":{"anyOf":[{"maxLength":200, ⟨4 unchanged words⟩ ,"required":["id","name","customDomain","logoUrl"],"type":"object"},"maxItems": ⟨28 unchanged words⟩
⟨10 unchanged words⟩ items":{"additionalProperties":false,"properties":{"coverUrl":{"anyOf":[{"maxLength":2048,"type":"string"},{"type":"null"}]},"id":{"anyOf":[{"maxLength":200, ⟨34 unchanged words⟩ ","title","locale","slug","published","coverUrl"],"type":"object"},"maxItems": ⟨28 unchanged words⟩
PolyBlog — 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.
Authorization not required, issuer https://api.authrice.com
Changed the definition of "create_article", "create_blog", "delete_article" and 15 more
CreateSavearticlea blog post
Create a new Polyblog article in the givenUseblog.thisReturnswhenthesomeonecreatedgivesarticle
Authorization not required, issuer https://api.authrice.com
Authorization not required, issuer https://api.authrice.com
Authorization not required, issuer https://api.authrice.com
Authorization not required, issuer https://api.authrice.com
Authorization not required, issuer https://api.authrice.com
Authorization not required, issuer https://api.authrice.com
Authorization not required, issuer https://api.authrice.com
Changed the definition of "show_article_preview" and "show_blog_overview"
{"$schema":"httphttps://json-schema.org/draft-07/schema#","additionalProperties//json-schema.org/draft/2020-12/schema":false,"properties":{"articleId":{"description":" ⟨19 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"article" ⟨105 unchanged words⟩
Certificate recorded, valid to 2027-02-26
Authorization not required
First tool surface recorded: 18 tools (server version 0.1.0)
Showing the latest 16 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"author":{"description":"Author name shown on the post, up to 200 characters","maxLength":200,"type":"string"},"blogId":{"description":"TargetBlogblogtoidadd the post to","maxLength":200,"minLength":1,"type":"string"},"categories":{"description":"Up to 50 category names, each up to 100 characters","items":{"maxLength":100,"type":"string ⟨3 unchanged words⟩ :"array"},"content":{"description":"ArticlePost body(in the chosen format, Markdown or HTML,basedupontoformat)100,000 characters","maxLength":100000,"minLength":1,"type":"string"},"description":{"description":"Short summary shown in listings and search results, up to 1,000 characters","maxLength":1000,"type":"string"},"format":{"description":"markdown or html; content is treated as HTML when omitted","enum":["markdown","html"],"type":"string"},"locale":{"description":"Post language, an ISO 639-1 code such as en or it; required with originalArticleId","maxLength":50,"type":"string"},"originalArticleId":{"description":"CreateMakes this articleasthe `locale` versionofin an existingarticle, inside thatarticle's translation group.Pass the ORIGINAL idIt—is theone `list_article_translations`originalreportsarticle's—id, never a siblingtranslation id. Omittranslation'sitid;toabsentcreatemeans a new original.","maxLength":200,"type":"string"},"published":{"description":"true publishes the post on the blog; false or omitted keeps it a draft","type":"boolean"},"slug":{"description":"URL slug such as my-first-post, up to 300 characters","maxLength":300,"type":"string"},"title":{"description":"Post title, 1 to 300 characters","maxLength":300,"minLength":1,"type": ⟨7 unchanged words⟩
⟨4 unchanged words⟩ openWorldHint":true,"readOnlyHint":false,"title":"CreateSavearticlea blog post"}
Create a new blog
CreateUse this when someone asks to start a newPolyblogblog in Polyblog with a given name and languages. Returns thesigned-inneworganization.blog'sTheid, name,isdomaingloballyanduniquelanguages;becausetheitname becomes the public <name>.polyblog.io subdomain, so aclashingnamefails rather than being adjusted.alreadyCreatingtakenafails.blogNotalsoforfiresadding a`blog.created` webhookpost totheanorganizationexistingsubscribers.blog.
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"articlesFormat":{"description":"Format for the blog's posts: markdown or html","enum":["markdown","html"],"type":"string"},"defaultLocale":{"description":"ISO 639-1 codeMainthelanguage,bloganwritesISOin639-1bycodedefault,suche.g.as\"en\"en","maxLength":50,"type":"string"},"description":{"description":"Short description of what the blog is about, up to 600 characters","maxLength":600,"type":"string"},"locales":{"description":"Every language the blog publishes in, ISO 639-1 codesthesuchblogas
⟨5 unchanged words⟩ :true,"readOnlyHint":false,"title":"Create a new blog"}
Deletearticlea blog post
PermanentlyUse this when someone asks to permanently delete aPolyblogblogarticlepostbyinid.everyDeletinglanguage.aGivenpublishedthearticleoriginalremovespost's id, that post and all itspublictranslationspageare deleted andfirestheiranpages`article.deleted`gowebhook.offline;Thisgivencannotabetranslation'sundoneown—id,confirmnothingwithis deleted although theuserresultbeforestillcalling.says deleted. Returns the id. Not for unpublishing.
⟨5 unchanged words⟩ ,"properties":{"id":{"description":"ArticleIdidoftothedeleteoriginal post (its originalArticleId); every language version of it is deleted","maxLength":200,"minLength":1,"type ⟨5 unchanged words⟩
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"articleId":{"description":"The id passed in. The API deletes every article whose originalArticleId equals it, so a translation id deletes nothing even though status is deleted.","maxLength":200,"type":"string"},"status ⟨9 unchanged words⟩
⟨5 unchanged words⟩ :true,"readOnlyHint":false,"title":"Deletearticlea blog post"}
GenerateDraftarticlea blog post with AI
GenerateUseathistext-onlywhenSEOsomeoneblogasksarticle:youantoLLMwritedraftsaboundednewHTML,bloginternalpostlinksoncomeafromtopic or saved topic idea. Returns theblogdraft'scustomDomainid,sitemap.xmlURL,andtitle,thewordarticlecountisandsavedinternalaslinksa(textdraftonly;bypublisheddefault.onlyThiswithMCPautoPublish).toolItalwaysusesdisablespaidcoverAI andinlinecanimagetakegeneration.aboutPassa`topic`minute,orand`topicIdeaId`.aItcallspendsthatpaidtimesmodeloutusagecanandstillusuallysavetakesthe30–60draft.seconds.Not for saving your own text.
⟨5 unchanged words⟩ ,"properties":{"autoPublish":{"description":"Publishtrueimmediately.publishesDefaultthefalsepost(savesimmediately;asdefaults to false, a draft).","type":"boolean"},"blogId":{"description":"TargetBlogblogtoidwrite for","maxLength":200,"minLength":1,"type":"string"},"locale":{"description":"LocaleLanguagecodeof(the post, an ISO 639-1 code; defaults toblog
⟨4 unchanged words⟩ openWorldHint":true,"readOnlyHint":false,"title":"GenerateDraftarticlea blog post with AI"}
GetReadarticlea blog post
FetchUseathissinglewhenPolyblogsomeonearticlewantsbytoidread, check orbyquoteslug+locale.one blog post. Returnsallowlisteditsmetadatatitle, summary, language, slug, blog, author, published state, dates andatupmostto 8,000 characters ofarticlecontent,withlookedanupexplicitbytruncationidflag.or by slug plus language. Not for a visual preview card.
⟨6 unchanged words⟩ ":{"idOrSlug":{"description":"Article id, or its slug together with locale","maxLength":300,"minLength":1,"type":"string"},"locale":{"description":"LocaleLanguagetoofdisambiguatethe post, an ISO 639-1 code such as en; needed when looking up by slug","maxLength": ⟨7 unchanged words⟩
⟨4 unchanged words⟩ openWorldHint":false,"readOnlyHint":true,"title":"GetReadarticlea blog post"}
Get blog detailsFetchUseathissinglewhenPolyblogsomeoneblogasks 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.ReturnsNottheforblogametadatavisualformattedoverviewaswithMarkdown.recent posts.
⟨6 unchanged words⟩ ":{"idOrName":{"description":"Blog id(uuid), or the blog's name","maxLength":200,"minLength":1, ⟨6 unchanged words⟩
⟨5 unchanged words⟩ false,"readOnlyHint":true,"title":"Get blog details"}
AuditCheck bloglocalizationtranslation coverage
SummarizeUsemultilingualthisarticlewhencoveragesomeoneforasksonehoworganization-ownedwellPolyblogtheirblog.blogComparesisconfiguredtranslated,localesorwithwhichuplanguagestoare100missingrecentlyposts.editedReturnsarticleper-languagetranslationscounts of posts, published posts andclearlydraftsmarkswiththearesultcoveragewhenpercentage, from thesample100ismosttruncated.recently edited posts. Not for one post's translations.
⟨5 unchanged words⟩ ,"properties":{"blogId":{"description":"Polyblog blogBlog id, ornamethetoblog'sauditname","maxLength":200,"minLength":1,"type ⟨5 unchanged words⟩
⟨99 unchanged words⟩ array"},"sample":{"additionalProperties":false,"description":"Coverage is computed from the 100 most recently edited posts; truncated means the blog has more","properties":{"articles":{"minimum":0," ⟨22 unchanged words⟩
⟨4 unchanged words⟩ openWorldHint":false,"readOnlyHint":true,"title":"AuditCheck bloglocalizationtranslation coverage"}
GetChecksitemapaURLsblog's sitemap
SummarizeUseURLsthisfromwhenthesomeoneblog'saskscustomDomainwhat`/sitemap.xml`pages(followingtheirablog's sitemapindexlists,oneorlevel)whichandpagesreturnareatavailablemostto link to. Returns the sitemap's URL count and the first 25safeURLssamplewithURLs.languageUsedandbylast-modified`generate_article`date,asread live from theallowedblog'sinternal-linkcustompool.domain. Not for the posts stored in Polyblog.
⟨5 unchanged words⟩ ,"properties":{"blogId":{"description":"TargetBlogblogwhoseidsitemap to read","maxLength":200,"minLength":1,"type":"string"},"locale":{"description":"Two-letterOnlylocaleURLstoinfilterthisbylanguage,(e.g.a\"en\")two-letter code such as en","maxLength":50,"type":"string"},"maxUrls":{"description":"CapHowonmany sitemap URLsreturnedto
⟨19 unchanged words⟩ ,"type":"integer"},"returned":{"$refdescription":"#/properties/childSitemapsHow many sitemap URLs were read, at most maxUrls","maximum":9007199254740991,"minimum":0,"type":"integer"},"rootSitemap":{"$ref":"#/properties/baseUrl"},"sample":{"description":"The first 25 URLs read; returned counts every URL read","items":{"additionalProperties":false,"properties":{ ⟨45 unchanged words⟩
⟨4 unchanged words⟩ openWorldHint":true,"readOnlyHint":true,"title":"GetChecksitemapaURLsblog's sitemap"}
Listarticlea post's translations
List upUsetothis100whenlocalesomeoneversionsasksofwhichonelanguagesarticle,agroupedblogbypostitsexists`originalArticleId`in,andormarkwhichatranslationstruncatedareresult.still missing. Returnssafeeach language version sharing the original articlemetadataid, up to 100, with title, slug, published state andtranslationhowmethod.itPasswas`blogId`translated;towithcompareblogIdagainstitatalsomostlists100theconfiguredblog'slocales.missing languages. Not for a whole blog's coverage.
⟨5 unchanged words⟩ ,"properties":{"blogId":{"description":"Optional blogBlogid.id;Whenwhen given, thereplyresult also lists the bloglocaleslanguages thatarestillmissinglackathistranslation.post","maxLength":200,"type":"string"},"originalArticleId":{"description":"Original article id — the idId of thesource-localeoriginalarticle;article that every translation shares,itas reported on each of its versions
⟨5 unchanged words⟩ :false,"readOnlyHint":true,"title":"Listarticlea post's translations"}
List your blogs
ListUsePolyblogthisblogswhenthesomeoneauthenticatedaskstenantwhichhasblogsaccesstheyto.haveReturnsin Polyblog, or aboundedblog'spageidofis needed. Returns each blog's id, name,and customdomain.domain,Pass25theperreturnedpagecursorbytodefaultcontinue.with a cursor. Not for a blog's posts.
⟨5 unchanged words⟩ ,"properties":{"cursor":{"description":"Opaque paginationThecursornextCursorfromofathe previouscallpage; absent for the first page","maxLength":4096,"type":"string"},"limit":{"description":"Blogs per page, from 1 to 100; defaults to 25","exclusiveMinimum":0,"maximum":100,"type": ⟨3 unchanged words⟩
⟨53 unchanged words⟩ :"string"},{"type":"null"}],"description":"Cursor for the next page; null on the last page"}},"required":["items","hasMore", ⟨3 unchanged words⟩
⟨5 unchanged words⟩ :false,"readOnlyHint":true,"title":"List your blogs"}
List saved topic ideas
ListUsesavedthistopicwhenideassomeoneforasksawhatblog,theyoptionallycouldfilteredwritebyaboutstatusnextandfromminimumtopicscore.ideas already saved. Returns each idea's id, score out of 10, title, status,andsource.source,Usefilteredthebyidstatuswithor`generate_article`minimumtoscore,write25theperarticle.page by default. Not for fetching new ideas.
⟨5 unchanged words⟩ ,"properties":{"blogId":{"description":"TargetBlogblogwhoseidideas to list","maxLength":200,"minLength":1,"type":"string"},"cursor":{"description":"The nextCursor of the previous page with the same filters; absent for the first page","maxLength":4096,"type":"string"},"limit":{"description":"Ideas per page, from 1 to 100; defaults to 25","exclusiveMinimum":0,"maximum":100,"type":"integer"},"minScore":{"description":"MinimumOnlyLLMideas with at least this AI score,(0-10)0 toinclude10","maximum":10,"minimum":0,"type":"integer"},"status":{"description":"FilterOnlybyideaslifecyclewith
⟨73 unchanged words⟩ :"string"},{"type":"null"}],"description":"Cursor for the next page; null on the last page"}},"required":["items","hasMore", ⟨3 unchanged words⟩
⟨5 unchanged words⟩ :false,"readOnlyHint":true,"title":"List saved topic ideas"}
RefreshFind new topic ideas
Fetch fresh content fromUseboundedthissubredditssomeoneandaskspublicforHTTPSnewRSSblogfeeds,topicspendideaspaidfrommodelRedditusageortoRSSscorefeeds.candidates,Returnsdedupecountsagainstandpublisheduparticles,toand5persistof thekeepers.savedReturnsideas;aggregateitcountsfetchesandtheatsources,mostscoresfivecandidatessafewithideas;paidrawAIsourceanderrorssavesarethosesuppressed.thatConfirmpass.sourcesNotandforlimitsideasfirst.already saved.
⟨5 unchanged words⟩ ,"properties":{"audience":{"description":"AudienceWhodescription.theDefaultsblogtowritesthefor;blogdefaults`context`tofieldtheifblog'somitted.context","maxLength":600,"type":"string"},"blogId":{"description":"TargetBlogblogtoidfind ideas for","maxLength":200,"minLength":1,"type":"string"},"limitPerSource":{"description":"Max
⟨4 unchanged words⟩ openWorldHint":true,"readOnlyHint":false,"title":"RefreshFind new topic ideas"}
SearchFindarticlesblog posts
SearchUsePolyblogthisarticleswhenwithsomeoneoptionalasksfilterstobysee their blog,localeposts,slug,draftsandor publishedstate.articles,ReturnsoptionallyaforMarkdownonetableblog,oflanguagematchesorwithslug. Returns id, title,localelanguage, slug and published state, most recently edited first, 25 per page by default with a cursor. It filters by those fields andpublished.doesUsenot search thereturnedtext.cursorNottoforpagereadingthrougharesults.post.
⟨5 unchanged words⟩ ,"properties":{"blogId":{"description":"FilterOnlytopostsainspecificthis blog","maxLength":200,"type":"string"},"cursor":{"description":"Opaque paginationThecursornextCursorfromofathe previouscallpage with the same filters; absent for the first page","maxLength":4096,"type":"string"},"limit":{"description":"Posts per page, from 1 to 100; defaults to 25","exclusiveMinimum":0,"maximum":100,"type":"integer"},"locale":{"description":"Only posts in this language, an ISO 639-1localecode,e.g.such\"en\",
⟨67 unchanged words⟩ :"string"},{"type":"null"}],"description":"Cursor for the next page; null on the last page"}},"required":["items","hasMore", ⟨3 unchanged words⟩
⟨4 unchanged words⟩ openWorldHint":false,"readOnlyHint":true,"title":"SearchFindarticlesblog posts"}
SetMark a topic ideastatusused or dismissed
MoveUseathissavedwhen someone asks to mark a topic ideathrough itsaslifecycle:used,markdismiss it`used`,onceoranbringarticleithasbackbeenaswrittennew.fromReturnsit,the`dismissed`ideatowithkeepitsitnewoutstatusofand,futurewhensuggestionsgiven,orthebackarticletoit`new`.produced;Onlynothing else about thestatusidea(andchanges.optionallyNottheforarticleeditingitanproduced)idea'sistitlechanged.or angle.
⟨5 unchanged words⟩ properties":{"status":{"description":"Newlifecyclestatus:fornew,theusedtopicorideadismissed","enum":["new","used"," ⟨3 unchanged words⟩ ,"topicIdeaId":{"description":"Topic idea idfrom `list_topic_ideas`","maxLength":200,"minLength":1,"type":"string"},"usedForArticleId":{"description":"ArticleIdidofthistheideaarticleproduced;writtenonlyfrommeaningfulthis idea; only
⟨4 unchanged words⟩ openWorldHint":false,"readOnlyHint":false,"title":"SetMark a topic ideastatusused or dismissed"}
Setblogtopic research sources
ReplaceUsethethissubredditssomeoneand/oraskspublictoHTTPSchooseRSSwhichfeedssubredditsusedorforRSStopicfeedsresearch.theirConfirmblog'sthetopiccompleteresearchreplacementreads.listsReturnsbeforethecalling.savedOncesources;set,each`refresh_topic_ideas`listonlypassedneedsreplaces theblogId.oldPassone,`reddit`andand/orclear`rss`,removesorthem`clear:all.true`Nottoforwipefetchingallideassources.now.
⟨5 unchanged words⟩ ,"properties":{"blogId":{"description":"Target blogBlog id, or the blog's name","maxLength":200,"minLength":1,"type":"string"},"clear":{"description":"RemovetruetheremovestopicSourceseveryfieldsavedentirely.source","type":"boolean"},"reddit":{"description":"SubredditComplete new list of up to 20 subreddit names,(without/r/)./r/;Replacesreplaces theexistingoldlist.list
⟨5 unchanged words⟩ :false,"readOnlyHint":false,"title":"Setblogtopic research sources"}
ShowPreviewPolyblogaarticleblogpreviewpost
RenderUseathisfocusedwhenpreviewsomeoneforwantsatoknownseePolybloghowarticleone blog post looks,includingwith itspublicationstatus and details. Returns a preview card with the post's title, language, published state, metadata,andaupboundedtocontent6,000excerpt.characters of content. Not for finding posts.
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Preview a blog post"}
ShowPolyblogblog overview
RenderUse this when someone wants acompactquick overviewforofaoneknownofPolyblogtheirblog,blogs.includingReturnsitsan overview card with the blog's domain,locales,languages and up toten10 most recently editedarticles.posts. Not for translation coverage.
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Show blog overview"}
UpdateEditarticlea blog post
Partially update an existingUsePolyblogthisarticlewhenbysomeoneid.asksOnlytothechangefieldsayoublogpasspost'saretitle,changed;text,everythingsummary,elseslug,isauthorpreserved.orPassingcategories,`published`orcanto publish or unpublishitsit.publicReturnspagethe updated post; only the fields passed change, andeveryeachupdateeditfiresnotifiesanthe`article.updated`blog'swebhook.webhooks. Not for adding a translation.
⟨3 unchanged words⟩ additionalProperties":false,"properties":{"author":{"description":"New author name, up to 200 characters","maxLength":200,"type":"string"},"categories":{"description":"Complete new list of up to 50 categories; replaces the old list","items":{"maxLength":100,"type":"string"},"maxItems":50,"type":"array"},"content":{"description":"New body in the post's format, up to 100,000 characters; replaces the whole body","maxLength":100000,"type":"string"},"description":{"description":"New summary, up to 1,000 characters","maxLength":1000,"type":"string"},"format":{"description":"markdown or html, describing how content is written","enum":["markdown","html"],"type":"string"},"id":{"description":"ArticleIdidof the post toupdatechange","maxLength":200,"minLength":1,"type":"string"},"published":{"description":"true publishes the post, false turns it back into a draft","type":"boolean"},"slug":{"description":"New URL slug, up to 300 characters; changes the post's URL","maxLength":300,"type":"string"},"title":{"description":"New title, up to 300 characters","maxLength":300,"type":"string"}}, ⟨4 unchanged words⟩
⟨4 unchanged words⟩ openWorldHint":true,"readOnlyHint":false,"title":"UpdateEditarticlea blog post"}
{"$schema":"httphttps://json-schema.org/draft-07/schema#","additionalProperties//json-schema.org/draft/2020-12/schema":false,"properties":{"blogId":{"description":" ⟨19 unchanged words⟩
{"$schema":"httphttps://json-schema.org/draft-07/schema#//json-schema.org/draft/2020-12/schema","additionalProperties":false,"properties":{"articles" ⟨120 unchanged words⟩