Developers
Connect your AI tools through the MCP server
Give Claude Desktop, ChatGPT, Cursor and any other MCP client direct access to your Baseline Labs data, on the same credits and permissions as your browser session.
Create an API key See the packageClaude.ai needs no key at all - it signs in as you.
In Claude.ai, add Baseline Labs as a custom connector and sign in when asked - no API key needed. Other clients take an API key: create one in your developer console, then paste the config below into your MCP client.
Settings > Connectors > Add custom connector URL: https://baselinelabs.ai/mcp/
Claude.ai registers itself and sends you to a Baseline Labs sign-in and consent screen. Approving creates an API key named after the app; revoke it any time from your API keys.
{
"mcpServers": {
"baseline-labs": {
"command": "npx",
"args": [
"-y",
"mcp-remote@latest",
"https://baselinelabs.ai/mcp/",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer bl_your_key"
}
}
}
}
Claude Desktop doesn't speak HTTP MCP natively - mcp-remote is a small npx shim that bridges stdio to our HTTPS endpoint. Requires Node.js installed locally. The token goes in env (not the header string directly) to dodge Claude Desktop's arg-quoting bug with spaces.
{
"mcpServers": {
"baseline-labs": {
"url": "https://baselinelabs.ai/mcp/",
"headers": {
"Authorization": "Bearer bl_your_key"
}
}
}
}
Server URL: https://baselinelabs.ai/mcp/ Auth: Bearer bl_your_key
Interactive setup: The MCP tab in your console generates the config with your actual key pre-filled and shows live tool status.
The same connection serves two very different clients, and it is worth knowing which one you have before you ask it for something.
A coding agent - Claude Code, Cursor - has your repository. It can read your Baseline data and act on it: ask it to add AI bot tracking to your site and it fetches your token, writes the module in and wires it up.
A chat client - Claude.ai, ChatGPT - has no filesystem. It can read everything and hand you code to paste, but it cannot install anything for you. Worth knowing: anything it fetches, including your site token, ends up in that conversation history.
Once connected, your AI tool can call any of these. Reads are free; anything that starts new work costs credits, and the charge lands when the tool runs - ask your AI for get_account if you want the balance first.
| Category | Tools | Description |
|---|---|---|
| Studies | list_studies get_study create_study get_study_overview |
Your studies, and the full competitive picture of one |
| Audits | get_surface list_audits get_audit get_audit_findings list_audit_templates get_audit_template_overview run_audit |
All eight audits through one set of tools - Site Pulse, Schema Audit, AI Vision, Reputation, Fan-out, Active Competitors, visibility reports and brand scans. get_surface is the fastest way to see what a study has actually measured; the rest take a kind |
| Audit runs | list_audit_runs get_audit_run |
A single launch that fanned several audits at one URL, with each child's progress |
| Competitors | list_competitors add_competitor set_competitor_status |
Track, reject or add rivals on a study |
| Search | search get_search_result list_saved_queries get_ranked_keywords parse_business_info |
Query across Google, ChatGPT, Perplexity, Gemini, Google AI Mode, Claude and DeepSeek, plus stored keyword rankings and business-profile parsing |
| Reports | list_report_templates create_report_template run_report get_report get_report_queries list_reports |
Track keyword visibility across engines |
| PR & Brand | create_mention_scan get_mention_scan list_mention_scans get_mention_records list_brand_templates run_brand_report get_brand_report |
Sentiment and mention monitoring |
| Analytics | get_backlinks get_referring_domains get_analytics |
Link graph and usage data |
| Scores & citations | get_visibility_score get_cited_sources list_keyword_rankings |
The composite score and the components behind it, the domains AI engines actually cited when answering about you, and stored keyword rankings |
| Tracked sites | list_tracked_sites get_bot_traffic get_bot_errors get_site_traffic get_google_search_data |
Observed traffic on a site carrying the tracking tag - which AI crawlers came, which pages they took, plus human traffic and linked Search Console data |
| Study events | log_event |
Leave a dated marker on a study's timeline after changing the site, so the change sits next to the traffic on the day it happened |
| Content Tool | list_content_jobs get_content_job |
Proposed page edits with the rationale and sources behind each one |
| Schema | generate_schema list_rolling_domains get_domain_schema |
JSON-LD generation and rolling-schema domains |
| Crawling | crawl_domain get_crawl_status get_page_content |
Pull an external site into the corpus for a study to reason about (our own domains are refused) |
| Bot tracking | register_bot_reporting get_bot_reporting_template check_bot_reporting |
Install AI bot tracking on a custom stack - see Integrations |
| Account | get_account |
Balance and account info |
list_saves, get_save and create_save still work as deprecated aliases for the three _study tools. A save and a study are the same thing - the entity was renamed and the old tool names were kept so existing clients did not break. Your client will list 61 names for that reason: the 58 tools above, plus these three aliases pointing at tools you already have.
If your site is not WordPress or behind Cloudflare, the three *_bot_reporting tools are the fast path. In a coding agent, this is the whole install:
Register example.com for Baseline bot reporting, then add the reporting module to this app.
It calls register_bot_reporting to mint your site token, get_bot_reporting_template to fetch a dependency-free module pre-filled with it, and check_bot_reporting to confirm hits are arriving. Nothing is improvised - the agent is handed a reference implementation, not asked to invent the wire format.
One thing to know: that template contains your site’s ingest token. It is a write-only credential for a public endpoint - it reads nothing and reaches no other site - but anyone holding it could post fabricated bot hits for that domain. In a chat client it lands in your conversation history. Prefer a coding agent, or paste the module yourself from Integrations.
You can also call the MCP server programmatically using any MCP client library:
from mcp import ClientSession
from mcp.client.streamable_http import streamablehttp_client
async def main():
async with streamablehttp_client(
"https://baselinelabs.ai/mcp/",
headers={"Authorization": "Bearer bl_your_key"}
) as (read, write, _):
async with ClientSession(read, write) as session:
await session.initialize()
# List your studies
result = await session.call_tool("list_studies", {})
print(result)
Or skip MCP entirely and use the REST API directly - no library required.