Performs pre-deployment content audits including SEO, keyword density, translation integrity, link validation, and regulatory claim checks.
Also known as adsandcode/contentgate, mcp-server-contentgate
- Stars
- 0
- Tools
- 8
- Downloads, 30 days
- —
- Latest version
- 0.2.0
- Last commit
- Oct 23, 2026
- License
- MIT
What is contentgate MCP?
contentgate performs pre-deployment content audits including SEO, keyword density, translation integrity, link validation, and regulatory claim checks. It exposes 8 tools, such as check_keywords, check_translation, check_internal_links.
Summary generated from the project's README
About contentgate MCP server
Auditing web content for SEO, translation integrity, and regulatory compliance before deployment is what Contentgate enables for developers and editors. This MCP server provides a suite of specialized tools to catch errors while a page is being written rather than after it goes live. It functions as a pure utility where content goes in and a verdict comes out, requiring no filesystem or network access during execution. Users can run the server via npx to integrate these checks into their local development workflows or AI client setups.
The server includes specific tools like audit_page to verify JSON-LD structured data, image alt attributes, and favicon presence. Developers can use check_keywords to ensure target terms appear, check_translation to maintain structural parity between source and target languages, and check_claims to identify advertising language that might violate regulations. It also offers compare_pages to measure sentence overlap between two documents and sitemap_lastmod to verify if a page has actually changed. These tools help ensure that content is readable without JavaScript and adheres to specific editorial standards.
What you can do with it
- 1Verify SEO and structured dataCheck if a page is readable without JavaScript and contains the correct JSON-LD markup for search engines.
- 2Validate regulatory advertising claimsIdentify if copy states outcomes as facts in a way that regulated advertising might reject.
- 3Ensure translation integrityConfirm that a translated document remains structurally identical to its original source document.
- 4Audit internal link profitabilityVerify that a page links to revenue-generating areas of the site rather than just boilerplate content.
Written from the project's README. Every use case is checked against a quote from it.
How to install contentgate MCP
Formats verified 10 Nov 2026Add to CursorAdd to GooseInstall contentgate MCP in Claude Code
$ claude mcp add contentgate -- npx -y mcp-server-contentgateInstall contentgate MCP in Cursor
~/.cursor/mcp.json
{
"mcpServers": {
"contentgate": {
"command": "npx",
"args": [
"-y",
"mcp-server-contentgate"
]
}
}
}Install contentgate MCP in VS Code
.vscode/mcp.json
{
"servers": {
"contentgate": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"mcp-server-contentgate"
]
}
}
}Install contentgate MCP in VS Code CLI
$ code --add-mcp '{"name":"contentgate","type":"stdio","command":"npx","args":["-y","mcp-server-contentgate"]}'Install contentgate MCP in Claude Desktop
claude_desktop_config.json
{
"mcpServers": {
"contentgate": {
"command": "npx",
"args": [
"-y",
"mcp-server-contentgate"
]
}
}
}Install contentgate MCP in Codex
$ codex mcp add contentgate -- npx -y mcp-server-contentgateInstall contentgate MCP in Codex config.toml
~/.codex/config.toml
[mcp_servers.contentgate] command = "npx" args = ["-y", "mcp-server-contentgate"]
Install contentgate MCP in Gemini CLI
$ gemini mcp add -s user contentgate npx -- -y mcp-server-contentgateInstall contentgate MCP in Gemini settings.json
~/.gemini/settings.json
{
"mcpServers": {
"contentgate": {
"command": "npx",
"args": [
"-y",
"mcp-server-contentgate"
]
}
}
}contentgate MCP tools 8
Detected from the READMEcheck_keywordscheck_translationcheck_internal_linkscheck_claimssitemap_lastmodcontent_hashaudit_pagecompare_pages
| check_keywords | — | |
| check_translation | — | |
| check_internal_links | — | |
| check_claims | — | |
| sitemap_lastmod | — | |
| content_hash | — | |
| audit_page | — | |
| compare_pages | — |
Automated checks
Ran Nov 14, 2026Full report →Passed our automated checks. That is not a security audit: read the code and give the server the narrowest access it needs. How checks work
- Source repository linked and reachableadsandcode/contentgate is public and reachablegithub.com/adsandcode/contentgate ↗Pass
- Package names this repository as its sourcemcp-server-contentgate names adsandcode/contentgate as sourcenpmjs.com/package/mcp-server-contentgate ↗Pass
- Build provenance (Sigstore attestation)No build attestation published for this releaseNot checked
- Open source license (OSI)MITspdx.org/licenses/MIT.html ↗Pass
- Commit or release in the last yearLast commit or release 2026-10-23github.com/adsandcode/contentgate ↗Pass
- OpenSSF ScorecardNot checked
- Package name not close to a popular packageNo popular package one edit away from mcp-server-contentgatePass
- No critical advisory in the package or its dependencies99 resolved dependencies checked; no critical advisoryosv.dev ↗Pass
- No hidden instructions to the model8 tool descriptions and the README read; no override phrases, credential paths or hidden charactersPass
- Destructive tools are labelledNo tool named like delete, drop or execPass
- Remote endpoint answers the MCP handshakeNot checked
README
View on GitHubmcp-server-contentgate
MCP server for pre-deploy content checks. Catch the problem while the page is being written, not after it is live.
Documentation and background: adsandcode.com/en/open-source/contentgate
{
"mcpServers": {
"contentgate": { "command": "npx", "args": ["-y", "mcp-server-contentgate"] }
}
}
Tools
| Tool | What it answers |
|---|---|
check_keywords |
Do the terms this page is meant to rank for actually appear in it? |
check_translation |
Is this translation still structurally the same document as its source? |
check_internal_links |
Does this page link to anything on its own site that makes money, outside the boilerplate? Absolute links count only for hosts in site_hosts. |
check_claims |
Does this copy state outcomes as facts in a way regulated advertising rejects? A disclaimer counts only when its negation governs the claim itself. |
sitemap_lastmod |
Has this page genuinely changed, or is the build about to lie about it? |
content_hash |
Stable hash of a page with volatile blocks removed. |
audit_page |
Is this page readable without JavaScript, marked up with JSON-LD that parses, honest about its outbound links, and complete in its images and favicon? |
compare_pages |
How many sentences do these two pages share word for word? |
Every tool is pure: content in, verdict out. No filesystem access, no network access, nothing written.
The guards are also importable as plain functions, and importing starts
nothing: import { checkClaims, auditPage } from "mcp-server-contentgate".
Page audit
audit_page runs six checks on one rendered page and returns a verdict for
each; pass checks to run fewer.
visible_text: characters readable with JavaScript off, leaving out<template>and elements with thehiddenattribute. Google renders JavaScript; many AI crawlers read only the HTML the server sent, so an article injected by a script is invisible to them. 1200 is a house default, not a search-engine number.structured_data: every JSON-LD block parses, the@typevalues you require are present (defaultArticle,BreadcrumbList,Organization), and there is adateModified. A required type is satisfied by its schema.org subtypes (BlogPostingandNewsArticleare Articles;Corporation,NewsMediaOrganizationor aLocalBusinessis an Organization). AProfilePageis not required to be anArticle.outbound_links: external links withoutrelnofollow,sponsoredorugc. Google does not require anyrelon ordinary editorial links (onlysponsoredon paid or affiliate links andugcon user-generated ones), so do not addnofollowto a citation to make this pass: list the sites you cite incite_ok. Hosts are resolved the way a browser resolves them, so backslashes and extra slashes do not disguise where a link goes; registries anyone can register under (co.uk,github.io,pages.dev) are refused incite_ok.images:<img>withoutaltorwidth.alt=""is accepted.favicon: home page only; an icon<link>in the head, in a format Google Search lists (BMP, GIF, ICO, PNG, JPEG, PPM, TIFF), read from the URL path or, for adata:URI, its MIME type.stock_phrases: an editorial style list, not a detector of machine-written text. The default list is one editor's Traditional Chinese taste and is meant to be replaced: connectives such as 因此, and 然而, flag ordinary sentences. Pass your own, and always for any other language.
compare_pages splits both pages into sentences (on 。!? and on . ! ? before
whitespace), ignores sentences under ten characters, and measures the shared
share in characters in both directions.
Sources for each rule are in the repository README.
The one design rule
A guard that has never been shown to fail is decoration.
The server runs its negative tests at startup and refuses to start if they fail. A checker that cannot prove it still catches a known-bad input should not be answering questions about your content.
The same test file is run by the Python implementation in the same repository, and both are required to produce identical verdicts on every case.
Three behaviours worth knowing before you call it
Keyword matching never normalises whitespace. web hosting and
webhosting are different strings with different search volumes. If you pass
one, the other does not satisfy it.
Pass exclude_classes. A call-to-action block that appears on every page
will otherwise satisfy check_keywords and check_internal_links everywhere,
and both tools become decoration.
Set forbid_source_script: false when the target language shares the source
script, such as Simplified Chinese from a Traditional Chinese source. Otherwise
every document in that locale is reported as untranslated.
Python CLI
The same checks run as a deploy gate, reading your site from disk, in the
contentgate package in the same repository.
Licence
MIT.
Maintainer
Built and maintained by Ads & Code.
contentgate MCP questions
How do I add contentgate MCP to Claude Code?
Run claude mcp add contentgate -- npx -y mcp-server-contentgate in your terminal. Add --scope user to make it available in every project.
How do I add contentgate MCP to Cursor?
Open ~/.cursor/mcp.json and add the server under mcpServers, using the Cursor config shown in the install section above.
What tools does contentgate MCP provide?
It exposes 8 tools, including check_keywords, check_translation, check_internal_links, check_claims, sitemap_lastmod.
What kind of checks does the audit_page tool perform?
It runs six checks: visible text readability, JSON-LD structured data parsing, outbound link attributes, image alt/width tags, favicon presence, and stock phrase detection.
Does the server require network or filesystem access?
No, every tool is pure and operates only on the content provided, with no filesystem or network access.
How does keyword matching handle whitespace?
Keyword matching does not normalize whitespace, meaning 'web hosting' and 'webhosting' are treated as different strings.
How does the server ensure its checks are actually working?
The server runs negative tests at startup and will refuse to start if these tests fail, ensuring it can still catch known-bad inputs.