String Web Access

ai.usestringPublished by usestring.aiOfficial publisherv1.3.8Updated Nov 3, 2026

Search the web, fetch any URL and map a site as clean, LLM-ready Markdown.

VerifiedStreamable HTTPWeb executableWeb Search & ScrapingBrowser Automation

Overview

String Web Access's hosted MCP server (mcp.usestring.ai), published by usestring.ai; API key required; Streamable HTTP; 4 tools.

No AI overview yet: these facts come from the registry entry and the server itself.

Publisher
usestring.ai
Endpoint
mcp.usestring.ai
Last checked

Installation

In SourceWeft

  1. Open String Web Access in the dashboard and add it to a workspace.
  2. Connect Authorization token credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/ai.usestring%2Fweb-access/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

{
  "mcpServers": {
    "string-web-access": {
      "type": "http",
      "url": "https://mcp.usestring.ai/v1/mcp",
      "headers": {
        "Authorization": "Bearer <YOUR_TOKEN>"
      }
    }
  }
}

README

String AI Web Access MCP Server

The official Model Context Protocol (MCP) server for String AI's Web Access API. Search the web, fetch any URL or send it a request, and map a site's URLs — all returned as clean, LLM-ready Markdown. Connect any MCP-compatible client — VS Code, Cursor, Windsurf, Claude Desktop, and more.

Tools

ToolDescription
web_access_fetchFetch one URL and get clean, LLM-ready Markdown back
web_access_product_helpAsk about String products or services; get one source (two for comparisons), with a shared 4 KiB excerpt budget and source links
web_access_requestSend a POST, PUT or PATCH with a body to a URL
web_access_searchSearch the web: ranked results plus the knowledge panel, AI overview, local pack and other surfaces Google rendered; optional searchCount (1–300) pages Google; searchType searches Google's images, videos, shopping, books, places or forums tab; safeSearch, includeOmittedResults, autocorrect, restrictCountry and verbatim filter it; page, dateRange and sortBy refine a Google search; format is "structured" (JSON, the default and recommended) or "raw" (the Google results page as HTML, one page per call; page only, searchCount is rejected with raw)
web_access_sitemapCrawl a site and map its URLs as an asynchronous job, driven by action
web_access_reportSend one redacted, credit-free failure diagnostic to String support

web_access_fetch, web_access_search, and web_access_product_help are read-only. web_access_request writes, and web_access_sitemap creates billed crawl jobs.

The six-tool shape above is what the hosted server at https://mcp.usestring.ai/v1/mcp serves. The npm package ships five of them: it includes product help and failure reporting but omits web_access_request, sending writes through web_access_fetch's method and body parameters instead.

web_access_sitemap — sitemap crawl jobs

A crawl is a two-phase, asynchronous quote → approve → poll → read job: nothing is crawled or billed until the quote is explicitly approved.

actionWhat it does
submitQuote a crawl (url required; maxPages ≤ 10000 default 10, maxDepth ≤ 100 default 2, pathPrefix, budgetUsd, useSitemap optional). Returns jobId + estimatedCostUsd + estimatedPages, status awaiting_approval.
approveBilling consent — starts the crawl. 402 = insufficient funds; 409 partial_state = retry approve.
statusPoll progress: awaiting_approval → running (pending/processed) → completed | failed | canceled | token_cap_exceeded; partial_state = retry approve. Returns counts only — URLs come from results.
resultsPaginated discovered URLs (limit ≤ 5000 default 1000, offset). Durable after completion; per-URL discoveredUrls is only present for ~1h.
cancelStop a non-terminal job; already-fetched pages stay billed and readable.
listThe account's recent crawl jobs (limit ≤ 100 default 20, offset).

web_access_report — failure diagnostics

Reporting is optional and best-effort. Continue useful recovery first. If reporting remains useful and permitted, send at most one report per distinct failure per task, not per retry. Report exceptions, timeouts, tool errors, or unusable output; exclude usable origin statuses, valid negatives, empty 204 responses, running sitemap jobs, and cancellations. Each reporting attempt has a two-second deadline.

Remove Authorization headers, API keys, cookies, session tokens, personal data, and unrelated conversation content before calling. The server redacts common credential forms again. Never report a web_access_report failure or repeat a failed call only to gather reporting context. Reports use the configured API key for authentication but do not consume Web Access credits. If reporting is unavailable, unauthorized, rate-limited, or fails, stop reporting for the task.

Quick Start

Run with npx

bash
env STRING_AI_API_KEY=your-key npx @usestring/mcp

Install globally

bash
npm install -g @usestring/mcpSTRING_AI_API_KEY=your-key string-ai-mcp

Build from source

bash
git clone https://github.com/usestring/string-ai-mcp.gitcd string-ai-mcpnpm installnpm run buildSTRING_AI_API_KEY=your-key node build/index.js

Environment Variables

VariableRequiredDescription
STRING_AI_API_KEYYesYour String AI API key

Client Configuration

VS Code

Press Ctrl+Shift+P → Preferences: Open User Settings (JSON) and add:

jsonc
{	"inputs": [		{			"type": "promptString",			"id": "stringAiKey",			"description": "String AI API Key",			"password": true		}	],	"servers": {		"string-ai": {			"command": "npx",			"args": ["-y", "@usestring/mcp"],			"env": {				"STRING_AI_API_KEY": "${input:stringAiKey}"			}		}	}}

Or add a .vscode/mcp.json file to share the configuration with your team.

Cursor

Open Settings → Features → MCP Servers → + Add new global MCP server and paste:

json
{  "mcpServers": {    "string-ai": {      "command": "npx",      "args": ["-y", "@usestring/mcp"],      "env": {        "STRING_AI_API_KEY": "YOUR_API_KEY"      }    }  }}

Windsurf

Add to ~/.codeium/windsurf/model_config.json:

json
{  "mcpServers": {    "string-ai": {      "command": "npx",      "args": ["-y", "@usestring/mcp"],      "env": {        "STRING_AI_API_KEY": "YOUR_API_KEY"      }    }  }}

Claude Desktop

Add to your claude_desktop_config.json:

json
{  "mcpServers": {    "string-ai": {      "command": "npx",      "args": ["-y", "@usestring/mcp"],      "env": {        "STRING_AI_API_KEY": "YOUR_API_KEY"      }    }  }}

Testing with the MCP Inspector

The MCP Inspector lets you test your server interactively in a browser:

bash
npx @modelcontextprotocol/inspector node build/index.js

Then open http://127.0.0.1:6274, connect via stdio, and try calling each tool from the UI.

How It Works

┌──────────────────┐   stdio (JSON-RPC)   ┌──────────────────┐   HTTPS   ┌──────────────────┐│  VS Code / Cursor │ ◄──────────────────► │  String AI       │ ────────► │  String AI       ││  Windsurf / Claude│                      │  Web Access MCP  │           │  Web Access API  │└──────────────────┘                       └──────────────────┘           └──────────────────┘
  1. The IDE spawns this server as a child process and communicates over stdio.
  2. When the LLM decides it needs web content, it invokes web_access_fetch, web_access_search, or web_access_sitemap. Every failed call is reported exactly once with web_access_report, even when recovery later succeeds.
  3. This server forwards the request to String AI's Web Access API (using your API key from the environment) and returns the result to the LLM.

About String AI

String AI provides a web access API that returns any page as clean, LLM-ready Markdown. Get your API key at usestring.ai.

License

MIT

Security

Please report security vulnerabilities privately as described in SECURITY.md.

Maintenance and releases

This server may remain unchanged while its tools meet the documented contract. Maintenance includes checking runtime and MCP compatibility, investigating reported issues, and releasing fixes when needed. Commit frequency alone does not establish whether the server works.

Before shipping a change, run npm test and node scripts/check-versions.mjs. The package declares its supported Node.js versions in package.json; CI builds with Node.js 22. Report compatibility problems through GitHub issues.

The publish workflow records each published npm version as a GitHub release, tagged at the source commit recorded in the npm package metadata. Release notes describe the changes. The release job checks npm directly, so a registry publication failure does not hide a version that users can already install. A manual workflow run can record a missing GitHub release for the current published version without republishing the package or changing its version.

For a historical version whose source predates workflow changes, a maintainer may need to create its source tag first: GitHub limits the workflow token's ability to target older workflow history. The release job verifies that an existing tag matches the published package's source before using it.

Source: README.md at commit 8ced0ed

Tools

4

web_access_fetch

Fetch a web page

Fetch a caller-specified HTTP(S) URL and get clean, LLM-ready Markdown back. **Primary use (the common case):** pass only a `url`. The page is fetched with a normal GET and returned as Markdown — no other parameters are needed. ```json { "url": "https://example.com/article" } ``` **Best for:** any URL, especially sites that block automated traffic or render their content client-side (news, docs, blogs, web apps). **Not for:** searching the web when you don't have a URL — use web_access_search instead. **Optional parameters (omit unless you need them):** - `format` — `markdown` (default), `raw` (the destination's verbatim body), or `json` (a `{ statusCode, headers, data }` envelope with the destination's status and headers). - `executeJS` — set true to render JavaScript for SPAs when the content comes back empty. - `actions` — drive a real browser (click, scroll, type, wait) before capturing the page. See below. **To send a direct POST, PUT or PATCH** (with a body), use `web_access_request` — this tool's direct HTTP path only issues GETs. Plenty of those calls are reads: a GraphQL query, a search backend that takes a body, a JSON API that refuses GET. - `headers` — forward custom request headers; not combinable with `executeJS` or `actions`, which run in a browser. - `countryCode` — ISO 3166-1 alpha-2 (e.g. "US") to route through a proxy in that country. - `solveCaptcha` — defaults true; set false to fail fast instead of spending effort solving a challenge. **Returns:** Markdown by default; the verbatim body or a JSON envelope when `format` is set accordingly. --- ## `actions` — driving the page instead of just loading it An `actions` sequence runs in a real browser session and returns the page as it stands after the last step. Use it when the content you need does not exist in the document until something happens to the page: a click past a consent gate, a search form submitted, a "load more" button, a tab or accordion opened, or rows that only render once s

ParametersurlrequiredformatactionsheadersexecuteJScountryCodesolveCaptcha

web_access_request

Send a web request

Send a POST, PUT or PATCH request to any URL, through String's Web Access API. It works like web_access_fetch, but for calls that submit data rather than read a page — a JSON API that only accepts POST, a GraphQL endpoint, a search backend that takes a body. **Use web_access_fetch instead** whenever you only need to read a page. This tool sends a body to the destination rather than reading it, so use it only for a request the user actually asked for. **Usage Example:** ```json { "url": "https://api.example.com/search", "method": "POST", "body": { "q": "widgets" } } ``` **Returns:** The destination's response, in the requested format.

ParametersurlrequiredbodyformatmethodrequiredheaderscountryCodesolveCaptcha

web_access_sitemap

Map a site's URLs

Manage an asynchronous crawl of authorized public pages on one website. Starting from one URL, the crawler follows same-domain links breadth-first and can also seed from the site's /sitemap.xml. Requests must comply with destination policy, robots directives, rate limits, and access controls. Use this tool to discover pages for site audits, authorized retrieval worklists, or coverage checks before fetching individual pages. **Not for:** reading one page's content (use web_access_fetch) or open-ended web queries (use web_access_search). This single tool drives the whole job lifecycle through `action`: **1. `submit` — quote a crawl (nothing is crawled or billed yet).** Requires `url`. Optional: `maxPages` (1–10000, default 10), `maxDepth` (1–100, default 2), `pathPrefix` (only crawl URLs whose path starts with this, e.g. "/docs"), `budgetUsd` (spend ceiling; the crawl stops with status token_cap_exceeded if it would exceed it), `useSitemap` (also seed the site's root /sitemap.xml — one extra billed page, but finds pages links miss). A `maxPages` or `maxDepth` outside its range, 0 included, is rejected rather than replaced by the default — omit the field to get the default. Returns `jobId`, `estimatedPages`, and `estimatedCostUsd` with status `awaiting_approval`. ```json { "action": "submit", "url": "https://example.com", "maxPages": 200, "maxDepth": 3 } ``` **2. `approve` — start the quoted crawl (requires `jobId`).** This is the billing-consent step: pages are billed as they are fetched, capped by the quote/budget. Before approving a non-trivial `estimatedCostUsd`, confirm the spend with your user. Fails with status 402 if the account balance cannot cover the quote; a 409 partial_state error means an earlier approve was interrupted — just call approve again. **3. `status` — poll progress (requires `jobId`).** Statuses: `awaiting_approval` → `running` → terminal `completed` | `failed` | `canceled` | `token_cap_exceeded` (budget hit before maxPages; collected resu

ParametersurljobIdlimitactionrequiredoffsetmaxDepthmaxPagesbudgetUsdpathPrefixuseSitemap

Version history

2
  1. v1.3.8LatestNov 3, 2026
  2. v1.2.2Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts