Skip to content

feat(mcp): advertise server title, description, website, and icon - #3394

Merged
kodiakhq[bot] merged 5 commits into
mainfrom
agent/mcp-server-metadata
Oct 16, 2026
Merged

kodiakhq[bot] merged 5 commits into
mainfrom
agent/mcp-server-metadata

Conversation

@brandon-pereira

@brandon-pereira brandon-pereira commented Oct 16, 2026 •

Copy link
Copy Markdown
Member

Summary

MCP directories and clients score servers on the Implementation metadata in the initialize response (spec 2026-07-28: Implementation, Icon): a human-readable title, a useful description, a public website, and a scalable or >=128px icon. We only sent name and version.

This adds to the MCP server's serverInfo:

  • title: "ClickStack"
  • description: a short summary of what the server does
  • websiteUrl: the ClickStack docs
  • icons: the HyperDX logo SVG (sizes: ["any"]), served by the app at ${FRONTEND_URL}/favicons/hyperdx/favicon.svg. Omitted when FRONTEND_URL is unset, since icon sources must be absolute URLs

Instructions and capabilities are unchanged. All fields exist on the SDK 1.29 Implementation type. Covered by packages/api/src/mcp/__tests__/serverMetadata.test.ts.

How to reproduce

Starting point: local full stack via yarn dev (the MCP server needs the API).

On main:

  1. Run yarn dev.
  2. Run npx @modelcontextprotocol/inspector and connect it to the local MCP endpoint (see MCP.md).
  3. Check the initialize response: serverInfo has only name and version.

On this branch:

  1. Repeat the steps above.
  2. serverInfo now also has title, description, websiteUrl, and icons. tools/list and instructions match main.

References

  • Linear Issue:
  • Related PRs:

@vercel

vercel Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
hyperdx-oss Ready Ready Preview Oct 16, 2026 8:50pm UTC
hyperdx-storybook Ready Ready Preview Oct 16, 2026 8:50pm UTC

Request Review

@changeset-bot

changeset-bot Bot commented Oct 16, 2026 •

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: e983afc

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 3 packages
Name Type
@hyperdx/api Patch
@hyperdx/app Patch
@hyperdx/otel-collector Patch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@github-actions

Copy link
Copy Markdown
Contributor

Duplicate code analysis

No new duplicate code introduced by this PR.


jscpd compared this branch against origin/main
across app, api and common-utils. Only new clones are listed; the codebase
currently holds 125 in total (1.69%).
Run yarn dupes locally to reproduce, or yarn dupes:all for the full picture.

@greptile-apps

greptile-apps Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; no actionable new issues remain.

Summary

Adds a title, description, website, and optional SVG icon to the MCP server’s initialize response.

  • MCP clients receive ClickStack details and an app-hosted logo.

Reviews (5) · Last reviewed commit: "Merge branch 'main' into agent/mcp-serve..." · Reviewed by Greptile

@github-actions

github-actions Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

E2E Test Results

✅ All tests passed • 431 passed • 1 skipped • 1321s

Status Count
✅ Passed 431
❌ Failed 0
⚠️ Flaky 0
⏭️ Skipped 1

Tests ran across 4 shards in parallel.

View full report →

@brandon-pereira
brandon-pereira marked this pull request as ready for review October 16, 2026 19:44
@github-actions github-actions Bot added the review/tier-2 Low risk — AI review + quick human skim label Oct 16, 2026
@github-actions

github-actions Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

🔵 Tier 2 — Low Risk

Small, isolated change with no API route or data model modifications.

Why this tier:

  • Standard feature/fix — introduces new logic or modifies core functionality

Review process: AI review + quick human skim (target: 5–15 min). Reviewer validates AI assessment and checks for domain-specific concerns.
SLA: Resolve within 4 business hours.

Stats
  • Production files changed: 1
  • Production lines changed: 38 (+ 57 in test files, excluded from tier calculation)
  • Branch: agent/mcp-server-metadata
  • Author: brandon-pereira

To override this classification, remove the review/tier-2 label and apply a different review/tier-* label. Manual overrides are preserved on subsequent pushes.

Comment thread packages/api/src/mcp/mcpServer.ts Outdated
Comment thread packages/api/src/mcp/mcpServer.ts Outdated
@github-actions

github-actions Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

PR Review

✅ No issues found.

Comment thread packages/api/src/mcp/mcpServer.ts Outdated
@github-actions

github-actions Bot commented Oct 16, 2026 •

Copy link
Copy Markdown
Contributor

Deep Review

✅ No critical issues found.

This is a small, additive change to the MCP initialize response's serverInfo (Implementation) object. The new fields type-check against the lockfile-pinned SDK 1.29.0, the favicon asset exists at packages/app/public/favicons/hyperdx/favicon.svg (served at root by Next.js), the icon is correctly omitted when FRONTEND_URL is unset, and all three prior review comments (subpath handling, subpath test, intentional-logo note) are verified addressed in the current code. No P0/P1/P2 findings.

🔵 P3 nitpicks (3)
  • packages/api/src/mcp/__tests__/serverMetadata.test.ts:31 — the new description and websiteUrl fields are asserted only as expect.any(String) and /^https:\/\//, so a blanked description or a wrong https URL would still pass.
    • Fix: Assert a stable substring of the description and the exact websiteUrl value to lock the advertised metadata against silent regression.
    • testing, api-contract
  • packages/api/src/mcp/mcpServer.ts:43 — the /favicons/hyperdx/favicon.svg path is hardcoded in the API and duplicates the app's brand asset path across a package boundary, so an app-side rename would silently 404 the icon with no compile-time link.
    • Fix: Share the brand asset path via a constant, or add a test asserting the served path matches the app's canonical favicon path.
    • maintainability
  • packages/api/src/mcp/__tests__/serverMetadata.test.ts:10 — getServerInfo depends on requireActual('./mcpTestUtils') running inside jest.isolateModules so mcpServer captures the mocked FRONTEND_URL at import time, a load-bearing coupling invisible to a reader.
    • Fix: Add a one-line comment explaining the require must stay inside isolateModules so a future refactor cannot silently break the config mock.
    • kieran-typescript

Reviewers (9): correctness, testing, maintainability, project-standards, agent-native, learnings, kieran-typescript, api-contract, previous-comments.

Testing gaps:

  • The .replace(/\/+$/, '') trailing-slash normalization is exercised only via the single trailing-slash case; a multi-slash or whitespace-bearing FRONTEND_URL is untested.
  • No test asserts name/version remain unchanged in serverInfo alongside the new fields.

No finding blocks merge automatically. A maintainer will expect P0/P1 findings in code this PR changes to be fixed; P2/P3 are your call -- fix or reply. Never fix findings about surrounding code here; reply instead. Do not widen the PR. How to respond

Comment thread packages/api/src/mcp/mcpServer.ts
@kodiakhq
kodiakhq Bot merged commit 748315d into main Oct 16, 2026
29 checks passed
@kodiakhq
kodiakhq Bot deleted the agent/mcp-server-metadata branch October 16, 2026 20:57

This branch was successfully deployed

2 active deployments
Preview – hyperdx-oss — e983afce Deployed Oct 16, 2026 by vercel[bot]
Preview – hyperdx-storybook — e983afce Deployed Oct 16, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

automerge review/tier-2 Low risk — AI review + quick human skim

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants