MCP App Store
by KeenEthics

Overview

Connect your Kapa account to search and manage knowledge from documentation, help centers, support tickets, wikis and repositories. Add sources including Zendesk, Confluence, Notion, GitHub, Slack, Google Drive, Jira, Salesforce and websites. Search indexed content and retrieve relevant passages with source links. Configure knowledge sources, preview website crawls before indexing, and create hosted MCP servers for compatible AI tools. For example, create an engineering knowledge server using GitHub, Jira and Slack content, or a support knowledge server using Zendesk tickets and help-center articles. Kapa also offers website widgets, Slack and Discord bots, support form deflection and API access, configured through the Kapa platform.

Tools

add_custom_qa_pair

ChatGPT
Add one question and answer pair to a custom Q&A source. Call once per pair.

approve_pages_for_review

ChatGPT
Approve every page held for review in the latest crawl and ingest them. The q and change filters and the pagination of list_pages_for_review do not narrow what is approved. Pages cannot be approved one by one. Before calling it, list every page with no filters, following each next page, and show the user the full list. Confirm with the user before calling it.

cancel_crawl

ChatGPT
Cancel a running preview crawl started by preview_crawl. It does not stop ingestion started by start_crawl.

check_google_drive_connection

ChatGPT
Report whether Google Drive has been connected, answering with the Google account that approved it, or nothing while the user has not finished.

check_zendesk_helpcenter_connection

ChatGPT
Report whether a Zendesk Help Center source has been connected. Answers with the connection, or null while the user has not finished approving it.

check_zendesk_tickets_connection

ChatGPT
Report whether a Zendesk Tickets source has been connected. Answers with the connection, or null while the user has not finished approving it.

configure_google_drive

ChatGPT
Set what a connected Google Drive source ingests. Connect the user's Drive first: this persists the grant that connect_google_drive obtained. Pass at least one folder or file to include: with neither, the configuration saves but ingests nothing. Ask which folders matter, and use list_google_drive_folders to turn their answer into ids.

configure_salesforce_cases

ChatGPT
Set what a connected Salesforce Cases source ingests. Connect first: this saves the connection that connect_salesforce_cases obtained, and answers 400 no_oauth_data without one.

configure_salesforce_knowledge

ChatGPT
Set what a Salesforce Knowledge source ingests. For a private knowledge base, connect first: this saves the connection that connect_salesforce_knowledge obtained, and answers 400 no_oauth_data without one.

configure_zendesk_helpcenter

ChatGPT
Set what a connected Zendesk Help Center source ingests. Connect the source first: this persists the grant that connect_zendesk_helpcenter obtained.

configure_zendesk_tickets

ChatGPT
Set what a connected Zendesk Tickets source ingests. Connect the source first: this persists the grant that connect_zendesk_tickets obtained.

connect_google_drive

ChatGPT
Start connecting Google Drive, returning the URL the user approves at. Open the URL in the user's browser and wait for them to say they have approved it. The approval happens in the browser, so there is nothing to poll: ask the user, then call check_google_drive_connection once. The grant is held for the signed-in user and cleared once a source is configured with it. Connect again for each Google Drive source, and do not run two Google Drive setups at the same time.

connect_salesforce_cases

ChatGPT
Start connecting Salesforce, returning the URL the user approves at. Open auth_url in a browser where the user is signed in to Kapa, and wait for them to say they have approved it. Then call validate_salesforce_cases once to confirm the connection. The connection is held for the signed-in user for 30 minutes and cleared once a source is configured with it. Connect again for each Salesforce Cases source.

connect_salesforce_knowledge

ChatGPT
Start connecting Salesforce for a private knowledge base, returning the URL the user approves at. A public knowledge base needs no connection. Open auth_url in a browser where the user is signed in to Kapa, and wait for them to say they have approved it. Then call validate_salesforce_knowledge once to confirm the connection. The source ingests what the approving Salesforce user can read. The connection is held for the signed-in user for 30 minutes and cleared once a source is configured with it.

connect_zendesk_helpcenter

ChatGPT
Start connecting a Zendesk Help Center source, returning the URL its owner approves at. Open auth_url in the user's browser and wait for them to say they have approved it. The approval happens in the browser, not here, so there is nothing to poll: ask the user, then call check_zendesk_helpcenter_connection once. The grant belongs to whoever approves it, so only that person can configure the source afterwards.

connect_zendesk_tickets

ChatGPT
Start connecting a Zendesk Tickets source, returning the URL its owner approves at. Open auth_url in the user's browser and wait for them to say they have approved it. The approval happens in the browser, not here, so there is nothing to poll: ask the user, then call check_zendesk_tickets_connection once. The grant belongs to whoever approves it, so only that person can configure the source afterwards.

create_agent_integration

ChatGPT
Create an Agent SDK integration, for a user building their own agent on Kapa's agent chat endpoint. Pass its id as integration_id on agent chat calls. A conversation sent without one has no integration attached and cannot be told apart from the project's other traffic in analytics, so create one per agent the user wants to measure separately. For a user calling the retrieval or chat API directly, use create_api_integration instead.

create_api_integration

ChatGPT
Create an API integration, for a user calling the retrieval or chat API from their own code. Pass its id as integration_id on those calls. A query sent without one has no integration attached and cannot be told apart from the project's other traffic in analytics, so create one per caller the user wants to measure separately. Separate from the API key, which is what authenticates the call.

create_api_key

ChatGPT
Create an API key for a project, so the user's own code can query it. The key is returned once, in private_api_key, and cannot be read back afterwards. Show it to the user and tell them to store it somewhere safe before moving on.

create_confluence_source

ChatGPT
Create a Confluence source in a project. Configure it with set_confluence_config before it can be ingested.

create_custom_qa_source

ChatGPT
Create a custom question and answer source in a project. Configure it with add_custom_qa_pair before it can be ingested.

create_discord_bot_integration

ChatGPT
Create a Discord bot integration, so Kapa answers questions in a Discord channel. Two steps: create it here with the server and channel ids, then have a Discord server administrator add the Kapa Discord app and send !kapa_enable_channel followed by the integration id in that channel. It answers nothing until then, and there is no tool to enable it for them. Ask the user for the ids. Discord only shows them once Developer Mode is on, under User Settings then Advanced, after which Copy Channel ID and Copy Server ID appear on the right click menu.

create_discord_source

ChatGPT
Create a Discord channel source in a project. Configure it with set_discord_config before it can be ingested.

create_discourse_source

ChatGPT
Create a Discourse forum source in a project. Configure it with set_discourse_config before it can be ingested.

create_github_discussions_source

ChatGPT
Create a GitHub discussions source in a project. Configure it with set_github_discussions_config before it can be ingested.

create_github_files_source

ChatGPT
Create a GitHub files source in a project. Configure it with set_github_files_config before it can be ingested.

create_github_issues_source

ChatGPT
Create a GitHub issues source in a project. Configure it with set_github_issues_config before it can be ingested.

create_github_pull_requests_source

ChatGPT
Create a GitHub pull requests source in a project. Configure it with set_github_pull_requests_config before it can be ingested.

create_google_drive_source

ChatGPT
Create a Google Drive source in a project. Connect it with connect_google_drive before configuring it.

create_jira_service_management_source

ChatGPT
Create a Jira Service Management source in a project. Configure it with set_jira_service_management_config before it can be ingested.

create_jira_source

ChatGPT
Create a Jira source in a project. Configure it with set_jira_config before it can be ingested.

create_mcp_integration

ChatGPT
Create a hosted MCP server for this project, so the user's own agents can query their content. The server is served at <url_slug>.mcp.kapa.ai. Ask the user what slug they want rather than choosing one.

create_notion_source

ChatGPT
Create a Notion source in a project. Configure it with set_notion_config before it can be ingested.

create_openapi_source

ChatGPT
Create an OpenAPI specification source in a project. Configure it with set_openapi_config before it can be ingested.

create_s3_source

ChatGPT
Create an S3 bucket source in a project. Configure it with set_s3_config before it can be ingested.

create_salesforce_cases_source

ChatGPT
Create a Salesforce Cases source in a project. Connect it with connect_salesforce_cases before configuring it.

create_salesforce_knowledge_source

ChatGPT
Create a Salesforce Knowledge source in a project. For a private knowledge base, connect it with connect_salesforce_knowledge before configuring it.

create_slack_bot_integration

ChatGPT
Create a Slack bot integration, so Kapa answers questions in a Slack channel. Two steps: create it here with the workspace and channel ids, then have a Slack workspace admin install the Kapa Slack app, invite it to the channel, and run /kapa-enable-channel followed by the integration id in that channel. It answers nothing until then, and there is no tool to enable it for them. Ask the user for the ids. In Slack the channel id is under View channel details and starts with C; the workspace id starts with T.

create_slack_source

ChatGPT
Create a Slack channel source in a project. Configure it with set_slack_config before it can be ingested.

create_support_form_deflector_integration

ChatGPT
Create a support form deflector, which answers a user before they file a support ticket.

create_web_crawl_source

ChatGPT
Create a web crawl source in a project.

create_widget_integration

ChatGPT
Create a website widget integration, the chat bubble embedded in a documentation site. Answers with the integration and its id, which the embed snippet on the dashboard's integrations page uses.

create_youtube_source

ChatGPT
Create a YouTube channel source in a project. Configure it with set_youtube_config before it can be ingested.

create_zendesk_helpcenter_source

ChatGPT
Create a Zendesk Help Center source in a project. Connect it with connect_zendesk_helpcenter before configuring it.

create_zendesk_tickets_source

ChatGPT
Create a Zendesk Tickets source in a project. Connect it with connect_zendesk_tickets before configuring it.

delete_custom_qa_pair

ChatGPT
Delete one question and answer pair. This cannot be undone, so confirm with the user before calling it.

delete_source

ChatGPT
Delete a source and everything ingested from it. This cannot be undone, so confirm with the user before calling it. Refused while the source is already being deleted.

detect_content_selector

ChatGPT
Suggest a content selector from the pages the preview crawl fetched. Answers with {"config": null} when there is nothing to detect from, which means the preview crawl has not run or found no pages. Nothing is saved: pass what it suggests to set_content_selector, ideally after checking it with inspect_content_selector.

duplicate_source

ChatGPT
Copy a source, with its configuration, into a new source in the same project. File-upload sources cannot be duplicated. The copy counts toward the team's source limit, so confirm with the user before calling it.

get_confluence_config

ChatGPT
Read a Confluence source's configuration. Its id is what update_confluence_config takes.

get_content_selector

ChatGPT
Get which part of each page a web crawl source ingests: the selector for the content and the selectors and classes it excludes, such as navigation or footers. The config is null until set_content_selector gives the source one, and a live crawl cannot start before then. Read it before update_content_selector, which takes the config id it returns, not the source id.

get_coverage_gaps

ChatGPT
Retrieve the cursor-paginated coverage-gap clusters for a period. Each cluster includes a suggestion field and up to 100 of the most recent threads inline; thread_count reports the true total.

get_crawl_config

ChatGPT
Retrieve the 'CrawlConfig' of the specified 'SourceScrape'

get_crawl_status

ChatGPT
Get the status of the crawl task of the specified 'SourceScrape'. Query params: preview: "true" to check the config preview crawl, omit for the real crawl.

get_discord_config

ChatGPT
Read a Discord source's configuration. Its id is what update_discord_config takes.

get_discourse_config

ChatGPT
Read a Discourse source's configuration. Its id is what update_discourse_config takes.

get_github_discussions_config

ChatGPT
Read a GitHub discussions source's configuration. Its id is what update_github_discussions_config takes.

get_github_files_config

ChatGPT
Read a GitHub files source's configuration. Its id is what update_github_files_config takes.

get_github_issues_config

ChatGPT
Read a GitHub issues source's configuration. Its id is what update_github_issues_config takes.

get_github_pull_requests_config

ChatGPT
Read a GitHub pull requests source's configuration. Its id is what update_github_pull_requests_config takes.

get_google_drive_config

ChatGPT
Retrieve the 'GoogleDriveConfig' of the specified 'SourceGoogleDrive'

get_jira_config

ChatGPT
Read a Jira source's configuration. Its id is what update_jira_config takes.

get_jira_service_management_config

ChatGPT
Read a Jira Service Management source's configuration. Its id is what update_jira_service_management_config takes.

get_notion_config

ChatGPT
Read a Notion source's configuration. Its id is what update_notion_config takes.

get_openapi_config

ChatGPT
Read a OpenAPI source's configuration. Its id is what update_openapi_config takes.

get_project_activity

ChatGPT
Returns aggregate activity statistics for a project, including query counts, feedback, unique users, and support ticket deflections. Results are also broken down by integration.

get_s3_config

ChatGPT
Read a S3 source's configuration. Its id is what update_s3_config takes.

get_salesforce_cases_config

ChatGPT
Read a Salesforce Cases source's configuration. Its id is what update_salesforce_cases_config takes.

get_salesforce_knowledge_config

ChatGPT
Read a Salesforce Knowledge source's configuration. Its id is what update_salesforce_knowledge_config takes.

get_slack_config

ChatGPT
Read a Slack source's configuration. Its id is what update_slack_config takes.

get_source

ChatGPT
Read one knowledge source, including its configuration and ingestion state.

get_thread

ChatGPT
Retrieve details about a thread.

get_top_questions

ChatGPT
Retrieve the cursor-paginated top-question clusters for a period. Each cluster includes up to 100 of the most recent threads inline; thread_count reports the true total.

get_youtube_channel

ChatGPT
Look up a YouTube channel by its id, to confirm it is the one the user means before saving it into a config. Answers the channel's title and details on success, and 404 when no channel has that id. It only accepts a channel id, which starts with UC. There is no way here to turn an @handle, a channel name or a video URL into a channel id, so when the user gives one of those, ask them to open the channel and copy its id rather than guessing.

get_youtube_config

ChatGPT
Read a YouTube source's configuration. Its id is what update_youtube_config takes.

get_youtube_playlist

ChatGPT
Look up one YouTube playlist by its id, to confirm it before saving its id into a config's playlists. Finds public and unlisted playlists, so use it for an unlisted playlist that list_youtube_playlists does not show. The id is the list= value of the playlist URL. Answers 404 when no playlist has that id or it is private, and 502 or 503 when YouTube itself fails.

get_zendesk_helpcenter_config

ChatGPT
Read a Zendesk Help Center source's configuration. Its id is what update_zendesk_helpcenter_config takes.

get_zendesk_tickets_config

ChatGPT
Read a Zendesk Tickets source's configuration. Its id is what update_zendesk_tickets_config takes.

give_context

ChatGPT
Share what you are trying to accomplish with these tools and why. Call it once at the start of a task. The Kapa team uses it to improve the experience for that kind of task. Leave out names, proprietary information, personal data and credentials.

give_feedback

ChatGPT
Report a problem with these tools to the Kapa team. Use it when a tool errors, a capability is missing, output is confusing or the docs are unclear. Do not include credentials or personal data.

inspect_content_selector

ChatGPT
Show what a candidate selector would extract from the preview pages, without saving it. Use this to check a selector before set_content_selector. It answers with the text each page would contribute, so a selector that catches navigation, or misses the body, is visible here rather than after ingesting. Needs a preview crawl first: without one it answers 409.

list_api_keys

ChatGPT
List a project's API keys. Answers with each key's name and prefix, never the key itself, which is only ever shown when it is created.

list_confluence_pages

ChatGPT
List the pages inside the chosen Confluence spaces, to show the user what would be ingested. Scoped by the spaces, not the whole site: pass the keys from list_confluence_spaces as space_keys_include. With neither include nor exclude it walks every visible space, which is slow on a large site, so always narrow it first.

list_confluence_spaces

ChatGPT
List the spaces a Confluence credential can see, so the user picks real ones instead of guessing a space key. Call this after validate_confluence and show the user the names. The key of each space is what the source config stores. Personal spaces are left out.

list_coverage_gaps_periods

ChatGPT
Retrieve a cursor-paginated list of completed coverage-gaps periods (clusterings over certainty=uncertain) for a project, newest first. The returned period ids are used to fetch the underlying clusters via the retrieve endpoint.

list_custom_qa_pairs

ChatGPT
List the question and answer pairs of a custom Q&A source, oldest first. Check here before add_custom_qa_pair, because a question can only be added once per source.

list_discord_users

ChatGPT
List the server members who can view a Discord channel, with their ids and names. It does not mean they have posted there. Use it to turn the people a user names into the user ids set_discord_config takes: users_to_exclude for bots, and support_user_ids with include_only_threads_with_support_user_answers to limit ingestion to threads support answered. Validate the channel first: an unreadable channel fails with an error here. Takes no credential: Kapa uses its own Discord bot.

list_discourse_categories

ChatGPT
List a Discourse forum's categories, with their names and slugs. Use it to turn the sections a user names into the category names or slugs set_discourse_config takes. Pass names or slugs, never the numeric ids: an id matches nothing, and ingestion then drops the category filter entirely. Validate the URL with validate_discourse_url first: a reachable site that is not a forum can answer an empty list here instead of an error.

list_discourse_tags

ChatGPT
List a Discourse forum's tags, with their names and topic counts. Use it to confirm the tags a user names exist before putting them in set_discourse_config, and to see how much each tag would bring in. Validate the URL with validate_discourse_url first: a reachable site that is not a forum can answer an empty list here instead of an error. A forum may have tagging turned off, in which case the list is empty and the source should be filtered by category instead.

list_end_users

ChatGPT
List all end users (ie: users who interact with your Kapa bot) for a project.

list_github_discussions_categories

ChatGPT
List a repository's discussion categories, with their names and colours. Use it to turn the sections a user names into the categories set_github_discussions_config takes, such as Q&A or Announcements. Validate the repository first: an unreachable repository fails with an error here, and one with Discussions turned off answers an empty list. Pass personal_access_token, or source_id to reuse the token already stored on a source.

list_github_files_repo_tree

ChatGPT
List a repository's files and directories, so the paths set_github_files_config takes can be picked from real ones. The answer carries entries (each with path, name, type and size), the file types Kapa can ingest, the resolved ref, and two flags worth reading: truncated means GitHub cut the listing short, and is_shallow means the repository was too large so only the top level and its immediate children came back. In either case the listing is incomplete, so do not conclude a path is missing from it. Answers 400 when repo_owner or repo_name is missing, when the ref does not exist, or when the repository cannot be read. Validate the repository first. Pass personal_access_token, or source_id to reuse the token already stored on a source.

list_github_issues_labels

ChatGPT
List a repository's labels, with their names and colours. Use it to confirm the labels a user names exist before putting them in set_github_issues_config, which filters issues by label. Validate the repository first: an unreachable repository answers with an empty list here rather than an error. Pass personal_access_token, or source_id to reuse the token already stored on a source.

list_github_pull_requests_labels

ChatGPT
List a repository's labels, with their names and colours. Use it to confirm the labels a user names exist before putting them in set_github_pull_requests_config, which filters pull requests by label. Validate the repository first: an unreachable repository answers with an empty list here rather than an error. Pass personal_access_token, or source_id to reuse the token already stored on a source.

list_google_drive_files

ChatGPT
List Drive files the connected account can see, to choose what the source ingests. Needs a connection first. Answers with at most 20 files, so pass name to search rather than expecting the whole Drive.

list_google_drive_folders

ChatGPT
List Drive folders the connected account can see, to choose what the source ingests. Needs a connection first. Answers with at most 20 folders, so pass name to search rather than expecting the whole Drive.

list_integrations

ChatGPT
List all integrations for a project.

list_jira_issue_types

ChatGPT
List the issue type names on a Jira site, for filtering which issues get ingested, such as only Bug and Story. They cover the whole site, not one project. An empty list can mean the credential was rejected, not that the site has none, because a failed lookup answers with an empty list. Run validate_jira first and trust that for whether the credential works.

list_jira_projects

ChatGPT
List the project keys a Jira credential can see, so the user picks real ones instead of guessing a key. Call this after validate_jira. The keys are what the source config stores. An empty list can mean the credential was rejected, not that the site has none, because a failed lookup answers with an empty list. Run validate_jira first and trust that for whether the credential works.

list_jira_request_types

ChatGPT
List the request types on a Jira Service Management site, for filtering which requests get ingested. This covers every service desk at once and cannot be narrowed to one, and the answer does not say which desk each type belongs to. Names repeat across desks, so show the user the whole list and let them choose rather than matching on a name.

list_jira_resolutions

ChatGPT
List the resolution names on a Jira site, for filtering which issues get ingested. A resolution is the outcome of an issue, for example Fixed or Won't Fix, and is separate from its status. Not every project uses resolutions, so an empty list here can be normal. An empty list can mean the credential was rejected, not that the site has none, because a failed lookup answers with an empty list. Run validate_jira first and trust that for whether the credential works.

list_jira_service_desks

ChatGPT
List the service desks a Jira Service Management credential can see, so the user picks real ones instead of guessing a project key. Call this after validate_jira_service_management. Each entry has the desk id, its project name to show the user, and its project key.

list_jira_statuses

ChatGPT
List the issue status names on a Jira site, for filtering which issues get ingested, such as only Done ones. These are workflow states, for example Open or In Progress. They cover the whole site, not one project. An empty list can mean the credential was rejected, not that the site has none, because a failed lookup answers with an empty list. Run validate_jira first and trust that for whether the credential works.

list_notion_databases

ChatGPT
List the Notion databases the integration can see, with their ids and titles. Use it to turn the databases a user names into the database ids set_notion_config takes. As with pages, an empty list usually means nothing has been shared with the integration yet rather than an empty workspace. Pass api_token, or source_id to reuse the token already stored on a Notion source.

list_notion_pages

ChatGPT
List the Notion pages the integration can see, with their ids and titles. Use it to turn the pages a user names into the page ids set_notion_config takes. An empty list usually does not mean an empty workspace: it means nothing has been shared with the integration yet, so tell the user to share the pages with it in Notion and try again. Databases are listed separately by list_notion_databases. Pass api_token, or source_id to reuse the token already stored on a Notion source.

list_pages_for_review

ChatGPT
List the pages start_crawl_with_review held for review. Each page has a change of NEW, MODIFIED or DELETED. Empty until that crawl has finished. Results come in pages, so follow next until it is null to see every held page.

list_preview_pages

ChatGPT
List the pages the latest preview crawl fetched, with their ids and URLs. Use it to see what preview_crawl found, and to pick the page_ids inspect_content_selector renders against. Empty until a preview crawl has run.

list_projects

ChatGPT
The signed-in user, their team and every project in that team. Each project carries the user's own permissions on it: a project without the permission a tool needs rejects that call. Start here: every other tool takes a project id.

list_salesforce_cases_custom_fields

ChatGPT
List the text custom fields on Case, for the api_name values that custom_fields takes. Needs connect_salesforce_cases first. Answers 400 no_oauth_data when there is no connection, or it expired after 30 minutes.

list_salesforce_cases_filterable_fields

ChatGPT
List the fields a custom_field_filters rule can test, for the path of each rule. Needs connect_salesforce_cases first. Answers 400 no_oauth_data when there is no connection, or it expired after 30 minutes.

list_salesforce_cases_picklist_values

ChatGPT
List the Case statuses, priorities, origins and types, for the statuses, priorities, origins and case_types filters. Needs connect_salesforce_cases first. Answers 400 no_oauth_data when there is no connection, or it expired after 30 minutes.

list_salesforce_cases_queues

ChatGPT
List the queues that can own Cases, for the ids that owner_queue_ids takes. Needs connect_salesforce_cases first. Answers 400 no_oauth_data when there is no connection, or it expired after 30 minutes.

list_salesforce_cases_record_types

ChatGPT
List the active Case record types, for the ids that record_type_ids takes. Needs connect_salesforce_cases first. Answers 400 no_oauth_data when there is no connection, or it expired after 30 minutes.

list_salesforce_knowledge_topics

ChatGPT
List the topics of a Salesforce knowledge base, for the ids that include_topic_ids and exclude_topic_ids take. An empty list can mean the connection failed, not that there are no topics. Run validate_salesforce_knowledge first and trust that for whether the connection works.

list_slack_users

ChatGPT
List the members of a Slack channel, with their ids and names. Use it to turn the people a user names into the user ids set_slack_config takes: users_to_exclude for bots, and support_user_ids with include_only_threads_with_support_user_answers to limit ingestion to threads support answered. Validate the channel first: an unreadable channel answers with an empty list here rather than an error. Pass bot_token, or source_id to reuse the token already stored on a Slack source. Without either, Slack refuses the call and this also answers an empty list.

list_source_groups

ChatGPT
List the source groups in a project, with their subgroups. A source group holds the sources about one product or version. Set a source's groups with update_source.

list_sources

ChatGPT
List the knowledge sources in a project.

list_threads

ChatGPT
Retrieve a paginated list of threads for a project. Each thread contains its question-answer pairs. Use the include parameter to opt in to nested data such as feedback, tags, and end user information. Supports cursor-based pagination and incremental sync via the updated_since filter.

list_top_questions_periods

ChatGPT
Retrieve a cursor-paginated list of completed top-questions periods (clusterings over certainty=all) for a project, newest first. The returned period ids are used to fetch the underlying clusters via the retrieve endpoint.

list_youtube_playlists

ChatGPT
List a YouTube channel's playlists, with their ids and titles. Use it to turn the playlists a user names into the playlist ids set_youtube_config takes, when they want only part of a channel ingested. Call get_youtube_channel first. A channel id that does not exist can also answer an empty list here, so an empty list only means no public playlists once the channel is confirmed. Then ingest the whole channel instead. Answers 400 when the channel id is malformed. As with get_youtube_channel, only a channel id starting with UC works, not an @handle.

list_zendesk_helpcenter_categories

ChatGPT
List the categories of a Zendesk Help Center, so the user picks the ids that include_categories takes.

list_zendesk_helpcenter_sections

ChatGPT
List the sections of a Zendesk Help Center, so the user picks the ids that include_sections takes.

list_zendesk_tickets_groups

ChatGPT
List the groups in a Zendesk helpdesk, so the user picks the ids that group_ids and group_ids_exclude take.

list_zendesk_tickets_tags

ChatGPT
List the ticket tags in a Zendesk helpdesk, so the user picks real ones for tags and tags_exclude.

preview_crawl

ChatGPT
Fetch a few pages with the source's crawl config, without ingesting anything. Run this before start_crawl. It shows what the crawl would find, and its pages are what inspect_content_selector renders against, so a selector can be judged before any quota is spent. Set page_limit to keep it short. Follow it with get_crawl_status, then list_preview_pages.

refresh_source

ChatGPT
Re-ingest a web crawl source to pick up changed pages. Web crawl sources only. Refused while a crawl is already running.

search_kapa_docs

ChatGPT
Search Kapa's own product documentation. Use this to look up how a Kapa feature works before configuring it: crawl options, source types, quotas, limits. It searches kapa.ai's docs, not the content of any project's sources.

search_project_knowledge

ChatGPT
Search your knowledge base and return the most relevant chunks for a query, with no LLM generation, for use as context by LLMs and agents. The mode parameter selects the retrieval mode. The same retrieval is available as a tool on Kapa's hosted MCP servers.

set_confluence_config

ChatGPT
Point a Confluence source at a site and say what it ingests.

set_content_selector

ChatGPT
Set which part of each page holds the content to ingest. A crawl cannot start until the source has one, so call this after setting the crawl config.

set_crawl_config

ChatGPT
Define what a web crawl source fetches.

set_discord_config

ChatGPT
Point a Discord source at a channel and say what it ingests.

set_discourse_config

ChatGPT
Point a Discourse source at a forum. Required before the source can be ingested.

set_github_discussions_config

ChatGPT
Point a GitHub discussions source at a repository and say which discussions it ingests.

set_github_files_config

ChatGPT
Point a GitHub files source at a repository and say which files it ingests.

set_github_issues_config

ChatGPT
Point a GitHub issues source at a repository and say which issues it ingests.

set_github_pull_requests_config

ChatGPT
Point a GitHub pull requests source at a repository and say which pull requests it ingests.

set_jira_config

ChatGPT
Point a Jira source at a site and say which issues it ingests.

set_jira_service_management_config

ChatGPT
Point a Jira Service Management source at a site and say which requests it ingests.

set_notion_config

ChatGPT
Give a Notion source its integration token and say what it ingests.

set_openapi_config

ChatGPT
Point an OpenAPI source at a specification. Required before the source can be ingested.

set_s3_config

ChatGPT
Point an S3 source at a bucket and give it credentials.

set_slack_config

ChatGPT
Point a Slack source at a channel and give it a bot token.

set_youtube_config

ChatGPT
Point a YouTube source at a channel. Required before the source can be ingested.

start_crawl

ChatGPT
Crawl the site and ingest every page the crawl config reaches. Every page is approved without review, including pages the preview did not sample, and ingestion consumes the team's quota. Use start_crawl_with_review to check pages first. Confirm with the user before calling it.

start_crawl_with_review

ChatGPT
Crawl the site and hold new and changed pages for review instead of ingesting them. Check them with list_pages_for_review, then ingest them with approve_pages_for_review. Ingestion consumes the team's quota, so confirm with the user before calling it.

update_confluence_config

ChatGPT
Change what a Confluence source ingests. Takes the config id that get_confluence_config returns, not the source id. Fields left out keep their value.

update_content_selector

ChatGPT
Change what a web crawl source extracts from each page. Takes the config id get_content_selector returns, not the source id. Extraction changes only reach answers by ingesting again.

update_crawl_config

ChatGPT
Change what a web crawl source crawls. Takes the crawl config id that get_crawl_config returns, not the source id. Pages from an earlier preview stay listed after a change and were fetched under the old config, so run preview_crawl again before judging the new one.

update_custom_qa_pair

ChatGPT
Change the question or answer of one pair. Takes the pair id that list_custom_qa_pairs returns. Fields left out keep their value.

update_discord_config

ChatGPT
Change what a Discord source ingests. Takes the config id that get_discord_config returns, not the source id. Fields left out keep their value.

update_discourse_config

ChatGPT
Change what a Discourse source ingests. Takes the config id that get_discourse_config returns, not the source id. Fields left out keep their value.

update_github_discussions_config

ChatGPT
Change what a GitHub discussions source ingests. Takes the config id that get_github_discussions_config returns, not the source id. Fields left out keep their value.

update_github_files_config

ChatGPT
Change what a GitHub files source ingests. Takes the config id that get_github_files_config returns, not the source id. Fields left out keep their value.

update_github_issues_config

ChatGPT
Change what a GitHub issues source ingests. Takes the config id that get_github_issues_config returns, not the source id. Fields left out keep their value.

update_github_pull_requests_config

ChatGPT
Change what a GitHub pull requests source ingests. Takes the config id that get_github_pull_requests_config returns, not the source id. Fields left out keep their value.

update_google_drive_config

ChatGPT
Change what a Google Drive source ingests. Takes the config id that get_google_drive_config returns, not the source id. Call connect_google_drive again first: saving a change needs a fresh grant, because configuring a source clears the last one.

update_jira_config

ChatGPT
Change what a Jira source ingests. Takes the config id that get_jira_config returns, not the source id. Fields left out keep their value.

update_jira_service_management_config

ChatGPT
Change what a Jira Service Management source ingests. Takes the config id that get_jira_service_management_config returns, not the source id. Fields left out keep their value.

update_notion_config

ChatGPT
Change what a Notion source ingests. Takes the config id that get_notion_config returns, not the source id. Fields left out keep their value.

update_openapi_config

ChatGPT
Change what a OpenAPI source ingests. Takes the config id that get_openapi_config returns, not the source id. Fields left out keep their value.

update_s3_config

ChatGPT
Change what a S3 source ingests. Takes the config id that get_s3_config returns, not the source id. Fields left out keep their value.

update_salesforce_cases_config

ChatGPT
Change what a Salesforce Cases source ingests. Takes the config id that get_salesforce_cases_config returns, not the source id. Fields left out keep their value. Only the user who connected the source can change it.

update_salesforce_knowledge_config

ChatGPT
Change what a Salesforce Knowledge source ingests. Takes the config id that get_salesforce_knowledge_config returns, not the source id. Fields left out keep their value. For a private knowledge base, only the user who connected it can change it.

update_slack_config

ChatGPT
Change what a Slack source ingests. Takes the config id that get_slack_config returns, not the source id. Fields left out keep their value.

update_source

ChatGPT
Change a source's descriptive settings. Does not change what the source ingests, which belongs to its own configuration.

update_youtube_config

ChatGPT
Change what a YouTube source ingests. Takes the config id that get_youtube_config returns, not the source id. Fields left out keep their value.

update_zendesk_helpcenter_config

ChatGPT
Change what a Zendesk Help Center source ingests. Takes the config id that get_zendesk_helpcenter_config returns, not the source id. Fields left out keep their value.

update_zendesk_tickets_config

ChatGPT
Change what a Zendesk Tickets source ingests. Takes the config id that get_zendesk_tickets_config returns, not the source id. Fields left out keep their value.

validate_confluence

ChatGPT
Check that a Confluence credential works, before saving it on a source. Answers true when the site is reachable and the token may read it, false for a wrong token, a token without permission, or a site that does not exist. It does not say which of those it was, so on false ask the user to re-check all three of url, email and api_token. The most common cause of a false is a url ending in /wiki. Strip it and try again before telling the user their token is bad.

validate_discord_channel

ChatGPT
Check that a Discord channel exists, is a forum channel and is readable by the Kapa bot, before saving it into a config. Read the 'type' field of the answer, not the HTTP status: this answers 200 either way. type 'channel' carries the channel and server names, so the id can be confirmed against what the user described. type 'error' carries an 'error' message saying whether the channel was not found, the bot lacks permission, or the channel is not a forum channel. Only forum channels can be ingested. A plain text channel fails here even though it exists. Takes no credential: Kapa uses its own Discord bot, so the user must invite that bot to the server first.

validate_discourse_url

ChatGPT
Check that a URL is a reachable Discourse forum, before using it anywhere else. Answers {"valid": true} or {"valid": false}, always with HTTP 200, so read the field rather than the status. A false answer means the site is not Discourse, is unreachable, or hides its API behind a login: ask the user to confirm the URL rather than retrying. Kapa reads Discourse anonymously, so the forum must be public. There is no credential to pass.

validate_github_discussions_repo

ChatGPT
Check that a repository exists and is readable, before saving it into a GitHub discussions config. Answers the repository's details on success and the bare value false on failure, both with HTTP 200, so check for false rather than reading the status. A false answer means the repository does not exist, is private, or the token cannot see it. For a private repository the user must supply a personal access token. Pass personal_access_token, or source_id to reuse the token already stored on a source.

validate_github_files_repo

ChatGPT
Check that a repository exists and is readable, before saving it into a GitHub files config. Answers the repository's details on success and the bare value false on failure, both with HTTP 200, so check for false rather than reading the status. A false answer means the repository does not exist, is private, or the token cannot see it. For a private repository the user must supply a personal access token. Pass personal_access_token, or source_id to reuse the token already stored on a source.

validate_github_issues_repo

ChatGPT
Check that a repository exists and is readable, before saving it into a GitHub issues config. Answers the repository's details on success and the bare value false on failure, both with HTTP 200, so check for false rather than reading the status. A false answer means the repository does not exist, is private, or the token cannot see it. For a private repository the user must supply a personal access token. Pass personal_access_token, or source_id to reuse the token already stored on a source.

validate_github_pull_requests_repo

ChatGPT
Check that a repository exists and is readable, before saving it into a GitHub pull requests config. Answers the repository's details on success and the bare value false on failure, both with HTTP 200, so check for false rather than reading the status. A false answer means the repository does not exist, is private, or the token cannot see it. For a private repository the user must supply a personal access token. Pass personal_access_token, or source_id to reuse the token already stored on a source.

validate_google_drive

ChatGPT
Check that the connected Google account can read Drive. Needs connect_google_drive first.

validate_jira

ChatGPT
Check that a Jira credential works, before saving it on a source. The answer is one of three values, not a boolean: - true: the credential works. - "Unauthorized": the site was reached but the username or api_token was rejected. Ask the user for a new API token. - "Not Found": no Jira site answered at base_url, or the call failed some other way. Ask the user to re-check base_url. Treat anything other than true as a failure, and do not save the credential.

validate_jira_service_management

ChatGPT
Check that a Jira Service Management credential works, before saving it on a source. Answers {"is_valid": true}, or {"is_valid": false, "detail": "..."} where detail says what went wrong. Read detail back to the user rather than guessing: a rejected token, an unreachable site and a working login that can see no requests all come back as is_valid false. The no-visible-requests case is not a credential problem. The user has to grant their account browse permission on the service desk projects, otherwise the source ingests nothing.

validate_notion_workspace

ChatGPT
Check that a Notion integration token works, before using it anywhere else. Answers true when the token belongs to a workspace integration and false otherwise. A false answer usually means the token is wrong, revoked, or not a workspace-level integration, but a temporary Notion error also answers false. Retry once, then ask the user for a new token. A true answer only proves the token works. It does not mean the integration can see any pages: in Notion each page must be shared with the integration separately, so list_notion_pages can still come back empty. Pass api_token, or source_id to reuse the token already stored on a Notion source.

validate_openapi_url

ChatGPT
Check that a URL serves a parseable OpenAPI or Swagger specification, before saving it into a config. Answers {"valid": false}, with HTTP 200, when the URL is not http(s), cannot be fetched, or does not parse as a valid spec, so read the field rather than the status. On success it answers the spec's version, title and description instead, with no "valid" key at all, so treat the presence of a title as the success signal. Point it at the raw specification file, not at rendered API documentation: a Swagger UI or Redoc page is HTML and fails here. A local file path is rejected for security reasons. There is no credential to pass, so the specification must be reachable without authentication.

validate_s3_config

ChatGPT
Check an S3 bucket, its credentials and its index file together, before saving them into a config. Answers {"is_valid": bool, "message": str} with HTTP 200, so read is_valid rather than the status. Show the message to the user: it says which of the three checks failed. A failure is not always about the credentials. The bucket may not exist, the endpoint URL may be wrong for the provider, or an index.json in the bucket may be malformed. Read the message before telling the user their keys are wrong. Pass the access key and secret, or source_id to reuse the credentials already stored on an S3 source. Non-AWS S3-compatible providers need endpoint_url. A source_id that does not exist or has no saved config is refused with HTTP 400 before any check runs.

validate_salesforce_cases

ChatGPT
Check that the Salesforce connection works, and list the standard Case picklist values. Needs connect_salesforce_cases first. Answers 400 no_oauth_data when there is no connection, or it expired after 30 minutes.

validate_salesforce_knowledge

ChatGPT
Check that a Salesforce knowledge base can be read, and count its articles. Pass public_article_base_url for a public one. Without it the call uses the Salesforce connection, and answers 400 no_oauth_data when there is none.

validate_slack_channel

ChatGPT
Check that a Slack bot token can read a channel, before saving it into a config. Read the 'type' field of the answer, not the HTTP status: this answers 200 either way. type 'channel' means success, and the answer also carries the channel's id, name and topic, so the id can be confirmed against the name the user gave. type 'error' means failure, and 'error' says which permission or lookup failed. It checks reading members, the user list, team info and channel history, so a failure here is usually a missing bot scope or a bot that was never invited to the channel. Pass bot_token, or source_id to reuse the token already stored on a Slack source.

validate_slack_token

ChatGPT
Check that a Slack bot token works, before using it anywhere else. Answers true when the token authenticates and false when it does not. A false answer means the token is wrong, revoked or from another workspace: ask the user for a new one rather than retrying. Pass bot_token, or source_id to reuse the token already stored on a Slack source.

validate_zendesk_helpcenter

ChatGPT
Check that a Zendesk Help Center source can sign in. Always true when auth_method is "none".

validate_zendesk_helpcenter_url

ChatGPT
Check that a URL is a Zendesk Help Center, and get the url and language_code that configure_zendesk_helpcenter takes. Call this before configure_zendesk_helpcenter and pass on the root_url and language_code it answers with.

validate_zendesk_tickets

ChatGPT
Check that a connected Zendesk Tickets source can export tickets. This needs a Zendesk admin, so false can mean the person who approved the connection is not an admin.

Capabilities

Writes

Example Prompts

Click any prompt to copy it.

App Stats

189

Tools

3

Prompts

ChatGPT

Platforms

Works with

ChatGPT

Data refreshed daily