Send title, description, website and icons in the initialize result

JU
3d ago
+408-26

This is one of three small PRs split out of #540 (server info, idempotentHint, input descriptions), plus a release PR that merges last.

MCP clients and directories read the server's title, description, website and icon from the initialize result. Ours sends only name and version, because fastmcp builds that result from those two fields alone.

Changes

  • patches/fastmcp@4.3.2.patch: the existing patch now also accepts title, description, websiteUrl and icons server options and sends them in initialize. title, websiteUrl and icons use upstream fastmcp's option names, so those hunks drop out when we upgrade. description is not upstream. pnpm-lock.yaml only gets the new patch hash.
  • src/server.ts: sets the four fields next to name (still firecrawl-fastmcp, origin attribution keys on it) and adds an unstable description hook, with the default text, so an embedder can replace it.
  • src/service/index.ts: the search-only surface sets its own description, because the default one mentions crawl, map and parse, which that surface does not have (Cubic's comment on #540).
  • README.md: description row in the hooks table.
  • tests/server-info.test.mjs and regenerated contract snapshots.

How I tested it

  • pnpm install --frozen-lockfile, pnpm run build, pnpm test: 169/169 (168 on main plus the new test).
  • Real MCP client (official SDK) over stdio and streamable HTTP, and with CLOUD_SERVICE=true: connects and reads the new fields without schema errors. Tool lists and results are unchanged apart from the server info.
  • Icon and website URLs return 200 with the right content types.

Heads up

Independent of the other PRs. It does not bump the version; the release PR does.