Extcord
Agent utilities: read big pages without filling context, exact math, dates, parsing. Free.
Sollte ich dies verwenden
Qualität und Sicherheit
Befunde (3)
- HIGH
- MEDIUMin invoke
- MEDIUMin run_pipeline
Basierend auf einer automatisierten Analyse der Tool-Definitionen und der Einhaltung des Protokolls.
Kontextkosten
Dies ist die ungefähre Anzahl der Tokens, die jedes Mal verbraucht werden, wenn die Tools des Servers in den Kontext eines Modells geladen werden. Höhere Werte verringern die Aufmerksamkeit, die für andere Aufgaben verfügbar ist.
Installieren
Installation mit einem Klick
Fügen Sie dies Ihrer Datei `claude_desktop_config.json` hinzu:
{
"mcpServers": {
"extcord": {
"url": "https://extcord.io/mcp"
}
}
}Remote-Endpunkte
https://extcord.io/mcpstreamable-httpWas es kann
Tool-Inventar
Tools (6)
🟢discover(query, op, accepts)
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.
Eingabe-Schema
{
"type": "object",
"properties": {
"query": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Words describing what you want to do, e.g. 'html table to rows' or 'days between dates'.",
"title": "Query"
},
"op": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "An op id to get its full contract: args schema, behavior, worked examples.",
"title": "Op"
},
"accepts": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Only ops that take this input type: text, html, json, list, table, number, boolean.",
"title": "Accepts"
}
},
"title": "discoverArguments"
}Ausgabe-Schema
{
"type": "object",
"additionalProperties": true,
"title": "discoverDictOutput"
}🟢invoke(op, input, args, input_type, inline_max_tokens)
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>").
Eingabe-Schema
{
"type": "object",
"properties": {
"op": {
"description": "Op id, e.g. 'fetch', 'html_to_text', 'calc'. See discover().",
"title": "Op",
"type": "string"
},
"input": {
"default": null,
"description": "The data to operate on: a handle id from an earlier result (h_...), or a literal value (text, number, list, object). Omit for ops that take no input, like fetch, calc or now.",
"title": "Input"
},
"args": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "The op's arguments, e.g. {\"url\": \"https://example.com\"} for fetch or {\"expr\": \"2 ** 10\"} for calc.",
"title": "Args"
},
"input_type": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Override the inferred type of a literal input, e.g. 'html'.",
"title": "Input Type"
},
"inline_max_tokens": {
"default": 300,
"description": "Results up to this many estimated tokens include their value directly; larger ones return a preview. Default 300.",
"maximum": 20000,
"minimum": 0,
"title": "Inline Max Tokens",
"type": "integer"
}
},
"required": [
"op"
],
"title": "invokeArguments"
}Ausgabe-Schema
{
"type": "object",
"additionalProperties": true,
"title": "invokeDictOutput"
}🟢run_pipeline(steps, result_from, dry_run, inline_max_tokens)
Chain operations in one call; only the final result comes back, intermediate data stays on the server. Example steps: [{"op": "fetch", "args": {"url": "https://example.com/pricing"}, "as": "page"}, {"op": "extract_tables", "input": "$page", "args": {"index": 0}}, {"op": "to_markdown", "input": "$1"}]. Use dry_run=true first when unsure.
Eingabe-Schema
{
"type": "object",
"properties": {
"steps": {
"description": "Ordered steps: {\"op\": id, \"input\"?: ref|handle|value, \"args\"?: {...}, \"as\"?: name}. Refer to earlier steps as \"$0\", \"$1\", \"$name\", or paths like \"$1[0]\"; refs work inside args too.",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Steps",
"type": "array"
},
"result_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Which step to return, as a ref like \"$2\" or \"$prices[0]\". Default: the last step.",
"title": "Result From"
},
"dry_run": {
"default": false,
"description": "Check refs, args, types, cost and side effects without running anything.",
"title": "Dry Run",
"type": "boolean"
},
"inline_max_tokens": {
"default": 300,
"description": "Results up to this many estimated tokens include their value directly; larger ones return a preview. Default 300.",
"maximum": 20000,
"minimum": 0,
"title": "Inline Max Tokens",
"type": "integer"
}
},
"required": [
"steps"
],
"title": "run_pipelineArguments"
}Ausgabe-Schema
{
"type": "object",
"additionalProperties": true,
"title": "run_pipelineDictOutput"
}🟢inspect(handle, view, offset, limit)
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).
Eingabe-Schema
{
"type": "object",
"properties": {
"handle": {
"description": "A handle id like h_3f9a1c2b7e.",
"title": "Handle",
"type": "string"
},
"view": {
"default": "summary",
"description": "summary: size, preview, next ops. value: the data itself, paged. provenance: the chain of ops, args and sources that produced it.",
"enum": [
"summary",
"value",
"provenance"
],
"title": "View",
"type": "string"
},
"offset": {
"default": 0,
"description": "For view=value: start position (chars for text, items for lists).",
"minimum": 0,
"title": "Offset",
"type": "integer"
},
"limit": {
"anyOf": [
{
"maximum": 100000,
"minimum": 1,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "For view=value: page size (default 4000 chars or 50 items).",
"title": "Limit"
}
},
"required": [
"handle"
],
"title": "inspectArguments"
}Ausgabe-Schema
{
"type": "object",
"additionalProperties": true,
"title": "inspectDictOutput"
}🟢run_recipe(name, params, dry_run, inline_max_tokens)
Run a saved pipeline in one call. Built-ins: page_to_markdown (url, max_tokens), page_outline (url), page_links (url, contains), page_tables (url, index), find_on_page (url, pattern).
Eingabe-Schema
{
"type": "object",
"properties": {
"name": {
"description": "Recipe name, e.g. 'page_to_markdown'. discover() lists them.",
"title": "Name",
"type": "string"
},
"params": {
"anyOf": [
{
"additionalProperties": true,
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Values for the recipe's params, e.g. {\"url\": \"https://example.com\"}.",
"title": "Params"
},
"dry_run": {
"default": false,
"title": "Dry Run",
"type": "boolean"
},
"inline_max_tokens": {
"default": 300,
"description": "Results up to this many estimated tokens include their value directly; larger ones return a preview. Default 300.",
"maximum": 20000,
"minimum": 0,
"title": "Inline Max Tokens",
"type": "integer"
}
},
"required": [
"name"
],
"title": "run_recipeArguments"
}Ausgabe-Schema
{
"type": "object",
"additionalProperties": true,
"title": "run_recipeDictOutput"
}🟡save_recipe(name, description, steps, params, result_from)
Save a working pipeline under a name so any agent can run it later with run_recipe. Saved recipes are shared and can't be overwritten.
Eingabe-Schema
{
"type": "object",
"properties": {
"name": {
"description": "3-64 lowercase letters, digits or underscores, e.g. acme_pro_price.",
"title": "Name",
"type": "string"
},
"description": {
"description": "One sentence: what it returns, for other agents searching later.",
"title": "Description",
"type": "string"
},
"steps": {
"description": "Pipeline steps, with values to vary written as {{param}}, e.g. {\"op\": \"fetch\", \"args\": {\"url\": \"{{url}}\"}}.",
"items": {
"additionalProperties": true,
"type": "object"
},
"title": "Steps",
"type": "array"
},
"params": {
"anyOf": [
{
"additionalProperties": {
"additionalProperties": true,
"type": "object"
},
"type": "object"
},
{
"type": "null"
}
],
"default": null,
"description": "Each {{param}}: {\"type\": \"string\", \"description\": \"...\", \"default\"?: ...}.",
"title": "Params"
},
"result_from": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Ref of the step to return; default the last.",
"title": "Result From"
}
},
"required": [
"name",
"description",
"steps"
],
"title": "save_recipeArguments"
}Ausgabe-Schema
{
"type": "object",
"additionalProperties": true,
"title": "save_recipeDictOutput"
}Community
Nachweis