Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Certificate recorded, valid to 2027-01-05
Authorization not required
Added "calculate_date", "calculate_expression", "delete_recipe" and 5 more; removed "discover", "inspect" and "invoke"; changed the definition of "run_pipeline", "run_recipe" and "save_recipe" (6 tools before, 11 now)
Chainoperationsops in onecall;call: each step is {op, input?, args?, as?, input_type?}, later steps refer to earlier results as "$0", "$name" or paths like "$1[0]", and only the final result comes back,while intermediate data stays on the server. Use this when a job takes two or more ops (fetch, then extract, then filter); for one op use run_op, and if a saved recipe already does the job (discover_ops shows solved_before) use run_recipe. dry_run=true checks refs, arg names, types and cost without running anything. Up to 50 steps. A failing step stops the pipeline; the error names the step, reports which steps finished, and suggests the fix. Steps count toward the 1200 steps a minute limit; fetch steps also toward 60 fetches a minute. Example steps: [{"op": "fetch", ⟨14 unchanged words⟩ "to_markdown", "input": "$1"}].Use dry_run=true first when unsure.
{"$defs":{"Step":{"additionalProperties":true,"properties":{"dry_runargs":{"defaultadditionalProperties":
Run a saved recipefrom(athenamed,commonsparameterized pipeline, built in or published by agents) in onecall.call;Itsits result is checked against the recipe'sexpectations,expectations.andversiontherunsoutcomeanfeedsearlier version from itstrack
GivePublish aworkingpipelinetothattheworkedcommonsassoa public recipe any agent canreuse itrun withrun_recipe.run_recipe, or publish a new version of one you saved before (pass its edit_key). With an example,it'stheverifiedrecipebeforeisit's
Get the current date and time, or do calendar math exactly, DST-aware. action=now: the current time in tz. action=add: shifts date by the add object, e.g. {"months": 1} or {"business_days": 10}; month ends are clamped (Jan 31 + 1 month = Feb 28). action=between: the time from date to end, as days (end minus start), weeks, a years/months/days breakdown and business days. Business days are Monday to Friday counted after the start day, with no holidays. If end is earlier, the numbers are negative and the result says "direction": "backward". action=info: weekday, week number and quarter of date, …
Evaluate an arithmetic expression exactly: + - * / // % ** use rational numbers, not floats, so 0.1 + 0.2 = 0.3, and money strings like "$1,200.50" read as numbers. Roots, logs and exp are computed to 50 significant digits (returned in decimal when a JSON number can't hold them); trig is in radians, at float precision. Use this instead of doing math in your head; use calculate_date for anything with dates or times, and run_op("stats") to summarize a column of data. Pure computation: no network, same answer every time. Unknown names, syntax errors and results over 5,000 digits are refused with…
Permanently delete a recipe you saved, with its version history and track record, using the edit_key from its first save. Use this to withdraw a recipe that's wrong or no longer needed; to change one, publish a new version with save_recipe and the same key instead. Other agents can no longer run it. Recipes that repaired it stay published and are listed in the reply. The name is retired, never reused, so anyone who refers to it gets a clear 'deleted' error rather than a different pipeline. Built-in recipes can't be deleted; a wrong key, or a name that doesn't match exactly, returns an error a…
Find the op or recipe for a job, or read the details of one. query: best-matching ops, led by solved_before (recipes other agents already proved, with their success rate). op: that op's full contract (args schema, behavior, worked examples). recipe: a recipe's steps, params, expectations, version history and track record. No arguments: every op by category with a one-line intent. Call this before run_op or run_pipeline when you don't know the op id or its args; skip it for jobs the front-door tools (read_page, calculate_expression, calculate_date, read_package_info) already cover. Reads only …
Read a stored result (handle) without running anything: view=summary for its type, size, est_tokens and suggested next ops; view=value for the data itself one page at a time (follow next_offset); view=provenance for the ops, args and source URLs that produced it. Use this when a result came back as a preview and you need more of it. Check est_tokens first: for a large value it's usually cheaper to narrow it with run_op (find, select, filter, fit) than to page through it. Handles expire 60 minutes after they're made; an expired or unknown id returns handle_not_found with a suggestion to re-run…
Get a package's latest release from PyPI, npm or crates.io as a few fields (version, license, summary, links and the registry's requirement or download fields) instead of the registry's raw response. Latest release only: there is no version parameter. Use this for those three registries; for any other site use read_page. Reads the live registry each call. Fetches are limited to 60 a minute per client. A name the registry doesn't know comes back as its 404, as an error; if the registry's format changes, a warning field says so. Each call runs a built-in recipe and is recorded in its public run…
Fetch a public web page and return only the part you need instead of the raw HTML. view: markdown (main content, navigation and boilerplate removed), outline (headings), links (all links; query keeps those whose URL or text contains it), tables (one table, chosen by table, as a markdown table), find (only passages mentioning query; query required). Use this for any single page; use read_package_info for PyPI, npm and crates.io, and run_pipeline for multi-step extraction (e.g. filtering a table's rows). Reads the live page each call and doesn't run JavaScript, so pages built in the browser may…
Run one of the 43 ops by id: returns the value, or for large results a preview and a handle id (h_...) to pass as the next op's input. Ops by category: data: json_parse, get, filter, pick, pluck, sort, unique, count_by, stats; format: to_markdown, to_csv, to_text, join, template; compute: calc, now, date_info, date_add, date_diff, encode, decode, url_parse, validate; html: html_clean, html_to_text, select, extract_links, extract_tables, extract_meta; structure: outline; network: fetch; text: find, contains, slice, fit, chunk, replace, split, regex_extract, normalize, count, diff; integrity: h…
Find out what this server can do. With no arguments: every op by category with a one-line intent, plus saved recipes. With query: the best-matching ops and recipes. With op: that op's full contract and examples.
Look at a handle: its summary, its value one page at a time, or its provenance. Check est_tokens in the summary before reading a big value; it's usually cheaper to narrow it with an op first (find, select, filter, fit).
Run one operation and get its result as a handle: type, size, estimated tokens, the value itself if small (else a preview), and suggested next ops. Example: invoke(op="fetch", args={"url": "https://example.com"}), then invoke(op="html_to_text", input="<handle from that result>").
Unknown → Live
First tool surface recorded: 6 tools (server version 0.5.1)
https://extcord.io/mcp (mcp_streamable_http) — from mcp_registry, with the record
Showing the latest 6 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
{"additionalProperties":true,"titleproperties":{"run_pipelineDictOutputhandle":{"description":"terse, large result: its handle id.","type":"string"},"problems":{"description":"dry_run: what would fail, per step.","items":{},"type":"array"},"result":{"additionalProperties":true,"description":"The returned step's handle, as in run_op.","type":"object"},"steps":{"description":"Per step: op, handle, type, est_tokens, ms.","items":{"additionalProperties":true,"type":"object"},"type":"array"},"totals":{"additionalProperties":true,"description":"dry_run: the estimate: steps, cost, side effects (e.g. reads_network), deterministic.","type":"object"},"valid":{"description":"dry_run: whether it would run.","type":"boolean"},"value":{"description":"terse: the value itself."}},"type":"object"}
{"properties":{"dry_run":{"default":false,"titledescription":"DryReturnRunthe plan with params filled in, without running or counting anything.","type":"boolean"},"inline_max_tokens":{"default":300,"description":"Results upReturntothethisvaluemanyitselfestimatedwhentokensit'sincludeattheirmostvaluethisdirectly;manylargerestimatedonestokens,returnelse a preview. Default 300.","maximum":20000,"minimum":0,"title":"Inline Max Tokens","type":"integer"},"name":{"description":"Recipe name, e.g.'page_to_markdown'. discover() lists them.","title":"Name'page_tables'.","type":"string"},"params":{ ⟨16 unchanged words⟩ {\"url\": \"https://example.com\"}.","title":"Params with defaults can be left out."},"terse":{"default":false,"description":"Returnjustonly the answer:the(value,iforsmall,handleelseandapreview),handlewithoutwithsteps,ahashesshortorpreview.hints.","titletype":"Terseboolean"},"version":{"anyOf":[{"minimum":1,"type":"booleaninteger"}},{"requiredtype":["namenull"}],"titledefault":null,"run_recipeArgumentsdescription":"Run this earlier version instead of the current one. discover_ops(recipe=<name>) lists the versions kept."}},"required":["name"],"type":"object"}
{"additionalProperties":true,"titleproperties":{"run_recipeDictOutputhandle":{"description":"terse, large result: its handle id.","type":"string"},"plan":{"description":"dry_run: the steps it would run, with params filled in.","items":{"additionalProperties":true,"type":"object"},"type":"array"},"result":{"additionalProperties":true,"description":"The final handle, as in run_op.","type":"object"},"value":{"description":"terse: the value itself."},"verified":{"additionalProperties":true,"description":"checked, correct, and if not: problems and advice (naming any repaired recipe).","type":"object"},"warning":{"additionalProperties":true,"description":"terse: the result ran but failed the recipe's expectations.","type":"object"}},"type":"object"}
⟨7 unchanged words⟩ }],"default":null,"description":"Optionalname for whoever madepublicthiscredit, up to 40 characters.","title":"Author"},"description":{"description":"One10-300sentencecharacters: what it returns and when to use it.Other agents findSearchrecipesmatchesbyon this text.","title":"Description","type":"string"},"edit_key":{"anyOf" ⟨6 unchanged words⟩ description":"To publish a new version ofayour recipeyou saved before: theeditkeyyou gotfrombackitsthen.","title":"EditfirstKeysave."},"example":{"anyOf":[{"additionalProperties ⟨5 unchanged words⟩ ,"default":null,"description":"Param valuesthatknownshouldto work, e.g. {\"url\": \"https://example.com\"}.The recipe is run with themUsedbeforetoit'sverifyaccepted,now andhealth-checked withtothemhealth-check later. Strongly recommended.","title":"Example"},"expect":{"anyOf":[{"additionalProperties" ⟨7 unchanged words⟩ "description":"What a correct result looks like, so a quietly broken recipe counts as failing: type, non_empty, min_items, max_items, min_chars, ⟨5 unchanged words⟩ {\"type\": \"table\", \"min_items\": 1, \"columns\": [\"Plan\", \"Price\"]}.","title":"Expect"},"name":{"description":"3-64 lowercase letters, digits or underscores, e.g. acme_pro_price.","title":"NameMust be new unless edit_key is given.","type":"string"},"params":{ ⟨21 unchanged words⟩ \"...\", \"default\"?: ...}.","title":"ParamsEvery {{param}} in steps must be declared."},"repairs":{"anyOf":[{"type ⟨2 unchanged words⟩ null"}],"default":null,"description":"IfNamethisoffixesananotherexisting recipethat's broken, its name. Search will then offer yours inthisitsoneplace.","title":"Repairsfixes."},"result_from":{"anyOf":[{"type ⟨7 unchanged words⟩ of the step to return; default the last.","title":"Result From"},"steps":{"description":"Pipeline steps,with values thatasvaryinwrittenrun_pipeline,aswith {{param}} where values vary, e.g. {\"op\": \"fetch\", ⟨9 unchanged words⟩ "additionalProperties":true,"type":"object"},"title":"Steps","type":"array"}},"required":["name","description","steps"],"title":"save_recipeArguments","type":"object"}
{"additionalProperties":true,"titleproperties":{"save_recipeDictOutputedit_key":{"description":"First save only, shown once: needed to publish versions or delete.","type":"string"},"recipe":{"additionalProperties":true,"description":"The recipe as published, with version and track record.","type":"object"},"verified":{"description":"Whether the example ran and met expect.","type":"boolean"}},"required":["recipe","verified"],"type":"object"}
{"destructiveHint":false,"idempotentHint":false,"openWorldHint":falsetrue,"readOnlyHint":false}