skills
Muse accesses web pages through String Web Access
How to add it to Muse
Copy the skill's SKILL.md (from the copy box or the source) and paste it into a Muse chat, asking Muse to follow it. This lasts for that conversation; saving skills isn't documented by Meta. In Muse Code, install it with `muse skills install` per the README.
New to Muse? Join at muse.ai/join and use invite code Referral: using this code gives the site owner credits.
Server the source names: https://mcp.usestring.ai/v1/mcp · sign-in: api-key
There's no official Muse install link, so musebot never makes one up. Skill For Muse Code (developer terminal).
Skill text to copy
---
name: string-fetch
description: |
Fetch any web page and get clean, LLM-ready Markdown back, via String Web Access. Use when
the user gives you a URL, asks you to read, open, summarize or extract from a page, or when
a search result needs its full content. Also supports custom headers, country-specific
proxies and driving a real browser through clicks and scrolls before capture. Reads only —
to send a POST, PUT or PATCH, use string-request.
---
# String fetch
One URL in, clean Markdown out.
## When to use
You have a URL. This is step two of the
[escalation rule](../string-web-access/SKILL.md): search → **fetch** → browser.
## Call it
The common case is one parameter:
```json
{ "url": "https://example.com/pricing" }
```
Everything below is optional and should stay off unless a plain fetch has actually failed.
## Parameters
| Parameter | Use it when |
| --- | --- |
| `format` | `markdown` (default, for reading), `raw` (verbatim body), `json` (envelope with `statusCode`, `headers`, `data`) |
| `executeJS` | The body comes back empty or as a loading shell — the page is client-rendered. Cannot be combined with `headers` |
| `actions` | The content only exists after a click, scroll or form submit — see [browser actions](../string-web-access/references/browser-actions.md) |
| `headers` | The site requires a specific header. Max 50. Not supported with `executeJS` |
| `countryCode` | The page is geo-gated or serves regional content. ISO 3166-1 alpha-2, e.g. `"US"` |
| `solveCaptcha` | Defaults true. Set false to fail fast instead of waiting on a challenge |
## Examples
```json
// Read a page
{ "url": "https://news.ycombinator.com" }
// A client-rendered app that returns an empty shell
{ "url": "https://app.example.com/dashboard", "executeJS": true }
// Regional pricing
{ "url": "https://example.com/pricing", "countryCode": "DE" }
// You need the status code and headers, not just the body
{ "url": "https://example.com/api/health", "format": "json" }
```
This tool only issues a GET. A JSON API that wants a POST belongs to
[string-request](../string-request/SKILL.md).
## Choosing a format
`markdown` strips navigation, ads and boilerplate, which is what you want for reading and
what keeps the response small. Reach for `raw` only when you need the exact bytes — parsing
embedded JSON out of a `<script>` tag, checking a meta tag, diffing markup. Reach for `json`
when the destination's status code or headers are part of the answer.
## When it comes back wrong
An empty body usually means client-rendered content: set `executeJS: true`. Markup that says
"verify you are human" or "access denied" means you got a block page, not the page — retry
once, then vary `countryCode`. Content that only appears after interaction needs `actions`.
Never wrap this in your own retry loop. An identical repeat re-rolls the same outcome.
Change a parameter instead.
skills/string-fetch/SKILL.md from the repo, MIT licence. Read it before pasting. Muse asks before it acts.
What the source says
Agent Skills for String Web Access — search the web, fetch any URL and map a site from Claude Code, Muse Code, Cursor and any skills-compatible agent.
Quoted from the source, by usestring. Licence: MIT.
Where we found it
- GitHub repository ↗ 2026-10-05