Skip to main content
Glama

IssueBadge MCP Server

npm version License: MIT TypeScript MCP

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

  1. Clone the repository

    git clone https://github.com/issuebadge/mcp-server.git
    cd mcp-server
  2. Install dependencies

    npm install
  3. Configure environment

    cp .env.example .env
    # Edit .env with your IssueBadge API credentials
  4. Build the project

    npm run build
  5. Test 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

  1. Create a new Custom GPT in ChatGPT

  2. Import the OpenAPI specification from your IssueBadge instance

  3. Configure Bearer token authentication with your API key

  4. 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 name

  • description (string, required): Badge description

  • issuing_organization_name (string, required): Organization name

  • idempotency_key (string, required): Unique identifier

  • custom_fields (array, optional): Custom field definitions

  • And 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 creation

  • name (string, required): Recipient's full name

  • idempotency_key (string, required): Unique identifier

  • email (string, optional): Recipient's email

  • metadata (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: 5

Batch 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 format

Project 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:

  1. Fork the repository

  2. Create a feature branch: git checkout -b feature/amazing-feature

  3. Commit your changes: git commit -m 'Add amazing feature'

  4. Push to the branch: git push origin feature/amazing-feature

  5. Open 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

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 URL

2. Connection Timeout

# Check network connectivity
# Verify IssueBadge service status
# Increase REQUEST_TIMEOUT in .env

3. Badge Creation Errors

# Verify required fields are provided
# Check idempotency key uniqueness
# Validate organization permissions

📈 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 tools
create_badgeB

Create a new badge template with optional custom fields and branding. This badge can then be issued to recipients.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesBadge name (e.g., "Web Development Certificate")
descriptionYesBadge description (e.g., "Awarded for completing the full-stack web development course")
issuing_organization_nameYesName of the issuing organization (e.g., "Tech Academy")
idempotency_keyYesUnique key to prevent duplicate badge creation (e.g., "badge_webdev_2024_001")
nicknameNoOptional badge nickname or short name
left_panel_descriptionNoAdditional description for the left panel of the certificate
organization_idNoExisting organization ID (optional, will create new organization if not provided)
commentNoAdditional comments or notes about the badge
expire_dateNoBadge expiration date in YYYY-MM-DD format (optional)
badge_logo_pathNoPath to badge logo file (jpeg,png,jpg,gif,svg, max 2MB)
custom_fieldsNoCustom fields for this badge (e.g., completion date, score, instructor)

TDQS

B3.3/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of badges to return (default: 100, max: 100)

TDQS

B3.3/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
badge_idYesEncrypted badge ID from badge creation (get this from get_all_badges or create_badge)
nameYesRecipient's full name (will appear on the certificate)
emailNoRecipient's email address (optional, but recommended for notifications)
phoneNoRecipient's phone number (optional)
idempotency_keyYesUnique key to prevent duplicate issuance (e.g., "issue_john_doe_2024_001")
metadataNoCustom field values and additional metadata (e.g., completion_date, score, etc.)

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
api_keyYesThe API key to validate (usually starts with a number and pipe, e.g., "1|abc123...")

TDQS

A4.2/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

A3.9/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

Latest Blog Posts

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