GitHubCard README

The full upstream README, mirrored for reference. Install config, tool schemas, adoption signals and our own overview live on the GitHubCard listing page.

GitHubCard

GitHubCard MCP server

Let your AI assistant create GitHubCard images: profile and repository cards for READMEs, link previews and social posts, with live GitHub data.

  • Hosted: https://githubcard.com/mcp (Streamable HTTP). Nothing to install.
  • Local: npx -y @ghcardhq/ghcard mcp (stdio), from the ghcard CLI. It can also edit a README on your disk.

Ask things like:

Make a GitHubCard for my profile and add it near the top of my README.

Create a dark card for vercel/next.js I can use as a link preview.

Use the compact repo template, but with a #1e3a5f background and without the language widget.

Get an API key

Creating cards needs a free API key. Sign in at githubcard.com/dashboard and create one under API keys. It looks like ghc_live_….

Without a key, the server still lists templates, palettes, widget types, and template designs, so you can try it before signing up.

Setup

Replace ghc_live_… with your key in the examples below.

Claude Code

Terminal
claude mcp add --transport http githubcard https://githubcard.com/mcp \
  --header "Authorization: Bearer ghc_live_…"

There is also a Claude Code plugin that adds the server together with a GitHubCard skill: see ghcardhq/skills.

Claude Desktop

Settings → Connectors → Add custom connector, URL https://githubcard.com/mcp. Custom headers are not available there yet, so to pass your key, use the local server in claude_desktop_config.json instead:

config.json
{
  "mcpServers": {
    "githubcard": {
      "command": "npx",
      "args": ["-y", "@ghcardhq/ghcard", "mcp"],
      "env": { "GHCARD_API_KEY": "ghc_live_…" }
    }
  }
}

Cursor

~/.cursor/mcp.json:

config.json
{
  "mcpServers": {
    "githubcard": {
      "url": "https://githubcard.com/mcp",
      "headers": { "Authorization": "Bearer ghc_live_…" }
    }
  }
}

VS Code

.vscode/mcp.json (VS Code asks for the key once and stores it securely):

config.json
{
  "inputs": [
    {
      "id": "githubcard-key",
      "type": "promptString",
      "description": "GitHubCard API key",
      "password": true
    }
  ],
  "servers": {
    "githubcard": {
      "type": "http",
      "url": "https://githubcard.com/mcp",
      "headers": { "Authorization": "Bearer ${input:githubcard-key}" }
    }
  }
}

Windsurf

~/.codeium/windsurf/mcp_config.json:

config.json
{
  "mcpServers": {
    "githubcard": {
      "serverUrl": "https://githubcard.com/mcp",
      "headers": { "Authorization": "Bearer ghc_live_…" }
    }
  }
}

Codex CLI

~/.codex/config.toml:

toml
[mcp_servers.githubcard]
url = "https://githubcard.com/mcp"
bearer_token_env_var = "GHCARD_API_KEY"

Then export GHCARD_API_KEY=ghc_live_… in your shell.

Gemini CLI

Install the extension from this repository. Gemini CLI asks for the optional API key during setup and stores it as a sensitive setting:

bash
gemini extensions install https://github.com/ghcardhq/githubcard-mcp

Any other client

Remote: Streamable HTTP at https://githubcard.com/mcp, header Authorization: Bearer ghc_live_….

Local (stdio): command npx, args ["-y", "@ghcardhq/ghcard", "mcp"], env GHCARD_API_KEY. Add --allow-file-writes to the args to enable update_readme. Needs Node.js 20 or later.

Tools

ToolKeyWhat it does
create_cardyesCreate (or reuse) a card for a user, owner/repo, or GitHub URL. Returns SVG/PNG links and Markdown/HTML embed snippets. Uses one unit of the daily quota
validate_cardyesDry run of create_card: checks ids, Pro features and custom designs, uses no quota
list_templatesnoLayouts, filterable by scope (profile/repo), Free plan and widget types
list_palettesnoBackground palettes
list_componentsnoWidget types a card can contain
get_template_designnoA template's layout as an editable design document. Pass subject for a repo template
get_card_designyesThe design document of one of your cards
list_cardsyesCards you have created
delete_cardyesDelete a card; its links stop working
get_usageyesYour plan and today's remaining quota
update_readmelocal onlyInsert or update the card in a Markdown file. Only with ghcard mcp --allow-file-writes

create_card is idempotent: the same inputs return the same card and link. Card images always show current GitHub data, so there is no need to recreate them.

Failed calls return isError: true with a stable code, a retryable flag and a hint telling the model what to do next.

Limits

PlanCards per day
Free100
Pro5000

The quota resets at 00:00 UTC. Failed calls are not counted. Free cards carry a small watermark. See pricing.

Links

License

MIT