mcpField
G
Gridar

Gridar

Remote
gridar.appBusiness & Marketing0Updated 1w ago

About Gridar

Gridar exposes its SEO platform to MCP clients through tools for managing sites, content, keywords, and Search Console data, as well as running SEO checks. It is intended for Gridar account users on Pro or Agency plans; hosted access provides 69 tools.

Key features

  1. 01Manage sites and articles
  2. 02Generate and update content
  3. 03Track keywords and SEO data
  4. 04Run content and site audits
  5. 05Analyze AI-search visibility

Use cases

  1. 01Audit published articles for SEO issues
  2. 02Generate and maintain site content
  3. 03Review keyword and Search Console data
  4. 04Assess readiness for AI answers

MCP support

Provides 69 `gridar_*` tools through the hosted Streamable HTTP endpoint `https://mcp.gridar.app/mcp`, with OAuth 2.1 and PKCE or a Bearer token. Tools expose Gridar account data and actions to MCP clients; API access requires a Pro or Agency plan.

Configuration

Remote servers need no local install. Pick your client, then copy the config or install in one click.

Endpointhttps://mcp.gridar.app/mcp
Copy install command
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

Run commands in a terminal; paste JSON into the client’s MCP config and restart. Servers that need sign-in will prompt on first connect.

Tools

Details

From the project README

@gridar/mcp-server

Model Context Protocol server for Gridar.

The server exposes the Gridar REST API (https://api.gridar.app/api/v1) as 69 gridar_* tools. An MCP client can read and change the sites, articles, landings, tracked keywords, autopilot, site memory and Search Console data of the Gridar account behind the token, and run SEO checks on them.

Versions

DistributionVersionTools
Hosted server https://mcp.gridar.app/mcp0.7.069
This source (mcp-server/)0.7.069
npm package @gridar/mcp-server0.4.243

Checked on 2026-10-21 with npm view @gridar/mcp-server version and the hosted server card. The npm package lags behind: use the hosted server.

Requirements

  • A Gridar account on the Pro or Agency plan.
  • The OAuth login succeeds on every plan, but on Trial and Solo every tool call answers HTTP 403: "Accès API réservé aux plans Pro et Agence".

Install: hosted server (recommended)

ItemValue
URLhttps://mcp.gridar.app/mcp
TransportStreamable HTTP
AuthenticationOAuth 2.1 with PKCE, or Authorization: Bearer btb_xxx
Official MCP registryapp.gridar/gridar
Public server card (no token)https://mcp.gridar.app/.well-known/mcp/server-card.json: name, version, tool list
Healthhttps://mcp.gridar.app/health

Nothing to install on your machine.

What the OAuth login does
  1. You add https://mcp.gridar.app/mcp to your client.
  2. Without a token, the server answers 401 with a WWW-Authenticate header that points to /.well-known/oauth-protected-resource. The client discovers the OAuth endpoints from there.
  3. The client opens the Gridar login page. Sign in if needed, then click Autoriser.
  4. Gridar creates an API token named after the client (for example MCP - Claude Code) and hands it to the client.
  5. The token shows up at https://www.gridar.app/account/api-keys. Revoke it there to cut access.
Claude (claude.ai and Claude Desktop)

On claude.ai: Settings > Connectors, add a custom connector with the URL https://mcp.gridar.app/mcp. Claude opens the Gridar login page; authorize and the connector is live.

Claude Desktop through its config file uses the mcp-remote bridge:

{
  "mcpServers": {
    "gridar": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.gridar.app/mcp"]
    }
  }
}

The file lives at ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows). Restart Claude Desktop afterwards.

ChatGPT
  1. Open Settings > Connectors, or turn on Developer Mode for custom connectors.
  2. Add a connector by URL: https://mcp.gridar.app/mcp.
  3. ChatGPT opens the Gridar login page. Authorize.

OpenAI restricts custom connectors by account type. The Gridar page lists ChatGPT Pro, Team, Enterprise, or Developer Mode; check OpenAI's current rules.

Claude Code
claude mcp add --transport http gridar https://mcp.gridar.app/mcp

OAuth starts on the first call. For a session without a browser, pass a token in a header:

claude mcp add --transport http gridar https://mcp.gridar.app/mcp \
  --header "Authorization: Bearer btb_xxx"
Cursor

Settings > MCP > Add server, server of type URL: https://mcp.gridar.app/mcp.

Codex CLI, SDKs and other clients

Any MCP client that speaks Streamable HTTP connects to https://mcp.gridar.app/mcp and finds the OAuth flow on its own (see step 2 above). A headless agent sends Authorization: Bearer btb_xxx with a token created at https://www.gridar.app/account/api-keys.

Install: local stdio via npm

The npm package is behind. @gridar/mcp-server on npm is 0.4.2 with 43 tools. The hosted server and this source are 0.7.0 with 69 tools. The tool list in this README matches 0.7.0.

The 26 tools missing from npm 0.4.2: gridar_action_strategic_opportunity, gridar_ai_overview_readiness, gridar_ai_visibility_summary, gridar_approve_strategy, gridar_build_cluster, gridar_check_renderability, gridar_classify_intent, gridar_cluster_map, gridar_create_landing, gridar_export_page_prompt, gridar_generate_landing, gridar_generate_sister_article, gridar_index_coverage, gridar_indexnow_setup, gridar_indexnow_submit, gridar_link_opportunities, gridar_link_pages, gridar_list_strategic_opportunities, gridar_mark_page_built, gridar_propose_keyword_strategy, gridar_pull_build_queue, gridar_refresh_strategic_opportunities, gridar_run_ai_visibility, gridar_serp_analyze, gridar_site_seo_score, gridar_submit_sitemap.

The package installs the gridar-mcp binary and reads its token from BLOG_DASHBOARD_TOKEN.

Claude Desktop:

{
  "mcpServers": {
    "gridar": {
      "command": "npx",
      "args": ["-y", "@gridar/mcp-server"],
      "env": {
        "BLOG_DASHBOARD_TOKEN": "btb_xxx"
      }
    }
  }
}

Claude Code:

claude mcp add gridar \
  --env BLOG_DASHBOARD_TOKEN=btb_xxx \
  -- npx -y @gridar/mcp-server

Any other client: spawn the process over stdio with the token in its environment.

BLOG_DASHBOARD_TOKEN=btb_xxx npx -y @gridar/mcp-server

To get all 69 tools locally, build this source instead (see Development).

Environment variables

Names only. Never commit a real token.

Stdio (local)
VariableRequiredDefaultRole
BLOG_DASHBOARD_TOKENyesnoneGridar API token (btb_xxx) sent as Authorization: Bearer
BLOG_DASHBOARD_API_BASEnohttps://api.gridar.app/api/v1Gridar API base URL
Self-hosted HTTP (node dist/http.js)
VariableDefaultRole
PORT8080Listening port
BLOG_DASHBOARD_API_BASEhttps://api.gridar.app/api/v1Gridar API the server forwards calls to
MCP_PUBLIC_BASEhttp://localhost:<PORT>Public URL of this server, used in the OAuth metadata and redirects
GRIDAR_BASEhttps://gridar.appGridar app that hosts the OAuth login page (/oauth/mcp-authorize)
MCP_REQUIRE_AUTHonSet to false to skip the Bearer check (development only)
MCP_ALLOWED_ORIGINS*Comma-separated list of allowed CORS origins
OAUTH_CLIENT_IDbuilt-in valueClient id returned by dynamic client registration
OAUTH_CLIENT_SECRETbuilt-in valueClient secret returned by dynamic client registration

In HTTP mode the token comes from each request's Authorization header and is scoped to that request with AsyncLocalStorage. BLOG_DASHBOARD_TOKEN stays a fallback: do not set it on a shared server with MCP_REQUIRE_AUTH=false, or every caller acts as that account.

HTTP endpoints:

Method and pathRole
POST /mcpMCP Streamable HTTP: initialize and tool calls
GET /mcpSSE notification stream for an open session
DELETE /mcpCloses a session
GET /health{status, name, version, transport, oauth}
GET /.well-known/mcp/server-card.jsonPublic card: server info and tool list, no token needed
GET /.well-known/oauth-protected-resourceOAuth protected resource metadata (RFC 9728)
GET /.well-known/oauth-authorization-serverOAuth server metadata (RFC 8414)
POST /registerDynamic client registration (RFC 7591)
GET /authorize, GET /callback, POST /tokenOAuth authorization code flow with PKCE (S256 or plain)

Plans and limits

PlanAPI and MCP accessRequests per hourAI articles per month
Trialno (403)01
Solono (403)08
Proyes3060
Agencyyes200200

Sources: PLAN_API_LIMITS in backend/sites_mgmt/api_v1.py, Subscription.get_limits() in backend/sites_mgmt/models.py.

  • Each tool call sends one request to the Gridar API and counts against the hourly limit. Past the limit the API answers 429.
  • Three tools debit the monthly article quota, or one credit once the quota is used up: gridar_generate_article, gridar_generate_sister_article, gridar_generate_landing.
  • An API error comes back as a tool error: Gridar API error (HTTP <status>): <message>, followed by the JSON body.

Tools (69)

The Effect column flags what a call changes:

  • destructive: deletes or disables something; the client should confirm first.
  • publishes: puts content live or makes a page public.
  • quota: debits one article from the monthly quota, or one credit.
  • writes: changes data in Gridar without putting anything live.
  • none: read only.
Account and sites
ToolWhat it doesEffect
gridar_get_meYour plan, hourly API limit, monthly article quota and usagenone
gridar_list_sitesYour sites: id, domain, hosting mode, default languagenone
gridar_get_siteFull config of one site: integrations, default language, knowledge base, competitors, GSC connection, autopilot, author E-E-A-T fieldsnone
gridar_update_siteChanges editable site fields: name, description, knowledge base, competitors, default language, author bio and credentials, public blog domainwrites
Articles
ToolWhat it doesEffect
gridar_list_articlesArticles of a site, filtered by status, language and count (default 25, max 100)none
gridar_get_articleFull content (HTML and metadata) of one article, by site_id and slugnone
gridar_generate_articleGenerates an SEO article from a topic or a title. Saved as draft on hosted sites, published live on WordPress, Shopify and Webflowquota, publishes on CMS sites
gridar_generate_sister_articleTranslates and adapts an article into another language in the same translation group, so hreflang links up. Created as draft. Hosted sites onlyquota
gridar_create_articleCreates a hand-written article on a hosted site. No AI, no quotawrites; publishes with status: published
gridar_update_articleChanges title, content, excerpt, status, cover image or author of an article, on every site mode (hosted, external, WordPress, Shopify, Webflow)writes; publishes with status: published
gridar_delete_articleDeletes an article permanently, on every site mode. WordPress, Shopify and Webflow deletes skip the trashdestructive
Audit and content
ToolWhat it doesEffect
gridar_audit_articleAudits raw content: 0 to 100 score and fixes on length, keyword density, headings, links, metanone
gridar_get_briefContent brief for a keyword: search intent, outline, entities, FAQ candidates, E-E-A-T signalsnone
gridar_bulk_auditAudits every published article of a site in parallel (Gemini): aggregated scores and top issuesnone
gridar_check_readabilityReadability scores of a text (Flesch-Kincaid, ARI)none
gridar_check_plagiarismAI-content and plagiarism check of a text through Originality.ainone
gridar_check_hreflangChecks translation group consistency of a site's published articles. site_id requirednone
gridar_detect_cannibalizationPairs of articles that target the same intent or keywords, across languages and statusesnone
gridar_suggest_internal_linksInternal links to insert in the content you pass, picked from the site's published articlesnone
gridar_ai_overview_readiness0 to 100 score of how ready an article is for AI answers, from 5 weighted checks (FAQ, H2/H3 structure, E-E-A-T, concrete data, extractable paragraphs), with suggestionsnone
Site health
ToolWhat it doesEffect
gridar_site_seo_scoreComposite 0 to 100 site score from 9 weighted checks (indexability, author bio, business model, GSC, approved pillar and spokes cluster, hreflang, Core Web Vitals, FAQ schema, transactional intents stuck on blog posts), with action_itemsnone
gridar_check_renderabilityFetches a URL and says whether the HTML is server-rendered or a JavaScript shell Googlebot must render (100 visible words or fewer flags a suspect SPA)none
gridar_page_speedPageSpeed Insights on a URL, mobile or desktop: Core Web Vitals and suggestionsnone
gridar_find_broken_linksOutgoing links in the site's articles that answer 4xx, 5xx or time outnone
gridar_get_content_decayArticles whose GSC impressions or clicks dropped over N days (7 to 90, default 30), with a refresh, expand or redirect suggestionnone
Keywords, SERP and competitors
ToolWhat it doesEffect
gridar_list_keywordsTracked keywords and their latest recorded positionnone
gridar_track_keywordAdds a keyword to track, or reactivates a removed one. A daily cron records its positionwrites
gridar_untrack_keywordStops tracking a keyword (soft delete). Position history is kept; gridar_track_keyword brings it backwrites
gridar_snapshot_keywordsRecords the position of every tracked keyword of a site nowwrites
gridar_suggest_keywordsKeywords to track, suggested by Claude from the site memory and homepagenone
gridar_keyword_researchExpands a seed keyword into related queries (Serper related searches and People Also Ask, Gemini variants), grouped into families, with the status of each provider. No volume, no difficultynone
gridar_people_also_askGoogle "People also ask" questions for a keywordnone
gridar_classify_intentSearch intent of a keyword (transactional, commercial, informational, navigational, local) and a confidence scorenone
gridar_analyze_competitorsGoogle top 10 for a keyword: average word count, common headings, entity coverage, gapsnone
gridar_serp_analyzePer-URL metrics of the top 10 (word count, H1/H2/H3, FAQ, video) and averages, to size a competing articlenone
gridar_suggest_competitorsLikely SEO competitors, from the homepage and tracked keywordsnone
gridar_link_opportunitiesCandidate sites for backlink outreach on a keyword: domain, URL, title, snippet, source querynone
Strategy, landings and clusters
ToolWhat it doesEffect
gridar_propose_keyword_strategyProposes a structure for a keyword: single landing, pillar and cluster, comparison table, local landing or blog post. Re-running refreshes a draft, never an approved strategywrites
gridar_approve_strategyApproves a strategy: landings are AI-generated as drafts, articles wait for gridar_generate_articlewrites
gridar_create_landingCreates a hand-written structured landing (hero, value props, social proof, FAQ, bottom CTA). No AI, no quota. Hosted sites onlywrites; publishes with status: published
gridar_generate_landingAI-generates a full landing from a keyword, saved as draft on the hosted sitequota
gridar_link_pagesAdds a contextual link from one page to another on the same site: converts the anchor text in place, or appends a "Voir aussi" linewrites (edits the source page)
gridar_cluster_mapTopic clusters of the site: pillar, spokes, covered pages, missing pages. No LLM callnone
gridar_build_clusterBuild prompts for a pillar and its spokes, internal links included. Adds missing keywords to tracking. No LLM call, no quota: the agent writes the copywrites
Strategic opportunities
ToolWhat it doesEffect
gridar_refresh_strategic_opportunitiesRuns the opportunity engine on tracked keywords with transactional, commercial or local intent that have no landing yet. One Claude call per keyword, max_keywords default 8, cap 20writes
gridar_list_strategic_opportunitiesCached opportunities: page type, title, URL path, hook, capture mechanism, conversion path, angle, priority, traffic estimate (see Known limits)none
gridar_action_strategic_opportunityapprove generates the landing as draft and marks the opportunity done; dismiss hides it; restore brings it backwrites
gridar_export_page_promptReady-to-paste prompt for your own AI tool (ChatGPT, Lovable, v0, Bolt...): landing_id to integrate an existing landing verbatim, opportunity_id to write a page from the brief. Templating only, no quotanone
Delivery through an agent

For a custom-built site Gridar cannot publish to. Set the site's delivery mode to agent in the dashboard.

ToolWhat it doesEffect
gridar_pull_build_queueQueue of pages to build in your own repo: landing briefs, generated articles to integrate verbatim, article briefs. No LLM call, no quotanone
gridar_mark_page_builtReports a queued page as live, with its URL. Gridar drops it from the queue and ties it to rank tracking and proof of resultswrites
Google Search Console and indexing
ToolWhat it doesEffect
gridar_gsc_queriesGSC queries (impressions, clicks, position) for one article over N days (default 28, limit 50). GSC connection requirednone
gridar_index_coverageWhich expected pages Google has indexed: a site: query on any site, plus the GSC URL Inspection status and reason when GSC is connected (max_inspect default 25)none
gridar_submit_sitemapRe-submits the sitemap to Google Search Console. Needs GSC with write access. Does not force indexingwrites (sent to Google)
gridar_indexnow_setupThe site's IndexNow key and the key file to host at the domain root. Creates the key on first callwrites
gridar_indexnow_submitSubmits URLs, or the sitemap URLs, to IndexNow: Bing, Yandex, Seznam, Naver. Not Googlewrites (sent to IndexNow)
AI visibility
ToolWhat it doesEffect
gridar_ai_visibility_summaryReturns available: false, counts at 0 and a note: no AI engine is queried from the dashboard yetnone
gridar_run_ai_visibilityAnswers HTTP 501 with code ai_visibility_unavailable and writes nothingnone
Autopilot
ToolWhat it doesEffect
gridar_get_autopilotAutopilot config and state: enabled, weekly count, last run, next run, last errornone
gridar_set_autopilotTurns on or configures autopilot: enabled, weekly_count (1 to 7), auto_publishwrites; publishes from then on with auto_publish: true
gridar_run_autopilot_nowRuns one autopilot cycle now, outside the schedulewrites; publishes when auto_publish is on
Site memory
ToolWhat it doesEffect
gridar_list_memoriesThe site's memory chunks: articles, knowledge base, manual notes, decisions. Paginatednone
gridar_add_memoryAdds a note. Kinds manual and decision weigh more in future generationswrites
gridar_delete_memoryDeletes one memory chunkdestructive
gridar_rebuild_memoryRe-chunks and re-embeds the knowledge base and published hosted articles (Voyage AI). Existing chunks are not wipedwrites
Proof of results and reporting
ToolWhat it doesEffect
gridar_proof_summaryImpressions and clicks gained according to GSC, and the 5 articles that gained the mostnone
gridar_proof_attributionPer-article snapshots at day 30, 60 and 90 against the baseline; filter with post_idnone
gridar_enable_proof_shareTurns on the public read-only proof page and returns its URL. rotate: true issues a new link and kills the old onepublishes
gridar_revoke_proof_shareTurns off the public proof page: the URL answers 404 at once. Data is keptdestructive
gridar_weekly_digestThe last 7 days of a site: traffic, rankings, content decaynone

Conversation examples

  • "Audit site 12 and give me the 3 fixes to make first." Claude calls gridar_site_seo_score, then reads its action_items.
  • "Pull the pages to build for site 12 and create them in this repo." Claude Code calls gridar_pull_build_queue, writes each page, deploys, then calls gridar_mark_page_built with each live URL.

Tools take a numeric site_id: the site must already exist in your Gridar account. gridar_list_sites returns the ids.

Known limits

  • AI visibility is not wired. No AI engine is queried from the dashboard. gridar_run_ai_visibility answers 501 (ai_visibility_unavailable) and stores nothing; gridar_ai_visibility_summary returns available: false with zero counts, and excludes results from the former simulation. For a one-off check, the tool description points to the free checker at https://www.gridar.app/tools/ai-visibility-checker.
  • No search volume, no keyword difficulty. gridar_keyword_research returns neither, and estimated_intent is guessed from the words of the keyword. Read its sources field: a short list can mean a provider failed or returned nothing.
  • Opportunity estimates often read 0. monthly_volume in strategic opportunities comes from a best-effort read of the Serper search response. When Serper returns no volume field, monthly_volume, estimated_visits and the lead ranges are 0 and qualitative_traffic is inconnu.
  • Rank depth. The daily cron keeps the largest organic result set from up to three Serper calls; gridar_snapshot_keywords makes a single call. In both cases a page ranked below the results Serper returns is recorded as not ranked.
  • gridar_generate_article defaults to French when language is omitted (the backend reads language or falls back to fr). It answers 422 until the site has a business model and an author bio, 409 (delivery_blocked) when the site has no delivery path, and 402 when quota and credits are used up.
  • gridar_update_article identifies the article by slug; there is no field to change the slug.
  • gridar_check_hreflang needs site_id. The backend ignores the html argument.
  • gridar_suggest_internal_links needs content. The backend does not read article_slug or keyword.
  • gridar_check_plagiarism needs at least 50 characters, and answers 503 when Originality.ai is not configured on Gridar's side.
  • Landings (gridar_create_landing, gridar_generate_landing) and gridar_generate_sister_article work on hosted sites only.
  • IndexNow does not reach Google, and re-submitting a sitemap does not force Google to index anything.
  • Tokens. A token grants every tool on every site of the account, deletions included. There is no read-only token. Each OAuth authorization creates a new token; old ones stay active until you revoke them at https://www.gridar.app/account/api-keys.
  • OAuth state lives in memory. Codes expire after 5 minutes, and a server restart during the login invalidates the pending login: start the connection again.

Development

cd mcp-server
npm install
npm run build
BLOG_DASHBOARD_TOKEN=btb_xxx node dist/index.js   # stdio (npm start)
PORT=8080 node dist/http.js                       # HTTP (npm run start:http)

Debug with the MCP Inspector:

BLOG_DASHBOARD_TOKEN=btb_xxx npx @modelcontextprotocol/inspector node dist/index.js

Tool definitions (name, description, input schema) live in src/index.ts, the API client in src/api.ts, the HTTP server and OAuth flow in src/http.ts.

Links

License

MIT

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.