@recursiv/mcp 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +135 -0
- package/dist/__tests__/scopes.test.d.ts +2 -0
- package/dist/__tests__/scopes.test.d.ts.map +1 -0
- package/dist/__tests__/scopes.test.js +85 -0
- package/dist/__tests__/scopes.test.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +125 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/approval-gate.d.ts +45 -0
- package/dist/lib/approval-gate.d.ts.map +1 -0
- package/dist/lib/approval-gate.js +143 -0
- package/dist/lib/approval-gate.js.map +1 -0
- package/dist/scopes.d.ts +99 -0
- package/dist/scopes.d.ts.map +1 -0
- package/dist/scopes.js +122 -0
- package/dist/scopes.js.map +1 -0
- package/dist/tools/__tests__/agents.test.d.ts +2 -0
- package/dist/tools/__tests__/agents.test.d.ts.map +1 -0
- package/dist/tools/__tests__/agents.test.js +248 -0
- package/dist/tools/__tests__/agents.test.js.map +1 -0
- package/dist/tools/__tests__/devtools.test.d.ts +2 -0
- package/dist/tools/__tests__/devtools.test.d.ts.map +1 -0
- package/dist/tools/__tests__/devtools.test.js +206 -0
- package/dist/tools/__tests__/devtools.test.js.map +1 -0
- package/dist/tools/__tests__/dispatcher.test.d.ts +2 -0
- package/dist/tools/__tests__/dispatcher.test.d.ts.map +1 -0
- package/dist/tools/__tests__/dispatcher.test.js +178 -0
- package/dist/tools/__tests__/dispatcher.test.js.map +1 -0
- package/dist/tools/__tests__/memory.test.d.ts +2 -0
- package/dist/tools/__tests__/memory.test.d.ts.map +1 -0
- package/dist/tools/__tests__/memory.test.js +151 -0
- package/dist/tools/__tests__/memory.test.js.map +1 -0
- package/dist/tools/__tests__/projects.test.d.ts +2 -0
- package/dist/tools/__tests__/projects.test.d.ts.map +1 -0
- package/dist/tools/__tests__/projects.test.js +168 -0
- package/dist/tools/__tests__/projects.test.js.map +1 -0
- package/dist/tools/__tests__/sandbox.test.d.ts +2 -0
- package/dist/tools/__tests__/sandbox.test.d.ts.map +1 -0
- package/dist/tools/__tests__/sandbox.test.js +113 -0
- package/dist/tools/__tests__/sandbox.test.js.map +1 -0
- package/dist/tools/__tests__/social.test.d.ts +2 -0
- package/dist/tools/__tests__/social.test.d.ts.map +1 -0
- package/dist/tools/__tests__/social.test.js +127 -0
- package/dist/tools/__tests__/social.test.js.map +1 -0
- package/dist/tools/__tests__/swarms.test.d.ts +2 -0
- package/dist/tools/__tests__/swarms.test.d.ts.map +1 -0
- package/dist/tools/__tests__/swarms.test.js +320 -0
- package/dist/tools/__tests__/swarms.test.js.map +1 -0
- package/dist/tools/__tests__/templates.test.d.ts +2 -0
- package/dist/tools/__tests__/templates.test.d.ts.map +1 -0
- package/dist/tools/__tests__/templates.test.js +176 -0
- package/dist/tools/__tests__/templates.test.js.map +1 -0
- package/dist/tools/agents.d.ts +4 -0
- package/dist/tools/agents.d.ts.map +1 -0
- package/dist/tools/agents.js +170 -0
- package/dist/tools/agents.js.map +1 -0
- package/dist/tools/devtools.d.ts +4 -0
- package/dist/tools/devtools.d.ts.map +1 -0
- package/dist/tools/devtools.js +511 -0
- package/dist/tools/devtools.js.map +1 -0
- package/dist/tools/dispatcher.d.ts +4 -0
- package/dist/tools/dispatcher.d.ts.map +1 -0
- package/dist/tools/dispatcher.js +647 -0
- package/dist/tools/dispatcher.js.map +1 -0
- package/dist/tools/memory.d.ts +4 -0
- package/dist/tools/memory.d.ts.map +1 -0
- package/dist/tools/memory.js +92 -0
- package/dist/tools/memory.js.map +1 -0
- package/dist/tools/platform.d.ts +4 -0
- package/dist/tools/platform.d.ts.map +1 -0
- package/dist/tools/platform.js +359 -0
- package/dist/tools/platform.js.map +1 -0
- package/dist/tools/projects.d.ts +4 -0
- package/dist/tools/projects.d.ts.map +1 -0
- package/dist/tools/projects.js +79 -0
- package/dist/tools/projects.js.map +1 -0
- package/dist/tools/rate-limiter.d.ts +53 -0
- package/dist/tools/rate-limiter.d.ts.map +1 -0
- package/dist/tools/rate-limiter.js +87 -0
- package/dist/tools/rate-limiter.js.map +1 -0
- package/dist/tools/remaining.d.ts +8 -0
- package/dist/tools/remaining.d.ts.map +1 -0
- package/dist/tools/remaining.js +283 -0
- package/dist/tools/remaining.js.map +1 -0
- package/dist/tools/sandbox.d.ts +4 -0
- package/dist/tools/sandbox.d.ts.map +1 -0
- package/dist/tools/sandbox.js +35 -0
- package/dist/tools/sandbox.js.map +1 -0
- package/dist/tools/social.d.ts +11 -0
- package/dist/tools/social.d.ts.map +1 -0
- package/dist/tools/social.js +136 -0
- package/dist/tools/social.js.map +1 -0
- package/dist/tools/swarms.d.ts +4 -0
- package/dist/tools/swarms.d.ts.map +1 -0
- package/dist/tools/swarms.js +184 -0
- package/dist/tools/swarms.js.map +1 -0
- package/dist/tools/templates.d.ts +4 -0
- package/dist/tools/templates.d.ts.map +1 -0
- package/dist/tools/templates.js +102 -0
- package/dist/tools/templates.js.map +1 -0
- package/dist/tools/utils.d.ts +9 -0
- package/dist/tools/utils.d.ts.map +1 -0
- package/dist/tools/utils.js +8 -0
- package/dist/tools/utils.js.map +1 -0
- package/package.json +50 -0
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export function registerSandboxTools(registry, anonClient) {
|
|
3
|
+
// try_code requires no scopes — it uses an anonymous client
|
|
4
|
+
registry.tool('try_code', 'Execute code in a sandbox without authentication. Limited to 10 executions per day. Supports TypeScript, JavaScript, and Python.', [], {
|
|
5
|
+
code: z.string().describe('Code to execute'),
|
|
6
|
+
language: z
|
|
7
|
+
.enum(['javascript', 'typescript', 'python'])
|
|
8
|
+
.default('typescript')
|
|
9
|
+
.describe('Programming language'),
|
|
10
|
+
}, async ({ code, language }) => {
|
|
11
|
+
try {
|
|
12
|
+
const result = await anonClient.sandbox.execute({ code, language });
|
|
13
|
+
const lines = [
|
|
14
|
+
`Exit code: ${result.data.exitCode}`,
|
|
15
|
+
`Execution time: ${result.data.executionTime}ms`,
|
|
16
|
+
`Remaining executions today: ${result.meta.remaining_executions}`,
|
|
17
|
+
'',
|
|
18
|
+
'--- Output ---',
|
|
19
|
+
result.data.output || '(no output)',
|
|
20
|
+
];
|
|
21
|
+
if (result.data.error) {
|
|
22
|
+
lines.push('', `Error: ${result.data.error}`);
|
|
23
|
+
}
|
|
24
|
+
return { content: [{ type: 'text', text: lines.join('\n') }] };
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
28
|
+
return {
|
|
29
|
+
content: [{ type: 'text', text: `Error: ${message}` }],
|
|
30
|
+
isError: true,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=sandbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sandbox.js","sourceRoot":"","sources":["../../src/tools/sandbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,MAAM,UAAU,oBAAoB,CAAC,QAA4B,EAAE,UAAoB;IACrF,4DAA4D;IAC5D,QAAQ,CAAC,IAAI,CACX,UAAU,EACV,kIAAkI,EAClI,EAAE,EACF;QACE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;QAC5C,QAAQ,EAAE,CAAC;aACR,IAAI,CAAC,CAAC,YAAY,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;aAC5C,OAAO,CAAC,YAAY,CAAC;aACrB,QAAQ,CAAC,sBAAsB,CAAC;KACpC,EACD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAsE,EAAE,EAAE;QAC/F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YACpE,MAAM,KAAK,GAAG;gBACZ,cAAc,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE;gBACpC,mBAAmB,MAAM,CAAC,IAAI,CAAC,aAAa,IAAI;gBAChD,+BAA+B,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE;gBACjE,EAAE;gBACF,gBAAgB;gBAChB,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,aAAa;aACpC,CAAC;YACF,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,UAAU,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1E,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,UAAU,OAAO,EAAE,EAAE,CAAC;gBAC/D,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Recursiv } from '@recursiv/sdk';
|
|
2
|
+
import { type ScopedToolRegistry } from '../scopes.js';
|
|
3
|
+
/**
|
|
4
|
+
* Register social-media MCP tools.
|
|
5
|
+
*
|
|
6
|
+
* Write operations (create_post, generate_image, send_message) are
|
|
7
|
+
* RED-classified and routed through the approval gate. Read operations
|
|
8
|
+
* (list_posts, get_post, search_posts, etc.) execute immediately.
|
|
9
|
+
*/
|
|
10
|
+
export declare function registerSocialTools(registry: ScopedToolRegistry, client: Recursiv): void;
|
|
11
|
+
//# sourceMappingURL=social.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"social.d.ts","sourceRoot":"","sources":["../../src/tools/social.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAU,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAY/D;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,QA4MjF"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Scopes } from '../scopes.js';
|
|
3
|
+
import { requireApproval, checkApprovalStatus, } from '../lib/approval-gate.js';
|
|
4
|
+
/** MCP text response helper. */
|
|
5
|
+
function textResult(text) {
|
|
6
|
+
return { content: [{ type: 'text', text }] };
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Register social-media MCP tools.
|
|
10
|
+
*
|
|
11
|
+
* Write operations (create_post, generate_image, send_message) are
|
|
12
|
+
* RED-classified and routed through the approval gate. Read operations
|
|
13
|
+
* (list_posts, get_post, search_posts, etc.) execute immediately.
|
|
14
|
+
*/
|
|
15
|
+
export function registerSocialTools(registry, client) {
|
|
16
|
+
// Build approval config from the same env vars the SDK uses.
|
|
17
|
+
const baseUrl = (process.env.RECURSIV_BASE_URL || 'https://api.recursiv.io/api/v1').replace(/\/+$/, '');
|
|
18
|
+
const apiKey = process.env.RECURSIV_API_KEY || process.env.SOCIAL_DEV_API_KEY || '';
|
|
19
|
+
const orgId = process.env.RECURSIV_ORG_ID;
|
|
20
|
+
const defaultOrganizationId = process.env.RECURSIV_ORGANIZATION_ID || orgId;
|
|
21
|
+
if (!orgId) {
|
|
22
|
+
console.error('[approval-gate] RECURSIV_ORG_ID is not set — social write tools will operate WITHOUT approval gate. ' +
|
|
23
|
+
'Set RECURSIV_ORG_ID to enable RED-classified tool approval.');
|
|
24
|
+
}
|
|
25
|
+
const approvalConfig = orgId
|
|
26
|
+
? { baseUrl, apiKey, orgId }
|
|
27
|
+
: null;
|
|
28
|
+
// ── Read-only tools (no approval needed) ──────────────────────────
|
|
29
|
+
registry.tool('list_posts', 'List posts with optional filtering by community or author', [Scopes.POSTS_READ], {
|
|
30
|
+
limit: z.number().optional().describe('Max posts to return (default 20, max 100)'),
|
|
31
|
+
offset: z.number().optional().describe('Pagination offset'),
|
|
32
|
+
community_id: z.string().optional().describe('Filter by community UUID'),
|
|
33
|
+
author_id: z.string().optional().describe('Filter by author UUID'),
|
|
34
|
+
}, async (params) => {
|
|
35
|
+
const result = await client.posts.list(params);
|
|
36
|
+
return textResult(JSON.stringify(result, null, 2));
|
|
37
|
+
});
|
|
38
|
+
registry.tool('get_post', 'Get a specific post by ID with its replies', [Scopes.POSTS_READ], {
|
|
39
|
+
id: z.string().describe('Post UUID'),
|
|
40
|
+
}, async ({ id }) => {
|
|
41
|
+
const result = await client.posts.get(id);
|
|
42
|
+
return textResult(JSON.stringify(result, null, 2));
|
|
43
|
+
});
|
|
44
|
+
registry.tool('search_posts', 'Search posts by text query', [Scopes.POSTS_READ], {
|
|
45
|
+
q: z.string().describe('Search query'),
|
|
46
|
+
limit: z.number().optional().describe('Max results'),
|
|
47
|
+
offset: z.number().optional().describe('Pagination offset'),
|
|
48
|
+
}, async (params) => {
|
|
49
|
+
const result = await client.posts.search(params);
|
|
50
|
+
return textResult(JSON.stringify(result, null, 2));
|
|
51
|
+
});
|
|
52
|
+
registry.tool('list_communities', 'List public communities', [Scopes.COMMUNITIES_READ], {
|
|
53
|
+
limit: z.number().optional().describe('Max communities to return'),
|
|
54
|
+
offset: z.number().optional().describe('Pagination offset'),
|
|
55
|
+
}, async (params) => {
|
|
56
|
+
const result = await client.communities.list(params);
|
|
57
|
+
return textResult(JSON.stringify(result, null, 2));
|
|
58
|
+
});
|
|
59
|
+
registry.tool('list_conversations', 'List all conversations for the authenticated user', [Scopes.CHAT_READ], {
|
|
60
|
+
limit: z.number().optional().describe('Max conversations'),
|
|
61
|
+
offset: z.number().optional().describe('Pagination offset'),
|
|
62
|
+
}, async (params) => {
|
|
63
|
+
const result = await client.chat.conversations(params);
|
|
64
|
+
return textResult(JSON.stringify(result, null, 2));
|
|
65
|
+
});
|
|
66
|
+
// ── RED write tools (approval gate required) ──────────────────────
|
|
67
|
+
registry.tool('create_post', '[RED — requires admin approval] Create a new post, optionally with media attachments. Use generate_image first to create AI images, then pass the returned URLs here.', [Scopes.POSTS_WRITE], {
|
|
68
|
+
content: z.string().describe('Post content (max 5000 chars). Can be empty if media_urls is provided.'),
|
|
69
|
+
content_format: z
|
|
70
|
+
.enum(['plain', 'markdown'])
|
|
71
|
+
.optional()
|
|
72
|
+
.describe('Content format (default: plain)'),
|
|
73
|
+
organization_id: z.string().optional().describe('Organization to post in. Defaults to RECURSIV_ORGANIZATION_ID env var if set.'),
|
|
74
|
+
community_id: z.string().optional().describe('Post to a specific community'),
|
|
75
|
+
reply_to_id: z.string().optional().describe('Reply to another post'),
|
|
76
|
+
media_urls: z
|
|
77
|
+
.array(z.string())
|
|
78
|
+
.optional()
|
|
79
|
+
.describe('Array of media URLs to attach. Use generate_image to create AI images first.'),
|
|
80
|
+
}, async (params) => {
|
|
81
|
+
const gate = await requireApproval('create_post', params, approvalConfig);
|
|
82
|
+
if (!gate.allowed)
|
|
83
|
+
return textResult(gate.message);
|
|
84
|
+
const result = await client.posts.create({
|
|
85
|
+
...params,
|
|
86
|
+
organization_id: params.organization_id || defaultOrganizationId,
|
|
87
|
+
});
|
|
88
|
+
return textResult(JSON.stringify(result, null, 2));
|
|
89
|
+
});
|
|
90
|
+
registry.tool('generate_image', '[RED — requires admin approval] Generate an AI image using DALL-E, Flux, or Nano Banana. Returns a URL that can be used with create_post media_urls parameter.', [Scopes.POSTS_WRITE], {
|
|
91
|
+
prompt: z.string().describe('Text description of the image to generate'),
|
|
92
|
+
provider: z
|
|
93
|
+
.enum(['dall-e', 'flux', 'nano-banana'])
|
|
94
|
+
.optional()
|
|
95
|
+
.describe('Image generation provider (auto-detected from available API keys if omitted)'),
|
|
96
|
+
size: z
|
|
97
|
+
.enum(['256x256', '512x512', '1024x1024', '1024x1792', '1792x1024'])
|
|
98
|
+
.optional()
|
|
99
|
+
.describe('Image dimensions (default: 1024x1024)'),
|
|
100
|
+
style: z
|
|
101
|
+
.enum(['natural', 'vivid'])
|
|
102
|
+
.optional()
|
|
103
|
+
.describe('Image style, DALL-E only (default: vivid)'),
|
|
104
|
+
}, async (params) => {
|
|
105
|
+
const gate = await requireApproval('generate_image', params, approvalConfig);
|
|
106
|
+
if (!gate.allowed)
|
|
107
|
+
return textResult(gate.message);
|
|
108
|
+
const result = await client.media.generateImage(params);
|
|
109
|
+
return textResult(JSON.stringify(result, null, 2));
|
|
110
|
+
});
|
|
111
|
+
registry.tool('send_message', '[RED — requires admin approval] Send a message in a conversation', [Scopes.CHAT_WRITE], {
|
|
112
|
+
conversation_id: z.string().describe('Conversation UUID'),
|
|
113
|
+
content: z.string().describe('Message content'),
|
|
114
|
+
reply_to_id: z.string().optional().describe('Reply to a specific message'),
|
|
115
|
+
}, async (params) => {
|
|
116
|
+
const gate = await requireApproval('send_message', params, approvalConfig);
|
|
117
|
+
if (!gate.allowed)
|
|
118
|
+
return textResult(gate.message);
|
|
119
|
+
const result = await client.chat.send(params);
|
|
120
|
+
return textResult(JSON.stringify(result, null, 2));
|
|
121
|
+
});
|
|
122
|
+
// ── Approval status check tool ────────────────────────────────────
|
|
123
|
+
registry.tool('check_approval_status', 'Check the status of a pending approval request by its ID', [Scopes.POSTS_READ], {
|
|
124
|
+
approval_id: z.string().describe('Approval request UUID'),
|
|
125
|
+
}, async ({ approval_id }) => {
|
|
126
|
+
try {
|
|
127
|
+
const result = await checkApprovalStatus(approval_id, approvalConfig);
|
|
128
|
+
return textResult(JSON.stringify(result, null, 2));
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
132
|
+
return textResult(`Error checking approval: ${msg}`);
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=social.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"social.js","sourceRoot":"","sources":["../../src/tools/social.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarms.d.ts","sourceRoot":"","sources":["../../src/tools/swarms.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAU,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAI/D,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,QAiPhF"}
|
|
@@ -0,0 +1,184 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Scopes } from '../scopes.js';
|
|
3
|
+
const defaultOrgId = process.env.RECURSIV_ORGANIZATION_ID;
|
|
4
|
+
export function registerSwarmTools(registry, client) {
|
|
5
|
+
registry.tool('create_swarm', 'Create a new agent swarm — a coordination group with a goal, coordinator, and workers', [Scopes.AGENTS_WRITE], {
|
|
6
|
+
name: z.string().describe('Swarm name'),
|
|
7
|
+
coordinator_id: z.string().describe('UUID of the coordinator agent'),
|
|
8
|
+
goal: z.string().optional().describe('What the swarm should accomplish'),
|
|
9
|
+
project_id: z.string().optional().describe('Project UUID to scope the swarm'),
|
|
10
|
+
organization_id: z.string().optional().describe('Organization UUID (defaults to RECURSIV_ORGANIZATION_ID env var)'),
|
|
11
|
+
}, async (params) => {
|
|
12
|
+
try {
|
|
13
|
+
const result = await client.swarms.create({
|
|
14
|
+
...params,
|
|
15
|
+
organization_id: params.organization_id || defaultOrgId,
|
|
16
|
+
});
|
|
17
|
+
const swarm = result.data;
|
|
18
|
+
return {
|
|
19
|
+
content: [{ type: 'text', text: `Swarm created: ${swarm.name}\nID: ${swarm.id}\nStatus: ${swarm.status}\nCoordinator: ${swarm.coordinatorId}` }],
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
catch (e) {
|
|
23
|
+
return { content: [{ type: 'text', text: `Error creating swarm: ${e.message}` }], isError: true };
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
registry.tool('get_swarm', 'Get swarm details including all members', [Scopes.AGENTS_READ], {
|
|
27
|
+
swarm_id: z.string().describe('Swarm UUID'),
|
|
28
|
+
}, async (params) => {
|
|
29
|
+
try {
|
|
30
|
+
const result = await client.swarms.get(params.swarm_id);
|
|
31
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data, null, 2) }] };
|
|
32
|
+
}
|
|
33
|
+
catch (e) {
|
|
34
|
+
return { content: [{ type: 'text', text: `Error getting swarm: ${e.message}` }], isError: true };
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
registry.tool('list_swarms', 'List swarms (optionally filtered by project or status)', [Scopes.AGENTS_READ], {
|
|
38
|
+
organization_id: z.string().optional().describe('Organization UUID (defaults to RECURSIV_ORGANIZATION_ID env var)'),
|
|
39
|
+
project_id: z.string().optional().describe('Filter by project UUID'),
|
|
40
|
+
status: z.string().optional().describe('Filter by status (draft, active, completed, cancelled)'),
|
|
41
|
+
limit: z.number().optional().describe('Max results'),
|
|
42
|
+
}, async (params) => {
|
|
43
|
+
try {
|
|
44
|
+
const result = await client.swarms.list({
|
|
45
|
+
...params,
|
|
46
|
+
organization_id: params.organization_id || defaultOrgId,
|
|
47
|
+
});
|
|
48
|
+
const swarms = result.data;
|
|
49
|
+
if (swarms.length === 0) {
|
|
50
|
+
return { content: [{ type: 'text', text: 'No swarms found.' }] };
|
|
51
|
+
}
|
|
52
|
+
const text = swarms.map((s) => `[${s.status}] ${s.name} (${s.id}) — ${s.members?.length ?? 0} members${s.goal ? `\n Goal: ${s.goal}` : ''}`).join('\n');
|
|
53
|
+
return { content: [{ type: 'text', text }] };
|
|
54
|
+
}
|
|
55
|
+
catch (e) {
|
|
56
|
+
return { content: [{ type: 'text', text: `Error listing swarms: ${e.message}` }], isError: true };
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
registry.tool('add_swarm_member', 'Add an agent to a swarm as a worker or observer', [Scopes.AGENTS_WRITE], {
|
|
60
|
+
swarm_id: z.string().describe('Swarm UUID'),
|
|
61
|
+
agent_id: z.string().describe('Agent UUID to add'),
|
|
62
|
+
role: z.enum(['worker', 'observer']).optional().describe('Member role (default: worker)'),
|
|
63
|
+
}, async (params) => {
|
|
64
|
+
try {
|
|
65
|
+
const result = await client.swarms.addMember(params.swarm_id, {
|
|
66
|
+
agent_id: params.agent_id,
|
|
67
|
+
role: params.role,
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
content: [{ type: 'text', text: `Added agent ${params.agent_id} to swarm as ${result.data.role}` }],
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
catch (e) {
|
|
74
|
+
return { content: [{ type: 'text', text: `Error adding member: ${e.message}` }], isError: true };
|
|
75
|
+
}
|
|
76
|
+
});
|
|
77
|
+
registry.tool('activate_swarm', 'Activate a swarm — sets it to active and notifies the coordinator agent', [Scopes.AGENTS_WRITE], {
|
|
78
|
+
swarm_id: z.string().describe('Swarm UUID'),
|
|
79
|
+
}, async (params) => {
|
|
80
|
+
try {
|
|
81
|
+
const result = await client.swarms.activate(params.swarm_id);
|
|
82
|
+
return {
|
|
83
|
+
content: [{ type: 'text', text: `Swarm "${result.data.name}" is now active. Coordinator has been notified.` }],
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch (e) {
|
|
87
|
+
return { content: [{ type: 'text', text: `Error activating swarm: ${e.message}` }], isError: true };
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
registry.tool('complete_swarm', 'Mark a swarm as completed with an optional summary', [Scopes.AGENTS_WRITE], {
|
|
91
|
+
swarm_id: z.string().describe('Swarm UUID'),
|
|
92
|
+
summary: z.string().optional().describe('Completion summary'),
|
|
93
|
+
}, async (params) => {
|
|
94
|
+
try {
|
|
95
|
+
const result = await client.swarms.complete(params.swarm_id, { summary: params.summary });
|
|
96
|
+
return {
|
|
97
|
+
content: [{ type: 'text', text: `Swarm "${result.data.name}" completed.` }],
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
return { content: [{ type: 'text', text: `Error completing swarm: ${e.message}` }], isError: true };
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
registry.tool('cancel_swarm', 'Cancel an active swarm', [Scopes.AGENTS_WRITE], {
|
|
105
|
+
swarm_id: z.string().describe('Swarm UUID'),
|
|
106
|
+
}, async (params) => {
|
|
107
|
+
try {
|
|
108
|
+
const result = await client.swarms.cancel(params.swarm_id);
|
|
109
|
+
return {
|
|
110
|
+
content: [{ type: 'text', text: `Swarm "${result.data.name}" cancelled.` }],
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
catch (e) {
|
|
114
|
+
return { content: [{ type: 'text', text: `Error cancelling swarm: ${e.message}` }], isError: true };
|
|
115
|
+
}
|
|
116
|
+
});
|
|
117
|
+
// ── Scheduler tools ─────────────────────────────────────────────
|
|
118
|
+
registry.tool('schedule_agent_task', 'Schedule a task for an agent — one-shot or recurring', [Scopes.AGENTS_WRITE], {
|
|
119
|
+
agent_id: z.string().describe('Agent UUID'),
|
|
120
|
+
task_type: z.enum(['recurring', 'one_shot']).describe('Task type'),
|
|
121
|
+
message: z.string().optional().describe('Message to trigger the agent with (max 2000 chars)'),
|
|
122
|
+
action: z.enum(['post', 'reply', 'check_in']).optional().describe('Action type'),
|
|
123
|
+
channel_id: z.string().optional().describe('Target conversation UUID'),
|
|
124
|
+
delay_ms: z.number().optional().describe('Delay before first run (ms)'),
|
|
125
|
+
max_runs: z.number().optional().describe('Max number of runs (for recurring)'),
|
|
126
|
+
cron_expression: z.string().optional().describe('Cron expression for recurring tasks'),
|
|
127
|
+
}, async (params) => {
|
|
128
|
+
try {
|
|
129
|
+
const result = await client.swarms.scheduleTask({
|
|
130
|
+
agent_id: params.agent_id,
|
|
131
|
+
task_type: params.task_type,
|
|
132
|
+
payload: {
|
|
133
|
+
message: params.message,
|
|
134
|
+
channel_id: params.channel_id,
|
|
135
|
+
action: params.action,
|
|
136
|
+
},
|
|
137
|
+
delay_ms: params.delay_ms,
|
|
138
|
+
max_runs: params.max_runs,
|
|
139
|
+
cron_expression: params.cron_expression,
|
|
140
|
+
});
|
|
141
|
+
const task = result.data;
|
|
142
|
+
return {
|
|
143
|
+
content: [{ type: 'text', text: `Scheduled task created.\nID: ${task.id}\nType: ${task.taskType}\nStatus: ${task.status}\nNext run: ${task.nextRunAt}` }],
|
|
144
|
+
};
|
|
145
|
+
}
|
|
146
|
+
catch (e) {
|
|
147
|
+
return { content: [{ type: 'text', text: `Error scheduling task: ${e.message}` }], isError: true };
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
registry.tool('list_agent_schedules', "List an agent's scheduled tasks", [Scopes.AGENTS_READ], {
|
|
151
|
+
agent_id: z.string().describe('Agent UUID'),
|
|
152
|
+
}, async (params) => {
|
|
153
|
+
try {
|
|
154
|
+
const result = await client.swarms.listSchedules(params.agent_id);
|
|
155
|
+
const tasks = result.data;
|
|
156
|
+
if (tasks.length === 0) {
|
|
157
|
+
return { content: [{ type: 'text', text: 'No scheduled tasks found.' }] };
|
|
158
|
+
}
|
|
159
|
+
const text = tasks.map((t) => {
|
|
160
|
+
const payload = typeof t.payload === 'string' ? JSON.parse(t.payload) : t.payload;
|
|
161
|
+
return `[${t.status}] ${t.id} — ${t.taskType} (runs: ${t.runCount}/${t.maxRuns ?? 'inf'})\n Next: ${t.nextRunAt ?? 'N/A'}\n Action: ${payload.action ?? 'check_in'}`;
|
|
162
|
+
}).join('\n\n');
|
|
163
|
+
return { content: [{ type: 'text', text }] };
|
|
164
|
+
}
|
|
165
|
+
catch (e) {
|
|
166
|
+
return { content: [{ type: 'text', text: `Error listing schedules: ${e.message}` }], isError: true };
|
|
167
|
+
}
|
|
168
|
+
});
|
|
169
|
+
registry.tool('cancel_agent_schedule', 'Cancel a scheduled task for an agent', [Scopes.AGENTS_WRITE], {
|
|
170
|
+
task_id: z.string().describe('Scheduled task UUID'),
|
|
171
|
+
agent_id: z.string().describe('Agent UUID that owns the task'),
|
|
172
|
+
}, async (params) => {
|
|
173
|
+
try {
|
|
174
|
+
const result = await client.swarms.cancelSchedule(params.task_id, params.agent_id);
|
|
175
|
+
return {
|
|
176
|
+
content: [{ type: 'text', text: `Schedule ${params.task_id} cancelled. Status: ${result.data.status}` }],
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
catch (e) {
|
|
180
|
+
return { content: [{ type: 'text', text: `Error cancelling schedule: ${e.message}` }], isError: true };
|
|
181
|
+
}
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
//# sourceMappingURL=swarms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"swarms.js","sourceRoot":"","sources":["../../src/tools/swarms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.d.ts","sourceRoot":"","sources":["../../src/tools/templates.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAU,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE/D,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,kBAAkB,EAAE,MAAM,EAAE,QAAQ,QAuInF"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { Scopes } from '../scopes.js';
|
|
3
|
+
export function registerTemplateTools(registry, client) {
|
|
4
|
+
registry.tool('create_template', 'Create a new reusable infrastructure/workflow template', [Scopes.PROJECTS_WRITE], {
|
|
5
|
+
name: z.string().describe('Template name'),
|
|
6
|
+
description: z.string().optional().describe('Template description'),
|
|
7
|
+
tags: z.array(z.string()).optional().describe('Tags for categorization'),
|
|
8
|
+
infrastructure: z.record(z.string(), z.unknown()).optional().describe('Infrastructure manifest (JSON)'),
|
|
9
|
+
source_url: z.string().optional().describe('URL to source code or docs'),
|
|
10
|
+
author_agent_id: z.string().optional().describe('UUID of the authoring agent'),
|
|
11
|
+
}, async (params) => {
|
|
12
|
+
try {
|
|
13
|
+
const result = await client.templates.create(params);
|
|
14
|
+
const t = result.data;
|
|
15
|
+
return {
|
|
16
|
+
content: [{ type: 'text', text: `Template created: ${t.name}\nID: ${t.id}\nStatus: ${t.status}` }],
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
catch (e) {
|
|
20
|
+
return { content: [{ type: 'text', text: `Error creating template: ${e.message}` }], isError: true };
|
|
21
|
+
}
|
|
22
|
+
});
|
|
23
|
+
registry.tool('get_template', 'Get template details by ID', [Scopes.PROJECTS_READ], {
|
|
24
|
+
template_id: z.string().describe('Template UUID'),
|
|
25
|
+
}, async (params) => {
|
|
26
|
+
try {
|
|
27
|
+
const result = await client.templates.get(params.template_id);
|
|
28
|
+
return { content: [{ type: 'text', text: JSON.stringify(result.data, null, 2) }] };
|
|
29
|
+
}
|
|
30
|
+
catch (e) {
|
|
31
|
+
return { content: [{ type: 'text', text: `Error getting template: ${e.message}` }], isError: true };
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
registry.tool('list_templates', 'List templates (optionally filtered by status or search query)', [Scopes.PROJECTS_READ], {
|
|
35
|
+
status: z.string().optional().describe('Filter by status (draft, published, archived)'),
|
|
36
|
+
search: z.string().optional().describe('Search by name or description'),
|
|
37
|
+
limit: z.number().optional().describe('Max results'),
|
|
38
|
+
}, async (params) => {
|
|
39
|
+
try {
|
|
40
|
+
const result = await client.templates.list(params);
|
|
41
|
+
const templates = result.data;
|
|
42
|
+
if (templates.length === 0) {
|
|
43
|
+
return { content: [{ type: 'text', text: 'No templates found.' }] };
|
|
44
|
+
}
|
|
45
|
+
const text = templates.map((t) => `[${t.status}] ${t.name} (${t.id}) — ${t.forkCount} forks${t.description ? `\n ${t.description.substring(0, 100)}` : ''}`).join('\n');
|
|
46
|
+
return { content: [{ type: 'text', text }] };
|
|
47
|
+
}
|
|
48
|
+
catch (e) {
|
|
49
|
+
return { content: [{ type: 'text', text: `Error listing templates: ${e.message}` }], isError: true };
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
registry.tool('update_template', 'Update an existing template', [Scopes.PROJECTS_WRITE], {
|
|
53
|
+
template_id: z.string().describe('Template UUID'),
|
|
54
|
+
name: z.string().optional().describe('New name'),
|
|
55
|
+
description: z.string().optional().describe('New description'),
|
|
56
|
+
tags: z.array(z.string()).optional().describe('New tags'),
|
|
57
|
+
infrastructure: z.record(z.string(), z.unknown()).optional().describe('Updated infrastructure manifest'),
|
|
58
|
+
status: z.enum(['draft', 'published', 'archived']).optional().describe('New status'),
|
|
59
|
+
}, async (params) => {
|
|
60
|
+
try {
|
|
61
|
+
const { template_id, ...input } = params;
|
|
62
|
+
const result = await client.templates.update(template_id, input);
|
|
63
|
+
return {
|
|
64
|
+
content: [{ type: 'text', text: `Template "${result.data.name}" updated.` }],
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
catch (e) {
|
|
68
|
+
return { content: [{ type: 'text', text: `Error updating template: ${e.message}` }], isError: true };
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
registry.tool('publish_template', 'Publish a draft template so others can discover and fork it', [Scopes.PROJECTS_WRITE], {
|
|
72
|
+
template_id: z.string().describe('Template UUID'),
|
|
73
|
+
}, async (params) => {
|
|
74
|
+
try {
|
|
75
|
+
const result = await client.templates.publish(params.template_id);
|
|
76
|
+
return {
|
|
77
|
+
content: [{ type: 'text', text: `Template "${result.data.name}" is now published.` }],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (e) {
|
|
81
|
+
return { content: [{ type: 'text', text: `Error publishing template: ${e.message}` }], isError: true };
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
registry.tool('fork_template', 'Fork a template — creates a copy you can customize', [Scopes.PROJECTS_WRITE], {
|
|
85
|
+
template_id: z.string().describe('Template UUID to fork'),
|
|
86
|
+
author_agent_id: z.string().optional().describe('UUID of the forking agent'),
|
|
87
|
+
}, async (params) => {
|
|
88
|
+
try {
|
|
89
|
+
const result = await client.templates.fork(params.template_id, {
|
|
90
|
+
author_agent_id: params.author_agent_id,
|
|
91
|
+
});
|
|
92
|
+
const t = result.data;
|
|
93
|
+
return {
|
|
94
|
+
content: [{ type: 'text', text: `Forked template: ${t.name}\nNew ID: ${t.id}\nParent: ${t.parentTemplateId}` }],
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
return { content: [{ type: 'text', text: `Error forking template: ${e.message}` }], isError: true };
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templates.js","sourceRoot":"","sources":["../../src/tools/templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** Format error with full context (message, code, details) so MCP callers see what actually broke. */
|
|
2
|
+
export declare function fmtErr(prefix: string, e: any): {
|
|
3
|
+
content: {
|
|
4
|
+
type: 'text';
|
|
5
|
+
text: string;
|
|
6
|
+
}[];
|
|
7
|
+
isError: true;
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/tools/utils.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,GAAG;IAAE,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAAC,OAAO,EAAE,IAAI,CAAA;CAAE,CAK3G"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/** Format error with full context (message, code, details) so MCP callers see what actually broke. */
|
|
2
|
+
export function fmtErr(prefix, e) {
|
|
3
|
+
const msg = e.message || 'unknown error';
|
|
4
|
+
const code = e.code ? ` [${e.code}]` : '';
|
|
5
|
+
const detail = e.details ? ` — ${typeof e.details === 'string' ? e.details : JSON.stringify(e.details)}` : '';
|
|
6
|
+
return { content: [{ type: 'text', text: `${prefix}: ${msg}${code}${detail}` }], isError: true };
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/tools/utils.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,MAAM,UAAU,MAAM,CAAC,MAAc,EAAE,CAAM;IAC3C,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,IAAI,eAAe,CAAC;IACzC,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9G,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,GAAG,MAAM,KAAK,GAAG,GAAG,IAAI,GAAG,MAAM,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC5G,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@recursiv/mcp",
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "MCP server for Recursiv — give AI assistants access to your projects, agents, and social infrastructure",
|
|
5
|
+
"license": "FSL-1.1-ALv2",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"types": "./dist/index.d.ts",
|
|
9
|
+
"bin": {
|
|
10
|
+
"recursiv-mcp": "./dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"files": [
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"engines": {
|
|
17
|
+
"node": ">=18"
|
|
18
|
+
},
|
|
19
|
+
"scripts": {
|
|
20
|
+
"build": "tsc",
|
|
21
|
+
"start": "node dist/index.js",
|
|
22
|
+
"dev": "tsx src/index.ts",
|
|
23
|
+
"typecheck": "tsc --noEmit",
|
|
24
|
+
"test": "vitest run"
|
|
25
|
+
},
|
|
26
|
+
"dependencies": {
|
|
27
|
+
"@modelcontextprotocol/sdk": "^1.12.0",
|
|
28
|
+
"@recursiv/sdk": "workspace:*",
|
|
29
|
+
"dotenv": "^16.4.7",
|
|
30
|
+
"zod": "^4.3.5"
|
|
31
|
+
},
|
|
32
|
+
"devDependencies": {
|
|
33
|
+
"tsx": "^4.19.2",
|
|
34
|
+
"typescript": "~5.9.2",
|
|
35
|
+
"vitest": "^2.1.9"
|
|
36
|
+
},
|
|
37
|
+
"repository": {
|
|
38
|
+
"type": "git",
|
|
39
|
+
"url": "https://github.com/recursivlabs/recursiv.git",
|
|
40
|
+
"directory": "packages/mcp"
|
|
41
|
+
},
|
|
42
|
+
"bugs": {
|
|
43
|
+
"url": "https://github.com/recursivlabs/recursiv/issues"
|
|
44
|
+
},
|
|
45
|
+
"homepage": "https://github.com/recursivlabs/recursiv/tree/main/packages/mcp#readme",
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"registry": "https://registry.npmjs.org/",
|
|
48
|
+
"access": "public"
|
|
49
|
+
}
|
|
50
|
+
}
|