advocatehub-mcp

advocatehub-mcp

MCP server for Influitive AdvocateHub that provides 15 tools across members, groups, challenges, events, rewards, and approvals, enabling read and write operations with confirm gates and audit logging.

Category
Visit Server

README

advocatehub-mcp

A Model Context Protocol server for Influitive AdvocateHub, built entirely on the public Influitive REST API (api.influitive.com / api.influitives.com in staging). This is Phase 1: no hub source changes, no internal endpoints — everything here is something any AdvocateHub customer could build against their own API token.

What it does

15 tools across members, groups, challenges, events, rewards, and approvals — 9 read-only, 6 write (all confirm-gated and audit-logged). See docs/tool-reference.md for the full list, endpoints, and known API gaps.

Status

  • P1a (stdio, for Claude Desktop/Code): done. See docs/setup-claude.md.
  • P1b (streamable HTTP, for ChatGPT / remote clients): done, needs a staging smoke pass. See docs/setup-chatgpt.md.
  • Target environment so far: staging (https://api.influitives.com). Production support is a config change (INFLUITIVE_BASE_URL / the setup prompt), not a code change — re-run the staging smoke checklist against production before trusting it there.

Quick start (Claude Desktop / Code, stdio)

npm install
npm run build
npm run setup     # one-time: stores your API token + org id in the OS keychain
npm run start      # or point Claude Desktop's config at dist/index.js — see docs/setup-claude.md

Quick start (hosted HTTP, e.g. ChatGPT)

npm install
npm run build
npm run setup                 # once per tenant
export MCP_HTTP_BEARER_MAP="some-long-random-string:<orgId>"
npm run start:http            # listens on PORT (default 8787), serves POST/GET/DELETE /mcp

See docs/setup-chatgpt.md for the full connector setup and the two-credential auth model (MCP bearer vs. Influitive API token).

Development

npm run dev            # tsx watch, stdio
npm run dev:http       # tsx watch, streamable HTTP
npm test               # unit tests (mocked fetch, no network)
npm run test:integration  # opt-in, hits real staging — see .env.example
npm run lint
npm run typecheck

Repo layout

bin/setup.ts          interactive credential setup CLI
src/
  index.ts            stdio entrypoint (P1a)
  http.ts             streamable HTTP entrypoint (P1b)
  server.ts           builds the McpServer and registers all tools
  config/             credentials: types, keychain/file store, env-var loader, HTTP bearer resolution
  client/             InfluitiveClient: auth headers, retries, cursor pagination, rate limiting
  errors/             typed error classes + HTTP status -> error mapping
  registry/           local per-tenant index of challenges this server has created
  audit/              append-only JSONL write audit log
  tools/               the 15 tools, grouped by resource, plus shared confirm-gate/formatting helpers
test/
  unit/               fast tests, fetch mocked, no network
  integration/        opt-in, mutates a real (disposable) staging tenant
docs/                  setup guides + tool reference

Design notes worth knowing before you touch this

  • Write safety: every write tool takes a confirm flag. confirm:false (or omitted) only previews — it never calls the API. confirm:true executes and always appends exactly one entry to the per-tenant audit log (~/.advocatehub-mcp/audit/<orgId>.jsonl), whether it succeeded or failed. See src/tools/shared/confirmGate.ts.
  • No raw exceptions cross the MCP boundary. Every tool handler is wrapped so typed errors (AuthError, NotFoundError, ...) come back as { isError: true } text, never an unhandled throw. See src/tools/shared/formatters.ts.
  • The public API has no "list challenges" endpoint. ChallengeRegistry (src/registry/challengeRegistry.ts) is a local, best-effort index of challenges this server created — it does not know about challenges created any other way, and is lost if ~/.advocatehub-mcp is wiped.
  • contacts_api_search is a per-tenant Labs flag. If it's off, /contacts silently ignores filters instead of erroring. search_members refuses filtered queries once it knows the flag is off (config.contactsSearchEnabled === false), and self-heals that cache the first time it sees evidence either way. See src/tools/members.ts.
  • Locking a member is seat reclaim, per current product policy: it blocks login and excludes the member from advocate counts, targeting, and the billable seat count. deactivate_member/reactivate_member describe this explicitly in their tool descriptions so an LLM doesn't undersell what the action does.

Recommended Servers

playwright-mcp

playwright-mcp

A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.

Official
Featured
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.

Official
Featured
Local
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
graphlit-mcp-server

graphlit-mcp-server

The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.

Official
Featured
TypeScript
Kagi MCP Server

Kagi MCP Server

An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.

Official
Featured
Python
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

Exa Search

A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured