IssueBadge MCP Server
Uses .env files for configuration management, allowing customization of API credentials and server settings.
Enables integration with GitHub for issue tracking, discussions, and reporting bugs for the MCP server through GitHub Issues and GitHub Discussions.
Supports Laravel Sanctum authentication for secure API communication with the IssueBadge platform.
Built on Node.js runtime, allowing for deployment in Node.js environments with version 18+ required.
Available as an npm package for easy installation and dependency management with npm version 8+ required.
Uses TypeScript for type-safe implementation, providing better code quality and developer experience when extending or modifying the MCP server.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@IssueBadge MCP ServerCreate a Python certification badge for completing our data science course"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
IssueBadge MCP Server
A Model Context Protocol (MCP) server for interacting with the IssueBadge API. This server enables AI assistants like Claude and ChatGPT to manage digital badges and certificates using natural language.
🌟 Features
🤖 AI-Powered Badge Management: Use natural language to create, issue, and manage badges
🔐 Dual Authentication: Support for both Laravel Sanctum and OAuth2
🏆 Complete Badge Lifecycle: Create templates, issue to recipients, and verify authenticity
📊 Multi-tenant Support: Secure tenant isolation for enterprise use
🛡️ Idempotency Protection: Prevent duplicate operations with built-in safeguards
📧 Automated Notifications: Automatic email delivery with verification URLs
🎨 Custom Fields: Flexible metadata and custom field support
Related MCP server: Command Executor MCP Server
🚀 Quick Start
Prerequisites
Node.js 18+
npm 8+
IssueBadge API account with API key
Installation
Clone the repository
git clone https://github.com/issuebadge/mcp-server.git cd mcp-serverInstall dependencies
npm installConfigure environment
cp .env.example .env # Edit .env with your IssueBadge API credentialsBuild the project
npm run buildTest the server
npm test
⚙️ Configuration
Create a .env file based on .env.example:
# API Configuration
ISSUEBADGE_BASE_URL=https://app.issuebadge.com/api/v1
ISSUEBADGE_API_KEY=
# OAuth2 Configuration (Alternative)
ISSUEBADGE_OAUTH_URL=https://app.issuebadge.com/api/v1/oauth
ISSUEBADGE_OAUTH_TOKEN=your_oauth_token_here
# Authentication Method (sanctum or oauth2)
AUTH_METHOD=sanctum
# Server Configuration
MCP_SERVER_NAME=IssueBadge MCP Server
MCP_SERVER_VERSION=1.0.0
# Optional Settings
REQUEST_TIMEOUT=30000
DEBUG=false
MAX_RETRIES=3
RETRY_DELAY=1000🔧 Integration
Claude Desktop
Add this server to your Claude Desktop configuration:
{
"mcpServers": {
"issuebadge": {
"command": "node",
"args": ["/absolute/path/to/mcp-server/dist/index.js"],
"env": {
"ISSUEBADGE_BASE_URL": "https://app.issuebadge.com
/api/v1",
"ISSUEBADGE_API_KEY": "",
"AUTH_METHOD": "sanctum"
}
}
}
}ChatGPT Actions
Create a new Custom GPT in ChatGPT
Import the OpenAPI specification from your IssueBadge instance
Configure Bearer token authentication with your API key
Start managing badges through conversation!
🛠️ Available Tools
1. validate_key
Validates IssueBadge API keys for authentication.
Parameters:
api_key(string, required): The API key to validate
Example:
"Validate my API key: 1|abcdef123456789..."2. get_all_badges
Retrieves all available badges for the authenticated organization.
Parameters:
limit(number, optional): Maximum badges to return (default: 100)
Example:
"Show me all available badges"
"List the first 50 badges"3. create_badge
Creates a new badge template with optional custom fields.
Parameters:
name(string, required): Badge namedescription(string, required): Badge descriptionissuing_organization_name(string, required): Organization nameidempotency_key(string, required): Unique identifiercustom_fields(array, optional): Custom field definitionsAnd more optional parameters...
Example:
"Create a badge called 'Web Development Certificate' for completing our full-stack course"
"Create a Python certification badge with custom fields for completion date and final score"4. issue_badge
Issues a badge to a recipient with optional metadata.
Parameters:
badge_id(string, required): Badge ID from creationname(string, required): Recipient's full nameidempotency_key(string, required): Unique identifieremail(string, optional): Recipient's emailmetadata(object, optional): Custom field values
Example:
"Issue the Web Development badge to John Doe with email john@example.com"
"Issue Python certification to Alice with completion date today and score 95%"💬 Natural Language Examples
Creating Badges
Human: "Create a badge for JavaScript mastery with fields for completion date and project count"
AI: I'll create a JavaScript mastery badge with the custom fields you specified.
✨ Badge Created Successfully!
🏷️ Badge Name: JavaScript Mastery Certificate
🆔 Badge ID: js_mastery_2024_001
📋 Custom fields: completion_date (date), project_count (number)Issuing Badges
Human: "Issue the JavaScript badge to Sarah Chen with completion date December 1st and 5 projects completed"
AI: I'll issue the JavaScript mastery badge to Sarah Chen with the specified details.
🎉 Badge Issued Successfully!
📧 Recipient: Sarah Chen
🔗 Verification URL: https://yourdomain.com/verify/xyz123
📅 Completion Date: 2024-12-01
📊 Projects: 5Batch Operations
Human: "Create completion badges for all students in my Python course who scored above 85%"
AI: I'll help you create and issue completion badges for high-performing students. First, let me create a Python Course Completion badge, then we can issue it to qualified students.
[Creates badge and processes student list]🏗️ Development
Building from Source
# Clone the repository
git clone https://github.com/issuebadge/mcp-server.git
cd mcp-server
# Install dependencies
npm install
# Build TypeScript
npm run build
# Run in development mode
npm run dev
# Lint code
npm run lint
# Format code
npm run formatProject Structure
mcp-server/
├── src/
│ └── index.ts # Main MCP server implementation
├── dist/ # Compiled JavaScript (generated)
├── .env.example # Environment configuration template
├── package.json # Node.js dependencies and scripts
├── tsconfig.json # TypeScript configuration
└── README.md # This file🔒 Security
All API communications use HTTPS
API keys are validated before each request
Idempotency keys prevent duplicate operations
Multi-tenant data isolation
Request timeout protection
Comprehensive error handling
📊 Error Handling
The MCP server provides detailed error messages for common issues:
Authentication Errors: Invalid API keys or expired tokens
Validation Errors: Missing required parameters or invalid formats
Network Errors: Connection timeouts or service unavailability
Business Logic Errors: Duplicate operations or insufficient permissions
🌍 Use Cases
Educational Institutions
Course Completion: Automatically issue badges when students complete courses
Skill Validation: Create skill-based badges with assessment scores
Graduation Certificates: Bulk issue graduation badges with academic details
Corporate Training
Certification Programs: Manage professional certifications with expiration dates
Compliance Training: Track and verify mandatory training completion
Skill Development: Issue badges for internal skill development programs
Event Management
Conference Attendance: Issue attendance badges for events and workshops
Achievement Tracking: Create progressive badge systems for ongoing programs
Speaker Recognition: Manage speaker and participant recognition badges
🤝 Contributing
We welcome contributions! Please see our contributing guidelines:
Fork the repository
Create a feature branch:
git checkout -b feature/amazing-featureCommit your changes:
git commit -m 'Add amazing feature'Push to the branch:
git push origin feature/amazing-featureOpen a Pull Request
Development Guidelines
Follow TypeScript best practices
Add comprehensive error handling
Include JSDoc comments for functions
Update tests for new features
Follow semantic versioning
📝 License
This project is licensed under the MIT License - see the LICENSE file for details.
🆘 Support
Getting Help
📖 Documentation: Check this README and inline code comments
🐛 Bug Reports: Open an issue
💬 Discussions: GitHub Discussions
📧 Email: support@issuebadge.com
Troubleshooting
Common Issues
1. API Key Validation Failed
# Check API key format (should start with number|)
# Verify the key hasn't expired
# Ensure correct base URL2. Connection Timeout
# Check network connectivity
# Verify IssueBadge service status
# Increase REQUEST_TIMEOUT in .env3. Badge Creation Errors
# Verify required fields are provided
# Check idempotency key uniqueness
# Validate organization permissions🔗 Related Projects
IssueBadge API: Core badge management platform
Model Context Protocol: MCP specification and tools
Claude Desktop: AI assistant with MCP support
📈 Roadmap
Version 1.1
Batch badge operations
Advanced filtering and search
Webhook integration
Badge template management
Version 1.2
Analytics and reporting tools
Custom badge validation rules
Integration with learning management systems
Advanced workflow automation
Version 2.0
Blockchain verification support
Multi-language badge content
Advanced branding customization
Enterprise SSO integration
Ready to revolutionize your badge management? Get started with IssueBadge MCP Server and experience the power of conversational badge administration!
Built with ❤️ by the IssueBadge team
Available Tools
4 toolscreate_badgeB
Create a new badge template with optional custom fields and branding. This badge can then be issued to recipients.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Badge name (e.g., "Web Development Certificate") | |
| description | Yes | Badge description (e.g., "Awarded for completing the full-stack web development course") | |
| issuing_organization_name | Yes | Name of the issuing organization (e.g., "Tech Academy") | |
| idempotency_key | Yes | Unique key to prevent duplicate badge creation (e.g., "badge_webdev_2024_001") | |
| nickname | No | Optional badge nickname or short name | |
| left_panel_description | No | Additional description for the left panel of the certificate | |
| organization_id | No | Existing organization ID (optional, will create new organization if not provided) | |
| comment | No | Additional comments or notes about the badge | |
| expire_date | No | Badge expiration date in YYYY-MM-DD format (optional) | |
| badge_logo_path | No | Path to badge logo file (jpeg,png,jpg,gif,svg, max 2MB) | |
| custom_fields | No | Custom fields for this badge (e.g., completion date, score, instructor) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions the tool creates a badge template with optional fields, but lacks critical behavioral details such as required permissions, whether creation is idempotent (hinted by idempotency_key but not explained), rate limits, or what happens on failure. The description does not contradict annotations since none exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose in the first sentence, and the second sentence adds useful context about subsequent issuance. It is appropriately sized with two sentences and no redundant information, though it could be slightly more structured for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (11 parameters, no annotations, no output schema), the description is incomplete. It lacks details on behavioral traits like permissions or error handling, does not explain the return value or what happens after creation, and relies heavily on the schema for parameter documentation without compensating for missing contextual information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 11 parameters thoroughly. The description adds minimal value by mentioning 'optional custom fields and branding,' which loosely maps to custom_fields and badge_logo_path, but does not provide additional syntax, format, or usage details beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Create a new badge template') and the resource ('badge'), specifying it includes optional custom fields and branding. It distinguishes from siblings by focusing on template creation rather than retrieval (get_all_badges), issuance (issue_badge), or validation (validate_key).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by mentioning the badge can be issued to recipients afterward, which suggests a workflow context. However, it does not explicitly state when to use this tool versus alternatives like issue_badge or get_all_badges, nor does it mention prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_all_badgesB
Retrieve all available badges for the authenticated organization. Returns a list of badges with their IDs and names.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of badges to return (default: 100, max: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It adds some context by specifying that it returns a list with IDs and names, which is useful beyond the input schema. However, it lacks details on authentication requirements, rate limits, pagination, or error handling, leaving gaps for a tool that interacts with organizational data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences that are front-loaded and efficient, with no wasted words. The first sentence states the purpose, and the second adds key behavioral context about the return format, making it appropriately sized and structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter, no output schema, no annotations), the description is adequate but has clear gaps. It explains the return format but doesn't cover authentication, error cases, or how the tool fits into the broader context with sibling tools. For a retrieval tool, this is minimal viable but not fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, with the 'limit' parameter fully documented in the schema. The description does not add any parameter-specific information beyond what the schema provides, such as default behavior or usage tips. This meets the baseline of 3 since the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('Retrieve') and resource ('all available badges for the authenticated organization'), making the purpose unambiguous. It distinguishes from siblings like 'create_badge' and 'issue_badge' by focusing on retrieval rather than creation or issuance. However, it doesn't explicitly differentiate from 'validate_key', which might be a different operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. It doesn't mention when to use 'get_all_badges' over other retrieval methods or tools, nor does it specify any prerequisites or exclusions. The context is implied but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
issue_badgeA
Issue a badge to a recipient. This creates a digital certificate and sends notification email with verification URL.
| Name | Required | Description | Default |
|---|---|---|---|
| badge_id | Yes | Encrypted badge ID from badge creation (get this from get_all_badges or create_badge) | |
| name | Yes | Recipient's full name (will appear on the certificate) | |
| No | Recipient's email address (optional, but recommended for notifications) | ||
| phone | No | Recipient's phone number (optional) | |
| idempotency_key | Yes | Unique key to prevent duplicate issuance (e.g., "issue_john_doe_2024_001") | |
| metadata | No | Custom field values and additional metadata (e.g., completion_date, score, etc.) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses key behavioral traits: creation of a digital certificate and sending of notification emails with verification URLs. However, it doesn't mention permissions needed, rate limits, whether the operation is idempotent (though idempotency_key parameter hints at this), or error handling. The description adds value but leaves gaps for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences that front-load the core purpose and outcomes. Every word earns its place with no redundancy or fluff, making it highly efficient for quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with 6 parameters, no annotations, and no output schema, the description is adequate but incomplete. It covers the main action and outcomes but lacks details on permissions, errors, or return values. Given the complexity and missing structured data, it should provide more behavioral context to be fully helpful.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all 6 parameters thoroughly. The description doesn't add any parameter-specific details beyond what's in the schema (e.g., it doesn't explain badge_id sourcing further or metadata usage). Baseline 3 is appropriate when schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('issue a badge'), the target ('to a recipient'), and the outcomes ('creates a digital certificate and sends notification email with verification URL'). It distinguishes from sibling tools like create_badge (which creates badge definitions) and get_all_badges (which lists badges).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (issuing badges to recipients) but doesn't explicitly state when to use this tool versus alternatives like create_badge. It mentions getting badge_id from get_all_badges or create_badge, which provides some guidance but not explicit when/when-not rules or comparisons to siblings like validate_key.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_keyA
Validate an IssueBadge API key for authentication. Use this to test if your API credentials are working correctly.
| Name | Required | Description | Default |
|---|---|---|---|
| api_key | Yes | The API key to validate (usually starts with a number and pipe, e.g., "1|abc123...") |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool validates API keys for authentication testing, which implies a read-only, non-destructive operation. However, it doesn't disclose important behavioral details like rate limits, error responses, or what specific validation checks are performed (e.g., format validation, authentication against server).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is perfectly concise with two sentences that each earn their place. The first sentence states the purpose and resource, while the second provides explicit usage guidance. There's zero wasted text, and the information is front-loaded with the core functionality.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter authentication validation tool with no output schema, the description provides good context about what the tool does and when to use it. However, it doesn't describe what the validation result looks like (e.g., returns success/failure, error messages) or any prerequisites beyond having an API key. Given the tool's relative simplicity, the description is mostly complete but could benefit from output information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the single parameter 'api_key' well-documented in the schema. The description doesn't add any parameter-specific information beyond what the schema already provides about the API key format and purpose. The baseline score of 3 is appropriate when the schema does the heavy lifting for parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('validate') and resource ('IssueBadge API key') with explicit purpose ('for authentication' and 'test if your API credentials are working correctly'). It distinguishes from siblings like create_badge, get_all_badges, and issue_badge by focusing solely on authentication testing rather than badge operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool: 'Use this to test if your API credentials are working correctly.' This provides clear context for usage (authentication testing) and implicitly distinguishes it from sibling tools that perform badge-related operations rather than credential validation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose: create_badge (template creation), get_all_badges (list retrieval), issue_badge (awarding to recipients), and validate_key (authentication testing). There is no overlap in functionality, making tool selection straightforward for an agent.
All tool names follow a consistent verb_noun pattern (create_badge, get_all_badges, issue_badge, validate_key), using snake_case throughout. This predictability enhances usability and reduces cognitive load for agents.
With 4 tools, the server is well-scoped for its purpose of managing digital badges. Each tool serves a distinct and essential function (create, list, issue, authenticate), with no unnecessary or redundant tools, making the count appropriate.
The tool set covers core CRUD operations for badges (create and list) and key actions (issue and validate), but lacks update and delete capabilities for badges. This minor gap might require workarounds but does not severely hinder basic workflows.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A Model Context Protocol server for Wix AI tools
MCP server for building and testing AI agents with multi-model experimentation and insights.
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA versatile Model Context Protocol server that enables AI assistants to manage calendars, track tasks, handle emails, search the web, and control smart home devices.23
- AlicenseBqualityDmaintenanceA Model Context Protocol server that allows secure execution of pre-approved commands, enabling AI assistants to safely interact with the user's system.1822ISC
- AlicenseNot gradedqualityFmaintenanceA Model Context Protocol server that enables AI assistants to manage meeting data, including creating meeting bots, searching transcripts, and organizing calendar events.30MIT
- AlicenseBqualityDmaintenanceA Model Context Protocol server providing AI assistants with comprehensive project, task, and subtask management capabilities with project-specific storage.293888MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/issuebadge/mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server