http-fetch/firecrawl: replace npx launch with a shipped wrapper (v5 / 1.1.0)
Both connectors declared `mcp_config: {command: "npx", args: ["-y", "<pkg>"]}`
and shipped no code at all. Skald treats a mcp_local `args[0]` as the *name of
the file to run*, not as an argument: install stores `script_path = "<id>/-y"`
and global_enable launches `npx /…/connectors/<id>/-y`, a path that does not
exist. The server never answered `initialize`, so start_server failed — and
since global_enable still returns 200 with an `error` in the body, the UI showed
the connector as enabled while `render_mcp_list` (built from the live runtime)
left it out of the agent's system context entirely.
Ship a two-file wrapper instead: a package.json pinning the upstream package
(mcp-fetch-server@1.1.2, firecrawl-mcp@3.23.7) and an index.js importing it for
its side effect, so `node index.js` is a real local_script and
ensure_installed_host installs the deps beside it. No node_modules, no lockfile.
Also: drop the legacy `launch_command` / top-level `transport` / `dependencies`
fields; drop firecrawl's inert `mcp_config.env` placeholder (same case as gmaps
— tokens are only substituted in the URL); add firecrawl_developer_search to
firecrawl's tools[] and API_KEY to its requires; realign manifest and fragment
versions to 5 / 1.1.0 (they were 2 vs 4, so no Update badge could ever appear).
Verified end-to-end against the shipped files by reproducing Skald's own path:
`npm ci || npm install --omit=dev` then `node <abs>/index.js` — initialize,
tools/list and a real tools/call, JSON-RPC only on stdout.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -2,37 +2,35 @@
|
||||
"id": "http-fetch",
|
||||
"name": "HTTP Fetch",
|
||||
"type": "mcp_local",
|
||||
"launch_command": "npx -y mcp-fetch-server",
|
||||
"transport": "stdio",
|
||||
"scope": "global",
|
||||
"requires": [
|
||||
"NODE"
|
||||
],
|
||||
"dependencies": [],
|
||||
"setup_instructions": [
|
||||
"Ensure Node.js is installed.",
|
||||
"No configuration needed \u2014 HTTP Fetch is a free tool with no API key."
|
||||
"Requires Node.js 18+ on the host that runs the connector.",
|
||||
"No configuration needed — HTTP Fetch is free and needs no API key.",
|
||||
"Dependencies are installed automatically by Skald from package.json."
|
||||
],
|
||||
"docs": [
|
||||
{
|
||||
"lang": "en",
|
||||
"description": "Fetch any URL and convert it to HTML, Markdown, plain text, JSON, or YouTube transcripts \u2014 free, no API key required, no rate limits, no cost. Prefer this over Exa or Firecrawl for simple URL fetching. Supports YouTube video transcripts via fetch_youtube_transcript.",
|
||||
"llm_short_description": "HTTP Fetch \u2014 fetch any URL and convert to HTML, Markdown, plain text, JSON, or readable article format (strips ads). Also extracts YouTube transcripts. Free, no API key."
|
||||
"description": "Fetch any URL and convert it to HTML, Markdown, plain text, JSON, or YouTube transcripts — free, no API key required, no rate limits, no cost. Prefer this over Exa or Firecrawl for simple URL fetching. Supports YouTube video transcripts via fetch_youtube_transcript.",
|
||||
"llm_short_description": "HTTP Fetch — fetch any URL and convert to HTML, Markdown, plain text, JSON, or readable article format (strips ads). Also extracts YouTube transcripts. Free, no API key."
|
||||
}
|
||||
],
|
||||
"auth": {
|
||||
"type": "none"
|
||||
},
|
||||
"mcp_config": {
|
||||
"command": "npx",
|
||||
"command": "node",
|
||||
"args": [
|
||||
"-y",
|
||||
"mcp-fetch-server"
|
||||
]
|
||||
"index.js"
|
||||
],
|
||||
"transport": "stdio"
|
||||
},
|
||||
"homepage": "",
|
||||
"homepage": "https://github.com/zcaceres/fetch-mcp",
|
||||
"icon_small": "icon_sm.svg",
|
||||
"icon_large": "icon_lg.svg",
|
||||
"scope": "global",
|
||||
"tags": [
|
||||
"http",
|
||||
"fetch",
|
||||
@@ -42,9 +40,9 @@
|
||||
"scraping",
|
||||
"youtube"
|
||||
],
|
||||
"version": 2,
|
||||
"version_string": "1.0.1",
|
||||
"version_release_date": "2026-07-21",
|
||||
"version": 5,
|
||||
"version_string": "1.1.0",
|
||||
"version_release_date": "2026-08-10",
|
||||
"tools": [
|
||||
{
|
||||
"name": "fetch_html",
|
||||
@@ -71,4 +69,4 @@
|
||||
"display_name": "Get YouTube Transcript"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,9 +22,9 @@
|
||||
"type": "none"
|
||||
},
|
||||
"folder": "http-fetch",
|
||||
"version": 4,
|
||||
"version_string": "1.0.3",
|
||||
"version_release_date": "2026-07-21",
|
||||
"version": 5,
|
||||
"version_string": "1.1.0",
|
||||
"version_release_date": "2026-08-10",
|
||||
"tools": [
|
||||
{
|
||||
"name": "fetch_html",
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
// Skald connector entry point.
|
||||
//
|
||||
// The MCP server itself is the upstream `mcp-fetch-server` package, pinned in
|
||||
// package.json and installed by Skald beside this file (`npm ci --omit=dev`,
|
||||
// falling back to `npm install --omit=dev`).
|
||||
//
|
||||
// This file exists because Skald launches a `mcp_local` connector as
|
||||
// `<command> <mcp_config.args[0]>`, where args[0] is rewritten to the absolute
|
||||
// path of a *shipped* file — so `npx -y <package>` cannot be expressed: args[0]
|
||||
// would be taken as the entry file's name. Importing the package's server module
|
||||
// for its side effect (it starts the stdio JSON-RPC loop at import time) is the
|
||||
// whole of the wrapper.
|
||||
import "mcp-fetch-server/dist/index.js";
|
||||
@@ -0,0 +1,13 @@
|
||||
{
|
||||
"name": "skald-connector-http-fetch",
|
||||
"version": "1.1.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"description": "Skald connector wrapper around the mcp-fetch-server MCP server.",
|
||||
"dependencies": {
|
||||
"mcp-fetch-server": "1.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user