GitHubCard
Create GitHub profile and repository cards for READMEs, link previews and social posts.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
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
0.2.1stdioRemote endpoints
https://githubcard.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (10)
🟡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
Evidence