Issue certificates from ChatGPT, Claude or any AI agent
The IssueBadge MCP server connects your IssueBadge account to ChatGPT, Claude, Cursor, VS Code and any other Model Context Protocol client. You type a sentence, the assistant picks the template and issues the certificate, and the recipient gets the email.
It is free, open source, and stateless: your credentials pass through on each request and are never stored.
- Works in ChatGPT today through Developer mode; directory listing is under review
-
Three tools:
validate_key,get_all_badges,issue_badge - Sign in with OAuth, or paste an API key for Cursor and VS Code
-
Runs locally too with
npx issuebadge-mcp-server
A prompt, not a form
What happens behind the scenes
In ChatGPT the reply includes a card with the recipient, the certificate ID and a View certificate button. Recipients get the email and a public verification link.
What is the IssueBadge MCP server?
The IssueBadge MCP server is a small, open-source service that speaks the Model Context Protocol, the standard AI assistants use to call outside tools. It gives ChatGPT, Claude, Cursor and VS Code three tools: check your credentials, list your badge templates, and issue a certificate to one recipient by name and email.
We host it at https://issuebadge-mcp.issuebadge.workers.dev/mcp. The source is on GitHub under the MIT license, so you can read exactly what it does or run your own copy. It forwards each request to the same IssueBadge API our other integrations use.
How do I add IssueBadge to ChatGPT?
About a minute. You need a ChatGPT account and an IssueBadge account with an active plan.
-
Turn on Developer mode
In ChatGPT open Settings, then Security and login, and switch on Developer mode. This is what lets you add an MCP server that is not yet in the directory.
-
Create the app
Go to Plugins, click Add plugin, choose Create app, then Create MCP App. Name it IssueBadge and paste the server URL:
https://issuebadge-mcp.issuebadge.workers.dev/mcp. Leave Authentication on OAuth, tick the acknowledgement, and click Create. -
Connect your IssueBadge account
Click Connect, then Sign in with IssueBadge. ChatGPT registers itself with our OAuth server and sends you to app.issuebadge.com to approve read and write access. No API key to copy.
-
Ask for a certificate
Start a chat and type something like "Issue the Certificate of Completion to Jane Doe, jane.doe@example.com". ChatGPT lists your templates, issues the certificate, and shows a card with the verification link.
Sharing it with your team
Each person adds the server to their own ChatGPT with the four steps above and signs in with their own IssueBadge login, so certificates stay in their own account. ChatGPT Business and Enterprise admins can add the server once for the whole workspace. We have submitted IssueBadge to the ChatGPT app directory; once it is approved, adding it becomes a single click with no Developer mode.
How do I connect Claude, Cursor or VS Code?
These clients take an API key. Get yours at app.issuebadge.com, Developer, API key, then paste one of the snippets below.
Claude Code
claude mcp add --transport http issuebadge https://issuebadge-mcp.issuebadge.workers.dev/mcp \
--header "Authorization: Bearer YOUR_ISSUEBADGE_API_KEY"
Cursor
Settings, MCP, Add server.
{
"mcpServers": {
"issuebadge": {
"type": "streamable-http",
"url": "https://issuebadge-mcp.issuebadge.workers.dev/mcp",
"headers": { "Authorization": "Bearer YOUR_ISSUEBADGE_API_KEY" }
}
}
}
VS Code (Copilot agent mode)
Save as .vscode/mcp.json in your workspace.
{
"servers": {
"issuebadge": {
"type": "http",
"url": "https://issuebadge-mcp.issuebadge.workers.dev/mcp",
"headers": { "Authorization": "Bearer YOUR_ISSUEBADGE_API_KEY" }
}
}
}
Claude Desktop or any local (stdio) client
Runs the open-source package on your machine and adds a create_badge tool for making new templates.
{
"mcpServers": {
"issuebadge": {
"command": "npx",
"args": ["-y", "issuebadge-mcp-server"],
"env": { "ISSUEBADGE_API_KEY": "YOUR_ISSUEBADGE_API_KEY" }
}
}
}
How do I connect from any other MCP client?
Any client that speaks MCP over HTTP can use the hosted server at https://issuebadge-mcp.issuebadge.workers.dev/mcp. There are two ways to authenticate. Pick the one your client supports.
Way 1: sign in with OAuth 2.1 (no key)
Add the server with just the URL and no Authorization header. The client discovers the IssueBadge sign-in on its own, opens the login page, and you approve the read and write scopes once. The token it receives is tied to that client and can be revoked under Business tools, OAuth clients.
Works in ChatGPT, Claude.ai, Claude Desktop, Claude Code, Cursor, VS Code and any client built on the MCP SDKs.
Way 2: API key
Send your key as a bearer token in the Authorization header of every request. Get the key at app.issuebadge.com, Developer, API key. Best for scripts, CI jobs and clients that cannot open a browser.
The snippets in the section above use this way.
What happens during the OAuth sign-in
Your client does all of this automatically. It is listed so you can check it against your own implementation.
- The client calls the MCP URL without a token and gets a 401 whose
WWW-Authenticateheader points to/.well-known/oauth-protected-resourceon the server. - That document names the authorization server,
https://app.issuebadge.com, and the scopesreadandwrite. - The client reads
https://app.issuebadge.com/.well-known/oauth-authorization-serverto find the authorize, token and register endpoints. PKCE with S256 is required. - The client registers itself with one POST to
/oauth/register(dynamic client registration) and receives a client id. No manual app setup. - It opens the authorize URL in your browser. You sign in to IssueBadge and approve the consent screen.
- It exchanges the returned code for an access token at
/oauth/token. Access tokens last one year and refresh tokens two. - Every MCP request now carries that token as a bearer. The server forwards it to app.issuebadge.com and stores nothing.
Claude Code, with OAuth
Add the server without a header, then run /mcp inside Claude Code and choose IssueBadge to sign in.
claude mcp add --transport http issuebadge https://issuebadge-mcp.issuebadge.workers.dev/mcp
Cursor, VS Code or any JSON-configured client, with OAuth
Same as the API key snippets, minus the headers. The client asks you to sign in the first time it connects.
{
"mcpServers": {
"issuebadge": {
"type": "streamable-http",
"url": "https://issuebadge-mcp.issuebadge.workers.dev/mcp"
}
}
}
Building your own client or agent
The official MCP SDKs for TypeScript and Python ship an OAuth client provider that performs the steps above when you give it the server URL and a redirect URL for your app. If you would rather hold a key, send Authorization: Bearer YOUR_ISSUEBADGE_API_KEY on each request instead. You can confirm both discovery documents from a terminal:
curl https://issuebadge-mcp.issuebadge.workers.dev/.well-known/oauth-protected-resource
curl https://app.issuebadge.com/.well-known/oauth-authorization-server
Which tools can the assistant call?
| Tool | Input | Returns |
|---|---|---|
| validate_key | none | Whether the credentials are valid |
| get_all_badges | limit (optional) | Your badge templates with id, name and description |
| issue_badge | badge_id, name, email, optional phone, idempotency_key, metadata | issue_id and the public certificate_url; the recipient is emailed |
| create_badge (local only) | name, description, issuing_organization_name, optional logo and custom fields | The new badge template |
Each issue_badge call with a new idempotency_key issues a new certificate; the server generates one if you leave it out. A reused key is rejected, so a retried call never issues twice. The tools carry read-only and non-destructive annotations, which is how ChatGPT decides when to ask before running them.
Frequently asked questions
Is my API key or login stored on the MCP server?
No. The hosted server is stateless. Your API key or OAuth token travels in the Authorization header of each request, is forwarded to app.issuebadge.com, and is never stored or logged. Requests without credentials get a 401.
Do I need an API key to use the MCP server?
No. Add the server URL without a header and your client opens the IssueBadge sign-in, using OAuth 2.1 with PKCE and dynamic client registration. An API key in the Authorization header is the alternative for scripts and clients that cannot open a browser.
Does the MCP server cost anything?
The server is free and open source under the MIT license. Certificates you issue through it count toward your IssueBadge plan like any other issue, and issuing needs an active plan. See the pricing page for plan limits.
Which data leaves my machine?
Only what the tools need: your credentials, the badge id, and the recipient name, email and optional phone. The only host the server contacts is app.issuebadge.com.
Can I run the IssueBadge MCP server locally?
Yes. Run npx issuebadge-mcp-server with your key in the ISSUEBADGE_API_KEY environment variable. The local version adds a create_badge tool for making new templates.
Can I self-host the remote server?
Yes. The Cloudflare Worker source is in the GitHub repository. Deploy it to your own account with wrangler deploy and point your client at your URL. The AUTH_SERVER variable tells OAuth clients where to sign in.
What if ChatGPT asks which IssueBadge account to use?
That happens when you connected twice. Open the app in Settings, Plugins, and disconnect the duplicate account. Answering "Primary" also works.
Last updated 10 October 2026. Written by the IssueBadge engineering team, who built and run the server. Questions: contact us or see pricing.
Your certificates, one prompt away
Add the server to ChatGPT or paste one snippet into Claude, Cursor or VS Code.
Get your API key