replicas-mcp 0.1.1 → 0.1.2
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 +6 -3
- package/dist/index.js +39 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -2
- package/src/index.ts +44 -1
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# replicas-mcp
|
|
2
2
|
|
|
3
|
-
MCP
|
|
3
|
+
Stdio MCP server for [Replicas](https://replicas.dev) - cloud workspaces for AI coding agents.
|
|
4
|
+
|
|
5
|
+
For MCP clients that require a remote server URL instead of stdio, use the streamable HTTP endpoint at `https://api.replicas.dev/v1/mcp`.
|
|
4
6
|
|
|
5
7
|
## Installation
|
|
6
8
|
|
|
@@ -25,8 +27,9 @@ Get your API key from [Settings](https://replicas.dev/dashboard?settings=org-api
|
|
|
25
27
|
| Tool | Description |
|
|
26
28
|
|------|-------------|
|
|
27
29
|
| `create_replica` | Create a new replica workspace |
|
|
28
|
-
| `list_replicas` | List all replicas (paginated) |
|
|
29
|
-
| `get_replica` | Get a replica by ID |
|
|
30
|
+
| `list_replicas` | List all replicas (paginated) with PR info |
|
|
31
|
+
| `get_replica` | Get a replica by ID with detailed info (agent, branch, diff) |
|
|
30
32
|
| `send_replica_message` | Send a message to a replica |
|
|
31
33
|
| `delete_replica` | Delete a replica |
|
|
32
34
|
| `list_repositories` | List available repositories |
|
|
35
|
+
| `read_replica_history` | Read conversation history (paginated from end) |
|
package/dist/index.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
4
|
import { z } from 'zod';
|
|
5
|
+
import { parseAgentEvents } from '@replicas/shared';
|
|
5
6
|
const API_URL = process.env.REPLICAS_API_URL || 'https://api.replicas.dev';
|
|
6
7
|
const API_KEY = process.env.REPLICAS_API_KEY;
|
|
7
8
|
if (!API_KEY) {
|
|
@@ -40,7 +41,7 @@ function result(data, isError = false) {
|
|
|
40
41
|
}
|
|
41
42
|
const server = new McpServer({
|
|
42
43
|
name: 'replicas-mcp',
|
|
43
|
-
version: '0.1.
|
|
44
|
+
version: '0.1.1',
|
|
44
45
|
});
|
|
45
46
|
const registerTool = server.registerTool.bind(server);
|
|
46
47
|
registerTool('create_replica', {
|
|
@@ -143,6 +144,43 @@ registerTool('list_repositories', {
|
|
|
143
144
|
return result(e instanceof Error ? e.message : String(e), true);
|
|
144
145
|
}
|
|
145
146
|
});
|
|
147
|
+
registerTool('read_replica_history', {
|
|
148
|
+
description: 'Read conversation history of a replica. Returns parsed DisplayMessage objects (user messages, agent responses, commands, file changes, tool calls, etc). If the workspace is sleeping, it will be woken and you should retry in 30-90 seconds.',
|
|
149
|
+
inputSchema: {
|
|
150
|
+
id: z.string(),
|
|
151
|
+
limit: z.number().optional().describe('Maximum number of events to return'),
|
|
152
|
+
offset: z.number().optional().describe('Number of events to skip from the end'),
|
|
153
|
+
},
|
|
154
|
+
}, async (args) => {
|
|
155
|
+
try {
|
|
156
|
+
const params = new URLSearchParams();
|
|
157
|
+
if (args.limit)
|
|
158
|
+
params.set('limit', String(args.limit));
|
|
159
|
+
if (args.offset)
|
|
160
|
+
params.set('offset', String(args.offset));
|
|
161
|
+
const q = params.toString();
|
|
162
|
+
const response = await api('GET', `/v1/replica/${args.id}/read${q ? '?' + q : ''}`);
|
|
163
|
+
if (response.waking) {
|
|
164
|
+
return result({
|
|
165
|
+
status: 'waking',
|
|
166
|
+
message: 'Workspace is waking from sleep. Retry in 30-90 seconds.',
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
// Parse raw events into DisplayMessage format
|
|
170
|
+
const agentType = (response.coding_agent || 'claude');
|
|
171
|
+
const messages = parseAgentEvents(response.events, agentType);
|
|
172
|
+
return result({
|
|
173
|
+
thread_id: response.thread_id,
|
|
174
|
+
coding_agent: response.coding_agent,
|
|
175
|
+
total: response.total,
|
|
176
|
+
hasMore: response.hasMore,
|
|
177
|
+
messages,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
catch (e) {
|
|
181
|
+
return result(e instanceof Error ? e.message : String(e), true);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
146
184
|
const transport = new StdioServerTransport();
|
|
147
185
|
await server.connect(transport);
|
|
148
186
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "replicas-mcp",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"license": "UNLICENSED",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
15
|
"@modelcontextprotocol/sdk": "^1.25.0",
|
|
16
|
+
"@replicas/shared": "*",
|
|
16
17
|
"zod": "^3.25.0"
|
|
17
18
|
},
|
|
18
19
|
"devDependencies": {
|
|
19
20
|
"@types/node": "^20.11.17",
|
|
20
|
-
"typescript": "^5.
|
|
21
|
+
"typescript": "^5.9.3"
|
|
21
22
|
}
|
|
22
23
|
}
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
|
4
4
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
5
5
|
import { z } from 'zod';
|
|
6
6
|
import type { CallToolResult } from '@modelcontextprotocol/sdk/types.js';
|
|
7
|
+
import { parseAgentEvents, type AgentType, type ReadReplicaHistoryResponse } from '@replicas/shared';
|
|
7
8
|
|
|
8
9
|
const API_URL = process.env.REPLICAS_API_URL || 'https://api.replicas.dev';
|
|
9
10
|
const API_KEY = process.env.REPLICAS_API_KEY;
|
|
@@ -58,7 +59,7 @@ type RegisterToolFn = (
|
|
|
58
59
|
|
|
59
60
|
const server = new McpServer({
|
|
60
61
|
name: 'replicas-mcp',
|
|
61
|
-
version: '0.1.
|
|
62
|
+
version: '0.1.1',
|
|
62
63
|
});
|
|
63
64
|
|
|
64
65
|
const registerTool = server.registerTool.bind(server) as RegisterToolFn;
|
|
@@ -182,5 +183,47 @@ registerTool(
|
|
|
182
183
|
}
|
|
183
184
|
);
|
|
184
185
|
|
|
186
|
+
registerTool(
|
|
187
|
+
'read_replica_history',
|
|
188
|
+
{
|
|
189
|
+
description: 'Read conversation history of a replica. Returns parsed DisplayMessage objects (user messages, agent responses, commands, file changes, tool calls, etc). If the workspace is sleeping, it will be woken and you should retry in 30-90 seconds.',
|
|
190
|
+
inputSchema: {
|
|
191
|
+
id: z.string(),
|
|
192
|
+
limit: z.number().optional().describe('Maximum number of events to return'),
|
|
193
|
+
offset: z.number().optional().describe('Number of events to skip from the end'),
|
|
194
|
+
},
|
|
195
|
+
},
|
|
196
|
+
async (args) => {
|
|
197
|
+
try {
|
|
198
|
+
const params = new URLSearchParams();
|
|
199
|
+
if (args.limit) params.set('limit', String(args.limit));
|
|
200
|
+
if (args.offset) params.set('offset', String(args.offset));
|
|
201
|
+
const q = params.toString();
|
|
202
|
+
const response = await api<ReadReplicaHistoryResponse>('GET', `/v1/replica/${args.id}/read${q ? '?' + q : ''}`);
|
|
203
|
+
|
|
204
|
+
if (response.waking) {
|
|
205
|
+
return result({
|
|
206
|
+
status: 'waking',
|
|
207
|
+
message: 'Workspace is waking from sleep. Retry in 30-90 seconds.',
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
|
|
211
|
+
// Parse raw events into DisplayMessage format
|
|
212
|
+
const agentType = (response.coding_agent || 'claude') as AgentType;
|
|
213
|
+
const messages = parseAgentEvents(response.events, agentType);
|
|
214
|
+
|
|
215
|
+
return result({
|
|
216
|
+
thread_id: response.thread_id,
|
|
217
|
+
coding_agent: response.coding_agent,
|
|
218
|
+
total: response.total,
|
|
219
|
+
hasMore: response.hasMore,
|
|
220
|
+
messages,
|
|
221
|
+
});
|
|
222
|
+
} catch (e) {
|
|
223
|
+
return result(e instanceof Error ? e.message : String(e), true);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
);
|
|
227
|
+
|
|
185
228
|
const transport = new StdioServerTransport();
|
|
186
229
|
await server.connect(transport);
|