Alidade MCP
OfficialA local MCP proxy for Alidade that exposes workspace analytics and mention-search tools, optionally enriching X posts with content/metrics using your own X bearer token.
Verify workspace access, API tier, rate limit, and monthly post quota.
Browse saved searches and tracked organizations/entities, including entity details and group membership.
Get aggregated analytics such as post volume, engagement, time series, themes, policy issues, network analysis, tone, brand positioning, content breakdown, and channel presence.
Search mentions chronologically with filters and content-analysis labels.
Semantically search mentions by natural-language meaning.
Create, update, and delete workspace saved searches.
With
X_BEARER_TOKEN, fill in X post text and metrics (likes, shares, replies, views); without it, behave like the hosted server and return X post IDs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Alidade MCP search X mentions of my brand from the last week and summarize them"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Alidade MCP (local)
A local MCP server for
Alidade. It forwards every tool to Alidade's hosted
MCP server, and when you give it your own X API bearer token it fills in the
text and metrics of X posts before your agent sees them — so one
search_mentions call returns readable X posts.
Why it's local: X's terms don't let Alidade redistribute X post content, so the hosted server returns X posts as IDs. This server runs on your machine (or your own infrastructure) and fetches the content from X directly with your key; Alidade never sees your X credentials.
Without an X token it behaves exactly like the hosted server.
Setup
You need an Alidade API key (Settings → Workspace → API) and, optionally, an app-only bearer token from your X developer account. X bills post lookups to your X account.
Claude Desktop
Download alidade-<version>.mcpb from the
latest release,
open it, and enter your keys in the settings form. Keys are stored in your
OS keychain.
Claude Code
claude mcp add alidade \
-e ALIDADE_API_KEY=ald_xxxxxxxxxxxxxxxx \
-e X_BEARER_TOKEN=xxxxxxxx \
-- npx -y @alidade/mcpCursor and other clients
{
"mcpServers": {
"alidade": {
"command": "npx",
"args": ["-y", "@alidade/mcp"],
"env": {
"ALIDADE_API_KEY": "ald_xxxxxxxxxxxxxxxx",
"X_BEARER_TOKEN": "xxxxxxxx"
}
}
}
}Variable | Required | Description |
| yes | Your Alidade workspace API key. |
| no | X app-only bearer token used to fill in X post content. |
| no | Override the upstream server (default |
In your own agent backend
If your product runs its own agent, use the package as a library and connect the returned MCP server to your agent over any MCP transport (the example uses an in-process pair):
import { Client, InMemoryTransport } from "@modelcontextprotocol/client";
import { createProxy } from "@alidade/mcp";
const server = await createProxy({
apiKey: process.env.ALIDADE_API_KEY!,
xBearerToken: process.env.X_BEARER_TOKEN,
});
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
await server.connect(serverTransport);
const client = new Client({ name: "my-agent", version: "1.0.0" });
await client.connect(clientTransport);Or run npx @alidade/mcp as a stdio subprocess from any agent framework that
supports stdio MCP servers.
If you show X content to your own users, X's Developer Agreement and Policy apply to you as the X key holder (display requirements, honoring deletions).
Related MCP server: Adi MCP
How X posts are filled in
For search_mentions and semantic_search_mentions, X posts that come back
without text are looked up with X's
posts lookup in batches
of 100. Each post's content and metrics (likes, shares = reposts +
quotes, replies, views) are filled in, and a note says how many were
filled. Posts deleted or made private on X stay null. If the X call fails
(bad token, rate limit), the result is returned unchanged with the reason.
Development
pnpm install
pnpm check # oxlint + tsc
pnpm test
pnpm build # dist/cli.js (bundled) + library build
pnpm pack:mcpb # alidade-<version>.mcpb for Claude DesktopReleasing
Bump version in both package.json and manifest.json, commit, then tag
and push:
git tag v0.1.1 && git push origin v0.1.1The release workflow checks, tests, publishes to npm (Trusted Publishing),
and creates a GitHub release with the .mcpb attached.
Available Tools
13 toolscreate_saved_searchCreate a saved searchA
Create a workspace saved search with manually curated comparison groups of entities (get entity IDs from find_entities). It appears in the app for all workspace members and can be used as savedSearchId in the other tools. Keyword filters accept either keywords/excludeKeywords or a booleanQuery — not both. To give each group its own keyword filter, set the keyword parameters on the groups instead (topicSearchMode perGroup). Dynamic (rule-based) groups can only be created in the app.
Inputs: name (required), groups (required), keywords, dateRange, +8 more.
delete_saved_searchDelete a saved searchADestructiveIdempotent
Permanently delete a workspace saved search with team_edit visibility (when connected via OAuth, only searches you own; a workspace API key can delete any team-editable search). Refused while readouts, bulletins, or chat projects still reference it — those references must be removed in the app first. Prefer update_saved_search when the goal is to change a search rather than remove it.
Inputs: id (required).
find_entitiesFind entitiesARead-only
Find tracked entities (brand accounts, executives, campaigns, etc.). At least one of search, organizationId, or savedSearchId is required — there is no unfiltered listing. Entity IDs can be passed to get_analytics and search_mentions via entityIds for ad-hoc scopes.
Inputs: cursor, search, groupId, category, +3 more.
get_analyticsGet analyticsARead-only
Aggregated analytics for a scope of entities, broken down per comparison group. Scope with exactly one of savedSearchId (recommended — its groups, platforms, date range, and keyword filters all apply) or entityIds (ad-hoc, treated as a single group); the other parameters filter or override the scope. Metrics: post-volume (post counts + share of voice), engagement (likes/shares/replies), time-series (engagement over time), themes (messaging-theme breakdown; requires taxonomy), policy-issues, policy-entities (mentioned policymakers/bills with stance), network-analysis (mentioned people/orgs/events), tone-voice (writing tone + brand voice), brand-positioning, content-breakdown (by content type), channel-presence (per-entity accounts with follower counts). Content-analysis metrics report over the analyzed-post subset, so their denominators are smaller than raw post counts.
Inputs: metric (required), dateTo, dateFrom, keywords, +11 more.
get_entityGet an entityARead-only
Get one tracked entity by ID: name, category, description, the organization it belongs to, and the websites on file for it (homepage, secondary site, blog, newsroom). Use it to resolve an entity ID seen in search_mentions results, a saved-search group, or channel-presence analytics. Per-channel account details come from get_analytics with the channel-presence metric.
Inputs: id (required).
get_saved_searchGet a saved searchARead-only
Get one saved search's configuration: comparison groups (with entity counts), platforms, date range, and keyword filters. To enumerate a group's member entities, use find_entities with savedSearchId and groupId.
Inputs: id (required).
get_workspace_infoGet workspace infoARead-only
Identify the calling workspace: name, API access tier, how the call was authenticated, request rate limit, and monthly post-quota status. Useful as a first call to verify the connection works and see what access is available.
Inputs: no named parameters.
list_organizationsList tracked organizationsARead-only
List the tracked organizations (companies, advocacy groups, legislative and government bodies, etc.) the workspace can access. Each entity returned by find_entities belongs to one of these organizations.
Inputs: type, cursor, search, pageSize.
list_saved_searchesList saved searchesARead-only
List the saved searches available to the workspace (workspace-shared plus Alidade-curated). A saved search bundles comparison groups of entities, a platform filter, a date range, and keyword filters — pass its id as savedSearchId to get_analytics or search_mentions. This is the recommended starting point for analytics questions.
Inputs: cursor, search, pageSize.
search_adsSearch adsARead-only
The paid ads run by the entities in the scope, collected from the Google, Meta, and LinkedIn ad libraries, newest first by default: copy, link, creative URLs, run dates, reported impression and spend ranges, and a link to the ad's public ad-library page. Scope with savedSearchId or entityIds like the other tools; the date range keeps every ad whose run overlaps it, keyword filters match the ad's headline and body, and adPlatforms (google, meta, linkedin) narrows the ad libraries — a saved search's platform filter does not apply to ads. Requires the mentions API tier, and every returned ad counts against the workspace's monthly post quota — keep pageSize small (default 25) and only paginate when needed.
Inputs: sort, cursor, dateTo, dateFrom, +9 more.
search_mentionsSearch mentionsARead-only
The individual posts behind the analytics numbers, with Alidade's content-analysis labels attached, newest first by default. Takes the same scope parameters as get_analytics, plus optional label filters (policyIssue, policySubissue, productTheme, csrTheme, campaignTheme, brandPositioning, mentionedEntity) that take arrays of label values matching the labels in get_analytics breakdowns: any value within a filter matches, and all filters must match. Requires the mentions API tier, and every returned post counts against the workspace's monthly post quota — keep pageSize small (default 25) and only paginate when needed. Posts from platform x omit text and engagement metrics per X API terms (Alidade's identifiers and analysis labels are still included); the result lists their X post IDs for lookup with an X API tool.
Inputs: sort, cursor, dateTo, csrTheme, +16 more.
semantic_search_mentionsSemantic search mentionsARead-only
Find posts by meaning: embeds a natural-language query and returns the most similar posts (pure vector similarity, no keyword matching), most relevant first. Results carry the post text, metrics, and entity but not the content-analysis labels — use search_mentions for chronological listings, keyword filters, or labels. Scope with savedSearchId or entityIds like the other tools — a saved search's groups, platforms, and date range apply, but its keyword filters do not (fold important terms into query). Requires the mentions API tier, and every returned post counts against the workspace's monthly post quota — keep limit small (default 15). Posts from platform x omit text and engagement metrics per X API terms; the result lists their X post IDs for lookup with an X API tool.
Inputs: query (required), limit, dateTo, dateFrom, +3 more.
update_saved_searchUpdate a saved searchADestructive
Update a workspace saved search. Only searches with team_edit visibility can be modified — Alidade-curated and view-only searches cannot, and when connected via OAuth only the search's owner can change its visibility. Omitted fields are left unchanged. groups replaces all comparison groups: include each existing group's id (from get_saved_search) to preserve it, since readouts and bulletins pin group IDs and dropping a referenced group is refused. Providing any top-level keyword parameter replaces the whole keyword filter (empty arrays clear it) and switches to one shared filter. With per-group keywords (topicSearchMode perGroup), keyword parameters on a group replace that group's filter; existing groups (by id) without them keep their current keywords, new groups start with none, and when switching to perGroup they start from the shared filter. Searches with dynamic (rule-based) groups accept only name and description changes.
Inputs: id (required), name, groups, keywords, +9 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 13 tools
Every tool targets a distinct resource+action, and the two potentially confusable tools (search_mentions vs semantic_search_mentions) are explicitly contrasted in their descriptions as chronological/label-filtered vs pure vector similarity. Similarly find_entities, get_entity, and list_organizations have clearly separated roles, and the saved-search CRUD tools are unmistakable.
Almost all tools follow a predictable snake_case verb_noun pattern (get_analytics, create_saved_search, delete_saved_search, list_organizations). The only deviation is semantic_search_mentions, which prefixes a modifier before the verb, and the mix of find_/list_ for discovery verbs is slightly inconsistent though still readable.
13 tools is squarely in the well-scoped range, with each tool earning its place: discovery (list/get saved searches, organizations, entities), querying (mentions, semantic mentions, ads, analytics), and lifecycle management (create/update/delete saved search). No obvious redundancy or padding.
Saved-search lifecycle is fully covered (list/get/create/update/delete), and the analytics surface spans mentions, ads, entities, and multiple metrics. Minor gaps exist around app-only concepts referenced in descriptions (bulletins, readouts, chat projects, dynamic group creation) that have no API tools, but agents can work around these.
Maintenance
Related MCP Connectors
Hosted X (Twitter) MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Agent-first social media publishing, scheduling, analytics, and unified inbox API + 16-tool MCP server across 18 social platforms (X, LinkedIn, Instagram, YouTube, TikTok, Threads, Bluesky, Reddit, Telegram, Discord, Mastodon, Facebook, Pinterest).
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceLocal MCP server that exposes fixed tools for GPT, Claude, and Gemini while routing to any OpenAI-compatible chat completions backend with independent configuration per target.1-
- AlicenseNot gradedqualityDmaintenanceA remote MCP server that exposes tools from many services (X, LinkedIn, GitHub, Gmail, Notion, etc.) through a single endpoint on Cloudflare Workers, enabling unified access to third-party APIs via natural language.MIT
- AlicenseNot gradedqualityBmaintenanceProvides a single MCP endpoint that dynamically discovers, routes, policy-checks, and executes hundreds of MCP tools from any agent, with optional LLM-based routing.16 npm1Apache 2.0

ScholarMuse MCPofficial
FlicenseNot gradedqualityCmaintenanceConnects AI agents to a hosted remote MCP endpoint that searches academic papers, verifies references and retraction status, retrieves research datasets, grants, and biological or chemical data, and generates scientific figures across 50+ upstream sources. Supports OAuth sign-in with per-tool credit accounting, structured error reporting, and source attribution for results.-