Extcord
Agent utilities: read big pages without filling context, exact math, dates, parsing. Free.
사용해야 할까요
품질 및 안전성
발견 사항 (3)
- HIGH
- MEDIUMinvoke에서
- MEDIUMrun_pipeline에서
도구 정의와 프로토콜 준수에 대한 자동 분석을 기반으로 합니다.
컨텍스트 비용
이는 서버의 도구가 모델의 컨텍스트에 로드될 때마다 소비되는 대략적인 토큰 수입니다. 수치가 높을수록 다른 작업에 사용할 수 있는 주의가 줄어듭니다.
설치
원클릭 설치
`claude_desktop_config.json` 파일에 다음을 추가하세요:
{
"mcpServers": {
"extcord": {
"url": "https://extcord.io/mcp"
}
}
}원격 엔드포인트
https://extcord.io/mcpstreamable-http할 수 있는 일
도구 목록
도구 (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.
입력 스키마
{
"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"
}출력 스키마
{
"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>").
입력 스키마
{
"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"
}출력 스키마
{
"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.
입력 스키마
{
"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"
}출력 스키마
{
"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).
입력 스키마
{
"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"
}출력 스키마
{
"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).
입력 스키마
{
"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"
}출력 스키마
{
"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.
입력 스키마
{
"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"
}출력 스키마
{
"type": "object",
"additionalProperties": true,
"title": "save_recipeDictOutput"
}커뮤니티
증거