{"name":"Extcord","version":"0.4.4","what":"A utility gateway built for AI agents. Fetched pages and intermediate results stay on this server as handles; you see small previews and follow links, then chain operations into pipelines, so raw data never has to pass through your context window.","who":"Agents are first-class users. Humans use exactly the same API.","start":["GET /ops: list all operations; filter with ?q=<words> or ?accepts=<type>","GET /ops/{id}: an op's contract: args schema, behavior, worked examples","POST /ops/{id} {input, args}: run one op; returns a handle","POST /pipelines {steps, dry_run}: chain ops in one request; refer to earlier steps as $0, $1 or by name","GET /recipes: saved pipelines you can run in one call; POST /recipes to save your own","MCP: connect an MCP client to /mcp (streamable HTTP) for the same capabilities as six tools"],"quickstart":{"request":"POST /pipelines","body":{"steps":[{"op":"fetch","args":{"url":"https://example.com"},"as":"page"},{"op":"html_to_text","input":"$page","as":"text"},{"op":"fit","input":"$text","args":{"max_tokens":500}}]},"tip":"Add \"dry_run\": true first to check the plan, cost and side effects without running anything."},"good_to_know":["Don't do arithmetic, date math or time zones in your head: calc, now, date_info, date_add and date_diff are exact and free.","Check JSON before you send it anywhere with validate; fill text from data with template."],"concepts":{"handle":"A server-side value (id like h_3f9a1c2b7e) with type, size, estimated tokens, preview, sha256 and provenance. Pass it as 'input' to any op. Expires after 60 minutes.","inline":"Results at or under inline_max_tokens (default 300) include 'value' directly; larger ones include a 'preview'. Read the full value with GET /h/{id}/value (paged).","refs":"In pipelines, \"$0\" is step 0's result, \"$page\" a step named with \"as\", and paths work: \"$1[0]\", \"$2.items[*].name\". Refs also work inside args, and inside calc's vars. Write a literal string that starts with $ (like a price) as $$20.","types":["text","html","json","list","table","number","boolean"],"contracts":"Every op declares deterministic, side_effects (none | reads_network), idempotent and cost. Every op's examples are executed by the test suite.","provenance":"Every handle records the op, args and inputs that made it, and for fetched data the source URL, status and time. GET /h/{id}/provenance walks the chain."},"errors":"Always {\"error\": {code, detail, suggestion, links}}. The suggestion usually names the exact fix.","policy":{"privacy_and_use":"/privacy","contact":"extcord@proton.me"},"auth":{"required":false,"note":"All ops are free during the preview. Wallet sign-in and metered paid ops are planned."},"limits":{"handle_ttl_s":3600,"pipeline_max_steps":50,"op_steps_per_minute":1200,"fetch_per_minute":60,"fetch_max_bytes":10000000,"request_max_bytes":10000000,"recipe_saves_per_hour":10,"regex_budget_s":2,"note":"Limits are per client IP. Going over returns 429 with retry_after_s."},"links":[{"rel":"ops","href":"/ops"},{"rel":"pipelines","href":"/pipelines","method":"POST"},{"rel":"recipes","href":"/recipes"},{"rel":"types","href":"/types"},{"rel":"mcp","href":"/mcp","transport":"streamable-http"},{"rel":"openapi","href":"/openapi.json"},{"rel":"llms_txt","href":"/llms.txt"}]}