hawkeye-mcp-server 1.1.0 → 1.2.1
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/CHANGELOG.md +85 -0
- package/README.md +125 -7
- package/SPECIFICATION.md +121 -2
- package/USAGE.md +89 -0
- package/build/config/config.d.ts +11 -0
- package/build/config/config.js +27 -0
- package/build/config/config.js.map +1 -1
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/build/tools/index.d.ts +2 -0
- package/build/tools/index.js +27 -0
- package/build/tools/index.js.map +1 -1
- package/build/tools/switch-instance.d.ts +22 -0
- package/build/tools/switch-instance.js +88 -0
- package/build/tools/switch-instance.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,91 @@ All notable changes to the Hawkeye MCP Server will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.2.1] - 2025-11-20
|
|
9
|
+
|
|
10
|
+
### Enhanced
|
|
11
|
+
- **Smart URL Normalization for Instance Switching** - The `hawkeye_switch_instance` tool now accepts flexible URL formats:
|
|
12
|
+
- Just subdomain: `"prod"` → `https://prod.app.neubird.ai/api`
|
|
13
|
+
- Partial URL: `"prod.app.neubird.ai"` → `https://prod.app.neubird.ai/api`
|
|
14
|
+
- Full URL: preserved with smart completion
|
|
15
|
+
- Automatic `https://` prefix addition
|
|
16
|
+
- Automatic `/api` path suffix addition
|
|
17
|
+
- Custom domain support
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
- Comprehensive URL normalization examples in documentation
|
|
21
|
+
- New "Working with Multiple Hawkeye Instances" section in USAGE.md
|
|
22
|
+
- Complete tool specification for `hawkeye_switch_instance` in SPECIFICATION.md
|
|
23
|
+
- Test suite for URL normalization (7 test cases, 100% passing)
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
- Updated tool description to clarify flexible URL input formats
|
|
27
|
+
- Enhanced error messages with URL normalization information
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## [1.2.0] - 2025-11-20
|
|
32
|
+
|
|
33
|
+
### Added
|
|
34
|
+
- **Instance Switching** - New `hawkeye_switch_instance` tool for managing multiple Hawkeye environments
|
|
35
|
+
- Switch between dev/staging/production environments
|
|
36
|
+
- Support for multiple customer deployments
|
|
37
|
+
- Automatic authentication token clearing
|
|
38
|
+
- Automatic project cache clearing
|
|
39
|
+
- URL validation
|
|
40
|
+
|
|
41
|
+
### Changed
|
|
42
|
+
- Added `clearCache()` method to ProjectService
|
|
43
|
+
- Added `clearTokenCache()` method to AuthenticationService
|
|
44
|
+
- Updated ToolServices interface to include authService
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## [1.1.0] - 2025-11-19
|
|
49
|
+
|
|
50
|
+
### Added
|
|
51
|
+
- **Search Functionality** - New `search_term` parameter for `hawkeye_list_sessions`
|
|
52
|
+
- Search incidents by title using keywords (e.g., "load avg", "database", "timeout")
|
|
53
|
+
- Case-insensitive partial matching
|
|
54
|
+
- Works with both investigated and uninvestigated incidents
|
|
55
|
+
- Can be combined with other filters
|
|
56
|
+
|
|
57
|
+
### Changed
|
|
58
|
+
- Updated documentation with search examples
|
|
59
|
+
- Enhanced USAGE.md with search use cases
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## [1.0.2] - 2025-11-19
|
|
64
|
+
|
|
65
|
+
### Enhanced
|
|
66
|
+
- **Tool Descriptions** - Improved clarity to help LLMs select the correct tool
|
|
67
|
+
- Added explicit "START new" vs "ALREADY STARTED" language
|
|
68
|
+
- Added "Do NOT use" warnings to prevent tool confusion
|
|
69
|
+
- Enhanced parameter descriptions for alert_id and session_uuid
|
|
70
|
+
- Added `investigation_hint` to list_sessions response for uninvestigated incidents
|
|
71
|
+
|
|
72
|
+
### Changed
|
|
73
|
+
- Updated tool descriptions for `hawkeye_investigate_alert` and `hawkeye_continue_investigation`
|
|
74
|
+
- Added contextual hints in responses to guide proper tool usage
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## [1.0.1] - 2025-11-19
|
|
79
|
+
|
|
80
|
+
### Added
|
|
81
|
+
- **Compact Mode** - Automatic token optimization for large result sets
|
|
82
|
+
- Auto-enables for >10 sessions in list_sessions
|
|
83
|
+
- Strips verbose fields (raw_data, detailed grouped_incidents)
|
|
84
|
+
- 88.5% token reduction (from ~78KB to ~9KB for 20 sessions)
|
|
85
|
+
- Keeps essential fields: id, title, priority, status, create_time
|
|
86
|
+
- Manual control via `compact` parameter
|
|
87
|
+
|
|
88
|
+
### Enhanced
|
|
89
|
+
- Added helpful hints in responses (compact_hint, pagination_hint, investigation_hint)
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
8
93
|
## [1.0.0] - 2024-11-19
|
|
9
94
|
|
|
10
95
|
### Added
|
package/README.md
CHANGED
|
@@ -35,6 +35,32 @@ npm install -g hawkeye-mcp-server
|
|
|
35
35
|
npx hawkeye-mcp-server
|
|
36
36
|
```
|
|
37
37
|
|
|
38
|
+
### Quick Setup for Cursor Users
|
|
39
|
+
|
|
40
|
+
**Configuration file location:**
|
|
41
|
+
- **macOS/Linux:** `~/.cursor/mcp.json`
|
|
42
|
+
- **Windows:** `%APPDATA%\Cursor\mcp.json`
|
|
43
|
+
|
|
44
|
+
If the file doesn't exist, create it with this content:
|
|
45
|
+
|
|
46
|
+
```json
|
|
47
|
+
{
|
|
48
|
+
"mcpServers": {
|
|
49
|
+
"hawkeye": {
|
|
50
|
+
"command": "npx",
|
|
51
|
+
"args": ["hawkeye-mcp-server"],
|
|
52
|
+
"env": {
|
|
53
|
+
"HAWKEYE_EMAIL": "your-email@example.com",
|
|
54
|
+
"HAWKEYE_PASSWORD": "your-password",
|
|
55
|
+
"HAWKEYE_BASE_URL": "https://your-instance.app.neubird.ai/api"
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Then reload Cursor (`Cmd/Ctrl+Shift+P` → "Developer: Reload Window") and start investigating!
|
|
63
|
+
|
|
38
64
|
### Configuration
|
|
39
65
|
|
|
40
66
|
1. Set up your environment variables:
|
|
@@ -84,6 +110,29 @@ export HAWKEYE_BASE_URL="https://your-instance.app.neubird.ai/api"
|
|
|
84
110
|
}
|
|
85
111
|
```
|
|
86
112
|
|
|
113
|
+
**For Cursor** (add to `~/.cursor/mcp.json`):
|
|
114
|
+
|
|
115
|
+
```json
|
|
116
|
+
{
|
|
117
|
+
"mcpServers": {
|
|
118
|
+
"hawkeye": {
|
|
119
|
+
"command": "npx",
|
|
120
|
+
"args": ["hawkeye-mcp-server"],
|
|
121
|
+
"env": {
|
|
122
|
+
"HAWKEYE_EMAIL": "your-email@example.com",
|
|
123
|
+
"HAWKEYE_PASSWORD": "your-password",
|
|
124
|
+
"HAWKEYE_BASE_URL": "https://your-instance.app.neubird.ai/api"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
After adding the configuration, reload Cursor:
|
|
132
|
+
- Press `Cmd+Shift+P` (Mac) or `Ctrl+Shift+P` (Windows/Linux)
|
|
133
|
+
- Type "Developer: Reload Window"
|
|
134
|
+
- Press Enter
|
|
135
|
+
|
|
87
136
|
3. Start using it! Ask your AI agent:
|
|
88
137
|
|
|
89
138
|
```
|
|
@@ -113,7 +162,25 @@ The MCP server will call `hawkeye_list_sessions` with:
|
|
|
113
162
|
}
|
|
114
163
|
```
|
|
115
164
|
|
|
116
|
-
### 2.
|
|
165
|
+
### 2. Search for Specific Incidents
|
|
166
|
+
|
|
167
|
+
Search for incidents by keywords in the title:
|
|
168
|
+
|
|
169
|
+
```
|
|
170
|
+
"List all investigations into load avg issues"
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
The MCP server will call `hawkeye_list_sessions` with:
|
|
174
|
+
```json
|
|
175
|
+
{
|
|
176
|
+
"search_term": "load avg",
|
|
177
|
+
"only_uninvestigated": true
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
You can search for any keyword like "database", "timeout", "disk space", etc. Works with both investigated and uninvestigated incidents.
|
|
182
|
+
|
|
183
|
+
### 3. Investigate an Alert
|
|
117
184
|
|
|
118
185
|
Analyze a specific alert by ID:
|
|
119
186
|
|
|
@@ -123,7 +190,7 @@ Analyze a specific alert by ID:
|
|
|
123
190
|
|
|
124
191
|
The server automatically finds existing investigations or creates a new one.
|
|
125
192
|
|
|
126
|
-
###
|
|
193
|
+
### 4. Get Investigation Details
|
|
127
194
|
|
|
128
195
|
Deep dive into a specific investigation:
|
|
129
196
|
|
|
@@ -131,7 +198,7 @@ Deep dive into a specific investigation:
|
|
|
131
198
|
"Show me the full analysis from session abc-123-def-456"
|
|
132
199
|
```
|
|
133
200
|
|
|
134
|
-
###
|
|
201
|
+
### 5. View Analytics
|
|
135
202
|
|
|
136
203
|
Get organization-wide incident statistics:
|
|
137
204
|
|
|
@@ -139,7 +206,7 @@ Get organization-wide incident statistics:
|
|
|
139
206
|
"Show me the incident report with MTTR and time saved metrics"
|
|
140
207
|
```
|
|
141
208
|
|
|
142
|
-
###
|
|
209
|
+
### 6. Continue an Investigation
|
|
143
210
|
|
|
144
211
|
Ask follow-up questions on an existing investigation:
|
|
145
212
|
|
|
@@ -147,6 +214,36 @@ Ask follow-up questions on an existing investigation:
|
|
|
147
214
|
"Can you dig deeper into the network policy issues you found?"
|
|
148
215
|
```
|
|
149
216
|
|
|
217
|
+
### 7. Switch Hawkeye Instances
|
|
218
|
+
|
|
219
|
+
Switch between different Hawkeye environments or customer instances with flexible URL formats:
|
|
220
|
+
|
|
221
|
+
```
|
|
222
|
+
"Switch to the production instance"
|
|
223
|
+
"Switch to customerA deployment"
|
|
224
|
+
"Switch to staging.app.neubird.ai"
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
The tool accepts multiple URL formats and automatically normalizes them:
|
|
228
|
+
|
|
229
|
+
**Supported Formats:**
|
|
230
|
+
- **Just subdomain**: `"prod"` → `https://prod.app.neubird.ai/api`
|
|
231
|
+
- **Subdomain name**: `"customerA"` → `https://customerA.app.neubird.ai/api`
|
|
232
|
+
- **Partial URL**: `"prod.app.neubird.ai"` → `https://prod.app.neubird.ai/api`
|
|
233
|
+
- **URL without protocol**: `"staging.app.neubird.ai"` → `https://staging.app.neubird.ai/api`
|
|
234
|
+
- **Full URL without path**: `"https://prod.app.neubird.ai"` → `https://prod.app.neubird.ai/api`
|
|
235
|
+
- **Complete URL**: `"https://prod.app.neubird.ai/api"` → `https://prod.app.neubird.ai/api` (no change)
|
|
236
|
+
- **Custom domains**: `"custom.domain.com/api"` → `https://custom.domain.com/api`
|
|
237
|
+
|
|
238
|
+
**Example:**
|
|
239
|
+
```json
|
|
240
|
+
{
|
|
241
|
+
"base_url": "prod"
|
|
242
|
+
}
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
Useful for users managing multiple environments (dev, staging, production) or multiple customer instances. Automatically clears authentication tokens and project cache, requiring re-authentication on the next API call.
|
|
246
|
+
|
|
150
247
|
## 🛠️ Available Tools
|
|
151
248
|
|
|
152
249
|
The Hawkeye MCP Server provides the following tools to AI agents:
|
|
@@ -162,6 +259,7 @@ The Hawkeye MCP Server provides the following tools to AI agents:
|
|
|
162
259
|
| `hawkeye_get_session_report` | Get summary reports with time-saved metrics |
|
|
163
260
|
| `hawkeye_get_session_summary` | Get quality scores and analysis metrics |
|
|
164
261
|
| `hawkeye_get_incident_report` | Get organization-wide incident analytics |
|
|
262
|
+
| `hawkeye_switch_instance` | **NEW** Switch to a different Hawkeye instance (dev/staging/prod) |
|
|
165
263
|
|
|
166
264
|
See the [API Reference](./SPECIFICATION.md) for detailed documentation on each tool.
|
|
167
265
|
|
|
@@ -191,9 +289,9 @@ See the [API Reference](./SPECIFICATION.md) for detailed documentation on each t
|
|
|
191
289
|
|
|
192
290
|
The Hawkeye MCP Server works with any MCP-compatible AI agent:
|
|
193
291
|
|
|
194
|
-
- ✅ **
|
|
292
|
+
- ✅ **Cursor** (macOS, Windows, Linux) - **Recommended for IDE integration**
|
|
293
|
+
- ✅ **Claude Code** (CLI tool - macOS, Windows, Linux) - **Recommended for terminal workflows**
|
|
195
294
|
- ✅ **Claude Desktop** (macOS, Windows)
|
|
196
|
-
- ✅ **Cursor.ai** (macOS, Windows, Linux)
|
|
197
295
|
- ✅ **Continue.dev** (VS Code extension)
|
|
198
296
|
- ✅ Any other MCP-compatible agent
|
|
199
297
|
|
|
@@ -230,7 +328,27 @@ For more troubleshooting tips, see the [Installation Guide](./INSTALLATION.md#tr
|
|
|
230
328
|
|
|
231
329
|
## 📊 Examples
|
|
232
330
|
|
|
233
|
-
### Example 1:
|
|
331
|
+
### Example 1: Using in Cursor IDE
|
|
332
|
+
|
|
333
|
+
```
|
|
334
|
+
You: "List all my Hawkeye projects"
|
|
335
|
+
|
|
336
|
+
Cursor: *Shows your available projects with sync status*
|
|
337
|
+
|
|
338
|
+
You: "Show me all uninvestigated incidents from the Variation1 project"
|
|
339
|
+
|
|
340
|
+
Cursor: *Lists uninvestigated incidents*
|
|
341
|
+
|
|
342
|
+
You: "Investigate the most recent one"
|
|
343
|
+
|
|
344
|
+
Cursor: *Creates investigation and returns detailed RCA*
|
|
345
|
+
|
|
346
|
+
You: "Can you dig deeper into the network issues mentioned?"
|
|
347
|
+
|
|
348
|
+
Cursor: *Continues investigation with follow-up analysis*
|
|
349
|
+
```
|
|
350
|
+
|
|
351
|
+
### Example 2: Find and Investigate Uninvestigated Incidents
|
|
234
352
|
|
|
235
353
|
```
|
|
236
354
|
You: "Show me all uninvestigated P1 incidents from last week"
|
package/SPECIFICATION.md
CHANGED
|
@@ -243,6 +243,8 @@ A developer using Cursor.ai encounters an alert or incident in their cloud envir
|
|
|
243
243
|
investigation_status?: string; // Filter by investigation status (e.g., "INVESTIGATION_STATUS_NOT_STARTED")
|
|
244
244
|
session_type?: string; // Filter by session type (e.g., "SESSION_TYPE_INCIDENT")
|
|
245
245
|
hide_grouped_incidents?: boolean; // If true, hides grouped incidents, default: false
|
|
246
|
+
search_term?: string; // Search for incidents by title keyword (e.g., "load avg", "database")
|
|
247
|
+
compact?: boolean; // If true, returns compact format to reduce token usage
|
|
246
248
|
}
|
|
247
249
|
```
|
|
248
250
|
|
|
@@ -254,7 +256,9 @@ A developer using Cursor.ai encounters an alert or incident in their cloud envir
|
|
|
254
256
|
5. Can filter by session type (e.g., incident vs manual investigations)
|
|
255
257
|
6. Convenience parameter `only_uninvestigated` automatically sets investigation_status to "INVESTIGATION_STATUS_NOT_STARTED" and session_type to "SESSION_TYPE_INCIDENT"
|
|
256
258
|
7. Can optionally hide grouped incidents
|
|
257
|
-
8.
|
|
259
|
+
8. **Can search incidents by title using `search_term` parameter** - performs case-insensitive partial match on incident_info.title field. Works with both investigated and uninvestigated incidents.
|
|
260
|
+
9. Automatically enables compact mode for >10 results to reduce token usage (can be overridden with `compact` parameter)
|
|
261
|
+
10. Returns sessions sorted by creation time (most recent first)
|
|
258
262
|
|
|
259
263
|
**Output**:
|
|
260
264
|
```typescript
|
|
@@ -281,6 +285,7 @@ A developer using Cursor.ai encounters an alert or incident in their cloud envir
|
|
|
281
285
|
limit: number;
|
|
282
286
|
count: number;
|
|
283
287
|
project_uuid: string;
|
|
288
|
+
compact_mode: boolean;
|
|
284
289
|
filters_applied: {
|
|
285
290
|
date_from?: string;
|
|
286
291
|
date_to?: string;
|
|
@@ -288,7 +293,11 @@ A developer using Cursor.ai encounters an alert or incident in their cloud envir
|
|
|
288
293
|
session_type?: string;
|
|
289
294
|
only_uninvestigated?: boolean;
|
|
290
295
|
hide_grouped_incidents?: boolean;
|
|
296
|
+
search_term?: string;
|
|
291
297
|
};
|
|
298
|
+
compact_hint?: string; // Hint when compact mode is active
|
|
299
|
+
pagination_hint?: string; // Hint when more results are available
|
|
300
|
+
investigation_hint?: string; // Hint for uninvestigated incidents
|
|
292
301
|
}
|
|
293
302
|
```
|
|
294
303
|
|
|
@@ -465,7 +474,92 @@ A developer using Cursor.ai encounters an alert or incident in their cloud envir
|
|
|
465
474
|
}
|
|
466
475
|
```
|
|
467
476
|
|
|
468
|
-
### 11. `
|
|
477
|
+
### 11. `hawkeye_switch_instance`
|
|
478
|
+
|
|
479
|
+
**Description**: Switch to a different Hawkeye instance by updating the base URL. Useful for users managing multiple Hawkeye environments (dev, staging, prod) or multiple customer instances.
|
|
480
|
+
|
|
481
|
+
**Input Schema**:
|
|
482
|
+
```typescript
|
|
483
|
+
{
|
|
484
|
+
base_url: string; // The new Hawkeye instance to connect to
|
|
485
|
+
// Accepts multiple formats:
|
|
486
|
+
// - Just subdomain: "prod", "customerA"
|
|
487
|
+
// - Partial URL: "prod.app.neubird.ai"
|
|
488
|
+
// - Full URL: "https://prod.app.neubird.ai/api"
|
|
489
|
+
}
|
|
490
|
+
```
|
|
491
|
+
|
|
492
|
+
**Behavior**:
|
|
493
|
+
1. Normalizes the input URL to ensure correct format:
|
|
494
|
+
- Adds `.app.neubird.ai` suffix if only subdomain provided
|
|
495
|
+
- Adds `https://` prefix if protocol missing
|
|
496
|
+
- Adds `/api` path if not present
|
|
497
|
+
2. Validates the URL format
|
|
498
|
+
3. Updates the base URL configuration
|
|
499
|
+
4. Clears cached authentication tokens (different instance requires new auth)
|
|
500
|
+
5. Clears project cache (different instance has different projects)
|
|
501
|
+
|
|
502
|
+
**URL Normalization Examples**:
|
|
503
|
+
|
|
504
|
+
| Input | Normalized Output |
|
|
505
|
+
|-------|------------------|
|
|
506
|
+
| `"prod"` | `https://prod.app.neubird.ai/api` |
|
|
507
|
+
| `"customerA"` | `https://customerA.app.neubird.ai/api` |
|
|
508
|
+
| `"staging"` | `https://staging.app.neubird.ai/api` |
|
|
509
|
+
| `"prod.app.neubird.ai"` | `https://prod.app.neubird.ai/api` |
|
|
510
|
+
| `"https://prod.app.neubird.ai"` | `https://prod.app.neubird.ai/api` |
|
|
511
|
+
| `"https://prod.app.neubird.ai/api"` | `https://prod.app.neubird.ai/api` |
|
|
512
|
+
| `"custom.domain.com/api"` | `https://custom.domain.com/api` |
|
|
513
|
+
|
|
514
|
+
**Output**:
|
|
515
|
+
```typescript
|
|
516
|
+
{
|
|
517
|
+
success: boolean;
|
|
518
|
+
input_provided: string; // Original input from user
|
|
519
|
+
normalized_url: string; // URL after normalization
|
|
520
|
+
previous_url: string; // Previous base URL
|
|
521
|
+
new_url: string; // New base URL (same as normalized_url)
|
|
522
|
+
message: string; // Human-readable status message
|
|
523
|
+
note: string; // Important information about next steps
|
|
524
|
+
}
|
|
525
|
+
```
|
|
526
|
+
|
|
527
|
+
**Success Response Example**:
|
|
528
|
+
```typescript
|
|
529
|
+
{
|
|
530
|
+
success: true,
|
|
531
|
+
input_provided: "prod",
|
|
532
|
+
normalized_url: "https://prod.app.neubird.ai/api",
|
|
533
|
+
previous_url: "https://sandbox.app.neubird.ai/api",
|
|
534
|
+
new_url: "https://prod.app.neubird.ai/api",
|
|
535
|
+
message: "Switched from https://sandbox.app.neubird.ai/api to https://prod.app.neubird.ai/api. Authentication tokens cleared. You can now use Hawkeye tools with the new instance.",
|
|
536
|
+
note: "The next Hawkeye API call will authenticate against the new instance."
|
|
537
|
+
}
|
|
538
|
+
```
|
|
539
|
+
|
|
540
|
+
**Error Response Example**:
|
|
541
|
+
```typescript
|
|
542
|
+
{
|
|
543
|
+
success: false,
|
|
544
|
+
error: "Invalid base URL format: invalid-url",
|
|
545
|
+
current_url: "https://sandbox.app.neubird.ai/api",
|
|
546
|
+
suggestions: [
|
|
547
|
+
"Verify the base URL format is correct (e.g., \"https://app.neubird.ai/api\")",
|
|
548
|
+
"Ensure the URL includes the /api path",
|
|
549
|
+
"Check that the instance is accessible"
|
|
550
|
+
]
|
|
551
|
+
}
|
|
552
|
+
```
|
|
553
|
+
|
|
554
|
+
**Important Notes**:
|
|
555
|
+
- Switching instances clears all authentication tokens
|
|
556
|
+
- Switching instances clears the project cache
|
|
557
|
+
- The next API call will trigger re-authentication
|
|
558
|
+
- Users will need to re-list projects after switching
|
|
559
|
+
|
|
560
|
+
---
|
|
561
|
+
|
|
562
|
+
### 12. `hawkeye_configure_defaults`
|
|
469
563
|
|
|
470
564
|
**Description**: Sets default project and preferences for the session.
|
|
471
565
|
|
|
@@ -890,6 +984,31 @@ Show me all the incidents that haven't been investigated yet in the HTM-Azure pr
|
|
|
890
984
|
}
|
|
891
985
|
```
|
|
892
986
|
|
|
987
|
+
### Example 1b: Search for Specific Incidents
|
|
988
|
+
|
|
989
|
+
**User to Cursor**:
|
|
990
|
+
```
|
|
991
|
+
List all investigations into load avg issues
|
|
992
|
+
```
|
|
993
|
+
|
|
994
|
+
**Cursor calls**:
|
|
995
|
+
```json
|
|
996
|
+
{
|
|
997
|
+
"tool": "hawkeye_list_sessions",
|
|
998
|
+
"arguments": {
|
|
999
|
+
"search_term": "load avg",
|
|
1000
|
+
"only_uninvestigated": true,
|
|
1001
|
+
"limit": 20
|
|
1002
|
+
}
|
|
1003
|
+
}
|
|
1004
|
+
```
|
|
1005
|
+
|
|
1006
|
+
**Notes**:
|
|
1007
|
+
- The `search_term` performs case-insensitive partial matching on incident titles
|
|
1008
|
+
- Works with both investigated and uninvestigated incidents
|
|
1009
|
+
- Can be combined with other filters like date ranges, investigation status, etc.
|
|
1010
|
+
- Example searches: "database", "timeout", "disk space", "API gateway", "high CPU"
|
|
1011
|
+
|
|
893
1012
|
**Alternative using explicit filters**:
|
|
894
1013
|
```json
|
|
895
1014
|
{
|
package/USAGE.md
CHANGED
|
@@ -385,19 +385,35 @@ Completeness:
|
|
|
385
385
|
|
|
386
386
|
**Key Parameters:**
|
|
387
387
|
- `only_uninvestigated`: Quick filter for new incidents
|
|
388
|
+
- `search_term`: **NEW** Search incidents by title keyword (e.g., "load avg", "database", "timeout")
|
|
388
389
|
- `investigation_status`: Filter by status
|
|
389
390
|
- `session_type`: Filter by incident vs manual
|
|
390
391
|
- `date_from`/`date_to`: Date range filtering
|
|
391
392
|
- `page`/`limit`: Pagination
|
|
393
|
+
- `compact`: Control compact mode for large results
|
|
392
394
|
|
|
393
395
|
**Example:**
|
|
394
396
|
```
|
|
395
397
|
"Show uninvestigated incidents"
|
|
398
|
+
"List all investigations into load avg issues"
|
|
399
|
+
"Search for database timeout incidents"
|
|
400
|
+
"Find all high CPU incidents from last week"
|
|
396
401
|
"List sessions from last week"
|
|
397
402
|
"Show me recent investigations in HTM-Azure"
|
|
398
403
|
"Find all incidents from October"
|
|
399
404
|
```
|
|
400
405
|
|
|
406
|
+
**Search Feature:**
|
|
407
|
+
The `search_term` parameter performs case-insensitive partial matching on incident titles. It works with both investigated and uninvestigated incidents and can be combined with other filters:
|
|
408
|
+
|
|
409
|
+
```
|
|
410
|
+
"List uninvestigated load avg incidents"
|
|
411
|
+
→ search_term: "load avg", only_uninvestigated: true
|
|
412
|
+
|
|
413
|
+
"Find all API gateway errors from November"
|
|
414
|
+
→ search_term: "API gateway", date_from: "2024-11-01"
|
|
415
|
+
```
|
|
416
|
+
|
|
401
417
|
---
|
|
402
418
|
|
|
403
419
|
### 4. hawkeye_inspect_session
|
|
@@ -513,6 +529,79 @@ Completeness:
|
|
|
513
529
|
|
|
514
530
|
## Advanced Usage
|
|
515
531
|
|
|
532
|
+
### Working with Multiple Hawkeye Instances
|
|
533
|
+
|
|
534
|
+
If you manage multiple Hawkeye instances (dev, staging, production) or multiple customer deployments, you can easily switch between them:
|
|
535
|
+
|
|
536
|
+
**Switch Using Simple Names:**
|
|
537
|
+
|
|
538
|
+
```
|
|
539
|
+
You: "Switch to the production instance"
|
|
540
|
+
|
|
541
|
+
Agent: *Calls hawkeye_switch_instance with base_url: "prod"*
|
|
542
|
+
|
|
543
|
+
Response:
|
|
544
|
+
✅ Switched from https://sandbox.app.neubird.ai/api to https://prod.app.neubird.ai/api
|
|
545
|
+
Authentication tokens cleared. Next API call will authenticate against the new instance.
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
**Switch Using Partial URLs:**
|
|
549
|
+
|
|
550
|
+
```
|
|
551
|
+
You: "Switch to staging.app.neubird.ai"
|
|
552
|
+
|
|
553
|
+
Agent: *Automatically adds https:// prefix and /api suffix*
|
|
554
|
+
|
|
555
|
+
Response: Successfully switched to https://staging.app.neubird.ai/api
|
|
556
|
+
```
|
|
557
|
+
|
|
558
|
+
**Switch to Customer Deployments:**
|
|
559
|
+
|
|
560
|
+
```
|
|
561
|
+
You: "Switch to the customerA deployment"
|
|
562
|
+
|
|
563
|
+
Agent: *Calls hawkeye_switch_instance with base_url: "customerA"*
|
|
564
|
+
|
|
565
|
+
Response: Switched to https://customerA.app.neubird.ai/api
|
|
566
|
+
```
|
|
567
|
+
|
|
568
|
+
**Supported URL Formats:**
|
|
569
|
+
|
|
570
|
+
The `hawkeye_switch_instance` tool accepts flexible URL formats:
|
|
571
|
+
|
|
572
|
+
| Input Format | Normalized Output |
|
|
573
|
+
|--------------|------------------|
|
|
574
|
+
| `"prod"` | `https://prod.app.neubird.ai/api` |
|
|
575
|
+
| `"customerA"` | `https://customerA.app.neubird.ai/api` |
|
|
576
|
+
| `"staging.app.neubird.ai"` | `https://staging.app.neubird.ai/api` |
|
|
577
|
+
| `"https://prod.app.neubird.ai"` | `https://prod.app.neubird.ai/api` |
|
|
578
|
+
| `"https://prod.app.neubird.ai/api"` | `https://prod.app.neubird.ai/api` |
|
|
579
|
+
| `"custom.domain.com/api"` | `https://custom.domain.com/api` |
|
|
580
|
+
|
|
581
|
+
**Important Notes:**
|
|
582
|
+
- Switching instances **clears all cached authentication tokens**
|
|
583
|
+
- Switching instances **clears the project cache**
|
|
584
|
+
- The next API call will automatically re-authenticate against the new instance
|
|
585
|
+
- You'll need to re-list projects after switching to see what's available on the new instance
|
|
586
|
+
|
|
587
|
+
**Example Workflow:**
|
|
588
|
+
|
|
589
|
+
```
|
|
590
|
+
You: "Switch to prod"
|
|
591
|
+
Agent: ✅ Switched to prod instance
|
|
592
|
+
|
|
593
|
+
You: "List my projects"
|
|
594
|
+
Agent: *Authenticates to prod, lists projects*
|
|
595
|
+
|
|
596
|
+
You: "Show uninvestigated incidents"
|
|
597
|
+
Agent: *Uses the prod instance*
|
|
598
|
+
|
|
599
|
+
You: "Switch back to sandbox"
|
|
600
|
+
Agent: ✅ Switched to sandbox instance
|
|
601
|
+
```
|
|
602
|
+
|
|
603
|
+
---
|
|
604
|
+
|
|
516
605
|
### Working with Multiple Projects
|
|
517
606
|
|
|
518
607
|
If you manage multiple Hawkeye projects:
|
package/build/config/config.d.ts
CHANGED
|
@@ -25,6 +25,17 @@ export declare function loadConfig(): HawkeyeConfig;
|
|
|
25
25
|
* Get the global configuration instance
|
|
26
26
|
*/
|
|
27
27
|
export declare function getConfig(): HawkeyeConfig;
|
|
28
|
+
/**
|
|
29
|
+
* Update the base URL for Hawkeye API at runtime
|
|
30
|
+
* This allows switching between different Hawkeye instances
|
|
31
|
+
* @param newBaseUrl The new base URL (e.g., "https://prod.app.neubird.ai/api")
|
|
32
|
+
* @returns The updated configuration
|
|
33
|
+
*/
|
|
34
|
+
export declare function setBaseUrl(newBaseUrl: string): HawkeyeConfig;
|
|
35
|
+
/**
|
|
36
|
+
* Get the current base URL
|
|
37
|
+
*/
|
|
38
|
+
export declare function getCurrentBaseUrl(): string;
|
|
28
39
|
/**
|
|
29
40
|
* Constants used throughout the application
|
|
30
41
|
*/
|
package/build/config/config.js
CHANGED
|
@@ -62,6 +62,33 @@ export function getConfig() {
|
|
|
62
62
|
}
|
|
63
63
|
return config;
|
|
64
64
|
}
|
|
65
|
+
/**
|
|
66
|
+
* Update the base URL for Hawkeye API at runtime
|
|
67
|
+
* This allows switching between different Hawkeye instances
|
|
68
|
+
* @param newBaseUrl The new base URL (e.g., "https://prod.app.neubird.ai/api")
|
|
69
|
+
* @returns The updated configuration
|
|
70
|
+
*/
|
|
71
|
+
export function setBaseUrl(newBaseUrl) {
|
|
72
|
+
if (!config) {
|
|
73
|
+
config = loadConfig();
|
|
74
|
+
}
|
|
75
|
+
// Validate URL format
|
|
76
|
+
try {
|
|
77
|
+
new URL(newBaseUrl);
|
|
78
|
+
}
|
|
79
|
+
catch (error) {
|
|
80
|
+
throw new Error(`Invalid base URL format: ${newBaseUrl}`);
|
|
81
|
+
}
|
|
82
|
+
// Update the base URL
|
|
83
|
+
config.baseUrl = newBaseUrl;
|
|
84
|
+
return config;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Get the current base URL
|
|
88
|
+
*/
|
|
89
|
+
export function getCurrentBaseUrl() {
|
|
90
|
+
return getConfig().baseUrl;
|
|
91
|
+
}
|
|
65
92
|
/**
|
|
66
93
|
* Constants used throughout the application
|
|
67
94
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
|
package/build/index.js
CHANGED
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/build/tools/index.d.ts
CHANGED
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
* Central place to register all MCP tools and their handlers
|
|
4
4
|
*/
|
|
5
5
|
import { Tool } from '@modelcontextprotocol/sdk/types.js';
|
|
6
|
+
import { AuthenticationService } from '../services/auth.service.js';
|
|
6
7
|
import { ProjectService } from '../services/project.service.js';
|
|
7
8
|
import { SessionService } from '../services/session.service.js';
|
|
8
9
|
/**
|
|
9
10
|
* Services required by tool handlers
|
|
10
11
|
*/
|
|
11
12
|
export interface ToolServices {
|
|
13
|
+
authService: AuthenticationService;
|
|
12
14
|
projectService: ProjectService;
|
|
13
15
|
sessionService: SessionService;
|
|
14
16
|
}
|
package/build/tools/index.js
CHANGED
|
@@ -19,6 +19,8 @@ export function getToolDefinitions() {
|
|
|
19
19
|
getSessionReportTool(),
|
|
20
20
|
getSessionSummaryTool(),
|
|
21
21
|
getIncidentReportTool(),
|
|
22
|
+
// Configuration tools
|
|
23
|
+
getSwitchInstanceTool(),
|
|
22
24
|
];
|
|
23
25
|
}
|
|
24
26
|
/**
|
|
@@ -354,4 +356,29 @@ function getIncidentReportTool() {
|
|
|
354
356
|
},
|
|
355
357
|
};
|
|
356
358
|
}
|
|
359
|
+
/**
|
|
360
|
+
* Tool: hawkeye_switch_instance
|
|
361
|
+
*/
|
|
362
|
+
function getSwitchInstanceTool() {
|
|
363
|
+
return {
|
|
364
|
+
tool: {
|
|
365
|
+
name: 'hawkeye_switch_instance',
|
|
366
|
+
description: 'Switch to a different Hawkeye instance by updating the base URL. Useful for users managing multiple Hawkeye environments (dev, staging, prod) or multiple customer instances. Accepts flexible URL formats and automatically adds https:// and /api if needed. This clears authentication tokens and project cache.',
|
|
367
|
+
inputSchema: {
|
|
368
|
+
type: 'object',
|
|
369
|
+
properties: {
|
|
370
|
+
base_url: {
|
|
371
|
+
type: 'string',
|
|
372
|
+
description: 'The new Hawkeye instance to connect to. Accepts multiple formats: just subdomain ("prod", "customerA"), partial URL ("prod.app.neubird.ai"), or full URL ("https://prod.app.neubird.ai/api"). The tool will automatically format it correctly.',
|
|
373
|
+
},
|
|
374
|
+
},
|
|
375
|
+
required: ['base_url'],
|
|
376
|
+
},
|
|
377
|
+
},
|
|
378
|
+
handler: async (services, args) => {
|
|
379
|
+
const { switchInstance } = await import('./switch-instance.js');
|
|
380
|
+
return switchInstance(services, args);
|
|
381
|
+
},
|
|
382
|
+
};
|
|
383
|
+
}
|
|
357
384
|
//# sourceMappingURL=index.js.map
|
package/build/tools/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: hawkeye_switch_instance
|
|
3
|
+
* Switches the Hawkeye API base URL to connect to a different instance
|
|
4
|
+
*/
|
|
5
|
+
import { ToolServices } from './index.js';
|
|
6
|
+
import { z } from 'zod';
|
|
7
|
+
/**
|
|
8
|
+
* Input validation schema
|
|
9
|
+
*/
|
|
10
|
+
declare const SwitchInstanceInputSchema: z.ZodObject<{
|
|
11
|
+
base_url: z.ZodString;
|
|
12
|
+
}, "strip", z.ZodTypeAny, {
|
|
13
|
+
base_url: string;
|
|
14
|
+
}, {
|
|
15
|
+
base_url: string;
|
|
16
|
+
}>;
|
|
17
|
+
export type SwitchInstanceInput = z.infer<typeof SwitchInstanceInputSchema>;
|
|
18
|
+
/**
|
|
19
|
+
* Switch to a different Hawkeye instance
|
|
20
|
+
*/
|
|
21
|
+
export declare function switchInstance(services: ToolServices, args: unknown): Promise<any>;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: hawkeye_switch_instance
|
|
3
|
+
* Switches the Hawkeye API base URL to connect to a different instance
|
|
4
|
+
*/
|
|
5
|
+
import { setBaseUrl, getCurrentBaseUrl } from '../config/config.js';
|
|
6
|
+
import { logger } from '../utils/logger.js';
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
/**
|
|
9
|
+
* Input validation schema
|
|
10
|
+
*/
|
|
11
|
+
const SwitchInstanceInputSchema = z.object({
|
|
12
|
+
base_url: z.string().min(1).describe('The new Hawkeye instance identifier or URL. Can be: a subdomain like "prod" or "customerA", a partial URL like "prod.app.neubird.ai", or a full URL like "https://prod.app.neubird.ai/api"'),
|
|
13
|
+
});
|
|
14
|
+
/**
|
|
15
|
+
* Normalize and format the base URL to ensure it has the correct format
|
|
16
|
+
* Handles various input formats:
|
|
17
|
+
* - "prod" → "https://prod.app.neubird.ai/api"
|
|
18
|
+
* - "customerA" → "https://customerA.app.neubird.ai/api"
|
|
19
|
+
* - "prod.app.neubird.ai" → "https://prod.app.neubird.ai/api"
|
|
20
|
+
* - "https://prod.app.neubird.ai" → "https://prod.app.neubird.ai/api"
|
|
21
|
+
* - "https://prod.app.neubird.ai/api" → "https://prod.app.neubird.ai/api" (no change)
|
|
22
|
+
* - "https://custom.domain.com/api" → "https://custom.domain.com/api" (custom domains preserved)
|
|
23
|
+
*/
|
|
24
|
+
function normalizeBaseUrl(input) {
|
|
25
|
+
let url = input.trim();
|
|
26
|
+
// If it's just a subdomain like "prod" or "customerA", add the full domain
|
|
27
|
+
if (!url.includes('.') && !url.includes('://')) {
|
|
28
|
+
url = `${url}.app.neubird.ai`;
|
|
29
|
+
}
|
|
30
|
+
// Add https:// prefix if missing
|
|
31
|
+
if (!url.startsWith('http://') && !url.startsWith('https://')) {
|
|
32
|
+
url = `https://${url}`;
|
|
33
|
+
}
|
|
34
|
+
// Add /api suffix if missing
|
|
35
|
+
if (!url.endsWith('/api')) {
|
|
36
|
+
// Remove trailing slash if present
|
|
37
|
+
url = url.replace(/\/$/, '');
|
|
38
|
+
url = `${url}/api`;
|
|
39
|
+
}
|
|
40
|
+
return url;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Switch to a different Hawkeye instance
|
|
44
|
+
*/
|
|
45
|
+
export async function switchInstance(services, args) {
|
|
46
|
+
const input = SwitchInstanceInputSchema.parse(args);
|
|
47
|
+
try {
|
|
48
|
+
// Normalize the URL (handles partial URLs, adds https://, adds /api suffix)
|
|
49
|
+
const normalizedUrl = normalizeBaseUrl(input.base_url);
|
|
50
|
+
logger.info('Switching Hawkeye instance', {
|
|
51
|
+
previousUrl: getCurrentBaseUrl(),
|
|
52
|
+
inputUrl: input.base_url,
|
|
53
|
+
normalizedUrl: normalizedUrl,
|
|
54
|
+
});
|
|
55
|
+
// Get previous URL for comparison
|
|
56
|
+
const previousUrl = getCurrentBaseUrl();
|
|
57
|
+
// Update the base URL in config
|
|
58
|
+
const updatedConfig = setBaseUrl(normalizedUrl);
|
|
59
|
+
// Clear cached authentication tokens (different instance requires new auth)
|
|
60
|
+
services.authService.clearTokenCache();
|
|
61
|
+
// Clear project cache (different instance has different projects)
|
|
62
|
+
services.projectService.clearCache();
|
|
63
|
+
logger.info(`Successfully switched to new Hawkeye instance: ${input.base_url}`);
|
|
64
|
+
return {
|
|
65
|
+
success: true,
|
|
66
|
+
input_provided: input.base_url,
|
|
67
|
+
normalized_url: normalizedUrl,
|
|
68
|
+
previous_url: previousUrl,
|
|
69
|
+
new_url: updatedConfig.baseUrl,
|
|
70
|
+
message: `Switched from ${previousUrl} to ${updatedConfig.baseUrl}. Authentication tokens cleared. You can now use Hawkeye tools with the new instance.`,
|
|
71
|
+
note: 'The next Hawkeye API call will authenticate against the new instance.',
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
logger.error('Failed to switch Hawkeye instance', error);
|
|
76
|
+
return {
|
|
77
|
+
success: false,
|
|
78
|
+
error: error instanceof Error ? error.message : String(error),
|
|
79
|
+
current_url: getCurrentBaseUrl(),
|
|
80
|
+
suggestions: [
|
|
81
|
+
'Verify the base URL format is correct (e.g., "https://app.neubird.ai/api")',
|
|
82
|
+
'Ensure the URL includes the /api path',
|
|
83
|
+
'Check that the instance is accessible',
|
|
84
|
+
],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=switch-instance.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"switch-instance.js","sourceRoot":"","sources":["../../src/tools/switch-instance.ts"],"names":[],"mappings":"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"}
|