@nimbus-app/mcp 1.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 +212 -0
- package/dist/api-client.d.ts +25 -0
- package/dist/api-client.d.ts.map +1 -0
- package/dist/api-client.js +69 -0
- package/dist/api-client.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +493 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +162 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/package.json +54 -0
package/README.md
ADDED
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# Nimbus MCP Server
|
|
2
|
+
|
|
3
|
+
Connect Claude to your task memory. This MCP server lets Claude access your captured tasks and platform knowledge from Nimbus, so it can learn how you perform tasks and help you more effectively.
|
|
4
|
+
|
|
5
|
+
## Quick Start
|
|
6
|
+
|
|
7
|
+
### 1. Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g @nimbus-app/mcp
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
### 2. Get Your API Key
|
|
14
|
+
|
|
15
|
+
1. Open the Nimbus desktop app
|
|
16
|
+
2. Go to **Settings** → **Account**
|
|
17
|
+
3. Click **Generate MCP API Key**
|
|
18
|
+
4. Copy the key (starts with `nimbus_`)
|
|
19
|
+
|
|
20
|
+
### 3. Configure Claude Desktop
|
|
21
|
+
|
|
22
|
+
Add to your Claude Desktop config file:
|
|
23
|
+
|
|
24
|
+
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
25
|
+
**Windows:** `%APPDATA%\Claude\claude_desktop_config.json`
|
|
26
|
+
|
|
27
|
+
```json
|
|
28
|
+
{
|
|
29
|
+
"mcpServers": {
|
|
30
|
+
"nimbus": {
|
|
31
|
+
"command": "nimbus-mcp",
|
|
32
|
+
"env": {
|
|
33
|
+
"NIMBUS_API_KEY": "nimbus_your_api_key_here"
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### 4. Restart Claude Desktop
|
|
41
|
+
|
|
42
|
+
Quit and reopen Claude Desktop. You should see "nimbus" in the MCP servers list.
|
|
43
|
+
|
|
44
|
+
## Available Tools
|
|
45
|
+
|
|
46
|
+
Once connected, Claude has access to these tools:
|
|
47
|
+
|
|
48
|
+
### `nimbus_search_tasks`
|
|
49
|
+
|
|
50
|
+
Search for task patterns you've performed. Returns matching tasks with confidence scores and associated platforms.
|
|
51
|
+
|
|
52
|
+
**Example prompts:**
|
|
53
|
+
- "Search my tasks for submitting homework on Canvas"
|
|
54
|
+
- "Find how I usually file expense reports"
|
|
55
|
+
- "Look for tasks involving VS Code"
|
|
56
|
+
|
|
57
|
+
### `nimbus_get_task`
|
|
58
|
+
|
|
59
|
+
Get full details for a specific task, including platform knowledge, subtasks, and recent execution examples with step-by-step screenshots.
|
|
60
|
+
|
|
61
|
+
**Example prompts:**
|
|
62
|
+
- "Show me the full details for that Canvas task"
|
|
63
|
+
- "Get the execution steps with screenshots"
|
|
64
|
+
|
|
65
|
+
### `nimbus_search_workflows`
|
|
66
|
+
|
|
67
|
+
Search for recorded workflows/sessions by natural language query. Returns matching workflows with status, counts, and top related tasks.
|
|
68
|
+
|
|
69
|
+
**Example prompts:**
|
|
70
|
+
- "Find workflows where I submitted homework"
|
|
71
|
+
- "Show my recent workflows about expense reports"
|
|
72
|
+
- "Search my workflows for VS Code setup"
|
|
73
|
+
|
|
74
|
+
### `nimbus_get_workflow_steps`
|
|
75
|
+
|
|
76
|
+
Get detailed task executions and ordered workflow steps for a specific workflow.
|
|
77
|
+
|
|
78
|
+
**Example prompts:**
|
|
79
|
+
- "Show the step-by-step flow for this workflow"
|
|
80
|
+
- "Get workflow steps including screenshots"
|
|
81
|
+
- "Explain the executions in this workflow"
|
|
82
|
+
|
|
83
|
+
### `nimbus_search_platforms`
|
|
84
|
+
|
|
85
|
+
Search for platforms (apps/websites) you work with. Returns platform knowledge and related tasks.
|
|
86
|
+
|
|
87
|
+
**Example prompts:**
|
|
88
|
+
- "What platforms do I use for development?"
|
|
89
|
+
- "Find information about Canvas"
|
|
90
|
+
|
|
91
|
+
### `nimbus_get_platform`
|
|
92
|
+
|
|
93
|
+
Get full details for a specific platform, including accumulated knowledge about how it works and all tasks you perform on it.
|
|
94
|
+
|
|
95
|
+
**Example prompts:**
|
|
96
|
+
- "Show me everything about how I use VS Code"
|
|
97
|
+
- "Get full details on this platform"
|
|
98
|
+
|
|
99
|
+
### `nimbus_ask_user`
|
|
100
|
+
|
|
101
|
+
Ask you a question (you'll be notified in the Nimbus app).
|
|
102
|
+
|
|
103
|
+
**Example prompts:**
|
|
104
|
+
- "Ask the user which email to use for this form"
|
|
105
|
+
- "Check with the user if they want to proceed"
|
|
106
|
+
|
|
107
|
+
### `nimbus_get_question_status`
|
|
108
|
+
|
|
109
|
+
Check if you've answered a question.
|
|
110
|
+
|
|
111
|
+
## Example Conversation
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
You: Help me submit my CS101 homework on Canvas
|
|
115
|
+
|
|
116
|
+
Claude: Let me search your tasks to see how you usually do this.
|
|
117
|
+
[Uses nimbus_search_tasks with "submit homework Canvas"]
|
|
118
|
+
|
|
119
|
+
I found a task called "Submit Canvas Assignment" that you've done 5 times.
|
|
120
|
+
Let me get the detailed steps.
|
|
121
|
+
[Uses nimbus_get_task with include_executions=1]
|
|
122
|
+
|
|
123
|
+
Here's how you typically submit homework on Canvas:
|
|
124
|
+
|
|
125
|
+
1. Navigate to canvas.instructure.com
|
|
126
|
+
2. Click on "CS101" in the course list
|
|
127
|
+
3. Click "Assignments" in the left sidebar
|
|
128
|
+
4. Find your assignment and click on it
|
|
129
|
+
5. Click "Submit Assignment" button
|
|
130
|
+
6. Upload your file using the file picker
|
|
131
|
+
7. Click "Submit" to confirm
|
|
132
|
+
|
|
133
|
+
Would you like me to walk you through this step by step?
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Configuration Options
|
|
137
|
+
|
|
138
|
+
### Environment Variables
|
|
139
|
+
|
|
140
|
+
| Variable | Description | Default |
|
|
141
|
+
|----------|-------------|---------|
|
|
142
|
+
| `NIMBUS_API_KEY` | Your Nimbus API key (required) | - |
|
|
143
|
+
| `NIMBUS_API_URL` | API endpoint URL | `https://api.nimbusai.cloud/mcp/v1` |
|
|
144
|
+
|
|
145
|
+
### Staging/Development
|
|
146
|
+
|
|
147
|
+
To use the staging API:
|
|
148
|
+
|
|
149
|
+
```json
|
|
150
|
+
{
|
|
151
|
+
"mcpServers": {
|
|
152
|
+
"nimbus": {
|
|
153
|
+
"command": "nimbus-mcp",
|
|
154
|
+
"env": {
|
|
155
|
+
"NIMBUS_API_KEY": "nimbus_your_key",
|
|
156
|
+
"NIMBUS_API_URL": "https://api.staging.nimbusai.cloud/mcp/v1"
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Troubleshooting
|
|
164
|
+
|
|
165
|
+
### "NIMBUS_API_KEY is required"
|
|
166
|
+
|
|
167
|
+
Make sure you've added the API key to your Claude Desktop config and restarted Claude.
|
|
168
|
+
|
|
169
|
+
### "Invalid or missing API key"
|
|
170
|
+
|
|
171
|
+
Your API key may be incorrect or expired. Generate a new one in Nimbus Settings → Account.
|
|
172
|
+
|
|
173
|
+
### "Rate limit exceeded"
|
|
174
|
+
|
|
175
|
+
The API has limits of:
|
|
176
|
+
- 100 requests per minute
|
|
177
|
+
- 1,000 requests per hour
|
|
178
|
+
- 10,000 requests per day
|
|
179
|
+
|
|
180
|
+
Wait a moment and try again.
|
|
181
|
+
|
|
182
|
+
### Server not appearing in Claude
|
|
183
|
+
|
|
184
|
+
1. Check your config file path is correct
|
|
185
|
+
2. Ensure the JSON is valid (no trailing commas)
|
|
186
|
+
3. Completely quit and restart Claude Desktop
|
|
187
|
+
4. Check Claude's logs for errors
|
|
188
|
+
|
|
189
|
+
### Testing the server manually
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
NIMBUS_API_KEY=your_key nimbus-mcp
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
The server should start and wait for MCP protocol messages on stdin.
|
|
196
|
+
|
|
197
|
+
## Privacy & Security
|
|
198
|
+
|
|
199
|
+
- Your API key authenticates requests to your own workflow data
|
|
200
|
+
- Nimbus only captures what you've allowed in Privacy Settings
|
|
201
|
+
- Screenshots and workflow data are encrypted in transit and at rest
|
|
202
|
+
- You can delete your data anytime from the Nimbus app
|
|
203
|
+
|
|
204
|
+
## Support
|
|
205
|
+
|
|
206
|
+
- **Documentation:** https://nimbusai.cloud/docs/mcp
|
|
207
|
+
- **Issues:** https://github.com/nimbus-app/nimbus/issues
|
|
208
|
+
- **Email:** support@nimbusai.cloud
|
|
209
|
+
|
|
210
|
+
## License
|
|
211
|
+
|
|
212
|
+
MIT
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nimbus API Client
|
|
3
|
+
*
|
|
4
|
+
* HTTP client for the Nimbus MCP REST API.
|
|
5
|
+
*/
|
|
6
|
+
import type { SearchTasksInput, SearchTasksOutput, SearchWorkflowsInput, SearchWorkflowsOutput, GetTaskInput, GetTaskOutput, SearchPlatformsInput, SearchPlatformsOutput, GetWorkflowInput, GetWorkflowOutput, AskUserInput, AskUserOutput, QuestionStatus } from './types.js';
|
|
7
|
+
export declare class NimbusAPIError extends Error {
|
|
8
|
+
code: string;
|
|
9
|
+
details?: Record<string, unknown> | undefined;
|
|
10
|
+
constructor(code: string, message: string, details?: Record<string, unknown> | undefined);
|
|
11
|
+
}
|
|
12
|
+
export declare class NimbusClient {
|
|
13
|
+
private apiUrl;
|
|
14
|
+
private apiKey;
|
|
15
|
+
constructor(apiKey: string, apiUrl?: string);
|
|
16
|
+
private request;
|
|
17
|
+
searchTasks(input: SearchTasksInput): Promise<SearchTasksOutput>;
|
|
18
|
+
searchWorkflows(input: SearchWorkflowsInput): Promise<SearchWorkflowsOutput>;
|
|
19
|
+
getTask(input: GetTaskInput): Promise<GetTaskOutput>;
|
|
20
|
+
searchPlatforms(input: SearchPlatformsInput): Promise<SearchPlatformsOutput>;
|
|
21
|
+
getWorkflow(input: GetWorkflowInput): Promise<GetWorkflowOutput>;
|
|
22
|
+
askUser(input: AskUserInput): Promise<AskUserOutput>;
|
|
23
|
+
getQuestionStatus(questionId: string): Promise<QuestionStatus>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAGV,gBAAgB,EAChB,iBAAiB,EACjB,oBAAoB,EACpB,qBAAqB,EACrB,YAAY,EACZ,aAAa,EACb,oBAAoB,EACpB,qBAAqB,EACrB,gBAAgB,EAChB,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,cAAc,EACf,MAAM,YAAY,CAAA;AAKnB,qBAAa,cAAe,SAAQ,KAAK;IAE9B,IAAI,EAAE,MAAM;IAEZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;gBAFjC,IAAI,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACR,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,YAAA;CAK3C;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,MAAM,CAAQ;gBAEV,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;YAQ7B,OAAO;IA+Bf,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIhE,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAI5E,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAIpD,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAI5E,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAIhE,OAAO,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,aAAa,CAAC;IAIpD,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;CAGrE"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nimbus API Client
|
|
3
|
+
*
|
|
4
|
+
* HTTP client for the Nimbus MCP REST API.
|
|
5
|
+
*/
|
|
6
|
+
import fetch from 'node-fetch';
|
|
7
|
+
// Default MCP API URL — requires NIMBUS_API_URL env var or explicit URL in constructor
|
|
8
|
+
const DEFAULT_API_URL = 'https://api.nimbusai.cloud/mcp/v1';
|
|
9
|
+
export class NimbusAPIError extends Error {
|
|
10
|
+
code;
|
|
11
|
+
details;
|
|
12
|
+
constructor(code, message, details) {
|
|
13
|
+
super(message);
|
|
14
|
+
this.code = code;
|
|
15
|
+
this.details = details;
|
|
16
|
+
this.name = 'NimbusAPIError';
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class NimbusClient {
|
|
20
|
+
apiUrl;
|
|
21
|
+
apiKey;
|
|
22
|
+
constructor(apiKey, apiUrl) {
|
|
23
|
+
if (!apiKey) {
|
|
24
|
+
throw new Error('NIMBUS_API_KEY is required');
|
|
25
|
+
}
|
|
26
|
+
this.apiKey = apiKey;
|
|
27
|
+
this.apiUrl = apiUrl || process.env.NIMBUS_API_URL || DEFAULT_API_URL;
|
|
28
|
+
}
|
|
29
|
+
async request(endpoint, method = 'POST', body) {
|
|
30
|
+
const url = `${this.apiUrl}${endpoint}`;
|
|
31
|
+
const response = await fetch(url, {
|
|
32
|
+
method,
|
|
33
|
+
headers: {
|
|
34
|
+
'Content-Type': 'application/json',
|
|
35
|
+
'X-Api-Key': this.apiKey,
|
|
36
|
+
'User-Agent': 'nimbus-mcp/1.0.0',
|
|
37
|
+
},
|
|
38
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
39
|
+
});
|
|
40
|
+
const json = await response.json();
|
|
41
|
+
if (!response.ok) {
|
|
42
|
+
const error = json;
|
|
43
|
+
throw new NimbusAPIError(error.error?.code || 'UNKNOWN_ERROR', error.error?.message || 'An unknown error occurred', error.error?.details);
|
|
44
|
+
}
|
|
45
|
+
return json.data;
|
|
46
|
+
}
|
|
47
|
+
async searchTasks(input) {
|
|
48
|
+
return this.request('/tools/nimbus_search_tasks', 'POST', input);
|
|
49
|
+
}
|
|
50
|
+
async searchWorkflows(input) {
|
|
51
|
+
return this.request('/tools/nimbus_search_workflows', 'POST', input);
|
|
52
|
+
}
|
|
53
|
+
async getTask(input) {
|
|
54
|
+
return this.request('/tools/nimbus_get_task', 'POST', input);
|
|
55
|
+
}
|
|
56
|
+
async searchPlatforms(input) {
|
|
57
|
+
return this.request('/tools/nimbus_search_platforms', 'POST', input);
|
|
58
|
+
}
|
|
59
|
+
async getWorkflow(input) {
|
|
60
|
+
return this.request('/tools/nimbus_get_workflow', 'POST', input);
|
|
61
|
+
}
|
|
62
|
+
async askUser(input) {
|
|
63
|
+
return this.request('/tools/nimbus_ask_user', 'POST', input);
|
|
64
|
+
}
|
|
65
|
+
async getQuestionStatus(questionId) {
|
|
66
|
+
return this.request(`/questions/${questionId}`, 'GET');
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../src/api-client.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Nimbus MCP Server
|
|
4
|
+
*
|
|
5
|
+
* A Model Context Protocol server that provides access to your Nimbus task memory.
|
|
6
|
+
* This allows AI assistants like Claude to query your captured tasks, platforms,
|
|
7
|
+
* and learn how you perform tasks.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* NIMBUS_API_KEY=your_key nimbus-mcp
|
|
11
|
+
*
|
|
12
|
+
* Or configure in Claude Desktop:
|
|
13
|
+
* {
|
|
14
|
+
* "mcpServers": {
|
|
15
|
+
* "nimbus": {
|
|
16
|
+
* "command": "nimbus-mcp",
|
|
17
|
+
* "env": { "NIMBUS_API_KEY": "your_key" }
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
*/
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;GAmBG"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,493 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Nimbus MCP Server
|
|
4
|
+
*
|
|
5
|
+
* A Model Context Protocol server that provides access to your Nimbus task memory.
|
|
6
|
+
* This allows AI assistants like Claude to query your captured tasks, platforms,
|
|
7
|
+
* and learn how you perform tasks.
|
|
8
|
+
*
|
|
9
|
+
* Usage:
|
|
10
|
+
* NIMBUS_API_KEY=your_key nimbus-mcp
|
|
11
|
+
*
|
|
12
|
+
* Or configure in Claude Desktop:
|
|
13
|
+
* {
|
|
14
|
+
* "mcpServers": {
|
|
15
|
+
* "nimbus": {
|
|
16
|
+
* "command": "nimbus-mcp",
|
|
17
|
+
* "env": { "NIMBUS_API_KEY": "your_key" }
|
|
18
|
+
* }
|
|
19
|
+
* }
|
|
20
|
+
* }
|
|
21
|
+
*/
|
|
22
|
+
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
23
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
24
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
25
|
+
import { z } from 'zod';
|
|
26
|
+
import { NimbusClient, NimbusAPIError } from './api-client.js';
|
|
27
|
+
// ============================================================================
|
|
28
|
+
// CONFIGURATION
|
|
29
|
+
// ============================================================================
|
|
30
|
+
const SERVER_NAME = 'nimbus';
|
|
31
|
+
const SERVER_VERSION = '1.0.0';
|
|
32
|
+
const SERVER_INSTRUCTIONS = `Nimbus is the user's task memory. It watches their screen as they complete their computer work and learns HOW they perform tasks across apps and websites. Use Nimbus tools whenever you need to do something the way the user does it, understand how they use a specific app, or find out how they've done something before.
|
|
33
|
+
|
|
34
|
+
Data hierarchy: Workflow → Tasks → Steps. A workflow contains tasks, and each task contains steps with screenshots.
|
|
35
|
+
|
|
36
|
+
**Task** — A recurring action the user performs, like "submit an expense report" or "onboard a new vendor". Built from repeated observations across multiple recordings. Has steps, associated platforms, and a confidence score that reflects how reliably Nimbus has identified this as a distinct, repeatable task (higher = seen it more times with consistent patterns).
|
|
37
|
+
|
|
38
|
+
**Workflow** — One recording session. The user pressed Record, did work on their computer, and pressed Stop. Everything they did in that window of time — the screenshots, the apps they touched, the AI analysis of what was happening — lives under that workflow.
|
|
39
|
+
|
|
40
|
+
**Platform** — An app or website (e.g., Salesforce, Google Sheets, SAP). Nimbus accumulates knowledge about how the user navigates each one over time.`;
|
|
41
|
+
// ============================================================================
|
|
42
|
+
// INPUT SCHEMAS (Zod for validation)
|
|
43
|
+
// ============================================================================
|
|
44
|
+
const searchTasksSchema = z.object({
|
|
45
|
+
query: z.string().min(1).max(1000),
|
|
46
|
+
platform_filter: z.string().max(200).optional(),
|
|
47
|
+
limit: z.number().int().min(1).max(20).optional().default(5),
|
|
48
|
+
});
|
|
49
|
+
const searchWorkflowsSchema = z.object({
|
|
50
|
+
query: z.string().min(1).max(1000),
|
|
51
|
+
limit: z.number().int().min(1).max(20).optional().default(5),
|
|
52
|
+
});
|
|
53
|
+
const getTaskSchema = z.object({
|
|
54
|
+
task_id: z.string().uuid(),
|
|
55
|
+
include_executions: z.number().int().min(1).max(5).optional().default(2),
|
|
56
|
+
});
|
|
57
|
+
const searchPlatformsSchema = z.object({
|
|
58
|
+
query: z.string().min(1).max(1000),
|
|
59
|
+
limit: z.number().int().min(1).max(20).optional().default(5),
|
|
60
|
+
});
|
|
61
|
+
const getWorkflowSchema = z.object({
|
|
62
|
+
workflow_id: z.string().uuid(),
|
|
63
|
+
});
|
|
64
|
+
const askUserSchema = z.object({
|
|
65
|
+
question: z.string().min(1).max(1000),
|
|
66
|
+
context: z.string().max(5000).optional(),
|
|
67
|
+
suggested_answers: z.array(z.string().max(500)).max(5).optional(),
|
|
68
|
+
});
|
|
69
|
+
const getQuestionStatusSchema = z.object({
|
|
70
|
+
question_id: z.string().uuid(),
|
|
71
|
+
});
|
|
72
|
+
// ============================================================================
|
|
73
|
+
// TOOL DEFINITIONS (JSON Schema format for MCP protocol)
|
|
74
|
+
// ============================================================================
|
|
75
|
+
const TOOLS = [
|
|
76
|
+
{
|
|
77
|
+
name: 'nimbus_search_tasks',
|
|
78
|
+
description: 'Search how the user does something. Searches their recorded task library — recurring actions like "submit an expense report", "onboard a new vendor", or "update the weekly forecast". Returns task names, descriptions, and platform names to help you identify the right task. Pass a task_id to nimbus_get_task for the full playbook with steps, screenshots, and platform knowledge.',
|
|
79
|
+
inputSchema: {
|
|
80
|
+
type: 'object',
|
|
81
|
+
properties: {
|
|
82
|
+
query: {
|
|
83
|
+
type: 'string',
|
|
84
|
+
description: 'Natural language search query',
|
|
85
|
+
},
|
|
86
|
+
platform_filter: {
|
|
87
|
+
type: 'string',
|
|
88
|
+
description: 'Filter results by platform name (e.g., "SAP Concur", "Salesforce")',
|
|
89
|
+
},
|
|
90
|
+
limit: {
|
|
91
|
+
type: 'number',
|
|
92
|
+
description: 'Maximum number of results to return (default 5, max 20)',
|
|
93
|
+
},
|
|
94
|
+
},
|
|
95
|
+
required: ['query'],
|
|
96
|
+
},
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
name: 'nimbus_get_task',
|
|
100
|
+
description: 'Get the full playbook for a task. Returns everything needed to replicate or understand it: description, subtasks, platform-specific knowledge (how to navigate each app), and recent executions with step-by-step screenshots showing exactly how the user performed it. Includes 2 recent executions by default — set include_executions (1-5) to control how many.',
|
|
101
|
+
inputSchema: {
|
|
102
|
+
type: 'object',
|
|
103
|
+
properties: {
|
|
104
|
+
task_id: {
|
|
105
|
+
type: 'string',
|
|
106
|
+
description: 'UUID of the task to retrieve',
|
|
107
|
+
},
|
|
108
|
+
include_executions: {
|
|
109
|
+
type: 'number',
|
|
110
|
+
description: 'Number of recent executions to include (1-5, default 2). Each execution includes steps with screenshot URLs.',
|
|
111
|
+
},
|
|
112
|
+
},
|
|
113
|
+
required: ['task_id'],
|
|
114
|
+
},
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
name: 'nimbus_search_workflows',
|
|
118
|
+
description: 'Search the user\'s recording sessions. Each workflow is one recorded block of work — everything the user did between pressing Record and Stop. Use this to find a specific session (e.g., "setting up the new hire\'s accounts" or "yesterday\'s budget review"). Returns session summary, capture/analysis counts, and the top tasks identified. Pass a workflow_id to nimbus_get_workflow for the full task breakdown.',
|
|
119
|
+
inputSchema: {
|
|
120
|
+
type: 'object',
|
|
121
|
+
properties: {
|
|
122
|
+
query: {
|
|
123
|
+
type: 'string',
|
|
124
|
+
description: 'Natural language query for matching workflows',
|
|
125
|
+
},
|
|
126
|
+
limit: {
|
|
127
|
+
type: 'number',
|
|
128
|
+
description: 'Maximum number of results to return (default 5, max 20)',
|
|
129
|
+
},
|
|
130
|
+
},
|
|
131
|
+
required: ['query'],
|
|
132
|
+
},
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: 'nimbus_get_workflow',
|
|
136
|
+
description: 'Get a high-level overview of a recording session — which tasks the user performed, in what order, with brief descriptions and the platforms involved. Use this to understand what happened in a session without the fine details. To drill into a specific task\'s steps and screenshots, pass its task_id to nimbus_get_task. Requires a workflow_id from nimbus_search_workflows.',
|
|
137
|
+
inputSchema: {
|
|
138
|
+
type: 'object',
|
|
139
|
+
properties: {
|
|
140
|
+
workflow_id: {
|
|
141
|
+
type: 'string',
|
|
142
|
+
description: 'UUID of the workflow to retrieve',
|
|
143
|
+
},
|
|
144
|
+
},
|
|
145
|
+
required: ['workflow_id'],
|
|
146
|
+
},
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
name: 'nimbus_search_platforms',
|
|
150
|
+
description: 'Look up an app or website the user works with. Returns the full accumulated knowledge Nimbus has about the platform — how to navigate it, where things are, UI quirks — along with identifiers, every task the user performs on it, and usage history. Use this when you need to understand how a specific tool works from the user\'s perspective.',
|
|
151
|
+
inputSchema: {
|
|
152
|
+
type: 'object',
|
|
153
|
+
properties: {
|
|
154
|
+
query: {
|
|
155
|
+
type: 'string',
|
|
156
|
+
description: 'Platform name or natural language query',
|
|
157
|
+
},
|
|
158
|
+
limit: {
|
|
159
|
+
type: 'number',
|
|
160
|
+
description: 'Maximum number of results to return (default 5, max 20)',
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
required: ['query'],
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
{
|
|
167
|
+
name: 'nimbus_ask_user',
|
|
168
|
+
description: 'Ask the user a question when Nimbus data alone isn\'t enough. Delivered as a notification in the Nimbus desktop app. This is async — poll nimbus_get_question_status for their answer. Only use this after checking tasks, workflows, and platforms first.',
|
|
169
|
+
inputSchema: {
|
|
170
|
+
type: 'object',
|
|
171
|
+
properties: {
|
|
172
|
+
question: {
|
|
173
|
+
type: 'string',
|
|
174
|
+
description: 'Question to ask the user',
|
|
175
|
+
},
|
|
176
|
+
context: {
|
|
177
|
+
type: 'string',
|
|
178
|
+
description: "Why you're asking this question",
|
|
179
|
+
},
|
|
180
|
+
suggested_answers: {
|
|
181
|
+
type: 'array',
|
|
182
|
+
items: { type: 'string' },
|
|
183
|
+
description: 'Suggested quick responses (max 5)',
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
required: ['question'],
|
|
187
|
+
},
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
name: 'nimbus_get_question_status',
|
|
191
|
+
description: 'Poll for the user\'s answer to a question sent via nimbus_ask_user. Returns status (pending/answered/expired/dismissed) and the answer text if they responded. Pass the question_id from the nimbus_ask_user response.',
|
|
192
|
+
inputSchema: {
|
|
193
|
+
type: 'object',
|
|
194
|
+
properties: {
|
|
195
|
+
question_id: {
|
|
196
|
+
type: 'string',
|
|
197
|
+
description: 'Question ID from nimbus_ask_user response (UUID format)',
|
|
198
|
+
},
|
|
199
|
+
},
|
|
200
|
+
required: ['question_id'],
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
];
|
|
204
|
+
// ============================================================================
|
|
205
|
+
// HELPER FUNCTIONS
|
|
206
|
+
// ============================================================================
|
|
207
|
+
function formatError(error) {
|
|
208
|
+
if (error instanceof NimbusAPIError) {
|
|
209
|
+
return `Nimbus API Error [${error.code}]: ${error.message}`;
|
|
210
|
+
}
|
|
211
|
+
if (error instanceof Error) {
|
|
212
|
+
return error.message;
|
|
213
|
+
}
|
|
214
|
+
return String(error);
|
|
215
|
+
}
|
|
216
|
+
function textContent(text) {
|
|
217
|
+
return { type: 'text', text };
|
|
218
|
+
}
|
|
219
|
+
// ============================================================================
|
|
220
|
+
// TOOL HANDLERS
|
|
221
|
+
// ============================================================================
|
|
222
|
+
async function handleSearchTasks(client, args) {
|
|
223
|
+
try {
|
|
224
|
+
const input = searchTasksSchema.parse(args);
|
|
225
|
+
const result = await client.searchTasks(input);
|
|
226
|
+
if (result.tasks.length === 0) {
|
|
227
|
+
return {
|
|
228
|
+
content: [
|
|
229
|
+
textContent(`No tasks found matching "${input.query}". The user may not have performed this task yet, or it may be described differently.`),
|
|
230
|
+
],
|
|
231
|
+
};
|
|
232
|
+
}
|
|
233
|
+
const taskList = result.tasks
|
|
234
|
+
.map((t, i) => {
|
|
235
|
+
const platforms = t.platforms.length > 0 ? ` (${t.platforms.join(', ')})` : '';
|
|
236
|
+
return `${i + 1}. **${t.name}**${platforms}
|
|
237
|
+
ID: ${t.id}
|
|
238
|
+
${t.description}`;
|
|
239
|
+
})
|
|
240
|
+
.join('\n\n');
|
|
241
|
+
return {
|
|
242
|
+
content: [
|
|
243
|
+
textContent(`Found ${result.total_matches} task(s) matching "${input.query}":\n\n${taskList}\n\nUse nimbus_get_task with a task_id for the full step-by-step playbook.`),
|
|
244
|
+
],
|
|
245
|
+
};
|
|
246
|
+
}
|
|
247
|
+
catch (error) {
|
|
248
|
+
return { content: [textContent(formatError(error))], isError: true };
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
async function handleGetTask(client, args) {
|
|
252
|
+
try {
|
|
253
|
+
const input = getTaskSchema.parse(args);
|
|
254
|
+
const result = await client.getTask(input);
|
|
255
|
+
const { task } = result;
|
|
256
|
+
const platformsInfo = task.platforms.length > 0
|
|
257
|
+
? `\n\n**Platforms:**\n${task.platforms.map((p) => `- **${p.name}**: ${p.knowledge}`).join('\n')}`
|
|
258
|
+
: '';
|
|
259
|
+
const subtasksInfo = task.subtasks.length > 0
|
|
260
|
+
? `\n\n**Subtasks:**\n${task.subtasks.map((s) => `- **${s.name}**: ${s.description}`).join('\n')}`
|
|
261
|
+
: '';
|
|
262
|
+
const executionsInfo = result.recent_executions.length > 0
|
|
263
|
+
? `\n\n**Recent Executions (${result.recent_executions.length}):**\n${result.recent_executions
|
|
264
|
+
.map((exec) => {
|
|
265
|
+
const steps = exec.steps
|
|
266
|
+
.map((step) => {
|
|
267
|
+
const screenshot = step.screenshot_url ? ` [Screenshot](${step.screenshot_url})` : '';
|
|
268
|
+
return ` ${step.position}. ${step.description}${screenshot}`;
|
|
269
|
+
})
|
|
270
|
+
.join('\n');
|
|
271
|
+
return `\n- **${new Date(exec.performed_at).toLocaleDateString()}** - ${exec.context}\n${steps}`;
|
|
272
|
+
})
|
|
273
|
+
.join('\n')}`
|
|
274
|
+
: '';
|
|
275
|
+
return {
|
|
276
|
+
content: [
|
|
277
|
+
textContent(`# ${task.name}\n\n${task.description}\n\nConfidence: ${(task.confidence * 100).toFixed(0)}% | Performed: ${task.occurrence_count} time(s)${platformsInfo}${subtasksInfo}${executionsInfo}`),
|
|
278
|
+
],
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
catch (error) {
|
|
282
|
+
return { content: [textContent(formatError(error))], isError: true };
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
async function handleSearchWorkflows(client, args) {
|
|
286
|
+
try {
|
|
287
|
+
const input = searchWorkflowsSchema.parse(args);
|
|
288
|
+
const result = await client.searchWorkflows(input);
|
|
289
|
+
if (result.workflows.length === 0) {
|
|
290
|
+
return {
|
|
291
|
+
content: [
|
|
292
|
+
textContent(`No workflows found matching "${input.query}". The user may need to record additional sessions.`),
|
|
293
|
+
],
|
|
294
|
+
};
|
|
295
|
+
}
|
|
296
|
+
const workflowList = result.workflows
|
|
297
|
+
.map((workflow, index) => {
|
|
298
|
+
const topTasks = workflow.top_tasks.length > 0
|
|
299
|
+
? `\n Top tasks: ${workflow.top_tasks.map((task) => task.name).join(', ')}`
|
|
300
|
+
: '';
|
|
301
|
+
const endedAt = workflow.ended_at
|
|
302
|
+
? ` | Ended: ${new Date(workflow.ended_at).toLocaleDateString()}`
|
|
303
|
+
: ' | In progress';
|
|
304
|
+
return `${index + 1}. **${workflow.name}**
|
|
305
|
+
ID: ${workflow.id}
|
|
306
|
+
Status: ${workflow.status} | Captures: ${workflow.capture_count} | Analyses: ${workflow.analysis_count}${endedAt}
|
|
307
|
+
Started: ${new Date(workflow.started_at).toLocaleDateString()}${topTasks}`;
|
|
308
|
+
})
|
|
309
|
+
.join('\n\n');
|
|
310
|
+
return {
|
|
311
|
+
content: [
|
|
312
|
+
textContent(`Found ${result.total_matches} workflow(s) matching "${input.query}":\n\n${workflowList}\n\nUse nimbus_get_workflow with a workflow_id for the full task breakdown.`),
|
|
313
|
+
],
|
|
314
|
+
};
|
|
315
|
+
}
|
|
316
|
+
catch (error) {
|
|
317
|
+
return { content: [textContent(formatError(error))], isError: true };
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
async function handleSearchPlatforms(client, args) {
|
|
321
|
+
try {
|
|
322
|
+
const input = searchPlatformsSchema.parse(args);
|
|
323
|
+
const result = await client.searchPlatforms(input);
|
|
324
|
+
if (result.platforms.length === 0) {
|
|
325
|
+
return {
|
|
326
|
+
content: [
|
|
327
|
+
textContent(`No platforms found matching "${input.query}". The user may not have used this platform yet.`),
|
|
328
|
+
],
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
const platformList = result.platforms
|
|
332
|
+
.map((p, i) => {
|
|
333
|
+
const identifiers = [];
|
|
334
|
+
if (p.identifiers?.bundleIds?.length) {
|
|
335
|
+
identifiers.push(`Bundle IDs: ${p.identifiers.bundleIds.join(', ')}`);
|
|
336
|
+
}
|
|
337
|
+
if (p.identifiers?.domains?.length) {
|
|
338
|
+
identifiers.push(`Domains: ${p.identifiers.domains.join(', ')}`);
|
|
339
|
+
}
|
|
340
|
+
const identifiersInfo = identifiers.length > 0 ? `\n ${identifiers.join('\n ')}` : '';
|
|
341
|
+
const tasks = p.related_tasks.length > 0
|
|
342
|
+
? `\n\n **Tasks (${p.related_tasks.length}):**\n${p.related_tasks.map((t) => ` - **${t.name}** (${t.occurrence_count} time(s)) — ID: ${t.id}`).join('\n')}`
|
|
343
|
+
: '';
|
|
344
|
+
return `${i + 1}. **${p.name}** (${p.type})${identifiersInfo}
|
|
345
|
+
First seen: ${new Date(p.first_seen).toLocaleDateString()} | Last seen: ${new Date(p.last_seen).toLocaleDateString()} | Workflows: ${p.workflow_count}
|
|
346
|
+
|
|
347
|
+
**Knowledge:**
|
|
348
|
+
${p.knowledge}${tasks}`;
|
|
349
|
+
})
|
|
350
|
+
.join('\n\n');
|
|
351
|
+
return {
|
|
352
|
+
content: [
|
|
353
|
+
textContent(`Found ${result.total_matches} platform(s) matching "${input.query}":\n\n${platformList}`),
|
|
354
|
+
],
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
catch (error) {
|
|
358
|
+
return { content: [textContent(formatError(error))], isError: true };
|
|
359
|
+
}
|
|
360
|
+
}
|
|
361
|
+
async function handleGetWorkflow(client, args) {
|
|
362
|
+
try {
|
|
363
|
+
const input = getWorkflowSchema.parse(args);
|
|
364
|
+
const result = await client.getWorkflow(input);
|
|
365
|
+
const taskList = result.tasks.length > 0
|
|
366
|
+
? result.tasks
|
|
367
|
+
.map((task, index) => {
|
|
368
|
+
return `${index + 1}. **${task.name}**
|
|
369
|
+
ID: ${task.id}
|
|
370
|
+
${task.description}`;
|
|
371
|
+
})
|
|
372
|
+
.join('\n\n')
|
|
373
|
+
: 'No tasks identified in this workflow.';
|
|
374
|
+
return {
|
|
375
|
+
content: [
|
|
376
|
+
textContent(`# ${result.workflow.name}\n\nStatus: ${result.workflow.status} | Captures: ${result.workflow.capture_count} | Analyses: ${result.workflow.analysis_count}\nStarted: ${new Date(result.workflow.started_at).toLocaleDateString()}${result.workflow.ended_at ? ` | Ended: ${new Date(result.workflow.ended_at).toLocaleDateString()}` : ''}\n\nTasks performed (${result.tasks.length}):\n\n${taskList}\n\nUse nimbus_get_task with a task ID to get the full step-by-step playbook with screenshots.`),
|
|
377
|
+
],
|
|
378
|
+
};
|
|
379
|
+
}
|
|
380
|
+
catch (error) {
|
|
381
|
+
return { content: [textContent(formatError(error))], isError: true };
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
async function handleAskUser(client, args) {
|
|
385
|
+
try {
|
|
386
|
+
const input = askUserSchema.parse(args);
|
|
387
|
+
const result = await client.askUser(input);
|
|
388
|
+
return {
|
|
389
|
+
content: [
|
|
390
|
+
textContent(`Question queued successfully!\n\nQuestion ID: ${result.question_id}\nStatus: ${result.status}\n\nThe user will be notified via the Nimbus app. Use nimbus_get_question_status to check for their response.`),
|
|
391
|
+
],
|
|
392
|
+
};
|
|
393
|
+
}
|
|
394
|
+
catch (error) {
|
|
395
|
+
return { content: [textContent(formatError(error))], isError: true };
|
|
396
|
+
}
|
|
397
|
+
}
|
|
398
|
+
async function handleGetQuestionStatus(client, args) {
|
|
399
|
+
try {
|
|
400
|
+
const input = getQuestionStatusSchema.parse(args);
|
|
401
|
+
const result = await client.getQuestionStatus(input.question_id);
|
|
402
|
+
if (result.status === 'answered') {
|
|
403
|
+
return {
|
|
404
|
+
content: [
|
|
405
|
+
textContent(`**Question:** ${result.question}\n**Status:** Answered\n**Answer:** ${result.answer}\n**Answered at:** ${result.answered_at}`),
|
|
406
|
+
],
|
|
407
|
+
};
|
|
408
|
+
}
|
|
409
|
+
const statusMessages = {
|
|
410
|
+
pending: 'Waiting for user response...',
|
|
411
|
+
expired: 'Question expired before user responded.',
|
|
412
|
+
dismissed: 'User dismissed the question without answering.',
|
|
413
|
+
};
|
|
414
|
+
return {
|
|
415
|
+
content: [
|
|
416
|
+
textContent(`**Question:** ${result.question}\n**Status:** ${result.status}\n${statusMessages[result.status] || ''}`),
|
|
417
|
+
],
|
|
418
|
+
};
|
|
419
|
+
}
|
|
420
|
+
catch (error) {
|
|
421
|
+
return { content: [textContent(formatError(error))], isError: true };
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
// ============================================================================
|
|
425
|
+
// MAIN
|
|
426
|
+
// ============================================================================
|
|
427
|
+
async function main() {
|
|
428
|
+
// Validate API key
|
|
429
|
+
const apiKey = process.env.NIMBUS_API_KEY;
|
|
430
|
+
if (!apiKey) {
|
|
431
|
+
console.error('Error: NIMBUS_API_KEY environment variable is required');
|
|
432
|
+
console.error('');
|
|
433
|
+
console.error('Get your API key from the Nimbus app:');
|
|
434
|
+
console.error(' Settings -> Account -> MCP API Key');
|
|
435
|
+
console.error('');
|
|
436
|
+
console.error('Then run:');
|
|
437
|
+
console.error(' NIMBUS_API_KEY=your_key nimbus-mcp');
|
|
438
|
+
process.exit(1);
|
|
439
|
+
}
|
|
440
|
+
// Initialize API client
|
|
441
|
+
const client = new NimbusClient(apiKey);
|
|
442
|
+
// Create MCP server
|
|
443
|
+
const server = new Server({
|
|
444
|
+
name: SERVER_NAME,
|
|
445
|
+
version: SERVER_VERSION,
|
|
446
|
+
}, {
|
|
447
|
+
capabilities: {
|
|
448
|
+
tools: {},
|
|
449
|
+
},
|
|
450
|
+
instructions: SERVER_INSTRUCTIONS,
|
|
451
|
+
});
|
|
452
|
+
// Handle tools/list request
|
|
453
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
454
|
+
return { tools: TOOLS };
|
|
455
|
+
});
|
|
456
|
+
// Handle tools/call request
|
|
457
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
458
|
+
const { name, arguments: args } = request.params;
|
|
459
|
+
switch (name) {
|
|
460
|
+
case 'nimbus_search_tasks':
|
|
461
|
+
return handleSearchTasks(client, args);
|
|
462
|
+
case 'nimbus_get_task':
|
|
463
|
+
return handleGetTask(client, args);
|
|
464
|
+
case 'nimbus_search_workflows':
|
|
465
|
+
return handleSearchWorkflows(client, args);
|
|
466
|
+
case 'nimbus_get_workflow':
|
|
467
|
+
return handleGetWorkflow(client, args);
|
|
468
|
+
case 'nimbus_search_platforms':
|
|
469
|
+
return handleSearchPlatforms(client, args);
|
|
470
|
+
case 'nimbus_ask_user':
|
|
471
|
+
return handleAskUser(client, args);
|
|
472
|
+
case 'nimbus_get_question_status':
|
|
473
|
+
return handleGetQuestionStatus(client, args);
|
|
474
|
+
default:
|
|
475
|
+
// Return structured error for unknown tools
|
|
476
|
+
return {
|
|
477
|
+
content: [textContent(`Error: Unknown tool "${name}". Available tools: ${TOOLS.map(t => t.name).join(', ')}`)],
|
|
478
|
+
isError: true,
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
});
|
|
482
|
+
// Start server with stdio transport
|
|
483
|
+
const transport = new StdioServerTransport();
|
|
484
|
+
await server.connect(transport);
|
|
485
|
+
// Log to stderr (stdout is for MCP protocol)
|
|
486
|
+
console.error(`Nimbus MCP server v${SERVER_VERSION} started`);
|
|
487
|
+
}
|
|
488
|
+
// Run
|
|
489
|
+
main().catch((error) => {
|
|
490
|
+
console.error('Fatal error:', error);
|
|
491
|
+
process.exit(1);
|
|
492
|
+
});
|
|
493
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Nimbus MCP Server Types
|
|
3
|
+
*
|
|
4
|
+
* These types match the Nimbus REST API responses.
|
|
5
|
+
*/
|
|
6
|
+
export interface NimbusResponse<T> {
|
|
7
|
+
data: T;
|
|
8
|
+
meta?: {
|
|
9
|
+
requestId: string;
|
|
10
|
+
took?: number;
|
|
11
|
+
pagination?: {
|
|
12
|
+
offset: number;
|
|
13
|
+
limit: number;
|
|
14
|
+
total: number;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export interface NimbusError {
|
|
19
|
+
error: {
|
|
20
|
+
code: string;
|
|
21
|
+
message: string;
|
|
22
|
+
details?: Record<string, unknown>;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export interface SearchTasksInput {
|
|
26
|
+
query: string;
|
|
27
|
+
platform_filter?: string;
|
|
28
|
+
limit?: number;
|
|
29
|
+
}
|
|
30
|
+
export interface TaskResult {
|
|
31
|
+
id: string;
|
|
32
|
+
name: string;
|
|
33
|
+
description: string;
|
|
34
|
+
confidence: number;
|
|
35
|
+
occurrence_count: number;
|
|
36
|
+
last_performed: string | null;
|
|
37
|
+
platforms: string[];
|
|
38
|
+
}
|
|
39
|
+
export interface SearchTasksOutput {
|
|
40
|
+
tasks: TaskResult[];
|
|
41
|
+
total_matches: number;
|
|
42
|
+
}
|
|
43
|
+
export interface SearchWorkflowsInput {
|
|
44
|
+
query: string;
|
|
45
|
+
limit?: number;
|
|
46
|
+
}
|
|
47
|
+
export interface WorkflowResult {
|
|
48
|
+
id: string;
|
|
49
|
+
name: string;
|
|
50
|
+
status: string;
|
|
51
|
+
started_at: string;
|
|
52
|
+
ended_at: string | null;
|
|
53
|
+
summary: string | null;
|
|
54
|
+
capture_count: number;
|
|
55
|
+
analysis_count: number;
|
|
56
|
+
top_tasks: Array<{
|
|
57
|
+
id: string;
|
|
58
|
+
name: string;
|
|
59
|
+
}>;
|
|
60
|
+
}
|
|
61
|
+
export interface SearchWorkflowsOutput {
|
|
62
|
+
workflows: WorkflowResult[];
|
|
63
|
+
total_matches: number;
|
|
64
|
+
}
|
|
65
|
+
export interface GetTaskInput {
|
|
66
|
+
task_id: string;
|
|
67
|
+
include_executions?: number;
|
|
68
|
+
}
|
|
69
|
+
export interface GetTaskOutput {
|
|
70
|
+
task: {
|
|
71
|
+
id: string;
|
|
72
|
+
name: string;
|
|
73
|
+
description: string;
|
|
74
|
+
confidence: number;
|
|
75
|
+
occurrence_count: number;
|
|
76
|
+
platforms: Array<{
|
|
77
|
+
id: string;
|
|
78
|
+
name: string;
|
|
79
|
+
knowledge: string;
|
|
80
|
+
}>;
|
|
81
|
+
subtasks: Array<{
|
|
82
|
+
id: string;
|
|
83
|
+
name: string;
|
|
84
|
+
description: string;
|
|
85
|
+
}>;
|
|
86
|
+
};
|
|
87
|
+
recent_executions: Array<{
|
|
88
|
+
id: string;
|
|
89
|
+
performed_at: string;
|
|
90
|
+
context: string;
|
|
91
|
+
steps: Array<{
|
|
92
|
+
position: number;
|
|
93
|
+
description: string;
|
|
94
|
+
screenshot_url: string | null;
|
|
95
|
+
}>;
|
|
96
|
+
}>;
|
|
97
|
+
}
|
|
98
|
+
export interface SearchPlatformsInput {
|
|
99
|
+
query: string;
|
|
100
|
+
limit?: number;
|
|
101
|
+
}
|
|
102
|
+
export interface PlatformResult {
|
|
103
|
+
id: string;
|
|
104
|
+
name: string;
|
|
105
|
+
type: string;
|
|
106
|
+
identifiers: {
|
|
107
|
+
bundleIds?: string[];
|
|
108
|
+
domains?: string[];
|
|
109
|
+
};
|
|
110
|
+
knowledge: string;
|
|
111
|
+
workflow_count: number;
|
|
112
|
+
first_seen: string;
|
|
113
|
+
last_seen: string;
|
|
114
|
+
related_tasks: Array<{
|
|
115
|
+
id: string;
|
|
116
|
+
name: string;
|
|
117
|
+
occurrence_count: number;
|
|
118
|
+
}>;
|
|
119
|
+
}
|
|
120
|
+
export interface SearchPlatformsOutput {
|
|
121
|
+
platforms: PlatformResult[];
|
|
122
|
+
total_matches: number;
|
|
123
|
+
}
|
|
124
|
+
export interface GetWorkflowInput {
|
|
125
|
+
workflow_id: string;
|
|
126
|
+
}
|
|
127
|
+
export interface GetWorkflowOutput {
|
|
128
|
+
workflow: {
|
|
129
|
+
id: string;
|
|
130
|
+
name: string;
|
|
131
|
+
status: string;
|
|
132
|
+
started_at: string;
|
|
133
|
+
ended_at: string | null;
|
|
134
|
+
summary: string | null;
|
|
135
|
+
capture_count: number;
|
|
136
|
+
analysis_count: number;
|
|
137
|
+
};
|
|
138
|
+
tasks: Array<{
|
|
139
|
+
id: string;
|
|
140
|
+
name: string;
|
|
141
|
+
description: string;
|
|
142
|
+
}>;
|
|
143
|
+
}
|
|
144
|
+
export interface AskUserInput {
|
|
145
|
+
question: string;
|
|
146
|
+
context?: string;
|
|
147
|
+
suggested_answers?: string[];
|
|
148
|
+
}
|
|
149
|
+
export interface AskUserOutput {
|
|
150
|
+
question_id: string;
|
|
151
|
+
status: 'queued';
|
|
152
|
+
}
|
|
153
|
+
export interface QuestionStatus {
|
|
154
|
+
question_id: string;
|
|
155
|
+
question: string;
|
|
156
|
+
status: 'pending' | 'answered' | 'expired' | 'dismissed';
|
|
157
|
+
answer: string | null;
|
|
158
|
+
answered_at: string | null;
|
|
159
|
+
created_at: string;
|
|
160
|
+
expires_at: string | null;
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@nimbus-app/mcp",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for Nimbus - Access your workflow memory from Claude",
|
|
5
|
+
"author": "Nimbus <support@nimbusai.cloud>",
|
|
6
|
+
"license": "UNLICENSED",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/nimbus-app/nimbus.git",
|
|
10
|
+
"directory": "packages/mcp-server"
|
|
11
|
+
},
|
|
12
|
+
"homepage": "https://nimbusai.cloud/docs/mcp",
|
|
13
|
+
"bugs": {
|
|
14
|
+
"url": "https://github.com/nimbus-app/nimbus/issues"
|
|
15
|
+
},
|
|
16
|
+
"keywords": [
|
|
17
|
+
"mcp",
|
|
18
|
+
"model-context-protocol",
|
|
19
|
+
"claude",
|
|
20
|
+
"ai",
|
|
21
|
+
"workflow",
|
|
22
|
+
"automation",
|
|
23
|
+
"nimbus"
|
|
24
|
+
],
|
|
25
|
+
"type": "module",
|
|
26
|
+
"main": "./dist/index.js",
|
|
27
|
+
"types": "./dist/index.d.ts",
|
|
28
|
+
"bin": {
|
|
29
|
+
"nimbus-mcp": "./dist/index.js"
|
|
30
|
+
},
|
|
31
|
+
"files": [
|
|
32
|
+
"dist",
|
|
33
|
+
"README.md"
|
|
34
|
+
],
|
|
35
|
+
"scripts": {
|
|
36
|
+
"build": "tsc",
|
|
37
|
+
"dev": "tsc --watch",
|
|
38
|
+
"start": "node dist/index.js",
|
|
39
|
+
"prepublishOnly": "npm run build",
|
|
40
|
+
"typecheck": "tsc --noEmit"
|
|
41
|
+
},
|
|
42
|
+
"dependencies": {
|
|
43
|
+
"@modelcontextprotocol/sdk": "^1.26.0",
|
|
44
|
+
"node-fetch": "^3.3.2",
|
|
45
|
+
"zod": "^3.24.0"
|
|
46
|
+
},
|
|
47
|
+
"devDependencies": {
|
|
48
|
+
"@types/node": "^20.11.0",
|
|
49
|
+
"typescript": "^5.3.0"
|
|
50
|
+
},
|
|
51
|
+
"engines": {
|
|
52
|
+
"node": ">=18.0.0"
|
|
53
|
+
}
|
|
54
|
+
}
|