Minimal standalone MCP server for Freemius product data over stdio.
It exposes exactly three tools:
list_siteslist_subscriptionslist_event_logs
This server is not tied to any single product or app. You can set a default FREEMIUS_PRODUCT_ID for convenience, then override product_id per tool call to use the same server across multiple Freemius products.
- Node.js 20+
- A Freemius bearer token
npm installRequired:
FREEMIUS_BEARER_TOKEN
Optional:
FREEMIUS_PRODUCT_ID- Default product ID used when a tool call does not include
product_id
- Default product ID used when a tool call does not include
FREEMIUS_API_BASE- Defaults to
https://api.freemius.com/v1
- Defaults to
Example:
export FREEMIUS_BEARER_TOKEN=your_token_here
export FREEMIUS_PRODUCT_ID=1234Build:
npm run buildStart the stdio MCP server:
npm startFor local development:
npm run devCodex-style example:
{
"mcpServers": {
"freemius": {
"command": "node",
"args": ["/absolute/path/to/freemius-mcp/dist/server.js"],
"env": {
"FREEMIUS_BEARER_TOKEN": "your_token_here",
"FREEMIUS_PRODUCT_ID": "1234"
}
}
}
}Claude Desktop-style example:
{
"mcpServers": {
"freemius": {
"command": "node",
"args": ["/absolute/path/to/freemius-mcp/dist/server.js"],
"env": {
"FREEMIUS_BEARER_TOKEN": "your_token_here",
"FREEMIUS_PRODUCT_ID": "1234"
}
}
}
}Lists installs for a Freemius product.
Arguments:
product_idoptional stringcountoptional integer,1..50offsetoptional integer,>= 0searchoptional stringis_activeoptional booleanplan_idoptional positive integerfieldsoptional comma-separated string
Example call:
{
"name": "list_sites",
"arguments": {
"count": 10,
"is_active": true
}
}Cross-product example:
{
"name": "list_sites",
"arguments": {
"product_id": "9876",
"count": 5
}
}Lists subscriptions for a Freemius product.
Arguments:
product_idoptional stringcountoptional integer,1..50offsetoptional integer,>= 0searchoptional stringfilteroptional enum:all,active,cancelledbilling_cycleoptional enum:0,1,12gatewayoptional enum:paypal,stripeplan_idoptional positive integerfieldsoptional comma-separated string
Example call:
{
"name": "list_subscriptions",
"arguments": {
"filter": "active",
"billing_cycle": 12,
"count": 10
}
}Lists event logs for either an install or a user.
Arguments:
product_idoptional stringinstall_idoptional positive integeruser_idoptional positive integercountoptional integer,1..50offsetoptional integer,>= 0fieldsoptional comma-separated string
Validation:
- Provide exactly one of
install_idoruser_id
Example call by install:
{
"name": "list_event_logs",
"arguments": {
"install_id": 4321,
"count": 20
}
}Example call by user with a product override:
{
"name": "list_event_logs",
"arguments": {
"product_id": "9876",
"user_id": 2468,
"offset": 20
}
}npm testThe tests cover:
- default product ID usage
- per-call
product_idoverrides - event log endpoint selection
- validation failures
- Freemius API error handling
- If
FREEMIUS_PRODUCT_IDis unset, each tool call must includeproduct_id - This server is designed for reuse across multiple Freemius products from one MCP server instance
- Freemius installation listing docs: https://docs.freemius.com/api/installations/list-installs
- Freemius subscriptions docs: https://docs.freemius.com/api/subscriptions