Skip to content
VarynForge logo

VarynForge MCP server

Which servers in the official MCP registry are VarynForge's own, whether they answer, and what they offer. A program checked each of these, nobody copied them from a product page.

read 2026-10-21

← Back to VarynForge

Whose server it is
  • Registry namecom.varynforge/serververified in the MCP registry

The registry name sits under varynforge.com. The registry only lets a publisher use that namespace after proving control of the domain through DNS or HTTP.

When we asked itchecked 2026-10-21
  • Stateanswerschecked 2026-10-21
  • Tools57
  • Server calls itselfVarynForge
  • Server version1.21.0
  • Protocol version2025-06-18

On 2026-10-21 the server answered initialize and tools/list without a sign-in. First answer in 203 ms.

Should an agent connect itNot proven either way yet
  • Its tools do every use case we checked: Identify content gaps against what the site already covers; Generate writer-ready article briefs in batch.
  • Checked on 6 of the 7 days it takes to judge reliability.

Once connected

  • Keep approval on for send_feedback: they delete, send or pay without saying so.
  • send_feedback, create_project, update_niche, add_destination, set_competitor_importance change data without a sign-in: anyone with the address can call them.
  • Its definitions take about 17067 tokens of context: enable only the tools a task needs.
  • Parameters are untyped or undescribed in 53 of 57 tools: check arguments before calling.

Said by rules from the measurements above. The likely first call is a model's pick from the tool list; read its description before relying on it.

Measured dailydaily checks: 6, the first on 2026-10-21
  • INITE MCP scoreafter a weeka score needs 7 daily checks: 6 so far
  • What an agent can do with it2 of 2 use cases
  • Answeredmeasuring6 of the 7 daily checks it takes to print a share
  • Median first answer224 ms
  • Space in an agent's context≈ 17,067 tokensthe definitions of all its tools (57), which an agent carries on every turn
  • Tool definitionsB · 85 of 100
  • Typed results0 of 57 toolsdeclared outputSchema: results come typed, read once
  • Parameters without a description: in 53 of 57

What an agent can do with it

  • can do · Identify content gaps against what the site already covers
  • can do · Generate writer-ready article briefs in batch
  • not sure · Track articles from planned to published on a kanban board

Each of the product's use cases, put to Jev against this server's tool list: can an agent do it with these tools?

Worth a look

  • Tools that delete, send or pay without telling the client so: send_feedback
  • Tools that change data, on a server that answers without a sign-in: send_feedback, create_project, update_niche, add_destination, set_competitor_importance

A program checks the server once a day: initialize and tools/list, no model. Tokens are the definitions' length at about four characters a token. The grade averages six checks of every tool's name, description, schema and annotations; it says how well the tools are described, not whether they work. The score weighs what was measured and nothing else: answering (30%), doing the product's job (25%), definitions (20%), context (10%) and use (15%). A part that was not measured is left out, and a hidden instruction caps the score at 40. The state of vendors' MCP servers: method and numbers →

Tools it offers57 tools · read 2026-10-21
  • get_instructions

    Get the VarynForge agent guide — workflow paths (free vs paid), token-economy rules, walls and upgrade conversation conventions. Read this at session start.

  • get_changelog

    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.

  • get_writer_system_prompt

    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…

  • get_account_status

    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…

  • list_organizations

    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…

  • get_onboarding_guide

    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…

  • send_feedback

    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…

  • create_project

    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…

  • get_project

    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…

  • get_project_asset

    Get the asset (website/product) associated with a project — URL, name, description, solution profile.

  • update_niche

    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.

  • list_destinations

    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…

  • add_destination

    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…

  • list_competitors

    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…

  • set_competitor_importance

    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…

  • add_competitor_by_domain

    Add a competitor to a project by domain (e.g. example.com). Marks the competitor as important or ignored on creation.

  • update_asset_profile

    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…

  • set_posting_cadence

    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.

  • resync_asset_profile

    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…

  • remap_asset

    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.

  • start_research_run

    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…

  • list_projects

    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…

  • get_competitor_detail

    Get a competitor company detail in a project context — domain, name, importance, top pages in the project SERPs, and top keywords they rank for.

  • get_project_overview

    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…

  • get_research_status

    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…

  • get_pitch_report_payload

    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…

  • get_starting_point_report

    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…

  • list_opportunities

    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…

  • get_opportunity_detail

    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).

  • set_opportunity_status

    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…

  • set_excluded_terms

    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…

  • list_keywords

    List keywords tracked for a project — text, difficulty, intent, volume bucket (no_traffic | long_tail | average | high). Paginated; supports sorting and intent filter.

  • get_keyword_detail

    Get a keyword detail — pages ranking for it with positions and ownership, plus related keywords already tracked in the project.

  • list_pages

    List ranked pages tracked for a project — URL, title, company, query count, ownership. Filter by ownership or company domain.

  • get_page_dossier

    Get a page dossier — URL, title, project rankings, ownership. `headingOutline`, `targetKeywords`, and `contentAnalysis` populate for owned (asset-mapped) pages only.

  • list_article_suggestions

    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)…

  • create_content_plan_from_opportunities

    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…

  • add_article_suggestion

    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.

  • create_article_suggestion_with_input

    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…

  • update_article_status

    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…

  • generate_article_brief

    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…

  • get_article_suggestion

    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…

  • get_draft_status

    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…

  • get_article_brief

    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…

  • delete_article_suggestion

    Delete an article suggestion and its associated brief. Cascades to keyword and cluster links.

  • download_brief_markdown

    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…

  • mark_article_published

    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…

  • register_derived_asset

    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…

  • get_lint_rubric

    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…

  • lint_draft

    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 |…

  • get_write_handoff

    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…

  • expand_idea

    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

    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…

  • check_idea

    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…

  • list_radar_topics

    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…

  • expand_radar_topic

    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…

  • add_radar_topic

    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…

How to connect

Add the server to your MCP client config. Claude Desktop, Cursor and most other clients read this shape:

{
  "mcpServers": {
    "varynforge": {
      "type": "http",
      "url": "https://app.varynforge.com/api/mcp"
    }
  }
}

Add it

Claude Code, in a terminal

claude mcp add --transport http varynforge https://app.varynforge.com/api/mcp

Add to CursorAdd to VS Code

claude.ai, ChatGPT and other clients: add https://app.varynforge.com/api/mcp as a custom connector in the settings.

Each line is something a program found when it went looking: the registry entry, the server's own answer, a spec that parses. A missing line means we did not find it, not that it does not exist.