protogrid

Search / io.branchly/branchly

branchly

R2· OAuth, once

Connect your agent to branchly: manage content, prompts, actions, learn from analytics and insights

v1.0.0 · active · website · descriptor JSON · versions

An agent can connect after a one-time OAuth consent by a human.Remote endpoint behind OAuth 2. Tokens stay with the agent; the registry only exposes the authorization metadata.
Quality93strong
Trust80of 100
Uptime, 30 days100%
Latency p50786 ms

Connect

8 clients · secrets stay placeholders
{
  "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.

Quality 93 / 100strong

protocoln/a · weight 25
  • n/a
    protocol.modern, protocol.stateless, protocol.transport, protocol.list_ttlno remote answered a protocol handshake (not probed yet, unreachable, or local-only)
authorization100 · weight 15
  • pass
    auth.prmProtected Resource Metadata (RFC 9728) published
  • pass
    auth.as_metadataauthorization server metadata reachable
  • pass
    auth.cimdClient ID Metadata Documents supported
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene86 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • pass
    tools.description_lengthdescriptions are concise
  • pass
    tools.schemasevery tool has an object input schema
  • pass
    tools.annotations37 of 37 tools declare readOnlyHint or destructiveHint
  • warn
    tools.directory_hints10 of 37 tools declare all four hints; missing: read_data_source_runs (destructiveHint, idempotentHint); list_prompts (destructiveHint, idempotentHint); read_sessions (destructiveHint, idempotentHint); …
  • warn
    tools.token_costabout 24,225 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability100 · weight 15
  • pass
    stability.changes2 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

37 tools, about 24,225 tokens to load them all · tool set 78603c5e210a · tools last changed 2026-09-29 · checked 2026-10-20 12:13 UTC

Tool changes

  • update_toolchangedinput schema
  • create_toolchangedinput schema

Full 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.

Trust 80 / 100

no-repository
provenance55
liveness100
freshness85
hygiene80

+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.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://api.branchly.io/mcp streamable-httpoauth2 AS: https://clerk.branchly.ioyes100%786 ms–2026-10-20

Tools (37)

create_data_sourceCreate 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_nodeCreate a new content node in the knowledge base. Label defaults to 'content'.
create_promptCreate 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_toolCreate 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-onlyTime 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-onlyTime 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-onlyDistribution 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-onlyReturn the full configuration of the authenticated application.
get_sentiment_distributionread-onlySentiment 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-onlyKnowledge-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-onlyURLs 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-onlyTop 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-onlyTop (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-onlyPage 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-onlyTop 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-onlyTop 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-onlyTop 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-onlyTop 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-onlyTime 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-onlyList data sources for the authenticated application. Optionally filter by data source type(s). Returns paginated results ordered by last update.
list_nodesread-onlyList 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-onlyList 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-onlyList tools configured for the authenticated application. Optionally filter by active status. Returns all matching tools.
read_chat_request_documentsread-onlyRead 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-onlyRead 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-onlyList 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-onlyRead a node by its ID. Returns full node details.
read_search_request_resultsread-onlyRead 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-onlyRead 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-onlyList 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-onlyRead a tool by its ID. Returns full tool details.
run_data_sourceTrigger 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_analyticsUpdate 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_sourceUpdate a data source by its ID. Only provided fields will be updated (partial update). Returns the updated data source.
update_nodeUpdate 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_promptActivate 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_toolUpdate an existing tool by its ID. Fetches the current tool and applies partial updates to name, description, or active status.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "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"
}