GitHubCard

Create GitHub profile and repository cards for READMEs, link previews and social posts.

Should I use this

Quality & Safety

A
Description quality
98%
Schema completeness
77%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,396Tokens (tool definitions)
~1.0 KBTypical response size
Moderate attention impact (1.09% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "mcp": {
      "command": "npx",
      "args": [
        "@ghcardhq/ghcard"
      ]
    }
  }
}

Runnable packages

npm@ghcardhq/ghcard0.2.1stdio

Remote endpoints

https://githubcard.com/mcpstreamable-http

What it can do

Tool inventory

Tools (10)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡create_card(subject, template, palette, format, watermark, ...)

Create (or reuse) a published card image for a GitHub profile or repository. Returns svg/png URLs and markdown/html embed snippets. Idempotent; counts once against the daily quota.

Input Schema

{
  "type": "object",
  "properties": {
    "subject": {
      "type": "string",
      "description": "GitHub username (e.g. octocat) or owner/repo (e.g. octocat/hello-world)"
    },
    "template": {
      "description": "template id from list_templates; omit for the subject's default layout",
      "type": "string"
    },
    "palette": {
      "description": "background palette id from list_palettes; omit for the template's own background. For any other colour use design",
      "type": "string"
    },
    "format": {
      "description": "which link to return as url: \"svg\" (default; best for README embeds) or \"png\". Both are always in urls",
      "type": "string"
    },
    "watermark": {
      "description": "false removes the watermark (Pro only; ignored on Free)",
      "type": "boolean"
    },
    "design": {
      "description": "a design document from get_template_design or get_card_design, possibly edited; replaces template and palette",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "subject"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢validate_card(subject, template, palette, format, watermark, ...)

Dry run of create_card with the same inputs: checks template/palette ids, Pro features and the design document, without creating anything or using quota. warnings lists layers that reach outside the artboard (they would be clipped); fix those before create_card.

Input Schema

{
  "type": "object",
  "properties": {
    "subject": {
      "type": "string",
      "description": "GitHub username (e.g. octocat) or owner/repo (e.g. octocat/hello-world)"
    },
    "template": {
      "description": "template id from list_templates; omit for the subject's default layout",
      "type": "string"
    },
    "palette": {
      "description": "background palette id from list_palettes; omit for the template's own background. For any other colour use design",
      "type": "string"
    },
    "format": {
      "description": "which link to return as url: \"svg\" (default; best for README embeds) or \"png\". Both are always in urls",
      "type": "string"
    },
    "watermark": {
      "description": "false removes the watermark (Pro only; ignored on Free)",
      "type": "boolean"
    },
    "design": {
      "description": "a design document from get_template_design or get_card_design, possibly edited; replaces template and palette",
      "type": "object",
      "propertyNames": {
        "type": "string"
      },
      "additionalProperties": {}
    }
  },
  "required": [
    "subject"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_templates(scope, freeOnly, widgets)

List card layouts with their ids, scope (profile/repo/all), size, widget types, and whether they need Pro.

Input Schema

{
  "type": "object",
  "properties": {
    "scope": {
      "description": "profile or repo; omit for all. Results include scope=all templates, which fit both",
      "type": "string"
    },
    "freeOnly": {
      "description": "only templates available on the Free plan",
      "type": "boolean"
    },
    "widgets": {
      "description": "only templates containing all of these widget types (from list_components)",
      "type": "array",
      "items": {
        "type": "string"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_palettes

List background palette ids accepted by create_card.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢list_components

List the widget (layer) types a design can contain, with the scope (profile/repo) each fits.

Input Schema

{
  "type": "object",
  "properties": {}
}
🟢get_template_design(template, subject, palette)

Return a template's layout as an editable design document (artboard + layers). Costs no quota. Edit it and pass it to create_card as design.

Input Schema

{
  "type": "object",
  "properties": {
    "template": {
      "type": "string",
      "description": "template id from list_templates"
    },
    "subject": {
      "description": "username or owner/repo the card is for; decides profile vs repo layouts",
      "type": "string"
    },
    "palette": {
      "description": "palette id to apply; replaces the template's background in the returned design",
      "type": "string"
    }
  },
  "required": [
    "template"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_card_design(id)

Return the design document of one of the account's cards, to edit and re-submit through create_card as design (which creates a new card; the original is unchanged).

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "card id from create_card or list_cards"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢list_cards(limit, cursor)

List cards this account created through the API, most recently requested first. Paginated with nextCursor.

Input Schema

{
  "type": "object",
  "properties": {
    "limit": {
      "description": "page size 1-100 (default 20)",
      "type": "integer",
      "minimum": -9007199254740991,
      "maximum": 9007199254740991
    },
    "cursor": {
      "description": "nextCursor from a previous call",
      "type": "string"
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🔴delete_card(id)

Permanently delete one of the account's cards. Its links stop working everywhere they are embedded. Confirm with the user first.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "card id from create_card or list_cards"
    }
  },
  "required": [
    "id"
  ],
  "$schema": "http://json-schema.org/draft-07/schema#"
}
🟢get_usage

Show the account's plan (free/pro) and how many cards it can still create today (cards.remaining, resets 00:00 UTC). The ai quota is reserved for future AI tools.

Input Schema

{
  "type": "object",
  "properties": {}
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded10 tools