Skip to content

feat: adopt MCP 2025-11-25 serverInfo metadata (description, websiteUrl)#47

Open
evilmachina wants to merge 3 commits into
mainfrom
feature/mcp-2025-11-25-additions
Open

feat: adopt MCP 2025-11-25 serverInfo metadata (description, websiteUrl)#47
evilmachina wants to merge 3 commits into
mainfrom
feature/mcp-2025-11-25-additions

Conversation

@evilmachina

@evilmachina evilmachina commented Jun 24, 2026

Copy link
Copy Markdown
Member

Summary

Addresses #45 — the relevant Implementation metadata additions from MCP spec revision 2025-11-25, scoped to what's supported and useful for this stdio, read-only server.

What changed

  • serverInfo.description — a one-line, human-readable description of the server's capabilities (item Refactor configs and http requests #2 in the issue).
  • serverInfo.websiteUrlhttps://www.pinmeto.com, aligning with the registry server.json format.

Investigation outcomes (the other items)

  • serverInfo.icons — evaluated and dropped. No current Claude client renders it: Claude Desktop sources extension branding from the mcpb manifest (which already references img/logo_icon.png via manifest.js), and Claude.ai web doesn't render serverInfo icons for remote servers (anthropics/claude-ai-mcp#152). Embedding a data URI only added payload to every initialize response.
  • Per-tool icons (SEP-973, item try to add tracing #1) — deferred. The high-level McpServer.registerTool API in @modelcontextprotocol/sdk 1.29.0 (latest) does not forward an icons field to tools/list (verified empirically); surfacing them would require overriding the list handler via SDK internals.
  • Tool calling in sampling (item style: minor formatting + spelling #3) — not needed. The only sampling-based tool (pinmeto_get_google_review_insights) feeds the model a complete batch of review text and asks for a JSON summary back; it does its own fetching/sampling/batching before calling createMessage.

Test plan

  • Test in tests/mcp_server.test.ts asserts the initialize result carries description and websiteUrl.
  • Full suite: 237 passing.
  • npm run build clean.

Refs #45

🤖 Generated with Claude Code

…rl, icon)

Add the human-readable description, websiteUrl, and PinMeTo brand icon
(embedded 48x48 PNG data URI) to serverInfo's Implementation metadata,
introduced in MCP spec revision 2025-11-25. Clients receive richer
context and branding during initialization.

Per the investigation in #45:
- Per-tool icons (SEP-973) deferred: registerTool in @modelcontextprotocol/sdk
  1.29.0 does not forward an icons field to tools/list.
- Sampling tools/toolChoice: not needed for the review-insights summarizer.

Refs #45

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 24, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Central YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: e57cfb4f-a0db-4758-ba17-32ec24a8acd8

📥 Commits

Reviewing files that changed from the base of the PR and between 15ff988 and 64bdea6.

📒 Files selected for processing (1)
  • tests/mcp_server.test.ts
🚧 Files skipped from review as they are similar to previous changes (1)
  • tests/mcp_server.test.ts

📝 Walkthrough

Walkthrough

createMcpServer() now includes serverInfo.description and serverInfo.websiteUrl in the MCP initialize payload. The changeset records the minor release and the deferred icon and sampling notes. The test suite adds an initialize check that reads stdout JSON and verifies those serverInfo fields.

🚥 Pre-merge checks | ✅ 2
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly matches the main change: adopting MCP 2025-11-25 serverInfo metadata.
Description check ✅ Passed The description is directly about the same metadata update and associated test coverage.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.


Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3


ℹ️ Review info
⚙️ Run configuration

Configuration used: Central YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro

Run ID: 9780ff65-5e37-4c10-864c-bc85f07a7908

📥 Commits

Reviewing files that changed from the base of the PR and between 3b7eeaa and dc4ff11.

📒 Files selected for processing (4)
  • .changeset/server-info-2025-11-25.md
  • src/icons.ts
  • src/mcp_server.ts
  • tests/mcp_server.test.ts

Comment thread src/mcp_server.ts Outdated
Comment on lines +208 to +214
// Human-readable description (MCP 2025-11-25 Implementation.description): gives
// clients context during initialization and aligns with the registry server.json format.
description:
'Read-only access to the PinMeTo location management platform: locations, ' +
'plus Google/Facebook/Apple insights, ratings, reviews, and keywords.',
websiteUrl: 'https://www.pinmeto.com',
icons: PINMETO_ICONS,

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win

Gate 2025-11-25-only serverInfo fields by negotiated protocol version.

src/mcp_server.ts:208-214 adds description, websiteUrl, and icons to a shared serverInfo object, but src/mcp_server.ts:227-235 returns that same object even when the client negotiated 2025-06-18. Since this PR explicitly treats those keys as 2025-11-25 metadata, older clients can now receive a future-schema initialize payload and may reject it if they validate serverInfo strictly. Build serverInfo after selecting protocolVersion, or strip these keys unless the negotiated version is 2025-11-25+.

Comment thread tests/mcp_server.test.ts Outdated
Comment thread tests/mcp_server.test.ts Outdated
No current Claude client renders serverInfo.icons: Claude Desktop sources
extension branding from the mcpb manifest (which already references
img/logo_icon.png), and Claude.ai web does not render serverInfo icons for
remote servers. Embedding a data URI only added payload to every initialize
response, so remove it along with the now-unused src/icons.ts module.

The registry-relevant Implementation.description and websiteUrl fields remain.

Refs #45

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@evilmachina evilmachina changed the title feat: adopt MCP 2025-11-25 serverInfo metadata (description, websiteUrl, icon) feat: adopt MCP 2025-11-25 serverInfo metadata (description, websiteUrl) Jun 24, 2026
Harden the serverInfo test against worker-level fallout and CI flakiness:
- Restore process.stdout.write in a finally block so a failure can't leave
  it patched and cascade into other tests in the worker.
- Wait on a response latch (resolved when the id=0 reply lands) instead of a
  fixed 100ms sleep, which was racey under slower CI.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@evilmachina

Copy link
Copy Markdown
Member Author

Fixes Applied Successfully

Fixed 1 file based on 2 CodeRabbit feedback item(s).

Files modified:

  • tests/mcp_server.test.ts

Both items were stability hardening on the new serverInfo test:

  • Restore process.stdout.write in a finally block so a failure can't leave it patched and cascade into other tests in the worker.
  • Wait on a response latch (resolved when the id=0 reply lands) instead of a fixed 100ms sleep that was racey under slower CI.

Commit: 64bdea6

The latest autofix changes are on the feature/mcp-2025-11-25-additions branch.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant