Skip to main content
Glama

String Web Access

Server Details

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

Ownership verified
Status
Healthy
Uptime
100.0% over the last 24 hours
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
usestring/string-ai-mcp
GitHub Stars
7
Server Listing
String AI Web Access MCP Server
ChatGPT
–
Claude
–

TDQS

A4.7/5.0

Scored across 4 tools

Disambiguation4/5

The four tools mostly have distinct purposes: search for queries, fetch for reading URLs, request for sending bodies, and sitemap for crawling. Fetch and request could be confused since both hit a URL, but the descriptions explicitly separate reading via GET from submitting via POST/PUT/PATCH.

Naming Consistency5/5

All tool names use the same predictable `web_access_<action>` pattern: fetch, request, search, sitemap. The convention is consistent across the entire set.

Tool Count5/5

Four tools is well-scoped for a web access server: query, read, submit, and crawl. Each tool earns its place without redundant surface area.

Completeness4/5

The set covers the core web-access lifecycle: search, fetch, non-GET requests, and asynchronous crawling. There is a minor gap around other HTTP methods such as DELETE, and no dedicated structured extraction tool beyond fetch formats, but core workflows are covered.

Available Tools

4 tools
web_access_fetchFetch a web pageA
Destructive
Inspect

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.

{ "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 scrolled into view. Actions can modify destination data or submit a form, so clients should treat any call to this tool as potentially destructive.

Escalate in this order — each step takes longer than the last, and steps 2 and 3 bill at the browser rate:

  1. Plain url — always try this first.

  2. executeJS: true — the page renders client-side but needs no interaction.

  3. actions — the content requires interaction. Takes tens of seconds and holds a browser session.

If the data is still absent after all three, it is likely never in the HTML at all — look for the JSON API the page itself calls and fetch that endpoint directly, which is faster and returns exact values.

Steps (max 50 per request; at most one screenshot):

  • {"type": "wait", "selector": ".price", "timeout": 20000} — wait until the selector appears, then continue immediately. Prefer this over a fixed pause.

  • {"type": "wait", "milliseconds": 3000} — fixed pause. Max 30000ms, as is timeout above.

  • {"type": "click", "selector": "#accept", "all": false} — all: true clicks every match.

  • {"type": "write", "text": "..."} — types into the focused element; click it first.

  • {"type": "press", "key": "Enter"}

  • {"type": "scroll", "direction": "down", "amount": 1000, "selector": "..."} — selector scrolls that element instead of the page.

  • {"type": "hover", "selector": "..."}

  • {"type": "selectOption", "selector": "select#size", "value": "L"} — value may be an array.

  • {"type": "navigate", "url": "https://..."} — go to another page mid-session, keeping cookies and state.

  • {"type": "screenshot", "full_page": true, "quality": 80}

The session opens on url before your first step, so never begin with a navigate to that same URL.

Examples

Dismiss a cookie banner, then read the page:

{ "url": "https://example.com/pricing", "actions": [
  { "type": "click", "selector": "#accept-cookies" },
  { "type": "wait", "selector": "main .plan", "timeout": 15000 }
] }

Run a search the site offers no URL for:

{ "url": "https://example.com", "actions": [
  { "type": "click", "selector": "input[name=q]" },
  { "type": "write", "text": "standing desk" },
  { "type": "press", "key": "Enter" },
  { "type": "wait", "selector": ".results .item", "timeout": 20000 }
] }

Fill in rows that render only as they scroll into view:

{ "url": "https://example.com/listings", "actions": [
  { "type": "wait", "selector": ".card", "timeout": 20000 },
  { "type": "scroll", "direction": "down" },
  { "type": "wait", "milliseconds": 1500 },
  { "type": "scroll", "direction": "down" },
  { "type": "wait", "milliseconds": 1500 }
] }

Returns with actions: a JSON object — data (the final page, Markdown by default), finalUrl, statusCode, and screenshot when the sequence took one. If a step fails, the call still succeeds and returns error plus failedActionIndex, a 0-based index into your actions array, with data holding the page as it stood at that point — read it to see what the page actually showed, then fix that step's selector.

Not combinable with headers or format: "raw"; a browser session is always a GET.

Requests must comply with destination policy, robots directives, rate limits, and access controls. Challenge handling is subject to the caller's String account and organization policy.

Inputs: url (required), format, actions, headers, +3 more. Returns: body, error, headers, finalUrl, +3 more

web_access_requestSend a web requestA
Destructive
Inspect

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:

{
  "url": "https://api.example.com/search",
  "method": "POST",
  "body": { "q": "widgets" }
}

Returns: The destination's response, in the requested format.

Inputs: url (required), method (required), body, format, +3 more. Returns: body, error, headers, finalUrl, +3 more

web_access_sitemapMap a site's URLsA
Destructive
Inspect

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.

{ "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 results are still readable). While running it returns pending and processed counts; a partial_state status means an interrupted approve — call approve again to repair it. Status never includes the URL list — page that with results. Poll every few seconds for small crawls; give hundreds-of-pages crawls tens of seconds between polls.

4. results — page through discovered URLs (requires jobId). Optional limit (1–5000, default 1000) and offset (≥ 0); out-of-range values are rejected. total tells you when to stop paging. Each entry has url, statusCode (0 = discovered but not fetched), depth, parentUrl, isSitemap, sourceType, and an error when that page failed. discoveredUrls (links found on the page) is only present for ~1h after completion; afterwards results come from durable storage which omits it — everything else stays available.

5. cancel — stop a running or pending job (requires jobId). Already-terminal jobs return a 409 error. Pages already fetched stay billed and readable via results.

6. list — recent crawl jobs for the account. Optional limit (1–100, default 20) and offset (≥ 0); out-of-range values are rejected. Use it to find a jobId you lost or check for an equivalent recent crawl before paying for a new one.

Typical workflow: submit → check estimatedCostUsd → approve → poll status until terminal → results (paged). A 404 on any jobId action means the job doesn't exist or belongs to another account; a 403 on submit means the target domain is blocked for this account (contact support@usestring.ai).

Returns: the JSON envelope for the chosen action (quote, status, URL page, job list) alongside a one-line summary.

Inputs: action (required), url, jobId, limit, +6 more. Returns: jobs, urls, jobId, total, +8 more

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      A
      quality
      C
      maintenance
      Enables any MCP-compatible AI agent to search the live web and fetch pages as clean Markdown, including batch fetching with rate limiting, retries, and context-safe truncation.
      3
      MIT
    • A
      license
      Not graded
      quality
      A
      maintenance
      Fetches webpages and converts them into clean, token-efficient Markdown, optionally crawling multiple linked pages while respecting robots.txt and caching results for AI agents and LLM pipelines.
      MIT
    • A
      license
      A
      quality
      C
      maintenance
      Web search and any page as LLM-ready Markdown for AI agents, pruned to the passages relevant to the query, plus research, crawl and site maps. Free keyless tier.
      11
      152 npm
      2
      MIT
    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.