MCP Server Integration

Enable AI assistants like Claude to manage your software licenses through natural language commands.

AI-Powered License Management: Ask Claude to "generate a license for customer@email.com" or "show me all active licenses" - no manual dashboard navigation required.

What is MCP?

MCP (Model Context Protocol) is a standard that allows AI assistants to interact with external tools and services. The ExisOne MCP Server exposes your license management capabilities as tools that Claude can use directly.

Available Commands

Once configured, you can ask Claude things like:

Setup Instructions

Step 1: Get Your Access Token

  1. Go to Access Tokens in your dashboard
  2. Click Create Token
  3. Name it "MCP Server" and select permissions: generate, verify
  4. Copy the token (format: exo_at_xxx_yyy) - it's only shown once!

Step 2: Install the MCP Server

Clone the ExisOne MCP Server from GitHub and build it:

git clone https://github.com/exisllc/exisone-mcp.git
cd exisone-mcp
npm install
npm run build

Step 3: Configure Claude Desktop

Add the following to your Claude Desktop configuration file:

Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

Windows:

{
  "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_yourpublicid_yoursecret",
        "EXISONE_TENANT_ID": "1"
      }
    }
  }
}

macOS:

{
  "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_yourpublicid_yoursecret",
        "EXISONE_TENANT_ID": "1"
      }
    }
  }
}

Replace the path with where you cloned the repo. Use \\ for Windows paths, / for macOS.

Step 4: Restart Claude Desktop

After saving the configuration, fully quit Claude Desktop. Closing the window is not enough - Claude continues running in the background.

Reopen Claude Desktop and go to Settings → Developer to verify the ExisOne server appears.

AI Prompt for Custom Integration

If you want to build your own MCP integration or extend the server, use this prompt with your AI assistant:

Prompt

You're helping me work with the ExisOne MCP Server for software license management.

CONTEXT
- ExisOne is a software licensing platform with REST API
- The MCP server exposes 4 tools: list_products, list_licenses, generate_license, get_license
- Authentication uses API tokens in format: exo_at_{publicId}_{secret}
- Tenant context is set via X-Tenant header

AVAILABLE MCP TOOLS

1. list_products
   - Description: List all products for the tenant
   - Parameters: None
   - Returns: Array of products with id, name, price, trialDays, defaultLicenseDays

2. list_licenses
   - Description: List all licenses with optional filtering
   - Parameters:
     - productId (optional): Filter by product ID
     - productName (optional): Filter by product name (case-insensitive)
     - activeOnly (optional): Only show active licenses
   - Returns: Array of licenses with activationKey, email, productName, isActive, expirationDate

3. generate_license
   - Description: Generate a new activation key
   - Parameters:
     - productName (required): Product name (must match exactly)
     - email (required): Customer email address
     - validityDays (optional): License duration (0 = perpetual, uses product default if not specified)
     - planId (optional): Plan ID for specific features
   - Returns: activationKey, isCorporate, maxSeats, isOffline

4. get_license
   - Description: Get detailed license information
   - Parameters:
     - activationKey (required): The license key to look up
   - Returns: Full license details including history

API ENDPOINTS USED BY MCP SERVER
- GET /api/product/ - List products
- GET /api/license/ - List licenses
- POST /api/activationkey/generate - Generate license
- GET /api/license/{key}/history - Get license history

CONFIGURATION
Environment variables required:
- EXISONE_API_URL: API base URL (must be HTTPS)
- EXISONE_ACCESS_TOKEN: API token (exo_at_xxx_yyy format)
- EXISONE_TENANT_ID: Tenant identifier

MCP SERVER STRUCTURE
ExisOne.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

ADDING NEW TOOLS
To add a new tool:
1. Create a new file in src/tools/ (e.g., deactivate-license.ts)
2. Define the tool schema with name, description, and inputSchema
3. Implement the handler function
4. Register in src/tools/index.ts

Example tool structure:
export const myTool = {
  name: "my_tool",
  description: "What the tool does",
  inputSchema: {
    type: "object",
    properties: {
      param1: { type: "string", description: "..." }
    },
    required: ["param1"]
  }
};

export async function handleMyTool(args, client) {
  // Implementation
  return { content: [{ type: "text", text: "Result" }] };
}

EXTENDING THE API CLIENT
Add new methods to src/api/client.ts:

async myNewMethod(params) {
  return this.request("POST", "/api/endpoint", params);
}

Please help me with the following task related to the ExisOne MCP Server:

Tools Reference

Tool Description Required Params
list_products List all products for the tenant None
list_licenses List licenses with optional filters None (optional: productId, productName, activeOnly)
generate_license Generate a new activation key productName, email
get_license Get license details and history activationKey

Security Notes

Troubleshooting

This is the most common issue! Claude Desktop runs in the background even after closing the window.
  • 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) → 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.js is 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_URL
  • EXISONE_ACCESS_TOKEN
  • EXISONE_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

See Also