advocatehub-mcp
Click on "Install 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., "@advocatehub-mcplist all active members in the 'Gold' group"
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.
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.
Related MCP server: salesforce-marketing-mcp
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/ thesetupprompt), 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.mdQuick 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 /mcpSee 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 typecheckRepo 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 referenceDesign notes worth knowing before you touch this
Write safety: every write tool takes a
confirmflag.confirm:false(or omitted) only previews — it never calls the API.confirm:trueexecutes and always appends exactly one entry to the per-tenant audit log (~/.advocatehub-mcp/audit/<orgId>.jsonl), whether it succeeded or failed. Seesrc/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. Seesrc/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-mcpis wiped.contacts_api_searchis a per-tenant Labs flag. If it's off,/contactssilently ignores filters instead of erroring.search_membersrefuses 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. Seesrc/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_memberdescribe this explicitly in their tool descriptions so an LLM doesn't undersell what the action does.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/akashtrilogy/advocatehub-influitive-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server