Server card

Publish MCP server metadata at /mcp/server-card for client discovery.

MCP server cards let clients discover your server name, description, and Streamable HTTP endpoint before connecting. bitmcp serves a spec-shaped JSON document automatically.

Endpoints

For an MCP path of /mcp, bitmcp serves:

URLPurpose
GET /mcp/server-cardPrimary server card endpoint
GET /.well-known/mcp/server-card.jsonWell-known alias

Responses use Content-Type: application/mcp-server-card+json, public caching with ETag support, and CORS headers for browser discovery.

Default card

When serverCard is not disabled, bitmcp builds a card from your app config and package metadata:

{
  "$schema": "https://static.modelcontextprotocol.io/schemas/v1/server-card.schema.json",
  "name": "my-app/mcp",
  "version": "0.0.1",
  "title": "My App",
  "description": "My App MCP server",
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://mcp.example.com/mcp",
      "supportedProtocolVersions": ["2026-07-28"]
    }
  ]
}

The default name comes from your npm package name. Scoped packages map to scope.package/mcp.

Configure

import { defineConfig } from "bitmcp";

export default defineConfig({
  name: "notes",
  version: "1.0.0",
  serverCard: {
    title: "Notes MCP",
    description: "Create and search notes",
    websiteUrl: "https://notes.example.com",
    repository: {
      url: "https://github.com/acme/notes",
      source: "github",
    },
    icons: [
      {
        src: "https://notes.example.com/icon.png",
        mimeType: "image/png",
        sizes: ["512x512"],
      },
    ],
  },
});
FieldDescription
enabledSet false to disable card generation while keeping other config
nameOverride default card name
titleDisplay title (defaults to app name)
descriptionCard description
websiteUrlPublic site URL
repositorySource repository metadata
iconsIcon URLs with optional mimeType, sizes, and theme

Disable entirely with serverCard: false.

Remote URL resolution

The remotes[0].url field reflects where clients should connect:

  • In production, set MCP_URL to your public MCP endpoint (for example https://mcp.example.com/mcp)
  • Locally, bitmcp resolves the request origin and MCP path automatically
  • When OAuth is enabled, the remote URL must match your configured OAuth resource

Set MCP_URL in production so the server card advertises the correct public endpoint across replicas.

Vercel rewrite

Projects scaffolded with --deploy vercel include a rewrite from /mcp/server-card to the MCP handler so the card is served from the same deployment.

Next step

Pair server cards with Authentication so discovery metadata and OAuth protected-resource metadata stay aligned on the same public URL.