Thunder Client License Manager MCP Server
Serves as the runtime environment for the MCP server, enabling the execution of the Thunder Client license management functionality.
Package manager used for installing dependencies and running the MCP server through commands like 'npx'.
Used for implementing the MCP server with type safety, providing a more robust development experience for the Thunder Client license management tools.
Click on "Deploy 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., "@Thunder Client License Manager MCP Serveradd licenses for alice@company.com and bob@company.com"
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.
Thunder Client License Manager MCP Server
An MCP (Model Context Protocol) server that provides tools for managing Thunder Client licenses through their API.
Features
Add licenses: Add Thunder Client licenses for specified email addresses
Get licenses: Retrieve license information with automatic pagination
Remove licenses: Remove Thunder Client licenses for specified email addresses
Related MCP server: Istek MCP Server
Requirements
Node.js 20+ (LTS)
TypeScript
Thunder Client API access
Installation
Clone this repository
Install dependencies:
npm installBuild the project:
npm run build
Environment Variables
Before using the MCP server, you need to set the following environment variables:
TC_API_KEY: Your Thunder Client API key (sent as 'api-key' header)TC_ACCOUNT_NUMBER: Your Thunder Client account numberTC_BASE_URL: (Optional) Base URL for Thunder Client API (defaults to 'https://www.thunderclient.com')
Example Environment Setup
export TC_API_KEY="your-api-key-here"
export TC_ACCOUNT_NUMBER="your-account-number"
export TC_BASE_URL="https://www.thunderclient.com" # optionalMCP Configuration
Add the server to your MCP settings configuration:
For Cline/Claude Desktop
Add to your cline_mcp_settings.json or Claude Desktop configuration:
{
"mcpServers": {
"thunderclient-license-manager": {
"command": "npx",
"args": ["-y", "/path/to/thunderclient-license-manager-mcp"],
"env": {
"TC_API_KEY": "your-api-key-here",
"TC_ACCOUNT_NUMBER": "your-account-number-here"
}
}
}
}For other MCP clients
Use the stdio transport with npx:
npx -y .Available Tools
1. thunderclient_add_license
Add Thunder Client licenses for specified email addresses.
Parameters:
emails(required): Array of email addresses to add licenses for
Example:
{
"emails": ["user1@example.com", "user2@example.com"]
}2. thunderclient_get_licenses
Get Thunder Client licenses with smart pagination.
Parameters:
pageNumber(optional): Specific page to fetch. If omitted, fetches ALL pages automatically
Example - Get all licenses:
{}Example - Get specific page:
{
"pageNumber": 2
}3. thunderclient_remove_license
Remove Thunder Client licenses for specified email addresses.
Parameters:
emails(required): Array of email addresses to remove licenses for
Example:
{
"emails": ["user1@example.com", "user2@example.com"]
}API Response Format
All tools return responses in the following format:
{
"success": true/false,
"data": { /* API response data */ },
"message": "Success/error message",
"error": "Error details (if success is false)"
}Special Response for thunderclient_get_licenses without pageNumber
When fetching all pages, the response includes:
{
"success": true,
"data": {
"licenses": [ /* Combined licenses from all pages */ ],
"totalPages": 5,
"totalCount": 150,
"pagesFetched": 5
},
"message": "Retrieved 150 licenses across 5 page(s)"
}Development
Scripts
npm run build: Compile TypeScript to JavaScriptnpm run dev: Watch mode for developmentnpm start: Run the compiled server
Project Structure
src/
├── index.ts # Main MCP server implementation
├── api-client.ts # Thunder Client API wrapper
└── types.ts # TypeScript type definitionsError Handling
The server includes comprehensive error handling:
Environment variable validation
API request/response error handling
Input validation for required parameters
Proper MCP error codes and messages
License
MIT
Contributing
Fork the repository
Create a feature branch
Make your changes
Add tests if applicable
Submit a pull request
Support
For issues related to the Thunder Client API, refer to their documentation. For MCP server issues, please create an issue in this repository.
Available Tools
3 toolsthunderclient_add_licenseC
Add Thunder Client licenses for specified email addresses
| Name | Required | Description | Default |
|---|---|---|---|
| emails | Yes | Array of email addresses to add licenses for |
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 of behavioral disclosure. It states 'Add Thunder Client licenses', implying a write operation, but doesn't cover permissions required, whether it's idempotent, rate limits, error handling, or what happens on success (e.g., confirmation details). For a mutation tool with zero annotation coverage, this leaves significant gaps in understanding its behavior.
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 a single, clear sentence with no wasted words, directly stating the tool's function. It's appropriately sized and front-loaded, making it easy to understand at a glance without unnecessary elaboration.
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 is a mutation (adding licenses) with no annotations and no output schema, the description is incomplete. It doesn't explain what the tool returns, error conditions, or behavioral traits like side effects. For a tool that modifies state, more context is needed to ensure safe and correct usage, making this inadequate for its complexity.
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 schema description coverage is 100%, with the 'emails' parameter fully documented in the schema as an array of email addresses with a minimum of 1 item. The description adds no additional parameter semantics beyond implying the emails are for license assignment. Since the schema does the heavy lifting, the baseline score of 3 is appropriate, as the description doesn't compensate or add value beyond the schema.
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 ('Add') and resource ('Thunder Client licenses') with the target ('specified email addresses'), making the purpose evident. It distinguishes from sibling tools like 'thunderclient_get_licenses' (read) and 'thunderclient_remove_license' (delete), but doesn't explicitly differentiate beyond the verb. The specificity is good but lacks explicit sibling comparison.
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 like 'thunderclient_get_licenses' or 'thunderclient_remove_license'. It doesn't mention prerequisites, such as whether licenses are available or if users must exist, nor does it specify scenarios like bulk onboarding. Without such context, usage is implied but not clearly defined.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
thunderclient_get_licensesA
Get Thunder Client licenses. If pageNumber is not provided, fetches all pages automatically.
| Name | Required | Description | Default |
|---|---|---|---|
| pageNumber | No | Specific page number to fetch (optional, fetches all pages if omitted) |
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 useful context about the automatic pagination behavior when pageNumber is not provided, which isn't obvious from the schema. However, it doesn't cover other aspects like rate limits, authentication needs, or response format, leaving gaps for a tool with no annotation support.
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 extremely concise—just two sentences—with zero wasted words. It front-loads the core purpose and efficiently explains the key behavioral nuance regarding pagination, making it easy for an agent to parse quickly.
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 low complexity (1 optional parameter, no output schema, no annotations), the description is adequate but not complete. It covers the main functionality and pagination behavior but lacks details on output format, error handling, or integration with sibling tools, which could help an agent use it more effectively.
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 schema description coverage is 100%, so the schema already fully documents the single parameter (pageNumber). The description adds minimal value by restating that omitting pageNumber fetches all pages, which is already implied in the schema's description. This meets the baseline for high schema coverage without significant enhancement.
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 ('Get') and resource ('Thunder Client licenses'), making the purpose immediately understandable. However, it doesn't explicitly differentiate from sibling tools like 'thunderclient_add_license' or 'thunderclient_remove_license' beyond implying this is a read operation versus their write 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 provides implied usage guidance by mentioning the automatic fetching of all pages when pageNumber is omitted, which suggests when to use this parameter. However, it lacks explicit guidance on when to choose this tool over siblings or any prerequisites, leaving the agent to infer based on tool names alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
thunderclient_remove_licenseC
Remove Thunder Client licenses for specified email addresses
| Name | Required | Description | Default |
|---|---|---|---|
| emails | Yes | Array of email addresses to remove licenses for |
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 action ('Remove') but doesn't clarify if this is destructive, requires admin permissions, has side effects (e.g., revoking access), or what happens on success/failure. This leaves critical behavioral traits unspecified 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 a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is front-loaded and appropriately sized, making it easy for an agent to parse quickly.
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 this is a mutation tool with no annotations and no output schema, the description is incomplete. It doesn't address behavioral aspects like permissions, side effects, or return values, leaving significant gaps in understanding how to invoke it correctly and interpret results.
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 schema description coverage is 100%, with the parameter 'emails' fully documented in the schema as an array of email addresses. The description adds no additional semantic context beyond implying the emails are targets for license removal, so it meets the baseline of 3 without compensating for gaps.
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 ('Remove') and resource ('Thunder Client licenses') with the target ('for specified email addresses'), making the purpose unambiguous. However, it doesn't explicitly differentiate from its sibling 'thunderclient_add_license' beyond the verb, missing a direct comparison that would elevate it to a 5.
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 like 'thunderclient_add_license' or 'thunderclient_get_licenses'. It lacks context about prerequisites, such as whether licenses must exist or if this is for revoking access, leaving the agent without usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v1.0.0- First observed
thunderclient_add_license - First observed
thunderclient_get_licenses - First observed
thunderclient_remove_license
TDQS
Scored across 3 tools
Each tool has a clearly distinct purpose: add, get, and remove licenses. The actions (add, get, remove) are mutually exclusive and target the same resource (licenses), leaving no room for confusion or overlap.
All tools follow a consistent verb_noun pattern with the prefix 'thunderclient_' and use clear action verbs (add, get, remove) followed by the noun 'license'. There are no deviations in style or convention.
Three tools are appropriate for a license manager, covering core CRUD operations (add, get, remove). It is slightly under-scoped as it lacks an update tool, but the count is reasonable for the domain.
The tool set covers the essential lifecycle of license management: create (add), read (get), and delete (remove). A minor gap exists with no update tool for modifying existing licenses, but agents can work around this by removing and re-adding.
Maintenance
Related MCP Connectors
Manage brainCloud apps, cloud code, hooks and servers; API lookups to help generate client code.
Manage a Plumail email workspace: subscribers, segments, campaigns, transactional sends and stats.
Tailscale device, route, DNS, key, user, and ACL management over MCP and CLI.
Manage Cronitor monitors and send telemetry pings — list, inspect, create, update, delete.
Related MCP Servers
- AlicenseBqualityDmaintenanceProvides tools to manage OpenAI API keys and spending through the OpenAI API. Requires an OpenAI admin API key for secure access to account management features.2MIT
- FlicenseNot gradedqualityNot gradedmaintenanceEnables AI assistants to interact with Istek API Client for managing workspaces, collections, environments, variables, and request history. Allows natural language control of API development workflows including creating collections, adding requests, and managing environment configurations.-
- AlicenseBqualityDmaintenanceEnables interaction with Linear's API to manage issues, projects, and teams. Supports creating, updating, searching, and deleting issues, along with project management and team operations through API key authentication.13210 npmMIT
- AlicenseBqualityDmaintenanceEnables AI tools like Cline to manage Linear issues, projects, and teams via the Linear API.241,397 npm2MIT