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:
| URL | Purpose |
|---|---|
GET /mcp/server-card | Primary server card endpoint |
GET /.well-known/mcp/server-card.json | Well-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"],
},
],
},
});| Field | Description |
|---|---|
enabled | Set false to disable card generation while keeping other config |
name | Override default card name |
title | Display title (defaults to app name) |
description | Card description |
websiteUrl | Public site URL |
repository | Source repository metadata |
icons | Icon 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_URLto your public MCP endpoint (for examplehttps://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.