# Contenttosocial > Sell your SEO/GEO content as posts for Instagram, LinkedIn, Facebook, Pinterest and X: under your brand, approved by your clients, billed every month. Contenttosocial lets SEO and GEO freelancers and agencies also sell their content as social posts, and lets brands feed every network from their own content. Each client gets a white-label space, on a neutral address, where they see their posts exactly as they will be published, approve or comment on them, and connect their own accounts. Posts are made from templates in each client’s brand (carousels, single images, stories, pins, LinkedIn documents, text posts), scheduled from an editorial calendar and published to the connected accounts, with each account’s statistics. Users bring their own copy, by hand or with their AI agent: Claude or ChatGPT connect through MCP to pick a template, fill it in, then submit the post for approval or schedule it. Contenttosocial itself never calls an AI service. Two paid plans, priced per workspace up to 40: Business for your own brands, and Freelance & Agencies, which adds client spaces; colleagues and extra social accounts can be added to either. The social media templates, the template editor and the carousel maker are free, with no account. ## The product - [How it works](https://contenttosocial.com/#how-it-works) - [Your agents in charge (MCP)](https://contenttosocial.com/#agents) - [Plans](https://contenttosocial.com/#pricing) - [Questions](https://contenttosocial.com/#faq) ## Free social media templates - [Templates, by network](https://contenttosocial.com/templates) - [Agent guide and final-link workflow](https://contenttosocial.com/templates/llms.txt) - [Template catalogue (JSON)](https://contenttosocial.com/templates/catalog.json) - [Editable template schema](https://contenttosocial.com/templates/schema.json) - [Native WebMCP tools](https://contenttosocial.com/templates/webmcp.json) - [Template editor](https://contenttosocial.com/tools/template-editor) 256 starter templates for Instagram, LinkedIn, Facebook, Pinterest and X, in English. No account or installation: agents and people fill them in, render and download in the browser, and web-reading agents can build a final link. ## Guides - [All guides](https://contenttosocial.com/guides) - [What Is WebMCP? How It Works, Chrome Support and vs MCP](https://contenttosocial.com/guides/webmcp) · [Markdown](https://contenttosocial.com/guides/webmcp/markdown) - [Nofollow vs Dofollow Links: Every Link Type Explained (2026)](https://contenttosocial.com/guides/nofollow-links) · [Markdown](https://contenttosocial.com/guides/nofollow-links/markdown) Each guide also exists as Markdown, and its page registers WebMCP tools to list, read and show its chapters and sources (list_guide_chapters, read_guide_chapter, show_guide_chapter, list_guide_sources). ## SEO agency ranking Rankings of SEO and GEO agencies in France, by country, region and city, from measured and sourced data. - [SEO agency ranking](https://contenttosocial.com/seo-agencies) · [JSON](https://contenttosocial.com/data/seo-agencies.json) - [Best SEO agencies · France](https://contenttosocial.com/seo-agencies/france) · [JSON](https://contenttosocial.com/data/seo-agencies/france.json) - [Best SEO agencies · Nouvelle-Aquitaine](https://contenttosocial.com/seo-agencies/france/nouvelle-aquitaine) · [JSON](https://contenttosocial.com/data/seo-agencies/france/nouvelle-aquitaine.json) - [Best SEO agencies · Brittany](https://contenttosocial.com/seo-agencies/france/brittany) · [JSON](https://contenttosocial.com/data/seo-agencies/france/brittany.json) - [Best SEO agencies · Auvergne-Rhône-Alpes](https://contenttosocial.com/seo-agencies/france/auvergne-rhone-alpes) · [JSON](https://contenttosocial.com/data/seo-agencies/france/auvergne-rhone-alpes.json) - [Best SEO agencies · Bordeaux](https://contenttosocial.com/seo-agencies/france/bordeaux) · [JSON](https://contenttosocial.com/data/seo-agencies/france/bordeaux.json) - [Best SEO agencies · Rennes](https://contenttosocial.com/seo-agencies/france/rennes) · [JSON](https://contenttosocial.com/data/seo-agencies/france/rennes.json) - [Best SEO agencies · Lyon](https://contenttosocial.com/seo-agencies/france/lyon) · [JSON](https://contenttosocial.com/data/seo-agencies/france/lyon.json) - [Best GEO agencies](https://contenttosocial.com/geo-agencies) · [JSON](https://contenttosocial.com/data/geo-agencies.json) - [Best GEO agencies · France](https://contenttosocial.com/geo-agencies/france) · [JSON](https://contenttosocial.com/data/geo-agencies/france.json) - [Best GEO agencies · Nouvelle-Aquitaine](https://contenttosocial.com/geo-agencies/france/nouvelle-aquitaine) · [JSON](https://contenttosocial.com/data/geo-agencies/france/nouvelle-aquitaine.json) - [Best GEO agencies · Brittany](https://contenttosocial.com/geo-agencies/france/brittany) · [JSON](https://contenttosocial.com/data/geo-agencies/france/brittany.json) - [Best GEO agencies · Auvergne-Rhône-Alpes](https://contenttosocial.com/geo-agencies/france/auvergne-rhone-alpes) · [JSON](https://contenttosocial.com/data/geo-agencies/france/auvergne-rhone-alpes.json) - [Best GEO agencies · Bordeaux](https://contenttosocial.com/geo-agencies/france/bordeaux) · [JSON](https://contenttosocial.com/data/geo-agencies/france/bordeaux.json) - [Best GEO agencies · Rennes](https://contenttosocial.com/geo-agencies/france/rennes) · [JSON](https://contenttosocial.com/data/geo-agencies/france/rennes.json) - [Best GEO agencies · Lyon](https://contenttosocial.com/geo-agencies/france/lyon) · [JSON](https://contenttosocial.com/data/geo-agencies/france/lyon.json) - [SEO agency awards](https://contenttosocial.com/seo-agencies/awards) · [JSON](https://contenttosocial.com/data/seo-agencies/awards.json) - [Methodology](https://contenttosocial.com/seo-agencies/methodology) · [JSON](https://contenttosocial.com/data/seo-agencies/methodology.json) - [WebMCP tools](https://contenttosocial.com/agencies/webmcp.json) - [Agent index (fr)](https://contenttosocial.com/agencies/fr.json) Every published directory page has a JSON twin at /data + the page path + .json, with the same facts, rankings, sources and dates. ## Documentation - [Public documentation](https://contenttosocial.com/docs) - [Documentation index for agents (Markdown)](https://contenttosocial.com/docs/llms.txt) ## Public pages - [Contenttosocial](https://contenttosocial.com/): Sell your SEO/GEO content as posts for Instagram, LinkedIn, Facebook, Pinterest and X: under your brand, approved by your clients, billed every month. - [Pricing](https://contenttosocial.com/pricing): The Business and Freelance & Agencies plans: workspaces, colleagues, social accounts, white-label client spaces and MCP, billed every month. - [Contact](https://contenttosocial.com/contact): Write to the Contenttosocial team about anything. - [Useful tools. Actually free.](https://contenttosocial.com/tools): Create and download your carousel without an account, email address or credit card. - [Free social template editor](https://contenttosocial.com/tools/template-editor): Create templates with your agent or edit them yourself. Render and download social images in your browser, with no account or installation. - [Free carousel maker](https://contenttosocial.com/tools/carousel-maker): Write your hooks and slides, choose your colors, and download Instagram images or a LinkedIn PDF. No account required. ## Machine-readable content - [Full public text: the overview, every guide and documentation page, the free tools](https://contenttosocial.com/llms-full.txt) The website is available in English and French. Private workspaces, client spaces, customer content, previews and authentication data are never included. French version: https://contenttosocial.com/fr/llms-full.txt --- URL: https://contenttosocial.com/guides/webmcp Updated: 2026-10-01 # What is WebMCP? The guide from a site that runs it > WebMCP explained: how a web page hands tools to the AI agent in your browser, how it differs from MCP, why Safari opposes it, and what we learned shipping 25 tools. Source: https://contenttosocial.com/guides/webmcp Updated 2026-10-01 · 25 min read WebMCP is a proposed web standard that lets a page hand the AI agent in your browser a short list of **tools**: named functions with a description and a typed input. The agent calls them inside your logged-in session instead of reading screenshots and guessing where to click. It is being written at the W3C by engineers from Google and Microsoft, runs in Chrome and Edge trials, and Safari opposes it. This site exposes 25 WebMCP tools. Here is everything we learned, and what the people building the standard have said about it. ### One tool call, start to finish 1. **Page → Browser**: `registerTool(find_seo_agencies)`. The page declares what it can do. 2. **Agent → Browser**: `getTools()`. The agent reads names, descriptions, schemas. 3. **Agent → Page**: `executeTool({ city: "Lyon" })`. It asks for one action, with typed arguments. 4. **Page**: `execute()`. The page runs its own code, in the user’s session. 5. **Page → Agent**: `"[{ name: … }]"`. Data comes back. No screenshot, no guessing. - **2025**: First proposals - **0.8%**: Chrome page loads that register a tool - **1 of 3**: Browser engines on board - **1**: Agent shipping it: ChatGPT - **25**: Tools on this site ## Agents read the web through a keyhole. AI agents already use websites. ChatGPT, Claude, Gemini and Copilot can open a page, read it and act on it. But they do it the way a person would, minus the eyes: they take a screenshot or read the page’s code, decide where to click, click, wait, and look again. Every step sends the whole picture back through the model. That loop is slow, expensive and fragile. To a model, a modern page is a pile of nested `div` elements whose meaning lives in pixels and stylesheets. Web developer Maximiliano Firtman summed up the fragility in one question on the AI Native Dev podcast: what if the JavaScript moves the button while the model is still thinking? The site has no say either. It can’t tell the agent which path is the right one, which step is risky, or what a field really means. At dotAI 2026, Microsoft Edge’s Patrick Brosset put it simply: today’s agents work despite websites, not with them. WebMCP turns that around. Instead of the agent reverse-engineering the interface, the site states what can be done (search flights, add to cart, fill this template) as functions with typed parameters. The agent calls them, and the page runs them with its own code. > “What happens if in those five to ten seconds the JavaScript moves that button?” > > — Maximiliano Firtman, Web developer and author. [AI Native Dev, episode 99](https://tessl.io/podcast/99) ### Without WebMCP 1. Screenshot the page or read its code 2. Guess the next click 3. Click, wait for the page 4. Screenshot again 5. Repeat for every step Every step goes back through the model. ### With WebMCP 1. Read the page’s tools 2. Call one with typed arguments 3. Get data back The page does the work, in the user’s session. ### What the numbers say, and what they don’t - **5 to 11 times fewer tokens, 3 to 5 times faster.** The same model using WebMCP tools rather than clicking its way through, in nekuda’s [WindTunnel benchmark](https://webmcp.com/benchmark) (8 sites, 49 tasks, 3,087 attempts). It is the only sizeable benchmark so far, and a vendor’s: nekuda wrote the tools it tested and sells WebMCP products. - **Tools win on success, not always on cost.** In Carnegie Mellon’s [“Beyond Browsing”](https://arxiv.org/abs/2410.16464) study, an agent calling APIs succeeded twice as often as one browsing (29.2% against 14.8%) but cost about 12 times more per task, because API documentation filled its prompt. Small, well-described tool lists are WebMCP’s answer. - **Coverage decides.** When tools don’t cover the task, tool-only agents lose: 53% success against 71% for screen agents in [MCPWorld](https://arxiv.org/abs/2506.07672). Hybrids that use tools and fall back to the interface scored best in every study we found, which is exactly how WebMCP is designed. Two figures go around without their origin. “89% fewer tokens” comes from a single scripted MCP-B demo, not from Google. “67% less compute and 98% accuracy” comes from a different 2025 paper about a metadata format also called webMCP, where accuracy was in fact slightly lower than the baseline (97.9% against 98.8%). Google, Microsoft and OpenAI have published no performance figures. ## Three actors, one tool call. WebMCP involves three parties. The **page** declares tools. The **browser** keeps the list and carries calls back and forth. The **agent**, built into the browser, running as an extension or inside a desktop app’s browser, reads the list and decides what to call. There is no server in the middle: as an engineer put it at BlinkOn 21, the browser plays the part an MCP server would play, but no actual server is involved. - **The page**: Registers tools from its own JavaScript and runs them when called: the same functions as its buttons, the same cookies, the same permissions. - **The browser**: Holds each tab’s tools, hands them to the agent, routes calls into the page and keeps the human in view. - **The agent**: Reads names, descriptions and schemas, picks a tool, sends arguments, and reads the string that comes back. - **It runs as the user.** Tools execute inside the open tab, with the session the person already has. No API key, no OAuth flow, no new credential: when the tab closes, the access ends with it. - **It lives and dies with the page.** Tools exist only while the page that registered them is open. Navigate away and they’re gone; the next page registers its own. Chrome’s Kasper Kulikowski calls it tab-bound and ephemeral. - **It keeps the human in the loop.** The design target is co-browsing: the person watches the page change as the agent works and keeps the consequential steps. A form tool fills the fields; by default, the human presses submit. - **It shows only what the user may do.** Tools are registered by the page’s code, for the person in front of it. A logged-out visitor’s agent never sees “checkout”, because the page never registers it. - **It degrades gracefully.** No tool for the job? The agent falls back to the interface, as before. WebMCP is a faster, safer path for agents, not a gate. ### The life of a tool 1. **Register.** The page calls `document.modelContext.registerTool()` with a name, a description, a JSON Schema, an `execute` function and an `AbortSignal`. 2. **Discover.** The agent lists the tab’s tools; a `toolchange` event fires whenever that list changes. 3. **Call.** The agent sends arguments. The browser fires `toolactivated` and routes the call into the page. 4. **Run.** `execute(input, { signal })` runs in the page with the user’s session, updates the interface and returns any JSON-serialisable value. 5. **Release.** Aborting the signal, or leaving the page, removes the tool. > “The agent will always prefer to use the agent specific tools when available, but it can fall back to using web UI like a user.” > > — Khushal Sagar, Chrome engineer, specification editor. [Web AI Summit 2025](https://www.youtube.com/watch?v=p1l8nkQAoUw) ## Two ways to write a tool. There are two flavours. The **imperative** API is JavaScript and can do anything. The **declarative** API is a handful of HTML attributes on a form you already have. To the agent there is no difference: in the words of specification editor Dominic Farolino at BlinkOn, there are really just tools. ### Imperative: a JavaScript function Register the tool on `document.modelContext`. Its `execute` function should call the same code your buttons call, update what the person sees, and return data (any JSON-serialisable value). The browser doesn’t validate input for you yet, so `execute` checks its own. ```js if ("modelContext" in document) { const registration = new AbortController(); await document.modelContext.registerTool( { name: "search_flights", description: "Search flights between two airports on one date. " + "Returns up to 10 offers with price, duration and stops.", inputSchema: { type: "object", properties: { from: { type: "string", description: "Departure airport, IATA code" }, to: { type: "string", description: "Arrival airport, IATA code" }, date: { type: "string", format: "date" }, }, required: ["from", "to", "date"], }, annotations: { readOnlyHint: true }, async execute({ from, to, date }, { signal }) { // The same function the search button calls. const offers = await searchFlights({ from, to, date, signal }); // The person sees what the agent asked for. showResults(offers); return offers.slice(0, 10); }, }, { signal: registration.signal }, ); } // Later: registration.abort() removes the tool. ``` - **Annotations are hints, not enforcement.** There are four: `readOnlyHint` (the tool changes nothing), `untrustedContentHint` (its result carries content the site didn’t write, such as reviews), `consequentialHint` (the action deserves confirmation) and `debugging`. WebMCP has no `destructiveHint`, whatever MCP tutorials say, and nothing forces a confirmation prompt. - **Frames need three opt-ins**: `allow="tools"` on the iframe, `exposedTo` on the tool, and `fromOrigins` when the caller lists tools. A `tools` permissions policy switches WebMCP off for a document and its frames. ### Declarative: attributes on a form Add `toolname` and `tooldescription` to a `
``` ### Which one wins? In Chrome’s origin trial, tools were registered through JavaScript **about 172 million times** and through HTML forms **about 20,000 times**, figures Dominic Farolino gave in the W3C’s architecture review. ChatGPT’s browser supports only the imperative API, and only on the top-level page. ### The API moved in 2026. Most tutorials didn’t. Code written before June 2026 often fails today. What changed, according to the specification’s history and Chrome’s documentation: | When | What changed | What to do | | --- | --- | --- | | Mar 5 | `provideContext()` and `clearContext()` removed | Register tools one by one. Part of the reason: a third-party script could silently replace the page’s tools. | | Mar 27 | `unregisterTool()` removed | Pass an `AbortSignal` at registration and abort it. | | May 27 | `navigator.modelContext` became `document.modelContext` | Tools belong to a page, not to the browser. Feature-detect both while older builds linger. | | Jun 11 | `execute(input, client)` became `execute(input, { signal })`; `requestUserInteraction()` removed, “for now” | Confirmation is left to agents and browsers; build it into your flow. | | Sep 3 | `consequentialHint` added | Mark payments, sends and deletions. | | Sep 4 | Headless agents brought into scope | Early documentation said a human would always be watching. No longer a safe assumption. | | Sep 30 | Origin isolation no longer required | Chrome’s documentation still says otherwise; it takes a few versions to reach stable. | | Chrome 153 | `executeTool()` arguments passed as a JSON string | Objects are planned for Chrome 155; accept both in test harnesses. | ## WebMCP is not MCP. The name suggests a browser port of Anthropic’s Model Context Protocol. It isn’t one. MCP is a client–server protocol: JSON-RPC messages between an AI app and a server you host, now governed by the Agentic AI Foundation at the Linux Foundation. WebMCP has no protocol and no server. It is a JavaScript API inside the page, written at the W3C. What they share is the shape of a tool (a name, a description, a JSON Schema), so the same definitions can serve both. Alex Nahas, whose project started the movement, wanted MCP’s JSON-RPC inside the browser and lost that argument. Even Microsoft’s editor, Brandon Walderman, said early on that his hang-up was the “P”: this is a DOM API, not a wire protocol. Mozilla’s standards position is blunter: “There is no MCP here.” **Four ways for an agent to use a website** | | WebMCP | MCP server | Screen-reading agent | llms.txt | | --- | --- | --- | --- | --- | | Where the code runs | In the open page | On your server | Nowhere: the agent clicks | Nowhere: a text file | | Login | The user’s session | OAuth or API keys | The user’s session | None | | Needs the page open | Yes | No | Yes | No | | Who shows the result | The site’s interface | The agent’s interface | The site’s interface | The agent | | Can act | Yes, through the site’s code | Yes | Yes, by clicking | No, read only | | Best for | Live, logged-in, visual work with a person watching | Background automation and back-office tasks | Sites that offer nothing else | Helping agents read and cite | Many teams will run both. **Shopify** ships Checkout MCP for agents on servers and Checkout WebMCP for agents in the buyer’s browser, over the same checkout object, and tells developers to use the server version whenever the agent can run on a server. MCP Apps go the other way round from WebMCP: they bring a site’s interface into the agent’s chat, while WebMCP brings the agent into the site. ### What most articles get wrong - ~~“It’s a W3C standard.”~~ It is a Community Group draft. No Working Group has adopted it, and the architecture review is still open. - ~~“It shipped in Chrome 146.”~~ 146 brought a flag for developers. Chrome 149 to 156 run an origin trial, an extension to 162 has been requested, and no intent to ship has been filed. - ~~“Every agent can use it.”~~ Supporting the API and calling tools are two things. One mainstream agent ships it: ChatGPT’s desktop browser. Gemini in Chrome is announced; Claude in Chrome and Copilot in Edge show no public support. - ~~“Use `navigator.modelContext` and `unregisterTool()`.”~~ Both are gone: it is `document.modelContext`, and you unregister by aborting a signal. - ~~“Forms submit themselves.”~~ Only with `toolautosubmit`. Otherwise the agent fills the form and the person submits. - ~~“It will make you rank in AI search.”~~ Tools can’t be crawled: they exist only while the page is open in a browser. ## From an Amazon workaround to a W3C draft. WebMCP didn’t start on a browser vendor’s roadmap. It started with a login problem. - **Mar 2025, The name appears.** Developer Jason McGhee publishes a project called WebMCP, the first use of the name, to let websites offer tools to local AI clients. - **Jun–Jul 2025, An MCP server inside a web page.** At Amazon, Alex Nahas wanted colleagues to use agents on internal tools. Remote MCP relied on OAuth, Amazon ran on SAML single sign-on, and the internal MCP server had grown to thousands of tools. His answer: run the server in the JavaScript of a page the user is already logged into. He calls it MCP-B (the B stands for browser, because “Browser MCP” was taken), and his Show HN lands on July 9. - **Jul 2025, Two browser teams, the same idea.** On July 9, Chrome files an intent to prototype a “Script Tools API”. On July 16, Microsoft Edge publishes its “Web Model Context” explainer, written by Andrew Nolan and Brandon Walderman. - **Aug 2025, One proposal.** The two proposals merge in the W3C Web Machine Learning Community Group between August 7 and 18, with Nahas’s work credited as implementation experience. On August 29, Patrick Brosset shows an Edge prototype driven from VS Code. - **Sep 25, 2025, Formally on the W3C table.** The group’s revised charter takes effect with WebMCP as a deliverable. Editors: Khushal Sagar and Dominic Farolino (Google), Brandon Walderman (Microsoft). In November, the group meets at TPAC in Kobe and Sagar presents WebMCP at Google’s Web AI Summit. - **Feb 10, 2026, Chrome’s developer trial.** Chrome 146 ships WebMCP behind a flag, with an inspector extension to call tools by hand. Chrome’s developer relations team admits it hasn’t yet tested with real agents. - **Mar–Jun 2026, The API is rebuilt.** `provideContext` and `unregisterTool` go, `modelContext` moves to `document`, the consent hook is removed for now. On June 11, Apple’s WebKit team formally opposes the proposal. - **May–Jun 2026, From I/O to the origin trial.** At Google I/O on May 19, Chrome announces an origin trial, a WebMCP panel in DevTools and an agentic browsing category in Lighthouse. The trial opens on June 9, from Chrome 149 to 156. - **Aug 2026, Sites and agents arrive.** Shopify storefronts register tools from August 5, the day Mozilla sets its position to neutral. On August 25, ChatGPT’s desktop browser starts calling them. Google’s WebMCP Challenge draws about 5,000 entries. - **Sep 2026, Headless in scope, ship date open.** `consequentialHint` lands and headless agents come into scope. Shopify’s checkout follows on September 28. On September 29, Chrome asks to extend its trial to version 162 and hopes to ship within that window. On October 1, the charter of a new Agentic Web Working Group enters review. ## Who’s for it, who’s against it, and why. WebMCP is a Community Group draft, not a W3C standard. A standard needs more than one engine, and today only Chromium implements it. Inside the W3C, the accessibility and privacy groups are critical too. - **Google Chrome** (Implementing): Two of the three editors. Developer trial from Chrome 146, origin trial from 149 to 156, extension to 162 requested, no intent to ship yet. - **Microsoft Edge** (Implementing): One editor and the first prototype. Edge runs the origin trial too. - **OpenAI** (Calling tools): ChatGPT’s desktop browser calls WebMCP tools since August 25, 2026: JavaScript tools on the top-level page only. - **Mozilla Firefox** (Neutral): A prototype behind a setting that is off by default. Interest in the JavaScript API, objections to a name that promises MCP. - **Apple Safari** (Opposed): Wants the gaps fixed in HTML and ARIA, and has said it would formally object if WebMCP moved to a Working Group as is. - **W3C accessibility group** (Not as it stands): Says it does not support the spec in its current form, and calls `toolautosubmit` a vector for deceptive patterns similar to clickjacking. ### Safari’s case deserves a fair hearing WebKit argues that the missing meaning belongs in HTML and ARIA, where people, assistive technologies and agents all benefit at once. A typed schema, it says, constrains the shape of an argument, not what it means, and letting sites tell agents apart invites the old mistake of treating some users differently. The best answer so far: accessibility semantics say what a control **is**, not what it **does**. Two identical forms can buy a plant or file a tax return. Shopify’s Yoav Weiss, who deploys tools on a large number of storefronts, told the W3C’s architecture review he sees no feasible declarative alternative to imperative tools. > “A typed schema constrains an argument’s shape, not the meaning the agent must infer, so the brittleness just moves from the DOM into the tool descriptions.” > > — WebKit, Standards position, June 2026. [WebKit standards positions #670](https://github.com/WebKit/standards-positions/issues/670) ### Four objections, and the best answers | Objection | Best answer | What remains true | | --- | --- | --- | | “Just publish an API.” | WebMCP acts in the session the person is looking at, with no token to create, and suits apps whose logic lives in the browser. | For background automation, an API or an MCP server is still the better tool. | | “Sites won’t adopt it.” | Adoption appears where incentives line up: checkout, documentation, software tools. | Ad-funded sites have little reason to let an agent skip their pages. | | “Tools will drift from the interface.” | Make tools thin wrappers around the functions the interface already calls. | Descriptions can still drift, and fail silently. | | “It’s a Google land grab.” | Microsoft co-edits the specification and OpenAI ships support. | Without Safari, it is a Chromium feature for now. | ### Agent detection: feature or flaw? Events such as `toolactivated` and `SubmitEvent.agentInvoked` let a page know an agent is acting. Developers like it: the page can show progress or adapt. WebKit fears exactly that: a site that can tell agents apart can block them, or give them powers people don’t have. ## What can go wrong. WebMCP makes an agent’s work explicit, which narrows what it needs to touch. It doesn’t make agents safe. The specification says so itself: there is no guarantee that a tool’s declared intent matches its actual behaviour. 1. **Words become attack surface.** Names, descriptions and results all land in the model’s context. A malicious page can hide instructions there, and an honest page can relay them by returning reviews or forum posts. Mark such results with `untrustedContentHint` and say it in words too, as OpenAI’s documentation site does. 2. **The first script to register wins.** Tool names are unique per page, so a compromised analytics or ad script that registers `checkout` first owns it. In a 2026 lab study ([arXiv 2606.06387](https://arxiv.org/abs/2606.06387)), that race hijacked GPT-5.4, Claude Opus 4.6 and Gemini 2.5 Flash in every trial. 3. **Capabilities laundered into English.** Earlence Fernandes (UC San Diego) planted a dormant instruction in one site’s tool description; later, on another site, a trigger word made the agent call that site’s tool. Origin isolation is only as strong as the agent’s defence against prompt injection. 4. **Your Approve button is not a safeguard.** Tools act with the user’s cookies, and an agent that can call tools can usually click too. On September 2, 2026, a developer reported ChatGPT’s browser calling a proposal-only tool, then pressing the page’s own Approve button; the page logged “approved by you” ([issue #288](https://github.com/webmachinelearning/webmcp/issues/288)). Shopify’s rule: the agent shows the order and total, asks the buyer, and asks again if the total changes. 5. **Tools vanish mid-flight.** Results die with the document. If a call makes the page navigate, the answer may never arrive (Shopify notes that `executeTool()` then returns null), and agents sometimes fail to find re-registered tools after the trip. 6. **Nobody can see agent traffic yet.** Sites can count calls, not whether those calls served what the user wanted. Shopify’s Yoav Weiss opened an issue for real-user measurement; an early commerce deployment reports it cannot yet observe real agent traffic. ### Where the defences actually live In the agent and the browser, mostly. Chrome’s Sarah Drasner describes layers: prompt-injection classifiers and a second model that critiques the agent’s actions, limits on which sites a task may touch, and an agent identity with its own spending cap. Google’s Johann Hofmann wrote that agents have a responsibility to secure themselves, and that the API cannot carry them all the way. Even the builders disagree on the basics. Alex Nahas argues an agent needs no identity of its own, only a subset of the user’s. Drasner wants a separate one that can, say, spend only $20 a week. > “We are absolutely due for a catastrophic prompt injection attack.” > > — Alex Nahas, Creator of MCP-B. [Coffee with Developers, February 2026](https://www.youtube.com/watch?v=YVWgoXWSvmk) ## 25 tools in production, on this site. Contenttosocial turns content into branded social posts for Instagram, LinkedIn, Facebook, Pinterest and X. Paying users drive it from Claude or ChatGPT through our MCP server. In September 2026 we added WebMCP to the free, public side of the site, with no account and no API key, so any visitor’s agent can use it while the visitor watches. ### Six kinds of pages, one pattern - **Landing page** (Sep 14): Answer questions on the product and its prices, show a section, open signup prefilled. The agent never creates the account. Tools: `get_product_overview`, `get_pricing`, `show_landing_section`, `open_signup`. - **Template editor** (Sep 22): Create or fill a design, render it, download PNG, JPEG, SVG, PDF or ZIP, or share a link. All of it in the visitor’s browser. Tools: `list_templates`, `load_template`, `get_template`, `get_template_schema`, `create_template`, `update_template`, `set_template_values`, `render_template`, `export_template`, `export_render`, `create_share_link`. - **SEO agency ranking** (Sep 25): Find and compare SEO agencies by city, specialty, industry and size, from the published data only. Tools: `find_seo_agencies`, `get_seo_agency`, `compare_seo_agencies`, `get_city_seo_prices`, `list_seo_agency_awards`. - **Template pages** (Sep 29): Browse the catalogue by network and read the fields of any template. Tools: `list_templates`, `get_template`, `show_templates`. - **A template’s own page** (Sep 30): Fill one template while the visitor watches the live preview and fixes fields by hand. Tools: `get_template`, `set_template_values`, `render_template`, `export_render`, `create_share_link`. - **This guide** (Oct 1): Let an agent read this guide chapter by chapter, from the page itself. Tools: `list_guide_chapters`, `read_guide_chapter`, `show_guide_chapter`, `list_guide_sources`. - **A product agents can operate without signing up.** A visitor asks their agent for an Instagram post. The agent finds a template, fills it, renders it and hands over the file. The free side of the product becomes something agents can use, not just read about. - **No rendering bill.** Edits, rendering and exports run in the visitor’s browser. Only static files and fonts reach our servers; there is no paid rendering service to meter. - **One code path.** Every tool calls the same functions as the buttons. There is no second product to maintain for agents. ### The hard part: a person and an agent on one design The specification says nothing about two writers. In our template editor, the visitor and their agent edit the same file at the same time. We borrowed **optimistic concurrency** from databases: the session keeps a version number that every edit increments, and every agent write must quote the version it read (`expected_version`). A stale write fails with `VERSION_CONFLICT` and the agent reads again; overlapping agent calls get `BUSY`. Any edit invalidates the last render, so a download never shows a design the person has since changed. ```json → set_template_values { "expected_version": 7, "values": { "title": "Spring sale" } } ← { "ok": false, "error": { "code": "VERSION_CONFLICT", "message": "The design changed. Call get_template, then retry with its version." } } ``` ### Ten things we learned 1. **One schema, two jobs.** The same zod schemas validate every call and generate the static manifests of the template editor and the ranking ([/templates/webmcp.json](https://contenttosocial.com/templates/webmcp.json), [/agencies/webmcp.json](https://contenttosocial.com/agencies/webmcp.json)). Those manifests can’t drift from the code, and agents that can’t run WebMCP still learn what’s possible: the discovery step the specification leaves out. 2. **Stop one step before the decision.** `open_signup` fills in the form and opens it, then answers “The account has not been created.” The `show_*` tools move the visitor’s view rather than acting for them. 3. **Errors are part of the interface.** Every failure returns `{ ok: false, error: { code, message, issues } }` with a stable code (`INVALID_INPUT`, `VERSION_CONFLICT`, `BUSY`, `CANCELLED`, `IMAGE_UNREADABLE`) and the exact fields at fault, so the model can correct itself. 4. **Zero bytes for everyone else.** Tool code loads only when `document.modelContext` exists. Other browsers download nothing, so the pages stay as fast as they were. 5. **Every tool has an off switch.** Each registration takes an `AbortSignal`. Leaving the page aborts it, and requests still in flight are cancelled with it. 6. **Expect the browser to move.** Early Chrome builds called tools without an execution context, so we fall back to the page’s own signal. Chrome 153 passes `executeTool` arguments as JSON text, with objects planned for 155. We code to the specification and test against the browser. 7. **Test the real API, no model needed.** Our end-to-end tests launch Chrome with `--enable-blink-features=WebMCP` and call the real tools: discovery, invalid input, cancellation, and the actual bytes and dimensions of every PNG, PDF and ZIP they export. 8. **Content is data.** Template text, agency data and this guide’s chapters come back as data, never as instructions. Images pass the same bounded decoder as uploads, and remote images are refused cleanly when their site forbids reading them. 9. **Keep a way in without WebMCP.** An agent that only reads the web can still build a link to a filled template (`#v=1&template=…&values=…`). The design travels in the URL fragment, which never reaches our server, up to 64 KiB. 10. **Respect the budgets.** Chrome recommends at most 500 characters per description and 30 per name. Our longest description is 389 characters: what the tool does first, its limits second. ### The whole integration pattern Every page uses the same dozen lines: detect, load the tools only if needed, tie them to the page’s life. ```tsx useEffect(() => { const context = document.modelContext; if (!window.isSecureContext || !context?.registerTool) return; const controller = new AbortController(); // Tool code is downloaded only by browsers that can use it. void import("@/lib/agencies/webmcp").then(({ registerAgencyTools }) => registerAgencyTools(context, locale, controller.signal), ); // Leaving the page unregisters every tool. return () => controller.abort(); }, [locale]); ``` ### What we don’t know yet How many agents call our tools, and whether it turns into sign-ups. Like every early adopter, we can’t tell agent traffic apart yet. The one mainstream agent that ships WebMCP today is ChatGPT’s desktop browser; regular ChatGPT and Claude chats don’t run it, and paying users reach the same features there through our MCP server. Try it with your agent: [Free templates](https://contenttosocial.com/templates), [Template creator](https://contenttosocial.com/tools/template-editor), [SEO agency ranking](https://contenttosocial.com/seo-agencies). ## Twelve rules that hold up. Drawn from Chrome’s guidance, the teams shipping WebMCP and our own mistakes. 1. **Think in tasks, not elements.** One tool per job a user comes to do, not one per button. Name what it does: `create_event` executes, `start_event_creation` opens the form. 2. **Keep the list short.** Dozens of tools degrade agents and can make browsers drop some. Register on each page only what that page can do. 3. **Respect the budgets.** Chrome’s limits: 30 characters per name, 500 per description, 150 per parameter description, about 1,500 per result. Put the critical caveat first: overflows are cut silently. 4. **Accept raw input.** Take “11 to 15” the way the user said it; don’t ask the model for minutes since midnight. Use readable enum values: “express”, not 1. 5. **Validate in code, loosely in schema.** Schema constraints aren’t guaranteed to be enforced. Check inside `execute` and return errors that say how to fix the call. 6. **Show what happened.** Update the visible interface on every call: the person shares the tab with the agent. 7. **Label what you don’t control.** `untrustedContentHint` on results with user-generated content, and the same warning in the description. 8. **Leave the decision to the human.** `consequentialHint` for payments, sends and deletions, a confirmation step in the flow, and prices and stock checked again at execution. 9. **Survive navigation.** Do the work in the page and return data, make navigation its own tool, and register the same names on every page. 10. **Detect, load late, clean up.** Check `document.modelContext` (older Chrome: `navigator.modelContext`), load tool code only then, and pass an `AbortSignal`. 11. **Mind your third-party scripts.** Register critical tools early, and audit the tags that share your page. 12. **Test like an agent.** Chrome’s Model Context Tool Inspector, the DevTools WebMCP panel, Lighthouse’s agentic browsing audit, and a browser test that calls the real tools. ## Frequently asked questions ### What is WebMCP, in one sentence? A browser API that lets a web page register tools (named functions with a description and an input schema) that AI agents in the browser can call instead of clicking through the interface. ### Is WebMCP the same as MCP? No. It borrows MCP’s idea of a tool, but there is no JSON-RPC, no transport and no server: tools run in the page’s JavaScript, in the user’s session. MCP is governed by the Linux Foundation’s Agentic AI Foundation; WebMCP is being written at the W3C. ### Which browsers support WebMCP? Only Chromium-based ones so far. Chrome has had a developer trial since version 146 and an origin trial since 149; Edge has an origin trial from 150. Mozilla is neutral and Apple’s WebKit team opposes the proposal, so don’t expect it in Firefox or Safari soon. ### How do I enable WebMCP in Chrome? To test, open `chrome://flags`, enable “WebMCP for testing” (Chrome 146 or later) and restart; Chrome’s Model Context Tool Inspector extension then lists and calls a page’s tools. For your visitors, register your site for Chrome’s origin trial (Chrome 149 to 156) and send its token in an `Origin-Trial` header. ### Who developed WebMCP? Engineers from Google and Microsoft, in the W3C Web Machine Learning Community Group. The editors are Khushal Sagar and Dominic Farolino (Google) and Brandon Walderman (Microsoft). It merges Microsoft Edge’s “Web Model Context” and Chrome’s “Script Tools”, with Alex Nahas’s MCP-B and Jason McGhee’s project as prior art. ### Which AI agents can call WebMCP tools today? One mainstream agent ships it: ChatGPT’s desktop browser (in ChatGPT Work and Codex), since August 25, 2026, for JavaScript tools on the top-level page. Gemini in Chrome was announced at I/O but hasn’t launched; Claude in Chrome and Copilot in Edge show no public support. Extensions can call tools through content scripts, and developers can call them by hand with Chrome’s inspector. Regular chat apps don’t run WebMCP. ### Do I need a server, an API key or OAuth? No. Tools run in the page with the session the person already has. That is the point, and also why WebMCP doesn’t suit agents that run without a browser: give those an API or an MCP server. ### Is WebMCP secure? It narrows what an agent has to touch, but prompt injection, deceptive tools and hijacking by third-party scripts are real risks, largely left to agents and browsers. Treat results as data, keep consequential steps for the person, and audit the scripts on your pages. ### Does WebMCP help SEO? No ranking effect has been announced. Agents discover tools only once they have loaded the page, so being found is still a search problem, where links still count (see our guide to [nofollow and dofollow links](https://contenttosocial.com/guides/nofollow-links)). What WebMCP changes is what happens after the click: whether an agent can finish the job on your site. ### Should I use the imperative or the declarative API? Start with the imperative API: it is what agents use (about 172 million registrations against 20,000 for forms in Chrome’s trial) and the only one ChatGPT supports. Declarative attributes are a quick win for simple forms where the person should press submit. ### Can I try WebMCP on this page? Yes. In a browser with WebMCP, this guide registers four tools: list, read and show a chapter, and list the sources. The line under the title tells you whether your browser exposes them. ## Where this comes from Quotes are verbatim from the recordings and documents below, trimmed for length. Figures name who measured them; vendor figures are labelled as such. - [WebMCP, Community Group draft](https://webmachinelearning.github.io/webmcp/) — W3C Web Machine Learning CG, 2026-09-30 - [Specification repository, issues and history](https://github.com/webmachinelearning/webmcp) — GitHub, 2025–2026 - [WebMCP documentation](https://developer.chrome.com/docs/ai/webmcp) — Chrome for Developers, 2026 - [Secure WebMCP tools](https://developer.chrome.com/docs/ai/webmcp/secure-tools) — Chrome for Developers, 2026-09-01 - [Standards position on WebMCP (oppose)](https://github.com/WebKit/standards-positions/issues/670) — WebKit, 2026-06 - [Standards position on WebMCP (neutral)](https://github.com/mozilla/standards-positions/issues/1412) — Mozilla, 2026 - [Design review of WebMCP](https://github.com/w3ctag/design-reviews/issues/1238) — W3C TAG, 2026 - [Accessibility review (APA WG)](https://github.com/webmachinelearning/webmcp/issues/65) — W3C, issue #65, 2026-08-27 - [Privacy review](https://github.com/webmachinelearning/webmcp/issues/313) — W3C Privacy WG, issue #313, 2026-09-21 - [An agent can complete the page’s own approval step](https://github.com/webmachinelearning/webmcp/issues/288) — WebMCP issue #288, 2026-09-03 - [Web Model Context explainer](https://github.com/MicrosoftEdge/MSEdgeExplainers/blob/main/WebModelContext/explainer.md) — Microsoft Edge, 2025-07-16 - [Site tools (WebMCP) in ChatGPT](https://learn.chatgpt.com/docs/webmcp) — OpenAI, 2026-08 - [Checkout WebMCP](https://shopify.dev/docs/agents/carts-and-checkout/checkout-webmcp) — Shopify, 2026-09 - [document.modelContext usage](https://webstatus.dev/features/document-modelcontext) — webstatus.dev, 2026-10-01 - [Syntax #1037: WebMCP is here (and you should care)](https://syntax.fm/1037) — Syntax, with Sarah Drasner and Dominic Farolino, 2026-09-09 - [Syntax #979: WebMCP, a new standard to expose your apps to AI](https://syntax.fm/979) — Syntax, 2026-02-16 - [Why every developer needs to know about WebMCP now](https://tessl.io/podcast/99) — AI Native Dev #99, with Maximiliano Firtman, 2026-03-31 - [From Hacker News to W3C](https://www.youtube.com/watch?v=yG2kpa0-iFk) — alphalist.CTO #138, with Alex Nahas, 2026-05-21 - [WebMCP: agents on the web and in the browser](https://www.youtube.com/watch?v=6Po39iD6Pfs) — Arcade MCP MVP, with Alex Nahas, 2026-02-11 - [The why and how of WebMCP](https://www.youtube.com/watch?v=YVWgoXWSvmk) — Coffee with Developers, with Alex Nahas, 2026-02-27 - [ShopTalk Show #729 (WebKit’s position, read on air)](https://www.youtube.com/watch?v=A8KcOZ5AVFM) — ShopTalk Show, 2026-08-24 - [Don’t let AI agents push your buttons: use WebMCP instead](https://www.youtube.com/watch?v=p1l8nkQAoUw) — Khushal Sagar, Web AI Summit, 2025-11 - [WebMCP and the agentic web](https://www.youtube.com/watch?v=M1cME470ugM) — BlinkOn 21, with Dominic Farolino, 2026-04 - [WebMCP explained](https://www.youtube.com/watch?v=GbfZSjJBQQ0) — Andrew Nolan, W3C Advisory Committee, 2026 - [Build your website for the agentic era](https://www.youtube.com/watch?v=HdCc-KezQPk) — Kasper Kulikowski, Google I/O 2026, 2026-05 - [WebMCP: stop scraping the web, start calling it](https://www.youtube.com/watch?v=3NDly38DWIE) — Patrick Brosset, dotAI 2026, 2026-09 - [Build agent-ready sites with WebMCP](https://www.youtube.com/watch?v=Is2NHa7awWY) — OpenAI, 2026-08 - [WindTunnel benchmark](https://webmcp.com/benchmark) — nekuda (vendor), 2026-09-18 - [Beyond Browsing: API-based web agents](https://arxiv.org/abs/2410.16464) — Carnegie Mellon, ACL Findings 2025, 2025 - [MCPWorld: tools against screen agents](https://arxiv.org/abs/2506.07672) — arXiv 2506.07672, 2025-06 - [Tool injection attacks on WebMCP agents](https://arxiv.org/abs/2606.06387) — arXiv 2606.06387, 2026-06 - [WebMCP and the same-origin policy](https://www.earlence.com/blog.html#/post/webmcp-sameorigin) — Earlence Fernandes, UC San Diego, 2026-04-30 - [webMCP: Web Machine Context & Procedure (a different proposal)](https://arxiv.org/abs/2508.09171) — arXiv 2508.09171, 2025-08 --- URL: https://contenttosocial.com/guides/nofollow-links Updated: 2026-10-01 # Nofollow vs dofollow links: every type of link, explained > Nofollow, dofollow, sponsored, UGC: what each link type and rel attribute really does in 2026, what Google says, what experiments show, the penalties, and how one site applies it. Source: https://contenttosocial.com/guides/nofollow-links Updated 2026-10-01 · 22 min read A link is a path, a vote and a label at once. **Internal links** join your own pages, **outbound links** point to other sites, and **backlinks** are other sites pointing to yours. The `rel` attribute qualifies a link: without it, you vouch for the destination; `nofollow`, `sponsored` and `ugc` tell Google you don’t. “Dofollow” is not an attribute: it is just a normal link. Here is what each kind and each attribute really does in 2026, from Google’s own documents and engineers, from controlled experiments and from a court record, with the penalties, the law on paid links, and how this site makes those choices in its code. ### A link, taken apart ```html the anchor text ``` 1. **The destination**: The address Google can crawl. Without a real `href`, there is no link for it. 2. **The relation**: What you vouch for. Nothing means yes; `nofollow`, `sponsored` or `ugc` mean no. 3. **The new tab**: A comfort for readers. Browsers now add `noopener` on their own. 4. **The anchor text**: The words Google reads as the destination’s label. Only the relation changes how Google counts the link. The rest decides whether it can, and what it learns. - **2005**: Year nofollow was born - **32.3%**: Pages with a nofollow link - **0.5%**: Pages using sponsored or ugc - **43 · 6**: Median internal · external links per page - **66.5%**: Links lost since 2013 ## Three directions, four relations. Every link has a direction, depending on where it starts and where it lands, and a relation, the `rel` attribute, which says whether its author vouches for it. Most confusion comes from mixing the two: “backlink” is a direction, “nofollow” a relation. A backlink can be nofollow; an internal link should almost never be. - **Internal links** (Your page → your page): They build the paths through your site: menus, breadcrumbs, links in the text. They decide which pages Google finds, how often it comes back, and how importance spreads. You control all of them. - **Outbound links** (Your page → another site): Also called external links. They cite, credit or sell. Each one says, through its `rel`, whether you vouch for the destination. They don’t cost you rankings. - **Backlinks** (Another site → your page): Also called inbound links. The ones search engines learned to count first, and the ones people try to buy. You control none of them, which is exactly why they are worth something. ## Less than in 2005, more than Google likes to say. Google was built on links. The PageRank patent, filed in January 1998, treated each link as a vote, weighted by the importance of the page casting it; the paper that presented Google the same year also credited a link’s anchor text to the page it points to. Twenty-eight years later, both ideas still run. Google’s engineers have spent years lowering expectations. Gary Illyes said in 2023 that links were no longer a top-three ranking factor, and in 2024 that Google needs “very few links to rank pages”. Its spam policy page once called links “an important factor”, then “a factor”, then dropped the sentence in September 2024. Then came a court record. In the 2025 remedies phase of the US antitrust case against Google, notes from a call with a Google engineer described anchors (“a source page pointing to a target page”) as one of three core signals of topicality, and PageRank as a signal of distance from known good sources that feeds a quality score. Links still matter; each one simply matters less, and what counts is where it comes from. Two details from Google’s own podcast undo common beliefs. The PageRank Google computes is not the 0-to-10 score its old toolbar showed: Gary Illyes describes an integer from 0 to “65,000-something”, and says of the toolbar number: “That’s never what we’ve been using.” And Google has no domain score: Domain Rating and Domain Authority are tools’ estimates. “It’s not our domain score. We don’t have that,” Danny Sullivan says. > “We need very few links to rank pages.” > > — Gary Illyes, Analyst, Google Search. [SERP Conf 2024](https://www.youtube.com/watch?v=DJVaGCZLmt8) - **0.255**: Correlation between the number of referring domains and ranking, the strongest link measure in a study of 1 million keywords. Real, and modest. (Ahrefs, January 2025) - **2,997**: Pages, out of about 20 million with no links from other sites, that get more than 1,000 search visits a month. Almost all sit on strong sites, on easy queries. (Ahrefs, December 2023) - **94%**: Google AI Overviews that cite at least one page from the top 20 results. Ranking, which links help, still feeds the AI answers. (seoClarity, October 2025) ## What each rel value really says. The `rel` attribute describes your relation to the page you link to. Google reads four answers. You can combine them with spaces (`rel="ugc nofollow"`), and since September 2019 Google treats all three qualifiers as hints rather than orders: it may still use such a link to discover a page. Its documentation today still says these links “will generally not be followed”: assume they pass nothing. | rel | | What it says | What Google does | When to use it | | --- | --- | --- | --- | --- | | `(none)` | A normal link | “I vouch for this page.” What people call a “dofollow” link: there is no such attribute. | Follows it, counts it toward PageRank and reads its anchor text as a label for the destination. | Your own pages, and every source you cite and stand by. | | `nofollow` | No endorsement | “I don’t vouch for this page.” Born in January 2005, with Yahoo and MSN, against blog comment spam. | A hint since 2019 for ranking, since March 2020 for crawling. Generally not followed, not credited. | Links you can’t vouch for and that are neither paid nor user-posted. Never your own pages. | | `sponsored` | Paid or gifted | “This link exists because of money, a gift or a deal.” Added in September 2019; `nofollow` remains acceptable. | The same treatment as nofollow. The only case where the wrong attribute is a problem: an unmarked paid link. | Ads, paid placements, affiliate links, links in exchange for a product or a discount. | | `ugc` | Posted by users | “A visitor put this link here, not us.” Added in September 2019. | The same treatment as nofollow. Google suggests lifting it for members with a record of good contributions. | Comments, forum posts, reviews, profiles. | ### noopener and noreferrer are not SEO `noopener` stops the page you open from controlling yours through `window.opener`. Since Safari 12.1 (2019), Firefox 79 (2020) and Chrome 88 (2021), browsers apply it by themselves to every `target="_blank"` link. `noreferrer` goes further: it also hides where the visitor came from, so the site you link to sees a “direct” visit. Neither changes how Google counts a link. When Google made nofollow a hint, Gary Illyes said it was catching up: the other big search engines already treated it that way. Note too that `sponsored` and `ugc` aren’t in the HTML standard: they are search-engine conventions, and almost nobody uses them, with each on 0.5% of pages against 32.3% for `nofollow` (HTTP Archive, 2025). > “I would be very surprised if there was any big social media site out there with dofollow links that we haven’t already marked as nofollow internally for ourselves.” > > — Gary Illyes, Google Search, on links from social platforms. [Search Off the Record, episode 23](https://search-off-the-record.libsyn.com/website/seo-starter-guide-whats-all-the-drama) ## Internal links: the paths you control. Internal links are the one lever you fully control. They tell Google which pages exist (a page no other page links to, an orphan, may never be found), how important each is, and what it is about through the words of the anchor. Google’s own advice is short: every page you care about needs a link from at least one other page of your site, and there is “no magical ideal number of links”. Two technical rules matter more than any strategy. Google only follows real `` elements: a `` with a click handler, a `javascript:` address or a router call without `href` is invisible. And `nofollow` on your own pages saves nothing: since about 2008, the share of importance given to a nofollowed link simply disappears, which is why Matt Cutts told site owners in 2009 never to use it inside their site. In 2020, 35.3% of the top 110,000 sites still did. When one page links twice to the same address, Google may keep only the first anchor (tests by Zyppy, 2023): a menu link earlier in the code can win over the descriptive one in your text. > “In general, whenever you’re linking around within your site: don’t use nofollow.” > > — Matt Cutts, Then head of web spam, Google. [PageRank sculpting, June 2009](https://www.mattcutts.com/blog/pagerank-sculpting/) - **+7%**: Organic traffic after adding links to nearby location pages, in a controlled split test on about 8,000 pages. (SearchPilot) - **+11%**: From showing four related articles instead of two at the end of each page, at 90% confidence. (SearchPilot) - **≈ 5×**: Traffic for pages with at least one exact-match internal anchor, over 23 million internal links on 1,800 sites (a correlation). (Zyppy, 2022) ## Outbound links: cite, and say what you vouch for. Linking out doesn’t cost you rankings, and Google’s documentation says citing your sources can help establish trust. John Mueller has also said outbound links are not a ranking factor as such. The only experiment usually quoted for the opposite, Reboot Online’s, used ten new domains and invented keywords: suggestive, too small to settle anything. The real decision is the `rel`. Google asks for `nofollow` only “when you don’t trust the source, and not for every external link”. Blanket nofollow, the policy many publishers adopted (Forbes and Inc. switched every external link in 2017), is what made Google turn nofollow into a hint: it was losing information. Nicholas Carr called Wikipedia’s 2007 switch a black hole that soaks up links and never gives any back. ### Leave the link normal - A source you read and stand by. - A tool, study or person you recommend. - Your own other sites, if they are genuinely related. ### Qualify the link - `sponsored`: anything paid, gifted, discounted or affiliate. - `ugc`: anything a visitor posted. - `nofollow`: anything you can’t vouch for. - `noreferrer`: only if the destination mustn’t know you sent the visit. ### Paid links need two labels: one for Google, one for people `rel="sponsored"` satisfies Google; it doesn’t satisfy the law. In the United States, the FTC’s Endorsement Guides ask for a disclosure that is hard to miss, next to the link: “paid link” works, a hyperlinked disclosure or a note on the home page doesn’t. In France, the June 2023 law on influencers, amended in November 2024, requires a clear, legible mention of commercial intent, such as « Publicité » or « Collaboration commerciale », and the Consumer Code treats paid editorial content and paid rankings as misleading practices when undisclosed. Online, penalties reach five years and €750,000. ## Backlinks: earned, not bought. A backlink is worth something because you didn’t place it. That is also why people try to manufacture them, and why Google’s spam policy defines link spam as links created “primarily for the purpose of manipulating search rankings”. Since Penguin 4.0 in 2016, Google mostly ignores such links instead of punishing the site; links bought from a network are nullified as soon as they are seen, without notice. The buyer can’t tell what they paid for. What earns links is something worth citing. Studies by Moz and BuzzSumo found that original research and opinion earn the most, and that most published posts, around three quarters, earn none at all. A nofollowed mention on a big site can still bring followed links: when other journalists pick up the story, some link with no attribute. ### What Google lists as link spam - Buying or selling links that pass ranking credit, including a free product in exchange for a link. - Excessive link exchanges and partner pages. - Optimised anchors in guest posts, articles and press releases. - Keyword-rich, hidden or low-quality links in widgets spread across sites. - Links required by terms of service, with no way to qualify them. - Widely distributed links in the footers or templates of many sites. - Low-quality directory, bookmark and forum signature links. ### The disavow tool is for emergencies Google says most sites will never need it: it is for a considerable number of spammy links that caused, or will likely cause, a manual action. John Mueller called the idea of “toxic links” something made up by SEO tools. One practitioner disavowed his entire link profile twice: in 2013 the site sank; in 2024, nothing happened in seven weeks. ### And AI search? AI answers run on search: they send “a whole bunch of searches for you”, in Danny Sullivan’s words, and cite pages from the results, so whatever helps a page rank helps it get cited. In Ahrefs’ study of 75,000 brands, mentions correlate most with visibility in AI Overviews (0.664), raw backlinks much less (0.218), but links that name the brand come second (0.527). Google warns that seeking inauthentic mentions isn’t as helpful as it seems, and since May 2026 its spam policies explicitly cover manipulating generative AI answers. Agents that act on a page rather than cite it are another story, told in our [WebMCP guide](https://contenttosocial.com/guides/webmcp). ### When it went wrong - **2011, J.C. Penney.** The New York Times found 2,015 pages linking with “dresses” and similar anchors. Google acted by hand; Penney fired its SEO firm. Outsourcing the work doesn’t outsource the risk. - **2011, Overstock.** Discounts for students and staff in exchange for links from university sites. About two months penalised. Discounts count as payment. - **2012, Google Chrome.** An agency paid bloggers for posts with a followed link to Chrome’s download page. Google demoted its own page for 60 days. - **2013, Interflora.** About 150 advertorials in UK regional newspapers. Interflora vanished from Google UK, and the newspapers lost PageRank too: selling gets punished as well. > “Disavowing random links that look weird or that some tool has flagged, is not a good use of your time. It changes nothing.” > > — John Mueller, Search Advocate, Google. [SEO office hours, November 2022](https://www.youtube.com/watch?v=TepFVYrBVg0) ## From a vote to a hint. Twenty-eight years of the same idea, and of people gaming it. - **1998, PageRank.** Larry Page files the patent on January 9. The paper presenting Google, in April, counts each link as a vote and credits its anchor text to the target page. - **Jan 18, 2005, nofollow is born.** Google, with Yahoo and MSN, introduces `rel="nofollow"` to take the reward out of blog comment spam. - **Jan 2007, Wikipedia closes the tap.** English Wikipedia makes every external link in its articles nofollow. - **Jun 2009, Sculpting ends.** Matt Cutts reveals that, since about a year earlier, nofollowed links no longer pass their share of PageRank to the others: nofollowing internal links no longer “sculpts” anything. - **2011–2013, Public penalties.** J.C. Penney, Overstock, Interflora and Rap Genius lose their rankings over bought or traded links; Google demotes its own Chrome page in 2012. - **2012, Penguin and disavow.** Penguin (April 24) targets link spam, affecting about 3.1% of English queries. The disavow tool follows on October 16. - **2016, Devalue, don’t demote.** The public toolbar PageRank score is retired. Penguin 4.0 (September 23) runs in real time and discounts bad links rather than demoting whole sites. - **Sep 10, 2019, sponsored, ugc, and hints.** Google adds `sponsored` and `ugc` and turns all three values into hints for ranking, then for crawling from March 1, 2020. - **Dec 2022, SpamBrain.** The last update dedicated to links uses SpamBrain to spot both sites buying links and sites selling them. - **2023–2024, Links matter less.** Gary Illyes: links aren’t top three (2023), Google needs very few (2024). The spam policy drops “an important factor”. Leaked documentation shows link fields such as `pagerankNs` and anchor spam scores, without their weights. - **2025–2026, Confirmed, and extended to AI.** The US antitrust record confirms PageRank and anchors still feed ranking. In May 2026, spam policies cover generative AI answers; from August 30, site reputation abuse no longer brings manual actions inside the EEA. ## What most articles get wrong. - ~~“Add rel="dofollow" to your links.”~~ The value doesn’t exist. A link without `rel` is followed. - ~~“Nofollow keeps your PageRank at home.”~~ Since about 2008 the nofollowed share simply evaporates. - ~~“Nofollow keeps a page out of Google.”~~ Only `noindex` does, on a page Google may crawl. - ~~“Nofollow is wrong for paid links.”~~ Still acceptable; `sponsored` is only preferred. - ~~“noopener and noreferrer help SEO.”~~ Security and privacy only; `noreferrer` hides you from the destination’s analytics. - ~~“sponsored and ugc are HTML standards.”~~ They are search-engine conventions, on 0.5% of pages. - ~~“Disavow toxic links every quarter.”~~ Only for a manual action, or a real risk of one. - ~~“rel="sponsored" is my legal disclosure.”~~ People need a visible label next to the link. - ~~“Domain Authority is Google’s score.”~~ It is a tool’s estimate. Google says it has no domain score. - ~~“301 redirects lose PageRank.”~~ Google says no PageRank is lost, with a 301 or a 302. - ~~“A sitemap replaces links.”~~ It only says a page exists; a link also says who vouches for it. - ~~“Links are dead” or “links are top three”.~~ Both wrong: fewer links count, and they still do. ## How this site links. Contenttosocial publishes three kinds of pages that link a lot: a ranking of SEO agencies, a catalogue of social post templates and these guides. Every link on them carries a decision. Here are ours, straight from the code. ### Seven links, seven decisions - **Their Google reviews** (`nofollow noopener`): A convenience for the reader, not a recommendation. - **“Ask ChatGPT, Claude, Perplexity, Gemini” buttons** (`nofollow noopener`): Each opens an agent with a prompt in its address: endless one-off URLs nobody should crawl or credit. - **The sources of these guides** (`(none)`): Editorial citations we read and stand by: Google’s documentation, papers, talks. Exactly what a normal link is for. - **Menus, footer, breadcrumbs** (`(none)`): The footer lists every templates page, the header leads to every guide, and every page carries a breadcrumb with its structured data. Nothing that matters sits more than three clicks from home. - **Pages waiting for launch** (`noindex, follow`): Kept out of Google’s index with a robots tag, not with nofollow, while their links are still followed so no page becomes an orphan. - **The badge agencies may add to their site** (`one visible link`): Optional and never a condition of being listed; one visible link back to the page the award refers to, nothing hidden. - **Every navigation link** (``): Next.js `` renders a real anchor with its address, so crawlers follow the same paths as people. ### What it taught us 1. **Decide per destination, not per site.** The same site can deserve a normal link on one page and a nofollow on another: the relation is about the link and its context, not the domain. 2. **Hide pages with robots, not with links.** `noindex, follow` keeps a page out of results without cutting the paths through it. 3. **Leave referrers alone.** Dropping `noreferrer` costs nothing and lets the sites you send visits to see them. They may link back. 4. **A link in an iframe isn’t a link on the host page.** Google credits it to the iframe’s own page. Anything you embed elsewhere needs its link in the host’s HTML. ### What we don’t know yet How many backlinks the ranking will earn, and which ones Google will count. We will watch Search Console knowing its links report is a sample: tables stop at 1,000 rows, and it doesn’t say which links are nofollow. See the choices live: [SEO agency ranking](https://contenttosocial.com/seo-agencies), [Free templates](https://contenttosocial.com/templates), [All guides](https://contenttosocial.com/guides). ## Twelve rules that hold up. From Google’s documentation, the experiments and our own code. 1. **No orphans.** Link every page you care about from at least one other page of your site. 2. **Real links only.** `` with an address. No click handlers, `javascript:` or router calls without `href`. 3. **Say where it goes.** Descriptive, concise anchors. No “click here”, no stuffing, no chains of adjacent links. 4. **Never nofollow yourself.** To keep a page out of Google, use `noindex`; to keep crawlers away, robots.txt. 5. **Cite with normal links.** Nofollow only what you can’t vouch for, not every external link. 6. **Label every paid link twice.** `sponsored` (or `nofollow`) for Google, and a visible “paid link” or « Publicité » for people. 7. **Qualify user links.** `ugc` on comments and forums; consider lifting it for trusted contributors. 8. **Never buy, swap or require.** No paid followed links, no link exchanges at scale, no links demanded by terms or badges. 9. **Keep widget links honest.** One visible link, named after a brand or a page, never keyword-stuffed, never mandatory. 10. **Don’t hide your referrals.** `target="_blank"` already implies `noopener`; skip `noreferrer` unless you need it. 11. **Fix what rots.** Two links in three published since 2013 are gone. Check yours. 12. **Leave disavow alone.** Unless you have a manual action, or real reason to expect one. ## Frequently asked questions ### What does a nofollow link mean? A link with `rel="nofollow"`: its author tells search engines they don’t vouch for the page it points to. Google treats it as a hint and generally doesn’t follow it or credit it toward ranking. ### What is a dofollow link? A normal link, with no `rel` qualifier. “Dofollow” isn’t an attribute; `rel="dofollow"` does nothing. Search engines follow and credit links by default. ### Do nofollow links help SEO? Not directly, by default: they generally pass no ranking credit. They can still bring visitors, get a page discovered, build a brand, and lead to followed links when others pick up the story. ### How can I tell if a link is follow or nofollow? Look at the link’s HTML (right-click, Inspect): if its `rel` contains `nofollow`, `sponsored` or `ugc`, it is qualified; otherwise it is a normal, followed link. Search Console’s links report doesn’t tell you. ### What is the difference between nofollow, sponsored and ugc? The reason. `sponsored` marks paid or gifted links, `ugc` links posted by users, `nofollow` anything else you don’t vouch for. Google treats the three the same way; only an unmarked paid link is a problem. ### Should internal links be nofollow? No. It saves nothing, since the nofollowed share of importance just disappears, and it can hide pages from Google. Use `noindex` or robots.txt for pages you want out. ### Are backlinks good or bad? Earned ones help, especially from relevant, trusted sites. Bought or manufactured ones are mostly ignored since 2016, and can bring a manual action. You don’t need many: Google says it needs very few links to rank a page. ### Is rel="sponsored" enough to disclose a paid link? For Google, yes (or `nofollow`). For the law, no: the FTC in the US and French law require a visible mention for readers, such as “paid link” or « Publicité », next to the link. ### Do noopener and noreferrer affect SEO? No. `noopener` is security, which browsers now apply to every `target="_blank"` link by themselves; `noreferrer` hides the origin of the visit from the destination’s analytics. ## Where this comes from Quotes are verbatim from the documents and recordings below, trimmed for length; quotes from conference talks come from automatic captions. Figures name who measured them, and correlations are labelled as such. - [Qualify your outbound links to Google](https://developers.google.com/search/docs/crawling-indexing/qualify-outbound-links) — Google Search Central, 2025-12-10 - [Link best practices for Google](https://developers.google.com/search/docs/crawling-indexing/links-crawlable) — Google Search Central, 2025-12-10 - [Spam policies: link spam](https://developers.google.com/search/docs/essentials/spam-policies#link-spam) — Google Search Central, 2026-08-28 - [Evolving nofollow: new ways to identify the nature of links](https://developers.google.com/search/blog/2019/09/evolving-nofollow-new-ways-to-identify) — Google Search Central blog, 2019-09-10 - [Preventing comment spam (the birth of nofollow)](https://googleblog.blogspot.com/2005/01/preventing-comment-spam.html) — Google blog, 2005-01-18 - [Penguin is now part of our core algorithm](https://developers.google.com/search/blog/2016/09/penguin-is-now-part-of-our-core) — Google Search Central blog, 2016-09-23 - [Disavow links to your site](https://support.google.com/webmasters/answer/2648487) — Google Search Console Help, 2026 - [Updating the site reputation policy in the EEA](https://developers.google.com/search/blog/2026/08/update-site-reputation-policy) — Google Search Central blog, 2026-08 - [Link types](https://html.spec.whatwg.org/multipage/links.html) — WHATWG HTML Standard, 2026 - [rel=noopener](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/rel/noopener) — MDN Web Docs, 2026 - [Web Almanac 2025: SEO](https://almanac.httparchive.org/en/2025/seo) — HTTP Archive, 2025 - [US v. Google: remedies opinion](https://storage.courtlistener.com/recap/gov.uscourts.dcd.223205/gov.uscourts.dcd.223205.1436.0.pdf) — US District Court for D.C., 2025 - [PageRank sculpting](https://www.mattcutts.com/blog/pagerank-sculpting/) — Matt Cutts, 2009-06-15 - [The decay and fall of guest blogging](https://www.mattcutts.com/blog/guest-blogging/) — Matt Cutts, 2014-01-20 - [Nofollow as a hint, sponsored and ugc](https://www.youtube.com/watch?v=78GFh553Vbc) — Google Search News, John Mueller, 2019-09 - [Search Off the Record, episode 1: nofollow](https://www.youtube.com/watch?v=3Ofp48EJxrU) — Google, with Gary Illyes, John Mueller, Martin Splitt, 2020 - [Search Off the Record, episode 8: rendering, signals and PageRank](https://search-off-the-record.libsyn.com/website/what-do-rendering-signal-collection-and-seos-devs-have-to-do-with-each-other) — Google, with Gary Illyes and Martin Splitt, 2020-10-22 - [Search Off the Record, episode 20: tackling web spam](https://search-off-the-record.libsyn.com/website/tackling-web-spam-search-quality-and-more) — Google, with Duy Nguyen, 2021-07-06 - [Search Off the Record, episode 23: the SEO Starter Guide](https://search-off-the-record.libsyn.com/website/seo-starter-guide-whats-all-the-drama) — Google, with Gary Illyes and John Mueller, 2021-09-09 - [Search Off the Record, episode 51: redirects](https://search-off-the-record.libsyn.com/website/lets-talk-redirects) — Google, with Martin Splitt and John Mueller, 2022-11-17 - [Search Off the Record, episode 102: SEO, AIO and GEO](https://search-off-the-record.libsyn.com/website/seo-aio-geo-your-site-third-party-support-to-optimize-for-llms) — Google, with John Mueller and Danny Sullivan, 2026-01-08 - [Gary Illyes Q&A](https://www.youtube.com/watch?v=DJVaGCZLmt8) — SERP Conf 2024, 2024 - [SEO office hours (disavow)](https://www.youtube.com/watch?v=TepFVYrBVg0) — Google Search Central, 2022-11 - [PageRank sculpting at SMX Advanced](https://www.youtube.com/watch?v=cl0MBeKDXLY) — Matt Cutts with Danny Sullivan, 2009-06 - [Penguin 4.0 keynote](https://www.youtube.com/watch?v=jGPkN4nKDyk) — Gary Illyes, PubCon Las Vegas, 2016-10 - [Nofollow, ugc and sponsored: the data](https://ahrefs.com/blog/nofollow-ugc-sponsored/) — Ahrefs, 2020 - [Search traffic study: pages without backlinks](https://ahrefs.com/blog/search-traffic-study/) — Ahrefs, 2023-12 - [Link rot study](https://ahrefs.com/blog/link-rot-study/) — Ahrefs, 2024-02 - [AI Overview brand visibility correlations](https://ahrefs.com/blog/ai-overview-brand-correlation/) — Ahrefs, 2025-05 - [AI Overviews and rankings overlap](https://www.seoclarity.net/research/aio-rankings-overlap) — seoClarity, 2025-10 - [When online content disappears](https://www.pewresearch.org/data-labs/2024/05/17/when-online-content-disappears/) — Pew Research Center, 2024-05-17 - [Internal links: a study of 23 million links](https://zyppy.com/seo/internal-links/seo-study/) — Zyppy, 2022 - [Selective link priority](https://zyppy.com/seo/selective-link-priority/) — Zyppy, 2023 - [Disavowing every link, again](https://zyppy.com/seo/google-disavow-experiment/) — Zyppy, 2024 - [Split test: nearby location links](https://www.searchpilot.com/resources/case-studies/seo-split-test-lessons-nearby-location-links) — SearchPilot, 2021 - [Long-term outgoing link experiment](https://www.rebootonline.com/blog/long-term-outgoing-link-experiment/) — Reboot Online, 2016 - [Google penalises its own Chrome page](https://techcrunch.com/2012/01/04/google-chrome-pagerank/) — TechCrunch, 2012-01-04 - [Content, shares and links: 1 million articles](https://moz.com/blog/content-shares-and-links-insights-from-analyzing-1-million-articles) — Moz and BuzzSumo, 2015 - [FTC’s Endorsement Guides](https://www.ftc.gov/business-guidance/resources/ftcs-endorsement-guides) — US Federal Trade Commission, 2023 - [Loi n° 2023-451 (influence commerciale), article 5-2](https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000050457275) — Légifrance, 2024-11 --- URL: https://contenttosocial.com/docs/mcp Updated: 2026-10-02 # Connect your AI agent with MCP Add Contenttosocial to an AI agent that supports MCP, choose what it can access and check that it works. Your AI agent can work in Contenttosocial from a conversation: find and copy templates, preview your copy, prepare drafts, submit posts for client approval, schedule and publish them, and claim your agency’s profile in the SEO agency ranking and keep it up to date. MCP (Model Context Protocol) is the open standard that connects an agent to a service. You write no code and paste no API key: you sign in once, on a Contenttosocial page, and choose what your agent can access. ## The connector address ```text Connector address https://contenttosocial.com/mcp ``` You can also copy it in Contenttosocial, under **Connector URL**: open the account menu from your name in the sidebar, then **MCP**. For Claude and ChatGPT, follow the step-by-step guide: [Connect Claude](https://contenttosocial.com/docs/claude) or [Connect ChatGPT](https://contenttosocial.com/docs/chatgpt). Other agents and tools can use the same address if they can add a remote MCP server with OAuth sign-in. If yours asks for a transport type, choose HTTP (Streamable HTTP), not SSE. ## 1. Add the connector In your agent’s connector settings, add a custom MCP connector named **Contenttosocial** with the address above. - If it asks how to sign in, choose OAuth. - If it asks how to register, choose automatic registration (dynamic client registration). If it asks for a client ID and secret, leave them empty: your agent registers itself. - Leave any API key or request header field empty: none is needed. ## 2. Sign in and approve Connecting opens a Contenttosocial page. Sign in there, or create your account. Never type your password in the conversation. The page, **Connect your AI agent to Contenttosocial**, then shows: - the workspaces you can include, with your role in each. Only workspaces with an active paid plan are listed; - what your agent will be able to do. With a plan, in the workspaces you choose: create, edit, schedule, publish and delete posts following your role, and render visuals from your templates. Always, with or without a plan: claim and manage your agency profile in the ranking. Select **Allow access**: you then return to your agent. Your password is never shared with it. In each workspace, your agent acts with your current role: Contributors prepare drafts; Managers, Admins and the Owner can also schedule and publish. Client approval needs the Freelance & Agencies plan. See [Workspaces and permissions](https://contenttosocial.com/docs/assistant-access). ### Without a paid plan You can connect without a plan or a workspace. The page then says **You can connect now, with or without a plan.** Your agent can still claim your agency’s profile in the ranking and keep it up to date, with the screenshots you upload for it. Posts, templates and the calendar need a workspace with a paid plan: until then, your agent’s requests for them are refused with a link to the plans. - If you own a workspace, select **Choose a paid plan** to include it now. You come back to this page after checkout. - Otherwise, connect now. Once you have a workspace with a paid plan, add it with **Manage access**, without reconnecting. For a workspace you do not own, ask its Owner to activate a paid plan. ## 3. Check that it works In a conversation where Contenttosocial is enabled, send this message: ```text Message to send List the Contenttosocial workspaces you can use, with my role in each. Do not create, schedule or publish anything. ``` - Your agent lists your workspaces: the connection works. The Manager role may appear as “editor”. - Your agent says no workspace with a plan is authorized: the connection works, without a workspace. See [Without a paid plan](#docs-without-a-paid-plan). - Your agent cannot find Contenttosocial, or reports a sign-in or connection error: see [Troubleshooting](https://contenttosocial.com/docs/assistant-troubleshooting). ## Change access later In Contenttosocial, open the account menu from your name in the sidebar, then **MCP**. Under **Your MCP connections**: - **Manage access** adds or removes workspaces on a connection, without reconnecting; - **Disconnect** stops the connection in every workspace. Posts already scheduled stay in the calendar. ## Next steps - [What your agent can do](https://contenttosocial.com/docs/assistant-actions): every action, with example requests. - [Publishing with your agent](https://contenttosocial.com/docs/assistant-publishing): confirmation, timing, network rules and results. - [Workspaces and permissions](https://contenttosocial.com/docs/assistant-access): roles, plans, adding workspaces and disconnecting. - [Troubleshooting](https://contenttosocial.com/docs/assistant-troubleshooting): connection, permission and publication problems. --- URL: https://contenttosocial.com/docs/claude Updated: 2026-10-02 # Connect Claude Add Contenttosocial as a custom connector in Claude, authorize your workspaces, check the connection and ask for a first preview. Connect Claude to your Contenttosocial workspaces and run your social media from a conversation. Claude creates and edits your templates, turns your copy into posts for Instagram, LinkedIn, Facebook, Pinterest and X, previews them, submits them to your clients for approval, schedules and publishes them, checks what went out and retries what failed. It can also claim your agency’s profile in the SEO agency ranking and keep it up to date. [What your agent can do](https://contenttosocial.com/docs/assistant-actions) lists every action. Claude connects through MCP, as a custom connector: you sign in to Contenttosocial once and choose what Claude can access. You do not write code or paste an API key. ## Before you connect - **Claude**: custom connectors work on every Claude plan, Free included, which allows one custom connector. Add the connector on claude.ai or in Claude Desktop. Once it is connected, it is also available in the Claude apps for iOS and Android. - **Contenttosocial**: posts, templates and publishing need a workspace with an active paid plan. Without one, you can still connect: Claude then works on your agency profile only, and you can add a workspace to the connection later without reconnecting. - **Social accounts**: connect the accounts you want to publish to in **Social accounts**, in the app. Claude cannot connect them for you. Claude acts with your current role in each workspace: Contributors prepare drafts, while Managers, Admins and the Owner can also schedule and publish. Submitting posts to your clients needs the Freelance & Agencies plan. See [Workspaces and permissions](https://contenttosocial.com/docs/assistant-access). ## 1. Add Contenttosocial in Claude In Claude, open [**Customize → Connectors**](https://claude.ai/customize/connectors), click **+**, then **Add custom connector**. Name it **Contenttosocial**, paste this server URL and click **Continue**: ```text Connector address https://contenttosocial.com/mcp ``` On the second step, Claude shows the settings it detected. Keep the two options it marks as detected: **Sign in now** under **Authentication**, and **Register automatically** under **OAuth client**. Do not choose **Use Claude’s published identity**, even though Claude recommends it: Contenttosocial does not support it. If a **Request headers** section appears, leave it empty: no API key is needed. Click **Add**, then **Connect**. If your dialog shows the name, the URL and **Advanced settings** on a single screen, leave the advanced settings empty and click **Add**. Claude does not let you change these settings once the connector is added: to change them, remove the connector in **Customize → Connectors** and add it again. On a Team or Enterprise plan, an Owner or Primary Owner adds the connector once for the whole organization, in [**Organization settings → Connectors**](https://claude.ai/admin-settings/connectors): **Add**, then **Custom**, then **Web**, with the same settings. On Enterprise, a member whose custom role includes managing the organization’s libraries can do it too. Each member then finds Contenttosocial in **Customize → Connectors**, with the **Custom** label, clicks **Connect** and signs in with their own Contenttosocial account. If your menus differ, follow [Claude’s official guide](https://support.claude.com/en/articles/11175166-get-started-with-custom-connectors-using-remote-mcp). ## 2. Authorize your workspaces **Connect** opens a Contenttosocial page in your browser. Sign in there, or create an account, if it asks you to. Never type your password in the conversation. The page, titled **Connect your AI agent to Contenttosocial**, lists what Claude will be able to do. Select the workspaces Claude can use (your role is shown next to each one), then click **Allow access**. You then return to Claude. If none of your workspaces has a paid plan, you can still click **Allow access**. Claude then works on your agency profile, and you add a workspace later with **Manage access** (account menu, then **MCP**), without reconnecting. Back in Claude, turn Contenttosocial on for the conversation: click **+** at the bottom left of the message box, open **Connectors** and switch on **Contenttosocial**. Claude may ask for your approval before it uses a tool: read what it is about to do, and choose **Allow always** only for tools you are happy to let run unsupervised. One connection can cover several workspaces: name the one you mean in your requests. [Workspaces and permissions](https://contenttosocial.com/docs/assistant-access) explains how Claude chooses a workspace and how to add or remove workspaces later. ## 3. Check that the connection works Send this message: ```text Message to send Use Contenttosocial to list the workspaces you can use, then my templates and connected social accounts. Do not create, schedule or publish anything. ``` Claude should name your workspaces with your role in each, then the templates and accounts it finds there. An empty list may simply mean that nothing has been added to that workspace yet. If the connection covers no paid workspace, Claude says so: that is expected. Claude should never invent names or IDs. If you get an error, see [Troubleshooting](https://contenttosocial.com/docs/assistant-troubleshooting). ## 4. Ask for a preview Replace “Weekly tip” with the name of one of your templates: ```text Message to send Use my “Weekly tip” template to preview this headline: “One small habit. A calmer workday.” First check the template’s fields and which ones are required. Show me the preview. Do not schedule or publish it. ``` Claude reads the template’s fields, fills them in and shows you the images. A preview publishes nothing, and its links expire after one hour. Each previewed slide counts toward your plan’s image allowance. Before you schedule, read [Publishing with your agent](https://contenttosocial.com/docs/assistant-publishing). ## Next steps - [What your agent can do](https://contenttosocial.com/docs/assistant-actions): every action, with example requests. - [Publishing with your agent](https://contenttosocial.com/docs/assistant-publishing): confirmation, timing, network rules and results. - [Workspaces and permissions](https://contenttosocial.com/docs/assistant-access): roles, adding workspaces and disconnecting. - [Troubleshooting](https://contenttosocial.com/docs/assistant-troubleshooting): connection, permission and publication problems. --- URL: https://contenttosocial.com/docs/chatgpt Updated: 2026-10-02 # Connect ChatGPT Add Contenttosocial to ChatGPT in developer mode, authorize your workspaces, check the connection and ask for a first preview. Connect ChatGPT to your Contenttosocial workspaces and run your social media from a conversation. ChatGPT creates and edits your templates, turns your copy into posts for Instagram, LinkedIn, Facebook, Pinterest and X, previews them, submits them to your clients for approval, schedules and publishes them, checks what went out and retries what failed. It can also claim your agency’s profile in the SEO agency ranking and keep it up to date. [What your agent can do](https://contenttosocial.com/docs/assistant-actions) lists every action. Contenttosocial is not in ChatGPT’s directory: you add it yourself as a custom MCP app, in developer mode. You sign in to Contenttosocial once and choose what ChatGPT can access. You do not write code or paste an API key. ## Before you connect - **ChatGPT**: developer mode works on the web, not in the mobile apps, with a Plus, Pro, Business, Enterprise or Edu account. In a Business workspace, only admins and owners can use it; in Enterprise and Edu, an admin must give you access. On some plans, ChatGPT can only read: OpenAI’s Help Center currently limits Pro accounts to read actions, and describes full support, including actions that change data, as a beta for Business, Enterprise and Edu. - **Contenttosocial**: posts, templates and publishing need a workspace with an active paid plan. Without one, you can still connect: ChatGPT then works on your agency profile only, and you can add a workspace to the connection later without reconnecting. - **Social accounts**: connect the accounts you want to publish to in **Social accounts**, in the app. ChatGPT cannot connect them for you. ChatGPT acts with your current role in each workspace: Contributors prepare drafts, while Managers, Admins and the Owner can also schedule and publish. Submitting posts to your clients needs the Freelance & Agencies plan. See [Workspaces and permissions](https://contenttosocial.com/docs/assistant-access). ## 1. Add Contenttosocial in ChatGPT In ChatGPT on the web, open **Settings → Security and login** and turn on **Developer mode**. Then go to [ChatGPT Plugins](https://chatgpt.com/plugins), select the **+** button and create a developer-mode app. Name it **Contenttosocial**, add a short description if ChatGPT asks for one, and under **Connection**, paste this MCP server URL: ```text Connector address https://contenttosocial.com/mcp ``` For authentication, choose **OAuth** and leave the client ID and secret empty. If ChatGPT asks for a registration method, choose dynamic client registration (DCR): ChatGPT then registers itself automatically. Create the app. If your menus differ, follow [OpenAI’s developer mode guide](https://developers.openai.com/api/docs/guides/developer-mode). In a Business, Enterprise or Edu workspace, the menus differ: follow [OpenAI’s Help Center article](https://help.openai.com/en/articles/12584461-developer-mode-and-mcp-apps-in-chatgpt). An admin can also publish the app for the whole workspace; each member then connects it with their own Contenttosocial account. ## 2. Authorize your workspaces ChatGPT then asks you to sign in: a Contenttosocial page opens in your browser. Sign in there, or create an account. Never type your password in the conversation. The page, titled **Connect your AI agent to Contenttosocial**, lists what ChatGPT will be able to do. Select the workspaces ChatGPT can use (your role is shown next to each one), then select **Allow access**. You then return to ChatGPT. If none of your workspaces has a paid plan, you can still select **Allow access**. ChatGPT then works on your agency profile. You can add a workspace later without reconnecting: open the account menu from your name in the sidebar, then **MCP**, and choose **Manage access**. Back in ChatGPT, turn Contenttosocial on for the conversation: select **+** in the message box, choose **Developer mode**, then select Contenttosocial. ChatGPT asks you to confirm every action that does more than read, previews included, and shows the details it will send. You can have it remember your choice for a tool until the end of the conversation: do so only for actions you are happy to let run without asking. One connection can cover several workspaces: name the one you mean in your requests. [Workspaces and permissions](https://contenttosocial.com/docs/assistant-access) explains how ChatGPT chooses a workspace and how to add or remove workspaces later. ## 3. Check that the connection works Send this message: ```text Message to send Use Contenttosocial to list the workspaces you can use, then my templates and connected social accounts. Do not create, schedule or publish anything. ``` ChatGPT should name your workspaces with your role in each (the Manager role may appear as “editor”), then the templates and accounts it finds there. An empty list may simply mean that nothing has been added to that workspace yet. If the connection covers no paid workspace, ChatGPT says so: that is expected. ChatGPT should never invent names or IDs. If it cannot find Contenttosocial or reports a sign-in error, see [Troubleshooting](https://contenttosocial.com/docs/assistant-troubleshooting). ## 4. Ask for a preview Replace “Weekly tip” with the name of one of your templates: ```text Message to send Use my “Weekly tip” template to preview this headline: “One small habit. A calmer workday.” First check the template’s fields and which ones are required. Show me the preview. Do not schedule or publish it. ``` A preview creates images, so ChatGPT asks you to confirm it. It then reads the template’s fields, fills them in and shows you the images. A preview publishes nothing, and its links expire after one hour. Each previewed slide counts toward your plan’s image allowance. Before you schedule, read [Publishing with your agent](https://contenttosocial.com/docs/assistant-publishing). ## Keep the connection up to date ChatGPT keeps the list of tools it read from Contenttosocial. If a tool described in [What your agent can do](https://contenttosocial.com/docs/assistant-actions) is missing, open the app from [ChatGPT Plugins](https://chatgpt.com/plugins), select **Refresh**, then start a new conversation. If an admin published the app for your ChatGPT workspace, ask them to update it. ## Next steps - [What your agent can do](https://contenttosocial.com/docs/assistant-actions): every action, with example requests. - [Publishing with your agent](https://contenttosocial.com/docs/assistant-publishing): confirmation, timing, network rules and results. - [Workspaces and permissions](https://contenttosocial.com/docs/assistant-access): roles, adding workspaces and disconnecting. - [Troubleshooting](https://contenttosocial.com/docs/assistant-troubleshooting): connection, permission and publication problems. --- URL: https://contenttosocial.com/docs/assistant-actions Updated: 2026-10-03 # What your agent can do Every tool your AI agent can use in Contenttosocial, what it does, whether it can publish, and who can use it. Once connected, your AI agent (Claude, ChatGPT or another agent that supports MCP) works in Contenttosocial through the actions below, called tools. You don’t need to know their names: ask in plain words and your agent picks the right tool. Agents often show the name of the tool they are using, so this page lists every one. Workspace tools act in one workspace you authorized, with your current role there. They work only in workspaces with an active paid plan; if you are a team member rather than the workspace’s Owner, that plan needs a colleague seat for you. The agency profile tools act for your account instead: they need no plan and no workspace. Your agent writes the copy: Contenttosocial does not write it with AI. For roles and plans, see [Workspaces and permissions](https://contenttosocial.com/docs/assistant-access). For what happens when a post goes out, see [Publishing with your agent](https://contenttosocial.com/docs/assistant-publishing). ## Example requests - “Claim our agency’s profile in the SEO agency ranking.” - “Help my agency move up in the SEO agency ranking.” - “Which workspaces can you use, and what is my role in each?” - “Show me my templates for LinkedIn.” - “Find a carousel for a law firm in the starter templates, copy it and draft this article as a post.” - “Preview this carousel with the Weekly tip template, using these three slides: …” - “Make an image from our Weekly tip template with this headline, and keep it in the image library.” - “Use the ‘Spring offer’ image from the library in a draft for next Tuesday.” - “Save this caption as a draft for Friday on our Facebook page. Don’t schedule it.” - “Is Friday’s post ready to publish? Tell me what to fix.” - “Schedule this post for Tuesday 9:00 on our LinkedIn company page.” - “Move Thursday’s post to next Monday at 10:00.” - “Cancel the schedule of tomorrow’s post so I can change the caption.” - “Submit Friday’s post for client approval.” - “Which posts failed this week, and on which accounts?” When you have several workspaces, name the one you mean. When a network has several accounts, such as a personal LinkedIn profile and a company page, name the account. ## How to read the tables **Effect** says what a tool can do: - **Reads only**: looks at your content and changes nothing. - **Preview only**: creates images for you to check. Nothing is saved to a post or published. - **Changes, never publishes**: saves or sends something in Contenttosocial, but posts nothing on a social network. - **Can publish**: can put a post on a social network, now or at a scheduled time. **Who** says who can use it: - **All roles**: Contributor, Manager, Admin and Owner. **Manager and above**: Manager, Admin and Owner. - **Any account**: any Contenttosocial account, with or without a plan or a workspace. - **Profile owner**: the account that claimed the agency profile. ## Workspaces | Tool | What it does | Effect | Who | | ----------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------- | --------- | | `list_workspaces` | Lists the workspaces with an active paid plan that this connection can use, with your role and each workspace’s timezone. Your agent calls it first to choose where to work. An empty list means none is authorized; the agency profile tools still work. | Reads only | All roles | | `get_workspace` | Shows a workspace’s name, timezone, your role, its plan and its usage: posts this month, connected accounts, image and X allowances. | Reads only | All roles | ## Agency profile Your agent can claim your agency in the SEO agency ranking, then work on its profile with you. These tools act for your account, not in a workspace: they work without a plan or a workspace. ### Claim your profile To claim a listed agency, you need an email address at the agency’s own domain, or access to that domain’s DNS. An agency whose site is on a shared platform cannot be claimed this way: write to us. If your agency is missing, it can add itself when its city is covered; otherwise, your agent sends us a request. | Tool | What it does | Effect | Who | | ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ----------- | | `find_agency` | Finds your agency in the ranking by name, website or city: its cities, the domain a claim code goes to, and whether it is already claimed. Also lists the cities the ranking covers. | Reads only | Any account | | `claim_agency` | Sends a 6-digit code to your email address at the agency’s domain. You give the part before the @; your agent never guesses it. The code is valid for 15 minutes. | Changes, never publishes | Any account | | `confirm_agency_claim` | Checks the code you received and makes the profile yours. An agency you have just added is then listed in its city, and its site, Lighthouse scores and Domain Rating are measured in the same step. | Changes, never publishes | Any account | | `get_agency_dns_record` | Gives the TXT record to add to the domain’s DNS to prove you manage it: when no one has a mailbox at the agency’s domain, and to take back a profile someone else has claimed. | Reads only | Any account | | `verify_agency_dns` | Checks that TXT record and makes the profile yours. A previous owner is told by email, without your name; a workspace the profile was shared with keeps it only if you own or administer that workspace. | Changes, never publishes | Any account | | `find_company` | For an agency missing from a covered city: finds its company in the French company register by legal name or SIREN number, with its head office city, its creation year and whether it is already in the ranking. Only a company whose head office is in a covered city can be added. | Reads only | Any account | | `add_agency` | Adds an agency missing from a covered city, from its company in the register, with the name its clients know it by and its website on its own domain. You then claim it: it is listed once the code is confirmed. | Changes, never publishes | Any account | | `request_listing` | Asks to join the ranking for an agency in a city or country that is not covered yet, or for a freelancer. The request reaches our team by email with your address; it does not list the agency by itself. | Changes, never publishes | Any account | A DNS change can take from a few minutes to an hour to show: your agent checks again once you have added the record. ### Work on your profile These tools act only on profiles your account owns. What you declare counts in your score at once, marked “declared by the agency” on your public page. | Tool | What it does | Effect | Who | | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ------------- | | `get_agency_profile` | Shows your places and ranks (city, region and country, in SEO and GEO), your score out of 100 by family, each criterion’s value and whether we measured it, you declared it or it is missing, your client results, and what would raise your score most. | Reads only | Profile owner | | `declare_agency_value` | Declares a value on one criterion: a figure from your SEO tool with a screenshot of it (estimated organic traffic, AI citations), a page of your site that our crawler missed (prices, team page, llms.txt…), or the year your activity started. | Changes, never publishes | Profile owner | | `withdraw_agency_value` | Withdraws a value you declared: the criterion goes back to our measure, and its screenshot is deleted. | Changes, never publishes | Profile owner | | `add_client_result` | Adds a client’s Google Search Console comparison over 3 or 6 months, with the client’s domain hidden, certified on your honour. Up to three. | Changes, never publishes | Profile owner | | `remove_client_result` | Removes a client result and its screenshot. | Changes, never publishes | Profile owner | | `measure_agency_again` | Measures again after you improved something: your Lighthouse scores, your Domain Rating when it can be measured again, your site, or your offices in the company register. It can also take case study pages we missed, read at our next reading of your site. | Changes, never publishes | Profile owner | | `update_agency_profile` | Changes your public profile’s description (up to 1,200 characters) and specialties. Your specialties also place you in the matching specialty rankings. | Changes, never publishes | Profile owner | | `set_agency_logo` | Sets your public profile’s logo from an image you uploaded with `upload_image` or `attach_image`, cropped square, or removes it. | Changes, never publishes | Profile owner | | `upload_image` | Opens a box in the conversation to add images from your device: screenshots for a declaration or a client result, or a logo. Up to 10 at a time, in JPG, PNG or WebP, 10 MB each. Without a box, your agent gives you a link to an upload page. | Changes, never publishes | Profile owner | | `attach_image` | In ChatGPT, keeps an image you attached to the conversation, for the same uses. | Changes, never publishes | Profile owner | Google and Google Maps positions and AI Overviews cannot be changed, and Lighthouse and Domain Rating are only measured. Contenttosocial asks your agent to confirm each figure with you before declaring it, and to certify a client result only once you have certified it yourself. No company document is ever asked for. ## Templates, brand kit and previews | Tool | What it does | Effect | Who | | -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ----------------- | | `list_templates` | Lists the workspace’s templates, with each one’s format, collection, the networks it suits and a preview. It can show one collection only. | Reads only | All roles | | `get_template` | Opens a template: its full design and version, its slide layouts, the fields to fill with their limits, and a preview image of each layout. | Reads only | All roles | | `list_starter_collections` | Lists the starter collections (Explore in the app): ready-made sets of designs for one industry or use case, in one style, covering every network’s formats. | Reads only | All roles | | `list_starter_templates` | Searches the starter designs by network, format, industry, purpose, layout, style, collection or keywords, with a preview of each slide. Nothing is added to the workspace until it is copied. | Reads only | All roles | | `copy_starter_template` | Copies one starter design into the workspace as a new template, ready to fill: the example brand’s name is replaced by the workspace’s name, and its example website is removed. Asking again makes another copy. | Changes, never publishes | Manager and above | | `copy_starter_collection` | Copies a whole starter collection into the workspace as a new collection, with the same brand replacement. A retried request returns the same copy instead of making a second one. | Changes, never publishes | Manager and above | | `list_fonts` | Searches the Google Fonts families a template’s text can use. | Reads only | All roles | | `render` | Shows preview images of 1 to 10 slides of a template filled with your text. Preview links expire after one hour. Each slide counts toward your plan’s image allowance. | Preview only | All roles | | `create_template` | Creates a template from a complete design: format, text, images, shapes and the fields to fill. Most people design templates in the app instead. | Changes, never publishes | Manager and above | | `update_template` | Replaces a template’s name, design and fields. Posts already created keep the design they were saved with. | Changes, never publishes | Manager and above | | `get_brand_kit` | Reads the brand kit kept in **Templates → My templates → Brand kit**: named colours, fonts, logos and images, texts on tone and rules, and links, each with its note on how to use it. Your agent sees the images. | Reads only | All roles | | `update_brand_kit` | Saves the whole brand kit, its sections and items in order: anything left out is removed. Images are kept by their ID. | Changes, never publishes | Manager and above | | `upload_brand_kit_image` | Opens a box in the conversation to add images to the brand kit from your device, or gives a link to an upload page. Your agent then adds them with `update_brand_kit`; an image not added within the hour may be removed. | Changes, never publishes | Manager and above | | `attach_brand_kit_image` | In ChatGPT, keeps an image you attached to the conversation for the brand kit, to add with `update_brand_kit` within the hour. | Changes, never publishes | Manager and above | ## Image library An image is a template filled in and saved on its own, without captions, accounts or date: the app’s **Images** section, under **Unused**. Using one in a post moves it into the post: it leaves the library and appears under **In posts**, where it belongs to its post. To change it then, change the post. In the app, library images can also be downloaded and duplicated. Viewing and downloading library images does not count toward your plan’s image allowance; previews made with `render` do. | Tool | What it does | Effect | Who | | -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | --------- | | `list_images` | Lists the images in the library, newest first, with each one’s name, format and number of slides. Images used in a post are not listed: they belong to their post. | Reads only | All roles | | `get_image` | Opens a library image: its name, version and design (template, field values and slides). Your agent sees its slides. | Reads only | All roles | | `create_image` | Saves an image in the library from a template filled with your text, without a post. It keeps the template’s design as it is now, even if the template changes later. Asking again makes another image. | Changes, never publishes | All roles | | `update_image` | Replaces a library image’s name, field values and slides. It keeps its saved design while it stays on the same template. | Changes, never publishes | All roles | | `delete_image` | Deletes an image from the library. An image used in a post belongs to that post and cannot be deleted here. | Changes, never publishes | All roles | ## Posts | Tool | What it does | Effect | Who | | ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ----------------------------------------------------------------- | | `create_post` | Creates a post from a template, with its slides, caption and accounts, and publishes it now or schedules it at the time you give, at least 5 minutes ahead. Without a time, it publishes immediately. | Can publish | Manager and above | | `get_post` | Shows one post: its content, status, the result on each account, links to the published posts and any error. | Reads only | All roles | | `list_posts` | Lists posts, drafts included, over a period of up to 62 days (by default the last 30 days and the next 32), optionally by status. | Reads only | All roles | | `retry_post` | Sends a post again to the accounts where it failed, optionally with corrected text or slides, once every account has finished. Accounts where it was published are never posted to twice. | Can publish | Manager and above | | `delete_post` | Deletes a draft, or cancels and deletes a scheduled post before it is sent. A post being sent or already sent cannot be deleted. | Changes, never publishes | Contributors: drafts only. Manager and above: scheduled posts too | ## Drafts and scheduling | Tool | What it does | Effect | Who | | ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | -------------------------------------------------------- | | `create_draft` | Saves your copy as a draft on the date you give, from a template, from a library image or as text only. Nothing is scheduled: the date places it in the calendar. A library image used this way moves into the draft and leaves the library. | Changes, never publishes | All roles | | `update_post` | Replaces a draft’s full content: title, text, template fields, accounts and date. It can also schedule the draft when you ask. A scheduled post must have its schedule cancelled first. | Can publish | Contributors: drafts only. Scheduling: Manager and above | | `check_post` | Lists what still stops a saved post from being published, apart from its date: accounts, captions, formats, X limits and the design itself. An empty list means it is ready. | Reads only | All roles | | `schedule_post` | Schedules a draft at least 5 minutes and at most 12 months ahead, or publishes it now. On a post that is already scheduled, it changes the time. | Can publish | Manager and above | | `move_post` | Changes only the date: the planned date of a draft, or the time of a scheduled post, which then publishes at its new time. A post being sent or already sent cannot move. | Changes, never publishes | Manager and above | | `unschedule_post` | Cancels a schedule before the post is sent. The post becomes a draft again at the same date, and you can edit it. | Changes, never publishes | Manager and above | ## Client approval The tools in this section that change something, and `get_client_permissions`, need the Freelance & Agencies plan. To submit a post, first invite at least one client in **Client portal**. Your clients see a submitted post in their client space right away; your agent never emails them. To notify a client by email, send it from the app. An approval recorded by your agent never schedules or publishes; a client who approves in their space can schedule or publish the post: see [Client approval](https://contenttosocial.com/docs/assistant-publishing#docs-client-approval). | Tool | What it does | Effect | Who | | --------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ----------------- | | `request_post_review` | Submits the current version of one post for client approval, to all your active clients or only those you choose. The post must have nothing left to fix and must not be scheduled. | Changes, never publishes | Manager and above | | `list_review_recipients` | Lists the workspace’s client accesses, so a submission can go to specific clients rather than all of them. | Reads only | Admin and Owner | | `get_client_permissions` | Reads what your clients may change in their client space: the date and time, the captions, the texts on the visual. | Reads only | Manager and above | | `update_client_permissions` | Allows or stops each of these changes on its own, as **Client portal → Permissions** does. Changing the texts on the visual never includes the template’s colours, fonts or images. | Changes, never publishes | Admin and Owner | | `list_reviews` | Lists the approval requests sent to clients, optionally for one batch. | Reads only | All roles | | `get_review` | Shows one approval request: the latest version of each post and how many are approved, waiting, or need changes. | Reads only | All roles | | `list_review_items` | Lists every submitted version of the posts in a request, including replaced versions. | Reads only | All roles | | `list_review_comments` | Reads the comments on a submitted version. | Reads only | All roles | | `comment_review_item` | Adds a comment to the current version. Your clients see it. | Changes, never publishes | Manager and above | | `list_review_decisions` | Lists the approvals and change requests recorded on a version. | Reads only | All roles | | `decide_review_item` | Records your approval or change request on the current version. A post with something left to fix cannot be approved. | Changes, never publishes | Manager and above | | `edit_review_item` | Corrects the text under review: captions, Pinterest or X text. This creates a new version waiting for approval and keeps the design, accounts, Pinterest boards, X format and images. A scheduled post must have its schedule cancelled first; the corrected post goes back to drafts and keeps its date. | Changes, never publishes | Manager and above | ### Older batches Batches group several posts for approval. They remain available, but for new requests, ask your agent to submit each post. | Tool | What it does | Effect | Who | | -------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ----------------- | | `list_batches` | Lists batches. | Reads only | All roles | | `create_batch` | Groups up to 50 posts into a batch. It does not submit or publish them. | Changes, never publishes | Manager and above | | `get_batch` | Shows a batch and its posts. | Reads only | All roles | | `update_batch` | Renames a batch or changes its posts. Versions already submitted stay as they were. | Changes, never publishes | Manager and above | | `submit_batch` | Submits a batch’s posts to every active client, or only to the client accesses you choose (see `list_review_recipients`), replacing earlier submissions of the same posts. | Changes, never publishes | Manager and above | ## Social accounts | Tool | What it does | Effect | Who | | --------------- | ----------------------------------------------------------------------------------------------------------------- | ---------- | --------- | | `list_accounts` | Lists the connected social accounts a post can go to, with each account’s name and whether it needs reconnecting. | Reads only | All roles | Connecting and reconnecting accounts happens in the app, in **Social accounts**, for Admins and the Owner. ## Events Events notify another tool you use, such as an automation service, when a post is submitted for approval, approved, sent back for changes or commented on, when a post is published on every account, and when a social account is connected. Most teams don’t need them. | Tool | What it does | Effect | Who | | ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------ | ---------- | | `get_event_destination` | Shows the web address that receives this workspace’s events, and whether sending is on. | Reads only | Owner only | | `set_event_destination` | Sets or changes that address, or pauses sending. Each change creates a new signing secret, shown once in the conversation: store it safely. Events still waiting for the previous address are cancelled. | Changes, never publishes | Owner only | --- URL: https://contenttosocial.com/docs/assistant-publishing Updated: 2026-10-03 # Publishing with your agent What happens when you ask your agent to publish or schedule: confirmation, timing, network rules, results, failures and client approval. Your agent publishes only when you ask it to, in the workspace you chose, and only if your role allows it: Contributors prepare drafts, while Managers, Admins and the Owner schedule and publish. This page explains what happens next. The tools themselves are listed in [What your agent can do](https://contenttosocial.com/docs/assistant-actions). ## Your agent confirms first Before it schedules or publishes, Contenttosocial asks your agent to confirm three things with you: - the copy; - the accounts, for example your LinkedIn company page rather than your personal profile; - the publication date and time. Read that summary before you say yes. If the workspace or the client is unclear, your agent is asked to check with you rather than guess. Depending on its settings, your agent may also ask your permission each time it uses a tool that changes something. A clear request names everything: ```text Message to send Schedule the “Spring launch” draft for Tuesday at 9:00 Paris time on our LinkedIn company page and our Instagram account. Show me the caption and the accounts before scheduling. ``` ## Draft, scheduled or published now | You ask for | What happens | | ---------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------- | | A draft | The post is saved in the calendar at the date you give; your agent asks for one if you gave none. Nothing is scheduled: the date only places it in the calendar. | | A scheduled post | The post is published automatically at its time, on every account you chose. | | Publish now | Publication starts at once. | > A post your agent creates from a template without a time is published at once. To prepare a post without publishing it, ask for a draft. A scheduled post is handed over for publication as soon as it is scheduled, then goes out at its time. A problem such as an account that needs reconnecting therefore shows up within seconds, not at publication time. After the post’s time, ask your agent for its status. ## Timing - Schedule at least 5 minutes ahead and at most 12 months ahead. Publishing now has no minimum. - Unless you name another timezone, your agent uses the workspace’s timezone, which it sees in the workspace list. Naming one, such as “9:00 New York time” or “9:00 UTC”, applies to that post only: the workspace’s timezone does not change. - A post has one time for all its accounts. To publish at different times, create one post per time. - When the clocks change, a time given without a UTC offset that falls in the skipped hour is refused, and one in the repeated hour is read as its first occurrence. ## What each network needs Contenttosocial checks these rules before a post is scheduled or published, and before it is submitted for approval or approved. Networks can add their own restrictions on your accounts. | Network | Design | Text | | --------- | ---------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Instagram | Required, in a format that suits Instagram. | A caption of up to 2,200 characters. A story has no caption. | | LinkedIn | Optional. One slide is posted as an image; several slides become a document (PDF). | A caption of up to 3,000 characters. | | Facebook | Optional, in a format that suits Facebook. | A caption of up to 2,200 characters. A story has no caption. | | Pinterest | Required: the Pinterest pin format, with one slide. | A title of up to 100 characters, a description of up to 800 (the title when there is none), a secure (https) link and a board: the account’s **Default board** unless the post names another. | | X | Optional: up to four images per post, from a design in a format that suits X. | One post, or a thread of up to 20 posts, none of them empty. The account’s own character limit, such as 280 per post, is checked before scheduling. | Each template has a fixed format, which decides the networks it can go to: | Format | Size (pixels) | Networks | | -------------------------- | ------------- | ---------------------------------- | | Instagram portrait | 1080 × 1350 | Instagram, LinkedIn, Facebook, X | | Square post | 1080 × 1080 | Instagram, LinkedIn, Facebook, X | | Instagram / Facebook story | 1080 × 1920 | Instagram and Facebook, as a story | | LinkedIn landscape | 1200 × 627 | LinkedIn, X | | Facebook landscape | 1200 × 630 | Facebook, X | | Pinterest pin | 1000 × 1500 | Pinterest | | X landscape | 1600 × 900 | LinkedIn, X | - A design has 1 to 10 slides. A story is a single image, published without a caption. - Without a design, a post can go to LinkedIn, Facebook and X. Such a text-only post starts as a draft, which your agent then schedules or publishes. - On X, a post with a design carries its slides as images, four per post in order. Your agent can choose other slides for each post, or none. - Accounts on the same network share the post’s text. For different text per account, create separate posts. - These checks also draw the design: text too long for its box, even in smaller type, is refused. - A preview applies none of these rules: it only draws the slides. To see everything scheduling will verify, ask your agent to check the post. ## Scheduled posts are locked Once a post is scheduled, its content and accounts are locked. You can still: - move it to another time, at least 5 minutes ahead: it stays scheduled; - cancel its schedule: it becomes a draft again at the same date, which you can edit and schedule again; - delete it. Once sending has started, the post can no longer be moved, edited, cancelled or deleted. To remove a post that is already live, delete it on the social network itself. A scheduled post is taken off the schedule, with the reason, when an Admin or the Owner disconnects one of its accounts, or when the workspace’s plan ends. It then shows Needs attention: fix the cause and schedule it again. Disconnecting your agent changes nothing for posts already scheduled. If one account refuses the post when it is handed over, the other accounts stay scheduled and the post can no longer be moved or cancelled. The refused account can be retried once the others have gone out. ## Follow the result A post has an overall status and a separate result for each account. Ask your agent for the post’s status: it reads both. Agents sometimes show the technical name. | Status | Technical name | What it means | | ---------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- | | Draft | `draft` | Saved, not scheduled. | | Scheduled | `scheduled` | Handed over for publication. It goes out at its time. | | Sending | `queued`, `rendering`, `publishing` | Being prepared or sent. Right after scheduling, this lasts a few seconds before Scheduled; otherwise, check again in a few minutes. | | Published | `published` | Published on every account. Each account’s result includes the link to the post when the network provides one. | | Partly published | `partial_success` | Published on at least one account, but not on all: the others failed, are still on their way or have an unknown outcome. Check each account’s result. | | Needs attention | `needs_attention` | Something must be fixed: the message says what. Also shown when one account was refused while the others stay scheduled. | | Failed | `failed` | Publication failed on every account. Fix the cause, then ask for a retry. | | Unknown | `unknown` | The outcome is not confirmed. Check the social account before doing anything. | | Skipped | `skipped` | Nothing was sent. | Never assume every account succeeded from the overall status alone. In the app’s calendar, failed, needs-attention and unknown results all show as Failed: ask your agent for the exact status. ## When an account fails If a post fails on one account, the other accounts keep their result. To fix it: 1. Ask your agent which account failed and why. Each account’s result carries the network’s message. 2. Fix the cause: reconnect the account in **Social accounts** (Admins and the Owner), or correct the text or slides the network refused. 3. Ask your agent to retry (Manager and above). Only the failed accounts are sent again, once no account is still scheduled, being sent or of unknown outcome. Your agent can correct the text or slides in the same step; the correction applies only to the accounts sent again. Accounts where the post was published are never posted to twice. A post taken off the schedule before it was sent is not retried: correct it and schedule it again. On X, a post that failed after it was sent cannot be retried, because part of it, such as the beginning of a thread, may already be live. Check it on X. ## When the outcome is unknown Sometimes a network does not confirm whether a post went out. The post may already be live. - Check the social account itself before doing anything. - Do not ask your agent to retry or to create the post again: it could be published twice. Retrying is not available while any account’s outcome is unknown. - The status updates on its own once the outcome is confirmed. If it stays unknown, [contact support](https://contenttosocial.com/docs/assistant-troubleshooting#docs-contact-support). ## If the conversation is interrupted If the connection drops or an answer is cut off while your agent is creating or scheduling a post, ask it to look the post up before trying again. - A post created from a template carries a request identifier, which Contenttosocial asks your agent to send. Repeating the same request returns the existing post instead of creating a duplicate; the same identifier with different content is refused. - Scheduling, moving, cancelling and deleting apply to the post’s current version. Once one of them has gone through, repeating it is refused rather than applied twice. - Drafts, library images and templates have no such protection: repeating the request creates a second one. Check the calendar, the image library or the template list first. ## Client approval Client approval needs the Freelance & Agencies plan: see [Plans](https://contenttosocial.com/docs/assistant-access#docs-plans). It is a request you make to your clients, never a lock. - **Submitting.** Your agent submits the current version of a post (Manager and above). Every client with access to the workspace sees it at once in their client space, unless your agent names specific clients. The workspace needs at least one client. A scheduled post cannot be submitted: cancel its schedule first. A post with something left to fix cannot be submitted either: ask your agent to check it. - **No email.** Submitting sends no email. To notify a client, use **Notify the client** in the app. - **What clients see.** The posts submitted to them, and every post of the workspace that is scheduled or has been sent, submitted or not. Drafts that were never submitted stay private. - **What clients do.** In their client space, clients comment, approve or request changes. **Approve and schedule** schedules the post at its date; when that date has already passed, the button reads **Approve and publish** and publishes it at once. Clients can also cancel the schedule of any post not yet sent. Changing the date and time, the captions or the texts on the visual needs the matching client permission, each off by default. A client’s edit creates a new version and cancels earlier approvals. - **Your side.** You can schedule or publish a post whether or not it was approved. Scheduling or publishing a post that is waiting for approval, or whose client requested changes, records the approval of that version in the name of the person who scheduled it. An approval you give through your agent schedules nothing: ask your agent to schedule the post afterwards. A post with something left to fix cannot be approved. - **Changes after submission.** If the post’s text, design or accounts change after you submit it, your clients keep seeing the version they were sent and can no longer approve it: submit it again. Changing only the date keeps the request as it is. - **Following up.** Your agent sees which posts are waiting for approval, which have a change request, and whether a client is waiting for a reply. When a client acts on a post, the member who submitted it, or else the Owner, receives an email, grouped as set under **Client activity emails** in their profile. --- URL: https://contenttosocial.com/docs/assistant-access Updated: 2026-10-03 # Workspaces and permissions Choose which workspaces your AI agent can use, see what each role allows, and add, revoke or disconnect access. Your AI agent works only in the workspaces you authorize, and only with the role you have in each of them. Your agency profile is the one exception: it belongs to your account, not to a workspace. This page explains how your agent chooses a workspace, what each role allows, and how to change or remove its access. ## One connection, several workspaces When you connect Claude or ChatGPT, a Contenttosocial page asks you to sign in and choose the workspaces your agent may use. One connection can cover several workspaces, for example one per client. Only workspaces with an active paid plan are listed. You can also connect with no workspace, with or without a plan. Your agent then works only on your agency profile in the SEO agency ranking, from claiming it to keeping it up to date, with the images you upload for it ([Agency profile](https://contenttosocial.com/docs/assistant-actions#docs-agency-profile)). On the **MCP** page, the connection reads **Your agency profile and image uploads, no workspace**. You add workspaces later with **Manage access**, without reconnecting. Apart from your agency profile, your agent sees nothing outside the workspaces you selected. A workspace you create or join later is never added automatically. ## Choose the workspace for each request Your agent first calls `list_workspaces`. It returns the workspaces your agent can use right now, with your role in each (Manager appears as `editor`) and each workspace’s timezone. Your agent then names the workspace in every action, so one conversation can work for several clients without mixing them up. - When you have several workspaces, name the one you mean: “In the Northwind workspace, list next week’s posts.” - If the workspace is unclear, your agent should ask you before changing anything. - If you selected exactly one workspace when you connected, a request that names no workspace goes to it. If it is later removed from the connection, such requests are refused, never sent to another workspace. ## What each role can do Your agent has your current role in each workspace, checked on every request: a role change applies at once. Manager is the role that schedules and publishes. | Role | With your agent | | ----------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | Contributor | Reads templates, the brand kit, posts, social accounts and reviews; renders previews; creates, edits and deletes drafts and library images. Cannot schedule or publish, add or change templates, change the brand kit or answer reviews. | | Manager | Everything a Contributor does, plus: copies starter templates and collections, creates and edits templates, changes the brand kit; schedules, publishes, moves, cancels and retries posts; submits posts for client approval, comments, approves or requests changes. | | Admin | Everything a Manager does, plus: lists the workspace’s client accesses and sets what clients may change in their client space. In the app, Admins also manage the team, social accounts and client access. | | Owner | Everything an Admin does, plus the event destination. Billing stays in the app, for the Owner only. | [What your agent can do](https://contenttosocial.com/docs/assistant-actions) gives the role each tool needs. ## Plans - Your agent works only in workspaces with an active paid plan. If a plan ends, the workspace leaves your agent’s list and its requests there are refused with a link to the plans. The authorization is kept: access returns as soon as the plan is active again. - Client approval needs the Freelance & Agencies plan: submitting posts, commenting, approving or requesting changes, and reading or setting what clients may change. - If you are a team member rather than the workspace’s Owner, the Owner’s plan needs a colleague seat for you, on any plan. Without one, the workspace does not appear in your agent’s list. - Your agency profile and its image uploads need no plan. ## Add or remove workspaces You can change the workspaces of a connection without reconnecting: 1. In Contenttosocial, open the account menu from your name (or **My account**) at the bottom of the sidebar, then choose **MCP**. 2. Under **Your MCP connections**, choose **Manage access** on the connection. 3. Select or clear workspaces, then choose **Save**. Workspaces without an active paid plan cannot be added: they show **Paid workspace access required**. Once a connection has workspaces, **Manage access** keeps at least one: to stop all access, disconnect instead. On the connection, **Access removed** or **Access unavailable** next to a workspace means your agent cannot use it: the workspace was removed from the connection, or it has no active plan, or you no longer have a role there. If you reconnect from your agent instead, you choose the workspaces again and the new selection replaces the previous one. ## Disconnect On the **MCP** page, choose **Disconnect** on the connection, then confirm. The connection stops at once, in every workspace and for your agency profile alike, and moves to **MCP connection history**. To use your agent again, connect it again from Claude or ChatGPT, sign in and approve access. If the connection shows **Finish disconnecting**, access is already blocked: choose it to complete the disconnection. Disconnecting does not cancel posts already scheduled. They stay in the calendar until you cancel them. ## Team members’ connections On a workspace’s **Team** page, the Owner and Admins find **MCP connections**: the agent connections teammates authorized for that workspace, with the teammate who authorized each one. **Revoke workspace access** removes a connection’s access to this workspace only; the teammate’s other workspaces are not affected. The list leaves out your own connections and the Owner’s, so Admins cannot revoke the Owner’s access. While they remain on the team, the teammate can add the workspace back with **Manage access**. Everyone manages their own connections from the account menu, on the **MCP** page. ## When someone leaves a team Removing a member from a workspace also removes their agent’s access to that workspace, and only that one. Joining the team again does not restore it: they add the workspace back with **Manage access**. Posts they already scheduled keep publishing unless someone cancels them. ## What your agent can never access Your agent cannot: - change billing or the plan, or see payment details (`get_workspace` shows the plan’s name, limits and usage); - see or change team members, invitations and roles; - connect or disconnect social accounts, or see their sign-in details (`list_accounts` shows the connected accounts and whether they need reconnecting); - invite clients, give, change or remove their access, or send them emails (Admins can list client accesses and set what clients may change); - change workspace settings such as the name or timezone (it can read them); - create, delete or transfer workspaces; - reach workspaces you did not select, or where you no longer have a role; - see your Contenttosocial password: you sign in on Contenttosocial’s own page, never in the conversation. All of this stays in the Contenttosocial app. --- URL: https://contenttosocial.com/docs/assistant-troubleshooting Updated: 2026-10-02 # Troubleshooting Fix connection, plan, workspace, permission, agency profile, scheduling and publication problems with your AI agent, and know when to contact support. Start with the message your AI agent reports: it usually says what to do. Contenttosocial writes these messages in English, and your agent may translate or rephrase them. This page quotes them as Contenttosocial writes them, so you can match what you see. ## The connection does not appear - Check that Contenttosocial is turned on for the conversation: see step 2 of [Connect Claude](https://contenttosocial.com/docs/claude#docs-2-authorize-your-workspaces) or [Connect ChatGPT](https://contenttosocial.com/docs/chatgpt#docs-2-authorize-your-workspaces). - In an organization, an administrator may first need to add the connector for everyone, or to allow custom connectors or developer mode. - “Sign in to connect Contenttosocial.” means your agent called Contenttosocial without signing in, usually because the connector was added without OAuth. Remove it from your agent and add it again with OAuth, leaving any API key or request header field empty: see [Connect your AI agent with MCP](https://contenttosocial.com/docs/mcp). - “This origin is not allowed.” means your agent calls Contenttosocial from a website other than Claude (claude.ai) or ChatGPT (chatgpt.com), which Contenttosocial refuses. Agents that do not run in a web page are not affected. - If the connection still does not work, [disconnect and reconnect](#docs-disconnect-and-reconnect). ## The sign-in page stopped The Contenttosocial page that opens when you connect can stop in three ways: - **Restart your connection**: the connection request expired before you approved it. Your account is kept, and so is any payment you made. Go back to your agent, open its connector settings, select Contenttosocial and connect again, then approve access with the same account. If you started a payment from the sign-in page in the last 24 hours, the new page picks it up: do not pay again. - **Connection temporarily unavailable**: Contenttosocial could not reach its authorization service. Your progress is saved: choose **Try again** a moment later. - The page says the connection link is invalid: start again from your agent’s connector settings. If you chose **Deny** by mistake, connect again from your agent. ## Your agent asks you to reconnect Your agent may show its own reconnect prompt, or one of these messages: - “Your connector session has expired. Reconnect to continue.” - “This connector was disconnected. Connect it again to continue.” - “Reconnect Contenttosocial to authorize this connector.” The connection was disconnected in Contenttosocial, or its sign-in is no longer valid. Connect again from your agent, as in [Disconnect and reconnect](#docs-disconnect-and-reconnect). ## No workspace with a plan Connecting needs no plan. Your agency profile and the images you upload for it work without one. Posts, templates and the calendar live in workspaces, and a workspace opens only with an active paid plan. When none of your workspaces has a paid plan, the sign-in page says **You can connect now, with or without a plan.** and shows what needs a plan. Choose **Allow access** to connect anyway: you can add a workspace later with **Manage access**, without reconnecting, from the account menu (open it from your name in the sidebar, then choose **MCP**). To include a workspace right away: - If you own it, select **Choose a paid plan** (if you own several workspaces, first pick one under **Workspace to activate**). After checkout, you return to the sign-in page, which confirms the subscription on its own; **Allow access** stays unavailable until it does. If the subscription is still being confirmed after a minute, choose **Check payment status** and do not start another payment. - If you are a team member, the page says “Ask your workspace owner to activate a paid plan.” Once the Owner has done it, choose **Check access again**. In a conversation, a request that needs a workspace is then refused with one of these messages, followed by a link to the plans or to your MCP settings: | Message | What to do | | ------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | | “No workspace with a plan is authorized for this connection.” | Your agent asked for your workspaces and found none it can use. Add a workspace with a paid plan with **Manage access**. | | “This tool works in a workspace (posts, templates, calendar), and workspaces come with a plan.” | None of your workspaces has a paid plan. Choose a plan, create a workspace in the app if you have none, then add it with **Manage access**. | | “This connection has no workspace yet.” | You have a workspace with a paid plan, but this connection does not include it. Add it with **Manage access**: no need to reconnect. | | “This workspace has no active plan, so nothing in it opens (posts, templates, calendar).” | Your workspace’s plan has ended or was never chosen. Choose one in **Subscription**, in the account menu. | | “This workspace's owner has no active plan, so nothing in it opens. Ask the owner to choose one.” | Ask the workspace’s Owner to activate a paid plan. | ## A workspace is missing When your agent does not list a workspace, or answers “This connection has no access to this workspace.”: - It was not selected when you connected: add it with **Manage access**, in the account menu under **MCP**. - It has no active paid plan: **Manage access** shows it with **Paid workspace access required** and cannot add it. See [No workspace with a plan](#docs-no-workspace-with-a-plan). - You are a team member and its Owner’s plan has no colleague seat for you: each team member needs a seat, so the workspace does not appear for you. Ask the Owner to add one. - You left its team, or an Owner or Admin revoked your connection’s access on the **Team** page. Once you are a member again, add it back with **Manage access**. Under **Your MCP connections**, **Access removed** or **Access unavailable** next to a workspace means your agent cannot use it. After any change, ask your agent to list your workspaces again. See [Workspaces and permissions](https://contenttosocial.com/docs/assistant-access). If your agent answers “Choose a workspaceId from list_workspaces for this action.”, the connection covers several workspaces: tell it which one to use. ## The wrong workspace or account was used Ask your agent to list your workspaces or social accounts, then name the right one: “Use the Northwind workspace” or “Post on the Acme company page, not my personal profile.” If a post was scheduled on the wrong account, ask your agent to cancel its schedule, correct the accounts and schedule it again. Once sending has started, the post can no longer be changed: if it went out on the wrong account, delete it on the social network itself. ## An action is not allowed | Message | What to do | | ------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | “Your workspace role does not allow this action.” | The action needs the Manager role or above. Ask an Admin or the Owner to change your role, or to do it for you. | | “Contributors can create and edit drafts only. Ask a manager to schedule or publish.” | Save a draft instead; a Manager, an Admin or the Owner schedules or publishes it. | | “You no longer have permission for this workspace.” | The action is reserved for higher roles, or your role changed or was removed since you connected. See [What each role can do](https://contenttosocial.com/docs/assistant-access#docs-what-each-role-can-do). | | “Client portals are available with the Freelance & Agencies plan.” | Client approval needs the Freelance & Agencies plan. See [Plans](https://contenttosocial.com/docs/assistant-access#docs-plans). | | “This workspace's plan has no colleague seat for you. Ask its owner to add one.” | Each team member needs a colleague seat on the Owner’s plan. Ask the Owner to add one. See [Plans](https://contenttosocial.com/docs/assistant-access#docs-plans). | ## Agency profile problems The agency profile tools act only on profiles your own account has claimed. Your agent can claim one with you: it finds your agency, sends a 6-digit code to an address at your agency’s domain, and confirms the code you read in that mailbox. You can also claim it in the app, under **Agency profile**. | Message | What to do | | -------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | “This account has not claimed an agency profile yet.” | Ask your agent to find and claim your agency, or claim it in the app. | | “This code has expired. Ask for a new one.” | A code is valid for 15 minutes. Ask your agent to send a new one. | | “This code is not the right one.” | Check the latest email and give the code again. After five wrong codes, ask for a new one. | | “Too many codes asked. Try again in an hour.” | Wait an hour before asking for another code. | | “This profile has already been claimed. Write to us if it is your agency.” | You can take the profile back by proving your domain with a DNS record: your agent gives you the record to add. Its current owner is then emailed. You can also [contact support](#docs-contact-support). | | “We don't see the record yet. A DNS change can take from a few minutes to an hour to show: check again then.” | Check that the record was added where your domain’s DNS is managed, then ask your agent to check again later. | | “This agency's site is on a shared platform, so its domain cannot prove who you are. Write to us to claim it.” | [Contact support](#docs-contact-support) to claim the profile. | | “Your head office is not in a city the ranking covers yet. Send us a request instead.” | Your agent can only add agencies in covered cities. Ask it to send a listing request instead. | | “This account owns several agency profiles: pass agencyId (see profiles in get_agency_profile).” | Tell your agent which agency you mean. | | “This profile is not yours.” | Only the account that owns a profile can work on it from an agent. | | “Claim your agency's profile first: uploads are kept with it.” | Claim your profile before uploading screenshots. | | “This upload link has expired. Ask for a new one.” | When no upload box appears, your agent gives you an upload link, valid for 30 minutes. Ask for a new one. | ## A post could not be scheduled Ask your agent to check the post: it uses `check_post` and lists everything scheduling would refuse, apart from the date. An empty list means the post is ready. Common causes: - no account chosen, or an account whose publishing is not enabled (“Choose at least one enabled social account.”): an Admin or the Owner turns it on with **Set up publishing**, in **Social accounts**; - a template format that does not suit one of the networks (“… templates cannot be used for …”), or a story with more than one slide (“A story is one image. Keep a single slide.”). Stories publish only to Instagram and Facebook; - a missing caption, or one longer than the network allows (2,200 characters on Instagram and Facebook, 3,000 on LinkedIn); - for Pinterest: more than one slide, or a missing title, link or board; - for X: text over the account’s limit, more than 20 posts in a thread, or more than four images in one post; - text too long for its box in the design (“… is too long for its text box, even in smaller type. Shorten the text.”), or an empty required field; - a time less than 5 minutes or more than 12 months ahead (“Schedule at least 5 minutes ahead, or publish now.”, “Schedule within the next 12 months.”); - a post that is already scheduled (“This post is already scheduled.”): move it, or cancel its schedule to edit it. [What each network needs](https://contenttosocial.com/docs/assistant-publishing#docs-what-each-network-needs) lists the rules per network. ## A post failed on one account Ask your agent for the post’s status: it shows the result and the error for each account. Then follow [When an account fails](https://contenttosocial.com/docs/assistant-publishing#docs-when-an-account-fails). Common fixes are reconnecting the account with **Reconnect** in **Social accounts** (Admins and the Owner), correcting text the network refused, or checking the account’s own restrictions on the network. ## The outcome is unknown After “The publication result is uncertain. Check the post status before retrying.”, or when the post’s status is unknown, the post may already be live. Check the social account before anything else, and do not ask your agent to retry or recreate the post. See [When the outcome is unknown](https://contenttosocial.com/docs/assistant-publishing#docs-when-the-outcome-is-unknown). If the status stays unknown, contact support with the post’s title and time. If your agent reports that the service is temporarily unavailable while it creates or schedules a post, ask it to look the post up before trying again. ## Rate and usage limits | Message | What it means | | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | | “Too many connector requests. Try again shortly.” | One connection can make up to 120 requests per minute. Wait a minute, then continue. | | “Your shared image allowance is exhausted for this billing period.” | Each preview slide and each image rendered for publication counts toward your plan’s image allowance. | | “Your shared X allowance is exhausted for this billing period. Other eligible networks can continue.” | Each X post published counts toward your plan’s X allowance, including each post of a thread. | | “Your allowance of X posts with a link is exhausted for this billing period. Posts without a link and other networks can continue.” | X posts that contain a link have their own allowance. | | “This workspace has reached its template limit. Delete unused templates to add more.” | A workspace holds up to 500 templates, within a storage limit. Delete unused templates, or remove large images from them. | An exhausted allowance is renewed at your next billing period. Ask “Show my workspace usage” to see where you stand: your agent uses `get_workspace`. Plans are changed in the app, under **Subscription**. ## Disconnect and reconnect 1. In Contenttosocial, open the account menu from your name in the sidebar, then **MCP**, and choose **Disconnect** on the connection. 2. In your agent, open its connector settings, select Contenttosocial and connect again. 3. Sign in, choose your workspaces again and approve access. You can also reconnect from your agent without disconnecting first. Either way, the workspaces you choose replace the previous selection, and posts already scheduled are not affected. See [Disconnect](https://contenttosocial.com/docs/assistant-access#docs-disconnect). ## Contact support In the Contenttosocial app, open the account menu from your name in the sidebar, then **Contact**, and write to us in the **How can we help?** form. Include: - your agent (Claude, ChatGPT or another) and the workspace or agency profile concerned; - what you asked, when, and the exact message shown; - the post’s title and date, if a post is involved. Never share your password, sign-in codes or payment details. If you cannot sign in, use the form on the website’s [Contact](https://contenttosocial.com/contact) page, or write to hello@contenttosocial.com. --- URL: https://contenttosocial.com/tools/template-editor Updated: 2026-09-15 Free social template editor Create templates with your agent or edit them yourself. Render and download social images in your browser, with no account or installation. Built for agents, editable by people Agents can discover the starter templates, inspect their fields, create their own designs, render and download through native WebMCP in a compatible browser. Every edit appears in this same editor. No account, installation or paid rendering service is needed. An agent with web reading can prepare a final link that opens and renders your design here. Browser support determines whether the agent can collect the download itself. PNG, JPEG, SVG, PDF and ZIP exports run locally; templates use fixed social formats. Your design, saved as a file Choose a social format, arrange text, images and shapes, and create up to ten slides. Open a template JSON file or drop it into the editor to keep working on it. Images and template files are processed in your browser. Save file downloads your editable template as JSON, including its images. Keep that file on your computer and reopen it here whenever you need. This tool does not store your templates in a workspace or publish social posts. Prepare a template for automation Choose which text and image fields can change and which ones are required. Test replacement values locally; the editor checks each slide before saving. Files that contain unsupported layers, unsafe images or overflowing text return errors you can copy and correct. To save templates in a hosted library and use them from your AI agent or in social posts, import your file into a paid Contenttosocial workspace. --- URL: https://contenttosocial.com/tools/carousel-maker Updated: 2026-09-08 Free carousel maker Write your hooks and slides, choose your colors, and download Instagram images or a LinkedIn PDF. No account required. From your words to a finished carousel Add two hooks and one to seven content slides. Set the brand name, colors and closing copy. Generate the preview, then download the JPEG ZIP for Instagram or the PDF for LinkedIn. The tool uses your exact copy and runs without an account, email address or payment. It does not publish anything. Your closing slide is included automatically. Ready for portrait feeds Every carousel image is 1080 × 1350 pixels, with a 4:5 aspect ratio. The PDF uses the same portrait pages. Four to ten total slides keep the story within this tool’s shared platform limits.