@adrive/mcp-server 0.3.0 → 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 +2 -2
- package/dist/api-client.d.ts +39 -1
- package/dist/api-client.js +14 -0
- package/dist/index.js +44 -2
- package/dist/tools/drive-context.d.ts +0 -2
- package/dist/tools/drive-context.js +0 -2
- package/dist/tools/drive-sandbox-clone.d.ts +19 -0
- package/dist/tools/drive-sandbox-clone.js +20 -0
- package/dist/tools/drive-sandbox-commit.d.ts +19 -0
- package/dist/tools/drive-sandbox-commit.js +24 -0
- package/dist/tools/drive-sandbox-exec.d.ts +19 -0
- package/dist/tools/drive-sandbox-exec.js +23 -0
- package/dist/tools/drive-sandbox-read.d.ts +15 -0
- package/dist/tools/drive-sandbox-read.js +15 -0
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @adrive/mcp-server
|
|
2
2
|
|
|
3
|
-
MCP server for **AgentDrive** — the
|
|
3
|
+
MCP server for **AgentDrive** — the cross-agent artifact workspace with provenance and portable storage across Claude Code, Codex, Cursor, and LangGraph. Files, semantic recall, run logging, and cross-platform attribution.
|
|
4
4
|
|
|
5
5
|
Drop this server into any MCP-compatible client and your agents get a shared filesystem with provenance, semantic search across artifacts written by other agents, and per-run audit. Memory is a feature of the workspace, not the headline.
|
|
6
6
|
|
|
@@ -66,7 +66,7 @@ env = { AGENTDRIVE_API_KEY = "agentdrive_live_...", AGENTDRIVE_AGENT_PLATFORM =
|
|
|
66
66
|
}
|
|
67
67
|
```
|
|
68
68
|
|
|
69
|
-
## Tools (
|
|
69
|
+
## Tools (20)
|
|
70
70
|
|
|
71
71
|
**Files**
|
|
72
72
|
- `drive_write` — create or update a file with versioning
|
package/dist/api-client.d.ts
CHANGED
|
@@ -38,7 +38,6 @@ export interface ContextRequestBody {
|
|
|
38
38
|
task: string;
|
|
39
39
|
workspace_id?: string;
|
|
40
40
|
limit?: number;
|
|
41
|
-
include_facts?: boolean;
|
|
42
41
|
}
|
|
43
42
|
export interface ContextArtifact extends SearchHit {
|
|
44
43
|
}
|
|
@@ -233,5 +232,44 @@ export declare class ApiClient {
|
|
|
233
232
|
run_id: string;
|
|
234
233
|
created_at: number;
|
|
235
234
|
}>;
|
|
235
|
+
sandboxClone(workspaceId: string, body: {
|
|
236
|
+
url: string;
|
|
237
|
+
branch?: string;
|
|
238
|
+
depth?: number;
|
|
239
|
+
}): Promise<{
|
|
240
|
+
workspace_id: string;
|
|
241
|
+
repo_url?: string;
|
|
242
|
+
branch?: string;
|
|
243
|
+
head_sha?: string;
|
|
244
|
+
last_active_at?: number;
|
|
245
|
+
}>;
|
|
246
|
+
sandboxExec(workspaceId: string, body: {
|
|
247
|
+
cmd: string;
|
|
248
|
+
cwd?: string;
|
|
249
|
+
timeout_ms?: number;
|
|
250
|
+
}): Promise<{
|
|
251
|
+
exit_code: number;
|
|
252
|
+
stdout: string;
|
|
253
|
+
stderr: string;
|
|
254
|
+
duration_ms: number;
|
|
255
|
+
truncated: boolean;
|
|
256
|
+
}>;
|
|
257
|
+
sandboxRead(workspaceId: string, path: string): Promise<{
|
|
258
|
+
content: string;
|
|
259
|
+
size: number;
|
|
260
|
+
truncated: boolean;
|
|
261
|
+
}>;
|
|
262
|
+
sandboxCommit(workspaceId: string, body: {
|
|
263
|
+
message: string;
|
|
264
|
+
author?: {
|
|
265
|
+
name: string;
|
|
266
|
+
email: string;
|
|
267
|
+
};
|
|
268
|
+
}): Promise<{
|
|
269
|
+
commit_sha: string;
|
|
270
|
+
branch: string;
|
|
271
|
+
files_changed: number;
|
|
272
|
+
artifact_path: string;
|
|
273
|
+
}>;
|
|
236
274
|
}
|
|
237
275
|
export {};
|
package/dist/api-client.js
CHANGED
|
@@ -195,4 +195,18 @@ export class ApiClient {
|
|
|
195
195
|
async logRun(body) {
|
|
196
196
|
return this.request('POST', '/runs', body);
|
|
197
197
|
}
|
|
198
|
+
// --- Sandbox (Wave 5 Stream D) ---
|
|
199
|
+
async sandboxClone(workspaceId, body) {
|
|
200
|
+
return this.request('POST', `/workspaces/${workspaceId}/sandbox/clone`, body);
|
|
201
|
+
}
|
|
202
|
+
async sandboxExec(workspaceId, body) {
|
|
203
|
+
return this.request('POST', `/workspaces/${workspaceId}/sandbox/exec`, body);
|
|
204
|
+
}
|
|
205
|
+
async sandboxRead(workspaceId, path) {
|
|
206
|
+
const cleaned = path.startsWith('/') ? path : `/${path}`;
|
|
207
|
+
return this.request('GET', `/workspaces/${workspaceId}/sandbox/files${cleaned}`);
|
|
208
|
+
}
|
|
209
|
+
async sandboxCommit(workspaceId, body) {
|
|
210
|
+
return this.request('POST', `/workspaces/${workspaceId}/sandbox/commit`, body);
|
|
211
|
+
}
|
|
198
212
|
}
|
package/dist/index.js
CHANGED
|
@@ -18,10 +18,40 @@ import { driveSearchSchema, driveSearch } from './tools/drive-search.js';
|
|
|
18
18
|
import { driveRecallSchema, driveRecall } from './tools/drive-recall.js';
|
|
19
19
|
import { driveLogRunSchema, driveLogRun } from './tools/drive-log-run.js';
|
|
20
20
|
import { driveContextSchema, driveContext } from './tools/drive-context.js';
|
|
21
|
+
import { driveSandboxCloneSchema, driveSandboxClone } from './tools/drive-sandbox-clone.js';
|
|
22
|
+
import { driveSandboxExecSchema, driveSandboxExec } from './tools/drive-sandbox-exec.js';
|
|
23
|
+
import { driveSandboxReadSchema, driveSandboxRead } from './tools/drive-sandbox-read.js';
|
|
24
|
+
import { driveSandboxCommitSchema, driveSandboxCommit } from './tools/drive-sandbox-commit.js';
|
|
25
|
+
import { createRequire } from 'node:module';
|
|
26
|
+
const require = createRequire(import.meta.url);
|
|
27
|
+
const pkg = require('../package.json');
|
|
21
28
|
const BASE_URL = process.env.AGENTDRIVE_API_URL || 'https://app.agentdrive.sh';
|
|
22
29
|
const API_KEY = process.env.AGENTDRIVE_API_KEY;
|
|
23
30
|
const AGENT_PLATFORM = process.env.AGENTDRIVE_AGENT_PLATFORM || 'claude-code';
|
|
24
31
|
const AGENT_ROLE = process.env.AGENTDRIVE_AGENT_ROLE || '';
|
|
32
|
+
// Cross-host preamble shipped via MCP `instructions` so every MCP-aware
|
|
33
|
+
// client (Claude Code, Codex, Cursor, Zed, Cline, Continue, OpenClaw) gets
|
|
34
|
+
// the same usage guidance at session start without needing a per-host
|
|
35
|
+
// markdown file. Hosts that ALSO read a markdown rules file
|
|
36
|
+
// (~/.claude/CLAUDE.md, ~/.codex/AGENTS.md, ~/.cursor/rules/agentdrive.mdc)
|
|
37
|
+
// continue to get the more verbose adrive init preamble via auto-context.ts.
|
|
38
|
+
const SERVER_INSTRUCTIONS = `AgentDrive — cross-agent artifact workspace with provenance for multi-agent workflows.
|
|
39
|
+
|
|
40
|
+
Reach for these tools without waiting to be asked:
|
|
41
|
+
|
|
42
|
+
- **Session start:** call \`drive_context\` with a short summary of the
|
|
43
|
+
current task. Returns the most relevant artifacts and last_run
|
|
44
|
+
summaries from prior agents' work in the same workspace, each with
|
|
45
|
+
an \`attribution\` block explaining *why* it was surfaced.
|
|
46
|
+
- **Cross-agent recall:** call \`drive_search\` (semantic) when the
|
|
47
|
+
user asks "what did Codex / Cursor / the last session do?"
|
|
48
|
+
- **Saving work:** call \`drive_write\` for any artifact worth keeping
|
|
49
|
+
so the next agent in the chain can read it back.
|
|
50
|
+
- **Provenance:** call \`drive_log_run\` at the end of meaningful
|
|
51
|
+
work so the cross-agent timeline stays accurate.
|
|
52
|
+
|
|
53
|
+
Privacy: if the user has Private Workspace on, written content is
|
|
54
|
+
encrypted client-side; the AgentDrive server only stores ciphertext.`;
|
|
25
55
|
if (!API_KEY) {
|
|
26
56
|
console.error('AGENTDRIVE_API_KEY environment variable is required');
|
|
27
57
|
process.exit(1);
|
|
@@ -34,8 +64,10 @@ const client = new ApiClient({
|
|
|
34
64
|
});
|
|
35
65
|
const server = new McpServer({
|
|
36
66
|
name: 'agentdrive',
|
|
37
|
-
version:
|
|
38
|
-
description: 'AgentDrive — the persistent workspace your agents share across Claude Code, Codex, Cursor, and LangGraph. Files, semantic search, run logging,
|
|
67
|
+
version: pkg.version,
|
|
68
|
+
description: 'AgentDrive — the persistent workspace your agents share across Claude Code, Codex, Cursor, and LangGraph. Files, semantic search, run logging, cross-platform memory, and per-workspace Linux sandbox with git worktree.',
|
|
69
|
+
}, {
|
|
70
|
+
instructions: SERVER_INSTRUCTIONS,
|
|
39
71
|
});
|
|
40
72
|
server.tool('drive_write', 'Write a markdown file to a workspace. Creates or updates the file with automatic versioning.', driveWriteSchema, (args) => driveWrite(client, args));
|
|
41
73
|
server.tool('drive_read', 'Read a file\'s content from a workspace.', driveReadSchema, (args) => driveRead(client, args));
|
|
@@ -53,6 +85,16 @@ server.tool('drive_search', "Semantic search across your org's artifacts in Agen
|
|
|
53
85
|
server.tool('drive_recall', 'Recall persistent facts and preferences your agents have written. In v1 this returns semantic search results across artifacts; v1.5 will narrow to auto-extracted facts (preferences, decisions, key entities).', driveRecallSchema, (args) => driveRecall(client, args));
|
|
54
86
|
server.tool('drive_log_run', "Log an agent run to AgentDrive's provenance store. Captures task, status, referenced/produced artifacts, and cross-platform identity (which agent on which tool). Used for retrospective context retrieval and team-wide audit.", driveLogRunSchema, (args) => driveLogRun(client, args));
|
|
55
87
|
server.tool('drive_context', 'Auto-pull the most relevant artifacts from prior agent sessions for the task you are about to do. Combines semantic relevance with recency. Call this at the START of any non-trivial task to ground the agent in prior context — replaces manual copy-paste of artifacts between sessions.', driveContextSchema, (args) => driveContext(client, args));
|
|
88
|
+
// The four drive_sandbox_* tools are EXPERIMENTAL. They require the
|
|
89
|
+
// Cloudflare Containers plan on the AgentDrive worker; without that
|
|
90
|
+
// binding the API returns 503 and these tools surface a clean
|
|
91
|
+
// "not configured" message. Marked experimental in the description
|
|
92
|
+
// so MCP-aware hosts that surface tool metadata can communicate the
|
|
93
|
+
// status; not part of the v1 cross-agent value prop.
|
|
94
|
+
server.tool('drive_sandbox_clone', '[EXPERIMENTAL] Clone a git repo into a per-workspace Linux sandbox. Requires Cloudflare Containers on the AgentDrive worker; gracefully degrades to a 503 with "sandbox not configured" otherwise.', driveSandboxCloneSchema, (args) => driveSandboxClone(client, args));
|
|
95
|
+
server.tool('drive_sandbox_exec', '[EXPERIMENTAL] Run a shell command inside the per-workspace Linux sandbox. Captures stdout/stderr (64 KB cap), exit code, duration. Requires Cloudflare Containers; degrades to 503 otherwise.', driveSandboxExecSchema, (args) => driveSandboxExec(client, args));
|
|
96
|
+
server.tool('drive_sandbox_read', '[EXPERIMENTAL] Read a file from the per-workspace sandbox filesystem (build artifacts, test output, logs). Requires Cloudflare Containers; degrades to 503 otherwise.', driveSandboxReadSchema, (args) => driveSandboxRead(client, args));
|
|
97
|
+
server.tool('drive_sandbox_commit', '[EXPERIMENTAL] Stage + commit the current sandbox worktree. Surfaces as an AgentDrive artifact at commits/<sha>.json. Requires Cloudflare Containers; degrades to 503 otherwise.', driveSandboxCommitSchema, (args) => driveSandboxCommit(client, args));
|
|
56
98
|
async function main() {
|
|
57
99
|
const transport = new StdioServerTransport();
|
|
58
100
|
await server.connect(transport);
|
|
@@ -4,13 +4,11 @@ export declare const driveContextSchema: {
|
|
|
4
4
|
task: z.ZodString;
|
|
5
5
|
workspace_id: z.ZodOptional<z.ZodString>;
|
|
6
6
|
limit: z.ZodOptional<z.ZodNumber>;
|
|
7
|
-
include_facts: z.ZodOptional<z.ZodBoolean>;
|
|
8
7
|
};
|
|
9
8
|
export declare function driveContext(client: ApiClient, args: {
|
|
10
9
|
task: string;
|
|
11
10
|
workspace_id?: string;
|
|
12
11
|
limit?: number;
|
|
13
|
-
include_facts?: boolean;
|
|
14
12
|
}): Promise<{
|
|
15
13
|
content: {
|
|
16
14
|
type: "text";
|
|
@@ -3,14 +3,12 @@ export const driveContextSchema = {
|
|
|
3
3
|
task: z.string().min(1).max(2000).describe('What you are about to do — used to rank prior artifacts by relevance'),
|
|
4
4
|
workspace_id: z.string().optional().describe('Scope to a single workspace; omit for org-wide context'),
|
|
5
5
|
limit: z.number().int().positive().max(20).optional().describe('Max artifacts to return (default 5, max 20)'),
|
|
6
|
-
include_facts: z.boolean().optional().describe('Include extracted facts alongside artifacts (v1.5+)'),
|
|
7
6
|
};
|
|
8
7
|
export async function driveContext(client, args) {
|
|
9
8
|
const { artifacts } = await client.context({
|
|
10
9
|
task: args.task,
|
|
11
10
|
workspace_id: args.workspace_id,
|
|
12
11
|
limit: args.limit ?? 5,
|
|
13
|
-
include_facts: args.include_facts ?? false,
|
|
14
12
|
});
|
|
15
13
|
if (artifacts.length === 0) {
|
|
16
14
|
return { content: [{ type: 'text', text: 'No prior context found.' }] };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ApiClient } from '../api-client.js';
|
|
3
|
+
export declare const driveSandboxCloneSchema: {
|
|
4
|
+
workspace_id: z.ZodString;
|
|
5
|
+
url: z.ZodString;
|
|
6
|
+
branch: z.ZodOptional<z.ZodString>;
|
|
7
|
+
depth: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
};
|
|
9
|
+
export declare function driveSandboxClone(client: ApiClient, args: {
|
|
10
|
+
workspace_id: string;
|
|
11
|
+
url: string;
|
|
12
|
+
branch?: string;
|
|
13
|
+
depth?: number;
|
|
14
|
+
}): Promise<{
|
|
15
|
+
content: {
|
|
16
|
+
type: "text";
|
|
17
|
+
text: string;
|
|
18
|
+
}[];
|
|
19
|
+
}>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const driveSandboxCloneSchema = {
|
|
3
|
+
workspace_id: z.string().describe('Workspace to clone into. The sandbox persists across MCP sessions per workspace.'),
|
|
4
|
+
url: z.string().url().describe('Git repository URL to clone'),
|
|
5
|
+
branch: z.string().optional().describe('Branch to check out (default: repo default)'),
|
|
6
|
+
depth: z.number().int().positive().max(50).optional().describe('Shallow clone depth (default: full clone)'),
|
|
7
|
+
};
|
|
8
|
+
export async function driveSandboxClone(client, args) {
|
|
9
|
+
const state = await client.sandboxClone(args.workspace_id, {
|
|
10
|
+
url: args.url,
|
|
11
|
+
branch: args.branch,
|
|
12
|
+
depth: args.depth,
|
|
13
|
+
});
|
|
14
|
+
return {
|
|
15
|
+
content: [{
|
|
16
|
+
type: 'text',
|
|
17
|
+
text: `Cloned ${state.repo_url}${state.branch ? '@' + state.branch : ''} into workspace ${state.workspace_id}.`,
|
|
18
|
+
}],
|
|
19
|
+
};
|
|
20
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ApiClient } from '../api-client.js';
|
|
3
|
+
export declare const driveSandboxCommitSchema: {
|
|
4
|
+
workspace_id: z.ZodString;
|
|
5
|
+
message: z.ZodString;
|
|
6
|
+
author_name: z.ZodOptional<z.ZodString>;
|
|
7
|
+
author_email: z.ZodOptional<z.ZodString>;
|
|
8
|
+
};
|
|
9
|
+
export declare function driveSandboxCommit(client: ApiClient, args: {
|
|
10
|
+
workspace_id: string;
|
|
11
|
+
message: string;
|
|
12
|
+
author_name?: string;
|
|
13
|
+
author_email?: string;
|
|
14
|
+
}): Promise<{
|
|
15
|
+
content: {
|
|
16
|
+
type: "text";
|
|
17
|
+
text: string;
|
|
18
|
+
}[];
|
|
19
|
+
}>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const driveSandboxCommitSchema = {
|
|
3
|
+
workspace_id: z.string().describe('Workspace whose sandbox to commit'),
|
|
4
|
+
message: z.string().min(1).max(500).describe('Commit message'),
|
|
5
|
+
author_name: z.string().optional().describe('Override git author name (default: agent identity)'),
|
|
6
|
+
author_email: z.string().email().optional().describe('Override git author email (default: agent identity)'),
|
|
7
|
+
};
|
|
8
|
+
export async function driveSandboxCommit(client, args) {
|
|
9
|
+
const author = args.author_name && args.author_email
|
|
10
|
+
? { name: args.author_name, email: args.author_email }
|
|
11
|
+
: undefined;
|
|
12
|
+
const result = await client.sandboxCommit(args.workspace_id, {
|
|
13
|
+
message: args.message,
|
|
14
|
+
author,
|
|
15
|
+
});
|
|
16
|
+
return {
|
|
17
|
+
content: [{
|
|
18
|
+
type: 'text',
|
|
19
|
+
text: `Committed ${result.commit_sha.slice(0, 8)} on ${result.branch} ` +
|
|
20
|
+
`(${result.files_changed} file${result.files_changed === 1 ? '' : 's'} changed). ` +
|
|
21
|
+
`Surfaced as AgentDrive artifact at ${result.artifact_path}.`,
|
|
22
|
+
}],
|
|
23
|
+
};
|
|
24
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ApiClient } from '../api-client.js';
|
|
3
|
+
export declare const driveSandboxExecSchema: {
|
|
4
|
+
workspace_id: z.ZodString;
|
|
5
|
+
cmd: z.ZodString;
|
|
6
|
+
cwd: z.ZodOptional<z.ZodString>;
|
|
7
|
+
timeout_ms: z.ZodOptional<z.ZodNumber>;
|
|
8
|
+
};
|
|
9
|
+
export declare function driveSandboxExec(client: ApiClient, args: {
|
|
10
|
+
workspace_id: string;
|
|
11
|
+
cmd: string;
|
|
12
|
+
cwd?: string;
|
|
13
|
+
timeout_ms?: number;
|
|
14
|
+
}): Promise<{
|
|
15
|
+
content: {
|
|
16
|
+
type: "text";
|
|
17
|
+
text: string;
|
|
18
|
+
}[];
|
|
19
|
+
}>;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const driveSandboxExecSchema = {
|
|
3
|
+
workspace_id: z.string().describe('Workspace whose sandbox to run in'),
|
|
4
|
+
cmd: z.string().min(1).max(2048).describe('Shell command to run inside the per-workspace Linux sandbox'),
|
|
5
|
+
cwd: z.string().optional().describe('Working directory (default: workspace root)'),
|
|
6
|
+
timeout_ms: z.number().int().positive().max(60_000).optional().describe('Max runtime in ms (default 30000, hard cap 60000)'),
|
|
7
|
+
};
|
|
8
|
+
export async function driveSandboxExec(client, args) {
|
|
9
|
+
const result = await client.sandboxExec(args.workspace_id, {
|
|
10
|
+
cmd: args.cmd,
|
|
11
|
+
cwd: args.cwd,
|
|
12
|
+
timeout_ms: args.timeout_ms,
|
|
13
|
+
});
|
|
14
|
+
const header = `exit=${result.exit_code} duration=${result.duration_ms}ms${result.truncated ? ' [output truncated to 64KB]' : ''}`;
|
|
15
|
+
const stdoutBlock = result.stdout ? `\n--- stdout ---\n${result.stdout}` : '';
|
|
16
|
+
const stderrBlock = result.stderr ? `\n--- stderr ---\n${result.stderr}` : '';
|
|
17
|
+
return {
|
|
18
|
+
content: [{
|
|
19
|
+
type: 'text',
|
|
20
|
+
text: `${header}${stdoutBlock}${stderrBlock}`,
|
|
21
|
+
}],
|
|
22
|
+
};
|
|
23
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import type { ApiClient } from '../api-client.js';
|
|
3
|
+
export declare const driveSandboxReadSchema: {
|
|
4
|
+
workspace_id: z.ZodString;
|
|
5
|
+
path: z.ZodString;
|
|
6
|
+
};
|
|
7
|
+
export declare function driveSandboxRead(client: ApiClient, args: {
|
|
8
|
+
workspace_id: string;
|
|
9
|
+
path: string;
|
|
10
|
+
}): Promise<{
|
|
11
|
+
content: {
|
|
12
|
+
type: "text";
|
|
13
|
+
text: string;
|
|
14
|
+
}[];
|
|
15
|
+
}>;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export const driveSandboxReadSchema = {
|
|
3
|
+
workspace_id: z.string().describe('Workspace whose sandbox to read from'),
|
|
4
|
+
path: z.string().describe('Path inside the sandbox (e.g., src/index.ts or /tmp/build.log)'),
|
|
5
|
+
};
|
|
6
|
+
export async function driveSandboxRead(client, args) {
|
|
7
|
+
const file = await client.sandboxRead(args.workspace_id, args.path);
|
|
8
|
+
const note = file.truncated ? `\n\n[content truncated; total ${file.size} bytes]` : '';
|
|
9
|
+
return {
|
|
10
|
+
content: [{
|
|
11
|
+
type: 'text',
|
|
12
|
+
text: `${args.path} (${file.size} bytes)\n\n${file.content}${note}`,
|
|
13
|
+
}],
|
|
14
|
+
};
|
|
15
|
+
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adrive/mcp-server",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "MCP server for AgentDrive —
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "MCP server for AgentDrive — cross-agent artifact workspace with provenance and portable storage across Claude Code, Codex, Cursor, and LangGraph.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|