Cline supports MCP servers. Add browser.city once and your agent can call browser tools (open, navigate, click, snapshot, markdown) on demand.
1) Set your API key
Set BROWSERCITY_API_KEY in your environment.
2) Find Cline’s MCP settings file
Cline stores MCP server config in cline_mcp_settings.json.
Common locations:
- macOS:
~/Library/Application Support/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json - Linux:
~/.config/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json - Windows:
%APPDATA%/Code/User/globalStorage/saoudrizwan.claude-dev/settings/cline_mcp_settings.json
3) Add browser.city as a remote MCP server
Add an entry under mcpServers:
cline_mcp_settings.json
{ "mcpServers": { "browsercity": { "type": "sse", "url": "https://mcp.browser.city/mcp", "headers": { "Authorization": "Bearer ${BROWSERCITY_API_KEY}" } } }}{ "mcpServers": { "browsercity": { "type": "sse", "url": "https://mcp.browser.city/mcp", "headers": { "Authorization": "Bearer ${BROWSERCITY_API_KEY}" } } }}{ "mcpServers": { "browsercity": { "type": "sse", "url": "https://mcp.browser.city/mcp", "headers": { "Authorization": "Bearer ${BROWSERCITY_API_KEY}" } } }}{ "mcpServers": { "browsercity": { "type": "sse", "url": "https://mcp.browser.city/mcp", "headers": { "Authorization": "Bearer ${BROWSERCITY_API_KEY}" } } }}
Notes:
- Keep the API key in an environment variable so it doesn’t end up in source control.
- If your Cline version uses a different remote transport field, keep the same
url+headersand adjusttypeaccordingly.
4) Use it in Cline
Try:
Use browsercity tools to open a browser, navigate to a URL, and extract markdown.
5) When to use REST instead
If you don’t need interaction, the Request API is often the simplest integration:
request.ts
const apiKey = process.env.BROWSERCITY_API_KEY!;const opts = { method: "POST", headers: { Authorization: `Bearer ${apiKey}` } };const res = await fetch("https://api.browser.city/v1/requests", { ...opts, body: JSON.stringify({ url: "https://example.com", markdown: true }),}).then((r) => r.json());console.log(res.content);import osimport requestsapi_key = os.environ["BROWSERCITY_API_KEY"]res = requests.post( "https://api.browser.city/v1/requests", headers={"Authorization": f"Bearer {api_key}"}, json={"url": "https://example.com", "markdown": True},).json()print(res["content"])using System.Net.Http.Headers;using System.Net.Http.Json;var apiKey = Environment.GetEnvironmentVariable("BROWSERCITY_API_KEY")!;var http = new HttpClient();http.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", apiKey);var res = await http.PostAsJsonAsync( "https://api.browser.city/v1/requests", new { url = "https://example.com", markdown = true });Console.WriteLine(await res.Content.ReadAsStringAsync());import java.net.URI;import java.net.http.*;var apiKey = System.getenv("BROWSERCITY_API_KEY");var http = HttpClient.newHttpClient();var req = HttpRequest.newBuilder() .uri(URI.create("https://api.browser.city/v1/requests")) .header("Authorization", "Bearer " + apiKey) .POST(HttpRequest.BodyPublishers.ofString( "{\"url\":\"https://example.com\",\"markdown\":true}")) .build();var res = http.send(req, HttpResponse.BodyHandlers.ofString());System.out.println(res.body());