Scout MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SCOUT_DB | No | The memory database path; share the path to share what is learned. | ~/.local/share/scout-mcp/scout.db |
| CRAWL4AI_URL | No | Self-hosted crawl4ai URL to add a crawl4ai reader. | |
| FIRECRAWL_URL | No | Self-hosted Firecrawl URL to add a Firecrawl reader. | |
| CRAWL4AI_TOKEN | No | Token for the crawl4ai reader. | |
| SCOUT_USER_AGENT | No | Your own bot name and contact; browser-like values are rejected. | ScoutMCP/<version> (+repo url) |
| FIRECRAWL_API_KEY | No | API key for the Firecrawl reader. | |
| SCOUT_MIN_INTERVAL | No | Minimum seconds between requests to one host. | 1.0 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| scoutC | Scout a url: reach the page (as markdown), map the site's url patterns, find its listing page, and return what
Scout has learned about the host. |
| reachA | Reach one page and judge whether it is good information. Tries the host's learned readers winner-first, then
scored url rewrites and detail sub-pages. Returns ok, markdown (excerpt unless full=true), the trail |
| site_mapA | A site's real urls (robots.txt sitemaps, a polite link walk, the catalogue's root) with their url patterns.
|
| familiesA | Which of a page's link families lead to good pages, and how many. Each family (links whose paths differ only in
their numbers, like /chapter/1/ and /chapter/14A/) is sampled across its spread, the samples vote on what the family
leads to (an index of more links, or pages), indexes are walked one level deeper, and families are ranked by yield
through every level. |
| holdA | Keep every agent sharing Scout's memory off a host, or let them back. Use it when a site blocked you and a person has asked for the block to be lifted: reason says what was asked and when. min_interval (seconds) slows Scout's pace on that host for good. Scout holds a host by itself after a block page or a 429, and probes once when that ends. |
| enrollA | Official routes and the enrollments they need: the checklist for whoever updates Scout.
action=list: open requests, each with a |
| movesA | The moves register: rewrite rules Scout tries where its built-in moves fail, each scored (wins+1)/(tries+2) on real reaches and retired after 5 straight losses. action=list [kind, host] | propose kind scope spec [note] | retire id. kinds: url_rewrite {pattern, repl} (regex on the full url; repl is literal text plus \1 groups) · locale_prefix {prefix} and listing_root {path}, which compose into listing paths (/en-us + /products) and are ranked, never retired · listing_path {path} (a whole path) · detail_suffix {suffix}. scope: '*', a domain ('example.com' covers www.example.com) or a host regex. Propose only what you saw work. |
| memoryB | What Scout has learned about a host: winning reader, reader order, routes (listing, detail_suffix, patterns), the moves that apply, recent failures. No host: recent failures everywhere and the whole register. |
| compileA | Compile what you worked out about a site into a recipe a small model can run in one call. Scout runs it on every example and saves it only if all pass; the reply carries the one-line card for the small model. name: '/'. input_name: what the caller supplies ('model', 'sku'; empty for none). examples: 2+ inputs. steps, run in order, each a one-key object: {"input": [[regex, repl], ...], "lower": true} rewrite the input (slug rules) {"map": "https://site", "filter": "/product/{input}$"} the site's own urls; first match becomes {url} {"reach": "https://site/p/{input}" | "{url}", "want": regex} read a page {"find": regex} first link on the page matching (url or text) becomes {url} {"links": "/chapter//"} a link family from families(); last step = all its links, else the first is {url} {"jsonld": {"price": "offers.price", "sku": "sku"}, "type": "Product"} from the page's schema.org data {"extract": {"field": "regex with one group", "optional?": "..."}} every field must be found, except a name ending in ? Prefer map over a guessed url template: sites are inconsistent about case and slugs. |
| runB | Run a compiled recipe. Reply with the RESULT line. |
| cacheA | Cached mode, for pulling a lot from one site: list it once (filter narrows the urls) and download every page once
into Scout's copy, in the background, at the host's pace. source='archive' downloads from the Wayback Machine with no
request to the site; 'live' from the site; 'auto' live, with the archive where the site walls Scout. The copy is kept
|
| recipesC | The compiled recipes (optionally for one host): what each takes, its score, whether its last run failed, and the one-line card a small model runs. |
| lawsA | US state codes read whole from each legislature's own site. No state: the list of states Scout can read, with each
one's citation form and source. A state (e.g. 'us-tx'): its first |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 13 tools
The umbrella `scout` tool overlaps with `reach`, `site_map`, and `memory`, since it reaches a page, maps site patterns, and returns learned host data. Descriptions help distinguish the targeted tools, but an agent could still misselect `scout` when a more specific tool would suffice.
All names are lowercase and mostly single words, with one snake_case compound (`site_map`). However, the set mixes verbs (`scout`, `reach`, `compile`, `run`) and nouns (`memory`, `moves`, `recipes`, `families`), so there is no predictable verb_noun pattern.
With 13 tools, the count sits comfortably in the ideal 3–15 range for a complex web-scouting server. Each tool appears to cover a distinct phase of discovery, reading, rule management, caching, or enrollment.
The surface covers discovery, page reading, site mapping, link families, memory, rewrite rules, recipe compilation/execution, caching, blocking, enrollment, and legal codes. Minor lifecycle gaps exist, such as no explicit recipe deletion or cache clearing, but agents can work around them.