Skip to main content
Glama
Alidade MCP

Alidade MCP

Official
by alidade-ai

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/mcp

Cursor and other clients

{
  "mcpServers": {
    "alidade": {
      "command": "npx",
      "args": ["-y", "@alidade/mcp"],
      "env": {
        "ALIDADE_API_KEY": "ald_xxxxxxxxxxxxxxxx",
        "X_BEARER_TOKEN": "xxxxxxxx"
      }
    }
  }
}

Variable

Required

Description

ALIDADE_API_KEY

yes

Your Alidade workspace API key.

X_BEARER_TOKEN

no

X app-only bearer token used to fill in X post content.

ALIDADE_MCP_URL

no

Override the upstream server (default https://api.alidade-ai.com/mcp).

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 Desktop

Releasing

Bump version in both package.json and manifest.json, commit, then tag and push:

git tag v0.1.1 && git push origin v0.1.1

The release workflow checks, tests, publishes to npm (Trusted Publishing), and creates a GitHub release with the .mcpb attached.

Available Tools

13 tools
find_entitiesFind entitiesA
Read-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 analyticsA
Read-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 entityA
Read-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_workspace_infoGet workspace infoA
Read-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 organizationsA
Read-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 searchesA
Read-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 adsA
Read-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 mentionsA
Read-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 mentionsA
Read-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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A4.2/5.0

    Scored across 13 tools

    Disambiguation5/5

    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.

    Naming Consistency4/5

    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.

    Tool Count5/5

    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.

    Completeness4/5

    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

    ActivityMaintained
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A 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
    • A
      license
      Not graded
      quality
      B
      maintenance
      Provides 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 npm
      1
      Apache 2.0
    • F
      license
      Not graded
      quality
      C
      maintenance
      Connects 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.
      -