---
title: "AthenaHQ MCP server"
url: "https://martechdb.com/vendors/athenahq"
markdown_url: "https://martechdb.com/vendors/athenahq.md"
api_url: "https://martechdb.com/api/v1/vendors/athenahq.ai"
updated: "2026-10-17"
---

# AthenaHQ MCP server

Yes. AthenaHQ publishes an official MCP server at https://api.athenahq.ai/api/mcp. It's hosted. It offers 103 tools. We last checked it on 18 Oct 2026. MartechDB lists only servers the vendor publishes itself, never community servers.

**Key facts:** As of 18 Oct 2026, AthenaHQ's official MCP server scores 65/100 (provisional) on MartechDB's Agent Readiness Index (v1.1). It lists 103 tools.

- Website: [athenahq.ai](https://athenahq.ai)
- Categories: [SEO](https://martechdb.com/categories/seo.md)

## Review

AthenaHQ's AthenaHQ MCP scores 65/100 on MartechDB's Agent Readiness Index: easy to connect an AI agent to, with a few gaps.

The good:

- Hosted by AthenaHQ: connect by URL, with nothing to install
- Documented, with 103 tools known

Not checked yet: how you sign in; what agent access costs.

## Agent Readiness Index: 65/100 (provisional)

How friendly AthenaHQ is to AI agents, from its best official MCP server. Anything not yet researched scores nothing, so this score may rise once it is. Methodology v1.1: https://martechdb.com/methodology.

- Official MCP server: 30/30 (Published by the vendor)
- Hosted by the vendor: 25/25 (Connect by URL, nothing to install)
- OAuth sign-in: pending (Sign-in: see vendor docs)
- Documented tools: 10/10 (A docs page, and its tools are known)
- Free to start, pay as you go: 0/15 (Not stated by the vendor)

## AthenaHQ MCP

- Address: https://api.athenahq.ai/api/mcp
- Runs: Hosted
- Sign-in: Sign-in: see vendor docs (`unknown`)
- Official MCP Registry: not listed
- Documentation: https://docs.athenahq.ai/api-reference/mcp
- How we know it's official: Documented on AthenaHQ's own site, at docs.athenahq.ai
- First seen: 2026-10-17
- Last checked: 2026-10-18

### Tools (103)

As the server lists them on 2026-10-18. Names and descriptions come from the vendor's server.

- `open_ai_access` (read-only): Open the AthenaHQ AI crawler access panel. Enter a public HTTPS domain to inspect crawler responses and robots.txt permissions without an AthenaHQ account.
- `check_public_ai_access` (read-only): Check HTTP responses to AI crawler user agents and robots.txt permissions for a public website. No AthenaHQ account required. Search, retrieval and training are separate. Requests originate from AthenaHQ, not verified crawler IPs. Unknown responses are inconclusive; this does not measure visibility or guarantee indexing, citations or real crawler access. Use nullable evidence and diagnostics.
- `get_prompt_schedules` (read-only): List the Default, custom and archived streaming schedules for a website. Use each row's selection value when filtering analytics or responses. Default includes all pre-cutover history and ad hoc runs; archived schedules retain results. To combine schedules, pass several selection values as an array in the schedule field of query\_metrics and query\_rows, or use a saved view that stores several schedules. Partner REST filters take one schedule. starts\_on and ends\_on bound a custom schedule's active period as UTC days (null means no bound); an active schedule outside its period does not run.
- `get_ai_search_value` (read-only): AI Search Value for a website: topic-market value, captured value range, headroom, coverage, value-weighted AI share of voice, per-topic detail, and modeled attributed contribution.
- `get_prompts` (read-only): List prompts (search queries) tracked for a website
- `get_prompt_tags` (read-only): List prompt tags for a website with per-tag prompt counts. Tag IDs can be used with the prompt\_tags filter on the prompts endpoint.
- `get_personas` (read-only): List personas configured for a website with per-persona prompt counts. Use it to resolve persona\_id values returned by other tools to persona names and descriptions.
- `get_topics` (read-only): List topics (groupings of prompts) for a website, with the count of prompts in each
- `get_competitors` (read-only): List competitors tracked for a website
- `get_content_hub_sheets` (read-only): List the Content Hub tabs/sheets configured for a website. Use to discover available tabs (e.g. 1st-party content, 3rd-party placements, Reddit) before calling get\_tracked\_content with a specific sheet\_id (metrics; excludes in-flight pipeline items) or list\_content (every item including unpublished drafts).
- `get_tracked_content` (read-only): List tracked content (1st-party drafts, imported pages, 3rd-party placements) with citation, mention, and impression metrics for the supplied date range and filters. Supports pagination via page\_num / page\_size and optional filtering by Content Hub sheet\_id or content\_type. In-flight pipeline items (drafts, briefs, running generations) never appear here; enumerate those with list\_content. A returned item can still lack a url (pipeline finished but not published anywhere yet).
- `list_content` (read-only): Enumerate every content item in a website's Content Hub, published or not: in-flight drafts, briefs, snipes, optimize and slice runs, scheduled and failed items, plus tracked pages. Returns identity fields only (id, title, type, stage, sheet, URL, timestamps, target prompt ids), no metrics. Uncached and Postgres-backed, so an item created by create\_content is listable immediately. Filter by sheet\_id, content\_type, stage, or prompt\_id. stage is the raw pipeline workflow state, not a publication flag: null = no pipeline record (most tracked external / imported pages), and manual editor items carry 'generated'. Treat an item as published only when its stage is done (or it is an external / imported page) AND it has a url; done without a url is an unpublished orphan. A sheet\_id of a view-type tab (see get\_content\_hub\_sheets sheet\_type) lists the shared main pool without the view's saved filters. Use get\_tracked\_content for citation and impression metrics on published content; use this tool…
- `get_content_detail` (read-only): Fetch the full detail of a single tracked content item — its brief and body text (drafts, optimize rewrites, snipes, authored and scraped pages), plus status, cited source URLs, and links. Use after get\_tracked\_content to read the actual text behind a content\_id. A status of generated\_brief means the brief is ready while the article is still being written. Pages registered via track\_content\_urls return a null body and null status until their page text is fetched from the app — a null body on an external page means not fetched yet, not missing content; citation tracking does not need the body. \`prompts\` lists the prompts this page was WRITTEN FOR (the same ids create\_content takes), newest-linked last, capped at 100 with the true size in \`prompts\_total\`. When prompts\_total exceeds 100 the rest are not currently readable through any tool — report the total, do not imply the list is complete. Entries carry status active, paused or deleted: a deleted prompt is still part of what the page…
- `get_content_citation_prompts` (read-only): For a single tracked content item, list every prompt whose AI responses cited it — with citations, citation %, and estimated impressions. Use after get\_tracked\_content to drill into which prompts a given URL is appearing for. This is CITED-BY, measured over the requested date range, not the targeting the page was written for: an empty prompts array means no AI response cited this URL in that window, which is expected for new or never-cited pages and is not missing data. For the prompts a page was written to target, read \`prompts\` on get\_content\_detail (or prompt\_ids on list\_content) — those come from the content record itself and do not depend on any citation having happened.
- `list_websites` (read-only): List every website accessible to the calling session. Works with any API key (global or scoped) and with MCP/OAuth sessions. Call with an empty argument object \`{}\`. Each item includes \`baseCountry\`, the country market the website targets: use it to tell same-brand websites for different countries apart.
- `get_locations` (read-only): List geo-locations configured for a website
- `get_date_range` (read-only): Get the earliest and latest response dates for a website
- `get_responses` (read-only): Get LLM responses for a website. Shows how AI models answer queries, with sources, sentiment, and ranking data. Filter by whether a model used search queries or by text within those queries. For a variation-level export at volume, pair filters.variation\_filter with include\_response: false and compact\_sources: true. That keeps the prompt, its variation, the model, the mentioned/cited flags and the cited domains while dropping the answer text, cutting each row to roughly a tenth of its size.
- `get_response_streaming_status` (read-only): Read the latest (or a specific) response-streaming run's whole-run state and response-queue progress. Only completed means downstream analysis has finished
- `get_response_detail` (read-only): Fetch a single LLM response by id with full sources, mentions, and rank details.
- `get_saved_views` (read-only): List saved views (filter presets) for a website
- `get_group_saved_views` (read-only): List group-level saved views (filter presets) shared across the websites in a group
- `get_credits_organization` (read-only): Get credit balance for the organization
- `get_credits_website` (read-only): Get credit balance for a specific website
- `get_groups` (read-only): List all groups in the organization (global API key only)
- `get_group_detail` (read-only): Fetch a single group by id with its member websites.
- `get_share_of_voice_cumulative` (read-only): Get cumulative share of voice — overall SOV for each competitor across the date range. Each entry also includes relative\_mention\_rate: the share of responses mentioning any tracked brand that mention this entity.
- `get_share_of_voice_time_series` (read-only): Get share of voice over time — how often the website is mentioned vs competitors, grouped by day. Each entry also includes relative\_mention\_rate: the share of that day's responses mentioning any tracked brand that mention this entity.
- `get_citation_rate_cumulative` (read-only): Get cumulative citation rate — average citation rate for each competitor across the date range.
- `get_citation_rate_time_series` (read-only): Get citation rate over time — how often AI models cite (link to) the website, grouped by day.
- `get_mention_rate_cumulative` (read-only): Get cumulative mention rate — average mention rate for each competitor across the date range. mention\_rate is absolute (share of all responses); relative\_mention\_rate is the share of responses mentioning any tracked brand.
- `get_mention_rate_time_series` (read-only): Get mention rate over time — how often AI models mention the website by name, grouped by day. mention\_rate is absolute (share of that day's responses); relative\_mention\_rate is the share of that day's responses mentioning any tracked brand.
- `get_position_cumulative` (read-only): Get cumulative position — average ranking position for each competitor across the date range.
- `get_position_time_series` (read-only): Get ranking position over time — average position of the website in AI model responses, grouped by day.
- `get_position_distribution` (read-only): Get position distribution: share of responses where the brand ranks top/middle/bottom across the date range.
- `query_metrics` (read-only): Query aggregated metrics for brand performance, competitors, sources, citations, and response trends. Use query\_rows for individual records. Mentions: from "response\_mentions". Citations: from "citations". On either, where { is\_website: true } selects the brand; { is\_competitor: true } selects competitors; { entity\_id: { eq: "\<uuid\>" } } selects one entity. Filter/group models by model\_category (display names like "ChatGPT", "Claude"), never "model". Dimensions vary by cube; source\_mentions has no prompt/model dimensions. Measures: count, count\_distinct, avg, sum, min, max; per-measure where enables conditional aggregation. Use compare for two date ranges. When grouping by IDs, use alsoSelect for names: entity\_id/entity\_name, prompt\_id/prompt\_text, prompt\_topic\_id/topic\_name (prompts uses topic\_id). Cited pages mentioning competitors but not the brand: from "sources", where { source\_mentions\_entity: { hasSome: \[competitorIds\], hasNone: \[brandId\] } }. Also works on "source\_mentions". C…
- `query_rows` (read-only): Query individual analytics rows. Use for qualitative data like response text, specific identifiers, or individual mentions. Schedule selection: pass schedule: "default" or a custom/archived UUID from the schedule catalog, or an array of them to combine schedules. Omit to use the caller default (Ask Athena uses the current page selection). Explicit selection overrides that default. Existing top-level equality predicates on prompt\_schedule\_kind/id remain supported, but cannot conflict with schedule. Historical provenance does not change with current prompt membership. Website-level cubes are unaffected. Cubes (same set as query\_metrics): attributes, citations, competitors, contents, prompts, response\_mentions, responses, source\_mentions, sources, topics, websites. Returns { rows, nextCursor, hasMore }. Pass nextCursor back as "after" to paginate. On the responses cube, content is hydrated from Postgres and can only be selected. Do not filter or sort by content. Use search\_terms\_in\_respo…
- `list_pitches` (read-only): List pitch workspace reports for the organization. Returns all non-deleted pitches with their status and metadata.
- `get_pitch` (read-only): Get a pitch report by ID including competitors, prompts, attributes, top citing sources, and aggregate metrics (brand mentions, sentiment, response rate).
- `get_sources` (read-only): List top cited sources (root domains) for a website with citation, mention, brand-mention, and impression metrics. Each row is classified as owned / competitor / partner / third\_party. Supports filters (date range, models, prompts, competitors, locations, personas), sort, and pagination via page\_num / page\_size.
- `get_source_pages` (read-only): List individual cited URLs (pages) for a website with citation, mention, and impression metrics plus a per-URL daily sparkline. Each row is classified as owned / competitor / partner / third\_party. Companion to get\_sources (root-domain-level). Supports filters (date range, models, prompts, competitors, locations, personas), search, sort, and pagination.
- `get_attributes` (read-only): List the brand traits (called attributes in the API) tracked for a website: brand-perception keywords such as 'Affordable' or 'Slow Support'. Athena extracts these from AI model responses. Brand traits are direction-neutral; \`positive\` selects the directional series and defaults to true when omitted. Use this to discover attribute ids, then get\_attribute\_metrics for how often each is mentioned, or get\_attribute\_time\_series for one attribute's trend over time.
- `get_attribute_metrics` (read-only): Get cumulative brand trait (attribute) metrics: for each brand-perception keyword (e.g. 'Affordable', 'Slow Support'), how many AI responses mentioned it across the date range, and the percentage. \`positive\` selects the observation direction and defaults to true when omitted. \`total\_responses\` is the denominator: responses in the date range that mention the brand AND had attribute extraction run on them. It is NOT every response for the website — responses that never mention the brand are excluded, and Athena samples which responses get extraction, so un-analyzed ones are excluded too. Compute rates from the returned \`percentage\` / \`total\_responses\` rather than against a response count from another endpoint. Attributes nobody mentioned come back with response\_count 0. Use get\_competitor\_attribute\_metrics for the same breakdown per competitor.
- `get_competitor_attribute_metrics` (read-only): Get brand trait (attribute) metrics per tracked competitor: for each competitor and each brand-perception keyword (e.g. 'Affordable'), how many AI responses mentioned that keyword for that competitor, and the percentage. Use with get\_attribute\_metrics to compare the brand against competitors. \`total\_responses\` is per-competitor: responses in the date range that mention THAT competitor and had attribute extraction run on them. Each competitor therefore has its own denominator, and none of them is the website's total response count. \`positive\` selects the observation direction and defaults to true when omitted. Returns one row per competitor per attribute, so results can be large — filter with competitor\_ids. Competitors with no responses in the date range are omitted entirely rather than returned with zeros.
- `get_attribute_time_series` (read-only): Get the daily trend for ONE brand trait (attribute), brand and competitors side by side — how mentions of a keyword like 'Affordable' moved over time. Requires an attribute\_id: call get\_attributes first to discover ids. \`positive\` selects the observation direction and defaults to true when omitted. Days with no data are returned as zeros, so the series is gap-free and chartable. Denominators are per-side, not the day's whole response set: brand\_percentage divides by that day's responses that mention the brand (and had attribute extraction run), and competitor\_percentage by responses that mention the tracked competitors. brand\_total and competitor\_total return those denominators explicitly. Competitor figures aggregate all tracked competitors unless competitor\_ids narrows them.
- `get_attribute_observations` (read-only): Get individual brand trait (attribute) observations: each row is one AI response describing one entity (the brand or a competitor) with one brand trait, including the response excerpt as \`text\_span\`. \`score\` runs from -1 to 1 and its sign always matches \`positive\`; its magnitude (0.1 to 1.0) is how strongly the wording praises or criticizes. \`score\` is null when the observation was not scored (extracted before scoring existed, or no valid value was recorded); for direction only, use \`score ?? (positive ? 1 : -1)\`. Omit \`positive\` for both directions. \`sort: "intensity"\` (the default) returns the strongest observations first with unscored ones last; \`sort: "recent"\` returns the newest first. Narrow with entity\_ids and attribute\_ids (from get\_attributes). Paginate with page\_num and page\_size; a page can hold fewer than page\_size rows when an excerpt is no longer available, so use \`has\_more\` to decide whether to fetch the next page. Use get\_attribute\_metrics for how often each trait is m…
- `get_user_by_email` (read-only): Look up a user by email address, scoped to the caller's organization. Returns 404 when the email does not belong to a member of the organization or of one of its websites.
- `get_oracle_findings` (read-only): When grounding is present, use its complete team-confirmed statement and all supporting facts as joint evidence; the legacy fact ID/text are only a compatibility anchor. List Oracle accuracy findings for a website: places where an AI response contradicted a verified brand fact (type 'inaccuracy' or 'kb\_issue', with quote, claim, and reason) or where two knowledge-base facts conflict ('kb\_duplicate' / 'kb\_contradiction', pairing fact\_text with related\_fact\_text). Findings from every status are included by default (pending, acknowledged, ignored, ...), each row carrying its status — pass the status filter for pending items only. Filters (run\_id, fact\_id, lineage\_id, response\_id, prompt\_id, source\_url, type, kind, severity, status) AND-compose; source\_url matches evidence URLs exactly after normalization (protocol and trailing slash ignored). 'total' is the pre-limit count. 'latest\_run' is the newest scan of any kind and is null only when the website has never been scanned, so latest\_run…
- `get_oracle_finding` (read-only): When grounding is present, use its complete team-confirmed statement and all supporting facts as joint evidence; the legacy fact ID/text are only a compatibility anchor. Load one Oracle finding in full: the flagged claim with its verified fact and prompt text, the run it came from, a ~2000-character response excerpt centered on the quoted claim, the cited-page evidence captured during the run (url, quote, snippet, scrape\_hash), and its lineage: sibling findings sharing its lineage\_id across runs, newest first. Use after get\_oracle\_findings to interrogate a specific finding. Returns a not-found error for an unknown finding id, and status 'no\_access' if the brand does not have Oracle v2.
- `add_brand_facts`: Add brand facts to a website's Knowledge Base in bulk (1-50 per call). Each fact runs the full ingestion pipeline (deduplication, approval gates, pillar routing); there is no way to force-approve. Returns one outcome per fact (approved \| pending \| duplicate; extensible) with the created fact id and the pillar it was filed under. Facts without a pillar\_id are routed automatically and may land unfiled. A fact similar to facts already in the Knowledge Base is not added: its outcome is duplicate and lists them under matches, and the response carries a match\_token. To resolve, call again with those facts, the match\_token, one decision per listed match (approve, optionally with new text, or delete) and save\_submitted (true adds the facts as written, false only applies the decisions).
- `add_content`: Add an article that is already written (for example, one drafted in this conversation) to the website's Content Hub as an editable draft. Same as pasting it into the Content Hub's blank editor: no AI model runs and no content credits are spent. Use create\_content instead when Athena should research and write the piece. body is the full article in Markdown and is stored as given, except that link and image destinations with an unsafe scheme (javascript:, data:) become \#. The item is created with type manual at stage generated, and the body is recorded as version 1, so get\_content\_draft, edit\_content, revise\_content and get\_content\_versions work on it right away. Pass title, or it is taken from the body's first heading (else its first line). sheet\_id must be a tab from get\_content\_hub\_sheets: a sheet-type tab keeps the item, a view-type tab or no sheet\_id puts it in the shared pool. The item is not published. Once it is live on the site, call publish\_content with its URL to start citati…
- `approve_brief`: Approve a content brief and start writing the article from it. Only valid while the piece is at status generated\_brief. The article is generated from the brief exactly as it currently stands, including any revisions made with revise\_brief or edits made in the app. Consumes content credits; poll get\_content\_status afterwards, then read the result with get\_content\_draft.
- `create_content`: Generate an article or content brief in AthenaHQ. Fetches source URLs, sends source material to external AI providers, and consumes content credits. Obtain user approval before calling. Does not publish to a website or CMS. For draft mode, auto\_approve defaults to true; set false to generate only a brief and wait for approve\_brief. Poll get\_content\_status using each returned content\_ids value. Slice mode returns slice\_titles and an empty content\_ids array; generated items appear in list\_content. To save an already-written article without generation or credit use, call add\_content.
- `create_location`: Create a location for a website
- `create_pillar`: Create a Knowledge Base pillar (a subject area that groups brand facts) from a name and optional description. Get-or-create semantics: if a pillar with the same name already exists, it is returned with created: false instead of failing, so retries are idempotent.
- `create_prompt_tag`: Create a prompt tag on a website, or return the existing tag when its name matches case-insensitively. Trims surrounding whitespace and rejects reserved prompt-type names. Returns the tag ID and whether it was created. Use the returned ID to assign the tag to prompts; creating a tag does not assign it to any prompts.
- `create_prompts`: Create one or more prompts on a website
- `create_saved_view`: Create a saved view (filter preset) for a website. Saved views appear in the dashboard filter bar for every member of the website. filters is an object keyed by filter field key, each value shaped {"id": "\<unique string\>", "field": "\<same field key\>", "operator": "is\_any\_of", "values": \[...\]}. Common field keys: "models" (slugs like "chatgpt", "perplexity", "google\_ai\_overview"), "competitors", "prompts", "personas", "locations", "promptTags", "attributes" (arrays of UUIDs from the matching list tools), "countries", "sourceTag". "promptTags" also accepts the builtin tokens "type:high\_intent" (branded prompts) and "type:discovery" (non-branded) alongside tag UUIDs. "sourceTag" values are the builtin categories "owned", "competitor", "partner", "third\_party" or custom source tag UUIDs, not display labels; custom source tag ids appear on existing saved views (list the website's saved views to find them). When unsure, list the website's saved views and mirror their filter shapes. icon, wh…
- `create_source_tag`: Create a custom source tag with a name and URL patterns. Research existing tags and cited sources first when recommending changes. Obtain user confirmation before calling. MCP executes immediately after authorization; Athena AI chat presents an approval card. Patterns support hosts (example.com), subdomains (\*.example.com), path sections (example.com/blog), exact pages (example.com/blog$), and query constraints (youtube.com/watch?v=abc). Up to 500 patterns; new tags use a neutral color. These are source tags, not prompt tags.
- `create_topic`: Create a topic on a website (returns the existing topic when the name is already taken)
- `delete_brand_facts` (can delete or overwrite): Permanently delete 1-50 brand facts from a website's Knowledge Base. There is no undo. Ids that do not exist on the website are reported in not\_found\_ids rather than failing the call, so retries are idempotent. Requires an admin; on OAuth connections the signed-in user must have the admin role.
- `delete_content` (can delete or overwrite): Delete a content row. Destructive: physical row delete, no undo. Powers delete-and-retry. Bulk delete is out of scope.
- `delete_location` (can delete or overwrite): Delete a location from a website
- `delete_pillars` (can delete or overwrite): Permanently delete 1-20 Knowledge Base pillars and every fact filed under them. Facts are deleted, not unfiled; there is no undo. Ids that do not exist on the website are reported in not\_found\_ids rather than failing the call, so retries are idempotent; ids in failed\_ids are untouched and safe to retry. Requires an admin; on OAuth connections the signed-in user must have the admin role.
- `delete_prompt` (can delete or overwrite): Delete a prompt (soft when responses exist, hard otherwise)
- `delete_source_tag` (can delete or overwrite): Permanently delete a custom source tag and all its pattern assignments; retain source records. Read the source-tag listing tool first and supply the tag's current revision in the expected-revision input. Built-in source categories cannot be deleted. Obtain explicit user confirmation identifying the tag and its assignments before calling. MCP executes immediately after authorization; Athena AI chat presents an approval card. If the tag changed, read again and obtain approval for a fresh deletion. Never retry a declined proposal unless the user requests it. A false analytics-refresh result means the tag was deleted but filtered analytics may still be cached.
- `delete_topic` (can delete or overwrite): Delete a topic (soft delete; optionally also delete its prompts)
- `edit_content`: Apply exact find-and-replace edits to a content draft's article body. Deterministic, no AI model involved: your replacement text lands verbatim (use revise\_content when you want an AI rewrite from an instruction). Each edit's find text must match the current body exactly once; zero or multiple matches fail the whole call and nothing is saved, so extend the find text until it is unique. Edits apply in order, later ones see earlier results, and the batch is recorded as one new version, recoverable via get\_content\_versions / restore\_content\_version. Pass expected\_version\_number from get\_content\_draft to fail with a conflict when a new version was recorded after your read (a revision, edit, or restore). An app autosave changes the body without recording a version; that drift is caught by the anchors themselves, since a moved or vanished find text fails the call.
- `get_brand_facts` (read-only): List a website's brand facts from the Knowledge Base, newest first, with offset paging. By default excludes facts generated by Oracle analysis; pass include\_oracle=true to include them. Filters: pillar, review status (default approved), source type, and unfiled=true for facts not under any published pillar (unfiled and pillar\_id are mutually exclusive).
- `get_content_draft` (read-only): Read the current draft text of a content item — the article body as it stands right now, including every revision applied so far. Use this before revise\_content to see what you are changing, and after it to confirm the result. A status of generated\_brief means the brief is ready while the article is still being written, so body may still be empty. For the full record (cited urls, links, social posts) use get\_content\_detail instead.
- `get_content_status` (read-only): Get the normalized pipeline status (running \| succeeded \| failed) for one content row, plus the raw stage behind it. Read-only. Poll once per contentId returned by create\_content (content.pipeline.start). A stage of generated\_brief with status running means the brief is ready and waiting — for a non-auto-approve draft it stays there until approve\_brief is called, so do not treat running as always in progress. Not meaningful for tracked pages (track\_content\_urls / external rows): they have no generation pipeline and report running with a null stage forever — read them via get\_tracked\_content or get\_content\_detail instead.
- `get_content_version` (read-only): Read the full text of one saved version of a content item. Use it to compare two passes (fetch both and diff them yourself) or to check what an earlier version said before restoring it.
- `get_content_versions` (read-only): List the saved versions of a content item, newest first. Each entry carries its version number, label, how it was produced, and who made it. Use it to see how a draft evolved, then get\_content\_version to read a specific one, or restore\_content\_version to go back to it.
- `get_credit_usage` (read-only): Read recorded organization credit consumption: total, hourly (24h) or daily trend, and charged website/group/organization pools. Use for spending trends and biggest charged pools; the credit-balance tools read current balances. For 'this month' or a specific spike, supply explicit UTC window boundaries; 30d is rolling, not a calendar month. State the returned interval. A group pool is not an originating website. The breakdown may exclude unattributed usage or be capped by the billing provider; totalCreditsUsed is authoritative, not the sum of displayed entities. Negative credits are refunds. Entities are paginated: continue with window and nextOffset while hasMore. Use credit-usage events to inspect recorded actions. Requires organization billing access on a signed-in connection, or a global organization API key. Website-scoped keys are not supported. Read-only.
- `get_credit_usage_events` (read-only): Read a page of recorded credit charges/refunds and action labels for the organization, optionally filtered by originatingWebsiteId. Use to inspect a usage spike or charges behind a total. Use credit-usage totals for complete period totals. Supply explicit UTC window for calendar months. Continue with returned window, originatingWebsiteId, and nextOffset while hasMore; never compute the next offset from returned row count. Limit bounds underlying operations, each may split into several charged-pool rows. One page is not a complete action breakdown. 'Not recorded' means unknown historical action/site attribution, never infer it. Unknown raw action tags are preserved. Negative credits are refunds. Requires organization billing access on a signed-in connection, or a global organization API key. Website-scoped keys are not supported. Read-only.
- `get_identifiers` (read-only): Read the identifiers of the website's brand, or of one competitor: the names, aliases and domains Athena looks for in AI responses to count a mention. default\_identifiers (the name and domain) are always matched and cannot be removed; identifiers lists every other value, as the Competitors page shows them. case\_sensitive tells whether matching respects letter case. Read this before update\_identifiers. Read-only.
- `get_pillar_document` (read-only): Fetch a pillar's synthesized markdown document from the Knowledge Base. Returns document: null when the pillar exists but has no synthesized document yet.
- `get_pillars` (read-only): List a website's Knowledge Base pillars (excluding archived ones) with approved-fact counts, whether a synthesized document exists, and when each pillar was last researched.
- `get_prompt_discovery_runs` (read-only): Read Discover history and progress for a website, or supply the run ID returned by discovery launch to inspect one study. Distinguishes pending, running, completed, partial, failed and cancelled. limit bounds returned runs (default 10, maximum 20); has\_more means older runs remain. This is read-only: it does not start research, monitor in the background or send notifications. Candidate results can be reviewed in the application's Discover page. Requires permission to view prompts; source visibility restrictions still apply.
- `get_seo_rankings` (read-only): Read saved Google organic rankings by explicit market and device alongside observed AI visibility. Includes recent history, missing-data reasons, freshness and committed provider budget. Does not trigger collection.
- `get_shopping_metrics` (read-only): Get the Shopping Insights dashboard for a website over a date range: how often the brand's products appear in AI shopping answers (product carousels) versus competitors, average position and price, the top own and competitor products, the competitor leaderboard, retailer (merchant) breakdown, rank distribution, price comparison, and a daily appearances trend. Rates are percentages 0-100; positions are 1-based (lower is better). Requires a paid plan.
- `list_source_tags` (read-only): Read custom source tags, URL patterns, and revision tokens. These are not prompt tags or built-in categories (Owned, Competitor, Partner, Third party). Read before creating, editing, or deleting. Filter by name substring or tag ID. Use the tag offset to page tags; use a tag ID and pattern offset to page its patterns. Research cited sources with existing source analytics tools before recommending changes. If there are no tags or sources, ask which domains the user wants to organize.
- `merge_pillars` (can delete or overwrite): Merge 1-20 source pillars into a published target pillar: every fact on the sources (any review status) re-files onto the target, page links carry over keeping the stronger signal, and the source pillars are then deleted. The target must be a published pillar and must not appear among the sources. Unlike the other Knowledge Base writes, retries are strict: missing source ids are rejected rather than skipped, so re-read the pillars before retrying a failed merge.
- `move_brand_facts`: File 1-50 brand facts under a published Knowledge Base pillar — works for unfiled facts and re-files facts from other pillars. Review status never changes, and only approved facts under a published pillar feed content generation, so moving is what puts approved facts to work. Missing ids are reported in not\_found\_ids rather than failing the call, so retries are idempotent.
- `move_content` (can delete or overwrite): Move one or more content items to a different Content Hub sheet, or back to the shared pool. Sheet assignment is organizational metadata only: a move never changes an item's stage, brief, body, versions, URL, or metrics, and the item stays fully readable and revisable. targetSheetId must be a "sheet"-type tab from the Content Hub sheets list — view-type tabs (e.g. All content) are computed filters, not assignable; pass null to unassign back to the shared pool they display. Batch is all-or-nothing: if any contentIds entry does not belong to the website, nothing moves. Custom-column values follow each item when the target has a matching column (same name and type; missing columns are auto-created); values whose column conflicts by type are dropped, and multi-select selections whose option is missing on the matched target column are removed — both counts are reported. Each moved item is returned with its previous and new sheet id so no follow-up read is needed.
- `publish_content`: Record an already-published article's URL in AthenaHQ for citation and mention tracking. Does not upload or publish content to a website or CMS. Call only after the article is live. Sets the first publication time and moves the pipeline stage to done. A first publish requires a finished article (stage generated), with one exception: an optimize draft is created from a page that is already live and can be marked published while it waits at stage pending, as long as no Athena review is running on it. Briefs, still-generating or failed pieces, optimize drafts with a review in flight, and items with a scheduled CMS publish are rejected with the reason. Pass the exact public URL of the live page (a bare domain path like acme.com/blog/post is fine; the protocol is stripped on store). Calling it again on an already-published item (including external and imported pages, which are live by definition) updates the tracked URL only, keeping the original publish time. This is the only way to set a…
- `rename_content`: Rename a content row's title. URL editing is not supported — URL is the content asset's stable identity and cannot be changed here.
- `restore_content_version`: Bring an earlier version's text back as the current draft — use it when a later pass came out worse than an earlier one. Nothing is deleted: the restored text is appended as a new version on top of the history, so the passes in between remain readable and restorable.
- `revise_brief`: Rewrite a content brief from a natural-language instruction (for example: 'add a section on pricing objections', 'cut the competitor comparison'). An AI model performs the rewrite server-side, so the result is generated text, not your literal wording. Records each pass as a version; iterate by calling it again, since each call starts from the current brief. Most useful while a piece waits at status generated\_brief, where the brief still shapes what the article will say — call approve\_brief once it reads right. It also works after the article exists, to correct the brief for a later regeneration; note that revising the brief does NOT rewrite an already-generated article, so use revise\_content for that.
- `revise_content`: Rewrite an existing content draft from a natural-language instruction (for example: 'tighten the intro', 'add a section on pricing', 'remove the second half'). An AI model performs the rewrite server-side, so the result is generated text, not your literal wording; when you already have the exact replacement text, use edit\_content instead. Applies the change to the whole article and records it as a new version, so earlier passes stay recoverable via get\_content\_versions / restore\_content\_version. Iterate by calling it again — each call starts from the current text, so no version id is needed. Use this instead of create\_content to change a draft; it edits in place rather than generating a new piece. The returned body is always the complete replacement article, never just the edited passage; compare body\_word\_count with previous\_body\_word\_count to confirm nothing unexpected was lost.
- `search_brand_facts` (read-only): Semantic search over a website's approved brand facts in the Knowledge Base. Reaches facts not filed under any pillar. Returns fact text with confidence, source URL and quote, and the published pillar it belongs to (null when unfiled).
- `set_prompt_tags` (can delete or overwrite): Replace all tag assignments on an existing prompt. For additions or removals, read the prompt's current tags with get\_prompts, resolve tag IDs with get\_prompt\_tags, and pass the full resulting set. Existing assignments omitted from tag\_ids are removed; an empty array clears all assignments. Tag definitions and the prompt itself are preserved.
- `set_prompts_status`: Pause or unpause multiple prompts in one transaction
- `start_prompt_discovery`: Start a Discover study to find evidence-grounded, untracked prompt opportunities for a website. Invoke after explicit user intent to start research and review the sources, country, language, requested prompt count and custom instructions with the user. This launches asynchronous external research and model calls; the prompt count is a target, not a guaranteed yield. Sources: website\_analysis (website), social (market discussions), search\_console (connected Search Console), keyword\_gaps (plan-gated keyword opportunities), brand\_guidelines (requires custom instructions). Returns the run ID and version when startup succeeds. Prompts are not automatically added to tracking. Poll the discovery history/progress tool with the returned run ID; do not start another study to check status. Requires prompt-management permission and source entitlements. Candidate results can be reviewed in the application's Discover page.
- `start_response_streaming`: Run tracked prompts against external AI providers to collect new responses for a website. Sends prompt text to the selected providers, stores their responses in AthenaHQ, and consumes response credits. Starts immediately; use only for a user-requested run. Returns a workflow\_id; poll get\_response\_streaming\_status over MCP or GET /api/v1/response-streaming/status over the API for progress.
- `track_content_urls`: Register existing pages or third-party URLs as tracked Content Hub items so Athena attributes citations and mentions to them. Creates external content rows from bare URLs with no generation and no credit cost. Tracking starts immediately: the normalized URL becomes the citation/metric join key, so pages cited in the website's monitored AI responses accrue metrics with no publish step (use it for guest posts, partner placements, or any page Athena did not generate). Idempotent per URL: a URL already present on the website (any content type) is not duplicated; the response lists it under skipped with the existing content\_id and type. Check that type before chaining destructive calls (a skip can resolve to first-party generated content that shares the URL). Rows are created without page text, which citation tracking does not need; the body can be filled from the app later. Duplicate URLs within one call (including tracking-param variants of the same page) collapse to one row, first occur…
- `update_brand_fact`: Update one brand fact's text, source URL, or confidence in the Knowledge Base. Only provided fields change; pass source\_url: "" to clear the source. Changing the text creates a new fact (new id) and archives the current one; the new fact keeps the current review status and the response carries it. Source URL and confidence edits update the fact in place. Duplicates across other facts are not rejected here (Knowledge Base dedup owns those). Does not change review status.
- `update_identifiers` (can delete or overwrite): Add or remove identifiers on the website's brand, or on one competitor, under the same rules as the Competitors page. Call get\_identifiers first. The name and domain cannot be removed. An identifier that is already listed, or that another tracked brand or competitor on this website already uses, is refused, and nothing is saved. New AI responses use the change right away. Past responses are reanalyzed only when someone runs the backfill on the Competitors page, which costs credits; this tool never starts it. changes\_awaiting\_backfill counts the edits waiting for it, not responses.
- `update_location`: Update a location for a website
- `update_pillar`: Update a Knowledge Base pillar's name, description, or status. At least one of name, description, or status must be provided; only provided fields change, and description: "" clears the stored description. Renaming fails with a conflict when another pillar already uses the name. Status accepts published or archived: archiving hides the pillar from get\_pillars and stops its facts feeding content generation, while keeping the facts stored.
- `update_prompt`: Update a prompt's metadata (text, type, topic, geography)
- `update_source_tag` (can delete or overwrite): Edit a custom source tag: rename it, add URL patterns, or remove exact patterns returned by the source-tag listing tool. Other patterns and color stay unchanged. Read the source-tag listing tool first and supply the tag's current revision in the expected-revision input. Obtain explicit user confirmation of the name and pattern changes before calling; do not apply a recommendation without permission. MCP executes immediately after authorization; Athena AI chat presents an approval card. If the tag changed, read again and obtain approval for a fresh edit. Never retry a declined proposal unless the user requests it. Up to 500 additions and 500 removals. A false analytics-refresh result means the tag saved but filtered analytics may still be cached.
- `update_topic`: Update a topic's name or description

### Connect it

Claude Code:

```sh
claude mcp add --transport http athenahq https://api.athenahq.ai/api/mcp
```

- Add to Cursor: <cursor://anysphere.cursor-deeplink/mcp/install?name=athenahq&config=eyJ1cmwiOiJodHRwczovL2FwaS5hdGhlbmFocS5haS9hcGkvbWNwIn0%3D>
- Add to VS Code: <vscode:mcp/install?%7B%22name%22%3A%22athenahq%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.athenahq.ai%2Fapi%2Fmcp%22%7D>
- Claude.ai and Claude Desktop: Customize, Connectors, "+", Add custom connector, then paste https://api.athenahq.ai/api/mcp
- ChatGPT: Settings, Apps, Advanced settings, turn on Developer mode, Create, then paste https://api.athenahq.ai/api/mcp (this usually works only with servers that use self-serve sign-in or none)

JSON for Cursor, Windsurf and other clients that connect to hosted servers:

```json
{
    "mcpServers": {
        "athenahq": {
            "type": "http",
            "url": "https://api.athenahq.ai/api/mcp"
        }
    }
}
```

## Questions

### Does AthenaHQ have an official MCP server?

Yes. AthenaHQ publishes its MCP server itself. AthenaHQ's own documentation describes it. MartechDB only lists servers a vendor publishes, never community copies.

### What is the AthenaHQ MCP server URL?

The address is https://api.athenahq.ai/api/mcp.

### How do I connect AthenaHQ MCP to Claude, ChatGPT or Cursor?

In Claude, add https://api.athenahq.ai/api/mcp as a custom connector (Customize, Connectors, Add custom connector). In Cursor, use the Add to Cursor link on MartechDB's page, or paste the JSON settings into your mcp.json. In Claude Code, run: claude mcp add --transport http athenahq https://api.athenahq.ai/api/mcp

### What can the AthenaHQ MCP server do?

It offers 103 tools, including open\_ai\_access, check\_public\_ai\_access, get\_prompt\_schedules, get\_ai\_search\_value and get\_prompts (as listed on 18 Oct 2026). 64 are marked read-only and 12 can delete or overwrite data.

### Is the AthenaHQ MCP server in the official MCP Registry?

No. AthenaHQ hasn't published it to the official MCP Registry.

### Is the AthenaHQ MCP server working?

Yes. It answered our most recent check. We last checked it on 18 Oct 2026.

### What are the alternatives to AthenaHQ's MCP server?

In SEO, the most agent-friendly alternatives with an official MCP server are DataForSEO (100/100), Sitebulb (100/100), Seolyze (97/100), Rebrandly (95/100) and SE Ranking (94/100). AthenaHQ scores 65/100 on the same index.

## Change history

- 2026-10-17: Added to MartechDB with AthenaHQ MCP

## Alternatives to AthenaHQ's MCP server

In SEO, the most agent-friendly first:

- [DataForSEO](https://martechdb.com/vendors/dataforseo.md) (dataforseo.com), Agent Readiness Index 100/100
- [Sitebulb](https://martechdb.com/vendors/sitebulb.md) (sitebulb.com), Agent Readiness Index 100/100
- [Seolyze](https://martechdb.com/vendors/seolyze.md) (seolyze.com), Agent Readiness Index 97/100
- [Rebrandly](https://martechdb.com/vendors/rebrandly.md) (rebrandly.com), Agent Readiness Index 95/100
- [SE Ranking](https://martechdb.com/vendors/se-ranking.md) (seranking.com), Agent Readiness Index 94/100

## Get this data

- API: `curl https://martechdb.com/api/v1/vendors/athenahq.ai`
- MCP: `claude mcp add --transport http martechdb https://martechdb.com/mcp`, then ask about AthenaHQ.
- Web page: https://martechdb.com/vendors/athenahq
