@forestadmin/mcp-server 1.14.0 → 1.15.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.
|
@@ -22,6 +22,6 @@ function createForestServerClient(options) {
|
|
|
22
22
|
...serviceOptions,
|
|
23
23
|
headers: { 'Forest-Application-Source': 'MCP' },
|
|
24
24
|
});
|
|
25
|
-
return new mcp_http_client_1.default(schemaService, activityLogsService);
|
|
25
|
+
return new mcp_http_client_1.default(schemaService, activityLogsService, options.forestServerUrl);
|
|
26
26
|
}
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaHR0cC1jbGllbnQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBV0EsNERBb0JDO0FBN0JELHdFQUFvRztBQUVwRyx3RUFBdUQ7QUE2QjlDLGlDQTdCRix5QkFBc0IsQ0E2QkU7QUF0Qi9CLFNBQWdCLHdCQUF3QixDQUN0QyxPQUF3QztJQUV4QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sSUFBSSxLQUFLLENBQUMsb0RBQW9ELENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxrQ0FBYSxFQUFFLENBQUM7SUFDMUMsTUFBTSxjQUFjLEdBQUc7UUFDckIsZUFBZSxFQUFFLE9BQU8sQ0FBQyxlQUFlO1FBQ3hDLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztLQUM3QixDQUFDO0lBRUYsTUFBTSxhQUFhLEdBQUcsSUFBSSxrQ0FBYSxDQUFDLGFBQWEsRUFBRSxjQUFjLENBQUMsQ0FBQztJQUN2RSxNQUFNLG1CQUFtQixHQUFHLElBQUksd0NBQW1CLENBQUMsYUFBYSxFQUFFO1FBQ2pFLEdBQUcsY0FBYztRQUNqQixPQUFPLEVBQUUsRUFBRSwyQkFBMkIsRUFBRSxLQUFLLEVBQUU7S0FDaEQsQ0FBQyxDQUFDO0lBRUgsT0FBTyxJQUFJLHlCQUFzQixDQUFDLGFBQWEsRUFBRSxtQkFBbUIsRUFBRSxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDakcsQ0FBQyJ9
|
|
@@ -6,7 +6,8 @@ import type { ActivityLogResponse, ActivityLogsServiceInterface, CreateActivityL
|
|
|
6
6
|
export default class ForestServerClientImpl implements ForestServerClient {
|
|
7
7
|
private readonly schemaService;
|
|
8
8
|
private readonly activityLogsService;
|
|
9
|
-
|
|
9
|
+
readonly forestServerUrl: string;
|
|
10
|
+
constructor(schemaService: SchemaServiceInterface, activityLogsService: ActivityLogsServiceInterface, forestServerUrl: string);
|
|
10
11
|
fetchSchema(): Promise<ForestSchemaCollection[]>;
|
|
11
12
|
createActivityLog(params: CreateActivityLogParams): Promise<ActivityLogResponse>;
|
|
12
13
|
createMcpActivityLog(params: CreateActivityLogParams): Promise<ActivityLogResponse>;
|
|
@@ -5,9 +5,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
5
5
|
* This provides a convenient API for MCP server operations.
|
|
6
6
|
*/
|
|
7
7
|
class ForestServerClientImpl {
|
|
8
|
-
constructor(schemaService, activityLogsService) {
|
|
8
|
+
constructor(schemaService, activityLogsService, forestServerUrl) {
|
|
9
9
|
this.schemaService = schemaService;
|
|
10
10
|
this.activityLogsService = activityLogsService;
|
|
11
|
+
this.forestServerUrl = forestServerUrl;
|
|
11
12
|
}
|
|
12
13
|
async fetchSchema() {
|
|
13
14
|
return this.schemaService.getSchema();
|
|
@@ -23,4 +24,4 @@ class ForestServerClientImpl {
|
|
|
23
24
|
}
|
|
24
25
|
}
|
|
25
26
|
exports.default = ForestServerClientImpl;
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWNwLWh0dHAtY2xpZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2h0dHAtY2xpZW50L21jcC1odHRwLWNsaWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQVVBOzs7R0FHRztBQUNILE1BQXFCLHNCQUFzQjtJQUN6QyxZQUNtQixhQUFxQyxFQUNyQyxtQkFBaUQsRUFDbEQsZUFBdUI7UUFGdEIsa0JBQWEsR0FBYixhQUFhLENBQXdCO1FBQ3JDLHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBOEI7UUFDbEQsb0JBQWUsR0FBZixlQUFlLENBQVE7SUFDdEMsQ0FBQztJQUVKLEtBQUssQ0FBQyxXQUFXO1FBQ2YsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3hDLENBQUM7SUFFRCxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBK0I7UUFDckQsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDNUQsQ0FBQztJQUVELEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUErQjtRQUN4RCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsS0FBSyxDQUFDLHVCQUF1QixDQUFDLE1BQXFDO1FBQ2pFLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLHVCQUF1QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ2xFLENBQUM7Q0FDRjtBQXRCRCx5Q0FzQkMifQ==
|
|
@@ -43,9 +43,19 @@ If you call executeAction with missing required fields, it will return an error
|
|
|
43
43
|
await action.setFields(options.values);
|
|
44
44
|
}
|
|
45
45
|
const result = await action.execute();
|
|
46
|
+
if ('approvalRequested' in result) {
|
|
47
|
+
return {
|
|
48
|
+
content: [
|
|
49
|
+
{
|
|
50
|
+
type: 'text',
|
|
51
|
+
text: 'Approval requested: this action requires approval by another user before it runs. A request has been created and is pending review.',
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
};
|
|
55
|
+
}
|
|
46
56
|
return { content: [{ type: 'text', text: JSON.stringify(result) }] };
|
|
47
57
|
},
|
|
48
58
|
});
|
|
49
59
|
}, logger);
|
|
50
60
|
}
|
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlY3V0ZS1hY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdG9vbHMvZXhlY3V0ZS1hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFnQkEsMkNBbUVDO0FBL0VELDREQUFvRTtBQUNwRSx3REFBK0Q7QUFDL0QsbUZBQWlFO0FBQ2pFLG1GQUF5RDtBQVN6RCxTQUF3Qix3QkFBd0IsQ0FDOUMsU0FBb0IsRUFDcEIsa0JBQXNDLEVBQ3RDLE1BQWMsRUFDZCxrQkFBNEIsRUFBRTtJQUU5QixNQUFNLGFBQWEsR0FBRyxJQUFBLDBDQUF5QixFQUFDLGVBQWUsQ0FBQyxDQUFDO0lBRWpFLE9BQU8sSUFBQSwyQkFBdUIsRUFDNUIsU0FBUyxFQUNULGVBQWUsRUFDZjtRQUNFLEtBQUssRUFBRSxtQkFBbUI7UUFDMUIsV0FBVyxFQUFFOzs7Ozs7O3lJQU9zSDtRQUNuSSxXQUFXLEVBQUUsYUFBYTtLQUMzQixFQUNELEtBQUssRUFBRSxPQUE4QixFQUFFLEtBQUssRUFBRSxFQUFFO1FBQzlDLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxNQUFNLElBQUEscUNBQXNCLEVBQUMsS0FBSyxFQUFFLGtCQUFrQixDQUFDLENBQUM7UUFFOUUsK0VBQStFO1FBQy9FLE1BQU0sU0FBUyxHQUFHLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQXdCLENBQUM7UUFFbkUsT0FBTyxJQUFBLDJCQUFlLEVBQUM7WUFDckIsa0JBQWtCO1lBQ2xCLE9BQU8sRUFBRSxLQUFLO1lBQ2QsTUFBTSxFQUFFLFFBQVE7WUFDaEIsT0FBTyxFQUFFO2dCQUNQLGNBQWMsRUFBRSxPQUFPLENBQUMsY0FBYztnQkFDdEMsU0FBUztnQkFDVCxLQUFLLEVBQUUseUJBQXlCLE9BQU8sQ0FBQyxVQUFVLEdBQUc7YUFDdEQ7WUFDRCxNQUFNO1lBQ04sU0FBUyxFQUFFLEtBQUssSUFBSSxFQUFFO2dCQUNwQixNQUFNLE1BQU0sR0FBRyxNQUFNLFNBQVM7cUJBQzNCLFVBQVUsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDO3FCQUNsQyxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUM7Z0JBRTdDLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO29CQUNuQixNQUFNLE1BQU0sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDO2dCQUN6QyxDQUFDO2dCQUVELE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO2dCQUV0QyxJQUFJLG1CQUFtQixJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUNsQyxPQUFPO3dCQUNMLE9BQU8sRUFBRTs0QkFDUDtnQ0FDRSxJQUFJLEVBQUUsTUFBTTtnQ0FDWixJQUFJLEVBQUUscUlBQXFJOzZCQUM1STt5QkFDRjtxQkFDRixDQUFDO2dCQUNKLENBQUM7Z0JBRUQsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztZQUN2RSxDQUFDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxFQUNELE1BQU0sQ0FDUCxDQUFDO0FBQ0osQ0FBQyJ9
|
|
@@ -7,6 +7,7 @@ export type AuthData = {
|
|
|
7
7
|
environmentId?: number;
|
|
8
8
|
projectId?: number;
|
|
9
9
|
environmentApiEndpoint: string;
|
|
10
|
+
forestServerToken?: string;
|
|
10
11
|
};
|
|
11
12
|
export default function buildClient(request: RequestHandlerExtra<ServerRequest, ServerNotification>): {
|
|
12
13
|
rpcClient: import("@forestadmin/agent-client").RemoteAgentClient<Record<string, unknown>>;
|
|
@@ -5,19 +5,24 @@ exports.buildClientWithActions = buildClientWithActions;
|
|
|
5
5
|
const agent_client_1 = require("@forestadmin/agent-client");
|
|
6
6
|
const schema_fetcher_1 = require("./schema-fetcher");
|
|
7
7
|
function createClient(options) {
|
|
8
|
-
const { request, actionEndpoints = {} } = options;
|
|
8
|
+
const { request, actionEndpoints = {}, forestServerUrl } = options;
|
|
9
9
|
const token = request.authInfo?.token;
|
|
10
10
|
const url = request.authInfo?.extra?.environmentApiEndpoint;
|
|
11
|
+
const { forestServerToken, renderingId } = (request.authInfo?.extra ?? {});
|
|
11
12
|
if (!token) {
|
|
12
13
|
throw new Error('Authentication token is missing');
|
|
13
14
|
}
|
|
14
15
|
if (!url || typeof url !== 'string') {
|
|
15
16
|
throw new Error('Environment API endpoint is missing or invalid');
|
|
16
17
|
}
|
|
18
|
+
const forestServer = forestServerUrl && forestServerToken && renderingId != null
|
|
19
|
+
? { serverUrl: forestServerUrl, serverToken: forestServerToken, renderingId }
|
|
20
|
+
: undefined;
|
|
17
21
|
const rpcClient = (0, agent_client_1.createRemoteAgentClient)({
|
|
18
22
|
token,
|
|
19
23
|
url,
|
|
20
24
|
actionEndpoints,
|
|
25
|
+
forestServer,
|
|
21
26
|
});
|
|
22
27
|
return {
|
|
23
28
|
rpcClient,
|
|
@@ -34,6 +39,10 @@ function buildClient(request) {
|
|
|
34
39
|
async function buildClientWithActions(request, forestServerClient) {
|
|
35
40
|
const schema = await (0, schema_fetcher_1.fetchForestSchema)(forestServerClient);
|
|
36
41
|
const actionEndpoints = (0, schema_fetcher_1.getActionEndpoints)(schema);
|
|
37
|
-
return createClient({
|
|
42
|
+
return createClient({
|
|
43
|
+
request,
|
|
44
|
+
actionEndpoints,
|
|
45
|
+
forestServerUrl: forestServerClient.forestServerUrl,
|
|
46
|
+
});
|
|
38
47
|
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQtY2FsbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3V0aWxzL2FnZW50LWNhbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXdEQSw4QkFJQztBQU1ELHdEQVlDO0FBekVELDREQUFvRTtBQUVwRSxxREFBeUU7QUFpQnpFLFNBQVMsWUFBWSxDQUFDLE9BQTJCO0lBQy9DLE1BQU0sRUFBRSxPQUFPLEVBQUUsZUFBZSxHQUFHLEVBQUUsRUFBRSxlQUFlLEVBQUUsR0FBRyxPQUFPLENBQUM7SUFDbkUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUM7SUFDdEMsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLEVBQUUsc0JBQXNCLENBQUM7SUFDNUQsTUFBTSxFQUFFLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUFLLElBQUksRUFBRSxDQUFhLENBQUM7SUFFdkYsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ1gsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDO0lBQ3JELENBQUM7SUFFRCxJQUFJLENBQUMsR0FBRyxJQUFJLE9BQU8sR0FBRyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0RBQWdELENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsTUFBTSxZQUFZLEdBQ2hCLGVBQWUsSUFBSSxpQkFBaUIsSUFBSSxXQUFXLElBQUksSUFBSTtRQUN6RCxDQUFDLENBQUMsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxXQUFXLEVBQUU7UUFDN0UsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUVoQixNQUFNLFNBQVMsR0FBRyxJQUFBLHNDQUF1QixFQUFDO1FBQ3hDLEtBQUs7UUFDTCxHQUFHO1FBQ0gsZUFBZTtRQUNmLFlBQVk7S0FDYixDQUFDLENBQUM7SUFFSCxPQUFPO1FBQ0wsU0FBUztRQUNULFFBQVEsRUFBRSxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQWlCO0tBQzlDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBd0IsV0FBVyxDQUNqQyxPQUErRDtJQUUvRCxPQUFPLFlBQVksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDbkMsQ0FBQztBQUVEOzs7R0FHRztBQUNJLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsT0FBK0QsRUFDL0Qsa0JBQXNDO0lBRXRDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSxrQ0FBaUIsRUFBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzNELE1BQU0sZUFBZSxHQUFHLElBQUEsbUNBQWtCLEVBQUMsTUFBTSxDQUFDLENBQUM7SUFFbkQsT0FBTyxZQUFZLENBQUM7UUFDbEIsT0FBTztRQUNQLGVBQWU7UUFDZixlQUFlLEVBQUUsa0JBQWtCLENBQUMsZUFBZTtLQUNwRCxDQUFDLENBQUM7QUFDTCxDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@forestadmin/mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.15.0",
|
|
4
4
|
"description": "Model Context Protocol server for Forest Admin with OAuth authentication",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"directory": "packages/mcp-server"
|
|
17
17
|
},
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@forestadmin/agent-client": "1.
|
|
19
|
+
"@forestadmin/agent-client": "1.8.0",
|
|
20
20
|
"@forestadmin/forestadmin-client": "1.40.3",
|
|
21
21
|
"@modelcontextprotocol/sdk": "^1.28.0",
|
|
22
22
|
"cors": "^2.8.5",
|