Google Search Console integration for Model Context Protocol (MCP)
VarynForge is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
SEO research SaaS exposed as 30+ MCP tools. Forge niche analysis, plans, and writer-ready briefs.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --transport http varynforge-mcp https://app.varynforge.com/api/mcp
# 2 — ask your agent for something these tools do
# get_instructions, get_changelog, get_writer_system_prompt and 54 more
VarynForge costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. Nothing here runs on your machine and nothing runs on ours: this server answers at its publisher’s own address, and what you install is the connection straight to it.
This is a public server: it answers at its publisher’s own address and this marketplace is not in the path. Claude Code registers it in one command; --scope user makes it available in every project. The transport below is http, as the publisher's own manifest declares it.
claude mcp add --scope user --transport http varynforge-mcp https://app.varynforge.com/api/mcpReconnect, or start a new session, and the tools appear in the model’s tool list.
One config entry pointing straight at the publisher’s own address — this marketplace is not in the path, and nothing from this listing executes on your machine.
57 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Get the VarynForge agent guide — workflow paths (free vs paid), token-economy rules, walls and upgrade conversation conventions. Read this at session start.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get the URL of the VarynForge product changelog — what shipped, newest first, in plain markdown. Fetch it when the operator asks what is new, and in the days after a send_feedback report to check whether the gap they hit has been closed.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get the writer system prompt for drafting one content type from its brief. The writer works with your Varyn account context: every channel prompt binds to the brief, its acceptance rubric, and the opportunity behind the brief fetched from the account, and degrades to generic writing advice without them. Pass channel (article | x | linkedin | reels | youtube) — each channel has its own methodolog
| Parameter | Type | Required | Notes |
|---|---|---|---|
| channel | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get the operator account status — the organization whose plan/credits/limits this payload describes (plans and usage limits are per-organization; see list_organizations), current plan, available credits, brief quota state, the lint_draft daily verification cap (applies on every tier; check lint_drafts_remaining_today before a verification loop), the idea_checks allowance (check_idea is daily- AND
| Parameter | Type | Required | Notes |
|---|---|---|---|
| organizationId | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
List the organizations this account belongs to — id, name, your role (owner | admin | member), is_personal, plan, and member_count — plus pending invitations awaiting a response (accept them in the web app). Plans, credits, and usage limits are per-organization, and a project belongs to exactly one organization. Pass an organizationId to create_project to target a specific organization, or to get_
| Parameter | Type | Required | Notes |
|---|---|---|---|
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Diagnose where the operator is in their VarynForge journey and get a guided setup path. Call when the operator asks to set up VarynForge, get started, or seems unsure what to do next — and always when list_projects returns empty. Returns the server-derived stage, a stage-tailored pitch to relay to the operator, a setup checklist with done/pending status per step, and the ranked next_actions queue.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
File a note to the VarynForge team: a bug, a missing capability, a friction point, or an operator idea. Call when you hit something VarynForge cannot do, a confusing tool result, or the operator voices frustration or a wish. Whenever the task would benefit from a capability this tool list does not offer, file a missing_capability BEFORE you settle for a workaround with existing tools, even if they
| Parameter | Type | Required | Notes |
|---|---|---|---|
| kind | string | yes | — |
| summary | string | yes | — |
| detail | string | no | — |
| toolContext | string | no | — |
| projectId | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Create a new project — pass either a website URL or a niche description (or both). Returns projectId immediately; niche analysis and asset mapping run async. Poll get_project until niche.analysisStatus is ready. When the operator says whose site this is, pass siteRelation: mine (their own), client (an existing client), or prospect (a site they are pitching) — ask only if it is ambiguous, never gue
| Parameter | Type | Required | Notes |
|---|---|---|---|
| website | string | no | — |
| nicheDescription | string | no | — |
| originInput | string | no | — |
| originType | string | no | — |
| originDescription | string | no | — |
| extras | array | no | — |
| siteRelation | string | no | — |
| organizationId | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get one project — its canonical name (operator-set, falling back to site brand then niche name), niche profile, target audience, current research status, and postsPerWeek (the operator’s publishing cadence, settable via set_posting_cadence; sizes the pitch report’s 90-day sequence). Address the project by name; niche.name is the market niche, not the project name.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get the asset (website/product) associated with a project — URL, name, description, solution profile.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Update a niche profile — name, industry, language, country, target customer, core problem, related terms. Use after the operator refines their market definition; omitted fields keep their current values.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | — |
| name | string | yes | — |
| industry | string | no | — |
| language | string | no | — |
| country | string | no | — |
| targetCustomer | string | no | — |
| coreProblem | string | no | — |
| relatedTerms | array | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
List the project's destinations — where the operator publishes (website, youtube_channel, tiktok, instagram, x, linkedin, local_business). Destination type ids are the format labels lint_draft stores drafts under. Each row carries its capabilities so you never cross-reference other tools: briefChannel is the brief/lint channel the type maps onto (null for open slots), verifiable says lint_dr
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Add a destination to a project — where the operator publishes. Pass type (website | youtube_channel | instagram | tiktok | x | linkedin | local_business) and name with state: 'detected' for a destination that already exists and belongs to the operator (website name = the domain like yourdomain.com; social types = the handle, @ optional), or state: 'planned' for one they intend to build (na
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| state | string | yes | — |
| type | string | no | — |
| name | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
List companies for a project — marked competitors (important / default / ignored) and SERP-discovered companies (unmarked). Sorted important → default → unmarked → ignored, then by domain. Pass importance to filter to one bucket. Capped at 100.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| limit | number | yes | — |
| importance | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Mark a competitor important, default, or ignored. Important applies a 1.25× boost on opportunity scores for clusters where the competitor ranks top-10. Scores are then normalized 0-100 against the highest-scoring cluster, so other clusters may appear to drop in relative ranking even when their absolute (raw) scores did not change — cross-check via get_opportunity_detail.rawOpportunityScore. Ignore
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| companyId | string | yes | — |
| importance | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Add a competitor to a project by domain (e.g. example.com). Marks the competitor as important or ignored on creation.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| domain | string | yes | — |
| importance | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Correct the inferred profile of the project asset — description, primary offer, benefits, key differentiators, use cases. Use when get_project_asset shows claims that contradict what the operator actually sells (profileStaleAt set, or the operator says so). Only the fields you pass are written; arrays replace the whole list. No re-crawl happens. Clears the profileStaleAt flag.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| description | string | no | — |
| primaryOffer | string | no | — |
| benefits | array | no | — |
| keyDifferentiators | array | no | — |
| useCases | array | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Set how many articles per week the operator actually publishes (1-14). Sizes the pitch report’s 90-day content sequence; read back via get_project.postsPerWeek.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| postsPerWeek | integer | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Re-read the project website and re-infer the asset profile (name, description, primary offer, benefits, differentiators, use cases) from its current content. Use before rendering a report when get_pitch_report_payload flags assetProfile.syncedBeforeRun — the stored profile facts may have drifted since they were written. Overwrites the profile facts (fields the site no longer supports inferring are
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Re-crawl the project website and refresh its owned pages. Use when get_project_asset shows mappingStatus "error" or owned pages look stale. Rate-limited per site; returns an error naming the wait time if the cooldown is active.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Start a research run for a project — discovers keywords, evaluates competitors, and writes opportunity clusters. Consumes one credit. Returns { runId }; poll get_research_status for progress. Returns { entitlement } instead when the operator is on the free plan.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
List all projects for the authenticated operator — paginated, sortable by createdAt, niche, or industry. name is the canonical project name (operator-set, falling back to site brand then niche name) — match operator references against it; niche.name is the market niche, distinct metadata. lastActivityAt is the most recent change to the project or any of its content pieces — when the operator s
| Parameter | Type | Required | Notes |
|---|---|---|---|
| limit | number | yes | — |
| cursor | no | — | |
| sorting | array | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get a competitor company detail in a project context — domain, name, importance, top pages in the project SERPs, and top keywords they rank for.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| companyId | string | yes | — |
| projectId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get the at-a-glance read on a project — niche summary, keyword stats, nextActions (the ranked queue of what to do next in this project — offer its first entry when the operator asks "what now?"), and topPriorities: the ranked queue of article suggestions (best first — priorityScore desc; radar-born suggestions carry no score until briefed and rank oldest-first below scored ones; source tells you w
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Poll the latest research run for a project — runId, status, current pipeline phase, progress percent, elapsed seconds, and structured failure diagnostics when failed. failure carries failureClass (upstream_timeout | upstream_rate_limited | invalid_input | internal | unknown), the phase the run died in, retryable (true = transient upstream issue, safe to retry; false = retrying will fail again — fi
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Assemble the client-ready pitch report payload for a completed research run — niche + solution profile, competitor landscape, ranked opportunity map holding GAPS ONLY (0-100 normalized; demand sized as volumeBucket buckets, no search-volume numbers by design; each entry carries overlapStatus net_new|partial plus siteOverlap — covered-keyword share + closest owned pages), coveredOpportunities as a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| runId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get the free starting-point report for a project — a client-facing document assembled from setup-time data: positioning (niche + market profile), the site and its current content inventory, the curated competitor set, and early rising-topic signals. Free on every plan, no research run required. markdown is the ready-to-send render; the structured fields are the same data for custom rendering. lock
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
List content opportunity clusters sorted by opportunity score. Goal filters: fast_wins, high_intent, authority_building, competitor_gap. coverage filters by site-coverage status and defaults to ["gap","partial"] — clusters the site already COVERS (ranks top-10 for a cluster keyword) are hidden unless "covered" is included (refresh candidates). Dismissed clusters (set_opportunity_status) are hidden
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| goal | no | — | |
| excludeInContentPlan | boolean | no | — |
| coverage | array | no | — |
| limit | number | yes | — |
| cursor | no | — | |
| activeMetaCluster | no | — | |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get a cluster detail — top-20 keywords by score, top-10 ranked pages by position, top-5 competitor podium, linked article suggestions, and rawOpportunityScore (un-normalized; list_opportunities returns the 0-100 normalized version).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| clusterId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Dismiss or restore an opportunity cluster. status=dismissed hides it from list_opportunities and the create_content_plan_from_opportunities harvest; status=default restores it. Dismissal lasts until the next research run rewrites the project clusters — for a durable "not my product" signal use set_excluded_terms. Removing a cluster from the pool changes the 0-100 normalization of every remaining c
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| clusterId | string | yes | — |
| status | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Set the project-level exclusion terms — products or topics the operator explicitly does NOT sell (e.g. "wedding suite", "free template", "printing"). Keywords mentioning any term are down-weighted in opportunity scoring and dropped from the content-plan harvest, before results reach the operator. Replaces the whole list; pass [] to clear. Survives research re-runs, unlike per-cluster dismissal.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| terms | array | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
List keywords tracked for a project — text, difficulty, intent, volume bucket (no_traffic | long_tail | average | high). Paginated; supports sorting and intent filter.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| limit | number | yes | — |
| cursor | no | — | |
| sorting | array | no | — |
| filters | object | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get a keyword detail — pages ranking for it with positions and ownership, plus related keywords already tracked in the project.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| queryHash | string | yes | — |
| projectId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
List ranked pages tracked for a project — URL, title, company, query count, ownership. Filter by ownership or company domain.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| limit | number | yes | — |
| cursor | no | — | |
| sorting | array | no | — |
| filters | object | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get a page dossier — URL, title, project rankings, ownership. headingOutline, targetKeywords, and contentAnalysis populate for owned (asset-mapped) pages only.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| pageId | string | yes | — |
| projectId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
List article suggestions for a project — title, status, priority, cluster, intent, source, publishedAt, scheduledFor, and a per-channel distributions rollup ({ channel, count, latestAt, scheduledFor } per channel the content went out on). Use distributions to spot gaps from the list alone — e.g. items with no linkedin entry have no LinkedIn post yet — without per-item reads. Page through suggestio
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| limit | number | yes | — |
| cursor | no | — | |
| status | no | — | |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Create a content plan by harvesting the top-30 opportunity clusters from a completed research run. Auto-creates article suggestions linked to each cluster. Left out of the harvest: dismissed clusters (set_opportunity_status), keywords matching the project exclusion terms (set_excluded_terms), and clusters the site already covers (>=80% of keywords covered — refresh work on existing pages surfaces
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Add a bare article suggestion to a content plan (title + optional intent and reasoning). For richer input that produces a brief-ready suggestion, use create_article_suggestion_with_input.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| contentPlanId | string | yes | — |
| projectId | string | yes | — |
| title | string | yes | — |
| intent | string | no | — |
| reasoning | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Create a brief-ready article suggestion from the operator's own input. Auto-resolves a default content plan; creates/links search-query rows for the keywords; returns suggestionId + contentPlanId. Free-tier compatible (no research run required).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| title | string | yes | — |
| primaryKeyword | string | yes | — |
| secondaryKeywords | array | no | — |
| searchIntent | string | no | — |
| targetAudience | string | no | — |
| angle | string | no | — |
| wordCountTarget | integer | no | — |
| reasoning | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Move an article through the production pipeline. Statuses: planned, generating_brief, brief_ready, drafting, draft_ready, reviewing, ready_to_publish, published. For the published transition use mark_article_published instead — it records the live URL, which Search Console outcome tracking keys off; setting status to published here records no URL. When the article is scheduled to go live later (CM
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | — |
| status | string | yes | — |
| scheduledFor | no | — | |
| lastActor | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Forge a writer-ready brief from an article suggestion. channel picks the brief template: article (default, SEO article outline), reels (hook/beats/shot list), youtube (retention beats/chapters), x (thread posts), linkedin (carousel slide deck: cover hook, one-idea slides, recap, CTA). A suggestion holds one brief per channel — generating a second channel adds a brief without touching the others.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| articleSuggestionId | string | yes | — |
| projectId | string | yes | — |
| force | boolean | no | — |
| channel | string | no | — |
| guidance | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get article suggestion details — metadata, cluster context, brief availability, registered derived assets (carousels, social posts), target keywords with volumes. Call get_article_brief for the full brief. Status semantics: generating_brief with briefQueuedAt set means the brief is QUEUED behind the free daily cap (forges automatically at reset); briefQueuedAt null means actively forging.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| suggestionId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Re-read an article suggestion's verification state without re-linting: the suggestion's single pipeline status plus, per destination format, the stored draft and the latest gate receipt (verdict, per-check detail, thresholds) from its last lint_draft submission. Free and uncapped — always use this instead of lint_draft to recover a known verdict. Pass format to read one destination including t
| Parameter | Type | Required | Notes |
|---|---|---|---|
| suggestionId | string | yes | — |
| format | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get the full content brief for an article suggestion. A suggestion holds one brief per channel — pass channel (article default | reels | youtube | x | linkedin) to pick which. Every brief carries hookStatement (one verbatim-usable hook sentence naming the reader payoff); article briefs also carry keyStats (a stat bank of { claim, value, source, sourceUrl } entries for evidence blocks and data sl
| Parameter | Type | Required | Notes |
|---|---|---|---|
| suggestionId | string | yes | — |
| compact | boolean | no | — |
| channel | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Delete an article suggestion and its associated brief. Cascades to keyword and cluster links.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get a brief as inline markdown the host agent can use as a writing prompt. Pass format=markdown_inline, and channel (article default) to pick which of the suggestion’s per-channel briefs to render. Returns the brief assembled into a single markdown string capped at ~8K chars — markdown only; the structured fields are get_article_brief’s job and are omitted here.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| suggestionId | string | yes | — |
| projectId | string | yes | — |
| format | string | yes | — |
| channel | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Record that an article went live at a URL. Flips the suggestion to published, writes the distribution ledger row, stamps the Passport, and pings IndexNow. Call it only once the URL actually resolves — the IndexNow ping fires immediately, and a ping for a dead URL is wasted (search engines crawl, hit the 404, drop it; nothing re-pings later). For a CMS-scheduled article, set scheduledFor via update
| Parameter | Type | Required | Notes |
|---|---|---|---|
| id | string | yes | — |
| publishedUrl | string | yes | — |
| publishedAt | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Register a derived asset (LinkedIn carousel PDF, social post, video, image) produced from an article suggestion. Appends a distribution-ledger row so the suggestion shows everything it produced — the article plus its derivatives — for content-ROI reporting (get_article_suggestion returns them as derivedAssets). Pass channel (reels | youtube | x | linkedin) so the app can show per-channel distrib
| Parameter | Type | Required | Notes |
|---|---|---|---|
| suggestionId | string | yes | — |
| kind | string | yes | — |
| channel | string | no | — |
| scheduledFor | string | no | — |
| url | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Get the verification rubric for an article suggestion: the submission format for the channel (markdown | --- separated thread | post-with-slides | production script), required vs advisory checks, the exact numeric limits each check grades against (checkParams), plus the brief fields lint_draft reads (keywords, outline, FAQ, channel payload). Pass channel to read the rubric of that channel's brie
| Parameter | Type | Required | Notes |
|---|---|---|---|
| suggestionId | string | yes | — |
| channel | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Submit a draft for verification against its brief. Returns a pass/flag verdict with per-check detail. Pass moves the article to ready_to_publish; flag moves it to draft_ready for revision. channel (article | reels | youtube | x | linkedin) declares WHICH of the suggestion's per-channel briefs the draft is graded against AND the submission shape — always pass it for non-article content; when omit
| Parameter | Type | Required | Notes |
|---|---|---|---|
| suggestionId | string | yes | — |
| draft | string | yes | — |
| format | string | no | — |
| channel | string | no | — |
| waiveChecks | array | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
One-call writer handoff: returns a compact writing payload for an article suggestion (brief essentials, keywords, acceptance criteria, lint instructions). Compact by design — FAQs cap at 6 and long sections degrade to fit a deep-link budget; the FULL brief is get_article_brief and the full check list is get_lint_rubric, so verify against those, not this. deepLinks (ChatGPT/Claude URLs embedding th
| Parameter | Type | Required | Notes |
|---|---|---|---|
| suggestionId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Score a raw article idea against the project's niche without writing anything to the plan. Returns a title, angle, search intent, related queries, a coarse demand estimate, and a 0-100 niche-fit score. Pass the returned fields to accept_idea to commit the idea as a brief-ready suggestion.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| ideaText | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Commit an expanded idea (from expand_idea) to the content plan as a brief-ready article suggestion. Stores the verbatim idea as provenance, lands the suggestion in generating_brief, and forges its brief automatically (free tier: queues past the daily cap). Returns the new suggestionId.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| ideaText | string | yes | — |
| title | string | yes | — |
| angle | string | yes | — |
| searchIntent | string | yes | — |
| relatedQueries | array | no | — |
| demandEstimate | string | no | — |
| nicheFit | integer | no | — |
| reasoning | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Attach real search data to one article idea that is already in the project — runs one live Google search per target keyword and returns volume bands and the pages currently ranking for each. Use after create_article_suggestion_with_input, or on any existing suggestion the operator wants judged on data instead of instinct. Opportunity score and cluster placement are returned only when the project h
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| suggestionId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
List the latest emergent-topic radar snapshot for a project: rising narrative topics (label, summary, momentum, novelty, drivers, evidence) with per-topic index and how many article suggestions were already added from each. Returns null when the project has no radar snapshot yet. Use expand_radar_topic to turn a topic into article angles.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Expand one radar topic (by signalObservationId + topicIndex from list_radar_topics) into 3-6 candidate article angles with title, intent, and editorial positioning; each angle is flagged when a near-duplicate already exists in the content plan. Optionally pass customPov for angles from a specific point of view. No writes — pass chosen angles to add_radar_topic.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| signalObservationId | string | yes | — |
| topicIndex | integer | yes | — |
| customPov | string | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
Add selected angles from a radar topic to the content plan as radar-born article suggestions (provenance preserved; exact-title duplicates skipped). Angles come from expand_radar_topic; call list_radar_topics first to get signalObservationId + topicIndex. Auto-creates the content plan when the project has none. Each added suggestion lands in generating_brief and its brief forges automatically (fre
| Parameter | Type | Required | Notes |
|---|---|---|---|
| projectId | string | yes | — |
| signalObservationId | string | yes | — |
| topicIndex | integer | yes | — |
| angles | array | yes | — |
| topicAngleTotal | integer | no | — |
| context | string | yes | One sentence: what is the operator trying to achieve right now? Describe their goal, not this tool's purpose. |
- Every tool — any call limit is its publisher’s, not ours
- No card, and mcprush charges nothing for it
- Runs at its publisher’s own address — this marketplace is not in the path
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install VarynForge or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
This listing is an address its publisher runs, and you connect to it directly — this marketplace is not in the path. The scanner reads packages and public source, and an address is neither. So there is no grade — not a withheld one, an unmeasured one.
Release history
This is an address its publisher runs: which release it serves is theirs to choose, so there is nothing here to pin. The history below is for reading; the current release on file is 1.21.0.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish VarynForge can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.