DemandSphere MCP Server
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DEMANDSPHERE_HOST | No | HTTP server bind address | 127.0.0.1 |
| DEMANDSPHERE_PORT | No | HTTP server port | 8765 |
| DEMANDSPHERE_API_KEY | Yes | DemandSphere API key | |
| DEMANDSPHERE_BASE_URL | No | API base URL | https://api.demandsphere.com |
| DEMANDSPHERE_TRANSPORT | No | Transport mode: stdio or streamable-http | stdio |
| DEMANDSPHERE_REQUEST_TIMEOUT | No | HTTP timeout (seconds) | 30.0 |
| DEMANDSPHERE_MAX_REQUESTS_PER_MINUTE | No | Rate limit cap | 60 |
| DEMANDSPHERE_MAX_RESULTS_PER_TOOL_CALL | No | Max rows per response | 100 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_sitesA | List all sites with org/account hierarchy. Returns site IDs needed by other tools. |
| list_sites_flatA | List all sites as a flat array. Returns id, name, url, keyword count. |
| serp_analyticsB | SERP analytics with multiple views. view='performance': per-keyword rank, traffic, CTR (requires global_key). view='trends': rank history over time (requires site_id). view='engine_comparison': compare rankings across engines (requires site_id). view='engine_summary': aggregate rank/visits/revenue (requires site_id). |
| get_keyword_groupsB | Keyword group/tag performance with ranking bucket distribution (bucket0-bucket8), volume, traffic, CTR. |
| get_local_rankingsD | Local search rankings with per-location rank history. |
| get_landing_matchesC | Check if ranking pages match preferred landing pages. Returns match/mismatch/none status. |
| get_landings_historyB | Landing page history for a specific keyword. Shows which page ranked on each date. |
| get_mentionsC | Brand mentions and citations in AI responses. Returns per-keyword mention counts, context sentences, cited URLs, client vs competitor breakdown. |
| get_keyword_citationsC | Citation URLs for a single keyword on an AI platform. |
| get_bulk_citationsB | Citation URLs for multiple keywords in one call (max 50). Returns keyword→URLs mapping. |
| get_site_citationsB | Paginated citations for all keywords on a site. Returns keyword→URLs mapping. |
| llm_analyticsB | LLM traffic analytics with multiple views. view='stats': aggregated traffic stats. view='performance': side-by-side LLM comparison. view='channels': per-channel comparison. view='cross_channel': cross-channel overview. view='cross_llms': cross-platform comparison. Use metric param for non-stats views. Filter with llms_list/channels_list (comma-separated) for stats/performance views. |
| get_llm_filtersC | Available filter values for LLM analytics: channels, LLM names, metrics. |
| get_people_also_askC | PAA questions from SERPs. Optionally includes search intent and AdWords data (volume, CPC, competition). |
| list_brandsC | List brands configured for a site (used for GenAI mention/citation tracking). |
| create_brandC | Create a new brand for GenAI visibility tracking. |
| update_brandB | Update an existing brand's name or description. |
| delete_brandsC | Delete one or more brands by ID. |
| searchB | Search DemandSphere data. Returns record IDs for use with fetch(). Covers keywords, AI mentions, citations, LLM traffic, PAA. |
| fetchA | Fetch a record by ID from a previous search() call. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| weekly-ranking-report | Analyze keyword rankings for the last 7 days. Highlights drops, gains, and new top-10 entries. |
| genai-visibility-check | Check AI citation visibility across ChatGPT, Gemini, and Perplexity. |
| competitor-gap | Compare keyword rankings between two sites to find competitive gaps and opportunities. |
| landing-page-audit | Audit landing page match/mismatch status and identify keywords pointing to wrong pages. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| search-engines | Available search engine codes for the search_engine parameter. |
| sort-options | Valid sort_by values per tool category. |
| granularity | Valid granularity values for time-series data. |
| metrics | Valid metric values for LLM analytics tools. |
| sites | Available sites with IDs, global keys, names, and URLs. |
TDQS
Scored across 20 tools
Several tools have overlapping purposes, particularly the citation tools (get_keyword_citations, get_bulk_citations, get_site_citations) and site listings (list_sites vs list_sites_flat). However, descriptions clarify the differences in scope and format, so the ambiguity is manageable but not negligible.
The naming follows a mostly verb_noun pattern (list_sites, get_keyword_groups, create_brand), but there are deviations like serp_analytics, llm_analytics, and get_people_also_ask, plus plural inconsistencies (delete_brands vs create_brand). This mixed style reduces predictability.
With 20 tools, the server is slightly over the ideal range but still scoped to a complex domain covering sites, keywords, brands, citations, and LLM analytics. Some tools could be consolidated, but the count is defensible for the feature set.
The tool surface covers core analytics and brand management well, including search/fetch for data exploration. Minor gaps exist, such as no direct keyword list tool or site management operations, but these are likely outside the intended scope.