Search / io.branchly/branchly
branchly
R2· OAuth, onceConnect your agent to branchly: manage content, prompts, actions, learn from analytics and insights
v1.0.0 · active · website · descriptor JSON · versions
Search / io.branchly/branchly
R2· OAuth, onceConnect your agent to branchly: manage content, prompts, actions, learn from analytics and insights
v1.0.0 · active · website · descriptor JSON · versions
{
"mcpServers": {
"branchly": {
"type": "http",
"url": "https://api.branchly.io/mcp",
"headers": {
"x-api-key": "${X_API_KEY}"
}
}
}
}claude mcp add --transport http branchly https://api.branchly.io/mcp --header "x-api-key: ${X_API_KEY}"[mcp_servers.branchly]
url = "https://api.branchly.io/mcp"
env_http_headers = { "x-api-key" = "X_API_KEY" }
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"branchly": {
"type": "remote",
"url": "https://api.branchly.io/mcp",
"enabled": true,
"headers": {
"x-api-key": "{env:X_API_KEY}"
}
}
}
}{
"mcpServers": {
"branchly": {
"type": "http",
"url": "https://api.branchly.io/mcp",
"headers": {
"x-api-key": "${X_API_KEY}"
}
}
},
"deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=branchly&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vYXBpLmJyYW5jaGx5LmlvL21jcCIsImhlYWRlcnMiOnsieC1hcGkta2V5IjoiJHtYX0FQSV9LRVl9In19"
}{
"servers": {
"branchly": {
"type": "http",
"url": "https://api.branchly.io/mcp",
"headers": {
"x-api-key": "${X_API_KEY}"
}
}
}
}{
"mcpServers": {
"branchly": {
"httpUrl": "https://api.branchly.io/mcp",
"headers": {
"x-api-key": "${X_API_KEY}"
}
}
}
}extensions:
"branchly":
enabled: true
name: "branchly"
type: streamable_http
uri: "https://api.branchly.io/mcp"
headers:
"x-api-key": "${X_API_KEY}"
timeout: 300
Placeholders to fill from your own secret store: ${X_API_KEY}. The registry never accepts secret values.
protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)auth.prmProtected Resource Metadata (RFC 9728) publishedauth.as_metadataauthorization server metadata reachableauth.cimdClient ID Metadata Documents supportedauth.secret_in_urlno templated URLtools.descriptionsevery tool has a descriptiontools.description_lengthdescriptions are concisetools.schemasevery tool has an object input schematools.annotations37 of 37 tools declare readOnlyHint or destructiveHinttools.directory_hints10 of 37 tools declare all four hints; missing: read_data_source_runs (destructiveHint, idempotentHint); list_prompts (destructiveHint, idempotentHint); read_sessions (destructiveHint, idempotentHint); …tools.token_costabout 24,225 tokens to load every tooltools.api_dumptools are not a one-to-one API dumpstability.changes2 tool changes in 30 daysstability.rug_pullno tool changed its meaning under the same namedeps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI packageupdate_toolchangedinput schemacreate_toolchangedinput schemaFull history: list_changes · trend: quality JSON.
Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.
+dns-namespace +website +reachable +uptime-100% ~updated-50d-ago -no-repository
Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.
| remote | auth | reachable | uptime 30d | p50 | protocol | last ok |
|---|---|---|---|---|---|---|
https://api.branchly.io/mcp streamable-http | oauth2 AS: https://clerk.branchly.io | yes | 100% | 786 ms | – | 2026-10-20 |
create_data_source | Create a new data source for the authenticated application. The 'settings' object must match the given 'type'. Returns the created data source. Creating a data source does not sync any content — use run_data_source to start a sync. |
create_node | Create a new content node in the knowledge base. Label defaults to 'content'. |
create_prompt | Create a new prompt version for the authenticated application. The new prompt is automatically set as active and the previously active prompt of the same type and subtype is deactivated. Use this whenever you want to change prompt text. |
create_tool | Create a new tool (AI action) for the authenticated application. Tool names must be unique per application, snake_case, max 64 chars. 'tool_config' and 'function_arguments' must match the given 'tool_type'. Returns the created tool. |
get_active_sessions_by_embedread-only | Time series of active sessions broken down by embed type (chat, chat_widget, navigator, search_interface, voice, api). Use this to understand which interfaces are driving usage. |
get_active_sessions_over_timeread-only | Time series of active sessions, bucketed by day or week (auto-chosen from the time window). Each row breaks the total down by interaction type (chat / search / navigation / form_submission / voice). Gaps are zero-filled, so the series is safe to plot directly. Use this to spot spikes, dips, or trends. |
get_answer_type_distributionread-only | Distribution of chat answer types (e.g. 'answered', 'no_answer', 'tool_call', 'human_handoff'), ranked by occurrence count. Use this to monitor answer quality: a high 'no_answer' share signals content gaps; a high 'human_handoff' share signals where the bot is escalating. |
get_applicationread-only | Return the full configuration of the authenticated application. |
get_sentiment_distributionread-only | Sentiment distribution of chat answers as counts of 'positive', 'negative', and 'neutral'. Optionally restrict to specific answer types. Use this as a quick quality signal — a rising 'negative' share usually warrants drilling into individual sessions via read_sessions. |
get_top_cited_sourcesread-only | Knowledge-base nodes most frequently cited in chat answers, ranked by citation count. Each row carries the node UUID (vertex_id), its title, optional source URL, and citation_count. Use this to understand which knowledge is actually load-bearing; pair with read_node(vertex_id) to inspect cited content. |
get_top_clicked_urlsread-only | URLs users actually clicked from inside the embed (search results, citation links, follow-ups, etc.), ranked by click count. Optionally filter by click event type. Use this to see what users find useful enough to click through to. |
get_top_devicesread-only | Top device categories (e.g. 'desktop', 'mobile', 'tablet') across all request types, ranked by occurrence count. Use this to understand the device mix of real users interacting with the embed. |
get_top_geographiesread-only | Top (country, region) combinations across all request types, ranked by occurrence count. Country is an ISO country code; region may be null when unavailable. Use this to understand geographic distribution of users. |
get_top_interaction_sourcesread-only | Page URLs the user was ON when they interacted with the embed (chat, search, navigation, form submission), ranked by occurrence count. Differs from get_top_clicked_urls: this is the ORIGIN page, not the destination. Use this to find which pages of the host site drive the most embed engagement. |
get_top_languagesread-only | Top detected natural languages of user CHAT questions, ranked by occurrence count. Differs from get_top_locales: locale reflects the embed/browser setting, language is detected from the actual query text. Use both to spot mismatches (e.g. German-speaking users hitting an English-only embed). |
get_top_localesread-only | Top locales (BCP-47 style, e.g. 'de_DE', 'en_US') across chat, search, and navigation requests, ranked by occurrence count. Use this to understand which languages/regions are being served and where content gaps may exist. |
get_top_searchesread-only | Top user search queries (normalized: lowercased, trimmed), ranked by occurrence count. Use this to discover dominant user intents and content gaps; pair with read_sessions(search_query=...) to inspect specific sessions. |
get_top_tagsread-only | Top tags attached to chat answers (auto-derived classifications), ranked by occurrence count. Optionally restrict to specific answer types. Use this for a quick topical breakdown of chat traffic. |
get_trending_classificationsread-only | Time series of trending classifications (topics OR intents inferred from chat content), one series per classification id. Each series item carries a period timestamp and count. Use this to see how topical or intent demand shifts over time. Choose 'topic' for subject-matter trends, 'intent' for user-goal trends. |
list_data_sourcesread-only | List data sources for the authenticated application. Optionally filter by data source type(s). Returns paginated results ordered by last update. |
list_nodesread-only | List nodes in the knowledge base. Optionally filter by vertex label(s), data source type(s), or data source IDs. Optionally sort by updated_at ('asc' or 'desc'). Provide 'query' and 'locale' to perform a full-text search across node content (requires both parameters). Returns paginated results with total count. |
list_promptsread-only | List prompts for the authenticated application. Optionally filter by type, subtype, or active status. Returns paginated results ordered by active status then last update. |
list_toolsread-only | List tools configured for the authenticated application. Optionally filter by active status. Returns all matching tools. |
read_chat_request_documentsread-only | Read the full document chunks retrieved for a single chat request (QA or SA). Returns chunk_id, vertex_id, title, full text, score, source, data source type, page metadata, and whether the chunk was cited in the final answer. Use this after read_session_detail to inspect the exact context the assistant grounded its answer in. Ordered by score descending. |
read_chat_request_tool_callsread-only | Read the full tool calls executed for a single chat request. Returns tool_call_id, tool_id, tool_name, tool_type, full arguments (JSON), and full content/response (JSON). Use this to inspect what the assistant invoked and how the tool responded. Ordered by timestamp ascending. |
read_data_source_runsread-only | List data source runs for the authenticated application, latest first. Optionally filter by data source ID or run status. Returns the latest runs (default 5) and the total matching count. Use this to track the progress of a run triggered via run_data_source. |
read_noderead-only | Read a node by its ID. Returns full node details. |
read_search_request_resultsread-only | Read the full search results returned for a single instant-search request. Returns chunk_id, vertex_id, title, full text, and relevance score. Use this to inspect the exact results a user saw for their search query. Ordered by score descending. |
read_session_detailread-only | Read a single session with its full history in token-dense form. Returns all interactions (chat, navigation, search, form, voice). Document chunks and tool calls are returned as references (IDs + titles) - use read_node(vertex_id) or read_tool(tool_id) to fetch full content. |
read_sessionsread-only | List sessions for application. Filter by interaction types (chat, search, navigation, form_submission, voice), embed types, answer types, tool IDs, or a full-text search query. Each session includes its full history, but document chunks and tool calls are returned as references (IDs + titles) rather than full content.Returns paginated results ordered by start time descending. |
read_toolread-only | Read a tool by its ID. Returns full tool details. |
run_data_source | Trigger an asynchronous run (sync/crawl) of a data source by its ID. The run is queued as a background job. Returns the accepted status. Track progress with read_data_source_runs. |
update_chat_request_analytics | Update analytics fields on a chat request: summary, tags, answer_type, sentiment, classification_topic_id, or classification_intent_id. Only provided fields are updated. Use this to annotate or reclassify chat interactions after the fact. |
update_data_source | Update a data source by its ID. Only provided fields will be updated (partial update). Returns the updated data source. |
update_node | Update a content node by its ID. Only provided fields are updated. Title and text are locale dicts (e.g. {"de": "Titel"}) — provided keys are merged, others preserved. custom_metadata keys are likewise merged into the existing metadata. |
update_prompt | Activate or deactivate a prompt by its ID. Use is_active=true to restore a previous prompt version — the currently active prompt of the same type and subtype is deactivated automatically. To change prompt text, use create_prompt instead. |
update_tool | Update an existing tool by its ID. Fetches the current tool and applies partial updates to name, description, or active status. |
Schemas: list_tools.
{
"name": "io.branchly/branchly",
"title": "branchly",
"$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
"remotes": [
{
"url": "https://api.branchly.io/mcp",
"type": "streamable-http",
"headers": [
{
"name": "x-api-key",
"isSecret": true,
"isRequired": true,
"description": "branchly API key for authentication"
}
]
}
],
"version": "1.0.0",
"websiteUrl": "https://branchly.io",
"description": "Connect your agent to branchly: manage content, prompts, actions, learn from analytics and insights"
}