Balzac MCP Server
This MCP server lets AI agents run a full Balzac SEO content pipeline — workspaces, keywords, suggestions, briefings, articles, publishing integrations, and settings — through structured tool calls.
Account & workspaces: check account/credits/admin status; list, get, create, update, and (admins only) delete workspaces, including domain analysis, language, picture style, and article limits.
Keywords: list/get/create/enable/disable/delete keywords, generate long-tail variations, and filter by level (primary/long-tail) or status.
Suggestions: list/get AI content ideas, generate 10 new suggestions, accept one to start writing, or reject it.
Briefings: list/get briefings and create one to immediately start writing an article on a chosen topic, with length, type, tone, focus keywords, and instructions.
Articles: list/get articles with content and metadata; update, delete, rewrite, regenerate the cover image, export as HTML/Markdown/XML, and track free rewrites/covers left.
Publishing: publish or schedule articles to WordPress, Webflow, Wix, GoHighLevel, or a webhook; list/get/create/update/delete/reconnect integrations (admin-only for writes).
Workspace configuration: get/update settings such as language, article length, picture style, tone, auto-accept behavior, writing preferences, and content limits; list/get tones of voice.
Competitors & links: manage competitor domains and reference links used for content strategy and internal/external linking.
Notes: admin-only tools (integration management, workspace deletion) return
403for members; the schema advertises costs (3 credits for rewrite, 1 for cover) that conflict with the README, which lists both as free with 2 per article.
Enables AI agents to export generated articles and content in Markdown format for use in other editors or static site generators.
Allows AI agents to publish content and manage articles directly on Webflow CMS sites through the Balzac platform.
Enables the publication and management of content on Wix-hosted websites.
Allows AI agents to publish articles directly as drafts or posts to WordPress websites.
Provides capabilities to export article data and metadata in XML format for platform interoperability.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Balzac MCP Server Research keywords for 'sustainable fashion' and write an SEO article for my blog"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Balzac MCP Server
MCP server for the Balzac AI content platform -- give AI agents native access to keyword research, article writing, and CMS publishing.
The Balzac MCP server implements the Model Context Protocol so that AI agents like Claude Desktop, OpenClaw, Claude Code, and any MCP-compatible client can manage your entire content pipeline through structured tool calls.
Not sure whether your site lets AI crawlers in? The free AI crawler checker and the other free SEO tools need no signup.
Remote server (Claude, ChatGPT, and other connectors)
Balzac is also available as a hosted MCP server, with nothing to install:
https://mcp.hirebalzac.aiClaude (claude.ai, Desktop, mobile): Settings > Connectors > Add custom connector, paste the URL, then sign in to Balzac and allow access.
ChatGPT: turn on developer mode under Settings > Apps & Connectors > Advanced settings, create a connector with the URL and OAuth authentication, then sign in to Balzac.
Claude Code:
claude mcp add --transport http balzac https://mcp.hirebalzac.ai, then run/mcpto sign in.
Clients that can't do OAuth can send an API key instead, as an Authorization: Bearer bz_... header. You can disconnect apps at any time from your Balzac profile page.
A connected app acts with the role of the person who approved it. Members don't get the admin-only tools (see Roles).
Content created through the remote connector never gets AI-generated images. Workspaces it creates start with ai_images: false, so the setup that follows create_workspace picks stock photos or title covers on a gradient of the brand color. The articles it writes (create_briefing, accept_suggestion), rewrites or gives a new cover keep AI out of all their covers, even in a workspace that allows AI images. Without AI images, a title cover is the article title on a gradient of the brand color, any other cover is a stock photo, and a first cover with no matching stock photo gets the title gradient instead.
The tools follow the same rule: they offer no AI picture style and no ai mode, and title_based_featured_image and ai_images can only be turned off. update_settings with ai_images: false keeps every cover of a workspace free of AI images, including articles written in the Balzac app or by autopilot; turning ai_images back on is done in the Balzac app (Settings > Images), and the API answers 403 forbidden to a connector that tries. Turning auto_accept_suggestions on in a workspace whose ai_images is true also returns 403, unless the same call sends ai_images: false. regenerate_article_picture has two modes: title or stock (a stock photo, which never falls back to AI: when no photo matches, the tool returns 422 no_stock_photo and nothing is counted, so try again with search words in additional_instructions, or use title).
The guarantee covers OAuth sign-ins, which is how Claude and ChatGPT connect. With a bz_ API key, the remote server's tools still never ask for AI images, but the covers of new articles follow the workspace's ai_images setting.
The local server below offers the same tools, plus AI picture styles and the ai cover mode, using an API key.
Related MCP server: croquis-mcp
Registry listing
This repository includes a server.json (and mcpName in package.json: io.github.hirebalzac/mcp) prepared for the official MCP Registry. Registry listing is not live until it has been published; check the registry for current status.
Balzac is an AI SEO agent that researches keywords, then writes and publishes blog articles. The free tier includes 3 articles; paid plans start at $79/month.
The local (npm, stdio) server reads BALZAC_API_KEY (required) and BALZAC_API_URL (optional). Never commit your key.
Quick Start
1. Get your API key
Log in to Balzac, go to Settings > API Keys, and generate a key.
2. Configure your MCP client
Add to your MCP configuration (Claude Desktop, OpenClaw, or any MCP-compatible host):
{
"mcpServers": {
"balzac": {
"command": "npx",
"args": ["-y", "balzac-mcp"],
"env": {
"BALZAC_API_KEY": "bz_your_api_key_here"
}
}
}
}For Claude Desktop, this file lives at ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows).
3. Start using it
Once configured, your AI agent can directly call Balzac tools:
"Research keywords for my site and write an SEO article about the best opportunity"
"Write 3 articles about our top keywords and publish them as drafts to WordPress"
"Rewrite my latest article with a more professional tone"
Environment Variables
Variable | Required | Description |
| Yes | Your Balzac API key (starts with |
| No | API base URL (default: |
The remote server (npm run start:http, deployed from the Dockerfile) takes its credentials from each request instead of BALZAC_API_KEY, and reads:
Variable | Description |
| Public URL of the server ( |
| OAuth authorization server (default: |
| API base URL (default: |
| Port to listen on (default: |
Available Tools
Account
Tool | Description |
| Account, available credits, and whether the credentials act as an admin |
Workspaces
Tool | Description |
| List all workspaces (filter by status: new, running, ready, imported, not_imported) |
| Get workspace details |
| Create a workspace from a domain |
| Update workspace settings |
| Delete a workspace (admins only) |
Keywords
Tool | Description |
| List keywords (filter by status) |
| Get keyword details (volume, competition, intent, difficulty, GSC metrics) |
| Add a keyword |
| Enable a keyword |
| Disable a keyword |
| Delete a keyword |
| Generate new keywords with AI (async) |
Suggestions
Tool | Description |
| List content suggestions |
| Get suggestion details |
| Generate 10 new suggestions (1 credit) |
| Accept and start writing (5 credits) |
| Reject a suggestion |
Briefings
Tool | Description |
| List briefings |
| Get briefing details |
| Create a briefing and start writing (5 credits) |
Articles
Tool | Description |
| List articles (filter by status, published), with each one's |
| Get article details and content, |
| Update article metadata |
| Delete an article |
| Rewrite article content (free, 2 per article) |
| Generate a new cover (free, 2 per article): title, stock photo or, on the local server, an AI style |
| Publish to an integration (the live URL shows up later in |
| Schedule future publication |
| Export as HTML, Markdown, or XML |
rewrite_article, publish_article and schedule_article return the article without html_content, published_html and schema_json_ld: get_article has them. When the article is already on that integration, publish_article creates no new publication and passes on the API's message, which says when nothing was sent because the integration can't take updates (GoHighLevel, or a webhook with webhook_updates off).
Competitors
Tool | Description |
| List competitor domains |
| Add a competitor |
| Remove a competitor |
Links
Tool | Description |
| List reference links |
| Add a reference link |
| Remove a link |
Settings
Tool | Description |
| Get workspace settings, including |
| Update workspace settings, including |
Tones of Voice
Tool | Description |
| List available tones |
| Get tone details |
Integrations
Tool | Description |
| List publishing integrations |
| Get integration details (credentials are never returned) |
| Create an integration (WordPress, Webflow, Wix, GoHighLevel, Webhook), admins only |
| Update integration settings, admins only |
| Delete an integration, admins only |
| Re-test integration connection, admins only |
When update_integration moves wordpress_url to another site, send wordpress_application_password in the same call; when it changes webhook_url on an integration with a bearer token, send webhook_bearer_token. Otherwise the update fails with 422 validation_failed.
For webhooks, webhook_updates (on create_integration and update_integration) says whether the endpoint gets an article.updated call when an article already published there changes. New webhooks have it on; send false for an endpoint that creates a post on every call. Webhooks connected before updates existed have it off: turn it on once the endpoint updates the post it created. While it is off, publish_article on an article already there sends nothing and says so.
Credit Costs
Action | Credits |
Writing an article (accept suggestion or create briefing) | 5 |
Generating 10 new suggestions | 1 |
If your account doesn't have enough credits, the tool returns an error with the required and available credit counts. get_account shows the credits left.
Rewriting an article and generating a new cover are free. Each article includes 2 rewrites and 2 new covers; one counts when it finishes, and get_article shows what is left (rewrites_left, new_covers_left). Starting another while one runs returns 409 conflict, and once an article has used its 2 the tool returns 422 free_limit_reached.
Roles
Only admins can manage integrations (create_integration, update_integration, delete_integration, reconnect_integration) and delete workspaces (delete_workspace). Members get 403 forbidden there, and can still list integrations and publish to them.
API keys count as admin, so the local server keeps every tool. On the remote server, an app connected by a member doesn't list the admin-only tools at all. Apps cache the tool list, so after a role change (or for a connection made before this update), reconnect the app to refresh it: until then a member calling an admin-only tool gets a "Tool ... not found" error instead of the 403 message, and a newly promoted admin doesn't see those tools yet.
Errors
Tool errors start with the HTTP status and the API's error type, then the message, for example:
[422 free_limit_reached] You've used the 2 free rewrites for this article.
[422 plan_limit_reached] Your Columnist plan includes 1 website. Upgrade your plan to add another one.
[403 forbidden] Only company admins can do this. Ask an admin of your Balzac account.
[422 no_stock_photo] No stock photo matches this article. Send a few search words in additional_instructions (for example "laptop on a desk"), or use picture_mode: title.See the API documentation for every error type.
See Also
Balzac CLI -- Command-line interface
API Documentation -- Full REST API reference
License
MIT
Available Tools
45 toolsaccept_suggestionA
Accept a suggestion to start writing the article. Costs 5 credits. The suggestion status changes to "accepted" and article writing begins.
Inputs: workspace_id (required), suggestion_id (required).
create_briefingB
Create a briefing to directly start writing an article on a given topic. Costs 5 credits. Article writing starts immediately.
Inputs: workspace_id (required), topic (required), title, type_of, +7 more.
create_competitorC
Add a competitor domain to a workspace for content strategy analysis.
Inputs: workspace_id (required), name (required), domain (required).
create_integrationB
Create a publishing integration. Provide service-specific credentials. A connection test runs automatically after creation. Supported services: wordpress, webflow, wix, gohighlevel, webhook.
Inputs: workspace_id (required), service (required), name (required), auto_publish, +18 more.
create_keywordC
Add a new keyword to the workspace. Balzac will automatically fetch search volume, competition, and intent data.
Inputs: workspace_id (required), name (required).
create_linkC
Add a reference link to the workspace. Balzac will scrape the URL and use it when writing articles.
Inputs: workspace_id (required), url (required).
create_workspaceA
Create a new workspace by providing a website domain. Balzac will automatically analyze the site and discover keywords. The workspace status will be "analyzing" until setup completes. Costs no credits.
Inputs: domain (required), name, description, language, +5 more.
delete_articleC
Permanently delete an article.
Inputs: workspace_id (required), article_id (required).
delete_competitorC
Remove a competitor from the workspace.
Inputs: workspace_id (required), competitor_id (required).
delete_integrationC
Delete a publishing integration.
Inputs: workspace_id (required), integration_id (required).
delete_keywordC
Delete a keyword from the workspace.
Inputs: workspace_id (required), keyword_id (required).
delete_linkC
Remove a reference link from the workspace.
Inputs: workspace_id (required), link_id (required).
delete_workspaceB
Permanently delete a workspace and all its data.
Inputs: workspace_id (required).
disable_keywordB
Disable a keyword to exclude it from content suggestions.
Inputs: workspace_id (required), keyword_id (required).
enable_keywordC
Enable a keyword so it can be used for content suggestions.
Inputs: workspace_id (required), keyword_id (required).
export_articleB
Export article content in HTML, Markdown, or XML format.
Inputs: workspace_id (required), article_id (required), format.
generate_long_tail_keywordsA
Generate long-tail keyword variations from a primary keyword. This runs asynchronously -- check back shortly for results.
Inputs: workspace_id (required), keyword_id (required).
generate_suggestionsC
Trigger AI to generate new content suggestions based on the workspace keywords. Runs asynchronously.
Inputs: workspace_id (required).
get_articleC
Get full details of an article. When status is "done", includes the full HTML content, description, main picture URL, and metadata.
Inputs: workspace_id (required), article_id (required).
get_briefingC
Get full details of a briefing including topic, title, type, length, focus keywords, and instructions.
Inputs: workspace_id (required), briefing_id (required).
get_integrationC
Get full details of an integration including service-specific fields and connection status.
Inputs: workspace_id (required), integration_id (required).
get_keywordB
Get full details of a keyword including search volume, competition, CPC, and search intent.
Inputs: workspace_id (required), keyword_id (required).
get_settingsB
Get workspace settings including language, article length, pictures style, writing preferences, and content limits.
Inputs: workspace_id (required).
get_suggestionB
Get full details of a suggestion including topic, title, type, length, language, focus keywords, and description.
Inputs: workspace_id (required), suggestion_id (required).
get_toneB
Get details of a specific tone of voice including name, code, and description.
Inputs: tone_id (required).
get_workspaceA
Get full details of a specific workspace including name, domain, status, language, description, target audience, theme, pictures style, and article limits.
Inputs: workspace_id (required).
list_articlesB
List articles for a workspace. Filter by status (waiting, in_progress, done) or published state.
Inputs: workspace_id (required), status, published, page, +1 more.
list_briefingsB
List briefings (direct article writing instructions) for a workspace. Filter by status: proposed, accepted, rejected.
Inputs: workspace_id (required), status, page, per_page.
list_competitorsC
List competitor domains for a workspace. Competitors are analyzed to inform content strategy.
Inputs: workspace_id (required), page, per_page.
list_integrationsC
List publishing integrations for a workspace. Integrations connect to WordPress, Webflow, Wix, GoHighLevel, or Webhook endpoints.
Inputs: workspace_id (required), page, per_page.
list_keywordsB
List keywords for a workspace. Keywords drive content suggestions. Filter by level (1=primary, 2=long-tail) or status (enabled/disabled).
Inputs: workspace_id (required), level, status, parent_id, +2 more.
list_linksC
List reference links for a workspace. Balzac weaves these into articles for better internal and external linking.
Inputs: workspace_id (required), page, per_page.
list_suggestionsB
List content suggestions for a workspace. Suggestions are AI-generated article ideas based on keywords. Filter by status: proposed, accepted, rejected.
Inputs: workspace_id (required), status, page, per_page.
list_tonesB
List all available tones of voice that can be applied to workspaces and articles.
Inputs: no named parameters.
list_workspacesA
List all workspaces in your Balzac account. Returns id, name, domain, status, and language for each workspace.
Inputs: status, page, per_page.
publish_articleC
Publish an article to a connected integration (WordPress, Webflow, Wix, GoHighLevel, or Webhook).
Inputs: workspace_id (required), article_id (required), integration_id (required).
reconnect_integrationB
Re-test the connection of an integration. The status will go to "pending" until the test completes.
Inputs: workspace_id (required), integration_id (required).
regenerate_article_pictureA
Regenerate the main picture of an article. Costs 1 credit. Runs asynchronously.
Inputs: workspace_id (required), article_id (required), pictures_style, additional_instructions.
reject_suggestionC
Reject a suggestion. It will not be used for article writing.
Inputs: workspace_id (required), suggestion_id (required).
rewrite_articleB
Rewrite an existing article with optional new parameters. Costs 3 credits. Runs asynchronously.
Inputs: workspace_id (required), article_id (required), length, language, +2 more.
schedule_articleC
Schedule an article for future publication on a connected integration.
Inputs: workspace_id (required), article_id (required), integration_id (required), scheduled_for (required).
update_articleC
Update article metadata: title, slug, description, language, or tone of voice.
Inputs: workspace_id (required), article_id (required), title, slug, +3 more.
update_integrationA
Update an integration. You can change the name, auto_publish, and service-specific credentials. A connection test runs automatically after update.
Inputs: workspace_id (required), integration_id (required), name, auto_publish, +18 more.
update_settingsC
Update workspace settings: language, article length, pictures style, tone, auto-accept suggestions, writing style preferences, and more.
Inputs: workspace_id (required), language, article_length, pictures_style, +7 more.
update_workspaceC
Update a workspace name, description, language, pictures style, or article limits.
Inputs: workspace_id (required), name, description, language, +3 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 45 tools
Most tools have distinct purposes with clear boundaries, such as separate CRUD operations for different resources like keywords, articles, and integrations. However, some overlap exists between 'create_briefing' and 'accept_suggestion' as both initiate article writing, which could cause mild confusion for an agent.
Tool names follow a highly consistent verb_noun pattern throughout, such as 'create_workspace', 'list_articles', 'update_settings', and 'delete_keyword'. This predictability makes it easy for agents to understand and navigate the toolset.
With 45 tools, the count is excessive for the server's purpose of content creation and management. This large number can overwhelm agents, making it difficult to efficiently select the right tool, and suggests the surface could be streamlined without losing functionality.
The toolset provides comprehensive coverage for the content creation domain, including full CRUD operations for workspaces, articles, keywords, integrations, and more. It supports lifecycle management from suggestion generation to publishing, with no obvious gaps that would hinder agent workflows.
Maintenance
Related MCP Connectors
AI agents that research, write and publish SEO articles on your website, from your AI assistant.
SEO & marketing toolkit for AI agents: GA4, Search Console, AdSense, GTM, PageSpeed, Trends.
Complete SEO and AI Search stack for your AI agents
Go-to-market tools for AI agents: publish and schedule posts, find customers, SEO, outreach.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to publish and manage content on Inkwell sites via 12 tools, including inbox publishing, content management, and site configuration.1-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to manage web production projects by providing tools for sitemap planning, content drafting, and review comment workflows.AGPL 3.0
- AlicenseAqualityBmaintenanceEnables AI agents to write and publish Substack posts, manage subscribers and analytics, schedule Notes, and research other writers through 65 tools.6553 npm1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to access self-hosted SEO data and workflows, including keyword research, rank tracking, competitor insights, backlinks, site audits, and AI visibility.MIT