An MCP (Model Context Protocol) server that enables AI assistants like Claude to manage software licenses through natural language commands.
This MCP server connects Claude Desktop to the ExisOne software licensing platform. Once configured, you can manage licenses using natural language:
- "List all my products" - View your product catalog
- "Show me all licenses" - List all license keys
- "Generate a license for customer@email.com for MyProduct" - Create new keys
- "Get details for license XXXX-XXXX-XXXX-XXXX" - View specific license info
No more clicking through dashboards - just ask Claude.
git clone https://github.com/exisllc/exisone-mcp.git
cd exisone-mcp
npm install
npm run build- Log in to ExisOne
- Go to Access Tokens in the sidebar
- Click Create Token
- Name it "MCP Server" and select permissions:
generate,verify - Copy the token (format:
exo_at_xxx_yyy) - shown only once!
Edit your Claude Desktop config file:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows example:
{
"mcpServers": {
"exisone": {
"command": "node",
"args": ["C:\\Users\\YOURNAME\\exisone-mcp\\dist\\index.js"],
"env": {
"EXISONE_API_URL": "https://www.exisone.com",
"EXISONE_ACCESS_TOKEN": "exo_at_YOUR_PUBLIC_ID_YOUR_SECRET",
"EXISONE_TENANT_ID": "1"
}
}
}
}macOS/Linux example:
{
"mcpServers": {
"exisone": {
"command": "node",
"args": ["/Users/yourname/exisone-mcp/dist/index.js"],
"env": {
"EXISONE_API_URL": "https://www.exisone.com",
"EXISONE_ACCESS_TOKEN": "exo_at_YOUR_PUBLIC_ID_YOUR_SECRET",
"EXISONE_TENANT_ID": "1"
}
}
}
}Replace:
- The path with the actual path where you cloned the repo (use
\\for Windows,/for macOS/Linux) EXISONE_ACCESS_TOKENwith your actual tokenEXISONE_TENANT_IDwith your tenant ID (visible in dashboard settings)
Important: You must fully quit Claude Desktop - closing the window is not enough as it continues running in the background.
- Windows: Right-click the Claude icon in the system tray → Quit, or use Task Manager to end the "Claude" process
- macOS: Right-click the dock icon → Quit, or use Cmd+Q
Reopen Claude Desktop and go to Settings → Developer to verify the ExisOne server appears in the list.
| Tool | Description | Parameters |
|---|---|---|
list_products |
List all products for your tenant | None |
list_licenses |
List licenses with optional filters | productId, productName, activeOnly |
generate_license |
Generate a new activation key | productName (required), email (required), validityDays, planId |
get_license |
Get detailed license information | activationKey (required) |
List products:
"What products do I have in ExisOne?"
Generate a license:
"Create a 30-day license for john@example.com for MyApp Pro"
Check a license:
"Show me the details for license ABCD-1234-EFGH-5678"
Filter licenses:
"List all active licenses for MyApp"
| Environment Variable | Required | Description |
|---|---|---|
EXISONE_API_URL |
Yes | API URL (must be HTTPS). Default: https://www.exisone.com |
EXISONE_ACCESS_TOKEN |
Yes | Your API token in format exo_at_{publicId}_{secret} |
EXISONE_TENANT_ID |
Yes | Your tenant identifier |
EXISONE_TIMEOUT |
No | Request timeout in ms (default: 30000) |
- Token Security: Store your access token securely. Never commit it to version control.
- HTTPS Required: The MCP server validates that the API URL uses HTTPS.
- Permission Scope: The server inherits permissions from your access token. Only grant needed permissions.
- Tenant Isolation: Each token is scoped to a specific tenant.
Claude Desktop runs in the background even after closing the window. You must fully quit it:
- Windows: Open Task Manager (Ctrl+Shift+Esc), find "Claude" and click "End Task"
- Alternative: Right-click the Claude icon in the system tray (bottom-right corner) → Quit
- Then reopen Claude Desktop
- Go to Settings → Developer to check if the server is listed
- Verify your config file path is correct for your OS
- Check that the path to
dist/index.jsis absolute and correct - Make sure Claude Desktop is fully quit (not running in background) before restarting
- Check Claude Desktop logs for error messages
Make sure all three environment variables are set in your Claude config:
EXISONE_API_URLEXISONE_ACCESS_TOKENEXISONE_TENANT_ID
- Verify your access token is correct and not expired
- Check that the token has the required permissions (
generate,verify) - Ensure the tenant ID matches your account
# Install dependencies
npm install
# Build TypeScript
npm run build
# Watch mode for development
npm run dev
# Type check without building
npm run typecheckexisone-mcp/
├── src/
│ ├── index.ts # Entry point with stdio transport
│ ├── server.ts # MCP server setup
│ ├── config.ts # Environment configuration
│ ├── api/
│ │ ├── client.ts # HTTP client for ExisOne API
│ │ └── types.ts # TypeScript interfaces
│ └── tools/
│ ├── index.ts # Tool registry
│ ├── list-products.ts
│ ├── list-licenses.ts
│ ├── generate-license.ts
│ └── get-license.ts
├── dist/ # Compiled JavaScript
├── package.json
├── tsconfig.json
└── README.md
- Create a new file in
src/tools/(e.g.,deactivate-license.ts) - Define the tool schema with name, description, and inputSchema
- Implement the handler function
- Register in
src/tools/index.ts
Example:
export const myTool = {
name: "my_tool",
description: "What the tool does",
inputSchema: {
type: "object" as const,
properties: {
param1: { type: "string", description: "..." }
},
required: ["param1"]
}
};
export async function handleMyTool(args, client) {
// Implementation
return { content: [{ type: "text", text: "Result" }] };
}MIT License - see LICENSE file for details.