A side-by-side look at the Pipepost and Yandex Webmaster MCP MCP servers: transport, auth, tools, quality signals, and the config to install either one in Claude, Cursor, Windsurf or VS Code.
Verdict: choose Pipepost for marketing work as a local process; choose Yandex Webmaster MCP for marketing as a local process. You can also run both side by side in one mcpServers block.
seo_score, seo_meta, seo_schema.YANDEX_WEBMASTER_TOKEN, YANDEX_OAUTH_CLIENT_ID, YANDEX_OAUTH_CLIENT_SECRET.login, submit_code, get_hosts.Rows where the two servers differ are marked.
| Spec | ||
|---|---|---|
| Category | Marketing | Marketing |
| Quality signal | 60/100 · Good | 63/100 · Good |
| Install command | Confirmed | Confirmed |
| Transport | Local subprocess (stdio) | Local subprocess (stdio) |
| Auth | other | Not declared |
| Pricing | Freemium | Not declared |
| Required env vars | None listed | YANDEX_WEBMASTER_TOKENYANDEX_OAUTH_CLIENT_IDYANDEX_OAUTH_CLIENT_SECRET |
| Verified owner | Community listing | Community listing |
| GitHub stars | 5 | 4 |
| Directory activity | 4 views 0 installs 0 upvotes | 2 views 0 installs 0 upvotes |
| Tools | 29 | 10 |
| Full listing | View Pipepost | View Yandex Webmaster MCP |
seo_scoreAnalyze markdown content for SEO quality and return a 0-100 score with grade. Basic scoring (heading structure, word count, keyword density, readability) requires no credentials and is FREE. Full analysis (issue list, prioritized suggestions, related-keyword gaps) costs 1 credit. Returns: { score, grade, breakdown, issues?, suggestions? }. Common errors: missing 'content' (VALIDATION_ERROR), insufficient credits for full analysis (PAYMENT_REQUIRED).seo_metaGenerate SEO-optimized meta title (<60 chars), meta description (<160 chars), and Open Graph tags from article content. No external API calls; runs locally. Costs 1 credit per call. Returns: { title, description, og: { title, description, image_alt }, twitter: { card, title, description } }. Common errors: insufficient credits (PAYMENT_REQUIRED).seo_schemaGenerate valid JSON-LD structured data for Schema.org Article, FAQPage, or HowTo types. Output is ready to paste into a <script type="application/ld+json"> tag. Costs 1 credit per call. Returns: { jsonld: string, type: 'Article'|'FAQPage'|'HowTo' }. Common errors: invalid type for the supplied content shape (VALIDATION_ERROR), insufficient credits (PAYMENT_REQUIRED).index_nowSubmit one or more URLs to the IndexNow API for instant search-engine indexing across Bing, Yandex, Naver, and Seznam (Google does not participate in IndexNow). FREE. No platform credentials required; uses the Pipepost shared key. Returns: { submitted: number, key, accepted: string[], rejected: string[] }. Common errors: malformed URL or non-https scheme (VALIDATION_ERROR), upstream 4xx from IndexNow (PLATFORM_ERROR).cover_imageSearch Unsplash for cover images. FREE. Requires Unsplash access_key via setup. Subject to Unsplash's 50 req/h demo or 5000 req/h production rate limit. Returns: { results: [{ url_full, url_regular, url_small, photographer, photographer_url, attribution_html, alt }] }. Common errors: missing Unsplash key (VALIDATION_ERROR), rate-limit exceeded (PLATFORM_ERROR).publishPublish a markdown article to one CMS platform: devto, ghost, hashnode, wordpress, medium, or substack. Costs 1 credit per call. Requires platform credentials configured via the 'setup' tool. Supports draft|published status, tags, canonical_url, series, and cover image. Substack is published via reverse-engineered cookie auth. Returns: { url, id, platform, status }. Common errors: platform not configured (VALIDATION_ERROR), credit exhaustion (PAYMENT_REQUIRED), upstream 4xx/5xx (PLATFORM_ERROR), network timeout (NETWORK_ERROR).list_postsList your published and draft posts on a configured platform (devto, ghost, hashnode, wordpress, medium, substack). FREE. Requires platform credentials. Returns: { posts: [{ id, title, status, url, published_at }] }. Common errors: platform not configured (VALIDATION_ERROR), upstream auth failure (PLATFORM_ERROR).cross_publishPublish one article to multiple CMS platforms in a single call. Costs 1 credit total regardless of how many platforms (typical use: 5 platforms). The first successful platform's URL is wired as the canonical for the rest. Requires credentials for every target platform. Returns: { results: [{ platform, status: 'success'|'error', url?, error? }], canonical_url, summary: { ok, failed } }. Common errors: zero platforms configured (VALIDATION_ERROR), credit exhaustion (PAYMENT_REQUIRED). Per-platform failures are reported in results without aborting the whole call.frontmatterGenerate correctly-formatted frontmatter for SSGs and publishing platforms: hugo, jekyll, astro, nextjs, devto, hashnode, ghost. FREE. Auto-extracts description, reading_time, slug, and suggests tags from content. No external calls. Returns: { frontmatter: string, format, extracted: { slug, reading_time_min, description } }. Common errors: unknown format (VALIDATION_ERROR).generate_social_postsGenerate platform-optimized social copy from an article: twitter (thread), linkedin (long form), reddit (post + suggested subreddits), bluesky (single post within 300 graphemes). Costs 1 credit per call regardless of platform count. No platform credentials required (this generates copy; use bluesky_post / linkedin_post / x_post / mastodon_post to actually post). Returns: { posts: { twitter?, linkedin?, reddit?, bluesky? } }. Common errors: insufficient credits (PAYMENT_REQUIRED).repurposeTransform a full blog post into platform-native content for twitter, linkedin, reddit, hackernews (title only), bluesky, newsletter (intro paragraph). Costs 1 credit per call. Output preserves URLs and respects each platform's character limits. Returns: { outputs: { twitter?: string[], linkedin?: string, reddit?: { title, body, subreddits }, hackernews?: string, bluesky?: string, newsletter?: string } }. Common errors: insufficient credits (PAYMENT_REQUIRED).analyticsFetch post views, reactions, and comments from every configured CMS platform (devto, ghost, hashnode, wordpress) and aggregate the totals. FREE. Requires platform credentials. Medium and Substack are listed but their APIs do not expose post-level analytics. Returns: { platforms: [{ platform, posts: [{ title, url, views?, reactions?, comments?, published_at? }], note? }], summary: { total_posts, total_views, total_reactions } }. Common errors: no platforms configured (VALIDATION_ERROR), upstream auth failure surfaces per-platform in 'note'.loginSign in to Yandex from here. Opens your browser to approve access; the code returns automatically over a local redirect, so this usually finishes in one call. If the local port is unavailable it returns a URL to approve and you then call submit_code with the code Yandex shows. Run this once (the token lasts ~1 year); needed before the data tools if you are not signed in yet.submit_codeComplete a copy-paste sign-in started by login: pass the code Yandex showed you after you approved access.get_hostsDiscovery tool: list the sites (hosts) available to your Yandex Webmaster token, each with its host_id, URL and verification state. host_id is what every other tool needs to identify a site. Optionally pass `hostId` to also fetch that host summary (SQI, indexed/excluded page counts, site problems). Read-only. Call this first.search_queriesSearch-query analytics for a host from Yandex Search: impressions (TOTAL_SHOWS), clicks (TOTAL_CLICKS), average show/click position. Read-only.
• report="top" (default): ranked list of the queries bringing the most traffic, ordered by orderBy. Use this to see which phrases people search.
• report="trend": a time series. Pass queryId (from a prior "top" call) for one query's history over time, or omit it for the site's aggregate trend.
Tip: cross-reference these queries/landing pages with Yandex Metrica (bounce rate, conversions) to find high-impression, low-conversion phrases worth optimizing.get_indexingHow Yandex crawls and indexes the host. Read-only. Pick a report:
• report="history" (default): time series of crawled pages grouped by HTTP status class (HTTP_2XX/3XX/4XX/5XX/OTHER) — spot spikes of errors the crawler hits.
• report="crawled": example crawled URLs with their HTTP code and crawl date.
• report="in_search": example URLs currently present in Yandex search, with title.get_diagnosticsYandex Webmaster site diagnostics: problems detected on the host (e.g. DNS errors, slow response, robots.txt issues, 4xx alerts), each with a severity (FATAL, CRITICAL, POSSIBLE_PROBLEM, RECOMMENDATION). By default returns only ACTIVE problems (state=PRESENT), worst first. Set includeAbsent=true to also list resolved/absent problem types. Read-only.list_sitemapsList the Sitemap files Yandex knows for the host, each with its URL, type, last access date, number of URLs and error count, and where it was discovered (robots.txt, webmaster, etc.). Use it to check a sitemap is being read and is error-free. Read-only.get_external_linksInbound (external) links pointing to the host — the backlinks Yandex knows. Read-only.
• report="samples" (default): example links with source page, target URL and discovery date, plus the total count available.
• report="history": time series of the total external-link count over time.recrawl_statusRead-only view of the host recrawl activity. With no taskId: the remaining daily quota plus the most recent recrawl tasks and their state (IN_PROGRESS, DONE, FAILED). Pass taskId (from recrawl_submit) to check one task. Use before recrawl_submit to confirm quota is available.recrawl_submitAsk Yandex to recrawl a specific page of the host sooner. NOT read-only: each call consumes one unit of the limited daily recrawl quota (check it with recrawl_status). The URL must belong to the host and be a full absolute URL. Returns the task_id and the remaining quota. Track progress with recrawl_status using the returned task_id.Paste either block (or both) into your client config, e.g. claude_desktop_config.json or ~/.cursor/mcp.json. We only show a config when the install command is confirmed.
{
"mcpServers": {
"mendlem-pipepost": {
"command": "npx",
"args": [
"-y",
"pipepost-mcp"
]
}
}
}
{
"mcpServers": {
"yandex-webmaster-mcp": {
"command": "npx",
"args": [
"-y",
"@boxlab/yandex-webmaster-mcp"
],
"env": {
"YANDEX_WEBMASTER_TOKEN": "YOUR_YANDEX_WEBMASTER_TOKEN_HERE",
"YANDEX_OAUTH_CLIENT_ID": "YOUR_YANDEX_OAUTH_CLIENT_ID_HERE",
"YANDEX_OAUTH_CLIENT_SECRET": "YOUR_YANDEX_OAUTH_CLIENT_SECRET_HERE"
}
}
}
}