tideways-mcp-server 0.1.0 → 1.1.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/LICENSE +21 -0
- package/README.md +242 -111
- package/bin/cli.js +5 -48
- package/dist/lib/errors.d.ts +0 -6
- package/dist/lib/errors.d.ts.map +1 -1
- package/dist/lib/errors.js +0 -6
- package/dist/lib/errors.js.map +1 -1
- package/dist/types/tideways-config.d.ts +0 -6
- package/dist/types/tideways-config.d.ts.map +1 -1
- package/package.json +11 -2
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) [2025] [Mouhammed Diop]
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,56 +1,61 @@
|
|
|
1
1
|
# Tideways MCP Server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[](https://github.com/abuhamza/mcp-tideways/actions/workflows/ci.yml)
|
|
4
|
+
[](https://github.com/abuhamza/mcp-tideways/actions/workflows/release.yml)
|
|
5
|
+
[](https://github.com/abuhamza/mcp-tideways/actions/workflows/security.yml)
|
|
6
|
+
[](https://github.com/abuhamza/mcp-tideways/security/code-scanning)
|
|
7
|
+
[](https://codecov.io/gh/abuhamza/mcp-tideways)
|
|
8
|
+
[](https://www.npmjs.com/package/tideways-mcp-server)
|
|
9
|
+
[](https://www.npmjs.com/package/tideways-mcp-server)
|
|
10
|
+
[](https://www.npmjs.com/package/tideways-mcp-server)
|
|
11
|
+
[](https://github.com/abuhamza/mcp-tideways/security/dependabot)
|
|
4
12
|
|
|
5
|
-
|
|
13
|
+
A Model Context Protocol (MCP) server that enables AI assistants to query [Tideways](https://tideways.com/) performance monitoring data and provide conversational performance insights for PHP applications.
|
|
14
|
+
|
|
15
|
+
> **About Tideways**: [Tideways](https://tideways.com/) is a powerful application performance monitoring (APM) platform designed specifically for PHP applications. For technical details, see the [REST API documentation](https://support.tideways.com/documentation/reference/index.html).
|
|
16
|
+
|
|
17
|
+
## Features
|
|
6
18
|
|
|
7
19
|
- **Conversational Performance Insights**: Get performance data in natural language format optimized for AI assistants
|
|
8
20
|
- **AI Assistant Integration**: Works with Claude Desktop, Cursor, Claude Code, and other MCP-compatible tools
|
|
9
|
-
- **Real-time Performance Metrics**: Query current performance data with intelligent
|
|
21
|
+
- **Real-time Performance Metrics**: Query current performance data with intelligent rate limiting
|
|
10
22
|
- **Issue Analysis**: Retrieve and analyze errors, exceptions, and performance issues
|
|
11
|
-
- **
|
|
23
|
+
- **Intelligent API Management**: Built-in rate limiting with respect for Tideways API constraints
|
|
12
24
|
- **Robust Error Handling**: Comprehensive error handling with user-friendly messages
|
|
13
25
|
|
|
14
|
-
##
|
|
26
|
+
## Installation
|
|
15
27
|
|
|
16
|
-
|
|
17
|
-
- Valid Tideways API token with appropriate scopes (`metrics`, `issues`, `traces`)
|
|
18
|
-
- Access to a Tideways organization and project
|
|
28
|
+
The Tideways MCP Server is available as an npm package for easy integration with AI assistants:
|
|
19
29
|
|
|
20
|
-
|
|
30
|
+
```bash
|
|
31
|
+
# Install globally for system-wide access
|
|
32
|
+
npm install -g tideways-mcp-server
|
|
21
33
|
|
|
22
|
-
|
|
34
|
+
# Or use with npx (recommended - always uses latest version)
|
|
35
|
+
npx tideways-mcp-server
|
|
23
36
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
cd mcp-tideways
|
|
27
|
-
npm install
|
|
28
|
-
npm run build
|
|
37
|
+
# Or install as a dependency in your project
|
|
38
|
+
npm install tideways-mcp-server
|
|
29
39
|
```
|
|
30
40
|
|
|
31
|
-
|
|
41
|
+
**Package Information:**
|
|
42
|
+
- **NPM Package**: [`tideways-mcp-server`](https://www.npmjs.com/package/tideways-mcp-server)
|
|
43
|
+
- **Repository**: [abuhamza/mcp-tideways](https://github.com/abuhamza/mcp-tideways)
|
|
44
|
+
- **Latest Version**: Check [npm version badge](#) above
|
|
45
|
+
- **License**: MIT
|
|
32
46
|
|
|
33
|
-
|
|
34
|
-
npm install -g tideways-mcp-server
|
|
35
|
-
```
|
|
47
|
+
## Prerequisites
|
|
36
48
|
|
|
37
|
-
|
|
49
|
+
- Node.js 18.0 or higher
|
|
50
|
+
- [Tideways](https://tideways.com/) account with a valid API token
|
|
51
|
+
- API token with appropriate scopes (`metrics`, `issues`, `traces`) - see [API documentation](https://support.tideways.com/documentation/reference/index.html)
|
|
52
|
+
- Access to a Tideways organization and project
|
|
38
53
|
|
|
39
|
-
|
|
54
|
+
## AI Integration Setup
|
|
40
55
|
|
|
41
|
-
|
|
42
|
-
# Required Configuration
|
|
43
|
-
TIDEWAYS_TOKEN=your_tideways_api_token
|
|
44
|
-
TIDEWAYS_ORG=your_organization_name
|
|
45
|
-
TIDEWAYS_PROJECT=your_project_name
|
|
56
|
+
**This is an MCP (Model Context Protocol) server designed exclusively for AI assistants. It cannot be used as a standalone CLI tool.**
|
|
46
57
|
|
|
47
|
-
|
|
48
|
-
TIDEWAYS_BASE_URL=https://app.tideways.io/apps/api
|
|
49
|
-
TIDEWAYS_MAX_RETRIES=3
|
|
50
|
-
TIDEWAYS_REQUEST_TIMEOUT=30000
|
|
51
|
-
SERVER_PORT=3000
|
|
52
|
-
LOG_LEVEL=info
|
|
53
|
-
```
|
|
58
|
+
The server integrates with AI assistants through MCP configuration using the npm package `tideways-mcp-server`.
|
|
54
59
|
|
|
55
60
|
### Environment Variables
|
|
56
61
|
|
|
@@ -62,34 +67,86 @@ LOG_LEVEL=info
|
|
|
62
67
|
| `TIDEWAYS_BASE_URL` | ❌ | `https://app.tideways.io/apps/api` | Tideways API base URL |
|
|
63
68
|
| `TIDEWAYS_MAX_RETRIES` | ❌ | `3` | Maximum API retry attempts |
|
|
64
69
|
| `TIDEWAYS_REQUEST_TIMEOUT` | ❌ | `30000` | API request timeout (ms) |
|
|
65
|
-
| `SERVER_PORT` | ❌ | `3000` | Server port |
|
|
66
70
|
| `LOG_LEVEL` | ❌ | `info` | Log level (debug, info, warn, error) |
|
|
67
71
|
|
|
68
|
-
##
|
|
72
|
+
## AI Assistant Integration
|
|
69
73
|
|
|
70
|
-
|
|
74
|
+
**This server only works with MCP-compatible AI assistants. It uses stdio transport.**
|
|
71
75
|
|
|
72
|
-
|
|
73
|
-
# Development mode
|
|
74
|
-
npm run dev
|
|
76
|
+
#### Claude Desktop
|
|
75
77
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
+
Add to your Claude Desktop MCP configuration file:
|
|
79
|
+
|
|
80
|
+
**Location:**
|
|
81
|
+
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
82
|
+
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
83
|
+
- Linux: `~/.config/claude/claude_desktop_config.json`
|
|
84
|
+
|
|
85
|
+
**Configuration (Recommended - using npx):**
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"mcpServers": {
|
|
89
|
+
"tideways": {
|
|
90
|
+
"command": "npx",
|
|
91
|
+
"args": ["tideways-mcp-server"],
|
|
92
|
+
"env": {
|
|
93
|
+
"TIDEWAYS_TOKEN": "your_token",
|
|
94
|
+
"TIDEWAYS_ORG": "your_org",
|
|
95
|
+
"TIDEWAYS_PROJECT": "your_project"
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
78
101
|
|
|
79
|
-
|
|
80
|
-
|
|
102
|
+
**Alternative (if installed globally):**
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"mcpServers": {
|
|
106
|
+
"tideways": {
|
|
107
|
+
"command": "tideways-mcp-server",
|
|
108
|
+
"env": {
|
|
109
|
+
"TIDEWAYS_TOKEN": "your_token",
|
|
110
|
+
"TIDEWAYS_ORG": "your_org",
|
|
111
|
+
"TIDEWAYS_PROJECT": "your_project"
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
81
116
|
```
|
|
82
117
|
|
|
83
|
-
|
|
118
|
+
#### Cursor IDE
|
|
84
119
|
|
|
85
|
-
|
|
120
|
+
Cursor supports MCP through its settings. Add the server configuration in Cursor's MCP settings:
|
|
86
121
|
|
|
122
|
+
1. Open Cursor Settings
|
|
123
|
+
2. Tools & Integration
|
|
124
|
+
3. Add a new server with:
|
|
87
125
|
```json
|
|
88
126
|
{
|
|
89
127
|
"mcpServers": {
|
|
90
128
|
"tideways": {
|
|
91
|
-
"command": "
|
|
92
|
-
"
|
|
129
|
+
"command": "tideways-mcp-server",
|
|
130
|
+
"env": {
|
|
131
|
+
"TIDEWAYS_TOKEN": "your_token",
|
|
132
|
+
"TIDEWAYS_ORG": "your_org",
|
|
133
|
+
"TIDEWAYS_PROJECT": "your_project"
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
#### VS Code with MCP Extension
|
|
141
|
+
|
|
142
|
+
If using VS Code with an MCP-compatible extension:
|
|
143
|
+
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"mcp.servers": {
|
|
147
|
+
"tideways": {
|
|
148
|
+
"command": "npx",
|
|
149
|
+
"args": ["tideways-mcp-server"],
|
|
93
150
|
"env": {
|
|
94
151
|
"TIDEWAYS_TOKEN": "your_token",
|
|
95
152
|
"TIDEWAYS_ORG": "your_org",
|
|
@@ -128,7 +185,7 @@ Once configured, you can ask your AI assistant questions like:
|
|
|
128
185
|
- "Suggest code refactoring based on performance bottlenecks"
|
|
129
186
|
- "Analyze memory usage patterns and recommend optimizations"
|
|
130
187
|
|
|
131
|
-
##
|
|
188
|
+
## Available MCP Tools
|
|
132
189
|
|
|
133
190
|
All tools return structured JSON data for optimal AI assistant integration. The MCP server follows a "raw JSON approach" where tools return complete API responses without formatting, allowing AI assistants to analyze and present data flexibly.
|
|
134
191
|
|
|
@@ -142,12 +199,17 @@ Retrieve aggregate performance metrics and system-wide statistics.
|
|
|
142
199
|
- `env` (optional): Filter by specific environment
|
|
143
200
|
- `s` (optional): Filter by specific service name
|
|
144
201
|
|
|
145
|
-
**
|
|
202
|
+
**Conversational Examples:**
|
|
146
203
|
```
|
|
147
|
-
|
|
148
|
-
|
|
204
|
+
"What's the current performance of my application?"
|
|
205
|
+
"Show me performance metrics for the last 6 hours"
|
|
206
|
+
"Get metrics for the API service in production"
|
|
207
|
+
"How is my web service performing in the staging environment?"
|
|
208
|
+
"Compare today's metrics with the last 24 hours"
|
|
149
209
|
```
|
|
150
210
|
|
|
211
|
+
**Returns:** Complete performance data including response times, throughput, error rates, memory usage, and database performance.
|
|
212
|
+
|
|
151
213
|
### `get_performance_summary`
|
|
152
214
|
|
|
153
215
|
Retrieve time-series performance summary data in 15-minute intervals for trend analysis.
|
|
@@ -155,12 +217,17 @@ Retrieve time-series performance summary data in 15-minute intervals for trend a
|
|
|
155
217
|
**Parameters:**
|
|
156
218
|
- `s` (optional): Service name to filter by (e.g., "web", "api", "worker"). Default: "web"
|
|
157
219
|
|
|
158
|
-
**
|
|
220
|
+
**Conversational Examples:**
|
|
159
221
|
```
|
|
160
|
-
|
|
161
|
-
|
|
222
|
+
"Show me performance trends over the last few hours"
|
|
223
|
+
"Get the performance summary for my API service"
|
|
224
|
+
"How has my web service been performing recently?"
|
|
225
|
+
"Display trends for the worker service"
|
|
226
|
+
"Show me response time patterns for today"
|
|
162
227
|
```
|
|
163
228
|
|
|
229
|
+
**Returns:** Time-series data with 15-minute intervals showing response times, request counts, error rates, and resource utilization trends.
|
|
230
|
+
|
|
164
231
|
### `get_issues`
|
|
165
232
|
|
|
166
233
|
Retrieve and analyze recent errors, exceptions, and performance issues.
|
|
@@ -170,15 +237,21 @@ Retrieve and analyze recent errors, exceptions, and performance issues.
|
|
|
170
237
|
- `status` (optional): "open", "new", "resolved", "not_error", "ignored", "all" (default: "open")
|
|
171
238
|
- `page` (optional): Page number for pagination (default: 1)
|
|
172
239
|
|
|
173
|
-
**
|
|
240
|
+
**Conversational Examples:**
|
|
174
241
|
```
|
|
175
|
-
|
|
176
|
-
|
|
242
|
+
"What errors are currently happening in my application?"
|
|
243
|
+
"Show me all open errors from the last 24 hours"
|
|
244
|
+
"Get slow SQL queries that need attention"
|
|
245
|
+
"Are there any new performance issues I should know about?"
|
|
246
|
+
"List all deprecated function calls in my code"
|
|
247
|
+
"Show me resolved errors to understand what was fixed"
|
|
177
248
|
```
|
|
178
249
|
|
|
250
|
+
**Returns:** Detailed error information including stack traces, occurrence frequency, affected endpoints, and suggested fixes for common issues.
|
|
251
|
+
|
|
179
252
|
### `get_traces`
|
|
180
253
|
|
|
181
|
-
Analyze individual trace samples for detailed bottleneck identification and performance debugging.
|
|
254
|
+
Analyze individual trace samples for detailed bottleneck identification and performance debugging. Includes advanced AI-powered bottleneck detection and optimization recommendations.
|
|
182
255
|
|
|
183
256
|
**Parameters:**
|
|
184
257
|
- `env` (optional): Environment name (e.g., "production", "staging")
|
|
@@ -193,13 +266,26 @@ Analyze individual trace samples for detailed bottleneck identification and perf
|
|
|
193
266
|
- `sort_by` (optional): "response_time", "date", "memory" (default: "response_time")
|
|
194
267
|
- `sort_order` (optional): "ASC", "DESC" (default: "DESC")
|
|
195
268
|
|
|
196
|
-
**
|
|
269
|
+
**Conversational Examples:**
|
|
197
270
|
```
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
271
|
+
"Analyze traces for the /api/products endpoint and find bottlenecks"
|
|
272
|
+
"Show me the slowest requests from the last hour with details"
|
|
273
|
+
"Find traces with callgraph data for the checkout process"
|
|
274
|
+
"What's causing slow response times in my user registration flow?"
|
|
275
|
+
"Detect N+1 query problems in my product listing page"
|
|
276
|
+
"Analyze memory usage patterns in my API endpoints"
|
|
277
|
+
"Find database bottlenecks in the /dashboard endpoint"
|
|
278
|
+
"Show me traces where response time is over 2 seconds"
|
|
201
279
|
```
|
|
202
280
|
|
|
281
|
+
**Returns:** Detailed trace data with AI-powered analysis including:
|
|
282
|
+
- Individual request traces with timing breakdown
|
|
283
|
+
- Bottleneck detection (database, CPU, memory, API calls)
|
|
284
|
+
- N+1 query detection and suggested fixes
|
|
285
|
+
- Performance optimization recommendations
|
|
286
|
+
- Call graph visualization data
|
|
287
|
+
- Resource utilization analysis
|
|
288
|
+
|
|
203
289
|
### `get_historical_data`
|
|
204
290
|
|
|
205
291
|
Retrieve historical performance data for specific dates with configurable granularity.
|
|
@@ -208,13 +294,19 @@ Retrieve historical performance data for specific dates with configurable granul
|
|
|
208
294
|
- `date` (required): Date in YYYY-MM-DD format
|
|
209
295
|
- `granularity` (optional): "day", "week", "month" (default: "day")
|
|
210
296
|
|
|
211
|
-
**
|
|
297
|
+
**Conversational Examples:**
|
|
212
298
|
```
|
|
213
|
-
|
|
214
|
-
|
|
299
|
+
"Get historical performance data for August 1st, 2025"
|
|
300
|
+
"Show me weekly performance trends for last Monday"
|
|
301
|
+
"Compare this month's performance with last month"
|
|
302
|
+
"How did my application perform on 2025-07-15?"
|
|
303
|
+
"Get daily performance data for the past week"
|
|
304
|
+
"Show me monthly trends for the last quarter"
|
|
215
305
|
```
|
|
216
306
|
|
|
217
|
-
|
|
307
|
+
**Returns:** Historical performance metrics with trend analysis, comparisons to previous periods, and insights into performance patterns over time.
|
|
308
|
+
|
|
309
|
+
## Development
|
|
218
310
|
|
|
219
311
|
### Project Structure
|
|
220
312
|
|
|
@@ -276,7 +368,7 @@ npm run lint:fix
|
|
|
276
368
|
npm run format
|
|
277
369
|
```
|
|
278
370
|
|
|
279
|
-
##
|
|
371
|
+
## Architecture
|
|
280
372
|
|
|
281
373
|
### Core Components
|
|
282
374
|
|
|
@@ -290,9 +382,9 @@ npm run format
|
|
|
290
382
|
### Data Flow
|
|
291
383
|
|
|
292
384
|
```
|
|
293
|
-
AI Assistant
|
|
294
|
-
|
|
295
|
-
|
|
385
|
+
AI Assistant ←→ MCP Protocol (stdio) ←→ TidewaysMCPServer → TidewaysClient → Tideways API
|
|
386
|
+
↓
|
|
387
|
+
Raw JSON Response → AI Assistant
|
|
296
388
|
```
|
|
297
389
|
|
|
298
390
|
### Response Format Philosophy
|
|
@@ -342,9 +434,10 @@ The server provides structured JSON logs for monitoring:
|
|
|
342
434
|
```
|
|
343
435
|
Error: Authentication failed. Please check your API token.
|
|
344
436
|
```
|
|
345
|
-
- Verify `TIDEWAYS_TOKEN` is correct and has required scopes
|
|
437
|
+
- Verify `TIDEWAYS_TOKEN` is correct and has required scopes (`metrics`, `issues`, `traces`)
|
|
346
438
|
- Check token hasn't expired
|
|
347
439
|
- Ensure organization and project names are correct
|
|
440
|
+
- Verify environment variables are properly loaded
|
|
348
441
|
|
|
349
442
|
**Rate Limit Exceeded**
|
|
350
443
|
```
|
|
@@ -352,48 +445,88 @@ Error: Rate limit exceeded. Please try again later.
|
|
|
352
445
|
```
|
|
353
446
|
- Wait for rate limit reset (shown in error message)
|
|
354
447
|
- Reduce query frequency
|
|
355
|
-
-
|
|
448
|
+
- Built-in rate limiting respects Tideways API constraints (900 requests/hour)
|
|
356
449
|
|
|
357
450
|
**Connection Issues**
|
|
358
451
|
```
|
|
359
452
|
Error: Network error: Unable to connect to Tideways API.
|
|
360
453
|
```
|
|
361
454
|
- Check internet connection
|
|
362
|
-
- Verify Tideways API is accessible
|
|
363
|
-
- Check if corporate firewall blocks API access
|
|
455
|
+
- Verify Tideways API is accessible from your network
|
|
456
|
+
- Check if corporate firewall blocks API access to `app.tideways.io`
|
|
457
|
+
- Test with curl: `curl -H "Authorization: Bearer YOUR_TOKEN" https://app.tideways.io/apps/api/`
|
|
458
|
+
|
|
459
|
+
**MCP Integration Issues**
|
|
460
|
+
```
|
|
461
|
+
Error: MCP server not responding or connection failed
|
|
462
|
+
```
|
|
463
|
+
- Restart your AI assistant (Claude Desktop, Cursor, etc.)
|
|
464
|
+
- Verify MCP configuration file syntax is correct
|
|
465
|
+
- Check that the server command path is correct
|
|
466
|
+
- Ensure environment variables are properly set in MCP config
|
|
467
|
+
- Try running the server manually first: `npx tideways-mcp-server`
|
|
468
|
+
|
|
469
|
+
**Package Installation Issues**
|
|
470
|
+
```
|
|
471
|
+
Error: Command 'tideways-mcp-server' not found
|
|
472
|
+
```
|
|
473
|
+
- Install the package: `npm install -g tideways-mcp-server`
|
|
474
|
+
- Or use npx directly: `npx tideways-mcp-server`
|
|
475
|
+
- Clear npm cache: `npm cache clean --force`
|
|
364
476
|
|
|
365
477
|
### Debug Mode
|
|
366
478
|
|
|
367
479
|
Enable debug logging for detailed troubleshooting:
|
|
368
480
|
|
|
369
481
|
```bash
|
|
370
|
-
|
|
371
|
-
|
|
482
|
+
# When running directly
|
|
483
|
+
LOG_LEVEL=debug npx tideways-mcp-server
|
|
372
484
|
|
|
373
|
-
|
|
485
|
+
# In MCP configuration, add to env:
|
|
486
|
+
{
|
|
487
|
+
"env": {
|
|
488
|
+
"LOG_LEVEL": "debug",
|
|
489
|
+
"TIDEWAYS_TOKEN": "your_token",
|
|
490
|
+
...
|
|
491
|
+
}
|
|
492
|
+
}
|
|
493
|
+
```
|
|
374
494
|
|
|
375
|
-
###
|
|
376
|
-
- **MCP Prompts**: Pre-defined analysis templates and guided workflows for systematic performance investigation
|
|
377
|
-
- **Streamable Responses**: Real-time streaming of large datasets for better user experience
|
|
378
|
-
- **Advanced Trace Analysis**: Enhanced bottleneck detection with AI-powered recommendations
|
|
379
|
-
- **Multi-project Support**: Manage performance across multiple applications
|
|
380
|
-
- **Integration with Other APM Providers**: Support for New Relic, DataDog, Elastic APM
|
|
495
|
+
### Getting Help
|
|
381
496
|
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
- **Load Testing Integration**: Performance analysis under different load scenarios
|
|
387
|
-
- **Security Performance Analysis**: Identification of security-related performance bottlenecks
|
|
497
|
+
1. **Check the logs**: Debug mode provides detailed information about requests and responses
|
|
498
|
+
2. **Verify configuration**: Double-check all environment variables and MCP settings
|
|
499
|
+
3. **Test API access**: Use curl to verify your Tideways API credentials work
|
|
500
|
+
4. **Report issues**: [GitHub Issues](https://github.com/abuhamza/mcp-tideways/issues) with debug logs and configuration details
|
|
388
501
|
|
|
389
502
|
## 🔒 Security
|
|
390
503
|
|
|
391
|
-
This MCP server implements
|
|
504
|
+
This MCP server implements comprehensive security measures to protect your Tideways API credentials and ensure secure operation:
|
|
505
|
+
|
|
506
|
+
### Security Pipeline
|
|
507
|
+
- **Automated Security Scanning**: CodeQL static analysis for vulnerability detection
|
|
508
|
+
- **Dependency Monitoring**: Snyk and npm audit for dependency vulnerabilities
|
|
509
|
+
- **Secrets Scanning**: TruffleHog and GitLeaks for credential exposure prevention
|
|
510
|
+
- **Supply Chain Security**: SLSA verification and package integrity checks
|
|
511
|
+
- **Continuous Monitoring**: Daily automated security scans
|
|
392
512
|
|
|
393
513
|
### Token Security
|
|
394
514
|
- **Validation**: API tokens are validated to ensure they are set (any format accepted)
|
|
395
515
|
- **Logging Protection**: Authorization headers are automatically redacted in debug logs as `Bearer [REDACTED]`
|
|
396
516
|
- **Secure Storage**: Tokens should be stored in environment variables, never in code
|
|
517
|
+
- **Input Sanitization**: All user inputs are validated and sanitized
|
|
518
|
+
|
|
519
|
+
### CI/CD Security
|
|
520
|
+
- **Hardened GitHub Actions**: Minimal permissions for each workflow job
|
|
521
|
+
- **Secrets Management**: Secure handling of environment variables and API tokens
|
|
522
|
+
- **Supply Chain Protection**: Dependabot for automated security updates
|
|
523
|
+
- **Security Gates**: All security checks must pass before deployment
|
|
524
|
+
|
|
525
|
+
### Runtime Security
|
|
526
|
+
- **Rate Limiting**: Built-in protection against API abuse
|
|
527
|
+
- **Error Handling**: No sensitive data exposed in error messages
|
|
528
|
+
- **Network Security**: HTTPS enforcement for all API communications
|
|
529
|
+
- **Memory Safety**: No credential persistence in memory logs
|
|
397
530
|
|
|
398
531
|
### Best Practices
|
|
399
532
|
- Store your API token securely in environment variables or `.env` files
|
|
@@ -401,47 +534,45 @@ This MCP server implements several security measures to protect your Tideways AP
|
|
|
401
534
|
- Use unique, strong tokens with minimal required permissions
|
|
402
535
|
- Regularly rotate your API tokens
|
|
403
536
|
- Monitor access logs for suspicious activity
|
|
537
|
+
- Keep dependencies updated with automated security patches
|
|
538
|
+
|
|
539
|
+
### Security Monitoring
|
|
540
|
+
- **Zero Known Vulnerabilities**: Continuous npm audit reporting
|
|
541
|
+
- **Active Dependency Updates**: Weekly Dependabot security patches
|
|
542
|
+
- **Code Quality Gates**: Security scans integrated in CI/CD pipeline
|
|
543
|
+
- **Vulnerability Alerts**: Immediate notifications for security issues
|
|
404
544
|
|
|
405
545
|
### Reporting Security Issues
|
|
406
|
-
If you discover a security vulnerability, please report it responsibly through GitHub's security advisory feature.
|
|
546
|
+
If you discover a security vulnerability, please report it responsibly through GitHub's security advisory feature or contact the maintainers directly.
|
|
407
547
|
|
|
408
|
-
##
|
|
548
|
+
## Contributing
|
|
409
549
|
|
|
410
|
-
We welcome contributions!
|
|
550
|
+
We welcome contributions!
|
|
411
551
|
|
|
412
552
|
### Development Setup
|
|
413
553
|
|
|
414
554
|
1. Fork the repository
|
|
415
|
-
2. Create a feature branch: `git checkout -b
|
|
555
|
+
2. Create a feature branch: `git checkout -b your-feature`
|
|
416
556
|
3. Make changes and add tests
|
|
417
557
|
4. Run tests: `npm test`
|
|
418
558
|
5. Submit a pull request
|
|
419
559
|
|
|
420
|
-
##
|
|
560
|
+
## License
|
|
421
561
|
|
|
422
562
|
This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.
|
|
423
563
|
|
|
424
|
-
##
|
|
564
|
+
## Support
|
|
425
565
|
|
|
426
566
|
- GitHub Issues: [Report bugs or request features](https://github.com/abuhamza/mcp-tideways/issues)
|
|
427
|
-
- Documentation: [Project Wiki](https://github.com/abuhamza/mcp-tideways/wiki)
|
|
428
567
|
|
|
429
|
-
## 📈 Performance
|
|
430
568
|
|
|
431
|
-
|
|
432
|
-
- Memory usage: <100MB with default cache settings
|
|
433
|
-
- Supports concurrent AI assistant connections
|
|
434
|
-
- Efficient rate limiting prevents API quota exhaustion
|
|
569
|
+
## Contributing
|
|
435
570
|
|
|
436
|
-
|
|
571
|
+
Contributions are welcome! Please:
|
|
437
572
|
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
573
|
+
1. Fork the repository
|
|
574
|
+
2. Create a feature branch
|
|
575
|
+
3. Make your changes
|
|
576
|
+
4. Submit a pull request
|
|
441
577
|
|
|
442
578
|
---
|
|
443
|
-
|
|
444
|
-
Add example for :
|
|
445
|
-
DANGEROUSLY_OMIT_AUTH=true npx @modelcontextprotocol/inspector -e TIDEWAYS_TOKEN= -e TIDEWAYS_ORG=check24_hotel -e TIDEWAYS_PROJECT=api -e LOG_LEVEL=debug node /home/mouhammed/Work/tideways-mcp/dist/index.js
|
|
446
|
-
|
|
447
|
-
Built with ❤️ for the PHP development community
|
package/bin/cli.js
CHANGED
|
@@ -4,7 +4,6 @@ import { readFileSync } from 'fs';
|
|
|
4
4
|
import { fileURLToPath } from 'url';
|
|
5
5
|
import { dirname, join } from 'path';
|
|
6
6
|
|
|
7
|
-
// Import compiled modules
|
|
8
7
|
import { TidewaysMCPServer } from '../dist/server.js';
|
|
9
8
|
|
|
10
9
|
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
@@ -24,9 +23,6 @@ Usage:
|
|
|
24
23
|
Options:
|
|
25
24
|
--help, -h Show this help message
|
|
26
25
|
--version, -v Show version information
|
|
27
|
-
--stdio Use stdio transport (default for MCP)
|
|
28
|
-
--http Use HTTP transport (experimental)
|
|
29
|
-
--port <port> HTTP port (default: 3000, requires --http)
|
|
30
26
|
|
|
31
27
|
Environment Variables (required):
|
|
32
28
|
TIDEWAYS_TOKEN Your Tideways API token
|
|
@@ -34,12 +30,9 @@ Environment Variables (required):
|
|
|
34
30
|
TIDEWAYS_PROJECT Your Tideways project name
|
|
35
31
|
|
|
36
32
|
Examples:
|
|
37
|
-
# Start MCP server
|
|
33
|
+
# Start MCP server
|
|
38
34
|
npx ${packageJson.name}
|
|
39
35
|
|
|
40
|
-
# Start with HTTP transport on custom port
|
|
41
|
-
npx ${packageJson.name} --http --port 3001
|
|
42
|
-
|
|
43
36
|
# Show version
|
|
44
37
|
npx ${packageJson.name} --version
|
|
45
38
|
|
|
@@ -54,10 +47,6 @@ function showVersion() {
|
|
|
54
47
|
async function main() {
|
|
55
48
|
const args = process.argv.slice(2);
|
|
56
49
|
|
|
57
|
-
// Parse command line arguments
|
|
58
|
-
let useHttp = false;
|
|
59
|
-
let port = 3000;
|
|
60
|
-
|
|
61
50
|
for (let i = 0; i < args.length; i++) {
|
|
62
51
|
const arg = args[i];
|
|
63
52
|
|
|
@@ -74,25 +63,6 @@ async function main() {
|
|
|
74
63
|
process.exit(0);
|
|
75
64
|
break;
|
|
76
65
|
|
|
77
|
-
case '--stdio':
|
|
78
|
-
useHttp = false;
|
|
79
|
-
break;
|
|
80
|
-
|
|
81
|
-
case '--http':
|
|
82
|
-
useHttp = true;
|
|
83
|
-
break;
|
|
84
|
-
|
|
85
|
-
case '--port':
|
|
86
|
-
if (i + 1 >= args.length) {
|
|
87
|
-
console.error('Error: --port requires a value');
|
|
88
|
-
process.exit(1);
|
|
89
|
-
}
|
|
90
|
-
port = parseInt(args[++i], 10);
|
|
91
|
-
if (isNaN(port) || port < 1 || port > 65535) {
|
|
92
|
-
console.error('Error: Invalid port number');
|
|
93
|
-
process.exit(1);
|
|
94
|
-
}
|
|
95
|
-
break;
|
|
96
66
|
|
|
97
67
|
default:
|
|
98
68
|
console.error(`Error: Unknown option '${arg}'`);
|
|
@@ -101,7 +71,6 @@ async function main() {
|
|
|
101
71
|
}
|
|
102
72
|
}
|
|
103
73
|
|
|
104
|
-
// Validate required environment variables
|
|
105
74
|
const requiredEnvVars = ['TIDEWAYS_TOKEN', 'TIDEWAYS_ORG', 'TIDEWAYS_PROJECT'];
|
|
106
75
|
const missingVars = requiredEnvVars.filter(varName => !process.env[varName]);
|
|
107
76
|
|
|
@@ -116,30 +85,18 @@ async function main() {
|
|
|
116
85
|
}
|
|
117
86
|
|
|
118
87
|
try {
|
|
119
|
-
// Create and start the MCP server
|
|
120
88
|
const server = new TidewaysMCPServer();
|
|
121
89
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
console.error('Error: HTTP transport is not yet implemented');
|
|
127
|
-
console.error('Please use stdio transport (default) for now');
|
|
128
|
-
process.exit(1);
|
|
129
|
-
} else {
|
|
130
|
-
console.log('Starting Tideways MCP Server with stdio transport...');
|
|
131
|
-
console.log('Server is ready to receive MCP requests');
|
|
132
|
-
|
|
133
|
-
// Start the server with stdio transport
|
|
134
|
-
await server.start();
|
|
135
|
-
}
|
|
90
|
+
console.log('Starting Tideways MCP Server...');
|
|
91
|
+
console.log('Server is ready to receive MCP requests');
|
|
92
|
+
|
|
93
|
+
await server.start();
|
|
136
94
|
} catch (error) {
|
|
137
95
|
console.error('Error starting server:', error.message);
|
|
138
96
|
process.exit(1);
|
|
139
97
|
}
|
|
140
98
|
}
|
|
141
99
|
|
|
142
|
-
// Handle graceful shutdown
|
|
143
100
|
process.on('SIGINT', () => {
|
|
144
101
|
console.log('\nShutting down Tideways MCP Server...');
|
|
145
102
|
process.exit(0);
|
package/dist/lib/errors.d.ts
CHANGED
|
@@ -6,15 +6,9 @@ export declare class TidewaysAPIError extends Error implements TidewaysError {
|
|
|
6
6
|
constructor(message: string, category: ErrorCategory, statusCode?: number, retryAfter?: number);
|
|
7
7
|
}
|
|
8
8
|
export declare class ErrorHandler {
|
|
9
|
-
/**
|
|
10
|
-
* Handle API errors and convert them to user-friendly messages
|
|
11
|
-
*/
|
|
12
9
|
static handleApiError(error: any): TidewaysAPIError;
|
|
13
10
|
static handleValidationError(message: string): TidewaysAPIError;
|
|
14
11
|
static formatErrorForUser(error: TidewaysAPIError): string;
|
|
15
|
-
/**
|
|
16
|
-
* Handle partial failures gracefully
|
|
17
|
-
*/
|
|
18
12
|
static handlePartialFailure(errors: TidewaysAPIError[], partialData?: any): string;
|
|
19
13
|
static isRetryable(error: TidewaysAPIError): boolean;
|
|
20
14
|
static getRetryDelay(error: TidewaysAPIError, attempt: number): number;
|
package/dist/lib/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEjE,qBAAa,gBAAiB,SAAQ,KAAM,YAAW,aAAa;IAC3D,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAS/F;AAED,qBAAa,YAAY;IACvB
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEjE,qBAAa,gBAAiB,SAAQ,KAAM,YAAW,aAAa;IAC3D,QAAQ,EAAE,aAAa,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;gBAEf,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,aAAa,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;CAS/F;AAED,qBAAa,YAAY;IACvB,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,GAAG,GAAG,gBAAgB;IAoEnD,MAAM,CAAC,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB;IAK/D,MAAM,CAAC,kBAAkB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM;IA4B1D,MAAM,CAAC,oBAAoB,CAAC,MAAM,EAAE,gBAAgB,EAAE,EAAE,WAAW,CAAC,EAAE,GAAG,GAAG,MAAM;IAUlF,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO;IAQpD,MAAM,CAAC,aAAa,CAAC,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM;CAOvE"}
|
package/dist/lib/errors.js
CHANGED
|
@@ -13,9 +13,6 @@ export class TidewaysAPIError extends Error {
|
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
export class ErrorHandler {
|
|
16
|
-
/**
|
|
17
|
-
* Handle API errors and convert them to user-friendly messages
|
|
18
|
-
*/
|
|
19
16
|
static handleApiError(error) {
|
|
20
17
|
logger.error('API error occurred', error, {
|
|
21
18
|
url: error.config?.url,
|
|
@@ -72,9 +69,6 @@ export class ErrorHandler {
|
|
|
72
69
|
return `${baseMessage}\n\nIf this error persists, please check the server logs for more details.`;
|
|
73
70
|
}
|
|
74
71
|
}
|
|
75
|
-
/**
|
|
76
|
-
* Handle partial failures gracefully
|
|
77
|
-
*/
|
|
78
72
|
static handlePartialFailure(errors, partialData) {
|
|
79
73
|
const errorSummary = errors.map(err => `• ${err.category}: ${err.message}`).join('\n');
|
|
80
74
|
if (partialData && Object.keys(partialData).length > 0) {
|
package/dist/lib/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAClC,QAAQ,CAAgB;IACxB,UAAU,CAAU;IACpB,UAAU,CAAU;IAE3B,YAAY,OAAe,EAAE,QAAuB,EAAE,UAAmB,EAAE,UAAmB;QAC5F,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAC7B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;QAE7B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;IAClD,CAAC;CACF;AAED,MAAM,OAAO,YAAY;IACvB
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/lib/errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tideways-config.d.ts","sourceRoot":"","sources":["../../src/types/tideways-config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB
|
|
1
|
+
{"version":3,"file":"tideways-config.d.ts","sourceRoot":"","sources":["../../src/types/tideways-config.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tideways-mcp-server",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "1.1.0",
|
|
4
4
|
"description": "MCP server for Tideways performance monitoring integration with AI assistants",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -34,7 +34,9 @@
|
|
|
34
34
|
"typecheck": "tsc --noEmit",
|
|
35
35
|
"clean": "rimraf dist",
|
|
36
36
|
"prepare": "npm run build",
|
|
37
|
-
"prepublishOnly": "npm run typecheck && npm run lint && npm run test && npm run build"
|
|
37
|
+
"prepublishOnly": "npm run typecheck && npm run lint && npm run test && npm run build",
|
|
38
|
+
"semantic-release": "semantic-release",
|
|
39
|
+
"semantic-release:dry-run": "semantic-release --dry-run"
|
|
38
40
|
},
|
|
39
41
|
"keywords": [
|
|
40
42
|
"mcp",
|
|
@@ -68,6 +70,13 @@
|
|
|
68
70
|
"jest": "^29.5.0",
|
|
69
71
|
"prettier": "^3.0.0",
|
|
70
72
|
"rimraf": "^5.0.0",
|
|
73
|
+
"semantic-release": "^23.0.0",
|
|
74
|
+
"@semantic-release/changelog": "^6.0.3",
|
|
75
|
+
"@semantic-release/git": "^10.0.1",
|
|
76
|
+
"@semantic-release/github": "^9.2.0",
|
|
77
|
+
"@semantic-release/npm": "^11.0.2",
|
|
78
|
+
"@commitlint/cli": "^18.4.0",
|
|
79
|
+
"@commitlint/config-conventional": "^18.4.0",
|
|
71
80
|
"ts-jest": "^29.1.0",
|
|
72
81
|
"tsx": "^4.0.0",
|
|
73
82
|
"typescript": "^5.2.0"
|