Connect clients that take a URL instead of a command: web agents, hosted assistants, sandboxed IDEs.
While the companion runs it serves MCP over Streamable HTTP at:
http://127.0.0.1:9223/mcp
No token is needed. The endpoint binds to localhost and refuses requests that carry a web page’s Origin header, so pages in your browser cannot call it; native clients and extensions can. The dashboard’s Settings → Other clients card shows the URL with a copy button.
If you expose the endpoint through a tunnel, keep the tunnel private: anyone who can reach it controls your shared tabs.
An HTTP client cannot launch the companion the way a stdio client does. Either:
Keep a stdio client (Claude Code, OpenCode…) connected: its companion owns the port and serves HTTP at the same time.
Or run it standalone:
bunx browspark-mcp@latest --http-only
--http-only skips the stdio transport so the process does not exit when stdin closes. Stop it with Ctrl-C; it closes any developer browsers it launched.Connected extensions receive the full Tools catalog immediately, even before an HTTP client initializes. Graph can show the companion and browser profiles with zero agents; each agent appears after its MCP session initializes.
Paste the URL from the dashboard’s Settings page into whichever option of your client asks for an MCP server URL. Start the companion with --http-only first, or have a stdio client running. Nothing else is needed: the client only makes HTTP requests to localhost.From code, use the MCP SDK’s Streamable HTTP transport:
import { Client } from '@modelcontextprotocol/sdk/client/index.js';import { StreamableHTTPClientTransport } from '@modelcontextprotocol/sdk/client/streamableHttp.js';const client = new Client({ name: 'my-agent', version: '1.0' });await client.connect(new StreamableHTTPClientTransport(new URL('http://127.0.0.1:9223/mcp')));const { tools } = await client.listTools();
Each HTTP session gets its own MCP server instance and its own agent identity, exactly like a stdio client. The session id travels in the mcp-session-id header; the first request must be a POST that initialises the session. End a session with a DELETE; a client that disappears without one is dropped about a minute after its event stream closes (BROWSPARK_HTTP_GRACE_MS tunes the delay), so it does not linger in the graph.
Some IDEs and hosted agents run MCP servers with no access to your files. For those:
Situation
Use
Client can make localhost HTTP requests
The URL above.
Client can run a command but not read the repo
bun run compile and point it at dist/browspark.
Client can do neither
Not supported; the browser is on your machine, so the client must reach it somehow.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Browspark","description":"Local MCP server for simultaneous Chrome, Brave, Firefox, and Zen browser sessions.","colors":{"primary":"#1f8a5f","light":"#4dab9a","dark":"#166b49"},"logo":{"light":"https://mintcdn.com/browsermcp-03459522/KhgSxPWRjW5syasR/images/logo.png?fit=max\u0026auto=format\u0026n=KhgSxPWRjW5syasR\u0026q=85\u0026s=bdc4fa196c5eccdf12b057b4b9d0a08d","dark":"https://mintcdn.com/browsermcp-03459522/KhgSxPWRjW5syasR/images/logo.png?fit=max\u0026auto=format\u0026n=KhgSxPWRjW5syasR\u0026q=85\u0026s=bdc4fa196c5eccdf12b057b4b9d0a08d"},"favicon":"https://mintcdn.com/browsermcp-03459522/KhgSxPWRjW5syasR/images/logo.png?fit=max\u0026auto=format\u0026n=KhgSxPWRjW5syasR\u0026q=85\u0026s=bdc4fa196c5eccdf12b057b4b9d0a08d","appearance":{"default":"system"},"navbar":{"links":[{"href":"https://github.com/outofmemry/browspark","label":"GitHub"}]},"footer":{"socials":{"github":"https://github.com/outofmemry/browspark"}},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"browsermcp-03459522","hasAudioNarration":false,"actualSubdomain":"browsermcp-03459522","customDomains":["docs.browspark.krishm.dev"],"gitSource":{"type":"github","owner":"outofmemry","repo":"browspark","deployBranch":"main","contentDirectory":"docs","isPrivate":false,"mountPath":"","label":""},"chroma":{"latestBuiltDeploymentHistoryId":"6ac5f106214da42389de4b5a","collectionId":"c5c28bce-3673-4420-8900-3ef0222045bd","liveDeploymentHistoryId":"6ac5f106214da42389de4b5a","schemaVersion":"v3"},"entitlements":{"AI_CHAT":{"status":"DISABLED"},"WEB_MCP":{"status":"DISABLED"},"NARRATION":{"status":"DISABLED"}},"buildId":"6ac5f106214da42389de4b5a","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"default","tag":"Tools","count":46},{"language":"default","tag":"Documentation","count":35},{"language":"default","tag":"Browser automation","count":24},{"language":"default","tag":"Developer tools","count":22},{"language":"default","tag":"Guides","count":9},{"language":"default","tag":"Reference","count":7},{"language":"default","tag":"Concepts","count":6},{"language":"default","tag":"Dashboard","count":6},{"language":"default","tag":"Get started","count":4},{"language":"default","tag":"Connect an agent","count":3}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"connect/http-endpoint","slug":"/connect/http-endpoint","pageMetadata":{"title":"HTTP endpoint","description":"Connect clients that take a URL instead of a command: web agents, hosted assistants, sandboxed IDEs.","href":"/connect/http-endpoint"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Connect clients that take a URL instead of a command: web agents, hosted assistants, sandboxed IDEs.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table,Warning}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`While the companion runs it serves MCP over `,_jsx(_components.strong,{children:`Streamable HTTP`}),` at:`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`2`,language:`text`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`http://127.0.0.1:9223/mcp`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`No token is needed. The endpoint binds to localhost and refuses requests that carry a web page’s `,_jsx(_components.code,{children:`Origin`}),` header, so pages in your browser cannot call it; native clients and extensions can. The dashboard’s `,_jsx(_components.strong,{children:`Settings → Other clients`}),` card shows the URL with a copy button.`]}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`If you expose the endpoint through a tunnel, keep the tunnel private: anyone who can reach it controls your shared tabs.`})}),`\n`,_jsx(Heading,{level:`2`,id:`starting-the-companion-for-http-clients`,children:`Starting the companion for HTTP clients`}),`\n`,_jsx(_components.p,{children:`An HTTP client cannot launch the companion the way a stdio client does. Either:`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsx(_components.li,{children:`Keep a stdio client (Claude Code, OpenCode…) connected: its companion owns the port and serves HTTP at the same time.`}),`\n`,_jsx(_components.li,{children:`Or run it standalone:`}),`\n`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`bunx`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` browspark-mcp@latest`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` --http-only`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`--http-only`}),` skips the stdio transport so the process does not exit when stdin closes. Stop it with Ctrl-C; it closes any developer browsers it launched.`]}),`\n`,_jsxs(_components.p,{children:[`Connected extensions receive the full Tools catalog immediately, even before an HTTP client initializes. `,_jsx(_components.a,{href:`/dashboard/graph`,children:`Graph`}),` can show the companion and browser profiles with zero agents; each agent appears after its MCP session initializes.`]}),`\n`,_jsx(Heading,{level:`2`,id:`connecting-a-client`,children:`Connecting a client`}),`\n`,_jsxs(_components.p,{children:[`Paste the URL from the dashboard’s Settings page into whichever option of your client asks for an MCP server URL. Start the companion with `,_jsx(_components.code,{children:`--http-only`}),` first, or have a stdio client running. Nothing else is needed: the client only makes HTTP requests to localhost.`]}),`\n`,_jsx(_components.p,{children:`From code, use the MCP SDK’s Streamable HTTP transport:`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`Client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '@modelcontextprotocol/sdk/client/index.js'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`StreamableHTTPClientTransport`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '@modelcontextprotocol/sdk/client/streamableHttp.js'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` client`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`name:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` 'my-agent'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`version:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` '1.0'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`connect`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` StreamableHTTPClientTransport`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` URL`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'http://127.0.0.1:9223/mcp'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)));`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`tools`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`listTools`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Each HTTP session gets its own MCP server instance and its own agent identity, exactly like a stdio client. The session id travels in the `,_jsx(_components.code,{children:`mcp-session-id`}),` header; the first request must be a `,_jsx(_components.code,{children:`POST`}),` that initialises the session. End a session with a `,_jsx(_components.code,{children:`DELETE`}),`; a client that disappears without one is dropped about a minute after its event stream closes (`,_jsx(_components.code,{children:`BROWSPARK_HTTP_GRACE_MS`}),` tunes the delay), so it does not linger in the graph.`]}),`\n`,_jsx(Heading,{level:`2`,id:`sandboxed-clients`,children:`Sandboxed clients`}),`\n`,_jsx(_components.p,{children:`Some IDEs and hosted agents run MCP servers with no access to your files. For those:`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Situation`}),_jsx(_components.th,{children:`Use`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Client can make localhost HTTP requests`}),_jsx(_components.td,{children:`The URL above.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Client can run a command but not read the repo`}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`bun run compile`}),` and point it at `,_jsx(_components.code,{children:`dist/browspark`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Client can do neither`}),_jsx(_components.td,{children:`Not supported; the browser is on your machine, so the client must reach it somehow.`})]})]})]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"HTTP endpoint","description":"Connect clients that take a URL instead of a command: web agents, hosted assistants, sandboxed IDEs.","href":"/connect/http-endpoint"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Starting the companion for HTTP clients","slug":"starting-the-companion-for-http-clients","depth":2,"children":[]},{"title":"Connecting a client","slug":"connecting-a-client","depth":2,"children":[]},{"title":"Sandboxed clients","slug":"sandboxed-clients","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"subdomain":"browsermcp-03459522","siteName":"Browspark","title":"HTTP endpoint - Browspark","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-18T06:31:53.389Z","originalFileLocation":"connect/http-endpoint.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Connect clients that take a URL instead of a command: web agents, hosted assistants, sandboxed IDEs.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Browspark\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/browsermcp-03459522/yuS5GO4HF8wSa8SY/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/browsermcp-03459522/yuS5GO4HF8wSa8SY/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/browsermcp-03459522/yuS5GO4HF8wSa8SY/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/browsermcp-03459522/yuS5GO4HF8wSa8SY/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/browsermcp-03459522/yuS5GO4HF8wSa8SY/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/browsermcp-03459522/yuS5GO4HF8wSa8SY/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/browsermcp-03459522/yuS5GO4HF8wSa8SY/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/browsermcp-03459522/yuS5GO4HF8wSa8SY/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/browsermcp-03459522/yuS5GO4HF8wSa8SY/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"HTTP endpoint - Browspark\">\u003cmeta data-mint-head property=\"og:description\" content=\"Connect clients that take a URL instead of a command: web agents, hosted assistants, sandboxed IDEs.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Browspark\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.browspark.krishm.dev/connect/http-endpoint\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://browsermcp-03459522.mintlify.app/_mintlify/api/og/v2?division=Connect+an+agent\u0026amp;title=HTTP+endpoint\u0026amp;description=Connect+clients+that+take+a+URL+instead+of+a+command%3A+web+agents%2C+hosted+assistants%2C+sandboxed+IDEs.\u0026amp;theme=754469c13e8eadb235acdb8c\u0026amp;signature=7a8bb0db6210aa882428038f96930e81afa9d8fb8c5ad35abce44190eb783196\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"HTTP endpoint - Browspark\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Connect clients that take a URL instead of a command: web agents, hosted assistants, sandboxed IDEs.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://browsermcp-03459522.mintlify.app/_mintlify/api/og/v2?division=Connect+an+agent\u0026amp;title=HTTP+endpoint\u0026amp;description=Connect+clients+that+take+a+URL+instead+of+a+command%3A+web+agents%2C+hosted+assistants%2C+sandboxed+IDEs.\u0026amp;theme=754469c13e8eadb235acdb8c\u0026amp;signature=7a8bb0db6210aa882428038f96930e81afa9d8fb8c5ad35abce44190eb783196\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/browsermcp-03459522/yuS5GO4HF8wSa8SY/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Browspark\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#1f8a5f\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.browspark.krishm.dev/connect/http-endpoint\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/connect/http-endpoint.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.browspark.krishm.dev/#organization\",\"name\":\"Browspark\",\"url\":\"https://docs.browspark.krishm.dev\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/browsermcp-03459522/KhgSxPWRjW5syasR/images/logo.png?fit=max\u0026auto=format\u0026n=KhgSxPWRjW5syasR\u0026q=85\u0026s=bdc4fa196c5eccdf12b057b4b9d0a08d\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.browspark.krishm.dev#website\",\"name\":\"Browspark\",\"url\":\"https://docs.browspark.krishm.dev\",\"publisher\":{\"@id\":\"https://docs.browspark.krishm.dev/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.browspark.krishm.dev/connect/http-endpoint#webpage\",\"url\":\"https://docs.browspark.krishm.dev/connect/http-endpoint\",\"name\":\"HTTP endpoint\",\"description\":\"Connect clients that take a URL instead of a command: web agents, hosted assistants, sandboxed IDEs.\",\"dateModified\":\"2026-09-18T06:31:53.389Z\",\"isPartOf\":{\"@id\":\"https://docs.browspark.krishm.dev#website\"},\"breadcrumb\":{\"@id\":\"https://docs.browspark.krishm.dev/connect/http-endpoint#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.browspark.krishm.dev/connect/http-endpoint#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Connect an agent\",\"item\":\"https://docs.browspark.krishm.dev/connect/agents\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"HTTP endpoint\",\"item\":\"https://docs.browspark.krishm.dev/connect/http-endpoint\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://docs.browspark.krishm.dev/connect/http-endpoint#article\",\"headline\":\"HTTP endpoint\",\"name\":\"HTTP endpoint\",\"description\":\"Connect clients that take a URL instead of a command: web agents, hosted assistants, sandboxed IDEs.\",\"url\":\"https://docs.browspark.krishm.dev/connect/http-endpoint\",\"mainEntityOfPage\":{\"@id\":\"https://docs.browspark.krishm.dev/connect/http-endpoint#webpage\"},\"dateModified\":\"2026-09-18T06:31:53.389Z\",\"publisher\":{\"@id\":\"https://docs.browspark.krishm.dev/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.browspark.krishm.dev#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Browspark\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Browspark","nav":{"global":null,"tabs":[{"tab":"Documentation","groups":[{"group":"Get started","pages":[{"title":"Introduction","href":""},{"title":"Quickstart","href":"/get-started/quickstart"},{"title":"Installation","href":"/get-started/installation"},{"title":"How it works","href":"/get-started/how-it-works"}]},{"group":"Connect an agent","pages":[{"title":"Connect an agent","description":"Register the companion with Claude Code, Codex, OpenCode, Cursor, Antigravity, Muse Code or Hermes over stdio.","href":"/connect/agents"},{"title":"HTTP endpoint","href":"/connect/http-endpoint"},{"title":"Multiple agents","description":"Run several MCP clients through one companion, sharing access to connected browser profiles and developer contexts.","href":"/connect/multiple-agents"}]},{"group":"Concepts","pages":[{"title":"Extension mode and developer mode","href":"/concepts/modes"},{"title":"Tabs and sharing","href":"/concepts/tabs-and-sharing"},{"title":"Snapshots and refs","href":"/concepts/snapshots-and-refs"},{"title":"Developer browser","href":"/concepts/developer-browser"},{"title":"Tool policy","href":"/concepts/tool-policy"},{"title":"Privacy and security","href":"/concepts/privacy-and-security"}]},{"group":"Dashboard","pages":[{"title":"Overview page","href":"/dashboard/overview"},{"title":"Graph page","href":"/dashboard/graph"},{"title":"Tabs page","href":"/dashboard/tabs"},{"title":"Tools page","href":"/dashboard/tools"},{"title":"Activity page","href":"/dashboard/activity"},{"title":"Settings page","href":"/dashboard/settings"}]},{"group":"Guides","pages":[{"title":"Automate a website","href":"/guides/automate-a-website"},{"title":"Read and extract","href":"/guides/read-and-extract"},{"title":"Debug a web app","href":"/guides/debug-a-web-app"},{"title":"Network mocking and throttling","href":"/guides/network-mocking"},{"title":"Performance and memory","href":"/guides/performance-and-memory"},{"title":"Record and export to Playwright","href":"/guides/record-and-export"},{"title":"Downloads, PDFs and domain policies","href":"/guides/downloads-pdf-and-policies"},{"title":"Work with other extensions","href":"/guides/work-with-other-extensions"},{"title":"Troubleshooting","href":"/guides/troubleshooting"}]},{"group":"Reference","pages":[{"title":"CLI and environment","href":"/reference/cli-and-environment"},{"title":"Files and directories","href":"/reference/files-and-directories"},{"title":"Capability matrix","href":"/reference/capability-matrix"},{"title":"Firefox and Zen support","href":"/reference/firefox"},{"title":"Using multiple browsers","href":"/reference/multiple-browsers"},{"title":"Wire protocol","href":"/reference/wire-protocol"},{"title":"Development","href":"/reference/development"}]}]},{"tab":"Tools","pages":[{"title":"Tools","href":"/tools/overview"}]}]},"title":"HTTP endpoint - Browspark","buildId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","deploymentId":"dpl_2oYXwqkEXirXBPk8wV1FtM5USFWi","dynamics":[],"chunks":[]}