Show HN: I built a scraping engine where the LLM writes configs, not code A developer released Fitter, an open-source scraping engine that converts any website or API into structured JSON using declarative YAML/JSON configs instead of code, enabling LLMs like Claude Code to author and run scraping pipelines locally. The tool supports HTTP, headless browser, and file connectors with JSON, XML, HTML, and XPath parsing, and is available as a static binary with MCP server integration. Fitter turns any website or API into structured JSON — declaratively. One JSON/YAML config describes where the data lives HTTP request, headless browser, file, static value and what to extract JSON paths, CSS selectors, XPath . No code, no brittle scraping scripts. Because configs are plain data, LLMs can author them . The built-in MCP server how-to-use-fitter mcp lets Claude Code, Claude Desktop, or any MCP client write and run scraping pipelines on your machine, on demand: "Get the top 5 HackerNews stories with titles and scores"→ the model authors a fitter config, validates it, runs it locally, and gets clean JSON back. One engine, five ways to use it: 🤖 Fitter MCP | | Fitter Agent Fitter CLI Fitter Lib Fitter Why fitter for AI agents? Declarative & auditable — the agent produces a config you can read, save and re-run, not throwaway code Local-first — all fetching happens on your machine; no third-party scraping API, no keys, no per-request billing Batteries included — HTTP client, headless browser Playwright/Chromium/Docker , JSON/HTML/XML/XPath parsing, pagination, cached references, host rate-limits — in a single static binary Reusable — what the agent authored today becomes tomorrow's cron job or service config Server - parsing response from some API's or http request usage of http.Client Browser - emulate real browser using chromium + docker + playwright/cypress and get DOM information Static - parsing static string as data JSON - parsing JSON to get specific information XML - parsing xml tree to get specific information HTML - parsing dom tree to get specific information XPath - parsing dom tree to get specific information but by xpath go get github.com/PxyUp/fitter package main import "fmt" "github.com/PxyUp/fitter/lib" "github.com/PxyUp/fitter/pkg/config" "log" "net/http" func main { res, err := lib.Parse &config.Item{ ConnectorConfig: &config.ConnectorConfig{ ResponseType: config.Json, Url: "https://random-data-api.com/api/appliance/random appliance", ServerConfig: &config.ServerConnectorConfig{ Method: http.MethodGet, }, }, Model: &config.Model{ ObjectConfig: &config.ObjectConfig{ Fields: map string config.Field{ "my id": { BaseField: &config.BaseField{ Type: config.Int, Path: "id", }, }, "generated id": { BaseField: &config.BaseField{ Generated: &config.GeneratedFieldConfig{ UUID: &config.UUIDGeneratedFieldConfig{}, }, }, }, "generated array": { ArrayConfig: &config.ArrayConfig{ RootPath: "@this|@keys", ItemConfig: &config.ObjectConfig{ Field: &config.BaseField{ Type: config.String, }, }, }, }, }, }, }, }, nil, nil, nil, nil if err = nil { log.Fatal err } fmt.Println res.ToJson } Output: { "generated array": "id","uid","brand","equipment" , "my id": 6000, "generated id": "26b08b73-2f2e-444d-bcf2-dac77ac3130e" } Download latest version from the release page https://github.com/PxyUp/fitter/releases or locally: go run cmd/fitter/main.go --path=./examples/config api.json --path - string "" - path for the configuration of the Fitter --url - string "" - url for the configuration of the Fitter --verbose - bool false - enable logging --plugins - string "" - path for plugins for Fitter https://github.com/PxyUp/fitter/blob/master/examples/plugin/README.md --log-level - enum "info", "error", "debug", "fatal" - set log level only if verbose set to true Download latest version from the release page https://github.com/PxyUp/fitter/releases or locally: go run cmd/cli/main.go --path=./examples/cli/config cli.json --path - string "" - path for the configuration of the Fitter CLI --url - string "" - url for the configuration of the Fitter CLI --copy - bool false - copy information into clipboard --pretty - bool true - make readable result also affect on copy --verbose - bool false - enable logging --omit-error-pretty - bool false - Provide pure value if pretty is invalid --plugins - string "" - path for plugins for Fitter https://github.com/PxyUp/fitter/blob/master/examples/plugin/README.md --log-level - enum "info", "error", "debug", "fatal" - set log level only if verbose set to true --input - string "" - specify input value for formatting placeholder-list . Examples: --input=\""124"\" --input=124 --input='{"test": 5}' ./fitter cli ${VERSION} --path=./examples/cli/config cli.json --copy=true Examples: Server version HackerNews + Quotes + Guardian News https://github.com/PxyUp/fitter/blob/master/examples/cli/config cli.json - using API + HTML + XPath parsing Chromium version Guardian News + Quotes https://github.com/PxyUp/fitter/blob/master/examples/cli/config browser.json - using HTML parsing + browser emulation Docker version Docker version: Guardian News + Quotes https://github.com/PxyUp/fitter/blob/master/examples/cli/config docker.json - using HTML parsing + browser from Docker image Playwright version Playwright version: Guardian News + Quotes https://github.com/PxyUp/fitter/blob/master/examples/cli/config playwright.json - using HTML parsing + browser from Playwright framework Playwright version Playwright version: England Cities + Weather https://github.com/PxyUp/fitter/blob/master/examples/cli/config weather.json - using HTML + XPath parsing + browser from Playwright framework JSON version Generate pagination https://github.com/PxyUp/fitter/blob/master/examples/cli/config static connector.json - using static connector for generate pagination array Server version Get current time https://github.com/PxyUp/fitter/blob/master/examples/cli/config current time.json - get time from url and format it Fitter Agent is an AI-powered CLI that uses Claude to convert natural language requests into Fitter configurations and execute them automatically. Download latest version from the release page https://github.com/PxyUp/fitter/releases or locally: export ANTHROPIC API KEY=