{"name":"Collimer","authentication":{"type":"oauth2.1","protected_resource_metadata":"https://app.collimer.com/.well-known/oauth-protected-resource"},"description":"Collimer's remote MCP server for scans, reports, and brand work.","tools":[{"name":"list_primitives","description":"Deprecated; remove after 2026-11-01. Use tools/list to discover available tools and call them directly."},{"name":"call_primitive","description":"Deprecated; remove after 2026-11-01. Call the named tool directly. This alias can inspect its schema or invoke it with arguments."},{"name":"ask_this_assistant","description":"Ask this connected assistant what it says about a brand for a query. Its answer is biased by the current conversation and is not a panel result or score. Stores the answer as an assistant reading; requires audits:write."},{"name":"collimer_scan","description":"Scan AI-search visibility and report llms.txt, robots.txt AI-crawler rules, sitemap, and JSON-LD as found/missing/unknown. File states do not feed the score. Returns a scan_token and report URL; poll collimer_scan_status for results. Collimer also offers writing tools. Ask Collimer to enable writing for your organization; reconnect afterward to refresh the tool list (subject to granted scopes)."},{"name":"collimer_scan_status","description":"Poll a scan by scan_token. Results include score, biggest gap, report URL, and llms.txt, robots.txt, sitemap, and JSON-LD discovery states. File states do not affect the score. To access writing tools, ask Collimer to enable writing for your organization; reconnect afterward to refresh the tool list, subject to granted scopes."},{"name":"get_audit","description":"Read an audit's status, progress, and GEO score. Poll this after start_audit; read the finished plan with list_run_recommendations."},{"name":"get_audit_artifact","description":"Read the assembled AI Visibility Audit deliverable for a completed run — the same report the audit download page serves. format: \"md\" returns the Markdown inline as this tool's result text. format: \"pdf\" returns a resource_link to the themed PDF instead of rendering it here, fetched separately with resources/read on that link's uri."},{"name":"get_run","description":"Read a run of any type, including its prompts, citation summaries, and sentiment. A daily slice (run_type \"slice\") returns score null with not_scored_reason \"measured by reads\": the reads own its numbers."},{"name":"list_runs","description":"List runs across the credential's organization ceiling, newest first. Daily slices (run_type \"slice\") are omitted unless asked for by run_type: they are observation sources for the reads, never scored runs, and always carry score null."},{"name":"list_changes","description":"List covered work changes for the acting organization since a cursor. Cursors are bound to one organization and expire after 183 days. Call once without a cursor to start with no backlog; use a separate cursor after switching organizations."},{"name":"start_audit","description":"Start a full audit for an existing brand. Call without confirm:true to preview the audit allowance; retry with confirm:true to start it. Returns immediately with a run receipt."},{"name":"whoami","description":"Show identity, reachable orgs, scopes, writing access, plan, project limit, and audit allowance. Pass org (slug or id) to check reachability; the response still lists every reachable org. For multi-org credentials, acting-org fields are null. To use writing tools, ask Collimer to enable writing for your organization; reconnect afterward to refresh the tool list (subject to granted scopes)."},{"name":"rubric","description":"Get the scoring rubric behind a Citability score: every sub-signal measured, what it means, its weight toward the composite, its max, and what raises it. Call this to explain a score rather than guessing at SEO advice. URL scoring and imports omit title_alignment for frozen titles."},{"name":"score_draft","description":"Score raw markdown or an external URL against the citability rubric. Returns a 0-100 score, per-signal suggestions, heading failures, and title-alignment queries. Use it before publishing or to benchmark a competitor page."},{"name":"find_stat_candidates","description":"Queue a source-verified statistic search. Returns a receipt; poll get_writing_job_result with kind stat_candidates and its receipt_id. Pass a completed candidate to insert_stat_candidate."},{"name":"do_work","description":"Queue a find_work item to a checked, reviewable draft. Never publishes. Requires confirm: true for spend; poll get_writing_job_result with the receipt."},{"name":"get_writing_job_result","description":"Poll a find_stat_candidates, check_code_blocks, check_claims or do_work receipt. Pending means poll again; done carries the saved result; failed is terminal. Statistic candidates are a snapshot; insert_stat_candidate re-resolves their provenance."},{"name":"insert_stat_candidate","description":"Queue a statistic from find_stat_candidates. Collimer re-resolves its source and records provenance if the revise pass inserts the quote verbatim."},{"name":"get_recommendation","description":"Read recommendation evidence, verification, articles."},{"name":"get_recommendation_verification","description":"Verification status, request_state, evidence, and stored-read verdict against frozen questions. Before a comparable read exists, verification explains why measurement is unavailable."},{"name":"verify_recommendation","description":"Queue a fresh check of one recommendation (id) or all recommendations in a run (run_id). Returns a receipt; poll get_recommendation_verification for results."},{"name":"list_run_recommendations","description":"The confidence-gated, ranked recommendation plan for one audit run."},{"name":"update_recommendation","description":"Set status or notes; verify with verify_recommendation."},{"name":"export_article","description":"Export the latest article revision as Markdown, HTML, or WordPress WXR. The file is a resource_link for resources/read. Set inline: true for file text or preview_lines for a short excerpt when the client cannot read resources."},{"name":"check_claims","description":"Queue a fact-check pass against an article's claims — fetches source material fresh and judges each one (~42s). Returns a receipt (receipt_id, eta_seconds) — poll get_writing_job_result with kind claim_check. The fact-check verdict is in verification.verification_json.fact_check.claims[].status: consistent, contradicted, unverifiable. Run before approval."},{"name":"check_code_blocks","description":"Queue a check of fenced code blocks. Returns a receipt; poll get_writing_job_result with kind code_check and its receipt_id for findings anchored by block index."},{"name":"apply_code_fix","description":"Replace curly quotes in one fenced code block and create a new article revision. Returns an error when the block has no supported fix; check the new revision afterward."},{"name":"suggest_visuals","description":"Queue a visual plan for an article's current draft. The plan is stored on its current revision without changing the draft. Poll get_article and compare data.visual_plan.job_id with this receipt's job_id; use the stored suggestions only when its status is completed. A failed job leaves the old plan in place."},{"name":"advance_article","description":"Move an article to approved, published, or needs_review (only from scored or later; use abandon_pass if a drafting pass is stuck). Approval requires checked claims; override_reason skips that gate and is recorded. Unresolved placeholders block approval. Publishing and overrides need a user credential. Set published_url with update_article before verify_published."},{"name":"verify_published","description":"Check whether an article's published URL still matches what was approved. Queues the check and returns what was already on record — poll get_article for the fresh result. Never a plain pass/fail: the result is one of matched, drifted, unreachable, blocked or never_checked."},{"name":"edit_article","description":"Queue one atomic revise pass of instruction, verbatim, insert, or delete items. Anchors must match exactly one block; unmatched or ambiguous anchors queue nothing. An unanchored instruction applies to the document. Returns a receipt; poll get_article for the revision."},{"name":"list_feedback","description":"List reviewer notes for an article, optionally filtered by their lifecycle status."},{"name":"create_feedback","description":"Queue one reviewer note for a human without starting a revision."},{"name":"discard_feedback","description":"Discard your queued reviewer note. Notes by other people and sent notes cannot be removed."},{"name":"list_impact","description":"Published-article impact receipts, newest first, including unmeasured articles."},{"name":"verify_work","description":"Check shipped articles and recommendations, plus the stored measurement verdict and range when audits:read is granted. Article checks queue automatically; queue_verification: true queues a recommendation check that may cost money and requires recommendations:write."},{"name":"get_recap","description":"Read the monthly exec recap for a project: the score delta since the last run and the recommendations shipped in that window. Paid-plan feature — refused for a free-plan org. Returns structured content plus a Markdown rendering of the same recap the project's Recap page shows."},{"name":"list_templates","description":"List a project's saved page templates — id, name, and section count. Call this before setting template_id on create_idea, import_article, or update_article."},{"name":"update_article","description":"Update metadata or signals. Title cannot be changed here."},{"name":"create_idea","description":"Seed an idea into a project's backlog. No fetch, no model pass — the cheapest of the three article-creation tools. Call this to propose work, including your own."},{"name":"import_article","description":"Import an existing post by URL: fetch it, extract its content, and score it with Collimer's engine. Runs inline and returns the scored article."},{"name":"generate_article","description":"Queue the first draft for an idea-stage article — the arrow create_idea has no other route to (~83s). Refuses if this article already has a revision, or if a pass is already running. Returns a receipt (revision_now, expect, eta_seconds) — poll get_article until revision_now == expect rather than waiting here."},{"name":"rewrite_article","description":"Queue a structural rewrite from scored or needs_review. Select recommendations with signals; omit for all actionable suggestions or pass [] for none. Returns a receipt; poll get_article until revision_now matches expect."},{"name":"abandon_pass","description":"Cancel a stuck_drafting pass, returning the article to idea or needs_review. Discards in-flight feedback by default; queued notes outside the pass remain queued. keep_queued retains in-flight feedback too."},{"name":"restart_article","description":"Return a scored or needs_review article to idea without losing its id or revision history."},{"name":"list_work","description":"List recommendations, ideas, and drafts. Filter by project, kind, stage, owner, q, source URL, or needs_attention. Use q to find rewritten titles. Limit defaults to 25 (max 50); use next_cursor as after. kind=prompt reads a run's probe panel. Recommendations alone are in rank order; other results are newest-first."},{"name":"find_work","description":"Find what to do next for one brand: open recommendations by ascending priority, then ideas and in-flight drafts with no current recommendation (kind draft). Pass an item's id and kind to do_work, or without writing, to get_recommendation. Limit defaults to 25 (max 50); pass next_cursor as after. Grant audits:read to also see resolved.run_id."},{"name":"get_article","description":"Read article and history; body: resource_link for resources/read. Views: summary/status. History: revision/diff_from/since_revision."},{"name":"list_brands","description":"List every brand (project) this credential can act on, with each one's last activity and how many articles need attention. Call this before `resolve_brand` when the domain isn't already known."},{"name":"resolve_brand","description":"Resolve a domain to the brand (project) it belongs to: org, project, latest audit run, and an opaque project handle every other writing operation takes. Call `list_brands` first if the domain isn't already known."},{"name":"get_brand","description":"Read a brand's settings and business classification."},{"name":"create_brand","description":"Create a brand (project) so a domain has somewhere to work in. Idempotent: calling this again for a domain you already hold returns that brand rather than erroring."},{"name":"onboard_brand","description":"Create or find a brand, start its first scan, and propose grounded brand context for approval. Re-run after collimer_scan_status completes to derive context from the scanned pages. Check each proposal's support status; correct contradicted or unverified values with the customer before confirming. Nothing is written to context unless confirm is true with reviewed facets."},{"name":"delete_brand","description":"Delete a brand (project). Soft delete: it stops appearing anywhere and frees the org's project-limit slot immediately. Refuses if the brand still has any live (non-deleted) article — delete those first."},{"name":"update_brand","description":"Update supplied brand fields. business_type reclassifies future scans."},{"name":"delete_article","description":"Delete an article. Soft delete: it stops appearing anywhere. Revisions and feedback are left untouched, so the delete stays recoverable in principle."},{"name":"restore_article","description":"Restore body as new needs_review revision."},{"name":"context_schema","description":"Get the brand-context facet catalog: every kind of context Collimer can hold about a brand, why it matters, what reads it, and how much to write. Call this before get_brand_context or update_brand_context — it is the only place these rules are written down."},{"name":"get_brand_context","description":"Get a brand's assembled context card — voice, positioning, stack, and everything else Collimer knows about it — plus a catalog of what exists but wasn't included, with sizes, so you can ask for it by name via `include`. Call `context_schema` first to see what each kind means."},{"name":"review_brand_context","description":"Review a brand's missing, unconfirmed, and stale context. Proposes evidence-backed changes from stored page snapshots without scanning or saving anything. Check each proposal's support status and correct contradicted or unverified values with the customer before saving confirmed values with update_brand_context. Never record a value as customer-asserted on their behalf."},{"name":"update_brand_context","description":"Write any subset of a brand's context facets in one call — voice, positioning, stack, and more. A body should be an excerpt of the brand's own words, not a summary; call context_schema first for the excerpt-vs-summary rule and what each basis value means."}],"transport":{"type":"streamable-http","url":"https://app.collimer.com/mcp"},"documentation_url":"https://app.collimer.com/docs"}