Documentação do conector
Versão 0.3.0. Servidor MCP (Streamable HTTP, só POST) em https://organiqgeo.com/mcp. Todas as ferramentas são somente leitura (readOnlyHint: true).
Autenticação
- OAuth 2.1 (claude.ai, Claude Desktop, Claude Code, ChatGPT): sem credencial, uma chamada a ferramenta protegida devolve
401comWWW-Authenticate: Bearer resource_metadata="https://organiqgeo.com/.well-known/oauth-protected-resource/mcp"; o cliente lê o protected resource metadata e o metadata do authorization server, identifica-se por Client ID Metadata Document ou registra-se em/oauth/register, e abre/oauth/authorizecom PKCE S256. O usuário entra com o Google e aprova na tela do Organiq; só contas com pelo menos uma propriedade conseguem aprovar. Escopos:mcp:read,mcp:write(reservado),offline_access. Access token: 1 h; refresh token: 30 dias, rotacionado a cada uso. - API key (Claude Code, Cursor, scripts):
Authorization: Bearer gy_live_…, criada na sua conta; só o hash fica no servidor. - Ferramentas públicas (sem login):
get_capabilities,get_ctr_benchmark,check_connection.
Unidades e períodos
clicks/impressions inteiros; ctr é fração 0–1 (0.052 = 5,2 %); position é média ponderada por impressões (menor é melhor); datas yyyy-mm-dd. Período padrão: 28 dias terminando na última data sincronizada (o Search Console atrasa ~3 dias). Comparação padrão: janela anterior do mesmo tamanho. Toda resposta devolve site, period, comparison, filters e units.
Ferramentas (18)
| Nome | O que faz / quando usar | Parâmetros |
|---|---|---|
get_capabilitiespública What Organiq provides | Returns a factual overview of this connector: what data it holds (Google Search Console synced daily into Organiq, plus GA4 referral sessions from AI assistants), the list of tools with when to use each, units, default periods, how to connect an account (OAuth or API key), rate limits and example questions. Works without signing in. Use it first when you do not know what this server can answer. / Visão geral factual do conector, sem login: dados, ferramentas, unidades, como conectar, limites. | language |
get_ctr_benchmarkpública Generic CTR-by-position benchmark | Returns the generic organic click-through-rate curve by Google position (1–20, fraction 0–1) used by score_opportunities and find_page_poaching_opportunities as the fallback when a property lacks its own volume, optionally interpolated for a fractional position. No account needed; no property data involved. Use it to estimate expected clicks for a position or to explain a CTR gap. / Curva genérica de CTR por posição, sem login. | position, impressions |
check_connectionpública Connection status | Reports whether this request is authenticated and, if so, which Organiq account it uses (name, plan, how it authenticated), how many Search Console properties are available with their data coverage, and what is missing (no account, no properties, no GA4) with the URL that resolves each gap. Without credentials it explains how to connect. Use it when a tool returned unauthorized/site_not_found or before a first analysis. / Diz se há conta, propriedades, plano e o que falta, com a URL para resolver. | — |
list_sitesProperties in the account | Lists the Search Console properties synced for the signed-in account: id, siteUrl (Search Console format), displayName, tags, branded_terms (used by the brand filter), whether GA4/Bing are mapped and the data coverage (dataFrom/dataTo, web search). Use it first when you do not know the exact name of a site or need the date range available. Default: visible properties only. / Propriedades da conta com cobertura de dados. | includeHidden |
get_site_summaryProperty summary | Totals of clicks, impressions, CTR and average position for one property over the period, with the comparison period and the change (absolute, Pct as fraction, ctrPoints in percentage points, position difference where negative means improvement). Accepts all filters (country, device, brand, page, query). Start here for "how is site X doing". / Resumo da propriedade com comparação. | site, days, startDate, endDate, compare, searchType, country, device, brand, pageContains, query |
query_top_queriesTop queries | Search queries of one property over the period, aggregated and sorted. Use for "what people search to find us", growth/decline lists and ranking changes. Each row has clicks, impressions, ctr, position for the period and, with a comparison, prevClicks/prevImpressions/prevCtr/prevPosition plus clicksChange/clicksChangePct/positionChange (keys present in only one period show zeros in the other). sort: clicks (default), impressions, ctr, position (lowest first), growth (largest click gain vs comparison first) or decline (largest loss first). For ctr/position use minImpressions >= 20 to avoid noise. / Queries da propriedade, agregadas e ordenadas. | site, days, startDate, endDate, compare, searchType, country, device, brand, pageContains, query, limit, sort, minImpressions |
query_top_pagesTop pages | Pages (URLs) of one property over the period, aggregated and sorted. Use for best/worst pages and pages that gained or lost clicks. Each row has clicks, impressions, ctr, position for the period and, with a comparison, prevClicks/prevImpressions/prevCtr/prevPosition plus clicksChange/clicksChangePct/positionChange (keys present in only one period show zeros in the other). sort: clicks (default), impressions, ctr, position (lowest first), growth (largest click gain vs comparison first) or decline (largest loss first). For ctr/position use minImpressions >= 20 to avoid noise. / Páginas da propriedade, agregadas e ordenadas. | site, days, startDate, endDate, compare, searchType, country, device, brand, pageContains, query, limit, sort, minImpressions |
query_countriesBy country | Countries (ISO-3166-1 alpha-3, lowercase, e.g. bra) of one property over the period. Each row has clicks, impressions, ctr, position for the period and, with a comparison, prevClicks/prevImpressions/prevCtr/prevPosition plus clicksChange/clicksChangePct/positionChange (keys present in only one period show zeros in the other). sort: clicks (default), impressions, ctr, position (lowest first), growth (largest click gain vs comparison first) or decline (largest loss first). For ctr/position use minImpressions >= 20 to avoid noise. / Por país. | site, days, startDate, endDate, compare, searchType, country, device, brand, pageContains, query, limit, sort, minImpressions |
query_devicesBy device | Devices (MOBILE, DESKTOP, TABLET) of one property over the period. Each row has clicks, impressions, ctr, position for the period and, with a comparison, prevClicks/prevImpressions/prevCtr/prevPosition plus clicksChange/clicksChangePct/positionChange (keys present in only one period show zeros in the other). sort: clicks (default), impressions, ctr, position (lowest first), growth (largest click gain vs comparison first) or decline (largest loss first). For ctr/position use minImpressions >= 20 to avoid noise. / Por dispositivo. | site, days, startDate, endDate, compare, searchType, country, device, brand, pageContains, query, limit, sort, minImpressions |
get_timeseriesTime series | Clicks, impressions, CTR and position per day, week (Monday as key) or month (yyyy-mm) over the period, with filters. Use for trend, seasonality and to locate the date of a drop. Days without data are omitted. / Série temporal por dia, semana ou mês. | site, days, startDate, endDate, searchType, country, device, brand, pageContains, query, granularity |
get_breakdownBrand split and position bands | Splits the period's traffic into branded/nonBranded (by the property's branded_terms) and into position bands (1-3, 4-10, 11-20, 21+) with impressions and clicks per band, plus queryCount. Position of each query = impression-weighted average over the period. Use for "how much of our traffic is brand" and "how much sits on page 2". / Marca × sem marca e faixas de posição. | site, days, startDate, endDate, searchType, country, device, brand, pageContains, query |
get_annotationsAnnotations | Events annotated in the period for the property and globally: deploys, content changes, manual notes and Google algorithm updates (category "algo_update"). Use to correlate drops or gains with causes. Default: last 90 days. / Anotações e algo updates do período. | site, days, startDate, endDate |
get_ai_trafficTraffic from AI assistants (GA4) | Referral sessions from AI assistants (chatgpt.com, perplexity.ai, gemini, copilot, claude…) according to GA4 (dimension ai_source): per source (sessions, activeUsers, engagedSessions, keyEvents) for the period and the comparison, totals and daily series. site also accepts "all" for the whole account. hasGa4=false means the property has no GA4 mapped. Limitation: Search Console does not separate clicks from AI Overviews / AI Mode; only referral traffic is measurable. / Sessões vindas de IAs segundo o GA4. | site, days, startDate, endDate, compare |
get_ctr_curveOwn CTR curve vs benchmark | The property's real CTR by position (bucket = round(position), 1–20, impression-weighted) compared with the generic benchmark (31.7% at position 1 … 18.6% at 3 … 2.0% at 10). deltaPoints in percentage points (negative = below expected: likely title/meta problem); reliable = bucket with enough impressions. Use to find where titles underperform. / Curva de CTR própria × benchmark. | site, days, startDate, endDate, searchType, country, device, brand, pageContains, query, minImpressions |
find_decaying_contentDecaying content | Pages (or queries) that lost clicks between a BASELINE and the RECENT period. Recent = days/startDate/endDate; baseline = compare (previous = window before, year = one year earlier) or explicit comparisonStartDate/comparisonEndDate (for slow decay compare with 6–12 months ago). Classifies the drop: severe > 50%, moderate 20–50%, mild < 20%; sorted by absolute clicks lost; pattern hints the diagnosis (position_slipped, impressions_collapsed, ctr_dropped, disappeared, mixed). Use for "which pages are dying" and refresh candidates. / Conteúdo em decaimento. | site, days, startDate, endDate, compare, searchType, country, device, brand, pageContains, query, comparisonStartDate, comparisonEndDate, dimension, minBaselineClicks, limit |
analyze_cannibalizationQuery cannibalization | Queries where 2+ pages of the property compete for the same search in the period. Per cluster: totals, Shannon entropy of impressions across pages (bits; higher = more even split = worse; level high >= 1.5, medium >= 1.0), normalized (0–1), winner (most clicks; tie: best position) and the contenders with clicks/impressions/ctr/position/impressionShare. Sorted by entropy and impressions. Protocol/host/hash variants of one URL are canonical hygiene, not cannibalization; brand + home + deep page is usually sitelinks. Use when asked which page should rank for a keyword. / Canibalização de queries. | site, days, startDate, endDate, searchType, country, device, brand, pageContains, query, minImpressions, minPages, limit |
score_opportunitiesOpportunity score (CTR gap) | Queries between minPosition and maxPosition whose CTR is below the expected CTR for their position. expectedCtr comes from the property's own curve (ctrSource "own", when the bucket has volume) or from the benchmark; ctrGap = expected − ctr (fraction); lostClicks = impressions × gap; score 0–100 log-normalized by the largest lostClicks (level high >= 80, medium >= 60). Use for title/meta-description quick wins. / Oportunidades por CTR abaixo do esperado. | site, days, startDate, endDate, searchType, country, device, brand, pageContains, query, minImpressions, minPosition, maxPosition, limit |
find_page_poaching_opportunitiesStriking distance (page poaching) | Queries just outside the top (default positions 4–20) with the estimated click gain if they reached the CTR of the target position (default 3 → 18.6% benchmark, or the property's own CTR at that position when it has volume: see ctrSource). estimatedGain = max(0, round(impressions × (targetCtr − ctr))). Sorted by impressions (default) or by gain. Use for "what is close to page one / top 3". / Queries perto do topo com ganho estimado. | site, days, startDate, endDate, searchType, country, device, brand, pageContains, query, minPosition, maxPosition, targetPosition, minImpressions, sort, limit |
Erros
Sempre JSON: { "error": { "code", "message", "nextStep", "docsUrl" } }. Códigos: unauthorized (401 no HTTP quando falta ou é inválida a credencial), insufficient_scope (403), site_not_found, no_data, invalid_argument, plan_limit (402: o plano da conta não cobre o pedido, por exemplo histórico além da janela do plano; docsUrl aponta para a página de planos), rate_limited (com retryAfterSeconds), internal.
Limites
Por conta: 60 chamadas por minuto e 1000 por hora; o erro rate_limited diz qual janela estourou e quantos segundos esperar. Por IP: 120 requisições/min em /mcp, 60/min em /oauth/*. Respostas limitadas por limit (padrão 25–50, máximo 500–1.000).
Skills
Roteiros que citam as ferramentas pelo nome, publicados em /.well-known/agent-skills/index.json e no plugin organiq para Claude Code:
ai-traffic: Measure and interpret traffic coming from AI assistants (ChatGPT, Perplexity, Gemini, Copilot, Claude) and conversational search queries using GA4 and Google Search Console data through the Organiq MCP server (get_ai_traffic, query_top_queries, get_timeseries).cannibalization: Detect and resolve keyword cannibalization in Google Search Console data through the Organiq MCP server (analyze_cannibalization, query_top_pages).content-decay: Find, triage and build a recovery plan for decaying content in Google Search Console data through the Organiq MCP server (find_decaying_content, get_timeseries, query_top_queries, get_annotations).quick-wins: Find title/meta-description quick wins in a property's Google Search Console data through the Organiq MCP server (score_opportunities, find_page_poaching_opportunities, get_ctr_curve, get_breakdown).weekly-report: Produce a weekly organic-search report for a property from Google Search Console and GA4 data through the Organiq MCP server (get_site_summary, query_top_queries, query_top_pages, get_annotations, get_ai_traffic).
Dados e privacidade
O servidor lê somente as propriedades da conta autenticada. Não recebe o conteúdo da conversa: só os argumentos da ferramenta (propriedade, datas, filtros). Cada chamada é registrada (nome da ferramenta, duração, conta) para operação e limites. Política de privacidade · Termos · suporte: youssefpmat@gmail.com.