Publish documentation from ChatGPT with native MuseDock MCP
This guide explains how to publish technical documentation from ChatGPT using the native MCP endpoint of the main domain or a tenant, without Cross Publisher.
Choose the site's connection
Under Settings → (MCP) AI Connections, the main domain uses https://musedock.com/mcp. Each tenant has its own endpoint at https://your-domain/mcp. Copy the URL displayed in the site's panel. Cross Publisher connections are separate.
Enable writing and publishing
Under Service and Sites, enable the connection and allow change requests. To publish, also enable publishing. The OAuth access must have article editing and publishing permissions; managing the structure also requires category and tag permissions.
Automatic approvals
Automatic approval for articles lets new requests execute without manual review when all permissions allow it. Automatic category creation has a separate setting. These options cannot override connection limits.
Documentation without a cover image
If a guide needs no image, disable the cover requirement for that MCP resource. The create_and_publish_article tool generates a cover; for an imageless guide, use create_post and, where appropriate, publish_post.
Connect ChatGPT with OAuth
Add a custom MCP server using the site's URL. Select OAuth, a user-defined client, and client_secret_basic as the token endpoint authentication method. Enter the client ID and secret from MuseDock in their corresponding fields. The redirect URL must match the URL supplied by ChatGPT exactly.
Place the guide in the documentation tree
Categories follow Documentation (slug docs) → product → section. Look up the site's actual IDs and assign the guide to its section. This example uses MuseDock CMS → Configuration.
Editorial request fields
Provide a title, HTML content, post_type: "docs", the section ID in category_ids, and the desired status. apply: true starts a request; check its result before claiming publication. Do not recreate the article while the request is queued.
Verify the public result
Confirm that the URL starts with /docs/, that the guide appears in its navigation section, and that H2/H3 headings populate the sidebar index. Documentation is excluded from the normal blog listing. Navigation depends on the theme's documentation views.
If writing tools are missing, first check the resource's and access's effective permissions. Then refresh the ChatGPT connector tools and, if necessary, open a new conversation. You need not revoke tokens to correct resource switches while keeping the existing consent.
See also Documentation System for structuring guides and Search Console for sitemap checks.
Troubleshoot OAuth discovery
The global service and each MCP resource have independent switches. Cross Publisher can work while the Main Domain connection is disabled. Creating an access and its credentials does not enable the resource by itself.
If ChatGPT says it could not discover OAuth settings, check the URL and connection state. In the verified MuseDock.com case, metadata returned HTTP 404 because the main connection was disabled. This did not establish a firewall problem.
Enable without losing credentials
The disabled-connection notice offers “Enable this connection without leaving”. Activation happens without reloading the page or erasing the visible client ID and secret. Then return to ChatGPT and retry discovery. If the global service is off, the main administrator must enable it first. The activation button does not replace editorial access permissions.
Where to enter each value in ChatGPT
Under Plugins → Add → Add custom MCP server, use values from the same resource and access. Interface labels may change.
| ChatGPT field | Corresponding value |
|---|---|
| Server URL | The full URL displayed by MuseDock's Copy URL control; for the main domain, https://musedock.com/mcp. |
| Authentication | OAuth. |
| Registration method | User-defined OAuth client. |
| OAuth client ID | The client ID generated by MuseDock for this access. |
| OAuth client secret | The secret generated by MuseDock, not the CMS password or an OpenAI API key. |
| Token endpoint authentication method | Select exactly client_secret_basic (Basic). |
| Callback / redirect URL | Provided by ChatGPT; must exactly match the redirect URI saved in MuseDock. |
If the callback shown by ChatGPT differs from the preset, choose Custom when creating the MuseDock access and enter the complete HTTPS URL. The redirect URL is not the MCP server URL. Do not copy another connector's callback or disclose secrets in screenshots or documentation.
Why tools may be missing despite permissions
The connection sets overall limits; the client and OAuth consent grant specific permissions. All three layers must align. If the connection disallows change requests, the server hides writing tools even when the client has the scopes. Publishing also requires publishing to be enabled and the corresponding effective permission.
Saving automatic approval when creating or editing an access enables the resource and required change requests. If the access has publishing permission and the administrator can grant it, publishing is enabled under Service and Sites too. This does not disable the cover requirement or grant other clients additional permissions. The global service must remain active.
The case of 11 read-only tools
On October 17, 2026, the main access had editorial scopes but the resource still blocked changes and publication. Once corrected, the public endpoint's authenticated catalog returned 28 tools, including create_post, update_post, publish_post and create_category. The number reflects that specific configuration and may vary.
If ChatGPT still shows the older catalog, check the correct connector's details and tool selection, refresh the tools, and start a new conversation selecting that connector. Operators can compare tools/list on the public endpoint with the same client and consent. Do not recreate credentials or revoke tokens as the first response to a cached catalog.
Rotating a secret is not revoking access
“Rotate secret without revoking connection” keeps the client and provides a 24-hour window to update its secret in the provider. It does not move the client to history. Creating another access with the same name creates a separate client.
The Created date is displayed in Spanish format with mainland Spain time and daylight-saving adjustments. Each card groups its OAuth consents under “OAuth authorizations for this access”. Revoking access disables the client and its authorizations and moves it to revoked-access history; this history does not imply the client remains authorized.
Read this guide and prepare its translation through MCP
This guide has ID 7339 on the main domain. An authorized access can retrieve its full HTML with get_post or get_post_details. The assistant must read the current content rather than reconstruct it from a title or excerpt.
{ "post_id": 7339 }Before translating, call list_translations for that ID. To save English, use save_translation with the post ID, locale: "en", title, translated HTML and localized SEO fields. Keep it linked to the original; do not create another article or change its docs type, categories or Spanish URL.
Saving a translation of a published guide requires translation and publishing permissions. When creating or editing an access, you can select “Automatically approve translation creation and editing”. With this option enabled, save_translation automatically approves new authorized requests; otherwise manual review is required. Requests already pending retain their manual approval. Check its result before claiming publication.
Localized slug and SEO through MCP
save_translation supports an optional slug. Provide a short descriptive English slug without the domain, /en/ prefix or /docs/. For English documentation, the CMS assembles /en/docs/publish-documentation-with-native-mcp. The Spanish slug and URL remain unchanged.
A localized slug improves readability but does not guarantee rankings or replace a good translation. Check self-referencing canonical URLs, reciprocal hreflang links and sitemap URLs. Do not point the English canonical to Spanish by default. Existing LanguageUrl and sitemap mechanisms reuse the localized slug record.
{ "post_id": 7339, "locale": "en", "slug": "publish-documentation-with-native-mcp", "title": "Publish documentation with native MuseDock MCP", "content": "<h2>Requirements</h2><p>Replace this example with the full English translation of the current guide.</p>", "seo_title": "Publish documentation from ChatGPT with MuseDock MCP", "seo_description": "Connect ChatGPT to native MuseDock MCP and publish technical documentation with localized URLs, permissions and automatic navigation.", "apply": true }
The example is illustrative: read and translate the complete current HTML before saving. The operation creates a request subject to current approvals; only report completion when get_request_status confirms it. Its result includes the slug and public URL when a localized route exists.
list_translations returns the saved localized slug. Omitting slug on a text update preserves the existing route; if none is set, the base slug may be used with a language prefix. Spaces and case are normalized and empty values or collisions with another route on the same site are rejected.
Saving the same slug again does not duplicate the route. If a translation already has a different localized slug, MCP rejects changing it to avoid breaking links: arrange a redirect first. Saving a translation does not create a new article, generate images or alter categories.
Reference: Google Search Central: multilingual sites and localized URLs.