Skip to main content
Glama
CometChat Docs

CometChat Docs

Official

CometChat MCP Server

Add real-time chat, voice, video, and moderation to your app through your AI coding agent.

CI Release MCP Registry LightNow capabilities docs-mcp MCP server Listed on ClaudePluginHub License MCP Status

Docs • CometChat • Get an account (free, 100 MAU)


CometChat's first-party MCP server. Connect Claude, Cursor, Windsurf, VS Code Copilot, Codex, or any other Model Context Protocol–compatible agent and integrate CometChat into your app from natural-language prompts.

Ask the agent: "add a chat tab where users can DM each other" — it reads CometChat's documentation, picks the right components for your stack, and writes the integration code.

Read-only. No account, no API key, no authentication required.


Demo

CometChat MCP server in action

An AI agent reading CometChat's docs and writing a working chat integration from a single prompt.


Related MCP server: notifly-mcp-server

Quick install

Agent

How to add

Claude.ai / Claude Desktop

Settings → Connectors → Add custom connector → URL: https://mcp.cometchat.com/mcp

Cursor

Cmd+Shift+P → Open MCP settings → Add custom MCP → paste config below

Windsurf

Plugins (hammer icon) → Manage plugins → View raw config → paste config below

VS Code (Copilot Agent)

Cmd+Shift+P → MCP: Add MCP Server → URL: https://mcp.cometchat.com/mcp, Transport: HTTP

Claude Code (CLI)

claude mcp add --transport http cometchat https://mcp.cometchat.com/mcp

Claude Code (plugin)

claude plugin marketplace add cometchat/docs-mcp && claude plugin install cometchat@cometchat

Codex CLI (plugin)

codex plugin marketplace add cometchat/docs-mcp && codex plugin add cometchat@cometchat

Config snippet (Cursor / Windsurf / generic MCP clients)

{
  "mcpServers": {
    "cometchat": {
      "url": "https://mcp.cometchat.com/mcp"
    }
  }
}

Usage

After connecting, prompt your agent with any of these:

  • "How do I install the React UI Kit in my Vite project?"

  • "Walk me through multi-tenant chat for a Next.js SaaS where workspaces are isolated."

  • "Show me how to add presence indicators and typing dots to my iOS conversation list."

  • "Set up content moderation so banned words are blocked before delivery."

  • "Build a no-code chat widget for my Webflow site."

  • "What's the rate limit for sending messages, and what error code do I get when I hit it?"

The agent reads CometChat's documentation, pulls the relevant implementation bundle, and writes the integration code into your project.


Tools

  • search_cometchat_docs — Search the SDK, UI Kit, Calls, REST API, AI agent, notification and moderation docs by topic, API name or error message. Returns ranked snippets with page URLs, current versions first. Optional version filter and limit (up to 25).

  • fetch_cometchat_doc_page — Fetch one documentation page in full as markdown by URL or path, following moved pages. Pages over 50 KiB are truncated with a link to the full page.

  • get_cometchat_implementation_bundle — Return the implementation bundle for a named scenario: the scenario's current docs pages (for a UI Kit: its integration guide, then the platform's AI reference page) compiled into one document, plus related page paths.

  • list_cometchat_bundles — List every available implementation bundle (identifier, title, framework, date its page list was reviewed) for discovery.

All four carry readOnlyHint: true, a title annotation, and a declared outputSchema with structured results. Names are ≤ 64 characters. Each description states what the tool does, when it fits and its limits (errors, rate limit), naming this server's other tools only where one serves a specific need ("identifiers come from list_cometchat_bundles"). They carry no directives to the agent, no references to other servers or products, and no marketing language. tests/tools.test.ts guards the tool, parameter and output-field descriptions and the initialize instructions against a list of banned phrasings, and checks that list still rejects the shapes it was written for; it is a banlist, not a proof.

Resources

URI

Purpose

cometchat://skills/overview

Agent orientation skill — Product summary, decision guidance, workflow, common gotchas, verification checklist

cometchat://bundles/react-uikit-quickstart

React UI Kit install + init + login + chat surface

cometchat://bundles/react-native-uikit-quickstart

React Native UI Kit with navigation and chat screen

cometchat://bundles/flutter-uikit-quickstart

Flutter UI Kit install + init + basic chat

cometchat://bundles/ios-uikit-quickstart

iOS UI Kit install + chat view

cometchat://bundles/android-uikit-quickstart

Android UI Kit install + chat screen

cometchat://bundles/angular-uikit-quickstart

Angular UI Kit install + init + login + chat surface

cometchat://bundles/js-sdk-messaging-basics

Vanilla JS SDK — send/receive text and media messages

cometchat://bundles/widget-embed

No-code widget embed for HTML, with pointers to WordPress, Webflow and Squarespace

cometchat://bundles/moderation-setup

Moderation getting started, with pointers to rules, lists and flagged messages

cometchat://bundles/multi-tenant-chat

Multi-tenancy — isolated apps under one plan, App Management APIs

cometchat://bundles/presence-and-typing

Online presence, typing indicators, read receipts


How it works

  1. You prompt your agent in natural language.

  2. The agent reads the orientation skill (cometchat://skills/overview) to understand which tool/bundle fits your request.

  3. For top scenarios, the agent pulls an implementation bundle — the current docs pages for that integration in one document.

  4. For long-tail questions, the agent searches CometChat's docs and reads specific reference pages.

  5. The agent writes the code into your project, using the bundle as the source of truth and your project structure as the constraint.


CometChat in 30 seconds

CometChat is a real-time communications platform for adding chat, voice, and video calling to web and mobile apps. Used in production across SaaS, marketplaces, gaming, healthcare, education, and creator platforms.

  • Free tier: first 100 monthly active users, no credit card required.

  • SDKs: JavaScript, React Native, iOS, Android, Flutter.

  • UI Kits: React, React Native, iOS, Android, Flutter, Angular, Vue.

  • No-code: chat widget for any HTML site.

  • Sign up: app.cometchat.com — you'll need an App ID, Auth Key, and Region to build with the code the agent writes.


Server identity

Field

Value

Display name

CometChat Docs

Version

0.1.7

Protocol

MCP 2025-11-25; earlier protocol versions are negotiated down

Transport

Streamable HTTP (with SSE)

Authentication

None (public docs only)

Capabilities

tools, resources

Health endpoint

GET https://mcp.cometchat.com/health


Architecture

Your agent (Claude / Cursor / Windsurf / …)
        ↓ MCP over Streamable HTTP
        ↓
  mcp.cometchat.com/mcp  (this server)
        ↓
  ├── search_cometchat_docs     → SQLite FTS5 index of cometchat/docs
  ├── fetch_cometchat_doc_page  → cometchat.com/docs/*.md (first-party)
  └── get_cometchat_implementation_bundle → live docs pages listed in src/bundles/manifest.ts
  • Stateless server, single universal endpoint, no user-specific state.

  • Search index rebuilds from github.com/cometchat/docs on every push to that repo's main branch.

  • Implementation bundles have no content of their own. Each is a list of docs pages (src/bundles/manifest.ts), read from the live docs on request, so a docs fix reaches the bundle with no MCP change. A built bundle is served for 10 minutes; after that a call still gets it at once and starts one background rebuild. A rebuild that hits a timeout or 5xx never replaces the cached bundle and is retried with a backoff (30 s, doubling, up to 10 minutes), so a docs outage neither drops bundles nor floods the docs site. A deleted page (404) is what the docs say: once a second build in a row agrees, that rebuild is kept and names the missing page. npm run verify:bundles fails when a listed page moves, disappears, no longer fits in its bundle, is no longer the current version in docs.json, or tells people to install a package version that is unpublished, on an older major, or an exact pin a minor behind (checked against npm, pub.dev, CometChat's Maven repo, CocoaPods trunk and GitHub); the maintainers run it daily.


Local development

# Clone the docs repo (used to build the search index)
git clone --depth 1 https://github.com/cometchat/docs.git ../cometchat-docs-repo

# Install + build the FTS index + run the server
npm install
DOCS_REPO=../cometchat-docs-repo npm run build:index
npm run dev

# Run the test suite (vitest: validation, truncation, bundles, tools, resources, fetch,
#  search ranking and the index builder)
npm test

# Score search ranking on the index you built (CI pins the docs commit: see DEPLOY.md)
DOCS_REPO=../cometchat-docs-repo npm run eval:search

# Check every docs page a bundle lists still exists and is current (network)
npm run verify:bundles

The server listens on http://0.0.0.0:3000 by default. Health probe at GET /health, MCP endpoint at POST /mcp.

Inspect with the MCP Inspector

npx @modelcontextprotocol/inspector
# add server: http://localhost:3000/mcp

You should see all 4 tools with readOnlyHint: true and all 11 resources.

Repo layout

docs-mcp/
├── src/
│   ├── server.ts                  # MCP server entry, transport, tool dispatch
│   ├── tools/{search,fetch,bundle}.ts
│   ├── search/sqlite.ts           # SQLite FTS5 client
│   ├── bundles/manifest.ts        # each bundle's docs pages
│   ├── bundles/loader.ts          # compiles bundles from live docs pages
│   ├── resources/registry.ts      # skill + bundle resources
│   └── lib/{errors,truncate,validation,logger}.ts
├── scripts/build-index.ts         # builds SQLite FTS5 index from cometchat/docs
├── skills/overview.md             # agent orientation skill
├── tests/                         # vitest suite
├── .claude-plugin/
│   ├── plugin.json                # Claude Code plugin manifest
│   └── marketplace.json           # Claude Code marketplace manifest
├── .codex-plugin/plugin.json      # Codex plugin manifest
├── .cursor-plugin/plugin.json     # Cursor Marketplace manifest
├── .mcp.json                      # MCP config (Claude Code auto-discovery)
├── mcp.json                       # Open Plugins standard manifest
└── assets/logo.svg                # CometChat logo

Configuration

Env var

Default

Notes

PORT

3000

HTTP port

HOST

0.0.0.0

Bind host

DOCS_BASE_URL

https://www.cometchat.com/docs

Used for URLs in responses + the .md fetch fallback

INDEX_PATH

./data/index.sqlite

SQLite FTS5 index location. Server still boots if missing; search returns backend_unavailable and /health is 503.

SKILLS_DIR

./skills

Orientation skill (overview.md) directory

FETCH_TIMEOUT_MS

5000

Per-fetch HTTP timeout

LOG_LEVEL

info

debug / info / warn / error

NODE_ENV

development

Standard Node.js setting (Express runs in production mode); set production in containers

ALLOWED_HOSTS

<HOST>:<PORT>,localhost:<PORT>,127.0.0.1:<PORT>

Comma-separated Host header allowlist for DNS-rebinding protection

ALLOWED_ORIGINS

unset

Comma-separated browser Origin allowlist for /mcp. Unset allows none: a request with an Origin gets 403. Clients that send no Origin (IDEs, CLIs, hosted connectors) are unaffected

DNS_REBINDING_PROTECTION

true

Set false only if an upstream already validates Host

RATE_LIMIT_ENABLED

true

Set false to disable per-IP rate limiting on /mcp. Exactly true or false; other values fail startup

RATE_LIMIT_MAX

120

Max requests per window per IP. Positive integer; 0 fails startup (disable with RATE_LIMIT_ENABLED=false)

RATE_LIMIT_WINDOW_MS

60000

Rate-limit window in ms. Positive integer

INDEX_AUTO_REFRESH

false

Set true to rebuild the search index in-container when cometchat/docs changes. Requires git in the image and a writable INDEX_WORK_DIR.

INDEX_POLL_INTERVAL_MS

600000

How often to check the docs repo for a new commit (a git ls-remote, ~1s)

INDEX_WORK_DIR

./data/generations

Where rebuilt index generations are written (tmpfs in production)

INDEX_KEEP_GENERATIONS

2

Previous index generations retained on disk for instant fallback

INDEX_MIN_PAGES

2000

Absolute floor: a candidate index with fewer pages is rejected

INDEX_MAX_DROP_RATIO

0.2

Relative floor: reject a candidate losing more than this fraction of the served page count, or of the served pages whose versions come from docs.json navigation

DOCS_REPO_URL

https://github.com/cometchat/docs.git

Public docs repo; cloned anonymously, no credentials

DOCS_REF

main

Branch to follow

DOCS_COMMIT_PIN

unset

Freeze on one commit and stop following HEAD (incident escape hatch)

POSTHOG_KEY

unset

PostHog project API key. Unset = usage analytics fully disabled (no-op)

POSTHOG_HOST

https://us.i.posthog.com

PostHog instance host

ANALYTICS_SALT

unset

Required when POSTHOG_KEY is set (analytics stays off without it). Salts client fingerprints/IP hashes; rotating it resets all fingerprints


Deployment

See DEPLOY.md for container build, environment, and platform notes.


Marketplaces

The same server URL is listed in these registries and directories:


Support

  • Issues / feedback: open an issue in this repo.

  • CometChat support: support@cometchat.com.

  • Live MCP status: curl https://mcp.cometchat.com/health returns {"status":"ok"} when healthy.


Contributing

PRs welcome — especially:

  • New implementation bundles: add an entry to src/bundles/manifest.ts listing existing docs pages. If no page covers the scenario, write the page in cometchat/docs first; bundle content always comes from the docs.

  • Tool improvements behind the existing read-only contract.

Out of scope today:

  • Tools that write to a customer's CometChat app (separate authenticated connector, on the roadmap).

  • Mixed read/write tools (Anthropic auto-rejection rule).


Privacy

The CometChat MCP server is read-only and requires no account, API key, or authentication. It serves only CometChat's public documentation and does not request, store, or transmit your code, prompts, or personal data. Standard request metadata (such as IP address) may be processed transiently for rate limiting and abuse prevention.

For full details, see CometChat's privacy policy: cometchat.com/legal-privacy-policy.


License

Apache-2.0. See LICENSE.

Available Tools

4 tools
fetch_cometchat_doc_pageFetch CometChat Documentation PageA
Read-only
Inspect

Returns one CometChat documentation page in full, as markdown with its title, url and section. Takes a url or path already in hand: a docs link from a bundle, or a result url from search_cometchat_docs, which is where a topic or API name goes instead, since that is not a path.

Each call reads the live docs site, so it sees pages the search index has not picked up yet. A moved page is followed for up to 3 redirects; a page over 50 KiB is truncated, ending in a link to the full page. No key or account is needed, and nothing is cached.

Errors: not_found for an unknown page or one redirected to the docs root, invalid_input for a path resolving outside the documentation, backend_unavailable when the site fails or the whole redirect chain exceeds the 5 s default timeout (retryable).

NameRequiredDescriptionDefault
pathYesPage path such as '/sdk/javascript/overview' (a leading slash, a '/docs' prefix and a '.md' or '.mdx' suffix are optional), or a full https://www.cometchat.com/docs/... URL; up to 500 characters. Query strings and #fragments are ignored.

Output Schema

NameRequiredDescription
urlYesAbsolute canonical page url, after any redirect.
titleYesPage title.
contentYesPage body as markdown.
sectionYesDocumentation section, derived from the page's path.
contentLengthYesByte length of content, after any truncation.
redirectedFromNoPath originally requested, present only when that page has moved; url and section describe where it landed.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations cover the safety profile (readOnly/openWorld/non-destructive), so the bar is lower, but the description still discloses live-site reads, 3-redirect follow limit, 50 KiB truncation with a link to the full page, no auth, no caching, and a full error taxonomy including which error is retryable. That is behavior an agent cannot infer from any structured field.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Information is front-loaded: what it returns, then what it takes, then runtime behavior, then errors. Dense but nearly every clause carries actionable content; the redirect/truncation clause is a single compact sentence rather than sprawl.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so the description does not need to detail the return object, yet it still hints at the fields. For a single-parameter read tool with annotations and an output schema, everything an agent needs to call it correctly and interpret failures is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline would be a 3. The description adds real meaning beyond the schema by framing the parameter's provenance (a bundle link or a search result URL) and by tying a bad path to specific errors (not_found vs invalid_input for paths resolving outside the docs).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Returns one CometChat documentation page in full') and even names the return shape (markdown with title, url, section). The contrast with search_cometchat_docs is explicit, so an agent can route without opening either schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the exact precondition ('Takes a url or path already in hand: a docs link from a bundle, or a result url from search_cometchat_docs') and names the alternative for the opposite case ('a topic or API name goes instead, since that is not a path'). This is a textbook when/when-not split.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_cometchat_implementation_bundleGet a CometChat Implementation BundleA
Read-only
Inspect

Returns one CometChat implementation bundle: the scenario's current documentation pages (for a UI Kit, its integration guide, then the platform's AI reference page) compiled into one markdown document, each headed by its source URL, plus paths of related pages, the prerequisites, and a last_verified date.

Eleven bundles cover UI Kit quickstarts (React, Angular, React Native, Flutter, iOS, Android), JavaScript SDK messaging, the no-code widget, moderation setup, multi-tenant chat, and presence and typing. list_cometchat_bundles names them all; for a topic no bundle covers, or for one reference page rather than a setup's pages, search_cometchat_docs searches the documentation.

bundle is an identifier, not a title and not a framework: 'react-uikit-quickstart', rather than 'React UI Kit' or 'react'. One that is well-formed but names no bundle returns unknown_bundle listing every valid one; anything else, invalid_input. Pages are included whole, in order, while the document fits in 60 KiB; a page that does not fit is listed by path under More pages rather than cut, except a first page too big on its own, which is cut at a paragraph and ends with a link to the full page. Pages are read from the live docs site; no key or account is needed. A built bundle is served for 10 minutes, then refreshed in the background. A page that cannot be loaded does not fail the call: the previous bundle, or a partial one naming the pages it lacks, is served instead, and backend_unavailable is returned only when no page loads and nothing is cached yet.

NameRequiredDescriptionDefault
bundleYesBundle identifier as list_cometchat_bundles returns it, e.g. 'react-uikit-quickstart': lowercase letters, digits and hyphens, opening with a letter or digit, up to 100 characters.

Output Schema

NameRequiredDescription
titleYesHuman-readable bundle title.
bundleYesBundle identifier, as passed in.
contentYesThe bundle's documentation pages as markdown, each headed by its source URL, followed by the paths of related pages and of any page that did not fit or could not be loaded.
frameworkYesFramework or platform the bundle targets; 'any' when platform-neutral.
last_verifiedYesISO date this bundle's list of documentation pages was last reviewed. The page content itself is read from the live documentation.
prerequisitesYesWhat must be in place before following the bundle's pages, such as a runtime version or CometChat app credentials.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only declare read-only and non-destructive; the description adds substantial context beyond them: whole pages in order, a 60 KiB document budget, oversized pages listed under 'More pages' rather than truncated (with a paragraph-level cut exception for an oversized first page), a 10-minute serve window with background refresh, graceful degradation via the previous or partial bundle, and backend_unavailable only when nothing loads and nothing is cached. No key or account required is also stated, which annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with what is returned, then alternatives, then the parameter trap, then operational behavior — a sensible order. The prose is dense with semicolon-linked clauses and a long final sentence about failure modes, which costs a little readability, but every sentence carries information an agent needs to call the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return shape need not be restated, and the description still covers the operational envelope an agent must anticipate: content ordering, size limits and truncation, caching staleness, and degraded/error responses. Nothing material for correct invocation is missing given a single required parameter.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and already documents the identifier's format, so the baseline is 3; the description earns an extra point by clarifying that the value is an identifier, not a title or framework ('react-uikit-quickstart', not 'React UI Kit' or 'react'), and by mapping the two distinct error outcomes (unknown_bundle with the valid list versus invalid_input) to the kinds of wrong input. It does not add syntax beyond the schema, so it stops short of 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names a specific verb and resource ('Returns one CometChat implementation bundle') and immediately defines the artifact: the scenario's documentation pages compiled into one markdown document, each headed by its source URL, plus related paths, prerequisites, and a last_verified date. The following sentence enumerates the eleven covered scenarios, so an agent knows exactly what content surface this tool owns versus its siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes between siblings: list_cometchat_bundles names the bundles, search_cometchat_docs is the fallback for a topic no bundle covers or for a single reference page, and fetch_cometchat_doc_page covers the single-page case. Both the when and the when-not conditions are stated, not implied.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_cometchat_bundlesList CometChat Implementation BundlesA
Read-only
Inspect

Lists every CometChat implementation bundle: the setup scenarios whose current docs pages get_cometchat_implementation_bundle compiles by identifier, with each one's title, framework ('any' when platform-neutral) and last_verified date.

No parameters are required: one call returns the complete set, ordered by identifier, with no filter, paging or cap. The set is fixed at startup, since only page content is read from the docs site; the listing itself opens no connection and needs no key or account, so repeat calls return the same bundles.

For a topic no bundle covers, or for one reference page rather than a setup's pages, search_cometchat_docs searches the documentation.

NameRequiredDescriptionDefault

No parameters

Output Schema

NameRequiredDescription
totalYesNumber of bundles.
bundlesYesEvery bundle, ordered by identifier.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered; the description still adds real behavioral context beyond that: no key or account required, no network connection opened by the listing, the set is fixed at startup, and repeat calls return identical bundles. That idempotence and auth-free guarantee is exactly what an agent needs and is not in the structured fields.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short paragraphs, front-loaded with the definition and immediately followed by invocation facts and then fallback routing. Every sentence carries information an agent would otherwise have to guess: the enumeration's completeness, its ordering, and where to go when it does not apply.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be documented, yet the description still summarizes the per-bundle fields and the 'any' framework sentinel. Combined with the idempotence and no-auth notes, nothing an agent needs in order to call this zero-argument tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are zero input parameters, which sets the baseline at 4. The description reinforces this by explicitly stating that no parameters are required and that there is no filter, paging or cap, so an agent will not go looking for optional arguments that do not exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Lists every CometChat implementation bundle') and then defines what a bundle actually is (setup scenarios whose docs pages get_cometchat_implementation_bundle compiles by identifier), which distinguishes it from every sibling. It also names the fields returned (title, framework, last_verified), so an agent knows the shape of the catalog before calling.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives clear positive context (one call returns the complete set, no filters or paging needed) and explicit negative routing: for an uncovered topic or a single reference page, use search_cometchat_docs instead. It stops short of explicitly telling the agent to call this first to discover identifiers before invoking get_cometchat_implementation_bundle, so the discovery workflow is left implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_cometchat_docsSearch CometChat DocumentationA
Read-only
Inspect

Searches all of CometChat's documentation (SDKs, UI Kits, Calls, REST API, AI agents, notifications, moderation, the no-code widget, UI Kit Builder and more) for the pages covering a topic or API name, and returns ranked excerpts with each page's url.

When a page's url or path is already in hand, fetch_cometchat_doc_page returns that page in full; for a common setup scenario (a UI Kit quickstart, SDK messaging, the widget, moderation), list_cometchat_bundles names the implementation bundles, each the scenario's current docs pages compiled into one document.

Pages holding every keyword rank first, falling back to any keyword when no page holds them all; no match is an empty results list, not an error. For a query of 4 to 8 distinct keywords, pages missing one incidental keyword join the ranking at half weight, which is how an API renamed between versions is still found; a platform or language word is never the one dropped. Without the version filter, current-version pages lead, and each result reports isCurrent plus a version label when the page is versioned; the filter restricts results to pages carrying that label, so unversioned pages such as the REST API reference are excluded. limit caps the rows returned, never the totalAvailable count, and there is no offset.

Results come from a snapshot of the documentation repository, rebuilt periodically, so a page published since the last rebuild is missing until then; fetch_cometchat_doc_page reads the live site. Errors: invalid_input for a malformed argument, backend_unavailable when the index cannot be read. Over HTTP, every MCP request counts against one per-client-IP limit, initialize and tools/list included, by default 120 per 60 s, then HTTP 429 with Retry-After; no authentication.

NameRequiredDescriptionDefault
limitNoMaximum results, from 1 to 25; default 10.
queryYesPlain keywords, 1–500 characters; short queries work best. Name the platform or framework when the answer is platform-specific ("iOS delete message", "React UI Kit message list"); otherwise results span platforms. API names such as markAsRead are searchable, as are the languages of a page's code examples. Quotes and operators such as OR have no special meaning, and common words such as "how", "is" and "can" are not counted as keywords. A version written in the query ("v4") is matched as a keyword: it favours pages mentioning it but does not restrict results to that version, even when it is the whole query. To get one version's pages, put the label in the version filter instead.
versionNoVersion label from the docs version picker, e.g. 'v5'. The leading v is optional and case does not matter, so V7, 7 and v7.0 all name v7. Each SDK and UI Kit numbers its versions independently, so one label spans every product that uses it. A label no page carries returns no results rather than an error.

Output Schema

NameRequiredDescription
resultsYesMatching pages, best first.
totalAvailableYesNumber of matching pages, which can exceed the rows returned. For a query of 4 to 8 distinct keywords it also counts the pages holding all but one of them.

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description still adds substantial non-annotation context: match/fallback ranking, empty list rather than error on no match, snapshot staleness versus the live site, error codes, and the per-IP HTTP rate limit with 429/Retry-After. That is well beyond what the annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with purpose and sibling routing before behavioral detail, and every paragraph is ordered by likely need. It is dense and long, though — the '4 to 8 distinct keywords ... half weight' explanation is more mechanism than an agent strictly needs to choose or call the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter search tool with an output schema and full annotation coverage, nothing essential is missing: staleness, empty-result semantics, error codes, rate limiting, and no-auth are all stated. Return-value explanation is appropriately delegated to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so a 3 is the floor; the description goes further by explaining cross-parameter behavior the schema cannot — that limit caps returned rows but never totalAvailable, and that there is no offset. It also clarifies that a version keyword in the query does not restrict results, pointing at the version filter instead.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (searches) plus the exact resource scope — all CometChat documentation across named product areas — and the return shape (ranked excerpts with each page's url). It is immediately distinguishable from fetch_cometchat_doc_page (full page retrieval) and the bundle tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: 'When a page's url or path is already in hand, fetch_cometchat_doc_page returns that page in full', and 'for a common setup scenario ... list_cometchat_bundles names the implementation bundles'. Both the when-to-use and the when-to-use-something-else conditions are stated.

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.

  1. 4 tool updatesv0.1.7
    • Changedfetch_cometchat_doc_page6 fields changed
      • changedInput schema / properties / path / description
        Previous value: -"Documentation path or full URL. Relative paths like '/sdk/javascript/overview' and full URLs both work."New value: +"Page path such as '/sdk/javascript/overview' (a leading slash, a '/docs' prefix and a '.md' or '.mdx' suffix are optional), or a full https://www.cometchat.com/docs/... URL; up to 500 characters. Query strings and #fragments are ignored."
      • changedOutput schema / properties / content / description
        Previous value: -"Full page content as markdown (truncated if very large)."New value: +"Page body as markdown."
      • changedOutput schema / properties / contentLength / description
        Previous value: -"Content length in bytes after truncation."New value: +"Byte length of content, after any truncation."
      • changedOutput schema / properties / redirectedFrom / description
        Previous value: -"Path originally requested, present only when that page has moved. url and section describe the page it moved to."New value: +"Path originally requested, present only when that page has moved; url and section describe where it landed."
      • changedOutput schema / properties / section / description
        Previous value: -"Documentation section the page belongs to."New value: +"Documentation section, derived from the page's path."
      • changedOutput schema / properties / url / description
        Previous value: -"Canonical page URL."New value: +"Absolute canonical page url, after any redirect."
    • Changedget_cometchat_implementation_bundle6 fields changed
      • changedInput schema / properties / bundle / description
        Previous value: -"Bundle name in lowercase kebab-case, e.g. 'react-uikit-quickstart'."New value: +"Bundle identifier as list_cometchat_bundles returns it, e.g. 'react-uikit-quickstart': lowercase letters, digits and hyphens, opening with a letter or digit, up to 100 characters."
      • changedOutput schema / properties / bundle / description
        Previous value: -"Bundle identifier."New value: +"Bundle identifier, as passed in."
      • changedOutput schema / properties / content / description
        Previous value: -"The full implementation recipe as markdown."New value: +"The bundle's documentation pages as markdown, each headed by its source URL, followed by the paths of related pages and of any page that did not fit or could not be loaded."
      • changedOutput schema / properties / framework / description
        Previous value: -"Target framework/platform."New value: +"Framework or platform the bundle targets; 'any' when platform-neutral."
      • changedOutput schema / properties / last_verified / description
        Previous value: -"Date the bundle was last verified against live SDK versions."New value: +"ISO date this bundle's list of documentation pages was last reviewed. The page content itself is read from the live documentation."
      • changedOutput schema / properties / prerequisites / description
        Previous value: -"Prerequisites before applying the bundle."New value: +"What must be in place before following the bundle's pages, such as a runtime version or CometChat app credentials."
    • Changedlist_cometchat_bundles4 fields changed
      • changedOutput schema / properties / bundles / description
        Previous value: -"All available implementation bundles."New value: +"Every bundle, ordered by identifier."
      • changedOutput schema / properties / bundles / items / properties / framework / description
        Previous value: -"Target framework/platform."New value: +"One of android, angular, any, flutter, ios, javascript, react, react-native, or widget."
      • changedOutput schema / properties / bundles / items / properties / last_verified / description
        Previous value: -"Date the bundle was last verified against live SDK versions."New value: +"ISO date this bundle's list of documentation pages was last reviewed."
      • changedOutput schema / properties / total / description
        Previous value: -"Number of bundles available."New value: +"Number of bundles."
    • Changedsearch_cometchat_docs12 fields changed
      • addedInput schema / properties / limit / default
        Added value: +10
      • changedInput schema / properties / limit / description
        Previous value: -"Maximum number of results to return. Default 10, maximum 25."New value: +"Maximum results, from 1 to 25; default 10."
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • changedInput schema / properties / query / description
        Previous value: -"Search query. 1–500 characters."New value: +"Plain keywords, 1–500 characters; short queries work best. Name the platform or framework when the answer is platform-specific (\"iOS delete message\", \"React UI Kit message list\"); otherwise results span platforms. API names such as markAsRead are searchable, as are the languages of a page's code examples. Quotes and operators such as OR have no special meaning, and common words such as \"how\", \"is\" and \"can\" are not counted as keywords. A version written in the query (\"v4\") is matched as a keyword: it favours pages mentioning it but does not restrict results to that version, even when it is the whole query. To get one version's pages, put the label in the version filter instead."
      • changedInput schema / properties / version / description
        Previous value: -"Optional version label from the docs version picker, e.g. 'v7' or 'v5'. Each SDK and UI Kit numbers its versions independently, so a label matches every product that uses it. Omit to search all versions, with current versions preferred."New value: +"Version label from the docs version picker, e.g. 'v5'. The leading v is optional and case does not matter, so V7, 7 and v7.0 all name v7. Each SDK and UI Kit numbers its versions independently, so one label spans every product that uses it. A label no page carries returns no results rather than an error."
      • changedOutput schema / properties / results / description
        Previous value: -"Ranked search results."New value: +"Matching pages, best first."
      • changedOutput schema / properties / results / items / properties / isCurrent / description
        Previous value: -"False when the page documents an older version of its SDK or UI Kit."New value: +"False when the page documents an older version of its SDK or UI Kit, or a doc set retired from the docs navigation, which may carry no version label."
      • changedOutput schema / properties / results / items / properties / section / description
        Previous value: -"Documentation section the page belongs to."New value: +"Documentation section the page belongs to, e.g. 'UI Kit / React'."
      • changedOutput schema / properties / results / items / properties / snippet / description
        Previous value: -"Matched excerpt with context."New value: +"Matched excerpt with context, up to 300 characters."
      • changedOutput schema / properties / results / items / properties / url / description
        Previous value: -"Direct link to the source page."New value: +"Absolute page url, accepted as-is by fetch_cometchat_doc_page."
      • changedOutput schema / properties / results / items / properties / version / description
        Previous value: -"Version label of the page's SDK or UI Kit, e.g. 'v7'. Omitted for pages that are not versioned."New value: +"Version label of the page's SDK or UI Kit, e.g. 'v7'. Absent on a page that carries no version, including the pages of a retired SDK or UI Kit."
      • changedOutput schema / properties / totalAvailable / description
        Previous value: -"Total matching pages available (may exceed the returned count)."New value: +"Number of matching pages, which can exceed the rows returned. For a query of 4 to 8 distinct keywords it also counts the pages holding all but one of them."
  2. 4 tool updatesv0.1.6
    • Changedfetch_cometchat_doc_page1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "content": {
        +      "description": "Full page content as markdown (truncated if very large).",
        +      "type": "string"
        +    },
        +    "contentLength": {
        +      "description": "Content length in bytes after truncation.",
        +      "type": "number"
        +    },
        +    "redirectedFrom": {
        +      "description": "Path originally requested, present only when that page has moved. url and section describe the page it moved to.",
        +      "type": "string"
        +    },
        +    "section": {
        +      "description": "Documentation section the page belongs to.",
        +      "type": "string"
        +    },
        +    "title": {
        +      "description": "Page title.",
        +      "type": "string"
        +    },
        +    "url": {
        +      "description": "Canonical page URL.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "title",
        +    "url",
        +    "section",
        +    "content",
        +    "contentLength"
        +  ],
        +  "type": "object"
        +}
    • Changedget_cometchat_implementation_bundle1 field changed
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "bundle": {
        +      "description": "Bundle identifier.",
        +      "type": "string"
        +    },
        +    "content": {
        +      "description": "The full implementation recipe as markdown.",
        +      "type": "string"
        +    },
        +    "framework": {
        +      "description": "Target framework/platform.",
        +      "type": "string"
        +    },
        +    "last_verified": {
        +      "description": "Date the bundle was last verified against live SDK versions.",
        +      "type": "string"
        +    },
        +    "prerequisites": {
        +      "description": "Prerequisites before applying the bundle.",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "title": {
        +      "description": "Human-readable bundle title.",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "bundle",
        +    "title",
        +    "framework",
        +    "prerequisites",
        +    "last_verified",
        +    "content"
        +  ],
        +  "type": "object"
        +}
    • Addedlist_cometchat_bundles
    • Changedsearch_cometchat_docs2 fields changed
      • changedInput schema / properties / version / description
        Previous value: -"Optional documentation version filter, e.g. 'v4' or 'v3'."New value: +"Optional version label from the docs version picker, e.g. 'v7' or 'v5'. Each SDK and UI Kit numbers its versions independently, so a label matches every product that uses it. Omit to search all versions, with current versions preferred."
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "results": {
        +      "description": "Ranked search results.",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "isCurrent": {
        +            "description": "False when the page documents an older version of its SDK or UI Kit.",
        +            "type": "boolean"
        +          },
        +          "section": {
        +            "description": "Documentation section the page belongs to.",
        +            "type": "string"
        +          },
        +          "snippet": {
        +            "description": "Matched excerpt with context.",
        +            "type": "string"
        +          },
        +          "title": {
        +            "description": "Page title.",
        +            "type": "string"
        +          },
        +          "url": {
        +            "description": "Direct link to the source page.",
        +            "type": "string"
        +          },
        +          "version": {
        +            "description": "Version label of the page's SDK or UI Kit, e.g. 'v7'. Omitted for pages that are not versioned.",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "title",
        +          "url",
        +          "snippet",
        +          "section",
        +          "isCurrent"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "totalAvailable": {
        +      "description": "Total matching pages available (may exceed the returned count).",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "results",
        +    "totalAvailable"
        +  ],
        +  "type": "object"
        +}
  3. 3 tool updatesv0.1.5
    • First observedfetch_cometchat_doc_page
    • First observedget_cometchat_implementation_bundle
    • First observedsearch_cometchat_docs

TDQS

A4.7/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct retrieval mode: keyword search, direct page fetch by url/path, bundle listing, and bundle retrieval by identifier. Descriptions explicitly redirect agents between tools (e.g., use search when no bundle matches; use fetch when a url is in hand), eliminating overlap.

Naming Consistency5/5

All four names follow a strict verb_noun snake_case pattern (search_/fetch_/get_/list_ + resource), with the resource names themselves consistent (cometchat_docs, doc_page, implementation_bundle(s)). No style mixing.

Tool Count5/5

Four tools is a tight, well-justified surface for a documentation lookup server: two discovery paths (search, list bundles) and two retrieval paths (fetch page, get bundle). Nothing appears redundant or missing at the count level.

Completeness4/5

The discover-then-retrieve lifecycle is covered for both ad-hoc pages and scenario bundles, with live-vs-snapshot behavior documented. Minor gaps: search has no offset/pagination, and there is no way to enumerate available pages, versions, or related-page traversal beyond what bundles return.

Maintenance

ActivityActive
ResponsivenessWithin a week

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables seamless integration with ElevenLabs Conversational AI to manage agents, tools, and knowledge base sources. It supports RAG indexing, webhook integration, and document management for building advanced voice-enabled AI agents.
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to perform semantic, hybrid, and filtered search on indexed local documentation with RAG capabilities.
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Adds semantic code search to AI coding agents, enabling natural language queries across entire codebases to retrieve relevant code chunks, saving tokens and providing deep context.
    41 npm
    1
    MIT