@aithr-ai/mcp-server 1.0.5 → 1.0.7
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 +65 -119
- package/index.js +105 -12
- package/package.json +6 -12
package/README.md
CHANGED
|
@@ -1,137 +1,83 @@
|
|
|
1
|
-
#
|
|
1
|
+
# @aithr-ai/mcp-server
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
MCP (Model Context Protocol) server to connect Claude Code to the Aether canvas.
|
|
4
4
|
|
|
5
5
|
## Quick Install
|
|
6
6
|
|
|
7
|
-
###
|
|
8
|
-
|
|
9
|
-
**Mac/Linux:**
|
|
7
|
+
### Mac/Linux
|
|
10
8
|
```bash
|
|
11
9
|
claude mcp add --transport stdio aether \
|
|
12
|
-
--env AETHER_API_KEY=
|
|
13
|
-
--env AETHER_WORKSPACE_ID=your-workspace
|
|
14
|
-
--env AETHER_PROJECT_ID=your-project-
|
|
15
|
-
-s user
|
|
16
|
-
-- npx -y @aithr-ai/mcp-server
|
|
10
|
+
--env AETHER_API_KEY=YOUR_KEY \
|
|
11
|
+
--env AETHER_WORKSPACE_ID=your-workspace \
|
|
12
|
+
--env AETHER_PROJECT_ID=your-project-id \
|
|
13
|
+
-s user -- npx -y @aithr-ai/mcp-server
|
|
17
14
|
```
|
|
18
15
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
claude
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
16
|
+
### Windows
|
|
17
|
+
|
|
18
|
+
Add this to your `~/.claude.json` file (in the `mcpServers` object):
|
|
19
|
+
|
|
20
|
+
```json
|
|
21
|
+
{
|
|
22
|
+
"mcpServers": {
|
|
23
|
+
"aether": {
|
|
24
|
+
"type": "stdio",
|
|
25
|
+
"command": "cmd",
|
|
26
|
+
"args": ["/c", "npx", "-y", "@aithr-ai/mcp-server"],
|
|
27
|
+
"env": {
|
|
28
|
+
"AETHER_API_KEY": "YOUR_KEY",
|
|
29
|
+
"AETHER_WORKSPACE_ID": "your-workspace",
|
|
30
|
+
"AETHER_PROJECT_ID": "your-project-id"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
27
35
|
```
|
|
28
36
|
|
|
29
|
-
|
|
37
|
+
> **Note**: The `claude mcp add` command has a bug on Windows that drops the command args. Manual config is required.
|
|
38
|
+
|
|
39
|
+
## Get Your Credentials
|
|
30
40
|
|
|
31
|
-
|
|
32
|
-
2. **Workspace ID**: Your workspace slug from the URL (e.g., `my-team`)
|
|
33
|
-
3. **Project ID**: The UUID from your project URL
|
|
41
|
+
Visit [https://www.aithr.ai/settings/mcp-install](https://www.aithr.ai/settings/mcp-install) for personalized install commands with your API key and project ID.
|
|
34
42
|
|
|
35
43
|
## Available Tools
|
|
36
44
|
|
|
37
|
-
### Canvas
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
| Tool | Description |
|
|
49
|
-
|------|-------------|
|
|
50
|
-
| `aether_trigger_generation` | Start AI generation for a node |
|
|
51
|
-
| `aether_get_artifacts` | List generated artifacts |
|
|
52
|
-
| `aether_get_artifact_content` | Get full artifact content |
|
|
53
|
-
| `aether_create_artifact` | Create a new artifact |
|
|
54
|
-
| `aether_extract_files` | Extract code files from artifact |
|
|
45
|
+
### Canvas Management
|
|
46
|
+
- `aether_canvas_state` - Get current canvas state
|
|
47
|
+
- `aether_clear_canvas` - Clear all nodes from canvas
|
|
48
|
+
- `aether_add_agent` - Add an AI agent to the canvas
|
|
49
|
+
- `aether_remove_node` - Remove a node
|
|
50
|
+
- `aether_connect_nodes` - Create connections between nodes
|
|
51
|
+
- `aether_list_agents` - List all agents on canvas
|
|
52
|
+
|
|
53
|
+
### Generation
|
|
54
|
+
- `aether_trigger_generation` - Trigger AI generation for an agent
|
|
55
|
+
- `aether_get_artifacts` - Get generated artifacts
|
|
55
56
|
|
|
56
57
|
### GitHub Automation
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
| `aether_push_artifacts` | Push artifacts to GitHub (branch + commit + PR) |
|
|
61
|
-
| `aether_list_repositories` | List synced repositories |
|
|
62
|
-
| `aether_read_repo_file` | Read a file from a repository |
|
|
58
|
+
- `aether_automation_status` - Check what's ready to push
|
|
59
|
+
- `aether_extract_files` - Extract code from artifacts
|
|
60
|
+
- `aether_push_artifacts` - Push to GitHub (branch + commit + PR)
|
|
63
61
|
|
|
64
62
|
### Orchestra (Autonomous Development)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
| Tool | Description |
|
|
87
|
-
|------|-------------|
|
|
88
|
-
| `aether_list_folders` | List folders in project |
|
|
89
|
-
| `aether_create_folder` | Create a new folder |
|
|
90
|
-
| `aether_delete_folder` | Delete a folder |
|
|
91
|
-
| `aether_add_file_to_folder` | Add file/artifact to folder |
|
|
92
|
-
|
|
93
|
-
### Utility
|
|
94
|
-
| Tool | Description |
|
|
95
|
-
|------|-------------|
|
|
96
|
-
| `aether_shell` | Execute shell commands locally |
|
|
97
|
-
|
|
98
|
-
## Management Commands
|
|
99
|
-
|
|
100
|
-
```bash
|
|
101
|
-
# Check MCP server status
|
|
102
|
-
/mcp
|
|
103
|
-
|
|
104
|
-
# List all MCP servers
|
|
105
|
-
claude mcp list
|
|
106
|
-
|
|
107
|
-
# Remove Aether MCP
|
|
108
|
-
claude mcp remove aether
|
|
109
|
-
|
|
110
|
-
# Update to latest version
|
|
111
|
-
claude mcp remove aether && claude mcp add ...
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
## Troubleshooting
|
|
115
|
-
|
|
116
|
-
### "Unauthorized" errors
|
|
117
|
-
- Check your API key is correct
|
|
118
|
-
- Ensure the workspace ID matches your workspace slug
|
|
119
|
-
- Verify the project ID is a valid UUID
|
|
120
|
-
|
|
121
|
-
### "Project not found" errors
|
|
122
|
-
- Confirm you have access to the project
|
|
123
|
-
- Check the project ID in the URL
|
|
124
|
-
|
|
125
|
-
### Windows-specific issues
|
|
126
|
-
- Always use `cmd /c` before `npx` commands
|
|
127
|
-
- Use `^` for line continuation instead of `\`
|
|
128
|
-
|
|
129
|
-
## Links
|
|
130
|
-
|
|
131
|
-
- [Aether App](https://www.aithr.ai)
|
|
132
|
-
- [Claude Code](https://claude.com/claude-code)
|
|
133
|
-
- [MCP Documentation](https://modelcontextprotocol.io)
|
|
134
|
-
|
|
135
|
-
## License
|
|
136
|
-
|
|
137
|
-
MIT
|
|
63
|
+
- `aether_start_orchestra` - Start orchestration session
|
|
64
|
+
- `aether_set_orchestra_plan` - Define development plan
|
|
65
|
+
- `aether_orchestra_approve` - Approve and start execution
|
|
66
|
+
- `aether_orchestra_status` - Get progress and status
|
|
67
|
+
- `aether_orchestra_next` - Get next ready tasks
|
|
68
|
+
- `aether_orchestra_trigger_task` - Execute a specific task
|
|
69
|
+
- `aether_report_to_orchestrator` - Report completion/blockers
|
|
70
|
+
- `aether_orchestra_pause` / `aether_orchestra_resume` - Control execution
|
|
71
|
+
- `aether_complete_orchestra` - Mark session complete
|
|
72
|
+
- `aether_orchestra_set_autonomous` - Enable/disable autonomous mode
|
|
73
|
+
|
|
74
|
+
### Folders & Artifacts
|
|
75
|
+
- `aether_list_folders` - List project folders
|
|
76
|
+
- `aether_create_folder` - Create a folder
|
|
77
|
+
- `aether_delete_folder` - Delete a folder
|
|
78
|
+
- `aether_add_file_to_folder` - Add files to folders
|
|
79
|
+
- `aether_create_artifact` - Create and place artifacts
|
|
80
|
+
|
|
81
|
+
## Documentation
|
|
82
|
+
|
|
83
|
+
Full documentation at [https://www.aithr.ai/docs/orchestra](https://www.aithr.ai/docs/orchestra)
|
package/index.js
CHANGED
|
@@ -208,7 +208,7 @@ class MCPServer {
|
|
|
208
208
|
},
|
|
209
209
|
{
|
|
210
210
|
name: 'aether_trigger_generation',
|
|
211
|
-
description: 'Trigger AI generation for an agent on the canvas',
|
|
211
|
+
description: 'Trigger AI generation for an agent on the canvas. For orchestra mode, pass the orchestraContext from aether_orchestra_next to inject full context including upstream artifacts.',
|
|
212
212
|
inputSchema: {
|
|
213
213
|
type: 'object',
|
|
214
214
|
properties: {
|
|
@@ -218,7 +218,11 @@ class MCPServer {
|
|
|
218
218
|
},
|
|
219
219
|
context: {
|
|
220
220
|
type: 'string',
|
|
221
|
-
description: 'Additional context for generation',
|
|
221
|
+
description: 'Additional context for generation (runtime override)',
|
|
222
|
+
},
|
|
223
|
+
orchestraContext: {
|
|
224
|
+
type: 'object',
|
|
225
|
+
description: 'Orchestra context from aether_orchestra_next - includes sessionId, taskId, phase info, upstream artifacts, and plan excerpt. Pass this directly from the task object returned by orchestra_next.',
|
|
222
226
|
},
|
|
223
227
|
},
|
|
224
228
|
required: ['nodeId'],
|
|
@@ -665,7 +669,7 @@ class MCPServer {
|
|
|
665
669
|
},
|
|
666
670
|
{
|
|
667
671
|
name: 'aether_orchestra_next',
|
|
668
|
-
description: 'Get the next tasks that are ready to execute (dependencies satisfied).
|
|
672
|
+
description: 'Get the next tasks that are ready to execute (dependencies satisfied). Returns tasks with pre-assembled orchestraContext including upstream artifacts. Pass orchestraContext directly to aether_trigger_generation.',
|
|
669
673
|
inputSchema: {
|
|
670
674
|
type: 'object',
|
|
671
675
|
properties: {
|
|
@@ -677,6 +681,10 @@ class MCPServer {
|
|
|
677
681
|
type: 'number',
|
|
678
682
|
description: 'Maximum number of ready tasks to return (default: 5)',
|
|
679
683
|
},
|
|
684
|
+
createNodes: {
|
|
685
|
+
type: 'boolean',
|
|
686
|
+
description: 'Auto-create canvas nodes for ready tasks (default: true)',
|
|
687
|
+
},
|
|
680
688
|
},
|
|
681
689
|
required: ['sessionId'],
|
|
682
690
|
},
|
|
@@ -797,6 +805,28 @@ class MCPServer {
|
|
|
797
805
|
required: ['sessionId', 'completionReason'],
|
|
798
806
|
},
|
|
799
807
|
},
|
|
808
|
+
{
|
|
809
|
+
name: 'aether_orchestra_set_autonomous',
|
|
810
|
+
description: 'Enable or disable autonomous mode for an orchestra session. When enabled, a background worker automatically advances the session without manual intervention. CAUTION: The system will execute tasks until stopped or completion criteria are met.',
|
|
811
|
+
inputSchema: {
|
|
812
|
+
type: 'object',
|
|
813
|
+
properties: {
|
|
814
|
+
sessionId: {
|
|
815
|
+
type: 'string',
|
|
816
|
+
description: 'Orchestra session ID',
|
|
817
|
+
},
|
|
818
|
+
enabled: {
|
|
819
|
+
type: 'boolean',
|
|
820
|
+
description: 'Enable (true) or disable (false) autonomous mode',
|
|
821
|
+
},
|
|
822
|
+
maxConcurrent: {
|
|
823
|
+
type: 'number',
|
|
824
|
+
description: 'Maximum number of agents to run in parallel (default: 3)',
|
|
825
|
+
},
|
|
826
|
+
},
|
|
827
|
+
required: ['sessionId', 'enabled'],
|
|
828
|
+
},
|
|
829
|
+
},
|
|
800
830
|
];
|
|
801
831
|
}
|
|
802
832
|
|
|
@@ -951,6 +981,9 @@ class MCPServer {
|
|
|
951
981
|
case 'aether_complete_orchestra':
|
|
952
982
|
result = await this.completeOrchestra(args);
|
|
953
983
|
break;
|
|
984
|
+
case 'aether_orchestra_set_autonomous':
|
|
985
|
+
result = await this.orchestraSetAutonomous(args);
|
|
986
|
+
break;
|
|
954
987
|
default:
|
|
955
988
|
return this.errorResponse(id, -32602, `Unknown tool: ${name}`);
|
|
956
989
|
}
|
|
@@ -1024,7 +1057,8 @@ class MCPServer {
|
|
|
1024
1057
|
}
|
|
1025
1058
|
|
|
1026
1059
|
try {
|
|
1027
|
-
|
|
1060
|
+
// Use MCP endpoint which supports API key auth
|
|
1061
|
+
const data = await this.mcpApiCall(`/mcp/projects/${projectId}/canvas`);
|
|
1028
1062
|
|
|
1029
1063
|
// If summary mode, return only essential info (much smaller response)
|
|
1030
1064
|
if (summary) {
|
|
@@ -1206,7 +1240,7 @@ class MCPServer {
|
|
|
1206
1240
|
}
|
|
1207
1241
|
|
|
1208
1242
|
async triggerGeneration(args) {
|
|
1209
|
-
const { nodeId, context } = args;
|
|
1243
|
+
const { nodeId, context, orchestraContext } = args;
|
|
1210
1244
|
const projectId = config.projectId;
|
|
1211
1245
|
|
|
1212
1246
|
if (!projectId) {
|
|
@@ -1225,6 +1259,8 @@ class MCPServer {
|
|
|
1225
1259
|
{
|
|
1226
1260
|
nodeId,
|
|
1227
1261
|
context: context || undefined,
|
|
1262
|
+
// Pass orchestraContext from orchestra_next (includes upstreamArtifacts)
|
|
1263
|
+
orchestraContext: orchestraContext || undefined,
|
|
1228
1264
|
previewLength: 500,
|
|
1229
1265
|
}
|
|
1230
1266
|
);
|
|
@@ -1272,7 +1308,8 @@ class MCPServer {
|
|
|
1272
1308
|
}
|
|
1273
1309
|
|
|
1274
1310
|
try {
|
|
1275
|
-
|
|
1311
|
+
// Use MCP endpoint which supports API key auth
|
|
1312
|
+
const data = await this.mcpApiCall(`/mcp/projects/${projectId}/canvas`);
|
|
1276
1313
|
// Canvas API returns nodes directly - they have agentId, agentType, status, customConfig
|
|
1277
1314
|
const nodes = data.nodes || [];
|
|
1278
1315
|
|
|
@@ -1990,7 +2027,7 @@ class MCPServer {
|
|
|
1990
2027
|
return { error: 'No project ID configured. Set AETHER_PROJECT_ID environment variable.' };
|
|
1991
2028
|
}
|
|
1992
2029
|
|
|
1993
|
-
const { sessionId, maxTasks = 5 } = args;
|
|
2030
|
+
const { sessionId, maxTasks = 5, createNodes = true } = args;
|
|
1994
2031
|
|
|
1995
2032
|
if (!sessionId) {
|
|
1996
2033
|
return { error: 'sessionId is required' };
|
|
@@ -2000,15 +2037,32 @@ class MCPServer {
|
|
|
2000
2037
|
const data = await this.mcpApiCall(
|
|
2001
2038
|
`/mcp/projects/${projectId}/orchestra/next`,
|
|
2002
2039
|
'POST',
|
|
2003
|
-
{ sessionId, maxTasks }
|
|
2040
|
+
{ sessionId, maxTasks, createNodes }
|
|
2004
2041
|
);
|
|
2005
2042
|
|
|
2043
|
+
// Enhanced response with orchestraContext for each task
|
|
2044
|
+
// Tasks now include pre-assembled context and are ready to trigger directly
|
|
2045
|
+
const tasks = (data.tasks || []).map((t) => ({
|
|
2046
|
+
id: t.id,
|
|
2047
|
+
taskNumber: t.taskNumber,
|
|
2048
|
+
title: t.title,
|
|
2049
|
+
agentId: t.agentId,
|
|
2050
|
+
nodeId: t.nodeId,
|
|
2051
|
+
// Pre-assembled orchestraContext - pass this to aether_trigger_generation
|
|
2052
|
+
orchestraContext: t.orchestraContext,
|
|
2053
|
+
readyToTrigger: t.readyToTrigger,
|
|
2054
|
+
resolvedArtifactCount: t.resolvedArtifactCount,
|
|
2055
|
+
}));
|
|
2056
|
+
|
|
2006
2057
|
return {
|
|
2007
|
-
|
|
2058
|
+
tasks,
|
|
2008
2059
|
count: data.count || 0,
|
|
2009
|
-
|
|
2010
|
-
|
|
2011
|
-
|
|
2060
|
+
totalReady: data.totalReady || data.count || 0,
|
|
2061
|
+
phase: data.phase,
|
|
2062
|
+
hint: tasks.length > 0
|
|
2063
|
+
? 'Each task includes nodeId and orchestraContext. Call aether_trigger_generation(nodeId, orchestraContext) to execute.'
|
|
2064
|
+
: data.message || 'No tasks ready. Check aether_orchestra_status for blockers or completion.',
|
|
2065
|
+
sessionStatus: data.sessionStatus,
|
|
2012
2066
|
};
|
|
2013
2067
|
} catch (e) {
|
|
2014
2068
|
return { error: e.message };
|
|
@@ -2201,6 +2255,45 @@ class MCPServer {
|
|
|
2201
2255
|
}
|
|
2202
2256
|
}
|
|
2203
2257
|
|
|
2258
|
+
async orchestraSetAutonomous(args) {
|
|
2259
|
+
const projectId = config.projectId;
|
|
2260
|
+
|
|
2261
|
+
if (!projectId) {
|
|
2262
|
+
return { error: 'No project ID configured. Set AETHER_PROJECT_ID environment variable.' };
|
|
2263
|
+
}
|
|
2264
|
+
|
|
2265
|
+
const { sessionId, enabled, maxConcurrent } = args;
|
|
2266
|
+
|
|
2267
|
+
if (!sessionId || enabled === undefined) {
|
|
2268
|
+
return { error: 'sessionId and enabled are required' };
|
|
2269
|
+
}
|
|
2270
|
+
|
|
2271
|
+
try {
|
|
2272
|
+
const data = await this.mcpApiCall(
|
|
2273
|
+
`/mcp/projects/${projectId}/orchestra`,
|
|
2274
|
+
'POST',
|
|
2275
|
+
{
|
|
2276
|
+
action: 'set_autonomous',
|
|
2277
|
+
sessionId,
|
|
2278
|
+
enabled,
|
|
2279
|
+
maxConcurrent: maxConcurrent || 3,
|
|
2280
|
+
}
|
|
2281
|
+
);
|
|
2282
|
+
|
|
2283
|
+
return {
|
|
2284
|
+
success: true,
|
|
2285
|
+
sessionId,
|
|
2286
|
+
autoAdvance: data.autoAdvance,
|
|
2287
|
+
maxConcurrentAgents: data.maxConcurrentAgents,
|
|
2288
|
+
message: enabled
|
|
2289
|
+
? '⚠️ AUTONOMOUS MODE ENABLED: The system will automatically execute tasks every minute. Use aether_orchestra_status to monitor progress or aether_orchestra_set_autonomous(enabled: false) to stop.'
|
|
2290
|
+
: 'Autonomous mode disabled. Use aether_orchestra_next and aether_trigger_generation for manual control.',
|
|
2291
|
+
};
|
|
2292
|
+
} catch (e) {
|
|
2293
|
+
return { success: false, error: e.message };
|
|
2294
|
+
}
|
|
2295
|
+
}
|
|
2296
|
+
|
|
2204
2297
|
async run() {
|
|
2205
2298
|
const rl = readline.createInterface({
|
|
2206
2299
|
input: process.stdin,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aithr-ai/mcp-server",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.7",
|
|
4
4
|
"description": "MCP server to connect Claude Code to Aether canvas - AI-powered team workspace for software development",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -20,20 +20,14 @@
|
|
|
20
20
|
"orchestration",
|
|
21
21
|
"anthropic"
|
|
22
22
|
],
|
|
23
|
+
"author": "Aether AI",
|
|
23
24
|
"license": "MIT",
|
|
24
|
-
"engines": {
|
|
25
|
-
"node": ">=18.0.0"
|
|
26
|
-
},
|
|
27
25
|
"repository": {
|
|
28
26
|
"type": "git",
|
|
29
|
-
"url": "https://github.com/
|
|
27
|
+
"url": "https://github.com/aithr-ai/mcp-server"
|
|
30
28
|
},
|
|
31
29
|
"homepage": "https://www.aithr.ai",
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
}
|
|
35
|
-
"files": [
|
|
36
|
-
"index.js",
|
|
37
|
-
"README.md"
|
|
38
|
-
]
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=18.0.0"
|
|
32
|
+
}
|
|
39
33
|
}
|