@rynko/mcp-server 1.0.16 → 1.0.17
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/dist/index.js +94 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -49,10 +49,40 @@ if (!RYNKO_USER_TOKEN.startsWith('pat_')) {
|
|
|
49
49
|
}
|
|
50
50
|
// Initialize API client
|
|
51
51
|
const client = new RynkoClient(RYNKO_USER_TOKEN, RYNKO_API_URL);
|
|
52
|
+
// ── Session state: workspace selection ──
|
|
53
|
+
// Per-session (per-process) workspace tracking. The AI must call
|
|
54
|
+
// list_workspaces, confirm the choice with the user, then call
|
|
55
|
+
// select_workspace before any workspace-scoped tool will execute.
|
|
56
|
+
let selectedWorkspaceId = null;
|
|
57
|
+
// Tools that do NOT require a workspace to be selected first.
|
|
58
|
+
const WORKSPACE_FREE_TOOLS = new Set([
|
|
59
|
+
'list_workspaces',
|
|
60
|
+
'select_workspace',
|
|
61
|
+
'get_sdk_examples',
|
|
62
|
+
'parse_data_file',
|
|
63
|
+
'validate_schema',
|
|
64
|
+
'get_schema_reference',
|
|
65
|
+
'get_job_status',
|
|
66
|
+
]);
|
|
67
|
+
// The select_workspace tool definition — injected client-side, not from the backend.
|
|
68
|
+
const SELECT_WORKSPACE_TOOL = {
|
|
69
|
+
name: 'select_workspace',
|
|
70
|
+
description: 'Select the workspace for this session. You MUST call list_workspaces first, present the options to the user, and let them choose before calling this tool. All subsequent workspace-scoped operations (templates, documents, assets) will require the workspace_id to match the selected workspace. Call this again to switch workspaces.',
|
|
71
|
+
inputSchema: {
|
|
72
|
+
type: 'object',
|
|
73
|
+
properties: {
|
|
74
|
+
workspace_id: {
|
|
75
|
+
type: 'string',
|
|
76
|
+
description: 'The workspace ID chosen by the user from the list_workspaces results.',
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
required: ['workspace_id'],
|
|
80
|
+
},
|
|
81
|
+
};
|
|
52
82
|
// Create MCP server
|
|
53
83
|
const server = new Server({
|
|
54
84
|
name: 'rynko-mcp',
|
|
55
|
-
version: '1.0.
|
|
85
|
+
version: '1.0.17',
|
|
56
86
|
}, {
|
|
57
87
|
capabilities: {
|
|
58
88
|
tools: {},
|
|
@@ -66,14 +96,17 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
66
96
|
log('Handling ListTools request');
|
|
67
97
|
try {
|
|
68
98
|
const { tools } = await client.listTools();
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
99
|
+
// Inject the select_workspace tool at the start
|
|
100
|
+
const allTools = [
|
|
101
|
+
SELECT_WORKSPACE_TOOL,
|
|
102
|
+
...tools.map((tool) => ({
|
|
72
103
|
name: tool.name,
|
|
73
104
|
description: tool.description,
|
|
74
105
|
inputSchema: tool.inputSchema,
|
|
75
106
|
})),
|
|
76
|
-
|
|
107
|
+
];
|
|
108
|
+
log(`Returning ${allTools.length} tools (${tools.length} from backend + select_workspace)`);
|
|
109
|
+
return { tools: allTools };
|
|
77
110
|
}
|
|
78
111
|
catch (error) {
|
|
79
112
|
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
@@ -87,6 +120,62 @@ server.setRequestHandler(ListToolsRequestSchema, async () => {
|
|
|
87
120
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
88
121
|
const { name, arguments: args } = request.params;
|
|
89
122
|
log(`Handling CallTool request: ${name}`);
|
|
123
|
+
// ── Handle select_workspace locally ──
|
|
124
|
+
if (name === 'select_workspace') {
|
|
125
|
+
const workspaceId = args?.workspace_id;
|
|
126
|
+
if (!workspaceId) {
|
|
127
|
+
return {
|
|
128
|
+
content: [{ type: 'text', text: 'Error: workspace_id is required.' }],
|
|
129
|
+
isError: true,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
selectedWorkspaceId = workspaceId;
|
|
133
|
+
log(`Workspace selected: ${workspaceId}`);
|
|
134
|
+
return {
|
|
135
|
+
content: [
|
|
136
|
+
{
|
|
137
|
+
type: 'text',
|
|
138
|
+
text: `Workspace ${workspaceId} selected for this session. You can now use template, document, and asset tools with this workspace.`,
|
|
139
|
+
},
|
|
140
|
+
],
|
|
141
|
+
isError: false,
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
// ── Enforce workspace selection for workspace-scoped tools ──
|
|
145
|
+
if (!WORKSPACE_FREE_TOOLS.has(name)) {
|
|
146
|
+
if (!selectedWorkspaceId) {
|
|
147
|
+
log(`BLOCKED ${name}: no workspace selected`);
|
|
148
|
+
return {
|
|
149
|
+
content: [
|
|
150
|
+
{
|
|
151
|
+
type: 'text',
|
|
152
|
+
text: 'Error: No workspace selected. Before using this tool you must:\n\n'
|
|
153
|
+
+ '1. Call list_workspaces to see available workspaces\n'
|
|
154
|
+
+ '2. Ask the user which workspace to use\n'
|
|
155
|
+
+ '3. Call select_workspace with the chosen workspace_id\n\n'
|
|
156
|
+
+ 'Then retry this operation.',
|
|
157
|
+
},
|
|
158
|
+
],
|
|
159
|
+
isError: true,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
// Validate that workspace_id in args matches the selected workspace
|
|
163
|
+
const passedWorkspaceId = args?.workspace_id;
|
|
164
|
+
if (passedWorkspaceId && passedWorkspaceId !== selectedWorkspaceId) {
|
|
165
|
+
log(`BLOCKED ${name}: workspace_id mismatch (passed=${passedWorkspaceId}, selected=${selectedWorkspaceId})`);
|
|
166
|
+
return {
|
|
167
|
+
content: [
|
|
168
|
+
{
|
|
169
|
+
type: 'text',
|
|
170
|
+
text: `Error: workspace_id "${passedWorkspaceId}" does not match the selected workspace "${selectedWorkspaceId}". `
|
|
171
|
+
+ 'Call select_workspace with the new workspace_id first if you want to switch workspaces.',
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
isError: true,
|
|
175
|
+
};
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// ── Forward to backend ──
|
|
90
179
|
try {
|
|
91
180
|
const result = await client.callTool(name, args || {});
|
|
92
181
|
log(`Tool ${name} completed successfully`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,SAAS,EACT,QAAQ,GACT,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,qDAAqD;AACrD,SAAS,GAAG,CAAC,OAAe;IAC1B,OAAO,CAAC,KAAK,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC;AAC1C,CAAC;AAED,qCAAqC;AACrC,MAAM,gBAAgB,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC;AACtD,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC;AAEhD,GAAG,CAAC,8BAA8B,CAAC,CAAC;AACpC,GAAG,CAAC,kBAAkB,CAAC,CAAC,gBAAgB,EAAE,CAAC,CAAC;AAC5C,GAAG,CAAC,YAAY,aAAa,IAAI,qCAAqC,EAAE,CAAC,CAAC;AAE1E,iBAAiB;AACjB,IAAI,CAAC,gBAAgB,EAAE,CAAC;IACtB,GAAG,CAAC,0DAA0D,CAAC,CAAC;IAChE,GAAG,CAAC,wDAAwD,CAAC,CAAC;IAC9D,GAAG,CAAC,oDAAoD,CAAC,CAAC;IAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,IAAI,CAAC,gBAAgB,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;IACzC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,wBAAwB;AACxB,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,gBAAgB,EAAE,aAAa,CAAC,CAAC;AAEhE,oBAAoB;AACpB,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB;IACE,IAAI,EAAE,WAAW;IACjB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED