ConvoKit MCP
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., "@ConvoKit MCPsearch the ConvoKit docs for how to authenticate users in a React app"
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.
ConvoKit MCP
Two MCP connections in one TypeScript package:
Connection | Purpose | Authentication |
Developer | Help coding assistants integrate ConvoKit using official SDK, UI, authentication, and REST guides | None |
App | Manage users, tokens, memberships, conversation metadata, and messages in one configured app | App credentials in server environment; separate bearer token for HTTP |
You need only the Developer connection to implement an integration. Add the App connection when your assistant should also configure or manage the app. There is no need for a separate MCP server for each SDK, UI framework, or existing REST API surface.
Both connections can run in one process, or in separate processes using the same package. The implementation uses the official MCP TypeScript SDK v2, supports local stdio and remote Streamable HTTP, and accepts the legacy 2025 MCP initialization exchange.
Quick start
Public Developer connection
Connect directly to https://mcp.convokit.app/mcp/developer. No installation or credentials are required.
codex mcp add convokit_developer --url https://mcp.convokit.app/mcp/developerOr add this to ~/.codex/config.toml:
[mcp_servers.convokit_developer]
url = "https://mcp.convokit.app/mcp/developer"For Cursor, use examples/mcp-production.json in .cursor/mcp.json. The public setup guide is convokit.app/docs/mcp; Codex options are documented in the official MCP guide.
App management from the versioned release
Requires Node.js 22.20 or later. Set your app's CONVOKIT_CLIENT_ID and CONVOKIT_CLIENT_SECRET in the local MCP process environment. Launch with:
npx -y github:ConvoKitApp/ConvoKit-MCP#v0.1.0 appThe first launch installs dependencies and builds the package. Allow up to two minutes; subsequent launches use npm's cache. The release is distributed from GitHub, not the npm registry.
Codex forwards the secret from the environment that launches it:
[mcp_servers.convokit_app]
command = "npx"
args = ["-y", "github:ConvoKitApp/ConvoKit-MCP#v0.1.0", "app"]
env_vars = ["CONVOKIT_CLIENT_SECRET"]
startup_timeout_sec = 120
[mcp_servers.convokit_app.env]
CONVOKIT_CLIENT_ID = "your-app-id"The dashboard's MCP integration tab provides app-specific Codex and JSON configurations. Keep credentials in a trusted local environment or private config outside source control. App management uses administrator credentials and can delete data; review your assistant's proposed changes.
Develop from source
npm ci
npm run buildLocal coding assistant
Copy examples/mcp-local.json into your MCP client's server configuration. Replace /absolute/path/ConvoKit-MCP with this package's absolute path. The Developer connection is ready immediately; fill in your app's credentials to enable the App connection. Remove the App entry if you only need guides.
The local commands are:
node dist/cli.js developer
node dist/cli.js appThese speak MCP over stdin/stdout and are launched by your MCP client. Logs go to stderr. The default mode is developer.
HTTP
Start the public Developer server:
npm startConnect your MCP client to http://127.0.0.1:3333/mcp/developer.
To enable the App endpoint, copy .env.example to .env and set:
CONVOKIT_CLIENT_ID=your-app-id
CONVOKIT_CLIENT_SECRET=your-server-only-secret
CONVOKIT_MCP_APP_TOKEN=your-distinct-random-access-token-at-least-32-charactersGenerate a new MCP token with:
node -e "process.stdout.write(require('node:crypto').randomBytes(32).toString('hex'))"Load the environment explicitly:
node --env-file=.env dist/cli.js httpConnect to http://127.0.0.1:3333/mcp/app with Authorization: Bearer <CONVOKIT_MCP_APP_TOKEN>. The access token authenticates the MCP client; the server uses its separate ConvoKit app credentials for SDK calls. App credentials never appear in tool arguments or connection-info results.
Use examples/mcp-http.json as a starting point. MCP client configuration formats vary; clients must support custom bearer headers for this App endpoint. This version provides explicit token configuration, not a browser OAuth sign-in flow.
GET /health reports whether each connection is enabled. /mcp/app is unavailable unless configured. Partial HTTP app configuration fails startup. The public Developer endpoint needs no database or ConvoKit account.
Related MCP server: Glean Remote MCP Server
Developer tools
Tool | Use |
| List guides and their source URLs; optionally filter by platform |
| Find relevant documentation sections |
| Read an introductory section and section index, or select a section |
| Read exact documented snippets, filtered by topic and paginated |
| Get platform-specific setup steps, guide links, and backend token examples |
Supported platforms: javascript, react, vue, react-native, flutter, swift, and android.
All 19 guides are also available as convokit://docs/<guide-id> resources. The integrate_convokit prompt accepts platform and goal and prepares a task grounded in the official guides.
Example requests to your assistant:
“Use ConvoKit to add support chat to this React application.”
“Find the SwiftUI example for read receipts.”
“Show the authenticated backend token endpoint and adapt it to our session middleware.”
Keep documentation current
The checked-in src/content/guides.json snapshot is generated by rendering the landing-page documentation to Markdown. Code snippets retain their exact original text; source URLs, snapshot date, and a content hash accompany responses. The snapshot is bundled into both Node and Worker builds; runtime operation does not fetch arbitrary URLs or files.
After documentation changes, run:
npm run sync:docs
# Or specify another landing-page checkout:
node scripts/sync-docs.mjs /absolute/path/Convokit-LandingPageThe refresh command requires that landing-page checkout and its installed dependencies. Building and running the MCP package uses the already bundled snapshot and does not require sibling repositories. Refresh the snapshot when releasing documentation updates.
App tools
Tool | Use |
| Show the configured public app ID and API endpoint |
| Create or synchronize an app user |
| Update or delete an app user |
| Issue a scoped user JWT for an existing user |
| Change metadata or delete a conversation |
| Manage membership and READ / READ_WRITE roles |
| Edit text or delete a message; edits accept an optional revision |
Operations delegate to the published ConvoKitServerClient and use the backend's authorization and tenant checks. Delete operations carry MCP destructive annotations. User token results contain a sensitive, short lived JWT; app secrets and inbound MCP access tokens are never returned. API failures return status and code without echoing raw response bodies.
Upstream calls have a 15-second deadline and reject redirects so app credentials cannot be forwarded to a redirected endpoint.
Each App process is bound to one app. Multiple customers should run separate App instances with their own credentials, or use separate local stdio connections. A shared hosted service serving multiple customer apps would additionally need per-customer credential resolution, OAuth consent and scopes, and tenant isolation. This package does not implement account-wide dashboard, billing, end-user chat sessions, or realtime event subscriptions.
CONVOKIT_API_URL optionally overrides the managed API endpoint for local testing or self-hosting; the default is the SDK's https://api.convokit.app. Tools cannot change the app or endpoint.
Deploy
One public Developer deployment can serve all integrators. Deploy App instances separately when they use different customer credentials. Two endpoints do not require two repositories or two deployments.
Public Developer Worker
The production Worker serves only /mcp/developer and /health. It never imports the App server or has customer app credentials. The documentation is public, so this deployment allows browser CORS from all origins. Long-lived change subscriptions are disabled because the corpus is immutable within a deployment.
npm run worker:check
npm run worker:dry-run
npm run worker:deploy -- --var RELEASE_SHA:$(git rev-parse HEAD)
node scripts/smoke.mjs https://mcp.convokit.app/mcp/developer/health reports the release commit, version, snapshot date, and source hash. Wrangler uses the configured deployment account; forks should update the account and Worker name before deploying. See Workers configuration and the SDK HTTP handler.
Optional Node HTTP deployment
For an external listener, set HOST=0.0.0.0 and CONVOKIT_MCP_ALLOWED_HOSTS to the hostnames your deployment serves. Put HTTPS in front of the service. Browser callers also require explicit full origins in CONVOKIT_MCP_ALLOWED_ORIGINS. Native MCP clients usually send no Origin header.
docker build -t convokit-mcp .
docker run --rm -p 3333:3333 \
-e CONVOKIT_MCP_ALLOWED_HOSTS=localhost,127.0.0.1 \
convokit-mcpThe container includes the documentation snapshot. To enable App management, supply the three App environment variables through your deployment's secret configuration. The service defaults to loopback outside Docker and restricts host headers, origins, and request sizes. It does not log request bodies or authorization headers.
Verification
npm run validateThe tests connect using the official MCP client over HTTP and stdio, cover modern and legacy exchanges, check documentation and code preservation, verify SDK request contracts, and test auth rejection, path encoding, revision forwarding, safe errors, host/origin checks, and body limits. Backend calls are mocked; no live customer data is modified.
Available Tools
5 toolsget_code_examplesBRead-onlyIdempotent
Return exact code examples from an official guide. Filter by topic, or paginate with offset to find installation, token providers, chat UI, realtime, or media examples.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| topic | No | ||
| offset | No | ||
| guideId | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is fully covered by structured data. The description adds only that results are paginated and that specific example categories exist. No return format, ordering, or rate-limit context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences, front-loaded with the core action and followed by filtering/pagination mechanics. Every clause is relevant, though the trailing category list is slightly list-like rather than instructional.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only retrieval tool with no output schema, the description should clarify the required guideId and result shape. It covers filtering and pagination but leaves guideId and limit undocumented across both schema and description, so an agent must guess at the anchor parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It explains 'topic' and 'offset'/'paginate' behavior and hints at valid topic values ('installation, token providers, chat UI, realtime, media'). However, the required 'guideId' and the 'limit' default/cap are never explained, leaving a meaningful gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Return exact code examples from an official guide.' It clarifies scope ('exact', 'from an official guide'), which distinguishes it from a general doc search. However, it doesn't explicitly contrast itself with siblings like search_docs or get_guide, so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It offers implied usage ('Filter by topic, or paginate with offset'), which tells the agent how to narrow or walk results. But it gives no explicit when-to-use versus alternatives such as search_docs or get_guide, and no prerequisites. Minimum viable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_guideARead-onlyIdempotent
Get a guide’s section index and introductory section, or read a specific section by sectionIndex. Full guides are also available as MCP resources.
| Name | Required | Description | Default |
|---|---|---|---|
| guideId | Yes | ||
| sectionIndex | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds the useful detail that sectionIndex changes the returned content and that full guides live elsewhere, but says nothing about failure modes such as out-of-range sectionIndex or unknown guideId.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Compact and front-loaded: the primary behavior is stated first, the sectionIndex variation second, and the resource alternative last. Slightly dense phrasing in the first clause but no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should characterize returns more fully; it does sketch the two response shapes (index + intro section, or one section) but omits error/edge behavior, valid guideId forms, and index bounds. Adequate for a simple two-parameter read tool, but not complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the load. It explains sectionIndex meaningfully (selects a specific section vs. the index/intro) but leaves guideId as a bare name with no format hints, and gives no bounds or error semantics for out-of-range indices.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb (get) and resource (guide) and precisely scopes the two modes: fetching a section index plus intro section, or reading a single section. It does not differentiate itself from siblings like list_guides or search_docs, though it does point to MCP resources as an alternative surface.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the two usage modes clearly: omit sectionIndex for the index/intro, or supply sectionIndex to read one section. It also routes agents to MCP resources for full guides, which is a genuine alternative, but gives no explicit when-not conditions or guidance on choosing between this tool and search_docs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_integration_planBRead-onlyIdempotent
Plan a ConvoKit integration for JavaScript, React, Vue, React Native, Flutter, Swift, or Android, with backend token examples and links to the exact platform guides.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | Yes | ||
| includeUi | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world). The description goes beyond them by disclosing the deliverable contents — backend token examples plus links to exact platform guides — which is meaningful since no output schema exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb and resource first; the platform list is slightly redundant with the enum but still aids selection. No filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains what the plan contains, which compensates for the missing output schema, but leaves includeUi's behavior unexplained for a two-parameter tool. Adequate but with a clear gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden, yet it only restates the platform enum values and never mentions includeUi or what toggling it does. One of two parameters is effectively undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Plan") and resource (a ConvoKit integration) and enumerates the supported platforms, so the agent knows exactly what it produces. It does not, however, differentiate itself from siblings like get_guide or get_code_examples even though it explicitly emits guide links and token examples.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use or when-not-to-use guidance and no named alternative. The agent must infer that this is the entry point for starting an integration, versus get_guide for incremental lookups or get_code_examples for snippets.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_guidesBRead-onlyIdempotent
List official ConvoKit guides, section indexes, source URLs, and documentation snapshot date.
| Name | Required | Description | Default |
|---|---|---|---|
| platform | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so safety is covered. The description adds useful content context (what fields the listing carries, including a snapshot date), but says nothing about ordering, pagination, or result size for what is presumably a full catalog dump.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the verb and scope come first. It is appropriately sized for the tool's simplicity, though it stops short of being maximally informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does well to enumerate the returned fields (guides, section indexes, URLs, snapshot date) and annotations cover the safety profile. However, the unmentioned `platform` filter and absence of usage/routing guidance leave gaps for a tool sitting among four related siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the single `platform` parameter has an enum of seven platforms, yet the description never mentions platform filtering or what it does. The description adds no meaning beyond the raw enum values, leaving a real coverage gap uncompensated.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("List") and resource ("official ConvoKit guides"), plus the payload it returns (section indexes, source URLs, snapshot date). This distinguishes it from get_guide and search_docs by implication (catalog listing vs. retrieval/search), though it never names those siblings explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No when-to-use guidance, no prerequisites, and no routing to alternatives such as search_docs or get_guide, which are the obvious neighbors. An agent must infer that this is the discovery/entry-point tool from the verb "List" alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_docsARead-onlyIdempotent
Search documentation sections for SDK methods, installation, authentication, errors, API routes, and UI behavior. Use get_guide to read a returned sectionIndex.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| platform | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the read-only, idempotent, closed-world safety profile, so the bar is lower. The description still adds real behavioral value by disclosing the sectionIndex handoff to get_guide, telling the agent how results are consumed; it omits pagination/limit semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the search scope and ending with the required follow-up. No filler, every clause carries information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does well to explain the sectionIndex return path, and annotations carry the safety profile. But with 0% schema coverage and an undocumented platform enum, the definition leaves the caller without enough detail on how to shape a query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% for all three parameters, so the description must compensate and does not. It says nothing about the 'query' string, the 'limit' default/max, or the 'platform' enum values (javascript, react, vue, etc.), leaving the enum's meaning to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Search) and resource (documentation sections) and enumerates the covered domains (SDK methods, installation, auth, errors, API routes, UI behavior). An agent can distinguish it from list_guides/get_guide without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names the follow-up action explicitly: 'Use get_guide to read a returned sectionIndex', which routes the agent through the search-then-read workflow. It does not, however, say when to prefer get_code_examples or get_integration_plan over this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
get_code_examples - First observed
get_guide - First observed
get_integration_plan - First observed
list_guides - First observed
search_docs
TDQS
Scored across 5 tools
Tools have distinct primary purposes, but list_guides and get_guide both can return section indexes, creating a minor overlap that could cause slight confusion when retrieving guide structure.
All tool names follow a consistent snake_case verb_noun pattern (list_guides, search_docs, get_guide, get_code_examples, get_integration_plan), making them predictable and easy to scan.
Five tools are well-scoped for a documentation retrieval server, covering the key operations without redundancy or bloat.
The surface covers discovery, search, reading, code examples, and integration planning, with full guides available as MCP resources, leaving no obvious dead ends for the stated purpose.
Maintenance
Related MCP Connectors
Connect AI agents to 1000+ apps with managed authentication and tool-calling.
Connect AI assistants to Stellary projects, boards, documents, and governed agent workflows.
WhatsApp for your app or AI agent over OAuth2 — the same connections WASync runs inside your CRM.
Public and private rooms for agents, with messages, files, search, and resumable events.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables developers to access kintone API specifications, field type documentation, and development best practices through natural language queries. Supports API request validation and provides comprehensive development guidance for kintone customizations.22 npmMIT

Glean Remote MCP Serverofficial
AlicenseNot gradedqualityCmaintenanceEnables AI assistants and developer tools to securely access and interact with an organization's enterprise knowledge, documents, and people through natural language while respecting existing access permissions.166MIT- FlicenseAqualityDmaintenanceEnables AI assistants to send and retrieve messages, access employee information, and interact with group chats via the SeaTalk API.11-
- AlicenseAqualityBmaintenanceConnects AI assistants to GitHub repositories, pull requests, issues, commits, and code search while enabling repository visibility controls, CI/CD monitoring, sandboxed local filesystem access, and code quality/security analysis.131MIT