Extcord

Agent utilities: read big pages without filling context, exact math, dates, parsing. Free.

¿Debería usar esto?

Calidad y seguridad

A
Calidad de la descripción
97%
Integridad del esquema
88%
Calidad de los nombres
97%
Riesgo de envenenamiento
60%
Coincidencia de permisos
100%
Cumplimiento del protocolo
100%

Hallazgos (3)

  • HIGHTool poisoning patterns detected
  • MEDIUMTool description contains URL to non-standard domainen invoke
  • MEDIUMTool description contains URL to non-standard domainen run_pipeline

Basado en el análisis automatizado de las definiciones de herramientas y el cumplimiento del protocolo.

Costo de contexto

~1,953Tokens (definiciones de herramientas)
~2.7 KBTamaño de respuesta típico
Impacto moderado en la atención (1.53% del contexto de 128k)

Este es el número aproximado de tokens que se consumen cada vez que las herramientas del servidor se cargan en el contexto de un modelo. Los recuentos más altos reducen la atención disponible para otras tareas.

Instalar

Instalación con un clic

Agrega esto a tu archivo `claude_desktop_config.json`:

{
  "mcpServers": {
    "extcord": {
      "url": "https://extcord.io/mcp"
    }
  }
}

Puntos de conexión remotos

https://extcord.io/mcpstreamable-http

Qué puede hacer

Inventario de herramientas

Herramientas (6)

🟢 Solo lectura🟡 Escritura🔴 Eliminación⚪ Desconocido
🟢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.

Esquema de entrada

{
  "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"
}

Esquema de salida

{
  "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>").

Esquema de entrada

{
  "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"
}

Esquema de salida

{
  "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.

Esquema de entrada

{
  "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"
}

Esquema de salida

{
  "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).

Esquema de entrada

{
  "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"
}

Esquema de salida

{
  "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).

Esquema de entrada

{
  "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"
}

Esquema de salida

{
  "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.

Esquema de entrada

{
  "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"
}

Esquema de salida

{
  "type": "object",
  "additionalProperties": true,
  "title": "save_recipeDictOutput"
}

Comunidad

Califica este servidor

Evidencia

Observaciones recientes

verificadoversión no registrada6 herramientas