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.
Recently observed → Live
Live → Recently observed
Recently observed → Live
Live → Recently observed
Recently observed → Live
Live → Recently observed
Recently observed → Live
Live → Recently observed
Certificate recorded, valid to 2026-12-27
Recently observed → Live
Live → Recently observed
https://www.misar.blog/api/mcp (mcp_streamable_http) — from mcp_registry
Recently observed → Live
Live → Recently observed
Recently observed → Live
Live → Recently observed
Changed the definition of "upgrade"
⟨25 unchanged words⟩ time — not only after hitting a limit.ReadsBy default it only:reads. With start_trial=true itneverstartschangesthe free, no-card trial on the account (a plan change; no payment is taken). It never upgrades a paid plan or takespayment;payment itself: the userupgradesdoes that
Changed the definition of "add_to_series", "create_draft", "create_series" and 17 more
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":false}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false}
Changed the definition of "add_reaction", "add_to_series", "create_draft" and 20 more
Addareaction
RecordAddonea reaction— like, clap, or bookmark — from the authenticated account onto an article.Thisacts publicly as the account holder, so only call it when the user has actually asked to react; do not react on their behalf to be helpful. Adds a single type per call — react twice for two types. Safe to repeat:No-ops ifthe reactionalreadyexists the call succeeds and changes nothing, so it will not double-count.
Recently observed → Live
Live → Recently observed
Recently observed → Live
Live → Recently observed
Certificate changed, valid to 2026-12-27
Verified owner set by dns_txt proof on www.misar.blog
Certificate recorded, valid to 2026-10-29
Authorization not required
First tool surface recorded: 23 tools (server version 5.1.2)
Showing the latest 28 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":true}
{"destructiveHint":true,"idempotentHint":true,"openWorldHint":falsetrue,"readOnlyHint":false}
⟨9 unchanged words⟩ quota you have left, and what upgradingunlocks.unlocks, with the link to upgrade. Call it any time — not only after hitting a limit.SetReadsopen=trueonly:toitopennever changes thecheckoutplanpageor takes payment; the user upgrades by following the link. On a local install, open=true also opens that link inyourthe user's browser.
⟨5 unchanged words⟩ ,"properties":{"open":{"description":"OpenLocal installs only: also open theupgrade/checkoutupgradepagelink in thedefaultuser's browser. Ignored by the hosted server, which returns the link instead.","type":"boolean"},"plan":{ ⟨31 unchanged words⟩
⟨6 unchanged words⟩ article_id":{"description":"UUID of the articleto react to, from the `id` field of article tools.","format":"uuid","type":"string"},"type":{"description":"Which reaction toReactionaddtype:'like' approvallike,'clap' stronger approvalclap,'bookmark' save fororlater.bookmark","enum":["like","clap"," ⟨8 unchanged words⟩
Addan articletoaseries
Place an existing article intoAdd an existingseries, optionally at a specific position. Both the series and thearticlemust already exist — this creates neither. Identify them by SLUG, not id: get_series supplies the series slug and the article tools supply the article slug. Omit positiontoappend at the end. Requires an API key. Adding an article does not change its publication status or URL; it only changes where it appears. Inserting ataposition shifts the articles after it down. Errors if either slug is unknown.series
⟨5 unchanged words⟩ ,"properties":{"article_slug":{"description":"Slug of theThe article slug to add, from list_my_articles. Not its title or id.","type":"string"},"position":{"description":"1-based position within the series. Omit to appendPositionatin theend. Insertingseriesshifts(optional,laterappendsarticlesifdown.omitted)","minimum":1,"type":"integer"},"series_slug":{"description":"Slug of the targetThe series,from get_series. Not its title or id.slug","type":"string"}},"required": ⟨4 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":false}
Createadraft
Save an article asan unpublished draft. Nothing becomes visible to readers: use this whenever the work still needs review, and publish_article only when it should go live. The draft can be edited afterwards with update_article. Each call createsaNEWdraft— not idempotent, so calling twice leaves two drafts. Requires an API key. Returns the draft with anoneditor_urlMisar.Blog (forfinishing it inreviewthebeforebrowser.publishing)
⟨5 unchanged words⟩ ,"properties":{"body_markdown":{"description":"Article bodyFullsoarticlefar,bodyasinMarkdown.Markdown","minLength":1,"type":"string"},"tags":{"description":"Topic tags to carryTagsthroughfortothepublication.draft","items":{"type":"string"},"type":"array"},"title":{"description":"Working headline. Can be changed beforeDraftpublishing.title","minLength":1,"type":"string"} ⟨5 unchanged words⟩
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":truefalse,"readOnlyHint":false}
Createaseries
Create a new,emptyseries— a named collection that related articles can be added to. Creating the series does not move any article into it; follow up with add_to_series for each one. Call get_series firsttoavoid making a second series with the same title, since each call creates a NEW series and nothing deduplicates them. Requires an API key. The series and its URL become publicly reachable, though it shows nothinggroupuntilrelated articlesare added. Returns the series with the slug that add_to_series needs.
⟨5 unchanged words⟩ properties":{"description":{"description":"Shortsummary showndescriptiononof the seriespage. Optional.","type":"string"},"title":{"description":"Display name of the series. The slug is derived fromSeriesthis.title","minLength":1,"type":"string"} ⟨4 unchanged words⟩
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":truefalse,"readOnlyHint":false}
Generateacover image
Generatean image fromatextcoverpromptimagewithusing AI,and upload it to the Misar.Blog CDN, and return its public URL for use as cover_image_url when publishing. Use it when no artwork exists yet; use upload_image for a file the user already has. Each call generates a NEW image and costs generation credits against the account's plan — it is not idempotent, so re-running to 'try again' bills again. Generation takes noticeably longer than other tools. Requires an API key. The resulting URL is public and cannot be deleted through this server. Results vary between runs for the same prompt.
⟨5 unchanged words⟩ ,"properties":{"prompt":{"description":"WhatDescription of the imageshould show, in plain language, upto1000 characters. Describe subject and style; avoid asking for text in the image.generate","maxLength":1000,"minLength":1,"type ⟨2 unchanged words⟩ ":{"default":"1792x1024","description":"OutputImage dimensions:'1792x1024' landscape(thedefault, best for:articlelandscapecovers1792x1024), '1024x1024' square, '1024x1792' portrait.","enum":["1024x1024","1792x1024"," ⟨7 unchanged words⟩
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":truefalse,"readOnlyHint":false}
Generate SEO titlesfrom keywords
Generate 5search-optimisedSEO/AEO/GEO-optimized article titles from aTOPIC OR KEYWORD, each with atopickeyword-strategyorhint.keywordAimsprompt.atTargets high-volume, low-competition long-tailphraseskeywords.andOptimizedatfor Google, AI answer engines (ChatGPT, Perplexity, Claude)as well as Google. Pick between the two title tools by what you have in hand: use this one when you have a topic or keywords and the article may not be written yet. Use suggest_titles when the draft already exists and you want titles drawn from its actual text. Passing `context` here does not make them equivalent — this one still optimises for the keywords you supply. Nothing is saved and no article is created or retitled; use update_article to apply a title. Requires,anGoogleAPIAIkeyOverviews, andconsumesAIcredits persearchcall.experiences.Generative,Eachsotitlerepeatedincludescallsareturnkeyworddifferentstrategytitles.hint.
⟨5 unchanged words⟩ "properties":{"context":{"description":"Optional:draftexistingtextarticle content (plainor Markdown, up totext8000orcharsmarkdown)so the.titlesProvidingmatchitwhatlets thearticle actually says.AITitlesalignstilltitlesfollowwith
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":truefalse,"readOnlyHint":true}
Get analyticsAnalytics summary
Summarise the account's performance over a trailingGetwindow:analyticspagesummary (views,gross and netrevenue,and active subscriber count. Use it for 'how did I do this month' style questions. These are whole-account totals — it cannot break results down per article, and it covers a trailing window ending today rather than an arbitrary date range. Reads only. Requires an API key. Revenue is returned in cents (revenue_cents gross, revenue_net_cents after feessubscribers)with a formatted revenue_usd addedforconvenience — read the cents fields when doing arithmetic. Zero views isareal answer, not antimeerror.period
⟨6 unchanged words⟩ "days":{"default":30,"description":"SizeNumber ofthe trailing window indays,ending today. 1-365, defaultsto30. Use 7lookforbacka(default:week30,365 for amax:year.365)","maximum":365,"minimum":1,"type ⟨3 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true}
Getonearticle
FetchGet a single article by slug, includingitsfullMarkdown body. Use this after list_my_articles or search_articles has given you a slug and you need the actualmarkdown content— for reading, editing, or repurposing it. Fetching one article at a time is deliberate: the listing tools omit bodies so they stay cheap. Reads only; nothing is created or modified. Requires an API key for unpublished articles; published ones are readable without. Returns the article object with content_markdown populated. Errors if the slug does not exist or the account cannot see it.
⟨5 unchanged words⟩ ,"properties":{"slug":{"description":"URL slug of theThe article,e.g. 'how-we-cut-build-times'. Not the numeric id, and not the full URL.slug","type":"string"}},"required": ⟨3 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true}
Get followFollow status
Check whether the authenticated account follows a given profile, and how many followers that profile has. Use it before offering toGet followsomeone, so you do not suggest an action that is alreadystatusdone.andItfolloweranswerscountaboutforONEa profileidentified by UUID — there is no tool here that lists everyone you follow. Reads only; following state is not changed.UUID. Requires an APIkey andkey; counts againsttheyour plan's request quota.Returns the follow relationship and follower count. Errors if the UUID does not match a profile.
⟨7 unchanged words⟩ "description":"UUID of the profile to check,as returned in author fields by article tools. Notfollowthestatususername.for","format":"uuid","type":"string ⟨4 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true}
Getmyprofile
Fetch the authenticatedGetaccount'syourownMisar.Blog creator profile: id, username, display name, bio, public profile URL, and whether Stripe payouts are connected. Use it to confirm which account a key belongs to before acting on that account's behalf, to get your own profile id for tools that take a UUID, or to check stripe_connected before discussing paid posts. It only ever describes the caller — there is no tool here for looking up someone else's profile. Reads only; nothing is modified. Requires an API key, and takes no parameters. Errors if the key is missing or invalid, which is the quickest way to test authentication.
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true}
Getarticlereactions
Read theGet reactiontotals on one article,countsplusandwhichyour reactionsthe authenticated account has left on it. Use it before add_reaction or remove_reaction so you know the current state — it is how you tell 'not yet liked' from 'already liked'. Covers one article at a time. Reads only; no reaction is addedfororanremoved.article. RequiresanAPI key.Returns counts per type (like, clap, bookmark) alongside the caller's own reactions. Zero counts are a real answer, not an error.
⟨6 unchanged words⟩ article_id":{"description":"UUID of the article, from the `id` field returned by article tools.","format":"uuid","type":"string ⟨4 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true}
Listmyseries
Listevery series the authenticated account owns. Despite the name this returns the whole collection, not one series — there is no single-series lookup. Use it to find a series slug before calling add_to_series, or to check whether a series already exists before create_series makes a duplicate. Reads only; nothing is created or modified. Requires an API key, and takes no parameters — it is unfiltered and unpaginated. Returns `{ series, total }` where each entry carries id, slug, title, description, url and article_count. An empty list means the account hasallnoyour seriesyet, which is not anonerror.Misar.Blog
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true}
Listarticlecomments
ReadGet the comment threadon one article, oldest first, paginated. Use it to review reader feedback or summarise a discussion. It reads comments only; there is no tool hereforposting or moderating a reply. Readsanonly.article. Requires an APIkey andkey; counts againsttheyour plan's request quota.Page through with limit and offset — the default returns the first 20. Returns the comments with their authors and timestamps; an empty list simply means no comments yet, which is not an error.
⟨6 unchanged words⟩ article_id":{"description":"UUID of the article,as returned in the `id` field by article tools.toNotfetchthecommentsslug.for","format":"uuid","type":"string"},"limit":{"default":20,"description":"Comments per page, 1-100. Defaults to 20.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Comments to skip before this page. Defaults to 0.","minimum":0,"type":"integer"}} ⟨4 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true}
Listarticles owned by the authenticated account, newest first, including drafts and scheduled posts. Use this to findyourown work — it is the only listing that sees unpublished content. To search across the whole site, including other creators, use search_articles instead. Reads only; nothing is created or modified. Requires an API key. Returns `{articles,total }`, where each article carries id, slug, title, status, url, editor_url, tags and timestamps, but NOT the article body — call get_article for that. `total` counts all matches, not just the pageonreturned.Misar.Blog
⟨6 unchanged words⟩ "limit":{"default":20,"description":"MaximumNumber of articles to return, 1-100. Defaults to 20.","maximum":100,"minimum":1,"type":"integer"},"status":{"description":"Return only articles in this state. Omit toFilterreturnbyeverystatusstate(omittheforaccountallowns.published)","enum":["draft","published"," ⟨6 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true}
List newsletter issues the accountGethasyour sentor scheduled, newest first. Use it to check what went outandwhen, or to confirm ascheduledsend exists before queueing another. For WHO receives them, use list_newsletter_subscribers. Reads only — this neither sends nor cancels annewsletterissue.issues. RequiresanAPIkey. Returns each issue with its subject, status and send time. An empty list means nothing has been sent yet, which is not ankeyerror.authentication.
⟨5 unchanged words⟩ properties":{"limit":{"default":10,"description":"Issues to return, 1-50, newest first. Defaults to 10.","maximum":50,"minimum":1,"type":" ⟨3 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true}
Listnewslettersubscribers
List the people subscribed to the authenticatedGetaccount'syour newsletter,paginated. Use it to size the audience or export the list. For what has been SENT to them, use list_newsletter_issues instead. Reads only — no email is sent and nosubscriberis added or removed.list. RequiresanAPIkey. This returns personal data (email addresses), so treat the result as confidential and do not echo it into shared transcripts. Page with limit and offset; the default returns the firstkey20.authentication.
⟨5 unchanged words⟩ properties":{"limit":{"default":20,"description":"Subscribers per page, 1-100. Defaults to 20.","maximum":100,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Subscribers to skip before this page. Defaults to 0.","minimum":0,"type":"integer"}} ⟨2 unchanged words⟩
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true}
Publishanarticle
CreatePublish a new articleand make it live immediately,(or schedule itfor a future time. This PUBLISHES: without schedule_at the article is world-readable the moment this returns, at the visibility you choose. If the piece is not ready, use create_draft instead and publish later. Each call creates a NEW article — it is not idempotent, so calling twice publishes twice; use update_article to change one that exists. Requires an API key and consumes one publish from the account's plan quota; the response warns when the allowance is nearly spent. Returns the created article with its public url)andoneditor_url.Misar.Blog
⟨5 unchanged words⟩ ,"properties":{"body_markdown":{"description":"CompleteFull article bodyas Markdown. Images may be referenced byinURL.Markdown","minLength":1,"type":"string"},"cover_image_url":{"description":"AbsoluteURL of thehero image. generate_cover_image returns a URL suitablecoverhere.image","format":"uri","type":"string"},"schedule_at":{"description":"ISO 8601 timestamp topublish at, e.g. '2026-09-01T09:00:00Z'.schedule. Omit to publish immediately.A past timestamp publishes immediately.","type":"string"},"tags":{"description":"Up to 10topictagsused for discovery and filtering.","items":{"type":"string"}, ⟨3 unchanged words⟩ :"array"},"title":{"description":"Headline, 1-250Articlecharacters.title","maxLength":250,"minLength":1,"type ⟨2 unchanged words⟩ ":{"default":"public","description":"Audience: 'public' anyone, 'subscribers' newsletter subscribers, 'paid' paying members, 'private' onlyWhoyou.canDefaultsreadtothis'public'.article","enum":["public","subscribers"," ⟨9 unchanged words⟩
Removeareaction
Withdraw one reaction the authenticated account previously left on an article. Removes exactly the type you name and leaves the account's other reactions on that article intact — removing 'like' does not removeRemove a'bookmark'. Nothing else is deleted: the article and its comments are untouched. Safe to repeat: removing aspecific reactionthat is not there succeeds andfromchangesannothing.article. RequiresanAPI key.Call get_reactions first if you need to know what is currently set.
⟨6 unchanged words⟩ article_id":{"description":"UUID of the articleto un-react to, from the `id` field of article tools.","format":"uuid","type":"string"},"type":{"description":"WhichReactionreactiontype towithdrawremove:'like'like,'clap'clap, or'bookmark'.bookmark","enum":["like","clap"," ⟨8 unchanged words⟩
Researchatopic
Research a topicwith AIandreturnget AI-generated insights, sources, and asuggestedcontent outline.Useit at the START of a piece,Useful beforedrafting — it produces raw material to write from, not a finished article and not a title. For titles use generate_title_seo; to see what already exists on Misar.Blog use search_articles. Nothing is saved: no draft, article, or file is created, and calling it has no effect on the blog. Requireswriting anAPI key and consumes AI credits from the account's plan, so each call costs whether or not you use the output. Runs noticeably longer than a plain read, and being generative, two identical calls give different text. Returns prose to read, not structured JSON — verify any factual claims it makes.article.
⟨5 unchanged words⟩ ,"properties":{"query":{"description":"TheResearch topic orquestion to research, 5-500 characters. Specific beats broad: 'how small SaaS teams price annualquestion.plans'Bereturnsspecificmoreforthanbest'pricing'.results.","maxLength":500,"minLength":5,"type ⟨5 unchanged words⟩
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":truefalse,"readOnlyHint":true}
Searchpublishedarticles
Search PUBLISHED articles acrossall ofMisar.Blog,including other creators' work. Use this for discovery, research, and competitive reading. It never returnsbydraftskeyword,scheduledtag, orprivate posts — not even your ownauthor —so reach for list_my_articles when you wantincludingyourotherunpublishedcreators' work.Readsonly. No API key required; unauthenticated callers are rate-limited by IP. Filters combine with AND. Returns an array of article summaries without bodies; pass a slug toUseget_articlelist_my_articles forthe full text. An empty array means no matches,yourwhichownisdraftsnotandanunpublishederror.posts.
⟨5 unchanged words⟩ ,"properties":{"author":{"description":"Restrict toFilteroneby author,by username.username","type":"string"},"limit":{"default":10,"description":"Maximum resultsResults to return,1-20. Defaults to 10.(1-20)","maximum":20,"minimum":1,"type":"integer"},"q":{"description":"Free-textKeyword querymatched against title and body. Minimum(min 2characters.characters)","minLength":2,"type":"string"},"tag":{"description":"Restrict to articles carrying thisFilterexactbytag.tag","type":"string"}},"type":"object"}
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":true}
Suggest titlesfrom draft text
Generate 5title options FROM AN EXISTING DRAFTcompelling,derived from what theSEO-friendly articleactually says. Pick between the twotitletools by what you have in hand: use this one when the text existsoptionsandfromshouldyourdriveexistingthearticleheadline.content. Use generate_title_seowhen you are starting from a topic orinsteadkeyword,iforyou wanttitles aimedtoattarget specificsearch terms — this tool takes no keyword input at all. Nothing is saved and thekeywordsarticleorishave notretitled; apply a choice with update_article. Requires an API key and consumes AI credits per call. Generative, so repeated calls return different titles. Needs at least 20 characters of text towrittenworkcontentfrom.yet.
⟨5 unchanged words⟩ ,"properties":{"context":{"description":"TheYour articletext to draw titlescontentfrom,in plainor Markdown, 20-8000 characters. More of the real draft yields better-fitting titles thantextaorsummary.markdown","maxLength":8000,"minLength":20,"type ⟨5 unchanged words⟩
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":truefalse,"readOnlyHint":true}
Updateanarticle
ChangeUpdate the title, body, or tags of an existing article ordraft that alreadydraft.exists.Only the fields you pass aretouched;changed; omitted fields keep their current values.Passing `tags` REPLACES the whole tag list rather than adding to it, so send the full set you want. Editing a published article changes what readers see immediately; it does not unpublish or re-date it. Safe to repeat: the same call twice leaves the same result. Requires an API key, and the account must own the article. Errors if no updatable field is supplied. Returns the updated article.
⟨5 unchanged words⟩ ,"properties":{"body_markdown":{"description":"Replacement body as Markdown. Replaces the wholeNew body,not ainpatch.Markdown","minLength":1,"type":"string"},"id":{"description":"Article or draftid from a listing tool. This is the id, not the slug.ID","minLength":1,"type":"string"},"tags":{"description":"Replacement tag list, up to 10. OverwritesReplace theexisting tagstagentirely.list","items":{"type":"string"}, ⟨3 unchanged words⟩ :"array"},"title":{"description":"ReplacementNewheadline.title","maxLength":500,"minLength":1,"type ⟨5 unchanged words⟩
{"destructiveHint":falsetrue,"idempotentHint":true,"openWorldHint":truefalse,"readOnlyHint":false}
ShowPlanplanusage andquota, orupgrade
Showthe account'syour current Misar.Blog plan, how much of each quotaremainsyou have left, and whata higher planupgrading unlocks.Calledwith no argumentsCall itonly reads — usefulany time,— notjustonly after hitting alimit, and the natural follow-up when a write tool reports a quota error. Two arguments make it act rather than report, so pass them only on explicit instruction from the user: `start_trial`limit.ENROLSSettheopen=trueaccounttoinopen thefree trial immediately (a real account change, not a preview), and `open` LAUNCHES acheckout page inthe user'syour browser.Neither charges a card by itself. Requires an API key. No billing state changes unless you pass start_trial; the returned quota snapshot already reflects a trial started in the same call. For whether you are authenticated at all, use `status`.
⟨6 unchanged words⟩ :{"open":{"description":"Open thecheckoutupgrade/checkout page in theuser'sdefault browser.Side effect on their desktop — only when they asked to upgrade.","type":"boolean"},"plan":{"description":"Plan slug to open,(e.g. 'pro'or,'business'.'business'). Defaults to the recommended plan.Only meaningful with open=true.","type":"string"},"start_trial":{"description":"Enrol inStart the free no-card trialnowimmediately, ifeligible. This changes the account's plan — do not set ityou'respeculatively.eligible.","type":"boolean"}},"type":"object"}