matomo-mcp 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,270 @@
1
+ # Matomo MCP Server
2
+
3
+ A Model Context Protocol (MCP) server that provides access to Matomo analytics data through AI assistants like Cursor, Claude Desktop, and Claude Code.
4
+
5
+ ## Features
6
+
7
+ - **Website Analytics**: Get visits, page views, bounce rates, and visitor statistics
8
+ - **Real-time Data**: Access live visitor counters and current activity
9
+ - **Top Pages**: Retrieve most visited pages with detailed metrics
10
+ - **Date Ranges**: Query data for specific periods or date ranges
11
+ - **Secure**: API credentials stored in environment variables
12
+ - **Extensible**: Easy to add more Matomo features as needed
13
+
14
+ ## Available Tools
15
+
16
+ ### `get-visits-summary`
17
+ Get comprehensive website analytics summary including visits, page views, bounce rate, and more.
18
+
19
+ **Parameters:**
20
+ - `period` (optional): Time period - `day`, `week`, `month`, or `year` (default: `day`)
21
+ - `date` (optional): Date - `yesterday`, `today`, `YYYY-MM-DD`, `last7`, `last30`, etc. (default: `yesterday`)
22
+
23
+ ### `get-live-counters`
24
+ Get real-time visitor counters for the last 30 minutes.
25
+
26
+ **Parameters:** None
27
+
28
+ ### `get-top-pages`
29
+ Get the most visited pages on the website.
30
+
31
+ **Parameters:**
32
+ - `period` (optional): Time period - `day`, `week`, `month`, or `year` (default: `day`)
33
+ - `date` (optional): Date - `yesterday`, `today`, `YYYY-MM-DD`, `last7`, `last30`, etc. (default: `yesterday`)
34
+ - `limit` (optional): Maximum number of pages to return (1-100, default: 10)
35
+
36
+ ### `get-visits-summary-range`
37
+ Get website analytics summary for a date range.
38
+
39
+ **Parameters:**
40
+ - `period` (optional): Time period - `day`, `week`, `month`, or `year` (default: `day`)
41
+ - `date` (optional): Date range - `last7`, `last30`, `last90`, etc. (default: `last7`)
42
+
43
+ ## Installation
44
+
45
+ 1. **Clone or download this repository**
46
+ ```bash
47
+ git clone <repository-url>
48
+ cd matomo-mcp
49
+ ```
50
+
51
+ 2. **Install dependencies**
52
+ ```bash
53
+ npm install
54
+ ```
55
+
56
+ 3. **Configure environment variables**
57
+ ```bash
58
+ cp .env.example .env
59
+ ```
60
+
61
+ Edit `.env` with your Matomo credentials:
62
+ ```
63
+ MATOMO_URL=https://your-matomo-instance.com
64
+ MATOMO_API_KEY=your_api_key_here
65
+ MATOMO_SITE_ID=your_site_id
66
+ ```
67
+
68
+ 4. **Build the project**
69
+ ```bash
70
+ npm run build
71
+ ```
72
+
73
+ ## Configuration
74
+
75
+ ### For Cursor
76
+
77
+ 1. Open Cursor settings
78
+ 2. Navigate to MCP Servers configuration
79
+ 3. Add the following configuration:
80
+
81
+ ```json
82
+ {
83
+ "mcpServers": {
84
+ "matomo": {
85
+ "command": "node",
86
+ "args": ["/path/to/matomo-mcp/dist/index.js"],
87
+ "env": {
88
+ "MATOMO_URL": "https://your-matomo-instance.com",
89
+ "MATOMO_API_KEY": "your_api_key_here",
90
+ "MATOMO_SITE_ID": "your_site_id"
91
+ }
92
+ }
93
+ }
94
+ }
95
+ ```
96
+
97
+ ### For Claude Desktop
98
+
99
+ 1. Open Claude Desktop settings
100
+ 2. Navigate to MCP Servers
101
+ 3. Add a new server with the same configuration as above
102
+
103
+ ### For Claude Code CLI
104
+
105
+ Claude Code supports MCP servers through project-level configuration files.
106
+
107
+ **Setup:**
108
+
109
+ 1. Ensure your `.env` file is configured with your Matomo credentials
110
+ 2. The project includes a `.mcp.json` file that references environment variables:
111
+ ```json
112
+ {
113
+ "mcpServers": {
114
+ "matomo": {
115
+ "command": "node",
116
+ "args": ["${PWD}/dist/index.js"],
117
+ "env": {
118
+ "MATOMO_URL": "${MATOMO_URL}",
119
+ "MATOMO_API_KEY": "${MATOMO_API_KEY}",
120
+ "MATOMO_SITE_ID": "${MATOMO_SITE_ID}"
121
+ }
122
+ }
123
+ }
124
+ }
125
+ ```
126
+ 3. When you start Claude Code in this project directory, you'll be prompted to approve the MCP server
127
+ 4. After approval, Claude Code can access your Matomo analytics directly
128
+
129
+ **Verify Configuration:**
130
+ ```bash
131
+ # List configured MCP servers
132
+ claude mcp list
133
+
134
+ # Get details about the Matomo server
135
+ claude mcp get matomo
136
+ ```
137
+
138
+ **Security Note:** The `.mcp.json` file uses environment variable references (`${MATOMO_API_KEY}`) instead of hardcoded values, making it safe to commit to version control. Your actual credentials remain in `.env` which is excluded from git.
139
+
140
+ ## Usage Examples
141
+
142
+ Once configured, you can ask your AI assistant questions like:
143
+
144
+ - "Show me yesterday's website analytics"
145
+ - "What are the top 5 pages from last week?"
146
+ - "How many visitors are currently on the site?"
147
+ - "Give me a summary of visits for the last 7 days"
148
+ - "What's the bounce rate for this month?"
149
+
150
+ ## Development
151
+
152
+ ### Project Structure
153
+
154
+ ```
155
+ matomo-mcp/
156
+ ├── src/
157
+ │ ├── index.ts # Main MCP server implementation
158
+ │ └── matomo-client.ts # Matomo API client wrapper
159
+ ├── config/ # Client configuration examples
160
+ ├── dist/ # Compiled JavaScript (after build)
161
+ ├── .mcp.json # Claude Code CLI configuration (project-level)
162
+ ├── .env # Your credentials (DO NOT commit)
163
+ ├── .env.example # Environment variables template
164
+ ├── claude.md # Claude-specific integration guide
165
+ └── README.md # This file
166
+ ```
167
+
168
+ ### Adding New Tools
169
+
170
+ To add new Matomo features:
171
+
172
+ 1. **Add API method to MatomoClient** (`src/matomo-client.ts`):
173
+ ```typescript
174
+ async getNewFeature(params: any): Promise<NewFeatureData> {
175
+ return this.makeApiCall<NewFeatureData>('NewModule.getMethod', params);
176
+ }
177
+ ```
178
+
179
+ 2. **Add tool definition** in `src/index.ts`:
180
+ ```typescript
181
+ {
182
+ name: 'get-new-feature',
183
+ description: 'Description of the new feature',
184
+ inputSchema: {
185
+ type: 'object',
186
+ properties: {
187
+ // Define parameters
188
+ },
189
+ },
190
+ }
191
+ ```
192
+
193
+ 3. **Add tool handler** in the `CallToolRequestSchema` handler:
194
+ ```typescript
195
+ case 'get-new-feature': {
196
+ const data = await this.matomoClient.getNewFeature(args);
197
+ return {
198
+ content: [{
199
+ type: 'text',
200
+ text: formatData(data),
201
+ }],
202
+ };
203
+ }
204
+ ```
205
+
206
+ ### Building and Testing
207
+
208
+ ```bash
209
+ # Build the project
210
+ npm run build
211
+
212
+ # Run in development mode
213
+ npm run dev
214
+
215
+ # Run the built server
216
+ npm start
217
+ ```
218
+
219
+ ## Security
220
+
221
+ - API credentials are stored in environment variables
222
+ - Never commit `.env` files to version control
223
+ - Use HTTPS for your Matomo instance
224
+ - Consider using read-only API keys for security
225
+
226
+ ## Troubleshooting
227
+
228
+ ### Common Issues
229
+
230
+ 1. **"Missing required environment variables"**
231
+ - Ensure `.env` file exists and contains all required variables
232
+ - Check that variable names match exactly
233
+
234
+ 2. **"Matomo API error: 401"**
235
+ - Verify your API key is correct
236
+ - Check that the API key has proper permissions
237
+
238
+ 3. **"Matomo API error: 404"**
239
+ - Verify your Matomo URL is correct
240
+ - Ensure the site ID exists
241
+
242
+ 4. **Server not starting**
243
+ - Run `npm run build` to compile TypeScript
244
+ - Check that all dependencies are installed
245
+
246
+ ### Debug Mode
247
+
248
+ To enable debug logging, set the environment variable:
249
+ ```bash
250
+ DEBUG=matomo-mcp
251
+ ```
252
+
253
+ ## Contributing
254
+
255
+ 1. Fork the repository
256
+ 2. Create a feature branch
257
+ 3. Make your changes
258
+ 4. Add tests if applicable
259
+ 5. Submit a pull request
260
+
261
+ ## License
262
+
263
+ ISC License - see LICENSE file for details
264
+
265
+ ## Support
266
+
267
+ For issues and questions:
268
+ 1. Check the troubleshooting section above
269
+ 2. Review Matomo API documentation
270
+ 3. Open an issue in this repository
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,314 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js");
5
+ const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js");
6
+ const types_js_1 = require("@modelcontextprotocol/sdk/types.js");
7
+ const matomo_client_js_1 = require("./matomo-client.js");
8
+ class MatomoMCPServer {
9
+ constructor() {
10
+ this.server = new index_js_1.Server({
11
+ name: 'matomo-mcp',
12
+ version: '2.0.0',
13
+ }, {
14
+ capabilities: {
15
+ tools: {},
16
+ },
17
+ });
18
+ this.matomoClient = new matomo_client_js_1.MatomoClient();
19
+ this.setupToolHandlers();
20
+ }
21
+ setupToolHandlers() {
22
+ // Shared schema fragments
23
+ const siteIdParam = {
24
+ type: 'string',
25
+ description: 'Matomo site ID. Use list-sites to see available sites. Defaults to env MATOMO_SITE_ID.',
26
+ };
27
+ const segmentParam = {
28
+ type: 'string',
29
+ description: 'Matomo segment filter (e.g., "customVariableValue1==us-east-1"). See Matomo segment docs for syntax.',
30
+ };
31
+ const periodParam = {
32
+ type: 'string',
33
+ description: 'Time period (day, week, month, year)',
34
+ enum: ['day', 'week', 'month', 'year'],
35
+ default: 'day',
36
+ };
37
+ const dateParam = {
38
+ type: 'string',
39
+ description: 'Date or range (yesterday, today, YYYY-MM-DD, last7, last30, etc.)',
40
+ default: 'yesterday',
41
+ };
42
+ // List available tools
43
+ this.server.setRequestHandler(types_js_1.ListToolsRequestSchema, async () => {
44
+ return {
45
+ tools: [
46
+ {
47
+ name: 'list-sites',
48
+ description: 'List all Matomo sites you have access to, with their IDs and URLs',
49
+ inputSchema: {
50
+ type: 'object',
51
+ properties: {},
52
+ },
53
+ },
54
+ {
55
+ name: 'get-visits-summary',
56
+ description: 'Get website analytics summary — visits, page views, bounce rate, and more. Use date like "yesterday" for a single period or "last7"/"last30" for a daily breakdown over a range.',
57
+ inputSchema: {
58
+ type: 'object',
59
+ properties: {
60
+ period: periodParam,
61
+ date: dateParam,
62
+ site_id: siteIdParam,
63
+ segment: segmentParam,
64
+ },
65
+ },
66
+ },
67
+ {
68
+ name: 'get-live-counters',
69
+ description: 'Get real-time visitor counters for the last 30 minutes',
70
+ inputSchema: {
71
+ type: 'object',
72
+ properties: {
73
+ site_id: siteIdParam,
74
+ segment: segmentParam,
75
+ },
76
+ },
77
+ },
78
+ {
79
+ name: 'get-top-pages',
80
+ description: 'Get the most visited pages on a website',
81
+ inputSchema: {
82
+ type: 'object',
83
+ properties: {
84
+ period: periodParam,
85
+ date: dateParam,
86
+ limit: {
87
+ type: 'number',
88
+ description: 'Maximum number of pages to return',
89
+ default: 10,
90
+ minimum: 1,
91
+ maximum: 100,
92
+ },
93
+ site_id: siteIdParam,
94
+ segment: segmentParam,
95
+ },
96
+ },
97
+ },
98
+ {
99
+ name: 'get-referrers',
100
+ description: 'Get traffic sources — channel overview (Direct, Search, Social, etc.) or campaign breakdown. Set type to "campaigns" to see campaign names and metrics.',
101
+ inputSchema: {
102
+ type: 'object',
103
+ properties: {
104
+ period: periodParam,
105
+ date: dateParam,
106
+ type: {
107
+ type: 'string',
108
+ description: 'Omit for channel overview, set to "campaigns" for campaign breakdown',
109
+ enum: ['campaigns'],
110
+ },
111
+ site_id: siteIdParam,
112
+ segment: segmentParam,
113
+ },
114
+ },
115
+ },
116
+ {
117
+ name: 'get-events',
118
+ description: 'Get event analytics — categories overview or actions within a specific category. Useful for tracking feature adoption, user interactions, and custom events.',
119
+ inputSchema: {
120
+ type: 'object',
121
+ properties: {
122
+ period: periodParam,
123
+ date: dateParam,
124
+ category: {
125
+ type: 'string',
126
+ description: 'Event category to drill into (e.g., "Chat", "UI v2", "Feature"). Omit to see all categories.',
127
+ },
128
+ site_id: siteIdParam,
129
+ segment: segmentParam,
130
+ },
131
+ },
132
+ },
133
+ ],
134
+ };
135
+ });
136
+ // Handle tool calls
137
+ this.server.setRequestHandler(types_js_1.CallToolRequestSchema, async (request) => {
138
+ const { name, arguments: args } = request.params;
139
+ const a = (args || {});
140
+ try {
141
+ switch (name) {
142
+ case 'list-sites': {
143
+ const sites = await this.matomoClient.listSites();
144
+ let text = '## Available Matomo Sites\n\n';
145
+ sites.forEach((site) => {
146
+ text += `- **Site ${site.idsite}**: ${site.name} — ${site.main_url}\n`;
147
+ });
148
+ return { content: [{ type: 'text', text }] };
149
+ }
150
+ case 'get-visits-summary': {
151
+ const period = a.period || 'day';
152
+ const date = a.date || 'yesterday';
153
+ const data = await this.matomoClient.getVisitsSummary(period, date, a.site_id, a.segment);
154
+ // Range mode: date like "last7", "last30" returns { "2024-01-01": {...}, ... }
155
+ const isRange = typeof data === 'object' && !('nb_visits' in data);
156
+ if (isRange) {
157
+ const rangeData = data;
158
+ let text = `## Analytics Summary (${period}: ${date})\n\n`;
159
+ for (const [dateKey, dayData] of Object.entries(rangeData)) {
160
+ const uv = dayData.nb_uniq_visitors || dayData.nb_visitors || 0;
161
+ text += `**${dateKey}**: ${dayData.nb_visits.toLocaleString()} visits, ${dayData.nb_actions.toLocaleString()} page views, ${uv.toLocaleString()} unique visitors, ${dayData.bounce_rate} bounce rate\n`;
162
+ }
163
+ return { content: [{ type: 'text', text }] };
164
+ }
165
+ // Single period mode
166
+ const d = data;
167
+ const uniqueVisitors = d.nb_uniq_visitors || d.nb_visitors || 0;
168
+ const avgActionsPerVisit = d.nb_actions_per_visit || (d.nb_visits > 0 ? (d.nb_actions / d.nb_visits) : 0);
169
+ const avgVisitDuration = d.avg_time_on_site || (d.nb_visits > 0 ? Math.round(d.sum_visit_length / d.nb_visits) : 0);
170
+ const conversions = d.nb_conversions || d.nb_visits_converted || 0;
171
+ const revenue = d.revenue || 0;
172
+ return {
173
+ content: [{
174
+ type: 'text',
175
+ text: `## Analytics Summary (${period}: ${date})\n\n` +
176
+ `- **Visits**: ${d.nb_visits.toLocaleString()}\n` +
177
+ `- **Page Views**: ${d.nb_actions.toLocaleString()}\n` +
178
+ `- **Unique Visitors**: ${uniqueVisitors.toLocaleString()}\n` +
179
+ `- **Bounce Rate**: ${d.bounce_rate}\n` +
180
+ `- **Avg Actions/Visit**: ${typeof avgActionsPerVisit === 'number' ? avgActionsPerVisit.toFixed(2) : avgActionsPerVisit}\n` +
181
+ `- **Avg Visit Duration**: ${avgVisitDuration}s\n` +
182
+ `- **Conversions**: ${conversions}\n` +
183
+ `- **Revenue**: $${revenue.toFixed(2)}`,
184
+ }],
185
+ };
186
+ }
187
+ case 'get-live-counters': {
188
+ const data = await this.matomoClient.getLiveCounters(a.site_id, a.segment);
189
+ const visitsConverted = data.visitsConverted || data.visits_conv || 0;
190
+ return {
191
+ content: [{
192
+ type: 'text',
193
+ text: `## Live Visitors (Last 30 min)\n\n` +
194
+ `- **Visitors**: ${data.visitors}\n` +
195
+ `- **Visits**: ${data.visits}\n` +
196
+ `- **Actions**: ${data.actions}\n` +
197
+ `- **Converted Visits**: ${visitsConverted}`,
198
+ }],
199
+ };
200
+ }
201
+ case 'get-top-pages': {
202
+ const period = a.period || 'day';
203
+ const date = a.date || 'yesterday';
204
+ const limit = a.limit || 10;
205
+ const data = await this.matomoClient.getTopPages(period, date, limit, a.site_id, a.segment);
206
+ let text = `## Top Pages (${period}: ${date})\n\n`;
207
+ data.forEach((page, index) => {
208
+ text += `${index + 1}. **${page.label}**\n` +
209
+ ` - Visits: ${page.nb_visits.toLocaleString()} | Views: ${page.nb_hits.toLocaleString()}\n` +
210
+ ` - Bounce: ${page.bounce_rate} | Exit: ${page.exit_rate} | Avg Time: ${Math.round(page.avg_time_on_page)}s\n` +
211
+ ` - ${page.url}\n\n`;
212
+ });
213
+ return { content: [{ type: 'text', text }] };
214
+ }
215
+ case 'get-referrers': {
216
+ const period = a.period || 'day';
217
+ const date = a.date || 'yesterday';
218
+ if (a.type === 'campaigns') {
219
+ const data = await this.matomoClient.getCampaigns(period, date, a.site_id, a.segment);
220
+ let text = `## Campaigns (${period}: ${date})\n\n`;
221
+ if (!data.length) {
222
+ text += 'No campaign data found for this period.\n';
223
+ }
224
+ else {
225
+ data.forEach((campaign) => {
226
+ text += `- **${campaign.label}**: ${campaign.nb_visits.toLocaleString()} visits, ${campaign.nb_actions.toLocaleString()} actions`;
227
+ if (campaign.bounce_rate)
228
+ text += `, ${campaign.bounce_rate} bounce`;
229
+ text += '\n';
230
+ });
231
+ }
232
+ return { content: [{ type: 'text', text }] };
233
+ }
234
+ // Default: channel overview
235
+ const data = await this.matomoClient.getReferrerTypes(period, date, a.site_id, a.segment);
236
+ let text = `## Traffic Sources (${period}: ${date})\n\n`;
237
+ if (!data.length) {
238
+ text += 'No referrer data found for this period.\n';
239
+ }
240
+ else {
241
+ data.forEach((ref) => {
242
+ text += `- **${ref.label}**: ${ref.nb_visits.toLocaleString()} visits, ${ref.nb_actions.toLocaleString()} actions`;
243
+ if (ref.bounce_rate)
244
+ text += `, ${ref.bounce_rate} bounce`;
245
+ text += '\n';
246
+ });
247
+ }
248
+ return { content: [{ type: 'text', text }] };
249
+ }
250
+ case 'get-events': {
251
+ const period = a.period || 'day';
252
+ const date = a.date || 'yesterday';
253
+ if (a.category) {
254
+ const data = await this.matomoClient.getEventActions(period, date, a.category, a.site_id, a.segment);
255
+ let text = `## Event Actions — ${a.category} (${period}: ${date})\n\n`;
256
+ if (!data.length) {
257
+ text += `No actions found for category "${a.category}" in this period.\n`;
258
+ }
259
+ else {
260
+ data.forEach((event) => {
261
+ text += `- **${event.label}**: ${event.nb_events} events, ${event.nb_visits} visits`;
262
+ if (event.avg_event_value != null)
263
+ text += `, avg value: ${event.avg_event_value}`;
264
+ text += '\n';
265
+ });
266
+ }
267
+ return { content: [{ type: 'text', text }] };
268
+ }
269
+ // Default: category overview
270
+ const data = await this.matomoClient.getEventCategories(period, date, a.site_id, a.segment);
271
+ let text = `## Event Categories (${period}: ${date})\n\n`;
272
+ if (!data.length) {
273
+ text += 'No event data found for this period.\n';
274
+ }
275
+ else {
276
+ data.forEach((event) => {
277
+ text += `- **${event.label}**: ${event.nb_events} events, ${event.nb_visits} visits`;
278
+ if (event.avg_event_value != null)
279
+ text += `, avg value: ${event.avg_event_value}`;
280
+ text += '\n';
281
+ });
282
+ }
283
+ return { content: [{ type: 'text', text }] };
284
+ }
285
+ default:
286
+ throw new Error(`Unknown tool: ${name}`);
287
+ }
288
+ }
289
+ catch (error) {
290
+ return {
291
+ content: [
292
+ {
293
+ type: 'text',
294
+ text: `Error: ${error instanceof Error ? error.message : 'Unknown error occurred'}`,
295
+ },
296
+ ],
297
+ isError: true,
298
+ };
299
+ }
300
+ });
301
+ }
302
+ async run() {
303
+ const transport = new stdio_js_1.StdioServerTransport();
304
+ await this.server.connect(transport);
305
+ console.error('Matomo MCP server running on stdio');
306
+ }
307
+ }
308
+ // Start the server
309
+ const server = new MatomoMCPServer();
310
+ server.run().catch((error) => {
311
+ console.error('Fatal error in Matomo MCP server:', error);
312
+ process.exit(1);
313
+ });
314
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAEA,wEAAmE;AACnE,wEAAiF;AACjF,iEAG4C;AAC5C,yDAAqE;AAErE,MAAM,eAAe;IAInB;QACE,IAAI,CAAC,MAAM,GAAG,IAAI,iBAAM,CACtB;YACE,IAAI,EAAE,YAAY;YAClB,OAAO,EAAE,OAAO;SACjB,EACD;YACE,YAAY,EAAE;gBACZ,KAAK,EAAE,EAAE;aACV;SACF,CACF,CAAC;QAEF,IAAI,CAAC,YAAY,GAAG,IAAI,+BAAY,EAAE,CAAC;QACvC,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEO,iBAAiB;QACvB,0BAA0B;QAC1B,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,wFAAwF;SACtG,CAAC;QACF,MAAM,YAAY,GAAG;YACnB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sGAAsG;SACpH,CAAC;QACF,MAAM,WAAW,GAAG;YAClB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,sCAAsC;YACnD,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;YACtC,OAAO,EAAE,KAAK;SACf,CAAC;QACF,MAAM,SAAS,GAAG;YAChB,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,mEAAmE;YAChF,OAAO,EAAE,WAAW;SACrB,CAAC;QAEF,uBAAuB;QACvB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,iCAAsB,EAAE,KAAK,IAAI,EAAE;YAC/D,OAAO;gBACL,KAAK,EAAE;oBACL;wBACE,IAAI,EAAE,YAAY;wBAClB,WAAW,EAAE,mEAAmE;wBAChF,WAAW,EAAE;4BACX,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE,EAAE;yBACf;qBACF;oBACD;wBACE,IAAI,EAAE,oBAAoB;wBAC1B,WAAW,EAAE,kLAAkL;wBAC/L,WAAW,EAAE;4BACX,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE;gCACV,MAAM,EAAE,WAAW;gCACnB,IAAI,EAAE,SAAS;gCACf,OAAO,EAAE,WAAW;gCACpB,OAAO,EAAE,YAAY;6BACtB;yBACF;qBACF;oBACD;wBACE,IAAI,EAAE,mBAAmB;wBACzB,WAAW,EAAE,wDAAwD;wBACrE,WAAW,EAAE;4BACX,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE;gCACV,OAAO,EAAE,WAAW;gCACpB,OAAO,EAAE,YAAY;6BACtB;yBACF;qBACF;oBACD;wBACE,IAAI,EAAE,eAAe;wBACrB,WAAW,EAAE,yCAAyC;wBACtD,WAAW,EAAE;4BACX,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE;gCACV,MAAM,EAAE,WAAW;gCACnB,IAAI,EAAE,SAAS;gCACf,KAAK,EAAE;oCACL,IAAI,EAAE,QAAQ;oCACd,WAAW,EAAE,mCAAmC;oCAChD,OAAO,EAAE,EAAE;oCACX,OAAO,EAAE,CAAC;oCACV,OAAO,EAAE,GAAG;iCACb;gCACD,OAAO,EAAE,WAAW;gCACpB,OAAO,EAAE,YAAY;6BACtB;yBACF;qBACF;oBACD;wBACE,IAAI,EAAE,eAAe;wBACrB,WAAW,EAAE,yJAAyJ;wBACtK,WAAW,EAAE;4BACX,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE;gCACV,MAAM,EAAE,WAAW;gCACnB,IAAI,EAAE,SAAS;gCACf,IAAI,EAAE;oCACJ,IAAI,EAAE,QAAQ;oCACd,WAAW,EAAE,sEAAsE;oCACnF,IAAI,EAAE,CAAC,WAAW,CAAC;iCACpB;gCACD,OAAO,EAAE,WAAW;gCACpB,OAAO,EAAE,YAAY;6BACtB;yBACF;qBACF;oBACD;wBACE,IAAI,EAAE,YAAY;wBAClB,WAAW,EAAE,8JAA8J;wBAC3K,WAAW,EAAE;4BACX,IAAI,EAAE,QAAQ;4BACd,UAAU,EAAE;gCACV,MAAM,EAAE,WAAW;gCACnB,IAAI,EAAE,SAAS;gCACf,QAAQ,EAAE;oCACR,IAAI,EAAE,QAAQ;oCACd,WAAW,EAAE,8FAA8F;iCAC5G;gCACD,OAAO,EAAE,WAAW;gCACpB,OAAO,EAAE,YAAY;6BACtB;yBACF;qBACF;iBACF;aACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,oBAAoB;QACpB,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,gCAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACrE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;YACjD,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAwB,CAAC;YAE9C,IAAI,CAAC;gBACH,QAAQ,IAAI,EAAE,CAAC;oBACb,KAAK,YAAY,CAAC,CAAC,CAAC;wBAClB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;wBAClD,IAAI,IAAI,GAAG,+BAA+B,CAAC;wBAC3C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;4BACrB,IAAI,IAAI,YAAY,IAAI,CAAC,MAAM,OAAO,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,QAAQ,IAAI,CAAC;wBACzE,CAAC,CAAC,CAAC;wBACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC/C,CAAC;oBAED,KAAK,oBAAoB,CAAC,CAAC,CAAC;wBAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;wBACjC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC;wBACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;wBAE1F,+EAA+E;wBAC/E,MAAM,OAAO,GAAG,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC;wBACnE,IAAI,OAAO,EAAE,CAAC;4BACZ,MAAM,SAAS,GAAG,IAAyC,CAAC;4BAC5D,IAAI,IAAI,GAAG,yBAAyB,MAAM,KAAK,IAAI,OAAO,CAAC;4BAC3D,KAAK,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;gCAC3D,MAAM,EAAE,GAAG,OAAO,CAAC,gBAAgB,IAAI,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC;gCAChE,IAAI,IAAI,KAAK,OAAO,OAAO,OAAO,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,OAAO,CAAC,UAAU,CAAC,cAAc,EAAE,gBAAgB,EAAE,CAAC,cAAc,EAAE,qBAAqB,OAAO,CAAC,WAAW,gBAAgB,CAAC;4BAC1M,CAAC;4BACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;wBAC/C,CAAC;wBAED,qBAAqB;wBACrB,MAAM,CAAC,GAAG,IAAyB,CAAC;wBACpC,MAAM,cAAc,GAAG,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,WAAW,IAAI,CAAC,CAAC;wBAChE,MAAM,kBAAkB,GAAG,CAAC,CAAC,oBAAoB,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBAC1G,MAAM,gBAAgB,GAAG,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,gBAAgB,GAAG,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;wBACpH,MAAM,WAAW,GAAG,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,mBAAmB,IAAI,CAAC,CAAC;wBACnE,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC;wBAE/B,OAAO;4BACL,OAAO,EAAE,CAAC;oCACR,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,yBAAyB,MAAM,KAAK,IAAI,OAAO;wCACnD,iBAAiB,CAAC,CAAC,SAAS,CAAC,cAAc,EAAE,IAAI;wCACjD,qBAAqB,CAAC,CAAC,UAAU,CAAC,cAAc,EAAE,IAAI;wCACtD,0BAA0B,cAAc,CAAC,cAAc,EAAE,IAAI;wCAC7D,sBAAsB,CAAC,CAAC,WAAW,IAAI;wCACvC,4BAA4B,OAAO,kBAAkB,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,kBAAkB,IAAI;wCAC3H,6BAA6B,gBAAgB,KAAK;wCAClD,sBAAsB,WAAW,IAAI;wCACrC,mBAAmB,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;iCAC1C,CAAC;yBACH,CAAC;oBACJ,CAAC;oBAED,KAAK,mBAAmB,CAAC,CAAC,CAAC;wBACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;wBAC3E,MAAM,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,CAAC;wBAEtE,OAAO;4BACL,OAAO,EAAE,CAAC;oCACR,IAAI,EAAE,MAAM;oCACZ,IAAI,EAAE,oCAAoC;wCACxC,mBAAmB,IAAI,CAAC,QAAQ,IAAI;wCACpC,iBAAiB,IAAI,CAAC,MAAM,IAAI;wCAChC,kBAAkB,IAAI,CAAC,OAAO,IAAI;wCAClC,2BAA2B,eAAe,EAAE;iCAC/C,CAAC;yBACH,CAAC;oBACJ,CAAC;oBAED,KAAK,eAAe,CAAC,CAAC,CAAC;wBACrB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;wBACjC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC;wBACnC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;wBAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;wBAE5F,IAAI,IAAI,GAAG,iBAAiB,MAAM,KAAK,IAAI,OAAO,CAAC;wBACnD,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;4BAC3B,IAAI,IAAI,GAAG,KAAK,GAAG,CAAC,OAAO,IAAI,CAAC,KAAK,MAAM;gCACzC,gBAAgB,IAAI,CAAC,SAAS,CAAC,cAAc,EAAE,aAAa,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,IAAI;gCAC7F,gBAAgB,IAAI,CAAC,WAAW,YAAY,IAAI,CAAC,SAAS,gBAAgB,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK;gCAChH,QAAQ,IAAI,CAAC,GAAG,MAAM,CAAC;wBAC3B,CAAC,CAAC,CAAC;wBACH,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC/C,CAAC;oBAED,KAAK,eAAe,CAAC,CAAC,CAAC;wBACrB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;wBACjC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC;wBAEnC,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,EAAE,CAAC;4BAC3B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;4BACtF,IAAI,IAAI,GAAG,iBAAiB,MAAM,KAAK,IAAI,OAAO,CAAC;4BACnD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gCACjB,IAAI,IAAI,2CAA2C,CAAC;4BACtD,CAAC;iCAAM,CAAC;gCACN,IAAI,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE;oCACxB,IAAI,IAAI,OAAO,QAAQ,CAAC,KAAK,OAAO,QAAQ,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,QAAQ,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC;oCAClI,IAAI,QAAQ,CAAC,WAAW;wCAAE,IAAI,IAAI,KAAK,QAAQ,CAAC,WAAW,SAAS,CAAC;oCACrE,IAAI,IAAI,IAAI,CAAC;gCACf,CAAC,CAAC,CAAC;4BACL,CAAC;4BACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;wBAC/C,CAAC;wBAED,4BAA4B;wBAC5B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;wBAC1F,IAAI,IAAI,GAAG,uBAAuB,MAAM,KAAK,IAAI,OAAO,CAAC;wBACzD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;4BACjB,IAAI,IAAI,2CAA2C,CAAC;wBACtD,CAAC;6BAAM,CAAC;4BACN,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;gCACnB,IAAI,IAAI,OAAO,GAAG,CAAC,KAAK,OAAO,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,GAAG,CAAC,UAAU,CAAC,cAAc,EAAE,UAAU,CAAC;gCACnH,IAAI,GAAG,CAAC,WAAW;oCAAE,IAAI,IAAI,KAAK,GAAG,CAAC,WAAW,SAAS,CAAC;gCAC3D,IAAI,IAAI,IAAI,CAAC;4BACf,CAAC,CAAC,CAAC;wBACL,CAAC;wBACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC/C,CAAC;oBAED,KAAK,YAAY,CAAC,CAAC,CAAC;wBAClB,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,IAAI,KAAK,CAAC;wBACjC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,WAAW,CAAC;wBAEnC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;4BACf,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;4BACrG,IAAI,IAAI,GAAG,sBAAsB,CAAC,CAAC,QAAQ,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC;4BACvE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;gCACjB,IAAI,IAAI,kCAAkC,CAAC,CAAC,QAAQ,qBAAqB,CAAC;4BAC5E,CAAC;iCAAM,CAAC;gCACN,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;oCACrB,IAAI,IAAI,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,SAAS,YAAY,KAAK,CAAC,SAAS,SAAS,CAAC;oCACrF,IAAI,KAAK,CAAC,eAAe,IAAI,IAAI;wCAAE,IAAI,IAAI,gBAAgB,KAAK,CAAC,eAAe,EAAE,CAAC;oCACnF,IAAI,IAAI,IAAI,CAAC;gCACf,CAAC,CAAC,CAAC;4BACL,CAAC;4BACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;wBAC/C,CAAC;wBAED,6BAA6B;wBAC7B,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;wBAC5F,IAAI,IAAI,GAAG,wBAAwB,MAAM,KAAK,IAAI,OAAO,CAAC;wBAC1D,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;4BACjB,IAAI,IAAI,wCAAwC,CAAC;wBACnD,CAAC;6BAAM,CAAC;4BACN,IAAI,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;gCACrB,IAAI,IAAI,OAAO,KAAK,CAAC,KAAK,OAAO,KAAK,CAAC,SAAS,YAAY,KAAK,CAAC,SAAS,SAAS,CAAC;gCACrF,IAAI,KAAK,CAAC,eAAe,IAAI,IAAI;oCAAE,IAAI,IAAI,gBAAgB,KAAK,CAAC,eAAe,EAAE,CAAC;gCACnF,IAAI,IAAI,IAAI,CAAC;4BACf,CAAC,CAAC,CAAC;wBACL,CAAC;wBACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;oBAC/C,CAAC;oBAED;wBACE,MAAM,IAAI,KAAK,CAAC,iBAAiB,IAAI,EAAE,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAM;4BACZ,IAAI,EAAE,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,wBAAwB,EAAE;yBACpF;qBACF;oBACD,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,GAAG;QACP,MAAM,SAAS,GAAG,IAAI,+BAAoB,EAAE,CAAC;QAC7C,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACrC,OAAO,CAAC,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACtD,CAAC;CACF;AAED,mBAAmB;AACnB,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;AACrC,MAAM,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IAC3B,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,97 @@
1
+ export interface VisitsSummaryData {
2
+ nb_visits: number;
3
+ nb_actions: number;
4
+ nb_uniq_visitors?: number;
5
+ nb_visitors?: number;
6
+ nb_users?: number;
7
+ max_actions: number;
8
+ bounce_rate: string;
9
+ nb_visits_converted: number;
10
+ sum_visit_length: number;
11
+ bounce_rate_returning?: string;
12
+ nb_actions_returning?: number;
13
+ max_actions_returning?: number;
14
+ sum_visit_length_returning?: number;
15
+ nb_visits_converted_returning?: number;
16
+ revenue?: number;
17
+ revenue_returning?: number;
18
+ nb_conversions?: number;
19
+ nb_conversions_returning?: number;
20
+ conversions?: number;
21
+ conversions_returning?: number;
22
+ nb_visits_new?: number;
23
+ bounces?: number;
24
+ bounce_count?: number;
25
+ sum_visit_length_new?: number;
26
+ nb_actions_new?: number;
27
+ max_actions_new?: number;
28
+ bounce_rate_new?: string;
29
+ nb_visits_converted_new?: number;
30
+ revenue_new?: number;
31
+ nb_conversions_new?: number;
32
+ conversions_new?: number;
33
+ nb_actions_per_visit?: number;
34
+ avg_time_on_site?: number;
35
+ }
36
+ export interface LiveCountersData {
37
+ visits: number;
38
+ actions: number;
39
+ visitors: number;
40
+ visitsConverted?: number;
41
+ visits_conv?: number;
42
+ actions_conv?: number;
43
+ visitors_conv?: number;
44
+ }
45
+ export interface TopPagesData {
46
+ label: string;
47
+ nb_visits: number;
48
+ nb_hits: number;
49
+ sum_time_spent: number;
50
+ bounce_rate: string;
51
+ exit_rate: string;
52
+ avg_time_on_page: number;
53
+ url: string;
54
+ }
55
+ export interface SiteData {
56
+ idsite: string;
57
+ name: string;
58
+ main_url: string;
59
+ }
60
+ export interface ReferrerData {
61
+ label: string;
62
+ nb_visits: number;
63
+ nb_actions: number;
64
+ nb_uniq_visitors?: number;
65
+ bounce_rate?: string;
66
+ revenue?: number;
67
+ }
68
+ export interface EventData {
69
+ label: string;
70
+ nb_visits: number;
71
+ nb_events: number;
72
+ nb_uniq_visitors?: number;
73
+ sum_event_value?: number;
74
+ avg_event_value?: number;
75
+ }
76
+ export interface MatomoApiResponse<T> {
77
+ value: T;
78
+ date: string;
79
+ period: string;
80
+ segment: string;
81
+ }
82
+ export declare class MatomoClient {
83
+ private baseUrl;
84
+ private apiKey;
85
+ private defaultSiteId;
86
+ constructor();
87
+ private makeApiCall;
88
+ listSites(): Promise<SiteData[]>;
89
+ getVisitsSummary(period?: string, date?: string, siteId?: string, segment?: string): Promise<VisitsSummaryData | Record<string, VisitsSummaryData>>;
90
+ getLiveCounters(siteId?: string, segment?: string): Promise<LiveCountersData>;
91
+ getTopPages(period?: string, date?: string, limit?: number, siteId?: string, segment?: string): Promise<TopPagesData[]>;
92
+ getReferrerTypes(period?: string, date?: string, siteId?: string, segment?: string): Promise<ReferrerData[]>;
93
+ getCampaigns(period?: string, date?: string, siteId?: string, segment?: string): Promise<ReferrerData[]>;
94
+ getEventCategories(period?: string, date?: string, siteId?: string, segment?: string): Promise<EventData[]>;
95
+ getEventActions(period: string | undefined, date: string | undefined, category: string, siteId?: string, segment?: string): Promise<EventData[]>;
96
+ }
97
+ //# sourceMappingURL=matomo-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matomo-client.d.ts","sourceRoot":"","sources":["../src/matomo-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,77 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.MatomoClient = void 0;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ class MatomoClient {
9
+ constructor() {
10
+ this.baseUrl = process.env.MATOMO_URL || '';
11
+ this.apiKey = process.env.MATOMO_API_KEY || '';
12
+ this.defaultSiteId = process.env.MATOMO_SITE_ID || '';
13
+ if (!this.baseUrl || !this.apiKey || !this.defaultSiteId) {
14
+ throw new Error('Missing required environment variables: MATOMO_URL, MATOMO_API_KEY, MATOMO_SITE_ID');
15
+ }
16
+ }
17
+ async makeApiCall(method, params = {}, siteId, segment) {
18
+ try {
19
+ const callParams = {
20
+ module: 'API',
21
+ method,
22
+ idSite: siteId || this.defaultSiteId,
23
+ format: 'JSON',
24
+ token_auth: this.apiKey,
25
+ ...Object.fromEntries(Object.entries(params).map(([key, value]) => [key, String(value)])),
26
+ };
27
+ if (segment) {
28
+ callParams.segment = segment;
29
+ }
30
+ const formData = new URLSearchParams(callParams);
31
+ const response = await axios_1.default.post(`${this.baseUrl}/index.php`, formData, {
32
+ headers: {
33
+ 'Content-Type': 'application/x-www-form-urlencoded',
34
+ },
35
+ });
36
+ return response.data;
37
+ }
38
+ catch (error) {
39
+ if (axios_1.default.isAxiosError(error)) {
40
+ const errorMsg = error.response?.data?.message || error.response?.statusText;
41
+ throw new Error(`Matomo API error: ${error.response?.status} - ${errorMsg}`);
42
+ }
43
+ throw new Error(`Failed to call Matomo API: ${error}`);
44
+ }
45
+ }
46
+ async listSites() {
47
+ return this.makeApiCall('SitesManager.getAllSites');
48
+ }
49
+ async getVisitsSummary(period = 'day', date = 'yesterday', siteId, segment) {
50
+ return this.makeApiCall('VisitsSummary.get', { period, date }, siteId, segment);
51
+ }
52
+ async getLiveCounters(siteId, segment) {
53
+ const result = await this.makeApiCall('Live.getCounters', { lastMinutes: 30 }, siteId, segment);
54
+ // API returns an array with one object
55
+ return Array.isArray(result) ? result[0] : result;
56
+ }
57
+ async getTopPages(period = 'day', date = 'yesterday', limit = 10, siteId, segment) {
58
+ return this.makeApiCall('Actions.getPageUrls', { period, date, expanded: 1, filter_limit: limit }, siteId, segment);
59
+ }
60
+ async getReferrerTypes(period = 'day', date = 'yesterday', siteId, segment) {
61
+ return this.makeApiCall('Referrers.getReferrerType', { period, date }, siteId, segment);
62
+ }
63
+ async getCampaigns(period = 'day', date = 'yesterday', siteId, segment) {
64
+ return this.makeApiCall('Referrers.getCampaigns', { period, date }, siteId, segment);
65
+ }
66
+ async getEventCategories(period = 'day', date = 'yesterday', siteId, segment) {
67
+ return this.makeApiCall('Events.getCategory', { period, date }, siteId, segment);
68
+ }
69
+ async getEventActions(period = 'day', date = 'yesterday', category, siteId, segment) {
70
+ // Filter to a specific category using Matomo's segment syntax
71
+ const categorySegment = `eventCategory==${category}`;
72
+ const fullSegment = segment ? `${segment};${categorySegment}` : categorySegment;
73
+ return this.makeApiCall('Events.getAction', { period, date }, siteId, fullSegment);
74
+ }
75
+ }
76
+ exports.MatomoClient = MatomoClient;
77
+ //# sourceMappingURL=matomo-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"matomo-client.js","sourceRoot":"","sources":["../src/matomo-client.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,36 @@
1
+ {
2
+ "name": "matomo-mcp",
3
+ "version": "2.0.0",
4
+ "description": "MCP server that gives Claude access to Matomo analytics — visits, pages, referrers, events, and more",
5
+ "main": "dist/index.js",
6
+ "bin": {
7
+ "matomo-mcp": "dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist"
11
+ ],
12
+ "scripts": {
13
+ "build": "tsc",
14
+ "prepublishOnly": "npm run build",
15
+ "start": "node dist/index.js",
16
+ "dev": "ts-node src/index.ts",
17
+ "test": "echo \"Error: no test specified\" && exit 1"
18
+ },
19
+ "keywords": ["mcp", "matomo", "analytics", "model-context-protocol"],
20
+ "author": "amazee.io",
21
+ "license": "ISC",
22
+ "repository": {
23
+ "type": "git",
24
+ "url": "https://github.com/bonus414/matomo-mcp"
25
+ },
26
+ "dependencies": {
27
+ "@modelcontextprotocol/sdk": "^1.20.1",
28
+ "axios": "^1.12.2",
29
+ "dotenv": "^17.2.3"
30
+ },
31
+ "devDependencies": {
32
+ "@types/node": "^24.8.1",
33
+ "ts-node": "^10.9.2",
34
+ "typescript": "^5.9.3"
35
+ }
36
+ }