Docswrite MCP
Enables creating, updating, searching, and deleting Google Docs documents with support for content management and formatting
Provides search capabilities for documents stored in Google Drive and document deletion functionality
Allows publishing content from Google Docs to WordPress with extensive customization options for post properties, featured images, SEO settings, and formatting preferences
Supports configuring Yoast SEO settings when publishing WordPress content, including focus keywords, meta descriptions, and titles
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., "@Docswrite MCPcreate a new Google Doc titled 'Q4 Marketing Report' with the content from our planning meeting"
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.
Docswrite MCP Server
Publish content and Google Docs to WordPress, Webflow, Contentful, Shopify, GitHub, Dev.to, Hashnode, Medium, Ghost, Docswrite blogs, X and LinkedIn from Claude, ChatGPT, Cursor, or any other MCP client. Docswrite turns the doc (headings, images, links, tables) into a formatted post, uploads the images, and fills in SEO fields.
Remote server (recommended): https://api.docswrite.com/mcp
Docswrite now hosts the MCP server. There is nothing to install: add the URL as a
remote / custom connector and sign in to Docswrite when the client asks (OAuth 2.1
with dynamic client registration; you approve the connection for one organization
and can revoke it any time). Clients without OAuth can send an org API key instead
(Authorization: Bearer dw_live_... or x-api-key).
It publishes content directly: the assistant sends the post as Markdown or HTML (title, excerpt, tags, categories, slug, SEO fields, canonical URL, images) to one or many connections at once (WordPress, the WordPress plugin, Webflow, Contentful, Shopify, GitHub, Ghost, Medium, Dev.to, Hashnode, Docswrite blogs, X, LinkedIn), as a draft, now or scheduled. A Google Doc URL still works as the source.
Tool | What it does |
| Connected blogs, CMSs and social accounts (ids for |
| Publish content to one or many connections (draft / publish / schedule; |
| Posts across connections with status, URL and source |
| Follow a publish ( |
| Re-publish a post with changes, or reschedule it |
| The connected user, organization, plan and remaining free posts |
| Plans, and a Stripe checkout link (never charges by itself) |
| Search and read the organization's posts (ChatGPT connectors, deep research) |
Claude (claude.ai / Desktop): Settings -> Connectors -> Add custom connector ->
https://api.docswrite.com/mcp.
ChatGPT: Settings -> Connectors (developer mode) -> Create -> MCP server URL
https://api.docswrite.com/mcp, authentication OAuth.
Claude Code:
claude mcp add --transport http docswrite https://api.docswrite.com/mcp
# or with an org API key instead of OAuth:
claude mcp add --transport http docswrite https://api.docswrite.com/mcp --header "Authorization: Bearer dw_live_..."Cursor / VS Code / Windsurf (mcp.json):
{
"mcpServers": {
"docswrite": { "url": "https://api.docswrite.com/mcp" }
}
}MCP Inspector:
npx @modelcontextprotocol/inspector --cli https://api.docswrite.com/mcp --transport http \
--header "Authorization: Bearer dw_live_..." --method tools/listThe same publishing is available over REST: POST https://api.docswrite.com/api/v1/posts
(see https://api.docswrite.com/openapi.json and https://api.docswrite.com/auth.md).
The rest of this README covers the local stdio server in this repository, which still works (for clients that only run local servers, or to publish from Google Docs with your own Google OAuth client).
Related MCP server: Locations MCP Server
Quick start (local stdio server)
In the Docswrite dashboard, open Settings -> API Keys (https://docswrite.com/dashboard/api-keys) and create an org API key (
dw_live_...). One key reaches every connection of your organization: the assistant lists your connections and publishes to any of them.Run the server (Node.js 18+):
npx -y @docswrite/docswrite-mcp --docswriteToken dw_live_...Until the npm package is published, run it straight from GitHub (same flags):
npx -y github:Docswrite/docswrite-mcp --docswriteToken dw_live_...The key can also be passed as --docswriteToken=<key> or through the
DOCSWRITE_TOKEN environment variable.
Two kinds of credentials
Credential | Looks like | Tools | Publishes to |
Org API key (recommended) |
|
| any CMS/blog connection of the organization |
Per-site token (legacy) | a JWT from a site's Automation page |
| that one WordPress site |
The server picks the mode from the credential: a dw_live_ key is sent as
Authorization: Bearer, anything else works exactly as in 0.2.0. Existing per-site
tokens keep working.
Client setup
Claude Code
claude mcp add docswrite -e DOCSWRITE_TOKEN=dw_live_... -- npx -y @docswrite/docswrite-mcpClaude Desktop
Edit claude_desktop_config.json (Settings -> Developer -> Edit Config):
{
"mcpServers": {
"docswrite": {
"command": "npx",
"args": ["-y", "@docswrite/docswrite-mcp"],
"env": { "DOCSWRITE_TOKEN": "dw_live_..." }
}
}
}Cursor
Add to ~/.cursor/mcp.json (or .cursor/mcp.json in a project):
{
"mcpServers": {
"docswrite": {
"command": "npx",
"args": ["-y", "@docswrite/docswrite-mcp"],
"env": { "DOCSWRITE_TOKEN": "dw_live_..." }
}
}
}Other clients (Windsurf, VS Code, Cline, ...) use the same command / args / env.
To run from GitHub instead of npm, replace @docswrite/docswrite-mcp with
github:Docswrite/docswrite-mcp.
Tools (org API key)
docswrite-list-connections
Lists the organization's connections: id, platform, name, status
(connected, needs_attention, or unknown when not checked recently), capabilities,
and api (whether the server can publish to it, which states, which basic options).
Optional filters: platform, status.
docswrite-publish-post
Publishes one Google Doc to one or more connections, one POST /api/posts per connection
(the same request the dashboard composer sends), then waits for the results and returns each
connection's status and live URL, or its error.
connection_ids(required): ids fromdocswrite-list-connectionsgoogle_doc(required): Google Doc URL or ID. The doc must be readable by the Docswrite user who created the API key.state:draft(default),published, orscheduledwithpublish_date(ISO 8601, orYYYY-MM-DDTHH:mmread intimezone, an IANA zone)title: defaults to the doc titleBasic options, where the platform supports them:
Option | WordPress | Hosted blog | Shopify | GitHub | Dev.to | Hashnode | Medium | Ghost | Webflow / Contentful |
| yes | yes | yes | yes | first 4 | first 5 | first 3 | yes | via field mapping |
| yes | yes | |||||||
| Yoast | yes | yes | yes | yes | ||||
| yes | yes | yes | description | yes | ||||
| yes | yes | yes | yes | yes | ||||
| yes | yes | yes | yes | cover | cover | cover | yes | |
| yes | yes | yes | ||||||
| yes |
A connection that does not take an option you set is skipped with an explanation instead of being published without it; the other connections still publish.
platform_options: advanced per-platform settings.webflow.collection_idandcontentful.model_idare required for those platforms; alsowordpress.yoast_settings,rankmath_settings,export_settings,template;shopify.blog_id;github.settings;devto.series;hashnode.subtitle;medium.unlisted.idempotency_key: sent asIdempotency-Key: <key>:<connection_id>. Repeating a call with the same key within 24 h returns the first result instead of publishing twice. A new key is generated per call by default, and internal retries always reuse it.wait_seconds: how long to wait for results (default 90, max 300;0returns job ids).
X and LinkedIn connections are listed but cannot be published to through the API. GitHub has no drafts.
docswrite-list-posts
The organization's posts across connections (published, scheduled, drafts, in-flight and
failed publishes), newest first. Filters: connection_ids, status, platform,
from / to (+ date_field), q (title), sort, limit, cursor.
docswrite-get-post-status
Follows a publish (job_id from docswrite-publish-post) or looks up a post (post_id,
e.g. from a scheduled publish, or an id from docswrite-list-posts).
Tools (per-site token)
docswrite-publish
Publishes a Google Doc to the WordPress site connected to the token. The doc must be
readable by your Docswrite account. Returns a jobId; publishing is asynchronous.
google_docs_url(required): URL of the Google Doctitle,slug,excerpt,authortags,categories: comma-separated namesstate:draft(default),published,future,pending,privatedate: ISO 8601; a future date schedules the postpost_type:post(default) orpagefeatured_image_url,featured_image_alt_text,featured_image_captionexport_settings:compress_images,demote_headings,convert_to_webp,first_image_as_featured_image,add_no_follow_to_external_links,bold_as_strong,wp_content_editoryoast_settings:yoast_focuskw,yoast_metadesc,yoast_titlerankmath_settings:rank_math_focus_keywordnewspack_settings:newspack_article_summary,newspack_article_summary_title,newspack_post_subtitle
docswrite-job-status
Checks a job returned by docswrite-publish (jobId, queueType defaults to post).
state is waiting, active, delayed, completed or failed; a completed job
includes the published post, a failed one includes failedReason.
Optional: Google Docs tools
google-docs-create, google-docs-update, google-docs-search and google-docs-delete
let the assistant write drafts into your own Google Drive. They need your own Google
OAuth client and are hidden unless one is configured:
In Google Cloud Console enable the Google Docs API and Google Drive API and create an OAuth client (type "Web application", redirect URI
http://localhost:3000/oauth2callback).Download the JSON and start the server with
--googleCredentials /path/to/credentials.json(orGOOGLE_CREDENTIALS_PATH).The first Google Docs tool call returns a consent URL; open it, approve, and retry. The token is stored next to the credentials file (override with
--googleToken/GOOGLE_TOKEN_PATH).
Errors
Tool failures come back with isError: true (or, for multi-connection publishes, per
connection in results) and a message the assistant can act on:
401: the key is invalid, revoked or expired. Create or regenerate one on the API Keys page.
402: the organization's plan limit is reached. Upgrade the plan.
403: access denied, e.g. the admin who created the key left the organization (regenerate the key) or the key belongs to another organization.
Cloudflare: if Cloudflare in front of
api.docswrite.comchallenges the request, the message says so (with the Ray ID) instead of reporting a bad key. If the destination WordPress site's Cloudflare/firewall blocks Docswrite, the result names the IPs to allowlist.Unsupported option / platform: the connection is skipped with the list of options it takes.
429: 60 requests per minute per key; the server spaces out its status polling to stay under it.
Per-site token errors are unchanged (401 invalid/expired token, 403 token for another site, inactive plan, failed WordPress publish with the reason).
Development
npm install # also builds via the prepare script
npm test # build + stdio smoke test against a local fake API
npm run inspector # MCP InspectorDOCSWRITE_API_BASE overrides the API host (default https://api.docswrite.com).
Publishing to npm
Not automated (the repo has no workflows).
npm login
npm publish --access publicAvailable Tools
4 toolsdocswrite-get-post-statusA
Check a publish started by docswrite-publish-post (job_id) or look up a post (post_id, or an id from docswrite-list-posts). Returns its status (publishing, completed/published, draft, scheduled, failed), live URL and error.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No | job_id returned by docswrite-publish-post | |
| post_id | No | A post id (e.g. from a scheduled publish) or an id from docswrite-list-posts | |
| connection_id | No | Narrows a post_id lookup to one connection |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose the outcome vocabulary (publishing, completed/published, draft, scheduled, failed), the live URL, and the error field. It does not mention auth requirements, rate limits, or whether a failed job can be retried, but for a status-lookup operation the disclosure is solid.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence covers purpose, both identifier branches, and return values with no filler. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no annotations, so the description must explain returns — which it does by listing statuses, live URL and error. All three optional parameters are accounted for and both lookup modes are described, leaving nothing critical for an agent to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains job_id, post_id and connection_id in equivalent terms; the description largely restates those origins. It adds no syntax, format, or precedence guidance (e.g. what happens if both job_id and post_id are supplied), so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb-plus-resource ('Check a publish', 'look up a post') and names two sibling tools (docswrite-publish-post, docswrite-list-posts) as the source of the identifiers, so an agent can distinguish it from those siblings without opening a schema. It also enumerates the possible status values, making the tool's job unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It clearly routes the agent: use job_id for a publish started by docswrite-publish-post, or post_id for a post from docswrite-list-posts. That is explicit branch selection, though it never states when not to use this tool or how it differs from docswrite-list-connections.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docswrite-list-connectionsA
List every publishing connection (WordPress, Webflow, Contentful, Shopify, GitHub, Dev.to, Hashnode, Medium, Ghost, hosted blog, X, LinkedIn) of the Docswrite organization this API key belongs to. Returns id, platform, name, status, capabilities, and 'api' (whether it can be published to through this server, which states, and which basic options it takes). Use the ids with docswrite-publish-post.
| Name | Required | Description | Default |
|---|---|---|---|
| status | No | Only connections with this cached status | |
| platform | No | Only this platform, e.g. wordpress, webflow, devto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses the scope constraint (only connections of the organization tied to this API key) and the exact response fields, including the meaning of the 'api' field (whether publishable through this server, which states, which basic options). It omits pagination behavior, result-size limits, and what happens on auth failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action, then return shape, then the routing hint. The long parenthetical platform list is slightly heavy but doubles as useful domain vocabulary for the platform filter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by enumerating the returned fields and explaining the non-obvious 'api' object. With only two fully documented, optional filter parameters, an agent has enough to call this correctly; only pagination behavior is left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both filters (status enum, platform string) are self-documenting there, so the baseline is 3. The description mentions status only as a returned field, not as a filter, and never explains the platform filter syntax, so it adds nothing over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List every publishing connection') and scopes it precisely to the Docswrite organization the API key belongs to. The platform enumeration makes the resource unambiguous and clearly separates it from docswrite-list-posts and docswrite-get-post-status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly routes the agent: the returned ids are to be used with docswrite-publish-post, which is the strongest possible when-to-use signal for a lookup tool. It does not state any when-not-to-use condition or mention the filtering alternatives, so it falls short of the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docswrite-list-postsB
List the organization's posts across all connections, newest first: published, scheduled, drafts, in-flight and failed publishes. Each item has id, title, connection {id, platform, name}, status, dates, url and error.
| Name | Required | Description | Default |
|---|---|---|---|
| q | No | Case-insensitive title search | |
| to | No | Up to this date (ISO datetime or YYYY-MM-DD, whole day) | |
| from | No | From this date (ISO datetime or YYYY-MM-DD, UTC) | |
| sort | No | ||
| limit | No | Page size, 1-100 (default 50) | |
| cursor | No | next_cursor from the previous page | |
| status | No | Only these statuses | |
| platform | No | Only these platforms, e.g. ["wordpress", "webflow"] | |
| date_field | No | Which date from/to filter on (default: the item's date) | |
| connection_ids | No | Only these connection ids |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does state the ordering (newest first), the statuses included, and the return item fields (id, title, connection, status, dates, url, error). However, it does not explicitly state that this is a read-only operation, nor does it cover pagination behavior, auth requirements, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The first sentence front-loads the core purpose and scope, while the second efficiently lists the return fields. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description's list of return fields (id, title, connection, status, dates, url, error) is valuable and necessary. It also covers ordering and included statuses. It omits pagination and filter behavior, but the schema documents those parameters well. For a 10-parameter list tool, the description is largely complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 90%, so the input schema already documents all 10 parameters thoroughly. The description adds no parameter-level meaning or syntax beyond what the schema provides. Baseline score of 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'List the organization's posts across all connections, newest first: published, scheduled, drafts, in-flight and failed publishes.' This clearly scopes the tool to listing posts with a defined ordering and status set. However, it does not explicitly name or differentiate from sibling tools like docswrite-get-post-status or docswrite-list-connections.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It does not mention prerequisites, exclusions, or when to prefer docswrite-get-post-status or other siblings. Usage is left entirely to inference from the tool name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
docswrite-publish-postA
Publish a Google Doc to one or more connections of the organization (ids from docswrite-list-connections). Docswrite converts the doc (headings, images, links, tables) and publishes it; one request per connection. state: draft (default), published, or scheduled (with publish_date, optionally timezone). Basic options (tags, categories, canonical_url, excerpt, slug, featured_image_url, author, post_type) apply where the platform supports them; a connection that does not support a given option is skipped with an explanation instead of being published without it. Waits up to wait_seconds for the results and returns each connection's status and live URL (or error). The Google Doc must be readable by the Docswrite user who created the API key. X and LinkedIn cannot be published to through the API.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | URL slug (WordPress, hosted blog, Shopify, GitHub, Ghost) | |
| tags | No | Tag names (array or comma-separated). WordPress creates missing tags; Dev.to keeps 4, Hashnode 5, Medium 3 | |
| state | No | draft (default), published (live now), or scheduled (needs publish_date) | draft |
| title | No | Post title. Defaults to the Google Doc title | |
| author | No | Author name, username or email (WordPress, Shopify, GitHub) | |
| excerpt | No | Excerpt / description (WordPress, hosted blog, GitHub, Dev.to, Ghost) | |
| timezone | No | IANA time zone for a wall-clock publish_date, e.g. America/New_York. Defaults to the connection's time zone | |
| post_type | No | WordPress only: post (default) or page | |
| categories | No | Category names (WordPress, GitHub) | |
| google_doc | Yes | Google Doc URL (https://docs.google.com/document/d/<id>/edit) or document ID | |
| publish_date | No | For state=scheduled: a future date, either ISO 8601 with offset (2026-10-01T09:00:00Z) or a wall-clock time YYYY-MM-DDTHH:mm read in `timezone` | |
| wait_seconds | No | How long to wait for the results (default 90, 0 = return job ids at once) | |
| canonical_url | No | Canonical URL (Dev.to, Hashnode, Medium, Ghost; WordPress via Yoast SEO) | |
| connection_ids | Yes | Connection ids to publish to (array, or one id / comma-separated ids) | |
| idempotency_key | No | Reuse the same key to retry safely: within 24 h a repeat returns the first result instead of publishing twice. Default: a new key per call | |
| platform_options | No | Advanced per-platform options; each block only applies to connections on that platform | |
| featured_image_url | No | Featured/cover image URL. By default the first image in the doc is used where supported |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations the description carries the full burden, and it discloses real behavioral nuance: one request per connection, connections that don't support an option are skipped with an explanation rather than published incorrectly, wait_seconds bounds the wait and each connection returns status plus live URL or error, the doc must be readable by the API-key user, and X/LinkedIn are unsupported. It does not state whether publishing is irreversible or how retries interact with idempotency_key, which are the remaining gaps for a write tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The core action and its scope are front-loaded, followed by state handling, option application, and waiting/return behavior. It is dense but nearly every sentence adds operative detail; the description is one long paragraph rather than clearly delimited ideas, which slightly hurts scanability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 17-parameter tool with nested platform_options and no output schema, the description covers the essentials: what is published, how options are applied per platform, the timeout behavior, and the shape of the result (per-connection status and live URL or error). It does not explain how to retrieve results when wait_seconds=0 returns job ids early, leaving a small gap given there is no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is already 100%, so the baseline is 3, but the description adds cross-parameter relationships the schema cannot express: scheduled requires publish_date (and optionally timezone), basic options are applied only where the platform supports them, and unsupported options cause a skip rather than a silent drop. These are genuine additions on top of the per-field schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Publish a Google Doc to one or more connections of the organization') and explicitly distinguishes its sibling by naming docswrite-list-connections as the source of ids. It also names the unsupported platforms (X, LinkedIn), so an agent can rule the tool in or out without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear conditions for the state parameter (draft default, scheduled requires publish_date) and routes the agent to docswrite-list-connections for ids. It stops short of saying what to do after the call returns early (e.g. use docswrite-get-post-status when wait_seconds=0 returns job ids), which is the main sibling-routing gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.3.0- First observed
docswrite-get-post-status - First observed
docswrite-list-connections - First observed
docswrite-list-posts - First observed
docswrite-publish-post
TDQS
Scored across 4 tools
Each tool targets a distinct resource+action: list connections vs. list posts, publish a post vs. check a single post's status. The descriptions explicitly clarify the boundary between docswrite-list-posts (all posts) and docswrite-get-post-status (single job/post lookup), so misselection is unlikely.
All four tools follow a uniform docswrite-<verb>_<noun> pattern (list_connections, publish_post, list_posts, get_post_status) with consistent kebab/underscore convention and verb-first style.
Four tools form a tight, well-scoped set covering discovery, publish, listing, and status polling without redundancy. It is slightly thin—no tools for managing or editing posts after publication—but nothing feels unearned.
The core publish lifecycle is covered: discover connections, publish (with draft/scheduled options), list posts, and poll status. Gaps exist around post lifecycle management (updating, deleting, or unpublishing an existing post), but agents can work around these for the primary publishing workflow.
Maintenance
Related MCP Connectors
Publish to self-hosted WordPress from AI agents: markdown, images, SEO, and Notion sync.
Read, write, translate and sync WordPress and Webflow blog articles from Claude.
Publish drafts to Google Docs for review, then revise and resolve reviewer comments in your AI tool
Manage WordPress blogs and WooCommerce shops from Claude, ChatGPT, Cursor and other MCP apps.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables seamless content conversion between multiple formats including Markdown, HTML, and DOCX directly within development environments.3 npm-
- AlicenseNot gradedqualityNot gradedmaintenanceEnables WordPress content extraction, keyword research using Google autocomplete and Trends data, and generation of SEO-optimized content with quality metrics.-
- AlicenseAqualityNot gradedmaintenanceAI-powered WordPress management that enables creating and editing posts, pages, media, plugins, themes, and Gutenberg blocks through natural language with safe-by-default writes and full rollback support.524 npm-
- AlicenseNot gradedqualityBmaintenanceBridges AI writing and content platforms by enabling AI agents to format Markdown and publish posts directly to WeChat Official Accounts with automatic image handling. It supports conversational theme management and streamlined drafting to eliminate the need for manual copy-pasting between editors.75 npm1,350Apache 2.0