PixelGlass
Server Details
Create, design and run a publication from Claude or ChatGPT, including sign-up and checkout.
- Status
- Healthy
- Uptime
- 100.0% over the last 24 hours
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- ChatGPT
- –
- Claude
- –
TDQS
Scored across 97 tools
Most tools have distinct purposes and the descriptions carefully explain when to use each, but there are multiple overlapping ways to modify posts (edit_post, replace_post, update_post_settings, change_posts) and theme/site files (edit_* vs write_* vs delete_*). The sheer number of tools also makes it easy for an agent to misselect between similar operations, even with good descriptions.
The vast majority of tools follow a consistent snake_case verb_noun pattern (create_*, list_*, get_*, update_*, delete_*, etc.). A few read-only tools break the pattern by using noun phrases (billing_link, site_status, theme_history, site_pages_history), which is a minor deviation.
97 tools is an extreme number for a single MCP server, far beyond the recommended 3–15 range and well past the 50-tool threshold for severe over-scoping. Even though the platform is broad, this volume creates significant cognitive load and makes tool selection unwieldy.
The surface covers much of the publishing domain—posts, themes, site pages, collections, webhooks, media, and billing—but notable gaps remain: there is no tool to list or manage members, no way to delete an automation, and no tool to enable/disable an automation after creation. These missing lifecycle operations create dead ends for membership and automation workflows.
Publisher details
- Operator
- Klementine Ventures LLC · Publisher source
- Operator website
- https://klementine.xyz/ · Publisher source
- Vendor relationship
- First-party
- Documentation
- https://pixelglass.co/guides#agents · Publisher source
- Trust center
- Unknown
- Restrictions
- PixelGlass account and OAuth authorization required. Monthly subscription.
Available Tools
97 toolsactivate_themeMake a theme the site'sADestructiveIdempotentInspect
On one site of the account, named in site. Makes the theme the one the site wears, as it stands live — a change still held (list_themes' held_changes) lands when it is whole, as on any theme. Nothing else to publish: every write goes live by itself. Only when the person says so. Admins only.
Inputs: site (required), theme (required).
add_automation_actionAdd an action to an automationAInspect
On one site of the account, named in site. An action at the end of the automation, its wait after the step before: add_label or remove_label (name the label; a new name becomes one), add_to_circle or remove_from_circle (name the circle). A label an action adds starts that label's automations, so one automation can lead to the next.
Inputs: site (required), action (required), automation (required), label, +3 more.
add_automation_emailAdd an email to an automationAInspect
On one site of the account, named in site. An email at the end of the automation: a new one from a title and Markdown (a post of kind email, never on the site), or a post that exists by its post_id (a draft, or one that went out), which the automation sends and never copies. It goes its wait after the step before. edit_post changes a new email later.
Inputs: site (required), automation (required), title, post_id, +3 more.
add_collection_pagesAdd pages to a collectionAInspect
On one site of the account, named in site. A branch of a collection in one call: pages, each with the pages under it in children, any depth the levels allow — a country with its states, each state with its spots. They go on the top level, or under the page parent_id names (get_collection gives the ids). Each page is a title, Markdown for its body (create_post's Markdown), and an optional slug, subtitle, cover and the fields its level names. A cover at an outside address is fetched into the library first, once for each address. All or nothing: one page refused makes none, and the refusal names it. Drafts unless publish is true (editors and above). Up to 200 pages a call. Answers every page made in tree order, with its id, address and preview link.
Inputs: site (required), pages (required), collection (required), publish, +2 more.
add_member_labelAdd a label to a memberAIdempotentInspect
On one site of the account, named in site. Puts one label on the member — by their address, or the id the publication's app gave them at single sign-on. A label that does not exist is made; a name finds its label in any case. The member keeps their other labels, and the automations for the label start. A label the member has already changes nothing.
Inputs: site (required), label (required), member (required).
add_to_circlePut a member in a circleBIdempotentInspect
On one site of the account, named in site. Puts the member — by their address, or the id the publication's app gave them at single sign-on — in a circle, so they read the posts for it. Once a circle a member: again changes nothing.
Inputs: site (required), circle (required), member (required).
award_badgeGive a member a badgeBIdempotentInspect
On one site of the account, named in site. Gives a badge to the member who reads under an address. Once a badge a member: giving it again changes nothing.
Inputs: site (required), badge (required), email (required).
billing_linkBilling linkARead-onlyDestructiveInspect
An address at Stripe for the person to open: change_plan, cancel (at the end of the period), or add_card for a trial that has no card. Give the person the address; never act on payment for them.
Inputs: site (required), action (required).
build_themeBuild a themeAIdempotentInspect
On one site of the account, named in site. Asks for one build of the theme as it stands (its package.json scripts.build, off the app server) and answers a ticket at once; poll get_build until it finishes. A succeeded build puts every held change live with its output. A write asks for its own build, so this is for a build that failed on something outside the theme. A theme with no build needs none: what assets/ holds is what the page loads. Admins only.
Inputs: site (required), theme (required).
buy_emailsBuy newsletter emailsCRead-onlyDestructiveInspect
Stripe's checkout for newsletter emails beyond the plan: $5 for each 10,000, used after the plan's emails, never expiring. The person chooses how many there. Give the person the address.
Inputs: site (required).
change_postsChange many posts at onceADestructiveInspect
On one site of the account, named in site. One change to many posts or pages, all or nothing: authors (replace, or add after the ones there; staff slugs or names), add_tag or remove_tag (one tag's name), visibility (public, members, paid), language (one of the publication's; a published post moves to the new language's address), feature, unfeature, or delete — for good. Each counts as an edit. Editors and above. Find the ids with list_posts; one post's other settings are update_post_settings'.
Inputs: site (required), change (required), post_ids (required), tag, +4 more.
check_addressCheck an addressARead-onlyDestructiveInspect
Whether a site address is free: the name before .pixelglass.me, in letters, numbers and hyphens. Nothing is reserved; create_site reserves it.
Inputs: site (required).
check_domainCheck a domainBDestructiveInspect
How a site's domain stands: connected, or the DNS records still to add. With check: true, starts a new round of DNS checks.
Inputs: site (required), check.
connect_domainConnect a domainADestructiveInspect
Connects a domain the person owns to a site, in place of any domain it had, and answers with the DNS records the person adds at their DNS provider. The check runs by itself for a while; check_domain says how it stands.
Inputs: site (required), hostname (required), www.
create_automationCreate an automationAInspect
On one site of the account, named in site. A new automation, off. Its trigger: newsletter.joined (name the newsletter), member.signed_up, label.added (name the label; a new name becomes one), membership.started or membership.canceled. A member enters when the trigger comes, one time only. Then add its emails and actions; the person reads them and turns it on, on its page — no tool turns one on.
Inputs: name (required), site (required), trigger (required), label, +2 more.
create_badgeCreate a badgeAInspect
On one site of the account, named in site. A new badge: a name of its own, a line saying what it is for, and a picture — upload it with upload_media first and pass the url it answers. Give it to members with award_badge.
Inputs: name (required), site (required), image_url (required), description.
create_blockPut an artifact block into a postAInspect
On one site of the account, named in site. Puts a live, custom-coded block into a post. The block is one self-contained HTML document (inline CSS and JavaScript, no build step, no external requests except a script from cdnjs.cloudflare.com or cdn.jsdelivr.net) with a height in pixels. It renders inside a sandboxed iframe with an opaque origin: no cookies, no access to the page, nothing shared with the site — so bake the data into the document, or fetch it from a public source with CORS. Match the site's look with the fonts and accent from the pixelglass://site resource, and read pixelglass://blocks/contract first for the rules and a complete example. The block goes after the given top-level paragraph, or at the end; the write is a revision the writer can undo. Answers with the block's id and the post's preview and editor links — give both links back.
Inputs: html (required), site (required), post_id (required), height, +1 more.
create_circleCreate a circleBInspect
On one site of the account, named in site. A new circle: a name of its own, a slug (made from the name when not given), a line saying who it is for, and the page where a reader learns how to join, which a locked post links to. Put members in with add_to_circle; make a post for it with update_post_settings.
Inputs: name (required), site (required), slug, join_url, +1 more.
create_collectionCreate a collectionAInspect
On one site of the account, named in site. A new collection: a tree of pages, for pages that sort into levels — surf spots by country, state, city and spot; boards by brand and model. Name its levels top first, one to 6; every level is a page of its own, so the country's page can say something about the country. The collection answers at / (made from the name when not given) and a page in it at ///. A level may name fields its pages carry — a spot's location and break — which themes and the JSON read. Fill it with add_collection_pages. Posts never go in one.
Inputs: name (required), site (required), levels (required), slug, +2 more.
create_postCreate a postAInspect
On one site of the account, named in site. A new draft from Markdown, written as the person the key belongs to. Markdown is the body: headings, lists, links, tables, images (put each picture into the library with upload_media first, then paste the Markdown it answers: it becomes the library's own picture), and an ```artifact fence with a self-contained HTML document becomes a block (read pixelglass://blocks/contract first). {{name}} in the prose is a live value ({{name|rounded}} rounds it down: 1,000+), such as {{members_count}}, {{posts_count}} or {{countries_count}}: readers see the number of now (in code it stays text; a name that does not exist is refused with the list). Kind is post or page; language defaults to the site's; the slug comes from the title unless given; tags are names, made when new; visibility is public unless given. A page goes into a collection with collection (its top level) or parent_id (under that page; get_collection gives the ids) — a branch at once is add_collection_pages. Answers the post's facts, its preview link and its editor link — give both links back. Publishing is publish_post.
Inputs: site (required), title (required), markdown (required), kind, +11 more.
create_siteCreate a siteAInspect
Reserves a site address for this account for a day. The site starts when the person adds a card at Stripe: call start_checkout next. One address waits at a time; a second replaces the first.
Inputs: site (required), name.
create_themeCreate a themeAInspect
On one site of the account, named in site. A new theme under its own name, started from a bundled or installed one (list_themes): a copy of that theme as last edited — held changes included — with its own history, and not the site's theme until activate_theme makes it so. The answer names the tree it copied and lists every file the copy inherited, so you know what to keep, rewrite or delete_theme_file. Names are lowercase letters, digits and hyphens. A copy of a bundled theme, or of a copy of one, follows that theme's releases (follows): list_themes shows its update, and plan_theme_update and update_theme bring it in over the copy's own changes.
Inputs: from (required), name (required), site (required).
create_webhookCreate a webhookAInspect
On one site of the account, named in site. A new webhook: when its event happens, the publication sends a signed POST (Standard Webhooks) to its URL — Zapier, Make, or the person's own code. One event a webhook; two events are two webhooks. The URL must be https and on the public internet. The answer holds the secret that signs each request: give it to the person for their receiver. test_webhook sends a sample.
Inputs: url (required), name (required), site (required), event (required).
delete_blockDelete a blockBDestructiveIdempotentInspect
On one site of the account, named in site. Removes a block from its post and deletes its row. The post gets a revision the writer can undo, which brings the block's place back but not its row.
Inputs: site (required), uuid (required).
delete_collectionDelete a collectionADestructiveInspect
On one site of the account, named in site. Removes an empty collection. One that holds pages stays: move its pages out (update_post_settings with collection "") or delete them, the deepest first.
Inputs: site (required), collection (required).
delete_postDelete a postADestructiveIdempotentInspect
On one site of the account, named in site. Deletes a post for good: its revisions go with it, its pictures stay in the library, its blocks stay as rows. A page with pages under it in a collection stays until they are moved or deleted. Editors delete anything; an author their own drafts.
Inputs: site (required), post_id (required).
delete_site_pageDelete a site pageADestructiveInspect
On one site of the account, named in site. Removes one file from the site folder, as a commit in the person's name: the page is gone from the site at once, and the history keeps it — restore_site_pages brings it back. Admins only.
Inputs: path (required), site (required).
delete_theme_fileDelete a theme fileADestructiveInspect
On one site of the account, named in site. Removes one file from the theme, as a commit in the person's name, live like any write once the theme is whole — the way to drop a partial or an asset inherited from the theme a copy was made of, rather than blanking it. A template still rendering the file holds the change until it no longer does; the history keeps the file either way. The manifest and the required templates (index.liquid, post.liquid) are refused: rewrite those instead. Admins only.
Inputs: path (required), site (required), theme (required).
delete_webhookDelete a webhookBDestructiveInspect
On one site of the account, named in site. Deletes a webhook: its event goes to that URL no more. Its tries stay in the audit log.
Inputs: site (required), webhook (required).
edit_postEdit a postAInspect
On one site of the account, named in site. One change to a post's Markdown: find must match exactly once in the post as get_post shows it (include enough surrounding text to be unique), and is replaced by replace. The whole body is re-read after, so a block fence changed here changes its block, and a {{members_count}} stays a live value. The write is a revision the writer can undo. For many changes, replace_post. To add a picture, put it into the library with upload_media first, then paste the Markdown it answers.
Inputs: find (required), site (required), post_id (required), replace (required).
edit_site_pageEdit a site pageAInspect
On one site of the account, named in site. One change to a file of the site folder: find must match exactly once, whitespace included, and is replaced by replace. The result is parsed before it lands, so an edit that would break the page is refused with the line and the file keeps what it had. Each edit is a commit in the person's name and live at once. Then render_page to check your own work, and hand the person the page's address. Admins only.
Inputs: find (required), path (required), site (required), replace (required).
edit_theme_fileEdit a theme fileAInspect
On one site of the account, named in site. One change to a file of the theme: find must match exactly once, whitespace included, and is replaced by replace. Each edit is a commit in the person's name and goes live by itself once the theme is whole — no validator error, and in a theme that builds, built: the answer says live, or held with why (the errors to fix, the build to poll with get_build), and the file's warnings. A menu link is a row of set_navigation, never a link in the theme. Then render_page to check, and hand the person the page's address. Admins only.
Inputs: find (required), path (required), site (required), theme (required), +1 more.
finish_editing_postFinish editing a postAIdempotentInspect
On one site of the account, named in site. Call this when you are done with a post that you started with start_editing_post. People who open the post in the editor then no longer see that you are writing it.
Inputs: site (required), post_id (required).
get_automationGet an automationARead-onlyIdempotentInspect
On one site of the account, named in site. One automation: its trigger and conditions, its steps in order — each an email (its post_id, which get_post and edit_post read and change) or an action — each with its wait after the step before, and how many members are on the way, finished or stopped.
Inputs: site (required), automation (required).
get_buildGet a buildCRead-onlyDestructiveInspect
On one site of the account, named in site. A build's status — queued, running, succeeded (its change is live), failed, timed_out, superseded (a newer write's build took over) — and, once it finished, the log's tail, where a failure explains itself.
Inputs: id (required), site (required), theme (required).
get_collectionGet a collection's treeARead-onlyDestructiveInspect
On one site of the account, named in site. One collection and its pages in tree order: each page, then the pages under it, each level by title. A page has its id, title, slug, status, language, parent_id, depth (1 at the top), level (the name of its depth), public address and, where its level names fields, their values. Narrow it to one language or to the published pages. The ids go to get_post, the writing tools, and add_collection_pages as parent_id.
Inputs: site (required), collection (required), language, published.
get_postGet a postARead-onlyDestructiveInspect
On one site of the account, named in site. One post in full: its facts (tags, authors, cover, meta, translations, blocks), its content as Markdown — a block shows as an ```artifact fence you may edit in place, and a live value as {{members_count}}, with the number a reader sees now in live_values — and its raw HTML. Its paragraphs are counted in the HTML by their order, which is what create_block's after_paragraph counts.
Inputs: site (required), post_id (required).
get_publicationGet the publicationCRead-onlyDestructiveInspect
On one site of the account, named in site. The publication's title, description, address, languages and theme, and the fonts and accent a block should match.
Inputs: site (required).
get_theme_settingsGet a theme's settingsBRead-onlyDestructiveInspect
On one site of the account, named in site. The settings the theme's manifest declares under config.custom (the theme contract, "Theme settings") — each with its type, options, group, label, default and the value the site has set, as the template reads it through theme.<key>. Rows, not files: reading them installs nothing and touches no file. A text setting holding prose a reader reads — an intro, a tagline, a heading — should be declared html in the manifest, so the publisher gets the rich-text editor; change the declaration with edit_theme_file.
Inputs: site (required), theme (required).
list_automationsList automationsBRead-onlyIdempotentInspect
On one site of the account, named in site. The publication's automations: each one's trigger, its conditions, and whether it is on. An automation sends emails, and does actions, to a member after a trigger. get_automation gives one's steps and members.
Inputs: site (required).
list_badgesList badgesBRead-onlyDestructiveInspect
On one site of the account, named in site. The publication's badges — honours given to members, shown beside their name in the comments — with id, name, description, picture and how many members wear each.
Inputs: site (required).
list_circlesList circlesARead-onlyDestructiveInspect
On one site of the account, named in site. The publication's circles — groups of members with no price, which a post can be for — with id, name, slug, description, join page and how many members are in each.
Inputs: site (required).
list_collectionsList collectionsARead-onlyDestructiveInspect
On one site of the account, named in site. Every collection — a tree of pages, each level a page at its own address — with its levels top first, its address, and how many pages it holds and how many are published. get_collection gives one's tree.
Inputs: site (required).
list_plansList plansARead-onlyDestructiveInspect
PixelGlass's plans and prices. Every plan has every feature; the plans differ only in newsletter emails a month and storage. Solo is billed monthly only (its yearly is null). Every plan starts with a free trial, with a card at Stripe. Show these to the person and let them choose.
Inputs: no named parameters.
list_postsList postsARead-onlyDestructiveInspect
On one site of the account, named in site. The publication's posts and pages, newest first, fifty a page: id, title, kind, status, language, slug and a preview link. Filter by status, kind, language, tag slug, author slug, collection or a search string over the title and text. Use the id with get_post and the writing tools.
Inputs: site (required), q, tag, kind, +5 more.
list_site_pagesList the site's pagesARead-onlyDestructiveInspect
On one site of the account, named in site. Every page of this site that is a file rather than a post — its path on the site, the file it comes from, .liquid or .html, its title and its layout — with the files under assets/. Call this first, and read pixelglass://site-pages/contract before writing one.
Inputs: site (required).
list_sitesList sitesARead-onlyDestructiveInspect
Every site this account owns: its address, its plan and status, and what it needs next. Use the site value with the other tools.
Inputs: no named parameters.
list_tagsList tagsBRead-onlyDestructiveInspect
On one site of the account, named in site. Every tag with its slug and how many posts carry it. Tags are made by name from create_post and update_post_settings.
Inputs: site (required).
list_theme_filesList a theme's filesBRead-onlyDestructiveInspect
On one site of the account, named in site. Every file of the theme with its size, held changes included: templates (.liquid), partials, the manifest (package.json), assets, and src/ when the theme builds. Read pixelglass://theme-contract for what each template gets.
Inputs: site (required), theme (required).
list_themesList themesARead-onlyDestructiveInspect
On one site of the account, named in site. Every theme this site has — installed or still bundled — with the live one marked, its version, whether it builds, and how many of its changes are held back from the site (a validator error, a build still due, an update's open merge). Call this first: if the site has more than one theme and the person did not name one, ask which before changing anything.
Inputs: site (required).
list_webhooksList webhooksCRead-onlyDestructiveInspect
On one site of the account, named in site. Every webhook — its name, the one event it sends, its URL, its secret and whether it stopped after failed sends — and every event a webhook can send.
Inputs: site (required).
plan_theme_updatePlan a theme updateARead-onlyDestructiveInspect
On one site of the account, named in site. Before update_theme, and changing nothing: the bundled theme's newer release against this site's edits — the release notes from the version the site stands on to the new one (what each release is for, the files that carry it, its hook, what to check), the files the release changes, the files the site changed, the files both touched, and the ones the merge will stop on. Tell the person what the release brings and what meets their edits, and wait for their go before update_theme.
Inputs: site (required), theme (required).
preview_themePreview a themeARead-onlyDestructiveInspect
On one site of the account, named in site. A link that shows the person a theme on their own site as it stands, held changes included: opening it makes that browser, and only that browser, wear the theme on every page for a day; nobody else and no crawler sees it. For a theme that is not the site's, or a change held for its build; the site's own theme with nothing held is simply the site. A client with a browser pane, like Claude Desktop, can open it beside the chat. Optionally a path to land on, and sample: true to show fifty sample posts in place of the site's — a fuller publication to judge a theme on; nothing is saved, and the bar has the toggle.
Inputs: site (required), theme (required), path, sample.
publish_postPublish a postAIdempotentInspect
On one site of the account, named in site. Publishes a draft now, or schedules it for at (an ISO 8601 time; a bare time is read in the site's zone). Readers see it from then on. Editors and above; an author's draft waits for one.
Inputs: site (required), post_id (required), at.
read_site_pageRead a site pageARead-onlyDestructiveInspect
On one site of the account, named in site. One file of the site folder — pages/about.liquid, assets/hero.css — whole or by a line range, front matter included. A large file is cut with a note saying how to page.
Inputs: path (required), site (required), end_line, start_line.
read_theme_fileRead a theme fileBRead-onlyDestructiveInspect
On one site of the account, named in site. One text file of the theme, held changes included, whole or by a line range. A large file is cut with a note saying how to page.
Inputs: path (required), site (required), theme (required), end_line, +1 more.
remove_automation_stepRemove a step from an automationCDestructiveIdempotentInspect
On one site of the account, named in site. A step out of the automation: the members who wait for it go on to the next one. A new email goes with its step; a post that exists stays a post.
Inputs: site (required), step (required), automation (required).
remove_from_circleTake a member out of a circleAIdempotentInspect
On one site of the account, named in site. Takes the member — by their address, or their app's id — out of a circle; the posts for it lock for them again. A member not in it stays as they are.
Inputs: site (required), circle (required), member (required).
remove_member_labelRemove a label from a memberAIdempotentInspect
On one site of the account, named in site. Takes one label off the member — by their address, or their app's id — by the label's name in any case. The member gets no more emails from the automations for that label. A label the member does not have changes nothing.
Inputs: site (required), label (required), member (required).
render_pageRender a pageARead-onlyDestructiveInspect
On one site of the account, named in site. The site's own rendering of one path — "/" for the home page, a post's public path, "/tag/", a site page's own path, a path that does not exist for the theme's 404 (error.liquid) — with the theme as it stands, held changes included, as HTML, without a browser: how you check your own work. Read it for a missing partial, an empty loop, a stray tag, then fix and render again. Long pages are cut at forty thousand characters. When it looks right, hand the person the page's address.
Inputs: site (required), theme (required), path, sample.
replace_postReplace a post's bodyAIdempotentInspect
On one site of the account, named in site. The whole body from Markdown, in the same forms create_post takes; blocks keep their rows when their fences keep their uuid comment. Send the version that get_post (or your last write) answered: a post saved since then refuses the write. The write is a revision the writer can undo. To add a picture, put it into the library with upload_media first, then paste the Markdown it answers.
Inputs: site (required), post_id (required), version (required), markdown (required).
request_uploadGet an upload addressAInspect
On one site of the account, named in site. For a file that you hold: a picture the person gave you in the chat, or one that you made. Answers an upload address and a curl command. Run the command in your sandbox or terminal, once for each file; the address takes any number of files for 15 minutes. Each upload answers the library address and the Markdown to paste () into create_post, replace_post or edit_post, or the url for set_feature_image. Pictures, films, sound and PDF; up to 64 MB. If curl cannot reach the address, ask the person one time to allow the domain allowed_domain in their app's network settings (in Claude: Settings › Capabilities). Never ask the person to add the picture in the editor.
Inputs: site (required).
resolve_theme_updateResolve a theme updateADestructiveInspect
On one site of the account, named in site. Settles an open update_theme merge by side — sides maps every conflicted file to "ours" (the site's lines) or "theirs" (the release's) and commits the merge — or, with undo, takes the update back while it is not live yet: the open merge abandoned, or the merged release dropped while it waits and nothing was edited after it. A release already live is taken back with restore_theme_revision. Editing the files yourself keeps more; this is the quick way. Admins only.
Inputs: site (required), theme (required), undo, sides.
restore_site_pagesRestore the site pages to a revisionAIdempotentInspect
On one site of the account, named in site. The rollback: the site folder's files back to a commit from site_pages_history, as a new commit in the person's name and live at once — never a rewind, so the history keeps every step. A page deleted since comes back with it. Admins only.
Inputs: sha (required), site (required).
restore_theme_revisionRestore a theme revisionAIdempotentInspect
On one site of the account, named in site. The rollback: the theme's files back to a commit from theme_history, as a new commit in the person's name — never a rewind, so the history keeps every step — and live like any write once whole (a theme that builds rebuilds first, unless that tree was built before). Admins only.
Inputs: sha (required), site (required), theme (required).
search_docsSearch the PixelGlass docsARead-onlyDestructiveInspect
On one site of the account, named in site. Searches the PixelGlass docs — the REST API (the site's and the admin's .json, the keys, every request and answer) — and answers the best sections as Markdown, each with its page. Without a query, it lists the pages. Read a whole page at pixelglass://docs/{path}.
Inputs: site (required), query.
search_mediaSearch the libraryARead-onlyIdempotentInspect
On one site of the account, named in site. The files already in the library, newest first, found by part of their name. Look here before you upload a picture again. Each file has its address, the Markdown to paste into a post, the posts that show it and the alt text they give it, which says what the picture shows.
Inputs: site (required), kind, page, query.
search_photosSearch free photosARead-onlyIdempotentInspect
On one site of the account, named in site. Free photos from Unsplash, the editor's picker as a tool. For a post that needs a picture when the person gave you none. Answers thirty photos a page, each with its id, what it shows and its photographer. Put one into a post with use_photo and its id.
Inputs: site (required), query (required), page.
search_themeSearch a themeCRead-onlyDestructiveInspect
On one site of the account, named in site. Where a string appears in the theme, held changes included, as path:line: text; narrow with a path.
Inputs: site (required), query (required), theme (required), path.
set_feature_imageSet a post's coverBIdempotentInspect
On one site of the account, named in site. The cover picture, by address — from upload_media or the library — with its alt text and a caption. An empty url removes it. A revision the writer can undo.
Inputs: url (required), site (required), post_id (required), alt, +1 more.
set_theme_settingsSet a theme's settingsAIdempotentInspect
On one site of the account, named in site. Writes values for settings the theme's manifest declares (get_theme_settings lists them): values maps keys to a boolean, one of a select's options, a hex colour, a text, an html (one line: bold, italic, a link — anything else is cleaned out), or an image address (an absolute URL or a / path; empty clears it). Live at once — these are rows the site reads, not files — so ask before changing what readers see. A key the manifest does not declare, or a value off its type, is refused whole. Admins only.
Inputs: site (required), theme (required), values (required).
site_pages_historyThe site pages' historyBRead-onlyDestructiveInspect
On one site of the account, named in site. The site folder's commits, newest first: sha, author, when, message — each one what the site showed from then. restore_site_pages takes a sha and is the rollback.
Inputs: site (required).
site_statusSite statusCRead-onlyDestructiveInspect
How one site stands: its address, plan, trial and renewal, its domain, and what it needs next.
Inputs: site (required).
start_checkoutStart the checkoutAInspect
Stripe's checkout for a site create_site reserved, on the plan the person chose. Give the person the address it returns: they add a card there, and the trial starts. The first charge comes after the trial. Then call site_status.
Inputs: plan (required), site (required), interval (required).
start_editing_postStart editing a postAIdempotentInspect
On one site of the account, named in site. Call this first, before you plan a change to a post or a page. It tells the people who open the post in the editor that you are writing it. While a person has the post open in the editor, this tool and every write to the post are refused with the person's name: tell the person who asked, and do not write the post another way. The mark stays for ten minutes after your last write. Call finish_editing_post when you are done.
Inputs: site (required), post_id (required).
start_setupStart setting up the publicationARead-onlyDestructiveInspect
On one site of the account, named in site. Call this first when the person wants to set up, start or design their publication, and on a new publication before anything else. It answers the method for the setup (the questions to ask, in order, with choices; the directions to show; the first draft; the quality bar; the starter posts), what is still open, the base that the new site's theme is copied from, and the themes to read as references. Then do what begin says.
Inputs: site (required).
take_back_badgeTake a badge backADestructiveIdempotentInspect
On one site of the account, named in site. Takes a badge back from the member who reads under an address. The badge itself stays.
Inputs: site (required), badge (required), email (required).
test_webhookSend a testAInspect
On one site of the account, named in site. Sends a sample of the webhook's event to its URL, once, off the request. The result is a row of the audit log in a few seconds (Settings › Webhooks, Deliveries).
Inputs: site (required), webhook (required).
theme_historyA theme's historyARead-onlyDestructiveInspect
On one site of the account, named in site. The theme's commits, newest first: sha, author, when, message, and whether the site has it live yet (a change held for its build or an error is not). restore_theme_revision takes a sha and is the rollback.
Inputs: site (required), theme (required).
unpublish_postUnpublish a postBIdempotentInspect
On one site of the account, named in site. Back to a draft: a published or scheduled post leaves the site. Editors and above.
Inputs: site (required), post_id (required).
update_automationChange an automationBIdempotentInspect
On one site of the account, named in site. A new name, the trigger's newsletter or label, or the conditions (given, they replace all of them; {} removes them). The trigger itself stays: a new trigger is a new automation. While the automation is on, a member on the way who no longer matches gets no more of its emails: say so to the person first.
Inputs: site (required), automation (required), name, label, +2 more.
update_automation_stepChange a step of an automationCInspect
On one site of the account, named in site. A step's wait after the step before, or its place: move up or down one place. The members who wait for it wait the new time. get_automation names the steps by id.
Inputs: site (required), step (required), automation (required), move, +2 more.
update_badgeChange a badgeAIdempotentInspect
On one site of the account, named in site. A badge's name, line or picture (a url from upload_media); what is not given stays. Every member who wears it shows the change.
Inputs: site (required), badge (required), name, image_url, +1 more.
update_blockUpdate a blockBIdempotentInspect
On one site of the account, named in site. A new document or height for an artifact block, by its uuid (get_post lists them). The post it lives in gets a revision the writer can undo. The contract in pixelglass://blocks/contract still holds.
Inputs: site (required), uuid (required), html, height.
update_circleChange a circleBIdempotentInspect
On one site of the account, named in site. A circle's name, slug, line or join page; what is not given stays. Who is in it does not change.
Inputs: site (required), circle (required), name, slug, +2 more.
update_collectionUpdate a collectionBIdempotentInspect
On one site of the account, named in site. A collection's name, levels, slug, description or the fields of its levels, any subset. The levels are the whole list, top first; a level cannot go while a page sits at its depth, and a renamed level keeps its fields. A new slug moves every page's address in it.
Inputs: site (required), collection (required), name, slug, +3 more.
update_post_settingsUpdate a post's settingsAIdempotentInspect
On one site of the account, named in site. The drawer's fields, any subset: title, slug (blank regenerates from the title), subtitle (the line under the title, inline Markdown: italic, bold, a link; blank removes it), tags (the whole list, names), authors (the whole list in byline order, staff slugs or names; editors and above), featured, comments (whether members may comment; a post starts open, a page closed), visibility, tiers and circles (who reads past the excerpt), meta title and description, the cover's alt and caption, header layout, a page's place in a collection (collection for its top level, parent_id to go under a page, collection "" to leave), and a collection page's fields. Content is edit_post's; status is publish_post's. Many posts at once is change_posts'.
Inputs: site (required), post_id (required), slug, tags, +16 more.
update_publicationUpdate the publicationAIdempotentInspect
On one site of the account, named in site. Changes what the onboarding walk and Settings › General set: the title, the description, the languages it publishes in with the default one, and the logo. When the default changes and the old default leaves the languages, its posts and pages move to the new default and keep their addresses (moved_posts in the answer). The description is one line; bold, italic and a link are kept. The logo is a library address from upload_media; an empty one removes it. Also the home page (Settings › Design): a published page shown at the site's root in place of the latest posts, each language showing its own translation; the latest posts below it or not; and an address of its own for the posts list. And the social links: the publication's profile on each network, shown in the site's footer; only the networks named change, and an empty address removes one. Readers see the change at once.
Inputs: site (required), logo, title, home_page, +6 more.
update_themeUpdate a themeAIdempotentInspect
On one site of the account, named in site. Brings the bundled theme's newer release (list_themes' update) in, merged three ways over this site's own edits — only after plan_theme_update and the person's go. Merged clean, it goes live like any write once the theme is whole (no validator error; in a theme that builds, built): then render_page and walk the release notes' Check. Conflicted, the merge waits open, held from the site, <<<<<<< markers in the files named: read each, edit it to the lines that should stand (ours is the site's, theirs the release's) with the markers out, and the edit that settles the last file commits the merge and lands it — or resolve_theme_update settles them by side, or takes the update back. Admins only.
Inputs: site (required), theme (required).
update_webhookChange a webhookAIdempotentInspect
On one site of the account, named in site. Changes a webhook's name, event or URL; what is left out stays. A new URL is checked again. Its secret stays: the person makes a new one on Settings › Webhooks.
Inputs: site (required), webhook (required), url, name, +1 more.
upload_mediaUpload a file to the libraryAInspect
On one site of the account, named in site. Put a picture into the library before a post shows it. Give the picture's own public address, or base64 with a filename and content type. A web page address gives the page's own picture (og:image), when it has one. Pictures, films, sound and PDF; up to 64 MB. For a file that you hold — one the person gave you, or one you made — use request_upload. Answers the library address and the Markdown to paste (), for create_post, replace_post and edit_post, a cover (set_feature_image) or a block.
Inputs: site (required), alt, url, base64, +2 more.
use_photoUse a free photoBInspect
On one site of the account, named in site. A photo from search_photos, by its id, for a post. Answers markdown: the photo with its photographer's credit as the caption, as the editor's picker puts it. Paste it into create_post, replace_post or edit_post as a paragraph of its own. For a cover, give url, alt and caption to set_feature_image. Unsplash's photos are shown from Unsplash, so they do not go through upload_media.
Inputs: id (required), site (required), alt.
validate_themeValidate a themeBRead-onlyDestructiveInspect
On one site of the account, named in site. The whole theme checked, held changes included — a strict Liquid parse, every name against the drops, filters and tags the engine knows, the manifest, the required files — with the errors to fix and the warnings to weigh (a text setting that should be html, a declaration the engine drops, a post or page template with no {% pixel_comments %}, so readers cannot comment). An error holds every change back from the site, so a write's answer lists them too; fix every error, and read the warnings.
Inputs: site (required), theme (required).
write_site_pageWrite a site pageAIdempotentInspect
On one site of the account, named in site. A whole file of the site folder, new or replaced: pages/about.liquid answers at /about, pages/about/team.liquid at /about/team, pages/<path>.html is served exactly as written, and assets/<file> at /site/assets/. A .liquid page may open with a front matter block — title, description, layout (theme, the default, or none), noindex — and its front matter and its Liquid are parsed before anything lands: a page that would not render is refused with the line, and the file is left as it was. Read pixelglass://site-pages/contract first. Each write is a commit in the person's name and live at once; site_pages_history and restore_site_pages take it back. Admins only.
Inputs: path (required), site (required), content (required).
write_theme_fileWrite a theme fileAIdempotentInspect
On one site of the account, named in site. A whole file of the theme, new or replaced (.liquid .json .css .js .md .txt .svg .html, up to 256 KB): a commit in the person's name, live by itself once the theme is whole — the answer says live, or held with why, and the file's warnings. A menu link is a row of set_navigation, never a link in the theme. For a change inside an existing file use edit_theme_file. Never assets/built in a theme that builds — that is the build's output. Admins only.
Inputs: path (required), site (required), theme (required), content (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Connectors
Publish and sell what you build with Claude: apps, ebooks and courses, with checkout and a feed.
Publish blog posts, send newsletters and emails from Claude, Claude Code, Codex and ChatGPT.
Describe your business. Get a beautiful website, built and published for you from Claude or ChatGPT.
Turn Claude or ChatGPT into a website builder that ships a real site to a live URL you own.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to create and manage owned-audience websites with posts, products, subscribers, domains, and analytics.198 npmMIT
- AlicenseAqualityDmaintenanceTurns paid ChatGPT and Grok memberships into a website media tool for Claude and Codex agents.51MIT
- AlicenseNot gradedqualityDmaintenanceCreate, manage, and publish Substack posts with full rich text formatting directly from Claude Desktop or any MCP-compatible client.64 npm26MIT
- AlicenseNot gradedqualityDmaintenanceEnables reading from and optionally drafting to a Substack publication via Claude, using unofficial JSON endpoints and RSS feed.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.