@frogbotai/plugin-mcp 0.34.0 → 0.36.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 +9 -1
- package/dist/index.d.ts +16 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -2
- package/dist/index.js.map +1 -1
- package/dist/tools.d.ts +35 -0
- package/dist/tools.d.ts.map +1 -0
- package/dist/tools.js +131 -0
- package/dist/tools.js.map +1 -0
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# @frogbotai/plugin-mcp
|
|
2
2
|
|
|
3
|
-
Expose your app's collections to external MCP clients.
|
|
3
|
+
Expose your app's collections and tools to external MCP clients.
|
|
4
4
|
|
|
5
5
|
```ts
|
|
6
6
|
import { apiKeysPlugin } from '@frogbotai/plugin-api-keys';
|
|
@@ -20,3 +20,11 @@ export default buildConfig({
|
|
|
20
20
|
Connect MCP clients to `/api/mcp` with a Bearer token minted by `@frogbotai/plugin-api-keys`. Revoked, malformed, and unknown keys are rejected. The plugin requires `apiKeysPlugin()` earlier in the plugin array.
|
|
21
21
|
|
|
22
22
|
Every app collection is exposed, and each call runs as the key's owner under the collection's access control. FrogBot's own collections (chats, API keys, logs) are never exposed. SSE is not supported.
|
|
23
|
+
|
|
24
|
+
Serve FrogBot tools, piece actions and piece instances with `tools`, the same list an agent takes. Each runs as the key's owner, with `ctx.agent.slug` set to `'mcp'`:
|
|
25
|
+
|
|
26
|
+
```ts
|
|
27
|
+
mcpPlugin({ tools: [lookupTicket, slack] });
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
A client tool, a duplicate slug, a slug a built-in tool uses, or an input schema MCP can't list (not an object, or not expressible as JSON Schema) is refused when the plugin is created.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import type { MCPPluginConfig } from '@payloadcms/plugin-mcp';
|
|
2
2
|
import type { Plugin } from 'frogbot';
|
|
3
|
-
|
|
4
|
-
export type
|
|
3
|
+
import type { AUTH_TOOLS, COLLECTION_TOOLS, McpTool } from './tools.js';
|
|
4
|
+
export type { McpTool } from './tools.js';
|
|
5
|
+
export { definePrompt } from '@payloadcms/plugin-mcp';
|
|
6
|
+
type PayloadCollectionOptions = NonNullable<NonNullable<MCPPluginConfig['collections']>[string]>;
|
|
7
|
+
type PayloadCollectionTools = NonNullable<PayloadCollectionOptions['tools']>;
|
|
8
|
+
export type McpCollectionOptions = Omit<PayloadCollectionOptions, 'tools'> & {
|
|
9
|
+
/** Turn off or reword Payload's built-in tools for this collection, or opt in to its auth tools. */
|
|
10
|
+
tools?: {
|
|
11
|
+
[K in keyof typeof COLLECTION_TOOLS | keyof typeof AUTH_TOOLS]?: PayloadCollectionTools[K];
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export type McpPluginOptions = Pick<MCPPluginConfig, 'disabled' | 'hooks' | 'mcp' | 'prompts' | 'resources'> & {
|
|
15
|
+
collections?: Record<string, McpCollectionOptions>;
|
|
16
|
+
/** FrogBot tools, piece actions and piece instances to serve, each named by its slug. */
|
|
17
|
+
tools?: readonly McpTool[];
|
|
18
|
+
};
|
|
5
19
|
export declare function mcpPlugin(options?: McpPluginOptions): Plugin;
|
|
6
20
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAGtC,OAAO,KAAK,EAAE,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAGxE,YAAY,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAEtD,KAAK,wBAAwB,GAAG,WAAW,CAAC,WAAW,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAEjG,KAAK,sBAAsB,GAAG,WAAW,CAAC,wBAAwB,CAAC,OAAO,CAAC,CAAC,CAAC;AAE7E,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,wBAAwB,EAAE,OAAO,CAAC,GAAG;IAC3E,oGAAoG;IACpG,KAAK,CAAC,EAAE;SACL,CAAC,IAAI,MAAM,OAAO,gBAAgB,GAAG,MAAM,OAAO,UAAU,CAAC,CAAC,EAAE,sBAAsB,CAAC,CAAC,CAAC;KAC3F,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG,IAAI,CACjC,eAAe,EACf,UAAU,GAAG,OAAO,GAAG,KAAK,GAAG,SAAS,GAAG,WAAW,CACvD,GAAG;IACF,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;IACnD,yFAAyF;IACzF,KAAK,CAAC,EAAE,SAAS,OAAO,EAAE,CAAC;CAC5B,CAAC;AAEF,wBAAgB,SAAS,CAAC,OAAO,GAAE,gBAAqB,GAAG,MAAM,CAsChE"}
|
package/dist/index.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { isApiKeyStrategy } from '@frogbotai/plugin-api-keys';
|
|
2
2
|
import { mcpPlugin as payloadMcpPlugin } from '@payloadcms/plugin-mcp';
|
|
3
3
|
import { authorizeMcp } from './access.js';
|
|
4
|
-
|
|
4
|
+
import { toPayloadTools } from './tools.js';
|
|
5
|
+
export { definePrompt } from '@payloadcms/plugin-mcp';
|
|
5
6
|
export function mcpPlugin(options = {}) {
|
|
7
|
+
const { tools = [], ...rest } = options;
|
|
8
|
+
const payloadTools = toPayloadTools(tools);
|
|
6
9
|
return (config)=>{
|
|
7
10
|
const apiKeyStrategy = config.collections.flatMap((collection)=>{
|
|
8
11
|
const auth = typeof collection.auth === 'object' ? collection.auth : undefined;
|
|
@@ -19,7 +22,8 @@ export function mcpPlugin(options = {}) {
|
|
|
19
22
|
_payloadPlugins: [
|
|
20
23
|
...config._payloadPlugins ?? [],
|
|
21
24
|
payloadMcpPlugin({
|
|
22
|
-
...
|
|
25
|
+
...rest,
|
|
26
|
+
tools: payloadTools,
|
|
23
27
|
overrideGetAuthorizedMCP: ({ pluginConfig, req })=>authorizeMcp({
|
|
24
28
|
collection: apiKeyStrategy.collection,
|
|
25
29
|
strategy: apiKeyStrategy.strategy,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"names":["isApiKeyStrategy","mcpPlugin","payloadMcpPlugin","authorizeMcp","
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["isApiKeyStrategy","mcpPlugin","payloadMcpPlugin","authorizeMcp","toPayloadTools","definePrompt","options","tools","rest","payloadTools","config","apiKeyStrategy","collections","flatMap","collection","auth","undefined","strategies","map","strategy","slug","find","Error","_payloadPlugins","overrideGetAuthorizedMCP","pluginConfig","req"],"mappings":"AAAA,SAASA,gBAAgB,QAAQ,6BAA6B;AAE9D,SAASC,aAAaC,gBAAgB,QAAQ,yBAAyB;AAGvE,SAASC,YAAY,QAAQ,cAAc;AAE3C,SAASC,cAAc,QAAQ,aAAa;AAG5C,SAASC,YAAY,QAAQ,yBAAyB;AAsBtD,OAAO,SAASJ,UAAUK,UAA4B,CAAC,CAAC;IACtD,MAAM,EAAEC,QAAQ,EAAE,EAAE,GAAGC,MAAM,GAAGF;IAChC,MAAMG,eAAeL,eAAeG;IAEpC,OAAO,CAACG;QACN,MAAMC,iBAAiBD,OAAOE,WAAW,CACtCC,OAAO,CAAC,CAACC;YACR,MAAMC,OAAO,OAAOD,WAAWC,IAAI,KAAK,WAAWD,WAAWC,IAAI,GAAGC;YAErE,OAAO,AAACD,CAAAA,MAAME,cAAc,EAAE,AAAD,EAAGC,GAAG,CAAC,CAACC,WAAc,CAAA;oBACjDL,YAAYA,WAAWM,IAAI;oBAC3BD;gBACF,CAAA;QACF,GACCE,IAAI,CAAC,CAAC,EAAEF,QAAQ,EAAE,GAAKnB,iBAAiBmB;QAE3C,IAAI,CAACR,gBAAgB;YACnB,MAAM,IAAIW,MAAM;QAClB;QAEA,OAAO;YACL,GAAGZ,MAAM;YACTa,iBAAiB;mBACXb,OAAOa,eAAe,IAAI,EAAE;gBAChCrB,iBAAiB;oBACf,GAAGM,IAAI;oBACPD,OAAOE;oBACPe,0BAA0B,CAAC,EAAEC,YAAY,EAAEC,GAAG,EAAE,GAC9CvB,aAAa;4BACXW,YAAYH,eAAeG,UAAU;4BACrCK,UAAUR,eAAeQ,QAAQ;4BACjCM;4BACAC;wBACF;gBACJ;aACD;QACH;IACF;AACF","file":"index.js"}
|
package/dist/tools.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { MCPPluginConfig } from '@payloadcms/plugin-mcp';
|
|
2
|
+
import type { PieceAction, PieceInstance } from 'frogbot';
|
|
3
|
+
import type { AnyTool } from 'frogbot/internal';
|
|
4
|
+
type PayloadTool = NonNullable<MCPPluginConfig['tools']>[string];
|
|
5
|
+
export type McpTool = AnyTool | PieceAction | PieceInstance;
|
|
6
|
+
/** Payload's built-in collection tools: config key → MCP wire name. */
|
|
7
|
+
export declare const COLLECTION_TOOLS: {
|
|
8
|
+
readonly count: "countDocuments";
|
|
9
|
+
readonly countVersions: "countVersions";
|
|
10
|
+
readonly create: "createDocuments";
|
|
11
|
+
readonly delete: "deleteDocuments";
|
|
12
|
+
readonly duplicate: "duplicateDocument";
|
|
13
|
+
readonly find: "findDocuments";
|
|
14
|
+
readonly findDistinct: "findDistinct";
|
|
15
|
+
readonly findVersionByID: "findVersionByID";
|
|
16
|
+
readonly findVersions: "findVersions";
|
|
17
|
+
readonly getCollectionSchema: "getCollectionSchema";
|
|
18
|
+
readonly getUploadInstructions: "getUploadInstructions";
|
|
19
|
+
readonly restoreVersion: "restoreVersion";
|
|
20
|
+
readonly update: "updateDocument";
|
|
21
|
+
};
|
|
22
|
+
/** Payload's opt-in auth collection tools: config key → MCP wire name. */
|
|
23
|
+
export declare const AUTH_TOOLS: {
|
|
24
|
+
readonly auth: "auth";
|
|
25
|
+
readonly forgotPassword: "forgotPassword";
|
|
26
|
+
readonly login: "login";
|
|
27
|
+
readonly resetPassword: "resetPassword";
|
|
28
|
+
readonly unlock: "unlock";
|
|
29
|
+
readonly verify: "verify";
|
|
30
|
+
};
|
|
31
|
+
/** MCP names Payload's plugin registers itself. Payload doesn't export them. */
|
|
32
|
+
export declare const RESERVED_TOOL_NAMES: ReadonlySet<string>;
|
|
33
|
+
export declare function toPayloadTools(tools: readonly McpTool[]): Record<string, PayloadTool>;
|
|
34
|
+
export {};
|
|
35
|
+
//# sourceMappingURL=tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../src/tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAGhD,KAAK,WAAW,GAAG,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;AAIjE,MAAM,MAAM,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,aAAa,CAAC;AAE5D,uEAAuE;AACvE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;CAcnB,CAAC;AAEX,0EAA0E;AAC1E,eAAO,MAAM,UAAU;;;;;;;CAOb,CAAC;AAEX,gFAAgF;AAChF,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAIlD,CAAC;AAEH,wBAAgB,cAAc,CAAC,KAAK,EAAE,SAAS,OAAO,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CA0DrF"}
|
package/dist/tools.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
2
|
+
import { attachRegisteredFrogBot, isClientTool, sanitizeToolList } from 'frogbot/internal';
|
|
3
|
+
/** Payload's built-in collection tools: config key → MCP wire name. */ export const COLLECTION_TOOLS = {
|
|
4
|
+
count: 'countDocuments',
|
|
5
|
+
countVersions: 'countVersions',
|
|
6
|
+
create: 'createDocuments',
|
|
7
|
+
delete: 'deleteDocuments',
|
|
8
|
+
duplicate: 'duplicateDocument',
|
|
9
|
+
find: 'findDocuments',
|
|
10
|
+
findDistinct: 'findDistinct',
|
|
11
|
+
findVersionByID: 'findVersionByID',
|
|
12
|
+
findVersions: 'findVersions',
|
|
13
|
+
getCollectionSchema: 'getCollectionSchema',
|
|
14
|
+
getUploadInstructions: 'getUploadInstructions',
|
|
15
|
+
restoreVersion: 'restoreVersion',
|
|
16
|
+
update: 'updateDocument'
|
|
17
|
+
};
|
|
18
|
+
/** Payload's opt-in auth collection tools: config key → MCP wire name. */ export const AUTH_TOOLS = {
|
|
19
|
+
auth: 'auth',
|
|
20
|
+
forgotPassword: 'forgotPassword',
|
|
21
|
+
login: 'login',
|
|
22
|
+
resetPassword: 'resetPassword',
|
|
23
|
+
unlock: 'unlock',
|
|
24
|
+
verify: 'verify'
|
|
25
|
+
};
|
|
26
|
+
/** MCP names Payload's plugin registers itself. Payload doesn't export them. */ export const RESERVED_TOOL_NAMES = new Set([
|
|
27
|
+
'getConfigInfo',
|
|
28
|
+
...Object.values(COLLECTION_TOOLS),
|
|
29
|
+
...Object.values(AUTH_TOOLS)
|
|
30
|
+
]);
|
|
31
|
+
export function toPayloadTools(tools) {
|
|
32
|
+
let sanitized;
|
|
33
|
+
try {
|
|
34
|
+
sanitized = sanitizeToolList(tools, 'mcpPlugin tools');
|
|
35
|
+
} catch (error) {
|
|
36
|
+
if (error instanceof Error) {
|
|
37
|
+
throw new Error(error.message.replace(/^\[frogbot\]/, '[plugin-mcp]'), {
|
|
38
|
+
cause: error
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
throw error;
|
|
42
|
+
}
|
|
43
|
+
const payloadTools = {};
|
|
44
|
+
for (const tool of sanitized){
|
|
45
|
+
if (isClientTool(tool)) {
|
|
46
|
+
throw new Error(`[plugin-mcp] Tool '${tool.slug}' is a client tool, which can't run over MCP.`);
|
|
47
|
+
}
|
|
48
|
+
if (RESERVED_TOOL_NAMES.has(tool.slug)) {
|
|
49
|
+
throw new Error(`[plugin-mcp] Tool '${tool.slug}' has the name of a built-in Payload MCP tool.`);
|
|
50
|
+
}
|
|
51
|
+
assertListableSchema(tool.slug, tool.inputSchema);
|
|
52
|
+
const { execute } = tool;
|
|
53
|
+
payloadTools[tool.slug] = {
|
|
54
|
+
description: tool.description,
|
|
55
|
+
input: tool.inputSchema,
|
|
56
|
+
handler: async ({ input, req })=>{
|
|
57
|
+
try {
|
|
58
|
+
const frogbotReq = attachRegisteredFrogBot(req);
|
|
59
|
+
const result = await execute(input, {
|
|
60
|
+
req: frogbotReq,
|
|
61
|
+
frogbot: frogbotReq.frogbot,
|
|
62
|
+
agent: {
|
|
63
|
+
slug: 'mcp',
|
|
64
|
+
runId: randomUUID()
|
|
65
|
+
}
|
|
66
|
+
});
|
|
67
|
+
return toResponse(result);
|
|
68
|
+
} catch (error) {
|
|
69
|
+
return {
|
|
70
|
+
content: [
|
|
71
|
+
{
|
|
72
|
+
type: 'text',
|
|
73
|
+
text: error instanceof Error ? error.message : String(error)
|
|
74
|
+
}
|
|
75
|
+
],
|
|
76
|
+
isError: true
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
return payloadTools;
|
|
83
|
+
}
|
|
84
|
+
function assertListableSchema(slug, schema) {
|
|
85
|
+
let type;
|
|
86
|
+
try {
|
|
87
|
+
type = schema['~standard'].jsonSchema?.input({
|
|
88
|
+
target: 'draft-2020-12'
|
|
89
|
+
}).type;
|
|
90
|
+
} catch (error) {
|
|
91
|
+
throw new Error(`[plugin-mcp] Tool '${slug}' has an input schema MCP can't describe as JSON Schema: ${error instanceof Error ? error.message : String(error)}`, {
|
|
92
|
+
cause: error
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
if (type !== undefined && type !== 'object') {
|
|
96
|
+
throw new Error(`[plugin-mcp] Tool '${slug}' needs an object input schema, like z.object({...}).`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
function toResponse(result) {
|
|
100
|
+
if (typeof result === 'string') return {
|
|
101
|
+
content: [
|
|
102
|
+
{
|
|
103
|
+
type: 'text',
|
|
104
|
+
text: result
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
};
|
|
108
|
+
const text = JSON.stringify(result ?? null) ?? 'null';
|
|
109
|
+
const json = JSON.parse(text);
|
|
110
|
+
if (typeof json === 'object' && json !== null && !Array.isArray(json)) {
|
|
111
|
+
return {
|
|
112
|
+
content: [
|
|
113
|
+
{
|
|
114
|
+
type: 'text',
|
|
115
|
+
text
|
|
116
|
+
}
|
|
117
|
+
],
|
|
118
|
+
structuredContent: Object.fromEntries(Object.entries(json))
|
|
119
|
+
};
|
|
120
|
+
}
|
|
121
|
+
return {
|
|
122
|
+
content: [
|
|
123
|
+
{
|
|
124
|
+
type: 'text',
|
|
125
|
+
text
|
|
126
|
+
}
|
|
127
|
+
]
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
//# sourceMappingURL=tools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/tools.ts"],"names":["randomUUID","attachRegisteredFrogBot","isClientTool","sanitizeToolList","COLLECTION_TOOLS","count","countVersions","create","delete","duplicate","find","findDistinct","findVersionByID","findVersions","getCollectionSchema","getUploadInstructions","restoreVersion","update","AUTH_TOOLS","auth","forgotPassword","login","resetPassword","unlock","verify","RESERVED_TOOL_NAMES","Set","Object","values","toPayloadTools","tools","sanitized","error","Error","message","replace","cause","payloadTools","tool","slug","has","assertListableSchema","inputSchema","execute","description","input","handler","req","frogbotReq","result","frogbot","agent","runId","toResponse","content","type","text","String","isError","schema","jsonSchema","target","undefined","JSON","stringify","json","parse","Array","isArray","structuredContent","fromEntries","entries"],"mappings":"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","file":"tools.js"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@frogbotai/plugin-mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.36.0",
|
|
4
4
|
"description": "Payload MCP integration for FrogBot.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "Colby Gilbert",
|
|
@@ -27,19 +27,19 @@
|
|
|
27
27
|
"node": ">=24.21.0"
|
|
28
28
|
},
|
|
29
29
|
"dependencies": {
|
|
30
|
-
"@payloadcms/plugin-mcp": "4.0.0-beta.
|
|
30
|
+
"@payloadcms/plugin-mcp": "4.0.0-beta.4"
|
|
31
31
|
},
|
|
32
32
|
"peerDependencies": {
|
|
33
|
-
"payload": "4.0.0-beta.
|
|
34
|
-
"
|
|
35
|
-
"
|
|
33
|
+
"payload": "4.0.0-beta.4",
|
|
34
|
+
"frogbot": "0.36.0",
|
|
35
|
+
"@frogbotai/plugin-api-keys": "0.36.0"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
|
-
"payload": "4.0.0-beta.
|
|
38
|
+
"payload": "4.0.0-beta.4",
|
|
39
39
|
"typescript": "6.0.3",
|
|
40
|
-
"@frogbotai/plugin-api-keys": "0.
|
|
41
|
-
"@frogbotai/plugin-roles": "0.
|
|
42
|
-
"frogbot": "0.
|
|
40
|
+
"@frogbotai/plugin-api-keys": "0.36.0",
|
|
41
|
+
"@frogbotai/plugin-roles": "0.36.0",
|
|
42
|
+
"frogbot": "0.36.0"
|
|
43
43
|
},
|
|
44
44
|
"publishConfig": {
|
|
45
45
|
"access": "public"
|
|
@@ -47,6 +47,6 @@
|
|
|
47
47
|
"scripts": {
|
|
48
48
|
"build": "node ../../../scripts/build-package.mjs",
|
|
49
49
|
"clean": "rm -rf dist",
|
|
50
|
-
"typecheck": "tsc --noEmit"
|
|
50
|
+
"typecheck": "tsc --noEmit && tsc --noEmit -p ../../../test/types/plugin-mcp/tsconfig.json"
|
|
51
51
|
}
|
|
52
52
|
}
|