Commit Graph
25 Commits
Author SHA1 Message Date
Daniele fa8bbcb808 add playwright connector (v1 / 1.0.0) + commit pending docs reorganization
- new global mcp_local connector wrapping @playwright/mcp@0.0.79:
  index.js argv wrapper (--headless --isolated --no-sandbox) importing
  the package cli.js, postinstall downloads chromium-only browser,
  verify.js headless-launch probe, 24 tools with display names
- also carries the pending docs work: changelog extracted to
  CHANGELOG.md, manifest guide, SKALD.md/CLAUDE.md updates
2026-08-19 17:37:13 +01:00
DanieleandClaude Opus 5 28aeb9bcd7 SKALD.md: note that a reinstall does not rewrite a global server's command/args
refresh_connector_after_reinstall updates only the description on the
mcp_global_servers row before restarting from it, so an instance that already
had http-fetch/firecrawl enabled keeps the stale `npx …/-y` launch after an
Update. Record the deploy → Update → re-save sequence that actually applies it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-10 14:15:17 +01:00
DanieleandClaude Opus 5 ecb6835fa5 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>
2026-08-10 14:14:36 +01:00
Daniele 73d1a51b1f gmaps: fix missing dependency install + wire verify (v6 / 1.1.0)
The connector shipped no requirements.txt, so ensure_installed_host()
installed nothing and every tool call failed with "No module named
'googlemaps'" while the server still answered tools/list — skald logged
"connected — 6 tool(s)" on a connector that could not work.

- add requirements.txt (googlemaps>=4.10.0); deps were declared in the
  manifest's `dependencies` field, which skald only uses for the card
- wire the shipped verify.py through a `verify` manifest block, so a
  broken install fails visibly at enable time instead of silently
- verify.py puts .pydeps on sys.path: skald sets PYTHONPATH only for the
  server process, not for the `sh -c "python3 verify.py"` verify step
- drop the inert mcp_config.env {SECRET:…} placeholder — those tokens are
  substituted in the URL only, never in env values
- realign manifest/fragment versions (were 2/1.0.1 vs 5/1.0.4); skald
  prefers the manifest, so "update available" could never appear
- requires ENV -> API_KEY; drop deprecated secrets/ path from error text
- regenerate the index
2026-08-10 12:38:32 +01:00
dguiducci 371b7f75b5 gcal/gmail: update MCP servers + SKALD.md 2026-08-07 12:22:24 +01:00
dguiducci c49c3fa74d gmaps: fix env var injection — add mcp_config.env to pass GOOGLE_MAPS_API_KEY to subprocess 2026-07-25 09:09:17 +01:00
dguiducci 1094f11e34 context7: replace SVG icons with new PNG icons (sm 48x48, lg 96x96) 2026-07-23 17:42:46 +01:00
dguiducci c151739021 docs: replace connector manifest guide with coding agent version, adapted for compile.py workflow 2026-07-22 23:26:52 +01:00
dguiducci ccab72c586 Nuovo sistema: index.json + fragment.json + compile.py (SHA-256 automatici) 2026-07-22 22:52:01 +01:00
dguiducci 5f254d9a96 Aggiunto connector Google Trends (mcp_local) — trendspyg, nessuna API key 2026-07-22 22:46:08 +01:00
dguiducci 9236f668ec Fix llm_short_description: descrivere cosa fa l'MCP, non elencare i tool 2026-07-22 22:24:10 +01:00
dguiducci 3440890d11 Migliorate llm_short_description per tutti i connector — tool names espliciti
Ogni connector.json ora ha una llm_short_description che elenca i tool
specifici che espone, così l'LLM sa esattamente cosa attivare (lazy load).

SKALD.md: documentata criticità del campo llm_short_description
nel system prompt dell'LLM.
2026-07-22 22:21:52 +01:00
dguiducci 2750e773d4 Aggiunto connector Google Maps (mcp_local)
- Script: gmaps_mcp_server.py (MCP stdio, JSON-RPC 2.0)
- 6 tools: status, directions, geocode, reverse_geocode, search_places, distance_matrix
- Auth: API key via env GOOGLE_MAPS_API_KEY
- Verify: test Geocoding API con probe 'Rome, IT' 
- Dipendenze: googlemaps>=4.10.0
- Icone SVG pin Google Maps
2026-07-22 21:46:43 +01:00
dguiducci 7f6477dd68 Aggiunto connector Context7 (mcp_remote)
- URL: https://mcp.context7.com/mcp, trasporto streamable-http
- Auth: none (endpoint pubblico, free tier)
- Verify: MCP initialize probe (testato )
- Icone SVG dal logo ufficiale Context7

Inoltre:
- Copiata docs/connector.manifest_guide.md da skald-circle/blueprint/
- Riferimento alla guida in SKALD.md
2026-07-22 21:40:12 +01:00
dguiducci 955b1ba069 feat: friendly tool names per MCP title field or manifest
- Aggiunto campo 'title' a tools/list in tutti gli script MCP locali
  (Gmail, Gcal, Drive, Email, SSH, Weather, Wikipedia, WhatsApp)
- Aggiunto tools[]/display_name nel manifest per connector remoti/package
  esterni (Firecrawl, HTTP Fetch, Exa, Tavily, SerpAPI Flights)
- Documentata convenzione e resolution order in SKALD.md
- Aggiornata manifest_guide.md per tools[] in connectors.json
- Bumped version e sha256 per tutti i 13 connector
2026-07-21 23:43:24 +01:00
dguiducci f1654d7d9d Fix weather + wikipedia: add mcp_config (command+args) to manifest
Both connectors were missing the mcp_config block that the frontend requires
to install mcp_local connectors. Bump v1→v2 (2.0.0).
2026-07-19 17:25:40 +01:00
dguiducci 513483e81b Add SerpAPI Flights connector: mcp_remote, flight search via Google Flights, verify.py with MCP initialize probe 2026-07-19 14:46:20 +01:00
dguiducci e8ce11989d SKALD.md: update connector table — add Exa, fill missing entries 2026-07-19 14:15:12 +01:00
dguiducci 7039816b73 Add versioning schema: version (int), version_string, version_release_date to all 10 connectors
- version: intero per-connector (parte da 1)
- version_string: semver ereditato (display only)
- version_release_date: ISO 8601 (display only)
- Campi identici in index (connectors.json) e manifest (connector.json)
- Aggiunto connector.json alle files[] di gmail, gcal, email, ssh, tavily
- Aggiornata documentazione in SKALD.md
2026-07-19 10:23:22 +01:00
dguiducci 1502df04cf SKALD.md: document deploy flow — branch main = release, script marketplace_deploy.sh 2026-07-17 22:03:58 +01:00
dguiducci 46c1446eae Switch Gmail and Gcal to env-var OAuth delivery pattern
auth.deliver changes from as:file to as:env:
- Gmail: GMAIL_CREDS_JSON env var (Google authorized_user JSON)
- Gcal: GCAL_CREDS_JSON env var

mcp_config.env removed entirely — Skald injects the env var at runtime,
no path on disk needed.

Server scripts updated:
- Check GMAIL_CREDS_JSON / GCAL_CREDS_JSON env var first
- Use Credentials.from_authorized_user_info() instead of
  from_authorized_user_file()
- Fall back to file-based loading for standalone/legacy use
- _persist_creds only writes to disk when _creds_path is set

gcal/verify.py: support GCAL_CREDS_JSON env var with shared _check_api()

Docs (SKALD.md): updated examples, field table, connector table.
2026-07-17 21:00:58 +01:00
dguiducci 3a3bc4e1e9 Add Google Calendar connector (gcal)
- connector.json: OAuth Google, scope https://www.googleapis.com/auth/calendar
  deliver: file/google_authorized_user → {secrets}/google_creds.json
  mcp_config.env.GOOGLE_CREDS_PATH = {secrets}/google_creds.json
- verify.py: loads creds + API probe (calendarList.list)
- gcal_mcp_server.py: 8 tools (status, list_calendars, list_events,
  get_event, create_event, update_event, delete_event, respond_to_event)
  + push notification polling
- icons: calendar SVG (48px + 96px)
- connectors.json index: gcal entry with auth + sha256
- SKALD.md: tabella connector + stato verify aggiornati
2026-07-17 20:53:38 +01:00
dguiducci 04912fccd9 SKALD.md: document OAuth deliver, auth in index, oauth/show.html 2026-07-17 20:48:54 +01:00
dguiducci 1caba6946c Add Email (IMAP/SMTP) and SSH Remote Access connectors
- CLAUDE.md: developer guide for the marketplace repo
- email/: generic IMAP+SMTP connector (stdlib only, config via env)
  - env[] array, auth.type: password, verify.py (IMAP+SMTP probe)
- ssh/: SSH Remote Access connector ported from Skald, modified
  - ALIASES_FILE → ~/.ssh_aliases.json (was ./secrets/...)
  - optional env[] (TTL/timeout tunables)
  - auth.type: none (per-alias auth at runtime via elicitation)
- tavily/: restructured with env[] (tavilyApiKey), verify.py, auth block
- connectors.json: added email, ssh, and tavily verify.py entries
- SKALD.md: documented env[], verify, password auth, SSH connector
2026-07-16 22:29:33 +01:00
dguiducci dedd09d7c7 Initial commit: marketplace structure with connectors.json and index.html 2026-07-16 18:49:01 +01:00